This commit is contained in:
2025-10-29 15:32:26 +08:00
parent d90614805b
commit b7462657cd
78921 changed files with 2753938 additions and 71 deletions

View File

@@ -0,0 +1,59 @@
<?php
namespace addon\merch\api\controller;
use addon\merch\model\Merch as MerchModel;
use addon\merch\model\Category as CategoryModel;
use app\api\controller\BaseApi;
/**
* 直播
*/
class Merch extends BaseApi
{
/**
* 获取商户列表
* @return false|string
*/
public function lists()
{
$num = $this->params['num'] ?? 0;
$merch_id_arr = $this->params['merch_id_arr'] ?? '';
$condition = [
[ 'site_id', '=', $this->site_id ],
[ 'status', '=', 1 ],
];
if (!empty($merch_id_arr)) {
$condition[] = [ 'merch_id', 'in', $merch_id_arr ];
}
$order_by = 'create_time desc';
$field = '*';
$merch_model = new MerchModel();
// $list = $merch_model->getMerchList([
// [ 'site_id', '=', $this->site_id ],
// [ 'merch_id', 'in', $select_id ]
// ], '*')[ 'data' ];
$list = $merch_model->getMerchList($condition, $field, $order_by, $num);
return $this->response($list);
}
//获取商户分类和商户
public function getcategory(){
$category_model = new CategoryModel();
$category_list = $category_model->getCategoryList(['site_id'=>$this->site_id], '*', 'id desc',9999);
foreach($category_list['data'] as &$row){
$row['category_id'] = $row['id'];
$row['child_list'] = model('merch')->getList([
'site_id'=>$this->site_id,
'category_id'=>$row['category_id']
]);
}
return $this->response($category_list);
}
//商户详情
public function merchinfo(){
$merch_id = $this->params['merch_id'] ?? 0;
$info = model('merch')->getInfo(['merch_id'=>$merch_id,'site_id' => $this->site_id]);
return $this->response(['code'=>0,'data'=>$info]);
}
}

View File

@@ -0,0 +1,48 @@
<?php
/**
*/
return [
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据json格式' ]
'template' => [],
// 后台自定义组件——装修
'util' => [],
// 自定义页面路径
'link' => [
/* [
'name' => 'MERCH_INFO',
'title' => '多商户',
'parent' => 'BASICS_LINK',
'wap_url' => '',
'web_url' => '',
'sort' => 0
]*/
],
// 自定义图标库
'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' => []
];

View File

@@ -0,0 +1,18 @@
<?php
// 事件定义文件
return [
'bind' => [
],
'listen' => [
//展示活动
'ShowPromotion' => [
'addon\merch\event\ShowPromotion',
],
],
'subscribe' => [
],
];

View File

@@ -0,0 +1,12 @@
<?php
return [
'name' => 'merch',
'title' => '多商户',
'description' => '总部统筹管理,线上线下协同锁客',
'type' => 'tool', //插件类型 system :系统插件(自动安装), promotion:扩展营销插件 tool:工具插件
'status' => 1,
'author' => '',
'version' => '1.0',
'version_no' => '2024050000001',
'content' => '',
];

View File

@@ -0,0 +1,107 @@
<?php
// +----------------------------------------------------------------------
// | 平台端菜单设置
// +----------------------------------------------------------------------
return [
[
'name' => 'MERCH_ROOT',
'title' => '商户',
'url' => 'merch://shop/merch/lists',
'picture' => 'icon-zuocedaohang-huiyuan',
'picture_selected' => 'icon-zuocedaohang-huiyuan',
'is_show' => 1,
'sort' => 9,
'child_list' => [
[
'name' => 'MERCH_MANAGE',
'title' => '商户管理',
'url' => 'merch://shop/merch/lists',
'is_show' => 1,
'sort' => 1,
'child_list' => [
[
'name' => 'MERCH_LIST',
'title' => '商户列表',
'url' => 'merch://shop/merch/lists',
'is_show' => 1,
'is_control' => 1,
'sort' => 1,
'is_icon' => 0,
],
[
'name' => 'MERCH_ADD',
'title' => '添加商户',
'url' => 'merch://shop/merch/add',
'sort' => 1,
'is_show' => 0
],
[
'name' => 'MERCH_EDIT',
'title' => '编辑商户',
'url' => 'merch://shop/merch/edit',
'sort' => 2,
'is_show' => 0
],
[
'name' => 'MERCH_DELETE',
'title' => '删除商户',
'url' => 'merch://shop/merch/delete',
'sort' => 3,
'is_show' => 0
],
[
'name' => 'MERCH_CATEGORY_LIST',
'title' => '商户分类',
'url' => 'merch://shop/category/lists',
'is_show' => 1,
'is_control' => 1,
'sort' => 2,
'is_icon' => 0,
],
[
'name' => 'MERCH_CATEGORY_ADD',
'title' => '添加分类',
'url' => 'merch://shop/category/add',
'sort' => 1,
'is_show' => 0
],
[
'name' => 'MERCH_CATEGORY_EDIT',
'title' => '编辑分类',
'url' => 'merch://shop/category/edit',
'sort' => 2,
'is_show' => 0
],
[
'name' => 'MERCH_CATEGORY_DELETE',
'title' => '删除分类',
'url' => 'merch://shop/category/delete',
'sort' => 3,
'is_show' => 0
],
],
],
[
'name' => 'MERCH_APPLY',
'title' => '提现管理',
'url' => 'merch://shop/apply/lists',
'is_show' => 1,
'sort' => 3,
'child_list' => [
[
'name' => 'MERCH_CHECK',
'title' => '提现记录',
'url' => 'merch://shop/apply/lists',
'is_control' => 1,
'sort' => 1,
'is_show' => 1
]
],
],
],
],
];

View File

@@ -0,0 +1 @@
SET NAMES 'utf8';

View File

@@ -0,0 +1 @@
SET NAMES 'utf8';

View File

@@ -0,0 +1,25 @@
<?php
/**
*/
namespace addon\merch\event;
/**
* 应用安装
*/
class Install
{
/**
* 执行安装
*/
public function handle()
{
return success();
}
}

View File

@@ -0,0 +1,37 @@
<?php
namespace addon\merch\event;
/**
* 活动展示
*/
class ShowPromotion
{
/**
* 活动展示
* @return array
*/
public function handle()
{
$data = [
'shop' => [
[
//插件名称
'name' => 'merch',
//店铺端展示分类 shop:营销活动 member:互动营销
'show_type' => 'member',
//展示主题
'title' => '多商户',
//展示介绍
'description' => '总部统筹管理,线上线下协同锁客',
//展示图标
'icon' => 'addon/merch/icon.png',
//跳转链接
'url' => 'merch://shop/merch/lists',
]
]
];
return $data;
}
}

View File

@@ -0,0 +1,30 @@
<?php
/**
*/
namespace addon\merch\event;
/**
* 应用卸载
*/
class UnInstall
{
/**
* 执行卸载
*/
public function handle()
{
try {
return error('', "系统插件不允许删除");
} catch (\Exception $e) {
return error('', $e->getMessage());
}
}
}

BIN
src/addon/merch/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,146 @@
<?php
namespace addon\merch\model;
use think\facade\Cache;
use app\model\BaseModel;
/**
* 商户分类
*/
class Category extends BaseModel
{
/**
* 添加商户分类
* @param array $data
*/
public function addCategory($data)
{
$site_id = $data['site_id'] ?? '';
if ($site_id === '') {
return $this->error('', 'REQUEST_SITE_ID');
}
$data[ 'create_time' ] = time();
$category_id = model('merch_category')->add($data);
Cache::tag("merch_category_" . $site_id)->clear();
return $this->success($category_id);
}
/**
* 修改商户分类
* @param array $data
*/
public function editCategory($data)
{
$site_id = $data['site_id'] ?? '';
if ($site_id === '') {
return $this->error('', 'REQUEST_SITE_ID');
}
$category_info = model('merch_category')->getInfo([ [ 'id', '=', $data[ 'id' ] ] ], 'category_name');
if (empty($category_info)) {
return $this->error(null, '编辑条件有误');
}
//分组名称修改同步修改商品表字段
if ($category_info[ 'category_name' ] != $data[ 'category_name' ]) {
model('goods')->update([ 'category_name' => $data[ 'category_name' ] ], [ [ 'category_id', '=', $data[ 'id' ] ] ]);
}
$data[ 'update_time' ] = time();
$res = model('merch_category')->update($data, [ [ 'id', '=', $data[ 'id' ] ], [ 'site_id', '=', $data[ 'site_id' ] ] ]);
Cache::tag("merch_category_" . $site_id)->clear();
return $this->success($res);
}
/**
* 删除商户分类
* @param array $condition
*/
public function deleteCategory($condition)
{
$check_condition = array_column($condition, 2, 0);
$site_id = $check_condition['site_id'] ?? '';
if ($site_id === '') {
return $this->error('', 'REQUEST_SITE_ID');
}
$res = model('merch_category')->delete($condition);
Cache::tag("merch_category_" . $site_id)->clear();
return $this->success($res);
}
/**
* 修改排序
* @param $sort
* @param $id
* @param $site_id
* @return array
*/
public function modifySort($sort, $id, $site_id)
{
$site_id = $site_id ?? '';
if ($site_id === '') {
return $this->error('', 'REQUEST_SITE_ID');
}
$res = model('merch_category')->update([ 'sort' => $sort ], [ [ 'id', '=', $id ], [ 'site_id', '=', $site_id ] ]);
Cache::tag("merch_category_" . $site_id)->clear();
return $this->success($res);
}
/**
* 获取商户分类信息
* @param array $condition
* @param string $field
* @return array
*/
public function getCategoryInfo($condition = [], $field = '*')
{
$list = model('merch_category')->getInfo($condition, $field);
return $this->success($list);
}
/**
* 获取商户分类列表
* @param array $condition
* @param string $field
* @param string $order
* @param string $limit
*/
public function getCategoryList($condition = [], $field = '*', $order = '', $limit = null)
{
$list = model('merch_category')->getList($condition, $field, $order, '', '', '', $limit);
return $this->success($list);
}
/**
* 获取商户分类分页列表
* @param array $condition
* @param number $page
* @param string $page_size
* @param string $order
* @param string $field
*/
public function getCategoryPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = 'sort asc', $field = '*')
{
$check_condition = array_column($condition, 2, 0);
$site_id = $check_condition['site_id'] ?? '';
if ($site_id === '') {
return $this->error('', 'REQUEST_SITE_ID');
}
$data = json_encode([ $condition, $field, $order, $page, $page_size ]);
$cache = Cache::get("merch_category_getPageList_" . $site_id . "_" . $data);
if (!empty($cache)) {
return $this->success($cache);
}
$list = model('merch_category')->pageList($condition, $field, $order, $page, $page_size);
Cache::tag("merch_category_" . $site_id)->set("merch_category_getPageList_" . $site_id . "_" . $data, $list);
return $this->success($list);
}
}

