初始上传
This commit is contained in:
105
addon/membercancel/api/controller/Membercancel.php
Executable file
105
addon/membercancel/api/controller/Membercancel.php
Executable file
@@ -0,0 +1,105 @@
|
||||
<?php
|
||||
/**
|
||||
* Index.php
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2015-2025 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
* @author : niuteam
|
||||
* @date : 2022.8.8
|
||||
* @version : v5.0.0.1
|
||||
*/
|
||||
|
||||
namespace addon\membercancel\api\controller;
|
||||
|
||||
use app\api\controller\BaseApi;
|
||||
use addon\membercancel\model\MemberCancel as MemberCancelModel;
|
||||
use app\model\member\Config as ConfigModel;
|
||||
|
||||
/**
|
||||
* 会员注销
|
||||
* Class MemberCancel
|
||||
* @package app\api\controller
|
||||
*/
|
||||
class Membercancel extends BaseApi
|
||||
{
|
||||
|
||||
/**
|
||||
* 获取注销信息
|
||||
*/
|
||||
public function info()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
if ($token[ 'code' ] < 0) return $this->response($token);
|
||||
|
||||
$member_cancel_model = new MemberCancelModel();
|
||||
$member_cancel_info = $member_cancel_model->getMemberCancelInfo([
|
||||
[ 'member_id', '=', $this->member_id ],
|
||||
[ 'site_id', '=', $this->site_id ]
|
||||
], 'id,status,reason,audit_time');
|
||||
return $this->response($member_cancel_info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 账户信息
|
||||
*/
|
||||
public function accountInfo()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
if ($token[ 'code' ] < 0) return $this->response($token);
|
||||
|
||||
$member_cancel_model = new MemberCancelModel();
|
||||
$member_account_info = $member_cancel_model->getMemberAccountInfo($this->member_id, $this->site_id);
|
||||
return $this->response($member_account_info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 申请注销
|
||||
*/
|
||||
public function apply()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
if ($token[ 'code' ] < 0) return $this->response($token);
|
||||
|
||||
$member_cancel_model = new MemberCancelModel();
|
||||
$res = $member_cancel_model->applyMemberCancel([ 'site_id' => $this->site_id, 'member_id' => $this->member_id ]);
|
||||
return $this->response($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 撤销申请
|
||||
*/
|
||||
public function cancelApply()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
if ($token[ 'code' ] < 0) return $this->response($token);
|
||||
|
||||
$member_cancel_model = new MemberCancelModel();
|
||||
$res = $member_cancel_model->cancelApplyMemberCancel($this->member_id, $this->site_id);
|
||||
return $this->response($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取注销设置
|
||||
*/
|
||||
public function config()
|
||||
{
|
||||
$config_model = new ConfigModel();
|
||||
$config_info = $config_model->getCancelConfig($this->site_id, 'shop');
|
||||
$value = $config_info[ 'data' ][ 'value' ];
|
||||
return $this->response($this->success($value));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取注销协议
|
||||
*/
|
||||
public function agreement()
|
||||
{
|
||||
$config_model = new ConfigModel();
|
||||
$document_info = $config_model->getCancelDocument($this->site_id, 'shop');
|
||||
return $this->response($document_info);
|
||||
}
|
||||
|
||||
}
|
||||
38
addon/membercancel/config/diy_view.php
Executable file
38
addon/membercancel/config/diy_view.php
Executable file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
return [
|
||||
|
||||
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据,json格式' ]
|
||||
'template' => [],
|
||||
|
||||
// 后台自定义组件——装修
|
||||
'util' => [],
|
||||
|
||||
// 自定义页面路径
|
||||
'link' => [],
|
||||
|
||||
// 自定义图标库
|
||||
'icon_library' => [],
|
||||
|
||||
// uni-app 组件,格式:[ 'name' => '组件名称/文件夹名称', 'path' => '文件路径/目录路径' ],多个逗号隔开,自定义组件名称前缀必须是diy-,也可以引用第三方组件
|
||||
'component' => [],
|
||||
|
||||
// uni-app 页面,多个逗号隔开
|
||||
'pages' => [],
|
||||
|
||||
// 模板信息,格式:'title' => '模板名称', 'name' => '模板标识', 'cover' => '模板封面图', 'preview' => '模板预览图', 'desc' => '模板描述'
|
||||
'info' => [],
|
||||
|
||||
// 主题风格配色,格式可以自由定义扩展,【在uni-app中通过:this.themeStyle... 获取定义的颜色字段,例如:this.themeStyle.main_color】
|
||||
'theme' => [],
|
||||
|
||||
// 自定义页面数据,格式:[ 'title' => '页面名称', 'name' => "页面标识", 'value' => [页面数据,json格式] ]
|
||||
'data' => []
|
||||
];
|
||||
18
addon/membercancel/config/event.php
Executable file
18
addon/membercancel/config/event.php
Executable file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
// 事件定义文件
|
||||
return [
|
||||
'bind' => [
|
||||
|
||||
],
|
||||
|
||||
'listen' => [
|
||||
|
||||
//展示活动
|
||||
'ShowPromotion' => [
|
||||
'addon\membercancel\event\ShowPromotion',
|
||||
]
|
||||
],
|
||||
|
||||
'subscribe' => [
|
||||
],
|
||||
];
|
||||
21
addon/membercancel/config/info.php
Executable file
21
addon/membercancel/config/info.php
Executable file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
|
||||
* =========================================================
|
||||
*/
|
||||
return [
|
||||
'name' => 'membercancel',
|
||||
'title' => '会员注销',
|
||||
'description' => '会员注销',
|
||||
'type' => 'tool', //插件类型 system :系统插件(自动安装), promotion:扩展营销插件 tool:工具插件
|
||||
'status' => 1,
|
||||
'author' => '',
|
||||
'version' => '5.5.3',
|
||||
'version_no' => '553250709001',
|
||||
'content' => '',
|
||||
];
|
||||
41
addon/membercancel/config/menu_shop.php
Executable file
41
addon/membercancel/config/menu_shop.php
Executable file
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | 店铺端菜单设置
|
||||
// +----------------------------------------------------------------------
|
||||
return [
|
||||
[
|
||||
'name' => 'PROMOTION_MEMBERCANCEL',
|
||||
'title' => '会员注销',
|
||||
'url' => 'membercancel://shop/membercancel/lists',
|
||||
'parent' => 'MEMBER_INDEX',
|
||||
'picture' => '',
|
||||
'picture_selected' => '',
|
||||
'is_show' => 1,
|
||||
'sort' => 12,
|
||||
'child_list' => [
|
||||
[
|
||||
'name' => 'MEMBER_CANCEL',
|
||||
'title' => '注销列表',
|
||||
'url' => 'membercancel://shop/membercancel/lists',
|
||||
'is_show' => 1,
|
||||
'sort' => 1,
|
||||
'child_list' => [
|
||||
]
|
||||
],
|
||||
[
|
||||
'name' => 'LOGIN_CANCEL_CONFIG',
|
||||
'title' => '注销设置',
|
||||
'url' => 'membercancel://shop/membercancel/cancelconfig',
|
||||
'is_show' => 1,
|
||||
'sort' => 2,
|
||||
],
|
||||
[
|
||||
'name' => 'LOGIN_CANCEL_AGREEMENT',
|
||||
'title' => '注销协议',
|
||||
'url' => 'membercancel://shop/membercancel/cancelagreement',
|
||||
'is_show' => 1,
|
||||
'sort' => 3,
|
||||
]
|
||||
]
|
||||
],
|
||||
];
|
||||
1
addon/membercancel/data/install.sql
Executable file
1
addon/membercancel/data/install.sql
Executable file
@@ -0,0 +1 @@
|
||||
SET NAMES 'utf8';
|
||||
1
addon/membercancel/data/uninstall.sql
Executable file
1
addon/membercancel/data/uninstall.sql
Executable file
@@ -0,0 +1 @@
|
||||
SET NAMES 'utf8';
|
||||
27
addon/membercancel/event/Install.php
Executable file
27
addon/membercancel/event/Install.php
Executable file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
|
||||
namespace addon\membercancel\event;
|
||||
|
||||
/**
|
||||
* 应用安装
|
||||
*/
|
||||
class Install
|
||||
{
|
||||
/**
|
||||
* 执行安装
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
return success();
|
||||
}
|
||||
}
|
||||
27
addon/membercancel/event/PromotionType.php
Executable file
27
addon/membercancel/event/PromotionType.php
Executable file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\membercancel\event;
|
||||
|
||||
/**
|
||||
* 活动类型
|
||||
*/
|
||||
class PromotionType
|
||||
{
|
||||
|
||||
/**
|
||||
* 活动类型
|
||||
* @return array
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
return [ "name" => "会员注销", "type" => "membercancel" ];
|
||||
}
|
||||
}
|
||||
46
addon/membercancel/event/ShowPromotion.php
Executable file
46
addon/membercancel/event/ShowPromotion.php
Executable file
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\membercancel\event;
|
||||
|
||||
/**
|
||||
* 活动展示
|
||||
*/
|
||||
class ShowPromotion
|
||||
{
|
||||
|
||||
/**
|
||||
* 活动展示
|
||||
* @return array
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$data = [
|
||||
'shop' => [
|
||||
[
|
||||
//插件名称
|
||||
'name' => 'membercancel',
|
||||
//展示分类(根据平台端设置,admin(平台营销),shop:店铺营销,member:会员营销, tool:应用工具)
|
||||
'show_type' => 'tool',
|
||||
//展示主题
|
||||
'title' => '会员注销',
|
||||
//展示介绍
|
||||
'description' => '客户在线申请注销账号',
|
||||
//展示图标
|
||||
'icon' => 'addon/membercancel/icon.png',
|
||||
//跳转链接
|
||||
'url' => 'membercancel://shop/membercancel/lists',
|
||||
]
|
||||
]
|
||||
|
||||
];
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
26
addon/membercancel/event/UnInstall.php
Executable file
26
addon/membercancel/event/UnInstall.php
Executable file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\membercancel\event;
|
||||
|
||||
/**
|
||||
* 应用卸载
|
||||
*/
|
||||
class UnInstall
|
||||
{
|
||||
/**
|
||||
* 执行卸载
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
return success();
|
||||
}
|
||||
}
|
||||
BIN
addon/membercancel/icon.png
Executable file
BIN
addon/membercancel/icon.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
501
addon/membercancel/model/MemberCancel.php
Executable file
501
addon/membercancel/model/MemberCancel.php
Executable file
@@ -0,0 +1,501 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\membercancel\model;
|
||||
|
||||
use addon\fenxiao\model\Fenxiao;
|
||||
use addon\fenxiao\model\FenxiaoOrder;
|
||||
use app\dict\order_refund\OrderRefundDict;
|
||||
use app\model\BaseModel;
|
||||
use app\model\member\Config as ConfigModel;
|
||||
use app\model\message\Message;
|
||||
use app\model\message\Sms;
|
||||
use app\model\order\OrderCommon;
|
||||
use app\model\order\OrderRefund;
|
||||
use app\model\shop\ShopAcceptMessage;
|
||||
use addon\wechat\model\Message as WechatMessage;
|
||||
use think\facade\Cache;
|
||||
|
||||
/**
|
||||
* 会员注销
|
||||
*/
|
||||
class MemberCancel extends BaseModel
|
||||
{
|
||||
|
||||
/**
|
||||
* 申请注销
|
||||
* @param $param
|
||||
* @return array
|
||||
*/
|
||||
public function applyMemberCancel($param)
|
||||
{
|
||||
//获取注销配置
|
||||
$config_model = new ConfigModel();
|
||||
$config_info = $config_model->getCancelConfig($param[ 'site_id' ], 'shop');
|
||||
$value = $config_info[ 'data' ][ 'value' ];
|
||||
if ($value[ 'is_enable' ] == 0) {
|
||||
return $this->error('', '未开放注销');
|
||||
}
|
||||
|
||||
//获取用户信息
|
||||
$member_info = model('member')->getInfo(
|
||||
[
|
||||
[ 'site_id', '=', $param[ 'site_id' ] ],
|
||||
[ 'member_id', '=', $param[ 'member_id' ] ],
|
||||
[ 'is_delete', '=', 0 ]
|
||||
]
|
||||
);
|
||||
if (empty($member_info)) {
|
||||
return $this->error('', '会员不存在');
|
||||
}
|
||||
if ($member_info[ 'balance_withdraw_apply' ] > 0) {
|
||||
return $this->error('', '有余额正在提现中,请提现成功后再申请注销');
|
||||
}
|
||||
$member_json = json_encode($member_info);
|
||||
|
||||
//判断是否申请过
|
||||
$member_cancel_info = model('member_cancel')->getInfo([ [ 'site_id', '=', $param[ 'site_id' ] ], [ 'member_id', '=', $param[ 'member_id' ] ] ]);
|
||||
if (!empty($member_cancel_info)) {
|
||||
if ($member_cancel_info[ 'status' ] != -1) {
|
||||
return $this->error('', '请勿重复申请注销');
|
||||
}
|
||||
}
|
||||
|
||||
//判断是否有未完成的订单
|
||||
$order_condition = [
|
||||
[ 'site_id', '=', $param[ 'site_id' ] ],
|
||||
[ 'member_id', '=', $param[ 'member_id' ] ],
|
||||
[ 'order_status', 'in', [ 1, 3] ]
|
||||
];
|
||||
$order_count = model('order')->getCount($order_condition);
|
||||
if ($order_count > 0) {
|
||||
return $this->error('', '还有订单未完成,请等订单完成后再申请注销');
|
||||
}
|
||||
|
||||
//分销
|
||||
$fenxiao_json = '';
|
||||
if (addon_is_exit('fenxiao', $param[ 'site_id' ]) == 1) {
|
||||
//获取分销商信息
|
||||
$fenxiao_info = model('fenxiao')->getInfo([ [ 'site_id', '=', $param[ 'site_id' ] ], [ 'member_id', '=', $param[ 'member_id' ] ] ]);
|
||||
if (!empty($fenxiao_info)) {
|
||||
if ($fenxiao_info[ 'account_withdraw_apply' ] > 0) {
|
||||
return $this->error('', '有分销佣金正在提现中,请提现成功后再申请注销');
|
||||
}
|
||||
|
||||
//判断是否存在未结算的分销订单
|
||||
$fenxiao_condition = [
|
||||
[ 'fo.site_id', '=', $param[ 'site_id' ] ],
|
||||
[ 'fo.one_fenxiao_id|fo.two_fenxiao_id|fo.three_fenxiao_id', '=', $fenxiao_info[ 'fenxiao_id' ] ],
|
||||
[ 'fo.is_settlement', '=', 0 ],
|
||||
['o.order_status', 'not in', [OrderCommon::ORDER_CREATE, OrderCommon::ORDER_CLOSE]],
|
||||
];
|
||||
$fenxiao_alias = 'fo';
|
||||
$fenxiao_join = [
|
||||
['order o', 'fo.order_id = o.order_id', 'inner'],
|
||||
];
|
||||
$fenxiao_order_count = model('fenxiao_order')->getCount($fenxiao_condition, '*', $fenxiao_alias, $fenxiao_join);
|
||||
if ($fenxiao_order_count > 0) {
|
||||
return $this->error('', '还有分销订单未结算,请等订单结算后再申请注销');
|
||||
}
|
||||
|
||||
$fenxiao_json = json_encode($fenxiao_info);
|
||||
}
|
||||
}
|
||||
|
||||
model('member_cancel')->startTrans();
|
||||
try {
|
||||
if (!empty($member_cancel_info)) {
|
||||
$id = $member_cancel_info[ 'id' ];
|
||||
$data = [
|
||||
'status' => 0,
|
||||
'audit_uid' => '',
|
||||
'audit_username' => '',
|
||||
'reason' => '',
|
||||
'audit_time' => ''
|
||||
];
|
||||
model('member_cancel')->update($data, [ [ 'id', '=', $id ] ]);
|
||||
|
||||
} else {
|
||||
$data = [
|
||||
'member_id' => $member_info[ 'member_id' ],
|
||||
'site_id' => $param[ 'site_id' ],
|
||||
'username' => $member_info[ 'username' ],
|
||||
'mobile' => $member_info[ 'mobile' ],
|
||||
'nickname' => $member_info[ 'nickname' ],
|
||||
'create_time' => time(),
|
||||
'member_json' => $member_json,
|
||||
'fenxiao_json' => $fenxiao_json
|
||||
];
|
||||
$id = model('member_cancel')->add($data);
|
||||
}
|
||||
|
||||
//审核开关关闭
|
||||
if ($value[ 'is_audit' ] == 0) {
|
||||
//todo 调用审核成功接口
|
||||
$param[ 'id' ] = $id;
|
||||
$param[ 'audit_uid' ] = '';
|
||||
$param[ 'audit_username' ] = '';
|
||||
$res = $this->memberCancelAuditPass($param);
|
||||
if ($res[ 'code' ] < 0) {
|
||||
model('member_cancel')->rollback();
|
||||
return $res;
|
||||
}
|
||||
}
|
||||
model('member_cancel')->commit();
|
||||
|
||||
//会员申请注销消息
|
||||
$message_model = new Message();
|
||||
$message_model->sendMessage([ 'keywords' => "USER_CANCEL_APPLY", 'member_id' => $member_info[ 'member_id' ], 'site_id' => $param[ 'site_id' ] ]);
|
||||
$res[ 'is_audit' ] = $value[ 'is_audit' ];
|
||||
return $this->success($res);
|
||||
} catch (\Exception $e) {
|
||||
model('member_cancel')->rollback();
|
||||
return $this->error('', $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 撤销申请注销
|
||||
* @param $member_id
|
||||
* @param $site_id
|
||||
* @return array
|
||||
*/
|
||||
public function cancelApplyMemberCancel($member_id, $site_id)
|
||||
{
|
||||
$member_cancel_info = model('member_cancel')->getInfo(
|
||||
[
|
||||
[ 'member_id', '=', $member_id ],
|
||||
[ 'site_id', '=', $site_id ]
|
||||
]
|
||||
);
|
||||
if (empty($member_cancel_info)) {
|
||||
return $this->error('', '数据不合法');
|
||||
}
|
||||
if ($member_cancel_info[ 'status' ] == 1) {
|
||||
return $this->error('', '数据不合法');
|
||||
}
|
||||
|
||||
$res = model('member_cancel')->delete([ [ 'member_id', '=', $member_id ], [ 'site_id', '=', $site_id ] ]);
|
||||
return $this->success($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 审核通过
|
||||
* @param $param
|
||||
* @return array
|
||||
*/
|
||||
public function memberCancelAuditPass($param)
|
||||
{
|
||||
$info = model('member_cancel')->getInfo([ [ 'id', '=', $param[ 'id' ] ], [ 'site_id', '=', $param[ 'site_id' ] ] ], 'member_id,status');
|
||||
if (empty($info)) {
|
||||
return $this->error('', '请核实数据后重试');
|
||||
}
|
||||
if ($info[ 'status' ] != 0) {
|
||||
return $this->error('', '该数据已审核,请勿重复审核');
|
||||
}
|
||||
|
||||
model('member_cancel')->startTrans();
|
||||
try {
|
||||
|
||||
//修改注销状态
|
||||
$data = [
|
||||
'status' => 1,
|
||||
'audit_uid' => $param[ 'audit_uid' ],
|
||||
'audit_username' => $param[ 'audit_username' ],
|
||||
'audit_time' => time()
|
||||
];
|
||||
model('member_cancel')->update($data, [ [ 'id', '=', $param[ 'id' ] ], [ 'site_id', '=', $param[ 'site_id' ] ] ]);
|
||||
|
||||
//删除会员信息
|
||||
model('member')->update([ 'is_delete' => 1, 'status' => 0 ], [ [ 'member_id', '=', $info[ 'member_id' ] ], [ 'site_id', '=', $param[ 'site_id' ] ] ]);
|
||||
Cache::set('member_blacklist_' . $param[ 'site_id' ], null);
|
||||
|
||||
event('MemberCancel', [ 'member_id' => $info[ 'member_id' ], 'site_id' => $param[ 'site_id' ] ]);
|
||||
|
||||
model('member_cancel')->commit();
|
||||
|
||||
//会员注销成功消息
|
||||
$message_model = new Message();
|
||||
$message_model->sendMessage([ 'keywords' => "USER_CANCEL_SUCCESS", 'member_id' => $info[ 'member_id' ], 'site_id' => $param[ 'site_id' ] ]);
|
||||
|
||||
return $this->success();
|
||||
} catch (\Exception $e) {
|
||||
model('member_cancel')->rollback();
|
||||
return $this->error('', $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 审核拒绝
|
||||
* @param $param
|
||||
* @return array
|
||||
*/
|
||||
public function memberCancelAuditRefuse($param)
|
||||
{
|
||||
$info = model('member_cancel')->getInfo([ [ 'id', '=', $param[ 'id' ] ], [ 'site_id', '=', $param[ 'site_id' ] ] ], 'status,member_id');
|
||||
|
||||
if (empty($info)) {
|
||||
return $this->error('', '请核实数据后重试');
|
||||
}
|
||||
if ($info[ 'status' ] != 0) {
|
||||
return $this->error('', '该数据已审核,请勿重复审核');
|
||||
}
|
||||
|
||||
$data = [
|
||||
'status' => -1,
|
||||
'audit_uid' => $param[ 'audit_uid' ],
|
||||
'audit_username' => $param[ 'audit_username' ],
|
||||
'reason' => $param[ 'reason' ],
|
||||
'audit_time' => time()
|
||||
];
|
||||
$res = model('member_cancel')->update($data, [ [ 'id', '=', $param[ 'id' ] ], [ 'site_id', '=', $param[ 'site_id' ] ] ]);
|
||||
|
||||
//会员注销失败消息
|
||||
$message_model = new Message();
|
||||
$message_model->sendMessage([ 'keywords' => "USER_CANCEL_FAIL", 'member_id' => $info[ 'member_id' ], 'site_id' => $param[ 'site_id' ] ]);
|
||||
|
||||
return $this->success($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员注销信息
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getMemberCancelInfo($condition = [], $field = '*')
|
||||
{
|
||||
$info = model('member_cancel')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员注销分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getMemberCancelPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = 'id desc', $field = '*')
|
||||
{
|
||||
$list = model('member_cancel')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户账户信息
|
||||
* @param $member_id
|
||||
* @param $site_id
|
||||
* @return array
|
||||
*/
|
||||
public function getMemberAccountInfo($member_id, $site_id)
|
||||
{
|
||||
$data = [];
|
||||
//会员信息
|
||||
$member_info = model('member')->getInfo(
|
||||
[
|
||||
[ 'member_id', '=', $member_id ],
|
||||
[ 'site_id', '=', $site_id ],
|
||||
[ 'is_delete', '=', 0 ]
|
||||
],
|
||||
'is_fenxiao,point,balance,balance_money,balance_withdraw_apply'
|
||||
);
|
||||
$data[ 'member_info' ] = $member_info;
|
||||
//优惠券数量
|
||||
$data[ 'member_coupon_count' ] = model('promotion_coupon')->getCount(
|
||||
[
|
||||
[ 'member_id', '=', $member_id ],
|
||||
[ 'site_id', '=', $site_id ],
|
||||
[ 'state', '=', 1 ]
|
||||
]
|
||||
);
|
||||
|
||||
//订单待发货
|
||||
$data[ 'order_pay_count' ] = model('order')->getCount(
|
||||
[
|
||||
[ 'member_id', '=', $member_id ],
|
||||
[ 'site_id', '=', $site_id ],
|
||||
[ 'order_status', '=', OrderCommon::ORDER_PAY ]
|
||||
]
|
||||
);
|
||||
//订单待收货
|
||||
$data[ 'order_delivery_count' ] = model('order')->getCount(
|
||||
[
|
||||
[ 'member_id', '=', $member_id ],
|
||||
[ 'site_id', '=', $site_id ],
|
||||
[ 'order_status', '=', OrderCommon::ORDER_DELIVERY ]
|
||||
]
|
||||
);
|
||||
//退款订单
|
||||
$data[ 'order_refund_count' ] = model('order')->getCount(
|
||||
[
|
||||
[ 'member_id', '=', $member_id ],
|
||||
[ 'site_id', '=', $site_id ],
|
||||
[ 'refund_status', 'not in', [ OrderRefundDict::REFUND_NOT_APPLY, OrderRefundDict::REFUND_COMPLETE ] ]
|
||||
]
|
||||
);
|
||||
|
||||
//判断用户是否是分销商
|
||||
if ($member_info[ 'is_fenxiao' ] == 1 && addon_is_exit('fenxiao', $site_id)) {
|
||||
|
||||
//分销商信息
|
||||
$fenxiao_model = new Fenxiao();
|
||||
$fenxiao_info = $fenxiao_model->getFenxiaoInfo(
|
||||
[
|
||||
[ 'member_id', '=', $member_id ],
|
||||
[ 'site_id', '=', $site_id ]
|
||||
],
|
||||
'account,account_withdraw,account_withdraw_apply,total_commission,fenxiao_id'
|
||||
);
|
||||
$data[ 'fenxiao_info' ] = $fenxiao_info[ 'data' ];
|
||||
|
||||
//分销待结算订单
|
||||
$fenxiao_condition = [
|
||||
[ 'fo.site_id', '=', $site_id ],
|
||||
[ 'fo.one_fenxiao_id|fo.two_fenxiao_id|fo.three_fenxiao_id', '=', $fenxiao_info[ 'data' ][ 'fenxiao_id' ] ],
|
||||
[ 'fo.is_settlement', '=', 0 ],
|
||||
['o.order_status', 'not in', [OrderCommon::ORDER_CREATE, OrderCommon::ORDER_CLOSE]],
|
||||
];
|
||||
$fenxiao_alias = 'fo';
|
||||
$fenxiao_join = [
|
||||
['order o', 'fo.order_id = o.order_id', 'inner'],
|
||||
];
|
||||
$data[ 'fenxiao_order_count' ] = model('fenxiao_order')->getCount($fenxiao_condition, '*', $fenxiao_alias, $fenxiao_join);
|
||||
}
|
||||
|
||||
return $this->success($data);
|
||||
}
|
||||
|
||||
/****************************************** 会员注销通知 start **********************************************/
|
||||
|
||||
/**
|
||||
* 会员注销成功
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
public function memberCancelSuccess($data)
|
||||
{
|
||||
$member_cancel = model('member_cancel')->getInfo(
|
||||
[
|
||||
[ 'member_id', '=', $data[ 'member_id' ] ],
|
||||
[ 'site_id', '=', $data[ 'site_id' ] ]
|
||||
]
|
||||
);
|
||||
if (empty($member_cancel)) {
|
||||
return $this->success();
|
||||
}
|
||||
$member_info = model('member')->getInfo([ [ 'member_id', '=', $data[ 'member_id' ] ] ], 'username,mobile,nickname');
|
||||
|
||||
//发送短信
|
||||
$sms_model = new Sms();
|
||||
|
||||
$name = $member_info[ "nickname" ] == '' ? $member_info[ "mobile" ] : $member_info[ "nickname" ];
|
||||
$var_parse = array (
|
||||
"username" => $name,
|
||||
);
|
||||
|
||||
$data[ "sms_account" ] = $member_info[ "mobile" ] ?? '';//手机号
|
||||
$data[ "var_parse" ] = $var_parse;
|
||||
$sms_result = $sms_model->sendMessage($data);
|
||||
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员注销失败
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
public function memberCancelFail($data)
|
||||
{
|
||||
$member_cancel = model('member_cancel')->getInfo(
|
||||
[
|
||||
[ 'member_id', '=', $data[ 'member_id' ] ],
|
||||
[ 'site_id', '=', $data[ 'site_id' ] ]
|
||||
]
|
||||
);
|
||||
if (empty($member_cancel)) {
|
||||
return $this->success();
|
||||
}
|
||||
$member_info = model('member')->getInfo([ [ 'member_id', '=', $data[ 'member_id' ] ] ], 'username,mobile,nickname');
|
||||
|
||||
//发送短信
|
||||
$sms_model = new Sms();
|
||||
|
||||
$name = $member_info[ "nickname" ] == '' ? $member_info[ "mobile" ] : $member_info[ "nickname" ];
|
||||
$var_parse = array (
|
||||
"username" => $name,
|
||||
);
|
||||
|
||||
$data[ "sms_account" ] = $member_info[ "mobile" ] ?? '';//手机号
|
||||
$data[ "var_parse" ] = $var_parse;
|
||||
$sms_result = $sms_model->sendMessage($data);
|
||||
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员注销申请通知(店铺)
|
||||
* @param $data
|
||||
* @return array
|
||||
* @throws \GuzzleHttp\Exception\GuzzleException
|
||||
*/
|
||||
public function memberCancelApply($data)
|
||||
{
|
||||
$member_cancel = model('member_cancel')->getInfo(
|
||||
[
|
||||
[ 'member_id', '=', $data[ 'member_id' ] ],
|
||||
[ 'site_id', '=', $data[ 'site_id' ] ]
|
||||
]
|
||||
);
|
||||
if (empty($member_cancel)) {
|
||||
return $this->success();
|
||||
}
|
||||
$member_info = model('member')->getInfo([ [ 'member_id', '=', $data[ 'member_id' ] ] ], 'username,mobile,nickname');
|
||||
$name = $member_info[ "nickname" ] == '' ? $member_info[ "mobile" ] : $member_info[ "nickname" ];
|
||||
//发送短信
|
||||
$sms_model = new Sms();
|
||||
|
||||
$var_parse = array (
|
||||
"username" => $name,
|
||||
);
|
||||
// $site_id = $data['site_id'];
|
||||
// $shop_info = model("shop")->getInfo([["site_id", "=", $site_id]], "mobile,email");
|
||||
// $message_data["sms_account"] = $shop_info["mobile"];//手机号
|
||||
$data[ "var_parse" ] = $var_parse;
|
||||
|
||||
$shop_accept_message_model = new ShopAcceptMessage();
|
||||
$result = $shop_accept_message_model->getShopAcceptMessageList();
|
||||
$list = $result[ 'data' ];
|
||||
if (!empty($list)) {
|
||||
foreach ($list as $v) {
|
||||
$message_data = $data;
|
||||
$message_data[ "sms_account" ] = $v[ "mobile" ];//手机号
|
||||
$sms_model->sendMessage($message_data);
|
||||
|
||||
if ($v[ 'wx_openid' ] != '') {
|
||||
$wechat_model = new WechatMessage();
|
||||
$data[ "openid" ] = $v[ 'wx_openid' ];
|
||||
$data[ "template_data" ] = [
|
||||
'thing2' => replaceSpecialChar($name), // 申请人
|
||||
'time4' => time_to_date(time()) // 注销时间
|
||||
];
|
||||
|
||||
$data[ "page" ] = "";
|
||||
$wechat_model->sendMessage($data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************** 会员注销通知 end ************************************************/
|
||||
}
|
||||
166
addon/membercancel/shop/controller/Membercancel.php
Executable file
166
addon/membercancel/shop/controller/Membercancel.php
Executable file
@@ -0,0 +1,166 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\membercancel\shop\controller;
|
||||
|
||||
use app\model\member\Config as ConfigModel;
|
||||
use addon\membercancel\model\MemberCancel as MemberCancelModel;
|
||||
use app\shop\controller\BaseShop;
|
||||
|
||||
/**
|
||||
* 会员注销管理 控制器
|
||||
*/
|
||||
class Membercancel extends BaseShop
|
||||
{
|
||||
|
||||
/**
|
||||
* 注销列表
|
||||
*/
|
||||
public function lists()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
|
||||
$page = input('page', 1);
|
||||
$page_size = input('page_size', PAGE_LIST_ROWS);
|
||||
|
||||
$condition = [ [ 'site_id', '=', $this->site_id ] ];
|
||||
|
||||
$search_text = input('search_text', '');
|
||||
$search_type = input('search_type', '');
|
||||
if (!empty($search_text)) {
|
||||
$condition[] = [
|
||||
$search_type, 'like', '%' . $search_text . '%'
|
||||
];
|
||||
}
|
||||
//状态
|
||||
$status = input('status', '');
|
||||
if ($status !== '') {
|
||||
$condition[] = [ 'status', '=', $status ];
|
||||
}
|
||||
//注销时间
|
||||
$start_time = input('start_time', '');
|
||||
$end_time = input('end_time', '');
|
||||
if ($start_time && $end_time) {
|
||||
$condition[] = [ 'create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
|
||||
} elseif (!$start_time && $end_time) {
|
||||
$condition[] = [ 'create_time', '<=', date_to_time($end_time) ];
|
||||
|
||||
} elseif ($start_time && !$end_time) {
|
||||
$condition[] = [ 'create_time', '>=', date_to_time($start_time) ];
|
||||
}
|
||||
|
||||
$member_cancel_model = new MemberCancelModel();
|
||||
$list = $member_cancel_model->getMemberCancelPageList($condition, $page, $page_size);
|
||||
return $list;
|
||||
} else {
|
||||
|
||||
//筛选条件
|
||||
$search_type = [
|
||||
'username' => '会员账号',
|
||||
'mobile' => '手机号',
|
||||
'nickname' => '昵称'
|
||||
];
|
||||
$this->assign('search_type', $search_type);
|
||||
|
||||
return $this->fetch('membercancel/lists');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 审核通过
|
||||
*/
|
||||
public function auditPass()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
|
||||
$id = input('id', '');
|
||||
|
||||
$data = [
|
||||
'id' => $id,
|
||||
'site_id' => $this->site_id,
|
||||
'audit_uid' => $this->user_info[ 'uid' ],
|
||||
'audit_username' => $this->user_info[ 'username' ]
|
||||
];
|
||||
|
||||
$member_cancel_model = new MemberCancelModel();
|
||||
$res = $member_cancel_model->memberCancelAuditPass($data);
|
||||
return $res;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 审核失败
|
||||
*/
|
||||
public function auditRefuse()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
|
||||
$id = input('id', '');
|
||||
$reason = input('reason', '');
|
||||
$data = [
|
||||
'id' => $id,
|
||||
'site_id' => $this->site_id,
|
||||
'audit_uid' => $this->user_info[ 'uid' ],
|
||||
'audit_username' => $this->user_info[ 'username' ],
|
||||
'reason' => $reason
|
||||
];
|
||||
|
||||
$member_cancel_model = new MemberCancelModel();
|
||||
$res = $member_cancel_model->memberCancelAuditRefuse($data);
|
||||
return $res;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 注销协议
|
||||
*/
|
||||
public function cancelAgreement()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
//设置注销协议
|
||||
$title = input('title', '');
|
||||
$content = input('content', '');
|
||||
$config_model = new ConfigModel();
|
||||
return $config_model->setCancelDocument($title, $content, $this->site_id, 'shop');
|
||||
} else {
|
||||
//获取注销协议
|
||||
$config_model = new ConfigModel();
|
||||
$document_info = $config_model->getCancelDocument($this->site_id, 'shop');
|
||||
$this->assign('document_info', $document_info);
|
||||
|
||||
return $this->fetch('membercancel/cancel_agreement');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 注销设置
|
||||
*/
|
||||
public function cancelConfig()
|
||||
{
|
||||
$config_model = new ConfigModel();
|
||||
if (request()->isJson()) {
|
||||
//设置注册设置
|
||||
$data = array (
|
||||
'is_enable' => input('is_enable', 0),
|
||||
'is_audit' => input('is_audit', 1),
|
||||
);
|
||||
return $config_model->setCancelConfig($data, $this->site_id, 'shop');
|
||||
} else {
|
||||
//获取注册设置
|
||||
$config_info = $config_model->getCancelConfig($this->site_id, 'shop');
|
||||
$value = $config_info[ 'data' ][ 'value' ];
|
||||
|
||||
$this->assign('value', $value);
|
||||
|
||||
return $this->fetch('membercancel/cancel_config');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
59
addon/membercancel/shop/view/membercancel/cancel_agreement.html
Executable file
59
addon/membercancel/shop/view/membercancel/cancel_agreement.html
Executable file
@@ -0,0 +1,59 @@
|
||||
<div class="layui-form form-wrap">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">协议:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="title" required lay-verify="required" placeholder="请输入协议标题" value="{$document_info.data.title}" autocomplete="off" class="layui-input len-long">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">内容:</label>
|
||||
<div class="layui-input-inline">
|
||||
<script id="editor" type="text/plain" class="special-length" style="height:300px;"></script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="" id="agreementContent" value="{$document_info.data.content}" />
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/ueditor.config.js?time=20240614"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/ueditor.all.js?time=20240614"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/lang/zh-cn/zh-cn.js"></script>
|
||||
<script>
|
||||
//实例化富文本
|
||||
var ue = UE.getEditor('editor');
|
||||
|
||||
if($("#agreementContent").val()){
|
||||
ue.ready(function() {
|
||||
ue.setContent($("#agreementContent").val());
|
||||
});
|
||||
}
|
||||
|
||||
layui.use('form', function() {
|
||||
var form = layui.form,
|
||||
repeat_flag = false; //防重复标识
|
||||
form.render();
|
||||
|
||||
//表单提交
|
||||
form.on('submit(save)', function(data) {
|
||||
if(repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("membercancel://shop/membercancel/cancelAgreement"),
|
||||
data: {
|
||||
'title': data.field.title,
|
||||
'content': ue.getContent(),
|
||||
},
|
||||
dataType: 'JSON', //服务器返回json格式数据
|
||||
type: 'POST', //HTTP请求类型
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
59
addon/membercancel/shop/view/membercancel/cancel_config.html
Executable file
59
addon/membercancel/shop/view/membercancel/cancel_config.html
Executable file
@@ -0,0 +1,59 @@
|
||||
<style>
|
||||
.layui-form-item .layui-form-checkbox[lay-skin=primary] {margin-top: 0;}
|
||||
</style>
|
||||
|
||||
<div class="layui-form form-wrap">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label ">是否允许注销:</label>
|
||||
<div class="layui-input-block" id="isReg">
|
||||
<input type="checkbox" name="is_enable" value="1" lay-filter="is_enable" lay-skin="switch" {if condition="$value.is_enable == 1"} checked {/if} >
|
||||
</div>
|
||||
<div class="word-aux">设置为关闭,则无法注销会员账号</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label ">注销审核:</label>
|
||||
<div class="layui-input-block" >
|
||||
<input type="checkbox" name="is_audit" value="1" lay-filter="is_enable" lay-skin="switch" {if condition="$value.is_audit== 1"} checked {/if} >
|
||||
</div>
|
||||
<div class="word-aux">设置为关闭,会员将直接注销成功。</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<button type="button" class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
layui.use('form', function() {
|
||||
var form = layui.form,
|
||||
repeat_flag = false; //防重复
|
||||
form.render();
|
||||
|
||||
form.on('submit(save)', function(data) {
|
||||
field = data.field;
|
||||
if (field.is_enable == undefined) {
|
||||
field.is_enable = 0;
|
||||
}
|
||||
|
||||
if (field.is_audit == undefined) {
|
||||
field.is_audit = 0;
|
||||
}
|
||||
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("membercancel://shop/membercancel/cancelConfig"),
|
||||
data: field,
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
323
addon/membercancel/shop/view/membercancel/lists.html
Executable file
323
addon/membercancel/shop/view/membercancel/lists.html
Executable file
@@ -0,0 +1,323 @@
|
||||
<style>
|
||||
.screen {margin-top: 15px;}
|
||||
.layui-layout-admin .screen {margin-top: 0;}
|
||||
.layui-layout-admin .layui-form-item .layui-input-inline{background-color: #fff;}
|
||||
.layui-layout-admin .table-tab .layui-tab-title{margin-bottom: 15px;}
|
||||
</style>
|
||||
|
||||
<div class="screen layui-collapse" lay-filter="selection_panel">
|
||||
<div class="layui-colla-item">
|
||||
<form class="layui-colla-content layui-form layui-show">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">搜索类型:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="search_type">
|
||||
{foreach $search_type as $k=>$v}
|
||||
<option value="{$k}">{$v}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="search_text" placeholder="请输入" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">申请时间:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" name="start_time" id="start_time" autocomplete="off" placeholder="开始时间" >
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
<div class="layui-form-mid">-</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" name="end_time" id="end_time" autocomplete="off" placeholder="结束时间" >
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="search">筛选</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-tab table-tab" lay-filter="member_tab">
|
||||
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this" data-status="">全部</li>
|
||||
<li data-status="0">待审核</li>
|
||||
<li data-status="1">注销成功</li>
|
||||
<li data-status="-1">审核拒绝</li>
|
||||
</ul>
|
||||
|
||||
<div class="layui-tab-content">
|
||||
<!-- 列表 -->
|
||||
<table id="member_list" lay-filter="member_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--时间-->
|
||||
<script type="text/html" id="times">
|
||||
<div class="layui-elip" title="申请时间:{{ns.time_to_date(d.create_time)}}">
|
||||
申请时间:{{ns.time_to_date(d.create_time)}}</div>
|
||||
<div class="layui-elip" title="到账时间:{{ns.time_to_date(d.payment_time)}}">
|
||||
审核时间:{{ns.time_to_date(d.audit_time)}}</div>
|
||||
</script>
|
||||
|
||||
<!-- 状态 -->
|
||||
<script type="text/html" id="status">
|
||||
{{# if(d.status == 1){ }}
|
||||
<span style="color: red;">待审核</span>
|
||||
{{# }else if(d.status == 2){ }}
|
||||
<span style="color: green;">审核通过</span>
|
||||
{{# }else if(d.status == -1){ }}
|
||||
<span style="color: gray;">审核拒绝</span>
|
||||
{{# } }}
|
||||
</script>
|
||||
|
||||
<!-- 工具栏操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="detail">查看</a>
|
||||
{{# if(d.status != 1){ }}
|
||||
<a class="layui-btn" lay-event="memberInfo">会员信息</a>
|
||||
{{# } }}
|
||||
{{# if(d.status == 0){ }}
|
||||
<a class="layui-btn" lay-event="pass">审核通过</a>
|
||||
<a class="layui-btn" lay-event="refuse">审核拒绝</a>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
layui.use(['form', 'laydate', 'element', 'laytpl'], function() {
|
||||
var table,repeat_flag=false,
|
||||
form = layui.form,
|
||||
element = layui.element,
|
||||
laytpl = layui.laytpl,
|
||||
laydate = layui.laydate;
|
||||
form.render();
|
||||
|
||||
//渲染时间
|
||||
laydate.render({
|
||||
elem: '#start_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
laydate.render({
|
||||
elem: '#end_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
//监听Tab切换
|
||||
element.on('tab(member_tab)', function(data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: {
|
||||
'status': this.getAttribute('data-status')
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
table = new Table({
|
||||
elem: '#member_list',
|
||||
url: ns.url("membercancel://shop/membercancel/lists"),
|
||||
cols: [
|
||||
[{
|
||||
field: 'username',
|
||||
title: '会员账号',
|
||||
unresize: 'false'
|
||||
}, {
|
||||
field: 'nickname',
|
||||
title: '昵称',
|
||||
unresize: 'false'
|
||||
}, {
|
||||
field: 'mobile',
|
||||
title: '电话',
|
||||
unresize: 'false'
|
||||
}, {
|
||||
title: '状态',
|
||||
unresize: 'false',
|
||||
templet: function(data) {
|
||||
var str = '';
|
||||
if(data.status == 0){
|
||||
str = '审核中';
|
||||
}else if(data.status == 1){
|
||||
str = '注销成功';
|
||||
}else{
|
||||
str = '审核拒绝';
|
||||
}
|
||||
return str;
|
||||
}
|
||||
}, {
|
||||
field: 'create_time',
|
||||
title: '申请时间',
|
||||
unresize: 'false',
|
||||
templet: function(data){
|
||||
return ns.time_to_date(data.create_time);
|
||||
}
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align:'right'
|
||||
}]
|
||||
]
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function(data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function(obj) {
|
||||
var data = obj.data,
|
||||
event = obj.event;
|
||||
switch (event) {
|
||||
case 'detail': //查看
|
||||
var detailHtml = $("#cancelDetail").html();
|
||||
laytpl(detailHtml).render(data, function (html) {
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: '会员注销详情',
|
||||
area: ['700px'],
|
||||
content: html
|
||||
});
|
||||
})
|
||||
break;
|
||||
case 'memberInfo': //会员信息
|
||||
location.hash = ns.hash('shop/member/editmember?member_id='+data.member_id);
|
||||
break;
|
||||
case 'pass': //通过
|
||||
layer.confirm('确定要通过吗?', function (index) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("membercancel://shop/membercancel/auditPass"),
|
||||
data: {id:data.id},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
break;
|
||||
case 'refuse': //拒绝
|
||||
layer.prompt({
|
||||
formType: 2,
|
||||
value: '',
|
||||
title: '请输入拒绝理由',
|
||||
area: ['300px', '100px'] ,//自定义文本域宽高
|
||||
yes: function(index, layero){
|
||||
// 获取文本框输入的值
|
||||
var value = layero.find(".layui-layer-input").val();
|
||||
if (value) {
|
||||
$.ajax({
|
||||
url: ns.url("membercancel://shop/membercancel/auditrefuse"),
|
||||
data: {
|
||||
"id":data.id,
|
||||
"reason":value
|
||||
},
|
||||
dataType: 'JSON', //服务器返回json格式数据
|
||||
type: 'POST', //HTTP请求类型
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
layer.close(index);
|
||||
} else {
|
||||
layer.msg('请输入拒绝原因!', {icon: 5, anim: 6});
|
||||
}
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="cancelDetail">
|
||||
<table class="layui-table">
|
||||
<colgroup>
|
||||
<col width="80">
|
||||
<col width="200">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>会员账号</td>
|
||||
<td>{{d.username}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>昵称</td>
|
||||
<td>{{d.nickname}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>联系电话</td>
|
||||
<td>{{d.mobile}}</td>
|
||||
</tr>
|
||||
|
||||
{{# if(d.bank_type != 0){ }}
|
||||
<tr>
|
||||
<td>审核人账号</td>
|
||||
<td>{{d.audit_username}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>审核时间</td>
|
||||
<td>{{ ns.time_to_date(d.audit_time) }}</td>
|
||||
</tr>
|
||||
{{# } }}
|
||||
|
||||
{{# if(d.status == -1){ }}
|
||||
<tr>
|
||||
<td>拒绝原因</td>
|
||||
<td>{{ d.reason }}</td>
|
||||
</tr>
|
||||
{{# } }}
|
||||
|
||||
<tr>
|
||||
<td>状态</td>
|
||||
<td>
|
||||
{{# if(d.status == 0){ }}
|
||||
待审核
|
||||
{{#} else if(d.status == 1){ }}
|
||||
审核通过
|
||||
{{#} else { }}
|
||||
审核拒绝
|
||||
{{#} }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>申请时间</td>
|
||||
<td>{{ ns.time_to_date(d.create_time) }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</script>
|
||||
BIN
addon/membercancel/shop/view/public/img/distribution.png
Executable file
BIN
addon/membercancel/shop/view/public/img/distribution.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
BIN
addon/membercancel/shop/view/public/img/distribution_new.png
Executable file
BIN
addon/membercancel/shop/view/public/img/distribution_new.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
BIN
addon/membercancel/shop/view/public/img/distribution_select.png
Executable file
BIN
addon/membercancel/shop/view/public/img/distribution_select.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
Reference in New Issue
Block a user