View File

@@ -0,0 +1,160 @@
<?php
namespace addon\merch\model;
use app\model\BaseModel;
use app\model\system\Cron;
use app\model\upload\Upload;
use app\model\system\Group;
use app\model\system\User;
use think\facade\Db;
class Merch extends BaseModel
{
/**
* 添加商户
* @param $param
*/
public function addMerch($data,$user_data)
{
if (empty($user_data[ "username" ])) return $this->error('', '用户名不能为空');
if (empty($user_data[ "password" ])) return $this->error('', '密码不能为空');
//判断 用户名 是否存在
$user_info = model('user')->getInfo(
[
[ 'username', "=", $user_data[ "username" ] ],
[ 'site_id', '=', $data['site_id'] ],
[ 'app_module', '=', 'merch' ]
]
);
if (!empty($user_info)) {
return $this->error('', '账号已存在');
}
//添加系统用户组
$group_model = new Group();
$group_data = array (
"site_id" => $data['site_id'],
"app_module" => "merch",
"group_name" => "商户管理员",
"group_status" => 1,
"is_system" => 1,
"menu_array" => "",
"desc" => "",
);
$group_result = $group_model->addGroup($group_data);
$group_id = $group_result[ "data" ];
//添加用户
$user_model = new User();
$user_data[ "password" ] = $user_data[ "password" ];
$user_data[ "create_time" ] = time();
$userdata = array(
"app_module" => "merch",
"app_group" => 0,
'is_admin'=>1,
"site_id" => $data['site_id'],
"group_id" => $group_id,
"username" => $user_data['username'],
"password" => $user_data['password'],
);
$user_result = $user_model->addUser($userdata);
if ($user_result[ "code" ] < 0) {
return $this->error('', '商家管理员添加失败!');
}
$data['uid'] = $user_result[ "data" ];
$result = model('merch')->add($data);
return $this->success($result);
}
/**
* 编辑商户
* @param $param
*/
public function editMerch($condition,$data)
{
$result = model('merch')->update($condition,$data);
return $this->success($result);
}
/**
* 删除商户
* @param $id
* @param $site_id
*/
public function deleteMerch($id, $site_id)
{
$info = model('merch')->getInfo([ [ 'site_id', '=', $site_id ], [ 'merch_id', '=', $id ] ], 'id');
if (empty($info)) return $this->error('', '未获取到商户信息');
$res = model('merch')->delete([ [ 'site_id', '=', $site_id ], [ 'merch_id', '=', $id ] ]);
return $this->success($res);
}
/**
* 获取商户列表
* @param array $condition
* @param bool $field
* @param string $order
* @param int $page
* @param int $list_rows
* @param string $alias
* @param array $join
* @return array
*/
public function getMerchPageList($condition = [], $field = true, $order = '', $page = 1, $list_rows = PAGE_LIST_ROWS, $alias = 'a', $join = [])
{
$data = model('merch')->pageList($condition, $field, $order, $page, $list_rows, $alias, $join);
return $this->success($data);
}
/**
* 获取文章列表
* @param array $condition
* @param string $field
* @param string $order
* @param string $limit
*/
public function getMerchList($condition = [], $field = '*', $order = '', $limit = null, $alias = '', $join = [])
{
$list = model('merch')->getList($condition, $field, $order, $alias, $join, '', $limit);
return $this->success($list);
}
/**
* 获取文章分页列表
* @param array $condition
* @param int $page
* @param int $page_size
* @param string $order
* @param string $field
* @return array
*/
// public function getArticlePageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = 'pn.sort asc', $field = 'pn.*,png.category_name')
// {
// $alias = 'pn';
// $join = [
// [
// 'article_category png',
// 'png.category_id = pn.category_id',
// 'left'
// ]
// ];
// $list = model('article')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
// return $this->success($list);
// }
/**
* 修改商户状态
* @param $id
* @param $site_id
*/
public function statusMerch($merch_id, $status)
{
$res = model('merch')->update(['status'=>$status],['merch_id'=>$merch_id]);
return $this->success($res);
}
}

View File

@@ -0,0 +1,116 @@
<?php
namespace addon\merch\shop\controller;
use app\shop\controller\BaseShop;
use app\model\system\Address as AddressModel;
use app\model\web\Config as ConfigModel;
use app\model\merchant\Apply as ApplyModel;
//去除判断为空 add lucky
error_reporting(E_ALL ^ E_NOTICE );
/**
* 直播间
*/
class Apply extends BaseShop
{
public function lists()
{
$ApplyModel = new ApplyModel();
if (request()->isJson()) {
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$withdraw_no = input('withdraw_no', '');
$status = input('status', '');
$start_date = input('start_date', '');
$end_date = input('end_date', '');
$condition = [
['site_id','=',$this->site_id],
];
if ($status != '') {
$condition[] = [ 'status', '=', $status ];
}
if (!empty($withdraw_no)) {
$condition[] = ['withdraw_no', 'like', '%' . $withdraw_no . '%'];
}
if ($start_date != '' && $end_date != '') {
$condition[] = [ 'apply_time', 'between', [ strtotime($start_date), strtotime($end_date) ] ];
} else if ($start_date != '' && $end_date == '') {
$condition[] = [ 'apply_time', '>=', strtotime($start_date) ];
} else if ($start_date == '' && $end_date != '') {
$condition[] = [ 'apply_time', '<=', strtotime($end_date) ];
}
$res = $ApplyModel->getWithdrawalLogList($condition, $page, $page_size, $order = 'apply_time desc', '*');
return $res;
} else {
return $this->fetch('apply/lists');
}
}
/**
* 同意
* @return array
*/
public function agree()
{
if (request()->isJson()) {
$id = input('id', 0);
$ApplyModel = new ApplyModel();
$condition = array (
[ 'site_id', '=', $this->site_id ],
['id', '=', $id ],
[ 'status', '=', 0 ]
);
$result = $ApplyModel->agree($condition);
return $result;
}
}
/**
* 拒绝
* @return array
*/
public function refuse()
{
if (request()->isJson()) {
$id = input('id', 0);
$refuse_reason = input('refuse_reason', '');
$ApplyModel = new ApplyModel();
$condition = array (
[ 'site_id', '=', $this->site_id ],
['id', '=', $id ],
[ 'status', '=', 0 ]
);
$data = array (
'refuse_reason' => $refuse_reason
);
$result = $ApplyModel->refuse($condition, $data);
return $result;
}
}
/**
* 转账
*/
public function transferFinish()
{
if (request()->isJson()) {
$id = input('id', 0);
$certificate = input('certificate', '');
$certificate_remark = input('certificate_remark', '');
$ApplyModel = new ApplyModel();
$data = array (
'id' => $id,
'site_id' => $this->site_id,
'certificate' => $certificate,
'certificate_remark' => $certificate_remark,
);
$result = $ApplyModel->transferFinish($data);
return $result;
}
}
}

View File

@@ -0,0 +1,105 @@
<?php
namespace addon\merch\shop\controller;
use app\shop\controller\BaseShop;
use addon\merch\model\Category as CategoryModel;
class Category extends BaseShop
{
/**
* 商品分组列表
*/
public function lists()
{
if (request()->isJson()) {
$page_index = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$search_keys = input('search_keys', '');
$condition = [];
$condition[] = ['site_id', '=', $this->site_id];
if (!empty($search_keys)) {
$condition[] = ['category_name', 'like', '%' . $search_keys . '%'];
}
//排序
$link_sort = input('order', 'sort');
$sort = input('sort', 'desc');
if($link_sort == 'sort'){
$order_by = $link_sort . ' ' . $sort;
}else{
$order_by = $link_sort . ' ' . $sort.',sort desc';
}
$merch_category_model = new CategoryModel();
$list = $merch_category_model->getCategoryPageList($condition, $page_index, $page_size, $order_by);
return $list;
} else {
return $this->fetch('category/lists');
}
}
/**
* 商品分组添加
*/
public function add()
{
if (request()->isJson()) {
$category_name = input('category_name', '');
$data = [
'site_id' => $this->site_id,
'category_name' => $category_name,
'desc' => input('desc', 0)
];
$model = new CategoryModel();
$res = $model->addCategory($data);
return $res;
}
}
/**
* 商品分组编辑
*/
public function edit()
{
if (request()->isJson()) {
$data = [
'id' => input('id', ''),
'site_id' => $this->site_id,
'category_name' => input('category_name', ''),
'desc' => input('desc', 0)
];
$model = new CategoryModel();
$res = $model->editCategory($data);
return $res;
}
}
/**
* 商品分组删除
*/
public function delete()
{
if (request()->isJson()) {
$id = input('id', 0);
$model = new CategoryModel();
$result = $model->deleteCategory([['id', '=', $id], ['site_id', '=', $this->site_id]]);
return $result;
}
}
/**
* 修改排序
*/
public function modifySort()
{
if (request()->isJson()) {
$sort = input('sort', 0);
$id = input('id', 0);
$model = new CategoryModel();
$result = $model->modifySort($sort, $id, $this->site_id);
return $result;
}
}
}

View File

@@ -0,0 +1,225 @@
<?php
namespace addon\merch\shop\controller;
use app\shop\controller\BaseShop;
use app\model\system\Address as AddressModel;
use addon\merch\model\Merch as MerchModel;
use app\model\web\Config as ConfigModel;
//去除判断为空 add lucky
error_reporting(E_ALL ^ E_NOTICE );
/**
* 直播间
*/
class Merch extends BaseShop
{
public function lists()
{
if (request()->isJson()) {
$Merch = new MerchModel();
$page = input('page', 1);
$type = input('type', '');//0禁用1正常2已过期
$page_size = input('page_size', PAGE_LIST_ROWS);
$condition = [
[ 'site_id', '=', $this->site_id ],
];
$search_text = input('search_text', '');
if (!empty($search_text)) {
$condition[] = [ 'realname', 'like', '%' . $search_text . '%' ];
}
if($type != ''){
if($type == 1){
$condition[] = [ 'status', '=', 1];
}else if($type == 2){
$condition[] = [ 'end_time', '<=', time()];
}else{
$condition[] = [ 'status', '=', 0];
}
}
$data = $Merch->getMerchPageList($condition, '*', 'merch_id desc', $page, $page_size);
foreach($data['data']['list'] as &$row){
$row['end_time'] = date('Y-m-d',$row['end_time']);
$row['category_name'] = '';
if($row['category_id'] >0){
$row['category_name'] = model('merch_category')->getValue(['site_id'=>$this->site_id,'id'=>$row['category_id']],'category_name');
}
}
return $data;
} else {
$this->assign('title','商户');
$this->assign('host',$_SERVER['SERVER_NAME']);
return $this->fetch('merch/lists');
}
}
/**
* 添加编辑人员
* @return mixed
*/
public function add()
{
$merch_id = input('merch_id',0);
if (request()->isJson()) {
$Merch = new MerchModel();
$merch_name = input('merch_name', '');
$telphone = input('telphone', '');
$merch_image = input('merch_image', '');
$status = input('status', 0);
$province_id = input('province_id', 0);
$city_id = input('city_id', 0);
$district_id = input('district_id', 0);
$community_id = input('community_id', 0);
$address = input('address', '');
$full_address = input('full_address', '');
$longitude = input('longitude', 0);
$latitude = input('latitude', 0);
$end_time = input('end_time', 0);
$category_id = input('category_id', 0);
$data = array (
'site_id' => $this->site_id,
'merch_name' => $merch_name,
'category_id' => $category_id,
'telphone' => $telphone,
'merch_image' => $merch_image,
'status' => $status,
'province_id' => $province_id,
'city_id' => $city_id,
'district_id' => $district_id,
'community_id' => $community_id,
'address' => $address,
'full_address' => $full_address,
'longitude' => $longitude,
'latitude' => $latitude,
'end_time' => date_to_time($end_time),
'settlement_rate'=>input('settlement_rate'),
'desc'=>input('desc',''),
);
$user_data = [
'username' => input('username', ''),
'password' => input('password', ''),
];
if($merch_id > 0){
$res = $Merch->editMerch($data,['merch_id'=>$merch_id]);
}else{
$res = $Merch->addMerch($data,$user_data);
}
return $res;
}
//查询省级数据列表
$address_model = new AddressModel();
$list = $address_model->getAreaList([ ['pid', '=', 0 ], ['level', '=', 1 ] ]);
$this->assign('province_list', $list['data']);
$config_model = new ConfigModel();
$mp_config = $config_model->getMapConfig($this->site_id);
$this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
//效验腾讯地图KEY
$check_map_key = $config_model->checkQqMapKey($mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
$this->assign('check_map_key', $check_map_key);
$info = $merch_id>0?model('merch')->getInfo(['merch_id'=>$merch_id,'site_id' => $this->site_id]):[];
if($info){
if($info['uid'] > 0){
$info['username'] = model('user')->getValue(['uid'=>$info['uid']],'username');
}
if($info['end_time']){
$info['end_time'] = time_to_date($info['end_time'],'Y-m-d');
}
}
$this->assign('info',$info);
$this->assign('merch_id',$merch_id);
$category_list = model('merch_category')->getList(['site_id'=>$this->site_id]);
$this->assign('category_list',$category_list);
return $this->fetch('merch/add');
}
/**
* 删除人员
*/
public function delete()
{
if (request()->isJson()) {
$id = input('id', '');
$Merch = new MerchModel();
$res = $Merch->deleteMerch($id, $this->site_id);
return $res;
}
}
/**
* 修改商户状态
*/
public function statusMerch()
{
if (request()->isJson()) {
$merch_id = input('merch_id', '');
$status = input('status', 0);
$Merch = new MerchModel();
$res = $Merch->statusMerch($merch_id, $status);
return $res;
}
}
/**
* 修改商户密码
*/
public function modifypassword()
{
if (request()->isJson()) {
$merch_id = input('merch_id', '');
$new_pass = input('new_pass', '');
$merch = model('merch')->getInfo(['merch_id'=>$merch_id]);
if(!$merch){
return ['code'=>1,'message'=>'未获取到商户信息'];
}
if(!$new_pass){
return ['code'=>1,'message'=>'请输入新密码'];
}
if(!$merch['uid']){
return ['code'=>1,'message'=>'用户uid获取失败请重试'];
}
$user_data[ "password" ] = data_md5($new_pass);
model('user')->update($user_data,['uid'=>$merch['uid']]);
return ['code'=>0,'message'=>'修改商户密码成功'];
}
}
/**
* 商户选择
* @return array|mixed
*/
public function merchSelect()
{
$merch_model = new MerchModel();
if (request()->isJson()) {
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$search_text = input('search_text', '');
$merch_ids = input('merch_ids', '');
$condition = [
[ 'site_id', '=', $this->site_id ],
[ 'status', '=', 1 ]
];
if (!empty($search_text)) {
$condition[] = [ 'merch_name', 'like', '%' . $search_text . '%' ];
}
if (!empty($merch_ids)) {
$condition[] = [ 'merch_id', 'in', $merch_ids ];
}
return $merch_model->getMerchPageList($condition, '*', 'create_time desc', $page, $page_size);
} else {
//已经选择的商品sku数据
$select_id = input('select_id', '');
$this->assign('select_id', $select_id);
$merch_list = $merch_model->getMerchList([
[ 'site_id', '=', $this->site_id ],
[ 'merch_id', 'in', $select_id ]
], '*')[ 'data' ];
$this->assign('merch_list', $merch_list);
return $this->fetch('merch/merch_select');
}
}
}

View File

@@ -0,0 +1,478 @@
<style>
.card-common:first-of-type{margin-top: 0;}
.layui-card-body{display: flex;padding-bottom: 0 !important;padding-right: 50px !important;padding-left: 50px !important;flex-wrap: wrap;}
.layui-card-body .content{width: 33.3%;display: flex;flex-direction: column;margin-bottom: 30px;justify-content: center;}
.layui-card-body .content .title{color: #909399;font-size: 14px;}
.layui-card-body .money{color: #303133;font-size: 26px;margin-top: 10px;max-width: 250px;}
.layui-card-body .bottom-title{color: #909399;font-size: 14px;margin-top: 5px;}
.layui-layout-admin.admin-style-2 .screen{margin-bottom: 15px;}
.member-table{cursor: pointer}
</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">
<input type="text" name="search_text" placeholder="请输入关键词" autocomplete="off" class="layui-input ">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">提现状态</label>
<div class="layui-input-inline">
<select name="status">
<option value="all">全部</option>
<option value="0">待审核</option>
<option value="1">待转账</option>
<option value="2">已转账</option>
<option value="-1">已拒绝</option>
</select>
</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_date" id="start_time" placeholder="请输入开始时间" autocomplete="off" readonly>
</div>
<div class="layui-input-inline split">-</div>
<div class="layui-input-inline end-time">
<input type="text" class="layui-input" name="end_date" id="end_time" placeholder="请输入结束时间" autocomplete="off" readonly>
</div>
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="search">筛选</button>
</div>
</form>
</div>
</div>
<!-- 列表 -->
<table id="withdraw_list" lay-filter="withdraw_list"></table>
<script type="text/html" id="status">
{{# if(d.status == 0){ }}
<div class="layui-elip" style="color: red">待审核</div>
{{# }else if(d.status == 1){ }}
<div class="layui-elip" style="color: blue">待转账</div>
{{# }else if(d.status == 2){ }}
<div class="layui-elip" style="color: green">已转账</div>
{{# }else if(d.status == -1){ }}
<div class="layui-elip" style="color: gray">已拒绝</div>
{{# }else if(d.status == -2){ }}
<div class="layui-elip" style="color: gray">转账失败</div>
{{# } }}
</script>
<!--操作-->
<script type="text/html" id="operation">
<div class="table-btn">
{{# if(d.status == 0){ }}
<a href="javascript:;" class="layui-btn" lay-event="agree">同意</a>
<a href="javascript:;" class="layui-btn" lay-event="refuse">拒绝</a>
{{# }else if(d.status == 1 || d.status == -2){ }}
<a href="javascript:;" class="layui-btn" lay-event="actiontransfer">手动转账</a>
{{# } }}
</div>
</script>
<!--时间-->
<script type="text/html" id="apply_time">
<div class="layui-elip">{{ns.time_to_date(d.apply_time)}}</div>
</script>
<script>
var table,upload;
layui.use(['form', 'laydate','laytpl'], function() {
var form = layui.form,
laydate = layui.laydate,
currentDate = new Date(),
laytpl = layui.laytpl,
minDate = "";
form.render();
currentDate.setDate(currentDate.getDate() - 7);
//开始时间
laydate.render({
elem: '#start_time',
type: 'datetime'
});
//结束时间
laydate.render({
elem: '#end_time',
type: 'datetime'
})
laydate.render({
elem: '#payment_start_time',
type: 'datetime'
});
laydate.render({
elem: '#payment_end_time',
type: 'datetime'
});
/**
* 重新渲染结束时间
*/
function reRender(){
$("#end_time").remove();
$(".end-time").html('<input type="text" class="layui-input" placeholder="结束时间" name="end_date" id="end_time" >');
laydate.render({
elem: '#end_time',
type: 'datetime',
min: minDate
});
}
/**
* 表格加载
*/
table = new Table({
elem: '#withdraw_list',
url: ns.url("merch://shop/apply/lists"),
cols: [
[{
field: 'withdraw_no',
title: '交易单号',
unresize: 'false',
}, {
field: 'apply_money',
title: '提现金额',
align:'center',
unresize: 'false',
templet: function(data) {
return '¥'+ data.apply_money
}
}, {
field: 'transfer_type',
title: '提现方式',
align:'center',
unresize: 'false',
},{
title: '提现时间',
unresize: 'false',
align:'center',
templet: '#apply_time'
}, {
field: 'service_money',
title: '申请渠道',
unresize: 'false',
align:'center',
templet: function(data) {
return '商户后台'
}
},{
field: 'status_name',
title: '提现状态',
unresize: 'false',
align:'center',
templet: '#status'
}, {
title: '操作',
toolbar: '#operation',
align:'right',
unresize: 'false',
}]
]
});
/**
* 搜索功能
*/
form.on('submit(search)', function(data) {
table.reload({
page: {
curr: 1
},
where: data.field
});
return false;
});
/**
* 监听工具栏操作
*/
table.tool(function(obj) {
var data = obj.data;
switch(obj.event){
case 'detail':
detail(data);
break;
case 'agree':
agree(data);
break;
case 'refuse':
refuse(data);
break;
case 'actiontransfer':
laytpl($("#actiontransfer_html").html()).render(data, function(html) {
layer_pass = layer.open({
title: '提现转账',
skin: 'layer-tips-class',
type: 1,
area: ['800px'],
content: html,
});
});
//转账凭证
upload = new Upload({
elem: '#certificate'
});
break;
case 'failreason':
layer.open({
title: '失败原因',
content: data.fail_reason,
btn: []
})
break;
}
});
//提交
form.on('submit(actiontransfer)', function(data) {
actiontransfer(data.field);
return false;
});
});
/**
* 查看详情
*/
function detail(field) {
location.hash = ns.hash("shop/memberwithdraw/detail",{id:field.id});
}
/**
* 手动转账
*/
var actiontransfer_repeat_flag = false;
function actiontransfer(field) {
if(actiontransfer_repeat_flag) return false;
actiontransfer_repeat_flag = true;
// 删除图片
// if(!data.field.certificate) upload.delete();
$.ajax({
url: ns.url("merch://shop/apply/transferfinish"),
data: field,
dataType: 'JSON', //服务器返回json格式数据
type: 'POST', //HTTP请求类型
success: function(res) {
actiontransfer_repeat_flag = false;
if (res.code >= 0) {
table.reload({
page: {
curr: 1
}
});
layer.closeAll();
}else{
layer.msg(res.message);
}
}
});
}
/**
* 同意
*/
var agree_repeat_flag = false;
function agree(field) {
if(agree_repeat_flag) return false;
agree_repeat_flag = true;
layer.confirm('确定要通过该提现申请吗?', function(index) {
$.ajax({
url: ns.url("merch://shop/apply/agree"),
data: field,
dataType: 'JSON', //服务器返回json格式数据
type: 'POST', //HTTP请求类型
success: function(res) {
agree_repeat_flag = false;
if (res.code >= 0) {
table.reload({
page: {
curr: 1
}
});
layer.closeAll();
} else {
layer.closeAll();
layer.msg(res.message);
}
}
});
}, function () {
layer.closeAll();
agree_repeat_flag = false;
});
}
/**
* 拒绝
*/
var refuse_repeat_flag = false;
function refuse(field) {
layer.prompt({
title: '拒绝理由',
formType: 2,
yes: function(index, layero) {
var value = layero.find(".layui-layer-input").val();
if (value) {
if(refuse_repeat_flag) return false;
refuse_repeat_flag = true;
field.refuse_reason = value;
$.ajax({
url: ns.url("merch://shop/apply/refuse"),
data: field,
dataType: 'JSON', //服务器返回json格式数据
type: 'POST', //HTTP请求类型
success: function(res) {
layer.msg(res.message);
refuse_repeat_flag = false;
if (res.code >= 0) {
table.reload({
page: {
curr: 1
},
});
}
}
});
layer.close(index);
} else {
layer.msg('请输入拒绝理由!', {icon: 5, anim: 6});
}
}
});
}
function closePass() {
layer.close(layer_pass);
}
function toDetail(member_id){
location.hash = ns.hash('shop/member/editmember', {member_id:member_id})
}
</script>
<!-- 在线转账html -->
<script type="text/html" id="actiontransfer_html">
<div class="layui-form" lay-filter="form">
<div class="layui-form-item">
<label class="layui-form-label">真实姓名</label>
<div class="layui-input-block">
<p class="input-text ">{{ d.realname }}</p>
</div>
</div>
<!-- <div class="layui-form-item">
<label class="layui-form-label">联系电话</label>
<div class="layui-input-block">
<p class="input-text ">{{ d.mobile }}</p>
</div>
</div> -->
<div class="layui-form-item">
<label class="layui-form-label">提现类型</label>
<div class="layui-input-block">
<p class="input-text ">银行卡</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">账户名称</label>
<div class="layui-input-block">
<p class="input-text ">{{d.bank_name}}</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">银行账号</label>
<div class="layui-input-block">
<p class="input-text ">{{d.account_number}}</p>
</div>
</div>
<!-- <div class="layui-form-item">
<label class="layui-form-label">申请提现金额</label>
<div class="layui-input-block">
<p class="input-text ">{{d.apply_money}}</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">提现手续费</label>
<div class="layui-input-block">
<p class="input-text ">{{d.service_money}}</p>
</div>
</div> -->
<div class="layui-form-item">
<label class="layui-form-label">提现金额</label>
<div class="layui-input-block">
<p class="input-text ">{{d.money}}</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">转账凭证</label>
<div class="layui-input-block img-upload">
<div class="upload-img-block">
<div class="upload-img-box">
<div class="upload-default" id="certificate">
<div class="upload">
<i class="iconfont iconshangchuan"></i>
<p>点击上传</p>
</div>
</div>
<div class="operation">
<div>
<i title="图片预览" class="iconfont iconreview js-preview" style="margin-right: 20px;"></i>
<i title="删除图片" class="layui-icon layui-icon-delete js-delete"></i>
</div>
<div class="replace_img js-replace">点击替换</div>
</div>
<input type="hidden" name="certificate" >
</div>
<!-- <p id="certificate" class="no-replace">替换</p>
<input type="hidden" name="certificate" >
<i class="del">x</i> -->
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">转账凭证说明</label>
<div class="layui-input-block len-long">
<textarea name="certificate_remark" class="layui-textarea" maxlength="150"></textarea>
</div>
</div>
<input type="hidden" name="id" value="{{ d.id }}">
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="actiontransfer">确定</button>
<button class="layui-btn layui-btn-primary" onclick="closePass()">返回</button>
</div>
</div>
</script>

View File

@@ -0,0 +1,297 @@
<style>
.layui-layer-content {padding-bottom: 20px!important;}
</style>
<!-- 搜索框 -->
<div class="single-filter-box">
<button class="layui-btn" onclick="addCategory()">添加商户分类</button>
<div class="layui-form">
<div class="layui-input-inline">
<input type="text" name="search_keys" placeholder="商户分类名称" autocomplete="off" class="layui-input" maxlength="10">
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
<i class="layui-icon">&#xe615;</i>
</button>
</div>
</div>
</div>
<!-- 列表 -->
<table id="attr_class_list" lay-filter="attr_class_list"></table>
<!-- 编辑排序 -->
<script type="text/html" id="editSort">
<input name="sort" type="number" onchange="editSort({{d.id}}, this)" value="{{d.sort}}" class="layui-input edit-sort len-short">
</script>
<!-- 操作 -->
<script type="text/html" id="operation">
<div class="table-btn">
<a class="layui-btn" lay-event="edit">编辑</a>
<a class="layui-btn" lay-event="delete">删除</a>
</div>
</script>
<script type="text/html" id="addCategory">
<div class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label mid"><span class="required">*</span></label>
<div class="layui-input-block">
<input name="category_name" type="text" placeholder="商户分类名称" lay-verify="required" class="layui-input len-mid" maxlength="10">
</div>
</div>
<div class="form-row mid">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<button class="layui-btn layui-btn-primary" onclick="closeAttrLayer()">返回</button>
</div>
</div>
</script>
<script type="text/html" id="editCategory">
<div class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label mid"><span class="required">*</span></label>
<div class="layui-input-block">
<input name="category_name" type="text" value="{{ d.category_name }}" placeholder="商户分类名称" lay-verify="required" class="layui-input len-mid" maxlength="10">
</div>
</div>
<input type="hidden" name="id" value="{{ d.id }}">
<div class="form-row mid">
<button class="layui-btn" lay-submit lay-filter="edit_save">保存</button>
<button class="layui-btn layui-btn-primary" onclick="closeAttrLayer()">返回</button>
</div>
</div>
</script>
<script>
var laytpl, add_attr_index = -1,
form, table;
layui.use(['form', 'laytpl'], function() {
var repeat_flag = false; //防重复标识
laytpl = layui.laytpl;
form = layui.form;
form.render();
table = new Table({
elem: '#attr_class_list',
url: ns.url("merch://shop/category/lists"),
cols: [
[ {
field: 'category_name',
title: '标签名称',
unresize: 'false'
}, {
field: 'sort',
unresize:'false',
title: '排序',
width: '20%',
sort : true,
align: 'center',
templet: '#editSort'
}, {
title: '操作',
toolbar: '#operation',
unresize: 'false',
align : 'right'
}]
]
});
/**
* 监听工具栏操作
*/
table.tool(function(obj) {
var data = obj.data;
switch (obj.event) {
case 'edit':
editCategory(data);
break;
case 'delete':
deleteCategory(data.id);
break;
}
});
table.on("sort",function (obj) {
table.reload({
page: {
curr: 1
},
where: {
order:obj.field,
sort:obj.type
}
});
});
/**
* 删除
*/
function deleteCategory(id) {
layer.confirm('确认删除该标签吗?', function(index) {
layer.close(index);
$.ajax({
url: ns.url("merch://shop/category/delete"),
data: {
id:id
},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
if (res.code == 0) {
table.reload();
}
}
});
});
}
/**
* 搜索功能
*/
form.on('submit(search)', function(data) {
table.reload({
page: {
curr: 1
},
where: data.field
});
});
form.on('submit(save)', function(data) {
if (repeat_flag) return false;
repeat_flag = true;
$.ajax({
url: '{:addon_url("merch://shop/category/add")}',
data: data.field,
dataType: 'JSON',
type: 'POST',
success: function(data) {
layer.msg(data.message);
if (data.code == 0) {
table.reload();
layer.close(add_attr_index);
}
repeat_flag = false;
}
});
return false;
});
form.on('submit(edit_save)', function(data) {
if (repeat_flag) return false;
repeat_flag = true;
$.ajax({
url: '{:addon_url("merch://shop/category/edit")}',
data: data.field,
dataType: 'JSON',
type: 'POST',
success: function(data) {
layer.msg(data.message);
if (data.code == 0) {
table.reload();
layer.close(add_attr_index);
}
repeat_flag = false;
}
});
return false;
});
/**
* 表单验证
*/
form.verify({
num: function(value) {
if (value == '') {
return;
}
if (value % 1 != 0) {
return '排序数值必须为整数';
}
if (value < 0) {
return '排序数值必须为大于0';
}
}
});
});
function addCategory() {
var add_attr = $("#addCategory").html();
laytpl(add_attr).render({}, function(html) {
add_attr_index = layer.open({
title: '添加商户分类',
skin: 'layer-tips-class',
type: 1,
area: ['500px', '200px'],
content: html
});
});
}
function editCategory(data) {
var add_attr = $("#editCategory").html();
laytpl(add_attr).render(data, function(html) {
add_attr_index = layer.open({
title: '编辑商户分类',
skin: 'layer-tips-class',
type: 1,
area: ['500px', '300px'],
content: html
});
});
}
function closeAttrLayer() {
layer.close(add_attr_index);
}
// 监听单元格编辑
function editSort(id, event){
var data = $(event).val();
if (data == '') {
$(event).val(0);
data = 0;
}
if(!new RegExp("^-?[0-9]\\d*$").test(data)){
layer.msg("排序号只能是整数");
return ;
}
if(data<0){
layer.msg("排序号必须大于0");
return ;
}
$.ajax({
type: 'POST',
url: ns.url("merch://shop/category/modifySort"),
data: {
sort: data,
id: id
},
dataType: 'JSON',
success: function(res) {
layer.msg(res.message);
if(res.code==0){
table.reload();
}
}
});
}
</script>

View File

@@ -0,0 +1,458 @@
<style>
#container{ width: 650px; height: 500px; }
#container > div {z-index: 500!important}
.empty-address{ display: none; }
.address-content {display: inline-block;vertical-align: top;}
.day-wrap {display: flex;align-items: center}
.day-input {width: 80px}
.day-input[readonly] {background: #f5f5f5}
.day-wrap .layui-form-radio:nth-child(4) {margin-right: 0px}
.upload-img-block .upload-img-box .preview_img{width: 100%; height: 100%; display: flex; justify-content: center; align-items: center;}
.upload-img-block .upload-img-box .preview_img img{max-width: 100%; max-height: 100%;}
.upload-img-block {
padding: 10px;
width: 100px;
height: 100px;
border: 1px solid #F4F4F4;
box-sizing: border-box;
position: relative;
}
</style>
<div class="layui-form form-wrap" lay-filter="storeform" >
<input type="hidden" name="merch_id" value="{$merch_id}"/>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>商户名称:</label>
<div class="layui-input-block">
<input type="text" name="merch_name" autocomplete="off" lay-verify="merch_name" class="layui-input len-mid" value="{$info.merch_name}">
</div>
<div class="word-aux">商户的名称</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>简介:</label>
<div class="layui-input-block">
<input type="text" name="desc" autocomplete="off" lay-verify="merch_name" class="layui-input len-mid" value="{$info.desc}">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>商户分类:</label>
<div class="layui-input-block len-mid">
<select name="category_id" lay-verify="required">
<option value="">请选择分类</option>
{foreach $category_list as $k => $v}
<option value="{$v.id}" {if $info.category_id == $v.id}selected{/if}>{$v.category_name}</option>
{/foreach}
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label img-upload-lable">商户LOGO</label>
<div class="layui-input-block img-upload">
<div class="upload-img-block icon">
<div class="upload-img-box logo-image-box {if !empty($info.merch_image)}hover{/if}" >
<input type="hidden" name="merch_image" value="{$info.merch_image}">
</div>
</div>
</div>
<div class="word-aux">
<p>建议图片尺寸100 * 100像素图片格式jpg、png、jpeg。</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">商户电话:</label>
<div class="layui-input-block">
<input type="text" name="telphone" value="{$info.telphone}" lay-verify="tel" autocomplete="off" class="layui-input len-mid">
</div>
</div>
<!--自提点地址-->
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">* </span>商户地址:</label>
<div class="layui-input-inline area-select">
<select name="province_id" lay-filter="province_id" lay-verify="province_id">
{foreach $province_list as $k => $v}
<option value="{$v.id}" {if $info.province_id == $v.id}select{/if}>{$v.name}</option>
{/foreach}
</select>
</div>
<div class="layui-input-inline area-select">
<select name="city_id" lay-filter="city_id" lay-verify="city_id">
<option value="">请选择城市</option>
</select>
</div>
<div class="layui-input-inline area-select">
<select name="district_id" lay-filter="district_id" lay-verify="district_id">
<option value="">请选择区/县</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"></label>
<div class="layui-input-block">
<input type="text" name="address" placeholder="请填写商户的具体地址" value="{$info.address}" lay-verify="required" autocomplete="off" class="layui-input len-long address-content">
<input type = "hidden" name="longitude" lay-verify="required" class="layui-input" value="{$info.longitude}"/>
<input type = "hidden" name="latitude" lay-verify="required" class="layui-input" value="{$info.latitude}"/>
<button class='layui-btn-primary layui-btn' onclick="refreshFrom();">查找地址</button>
</div>
<div class="word-aux">点击查找地址可在地图上显示输入的地理位置</div>
</div>
<div class="layui-form-item" style="display: none;">
<label class="layui-form-label">地图定位:</label>
<div class="layui-input-block">
<div id="container" class="selffetch-map"></div>
</div>
<span class="layui-word-aux empty-address">请选择地理位置!在地图上点击得到的地理位置会自动填入到对应的输入框中</span>
</div>
<div class="layui-form-item">
<label class="layui-form-label">状态:</label>
<div class="layui-input-block">
<input type="checkbox" name="status" value="1" lay-skin="switch" {if !empty($info) && $info.status==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" style="display: flex">
<input type="settlement_rate" name="settlement_rate" placeholder="请输入抽成比例" value="{$info.settlement_rate}" class="layui-input len-short" autocomplete="off">
<div class="layui-form-mid" style="margin-left: 8px">%</div>
</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="text"class="layui-input len-mid" name="end_time" id="end_time" value="{$info.end_time}" placeholder="请选择到期时间" autocomplete="off" readonly>
</div>
</div>
{if $info.username}
<div class="layui-form-item">
<label class="layui-form-label">商户账号:</label>
<div class="layui-input-block">
<p class="input-text">{$info.username}</p>
<input type="hidden" name="user_type" value="1"/>
</div>
</div>
{else/}
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>商户账号:</label>
<div class="layui-input-block">
<input type="text" name="username" lay-verify="required" placeholder="请填写商户登录账号" autocomplete="off" class="layui-input len-mid">
<input type="hidden" name="user_type" value="0"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>商户密码:</label>
<div class="layui-input-block">
<input type="password" name="password" lay-verify="required" placeholder="请填写商户登录密码" autocomplete="off" class="layui-input len-mid">
</div>
</div>
{/if}
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<button class="layui-btn layui-btn-primary" onclick="back()">返回</button>
<a id="storeImage"></a>
</div>
</div>
<script type="text/html" id="storeLogoImageTpl">
{{# if(d.list){ }}
<div class="preview_img">
<img layer-src src="{{ns.img(d.list)}}" class="img_prev"/>
</div>
<div class="operation">
<div>
<i title="图片预览" class="iconfont iconreview js-preview" style="margin-right: 20px;"></i>
<i title="删除图片" class="layui-icon layui-icon-delete js-delete" ></i>
</div>
<div class="replace_img js-replace js-add-logo-image">点击替换</div>
</div>
<input type="hidden" name="merch_image" value="{{d.list}}">
{{# }else{ }}
<div class="upload-default">
<div class="upload js-add-logo-image" >
<i class="iconfontnew icon-tianjiatupian" style="color: #4390FF"></i>
<p style="color: #b8b9bd">添加图片</p>
</div>
</div>
{{# } }}
</script>
<script type="text/javascript" src="SHOP_JS/address.js"></script>
<script src="https://map.qq.com/api/gljs?v=1.exp&libraries=service&key={$tencent_map_key}"></script>
<script src="https://map.qq.com/api/js?v=2.exp&key={$tencent_map_key}"></script>
<script src="https://mapapi.qq.com/jsapi_v2/2/4/148/main.js"></script>
<script type="text/javascript" src="STATIC_JS/qq_map.js?time=20240601"></script>
<script>
var form, repeat_flag, map_class;
var saveData = null;
layui.use(['form','laydate'], function() {
var laydate = layui.laydate;
form = layui.form;
repeat_flag = false;//防重复标识
form.render();
laydate.render({
elem: '#end_time',
type: 'date'
});
var initdata = {province_id : '{$info.province_id}', city_id : '{$info.city_id}', district_id : '{$info.district_id}'};
initAddress(initdata, "storeform");
if('{$info.latitude}' == "" || '{$info.longitude}' == ""){
var latlng = {lat:'',lng:''};
}else{
var latlng = {lat:'{$info.latitude}',lng:'{$info.longitude}'};
}
//地图展示
if($("#container").length) {
setTimeout(function () {
map_class = new mapClass("container", latlng);
},200);
}
/**
* 验证码
*/
form.verify({
required : function(value, item){
var msg = $(item).attr("placeholder") != undefined ? $(item).attr("placeholder") : '';
if(value == '') return msg;
},
province_id : function(value, item){
if(value == ''){
return '请选择省份';
}
},
city_id : function(value, item){
if(value == ''){
return '请选择城市';
}
},
// district_id : function(value, item){
// if(value == ''){
// return '请选择区/县';
// }
// },
tel : function(value, item) {
if (value != '') {
if (!ns.parse_telephone(value) && !ns.parse_mobile(value)) {
return '请输入正确的电话号码或手机号!';
}
}
},
merch_name : function (value,item) {
if(value == ""){
return '请输入商户名称';
}
},
end_time: function(value, item){
/*var end_time = $(item).parents('.layui-form-item').find("input[name=end_time]").val();
var start_time = $(item).parents('.layui-form-item').find("input[name=start_time]").val();
var time_interval = $('[name="time_interval"]:checked').val();
if (parseInt(end_time) < parseInt(start_time)) {
return '结束时间不能小于开始时间';
}
if ((parseInt(end_time) - parseInt(start_time)) / 60 < parseInt(time_interval)) {
return '时间间隔不能小于' + time_interval + '分钟';
}*/
},
});
// 添加logo图片
let storeLogoImage = '{$info.merch_image}';
$("body").off("click", ".js-add-logo-image").on("click", ".js-add-logo-image", function () {
openAlbum(function (data) {
storeLogoImage = data[0].pic_path;
refreshLogoStoreImage();
}, 1, 1);
});
//渲染logo图片
function refreshLogoStoreImage() {
var merch_image_template = $("#storeLogoImageTpl").html();
var data = {
list: storeLogoImage
};
laytpl(merch_image_template).render(data, function (html) {
$(".logo-image-box").html(html);
//加载图片放大
loadImgMagnify();
if (storeLogoImage.length) {
//预览
$(".logo-image-box .js-preview").click(function () {
$(this).parent().parent().prev().find("img").click();
});
//图片删除
$(".logo-image-box .js-delete").click(function () {
storeLogoImage = '';
refreshLogoStoreImage();
});
}
});
}
refreshLogoStoreImage();
function saveFunc(){
var data = saveData;
var full_address = [];
full_address.push($("select[name=province_id] option:selected").text());
full_address.push($("select[name=city_id] option:selected").text());
full_address.push($("select[name=district_id] option:selected").text());
data.field.full_address = full_address.toString();
if(repeat_flag) return;
repeat_flag = true;
$.ajax({
type : "POST",
dataType: 'JSON',
url : ns.url("merch://shop/merch/add"),
async : true,
data : data.field,
success : function(res) {
repeat_flag = false;
if (res.code == 0) {
layer.confirm('编辑成功', {
title: '操作提示',
btn: ['返回列表', '继续操作'],
yes: function(index, layero) {
location.hash = ns.hash("merch://shop/merch/lists")
layer.close(index);
},
btn2: function(index, layero) {
layer.close(index);
}
});
} else {
layer.msg(res.message);
}
}
})
}
/**
* 监听提交
*/
form.on('submit(save)', function(data){
saveData = data;
/*if( data.field.longitude == "" || data.field.latitude == ""){
layer.msg('请确认地理位置!');
$(".empty-address").show();
return;
}else{
$(".empty-address").hide();
}*/
saveFunc();
});
});
function back() {
location.hash = ns.hash("merch://shop/merch/lists");
}
/**
* 重新渲染表单
*/
function refreshFrom(){
form.render();
orderAddressChange();//改变地址
map_class.mapChange();
}
//动态改变订单地址赋值
function orderAddressChange(){
map_class.address.province = $("select[name=province_id]").val();
map_class.address.province_name = $("select[name=province_id] option:selected").text();
map_class.address.city = $("select[name=city_id]").val();
map_class.address.city_name = $("select[name=city_id] option:selected").text();
map_class.address.district = $("select[name=district_id]").val();
map_class.address.district_name = $("select[name=district_id] option:selected").text();
map_class.address.detail_address = $("input[name='address']").val();
}
/**
* 地址下拉框(主要用于坐标记录)
*/
function selectCallBack(){
$("input[name=longitude]").val(map_class.address.longitude);//坐标
$("input[name=latitude]").val(map_class.address.latitude);//坐标
}
//地图点击回调事件
function mapChangeCallBack(){
$("input[name=address]").val(map_class.address.address);//详细地址
$("input[name=longitude]").val(map_class.address.longitude);//坐标
$("input[name=latitude]").val(map_class.address.latitude);//坐标
$.ajax({
type : "POST",
dataType: 'JSON',
url : ns.url("shop/address/getGeographicId"),
async : true,
data : {
"address" : map_class.address.area
},
success : function(data) {
map_class.address.province = data.province_id;
map_class.address.city = data.city_id;
map_class.address.district = data.district_id;
map_class.address.township = data.subdistrict_id;
map_class.map_change = false;
form.val("storeform", {
"province_id": data.province_id
});
$("select[name=province_id]").change();
form.val("storeform", {
"city_id": data.city_id
});
$("select[name=city_id]").change();
form.val("storeform", {
"district_id": data.district_id
});
refreshFrom();//重新渲染form
map_class.map_change = true;
}
})
}
function timeTypeChange(type){
if(type == 1){
$('.time-type-view').show();
}else{
$('.time-type-view').hide();
}
}
</script>

View File

@@ -0,0 +1,308 @@
<link rel="stylesheet" type="text/css" href="SHOP_CSS/merch_lists.css?v=1" />
<style>
.merch-info{display: flex;align-items: center;}
.merch-info img{margin-right: 10px;width: 40px;}
.merch-info .merch-tab-wrap{display: flex;flex-wrap: wrap;}
.merch-info .merch-content p{line-height: 1;margin-bottom: 5px;}
.merch-info .merch-tab-wrap span{font-size: 12px;border: 1px solid;border-radius: 2px;padding: 3px 4px;line-height: 1;margin-right: 5px;margin-top: 5px;}
.relation-info{display: flex;flex-direction: column;}
.relation-info p{white-space: break-spaces;line-height: 1.5;}
</style>
<!-- 搜索框 -->
<div class="single-filter-box">
<button class="layui-btn" onclick="add()">添加{$title}</button>
<div class="layui-form">
<div class="layui-input-inline">
<input type="text" name="keyword" placeholder="请输入{$title}名称" autocomplete="off" class="layui-input">
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
<i class="layui-icon">&#xe615;</i>
</button>
</div>
</div>
</div>
<div style="padding-left: 6px;color:#888">商户登录地址:<a target="_blank" href="https://{$host}/merchant">https://{$host}/merchant</a></div>
<div class="layui-tab table-tab" lay-filter="merch_tab">
<ul class="layui-tab-title">
<li class="layui-this" lay-id="" lay-typer="">全部{$title}</li>
<li lay-id="1" lay-type="1">正常</li>
<li lay-id="0" lay-type="0">禁用</li>
<li lay-id="2" lay-type="2">已过期</li>
</ul>
<table id="merch_list" lay-filter="merch_list"></table>
</div>
<input type="hidden" id="merchid" value="0">
<script type="text/html" id="reset_merch_pass">
<!-- 重置密码弹框html -->
<div class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label mid"><span class="required">*</span></label>
<div class="layui-input-block">
<input type="password" id="new_pass" name="new_pass" required class="layui-input len-mid" autocomplete="off" readonly onfocus="this.removeAttribute('readonly');" onblur="this.setAttribute('readonly',true);">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label mid"><span class="required">*</span></label>
<div class="layui-input-block">
<input type="password" id="repeat_pass" name="repeat_pass" required class="layui-input len-mid" autocomplete="off" readonly onfocus="this.removeAttribute('readonly');" onblur="this.setAttribute('readonly',true);">
</div>
</div>
<div class="form-row mid">
<button class="layui-btn" onclick="merchrepass()">确定</button>
<button class="layui-btn layui-btn-primary" onclick="layer.closeAll()">返回</button>
</div>
</div>
</script>
<!-- 商户信息 -->
<script type="text/html" id="merch_info">
<div class="merch-info">
{{# if(d.merch_image){ }}
<img src="{{ns.img(d.merch_image)}}" alt="" onerror="this.src = '{:img('public/static/img/logo/shop_logo.png')}' ">
{{# }else{ }}
<img src="{:img('public/static/img/logo/shop_logo.png')}">
{{# } }}
<div class="merch-content">
<p>{{d.merch_name}}</p>
<div class="merch-tab-wrap">
<span class="border-color text-color">商家店铺</span>
</div>
</div>
</div>
</script>
<!-- 联系信息 -->
<script type="text/html" id="relation_info">
<div class="relation-info">
<p>联系方式{{d.telphone || '--'}}</p>
<p>地址{{d.full_address + ' ' + d.address}}</p>
</div>
</script>
<!-- 订单信息 -->
<script type="text/html" id="order_info">
<div class="relation-info">
<p style="color:#105CFB;">{{d.order_money}}</p>
</div>
</script>
<!-- 商户信息 -->
<script type="text/html" id="settlement_info">
<div class="relation-info">
{{d.settlement_rate + '%'}}
</div>
</script>
<!-- 操作 -->
<script type="text/html" id="operation">
<div class="table-btn">
<a class="layui-btn" lay-event="editMerch">商户编辑</a>
{{# if(d.status == 0) { }}
<a class="layui-btn" lay-event="closeMerch">启用</a>
{{# } else{ }}
<a class="layui-btn" lay-event="closeMerch">禁用</a>
{{# } }}
<a class="layui-btn" lay-event="resetPassword">修改密码</a>
</div>
</script>
<script>
var table,form,element;
layui.use(['form','element'], function() {
form = layui.form;
element = layui.element;
form.render();
refreshTable();
// 搜索功能
form.on('submit(search)', function(data) {
refreshTable();
});
element.on('tab(merch_tab)', function(){
refreshTable();
});
// 监听工具栏操作
table.tool(function (obj) {
var data = obj.data;
switch (obj.event) {
case 'editMerch':
editMerch(data.merch_id);
break;
case 'closeMerch':
closeMerch(data.merch_id,data.status);
break;
case 'resetPassword':
resetPassword(data.merch_id);
break;
}
});
});
// 刷新表格列表
function refreshTable(){
table = new Table({
id: 'merch_list',
elem: '#merch_list',
  url: ns.url("merch://shop/merch/lists"),
cols: [
[ {
title: '商户信息',
unresize: 'false',
width: '12%',
templet: '#merch_info'
}, {
field: 'category_name',
title: '商家分类',
unresize: 'false',
width: '11%',
},{
title: '联系信息',
unresize: 'false',
width: '17%',
templet: '#relation_info'
}, {
title: '商户可提现金额',
unresize: 'false',
width: '16%',
templet: '#order_info'
}, {
title: '抽成比例',
unresize: 'false',
width: '16%',
templet: "#settlement_info"
}, {
title: '到期时间',
unresize: 'false',
width: '12%',
templet: function(data) {
return data.end_time;
}
},{
unresize:'false',
title: '商户状态',
width: '8%',
align: 'center',
templet: function(data){
let state = '--';
state = data.status == 0 ? '<span style="color:#ff5555;">禁用</span>' : '<span style="color:#105CFB;">正常</span>';
return state;
}
},{
title: '操作',
toolbar: '#operation',
unresize: 'false',
align: 'right',
}]
],
where: {
search_text: $("input[name='keyword']").val(),
status: $(".layui-tab.table-tab .layui-tab-title .layui-this").attr('lay-id'),
type: $(".layui-tab.table-tab .layui-tab-title .layui-this").attr('lay-type')
}
});
}
function resetPassword(merch_id) {
$('#merchid').val(merch_id)
layer.open({
title:'修改密码',
type: 1,
content: $('#reset_merch_pass').html(),
offset: 'auto',
area: ['500px']
});
setTimeout(function () {
$(".reset-pass").removeClass('layui-this');
form.render();
}, 1000);
//window.open(ns.href("cashier://shop/index/cashier", {merch_id: storeId}))
}
function merchrepass() {
var merchid = $('#merchid').val();
var new_pass = $("#new_pass").val();
var repeat_pass = $("#repeat_pass").val();
if (new_pass == '') {
$("#new_pass").focus();
layer.msg("新密码不能为空");
return;
}else if ($("#new_pass").val().length < 6) {
$("#new_pass").focus();
layer.msg("密码不能少于6位数");
return;
}
if (repeat_pass == '') {
$("#repeat_pass").focus();
layer.msg("密码不能为空");
return;
} else if ($("#repeat_pass").val().length < 6) {
$("#repeat_pass").focus();
layer.msg("密码不能少于6位数");
return;
}
if (new_pass != repeat_pass) {
$("#repeat_pass").focus();
layer.msg("两次密码输入不一致,请重新输入");
return;
}
if (repeatPwdFlag) return;
repeatPwdFlag = true;
$.ajax({
type: "POST",
dataType: 'JSON',
url: ns.url("merch://shop/merch/modifypassword"),
data: {"merch_id": merchid, "new_pass": new_pass},
success: function (res) {
layer.msg(res.message);
repeatPwdFlag = false;
if (res.code == 0) {
setTimeout(function () {
layer.closeAll();
}, 1000);
}
}
});
}
function add() {
location.hash = ns.hash("merch://shop/merch/add");
}
function editMerch(data) {
location.hash = ns.hash("merch://shop/merch/add",{"merch_id":data});
}
function closeMerch(merch_id, status){
var msg = '确认要禁用该{$title}吗?';
if(status == 0) {
msg = '确定要启用该{$title}吗?';
}
layer.confirm(msg, function(index) {
layer.close(index);
$.ajax({
url: ns.url("merch://shop/merch/statusMerch"),
data: {merch_id:merch_id, status:status==1?0:1},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
if (res.code == 0) {
refreshTable();
}
}
});
});
}
</script>

View File

@@ -0,0 +1,163 @@
<style>
.select-merch{margin: 20px;}
.select-merch .single-filter-box{padding: 0;}
.select-merch .single-filter-box .layui-form{margin: inherit;}
.select-merch .single-filter-box .layui-form div{margin: 0;}
</style>
<div class="select-merch">
<div class="single-filter-box">
<div class="layui-form">
<div class="layui-input-inline">
<input type="text" name="search_text" placeholder="请输入商户名称" autocomplete="off" class="layui-input">
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
<i class="layui-icon">&#xe615;</i>
</button>
</div>
</div>
</div>
<table id="merch_list" lay-filter="merch_list"></table>
</div>
<script type="text/html" id="checkbox">
<input type="checkbox" data-merch-id="{{d.merch_id}}" name="merch_checkbox" lay-skin="primary" lay-filter="merch_checkbox">
<input type="hidden" data-merch-id="{{d.merch_id}}" name="merch_json" value='{{ JSON.stringify(d) }}' />
</script>
<script>
var select_id = localStorage.getItem('merch_select_id') || '', // "{$select_id}", //选中文章id
merchList ={:json_encode($merch_list)},
selectList = {}, //选中文章所有数据res
merchIdArr = select_id.length ? select_id.split(',') : [], //已选中的文章id
table, form,laytpl,element;
$(function () {
for (var k in merchList) {
selectList['merch_id_' + merchList[k].merch_id] = {
merch_id: merchList[k].merch_id,
merch_name: merchList[k].merch_name,
merch_image: merchList[k].merch_image,
desc: merchList[k].desc,
read_num: merchList[k].read_num,
}
}
layui.use(['form', 'laytpl', 'element'], function () {
form = layui.form;
laytpl = layui.laytpl;
element = layui.element;
table = new Table({
elem: '#merch_list',
url: ns.url("merch://shop/merch/merchSelect"),
cols: [
[
{
title: '<input type="checkbox" name="merch_checkbox_all" lay-skin="primary" lay-filter="merch_checkbox_all">',
width: "8%",
templet: '#checkbox'
},
{
field: 'merch_name',
title: '商户名称',
width: '35%'
},
{
field: 'telphone',
title: '联系方式',
width: '30%'
},
{
field: 'merch_image',
title: '封面图',
width: '20%',
templet: function (d) {
return `<img layer-src src="${ns.img(d.merch_image)}"/>`;
}
},
]
],
callback: function (res) {
// 更新复选框状态
for (var i = 0; i < merchIdArr.length; i++) {
var selected_merch = $("input[name='merch_checkbox'][data-merch-id='" + merchIdArr[i] + "']");
if (selected_merch.length) {
selected_merch.prop("checked", true);
}
}
form.render();
dealWithTableSelectedNum();
}
});
form.on('submit(search)', function (data) {
formSearch();
return false;
});
//公共搜索方法
function formSearch() {
var data = {};
data.search_text = $("input[name='search_text']").val();
data.merch_ids = merchIdArr.toString();
table.reload({
page: {
curr: 1
},
where: data
});
}
// 勾选文章
form.on('checkbox(merch_checkbox_all)', function (data) {
var all_checked = data.elem.checked;
$("input[name='merch_checkbox']").each(function () {
var checked = $(this).prop('checked');
if (all_checked != checked) {
$(this).next().click();
}
})
});
// 勾选文章
form.on('checkbox(merch_checkbox)', function (data) {
var merch_id = $(data.elem).attr("data-merch-id");
var spuLen = $("input[name='merch_checkbox'][data-merch-id=" + merch_id + "]:checked").length;
if (spuLen) {
var item = JSON.parse($("input[name='merch_json'][data-merch-id=" + merch_id + "]").val());
delete item.LAY_INDEX;
delete item.LAY_TABLE_INDEX;
selectList['merch_id_' + merch_id] = item;
} else {
delete selectList['merch_id_' + merch_id];
}
dealWithTableSelectedNum();
});
});
});
function selectMerchListener(callback) {
merchIdArr = [];
for (var key in selectList){
merchIdArr.push(selectList[key].merch_id);
}
if(merchIdArr.length == 0) {
layer.msg('请选择商户');
return;
}
callback({
merchIds: merchIdArr,
list: selectList
});
}
//在表格底部增加了一个容器
function dealWithTableSelectedNum() {
$(".layui-table-bottom-left-container").html('已选择 '+ Object.keys(selectList).length +' 个商户');
}
</script>

View File

@@ -0,0 +1,146 @@
<style>
.goods-type{display: flex;justify-content: space-between;}
.goods-type .item-type{display: flex;flex-direction: column;align-items: center;padding: 15px;border: 1px solid #e5e5e5;border-radius: 5px;cursor: pointer;}
.goods-type .item-type ~ .item-type{margin-left: 20px;}
.goods-type .item-img{display: flex;justify-content: center;align-content: center;width: 200px;height: 270px;}
.goods-type .item-img img{max-width: 100%;max-height: 100%;}
.goods-type .item-content{margin-top: 15px;text-align: center;}
.goods-type .item-content .description{margin-top: 10px;font-size: 12px;color: #999;line-height: 1.6;}
.layui-layer-page .layui-layer-content{padding: 30px;}
.layui-table-header{overflow: inherit;}
.layui-table-header .layui-table-cell{overflow: inherit;}
.layui-form-item .layui-form-checkbox[lay-skin=primary] {margin-top: 0;}
.layui-layout-admin.admin-style-2 .layui-form-item .layui-input-inline{background-color: #fff;}
.layui-layout-admin.admin-style-2 .layui-body .layui-tab + .body-content {padding-top: 65px !important;}
</style>
<div class="single-filter-box">
<div class="layui-form">
<div class="layui-input-inline len-mid">
<input type="text" name="search_text" placeholder="请输入姓名" class="layui-input">
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
<i class="layui-icon">&#xe615;</i>
</button>
</div>
</div>
<input type="hidden" name="ap_id" value="{$ap_id}" />
</div>
<table id="goods_list" lay-filter="goods_list"></table>
<!-- 直播间信息 -->
<script type="text/html" id="info">
<div class="layui-table-cell goods-info">
{{# if(d.headimg){ }}
<img layer-src src="{{ns.img(d.headimg)}}" onerror="this.src = '{:img('public/static/img/default_img/head.png')}' ">
{{# }else{ }}
<img layer-src src="{:img('public/static/img/default_img/head.png')}">
{{# } }}
<span class="room-name" title="{{ d.nickname }}">{{ d.nickname }}</span>
</div>
</script>
<!-- 操作 -->
<script type="text/html" id="operation">
<div class="table-btn">
<a class="layui-btn" lay-event="del">删除</a>
</div>
</script>
<script>
var form,table,element,syncClick = false,delete_flag = false;
layui.use(['form', 'element'], function() {
form = layui.form;
element = layui.element;
table = new Table({
elem: '#goods_list',
url: ns.url("personnel://shop/personnel/message"),
cols: [
[{
title: '用户',
unresize: 'false',
templet: '#info'
}, {
title: '姓名',
unresize: 'false',
field: 'username'
}, {
field: 'mobile',
title: '电话',
unresize: 'false',
}, {
field: 'message',
title: '留言内容',
unresize: 'false',
},{
field: 'createtime',
title: '留言时间',
unresize: 'false',
},
{
title: '操作',
toolbar: '#operation',
unresize: 'false',
align:'right'
}]
]
});
/**
* 监听搜索
*/
form.on('submit(search)', function(data){
table.reload({
page: {
curr: 1
},
where: data.field
});
});
table.tool(function(obj) {
var data = obj.data;
switch (obj.event) {
case 'del': //删除
layer.confirm('确定要删除该留言吗?', function(index) {
if (delete_flag) return false;
delete_flag = true;
layer.close(index);
$.ajax({
url: ns.url("personnel://shop/personnel/delmessage"),
data: {
id: data.id
},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
delete_flag = false;
if (res.code == 0) {
table.reload({
page: {
curr: 1
},
});
}
}
});
}, function() {
layer.close();
delete_flag = false;
});
break;
}
})
});
function add() {
location.hash = ns.hash("personnel://shop/personnel/add");
}
</script>

Binary file not shown.

After

Width:  |  Height:  |  Size: 402 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB