初始上传

This commit is contained in:
2026-04-04 17:27:12 +08:00
parent 4d80d28eb4
commit b7e11774ee
11191 changed files with 1588469 additions and 0 deletions

View File

@@ -0,0 +1,198 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace addon\fenxiao\shop\controller;
use addon\fenxiao\model\Config as ConfigModel;
use addon\fenxiao\model\FenxiaoLevel as FenxiaoLevelModel;
use addon\fenxiao\model\FenxiaoWithdraw;
use app\model\goods\Goods as GoodsModel;
use app\model\system\Document;
use app\shop\controller\BaseShop;
/**
* 分销设置
*/
class Config extends BaseShop
{
/**
* 分销基础设置
*/
public function basics()
{
$model = new ConfigModel();
if (request()->isJson()) {
$data = [
'level' => input('level', ''),//分销层级
'internal_buy' => input('internal_buy', ''),//分销内购
'is_examine' => input('is_examine', ''),//是否需要审核0关闭 1开启
'self_purchase_rebate' => input('self_purchase_rebate', ''),//是否开启分销商自购返佣0关闭 1开启
'fenxiao_condition' => input('fenxiao_condition', ''),//成为分销商条件(0无条件 1申请 2消费次数 3消费金额 4购买指定商品)
'consume_count' => input('consume_count', ''),//消费次数
'consume_money' => input('consume_money', ''), //消费金额
'goods_ids' => input('goods_ids', ''), //指定商品id
'consume_condition' => input('consume_condition', ''),//消费条件(1付款后 2订单完成)
'perfect_info' => input('perfect_info', ''),//完善资料
'child_condition' => input('child_condition', ''),//成为下线条件
'is_apply' => input('is_apply', ''),//是否开启分销申请0关闭 1开启
'is_commission_money' => input('is_commission_money', ''),//是否开启商品详情一级佣金0关闭 1开启
'one_rate' => input('one_rate', 0.00),
'two_rate' => input('two_rate', 0.00),
'three_rate' => input('three_rate', 0.00),
];
$res = $model->setFenxiaoBasicsConfig($data, 1, $this->site_id);
return $res;
} else {
$basics = $model->getFenxiaoBasicsConfig($this->site_id);
$this->assign('basics_info', $basics[ 'data' ][ 'value' ]);
$fenxiao = $model->getFenxiaoConfig($this->site_id)[ 'data' ][ 'value' ];
$fenxiao[ 'goods_list' ] = '';
if ($fenxiao[ 'fenxiao_condition' ] == 4) { // 购买指定商品
$goods_model = new GoodsModel();
$condition[] = [ 'goods_id', 'in', $fenxiao[ 'goods_ids' ] ];
$condition[] = [ 'site_id', '=', $this->site_id ];
$fenxiao[ 'goods_list' ] = $goods_model->getGoodsList($condition, 'goods_id,goods_name,goods_image,price,goods_stock')[ 'data' ];
}
$this->assign('fenxiao_info', $fenxiao);
$relation = $model->getFenxiaoRelationConfig($this->site_id);
$this->assign('relation_info', $relation[ 'data' ][ 'value' ]);
$level_model = new FenxiaoLevelModel();
$level_info = $level_model->getLevelInfo([ [ 'site_id', '=', $this->site_id ], [ 'is_default', '=', 1 ] ], 'one_rate,two_rate,three_rate')[ 'data' ];
$this->assign('level', $level_info);
return $this->fetch('config/basics');
}
}
/**
* 分销协议设置
*/
public function agreement()
{
$model = new ConfigModel();
if (request()->isJson()) {
$data = [
'is_agreement' => input('is_agreement', ''),//是否显示申请协议
'agreement_title' => input('agreement_title', ''),//协议标题
'agreement_content' => input('agreement_content', ''),//协议内容
'img' => input('img', ''),//申请页面顶部图片
];
$res = $model->setFenxiaoAgreementConfig($data, 1, $this->site_id);
return $res;
} else {
$agreement = $model->getFenxiaoAgreementConfig($this->site_id);
$this->assign('agreement_info', $agreement[ 'data' ][ 'value' ]);
$document_model = new Document();
$document = $document_model->getDocument([ [ 'site_id', '=', $this->site_id ], [ 'app_module', '=', 'shop' ], [ 'document_key', '=', 'FENXIAO_AGREEMENT'] ]);
$this->assign('document', $document[ 'data' ]);
return $this->fetch('config/agreement');
}
}
/**
* 分销结算设置
*/
public function settlement()
{
$model = new ConfigModel();
if (request()->isJson()) {
$transfer_type = '';
if (!empty(input('transfer_type'))) {
$transfer_type = implode(',', input('transfer_type'));
}
$data = [
'account_type' => input('account_type', ''),//佣金计算方式
'settlement_day' => input('settlement_day', ''),//天数
'withdraw' => input('withdraw', ''),//最低提现额度
'withdraw_rate' => input('withdraw_rate', ''),//佣金提现手续费
// 'min_no_fee' => input('min_no_fee', ''),//最低免手续费区间
// 'max_no_fee' => input('max_no_fee', ''),//最高免手续费区间
'withdraw_status' => input('withdraw_status', ''),//提现审核
'withdraw_type' => input('withdraw_type', ''),//提现方式,
'transfer_type' => $transfer_type,//转账方式,
'is_auto_transfer' => input('is_auto_transfer', 0),//是否自动转账 1 手动转账 2 自动转账
// 'min' => input('min', 0),//提现最低额度
'max' => input('max', 0),//提现最高额度
];
$res = $model->setFenxiaoSettlementConfig($data, 1, $this->site_id);
return $res;
} else {
// $settlement = $model->getFenxiaoSettlementConfig($this->site_id);
// $this->assign('settlement_info', $settlement[ 'data' ][ 'value' ]);
$withdraw_config = $model->getFenxiaoWithdrawConfig($this->site_id)[ 'data' ][ 'value' ] ?? [];
$this->assign('withdraw_info', $withdraw_config);
$fenxiao_withdraw_model = new FenxiaoWithdraw();
$transfer_type_list = $fenxiao_withdraw_model->getTransferType($this->site_id);
$transfer_type_list[ 'balance' ] = '余额';
$this->assign('transfer_type_list', $transfer_type_list);
return $this->fetch('config/settlement');
}
}
/**
* 分销文字设置
*/
public function words()
{
$model = new ConfigModel();
if (request()->isJson()) {
$data = [
'concept' => input('concept', ''),//分销概念
'fenxiao_name' => input('fenxiao_name', ''),//分销商名称
'withdraw' => input('withdraw', ''),//提现名称
'account' => input('account', ''),//佣金
'my_team' => input('my_team', ''),//我的团队
'child' => input('child', ''),//下线
];
$res = $model->setFenxiaoWordsConfig($data, 1, $this->site_id);
return $res;
} else {
$config_info = $model->getFenxiaoWordsConfig($this->site_id)[ 'data' ][ 'value' ];
$this->assign('config_info', $config_info);
return $this->fetch('config/words');
}
}
/**
* 活动规则
*/
public function promoteRule()
{
$document_model = new Document();
if (request()->isJson()) {
$content = input('content', '');
$res = $document_model->setDocument('分销推广规则', $content, [ [ 'site_id', '=', $this->site_id ], [ 'app_module', '=', 'shop' ], [ 'document_key', '=', 'FENXIAO_PROMOTE_RULE'] ]);
return $res;
} else {
$document = $document_model->getDocument([ [ 'site_id', '=', $this->site_id ], [ 'app_module', '=', 'shop' ], [ 'document_key', '=', 'FENXIAO_PROMOTE_RULE'] ]);
$this->assign('document', $document[ 'data' ]);
return $this->fetch('config/promote_rule');
}
}
}

View File

@@ -0,0 +1,695 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace addon\fenxiao\shop\controller;
use addon\fenxiao\model\Config as ConfigModel;
use addon\fenxiao\model\Fenxiao as FenxiaoModel;
use addon\fenxiao\model\FenxiaoAccount;
use addon\fenxiao\model\FenxiaoApply;
use addon\fenxiao\model\FenxiaoData;
use addon\fenxiao\model\FenxiaoLevel as FenxiaoLevelModel;
use addon\fenxiao\model\FenxiaoOrder as FenxiaoOrderModel;
use app\model\goods\Goods as GoodsModel;
use app\model\member\Member as MemberModel;
use app\shop\controller\BaseShop;
use think\App;
/**
* 分销设置
*/
class Fenxiao extends BaseShop
{
public function __construct(App $app = null)
{
$this->replace = [
'FENXIAO_JS' => __ROOT__ . '/addon/fenxiao/shop/view/public/js',
'FENXIAO_CSS' => __ROOT__ . '/addon/fenxiao/shop/view/public/css'
];
parent::__construct($app);
}
/**
* 分销概况
*/
public function index()
{
return $this->fetch('fenxiao/index');
}
public function stat()
{
$data = [
'account_data' => [],
'fenxiao_account' => 0.00,
'shop_commission' => [],
'shop_commission_end' => [],
'commission_money' => 0.00,
'fenxiao_apply_num' => 0,
'fenxiao_num' => 0,
'fenxiao_goods_num' => 0
];
$fenxiao_data_model = new FenxiaoData();
$account_data = $fenxiao_data_model->getFenxiaoAccountData($this->site_id);
$data['account_data'] = $account_data;
//累计佣金
$fenxiao_account = number_format($account_data[ 'account' ], 2, '.', '');
$data['fenxiao_account'] = $fenxiao_account;
//获取分销的总金额
$order_model = new FenxiaoOrderModel();
$commission = $order_model->getFenxiaoOrderInfo([ [ 'site_id', '=', $this->site_id ] ], 'sum(real_goods_money) as real_goods_money,sum(commission) as commission')[ 'data' ];
if ($commission[ 'real_goods_money' ] == null) {
$commission[ 'real_goods_money' ] = '0.00';
}
if ($commission[ 'commission' ] == null) {
$commission[ 'commission' ] = '0.00';
}
$data['shop_commission'] = $commission;
//获取已结算分销的总金额
$commission_end = $order_model->getFenxiaoOrderInfo([ [ 'site_id', '=', $this->site_id ], [ 'is_settlement', '=', 1 ], [ 'is_refund', '=', 0 ] ], 'sum(real_goods_money) as real_goods_money,sum(commission) as commission')[ 'data' ];
if ($commission_end[ 'real_goods_money' ] == null) {
$commission_end[ 'real_goods_money' ] = '0.00';
}
if ($commission_end[ 'commission' ] == null) {
$commission_end[ 'commission' ] = '0.00';
}
$data['shop_commission_end'] = $commission_end;
//获取已退款的佣金
$commission_refund = $order_model->getFenxiaoOrderInfo([ [ 'site_id', '=', $this->site_id ], [ 'is_refund', '=', 1 ] ], 'sum(real_goods_money) as real_goods_money,sum(commission) as commission')[ 'data' ];
if ($commission_refund[ 'real_goods_money' ] == null) {
$commission_refund[ 'real_goods_money' ] = '0.00';
}
if ($commission_refund[ 'commission' ] == null) {
$commission_refund[ 'commission' ] = '0.00';
}
$commission_money = round($commission[ 'commission' ], 2) - round($commission_end[ 'commission' ], 2) - round($commission_refund[ 'commission' ], 2);
$commission_money = number_format($commission_money, 2);
$data['commission_money'] = $commission_money;
$fenxiao_apply_num = $fenxiao_data_model->getFenxiaoApplyCount($this->site_id);
$data['fenxiao_apply_num'] = $fenxiao_apply_num;
//分销商人数
$fenxiao_num = $fenxiao_data_model->getFenxiaoCount($this->site_id);
$data['fenxiao_num'] = $fenxiao_num;
$goods_model = new GoodsModel();
$fenxiao_goods_num = $goods_model->getGoodsInfo([ [ 'site_id', '=', $this->site_id ], [ 'is_fenxiao', '=', 1 ], [ 'is_delete', '=', 0 ] ], 'count(goods_id) as fenxiao_goods_num')[ 'data' ];
$data['fenxiao_goods_num'] = $fenxiao_goods_num[ 'fenxiao_goods_num' ];
return $data;
}
/**
* 分销商列表
*/
public function lists()
{
$model = new FenxiaoModel();
if (request()->isJson()) {
$condition[] = [ 'f.site_id', '=', $this->site_id ];
$fenxiao_name = input('fenxiao_name', '');
$nickname = input('nickname', '');
$mobile = input('mobile', '');
$parent_name = input('parent_name', '');
$level_id = input('level_id', '');
$start_time = input('start_time', '');
$end_time = input('end_time', '');
$status = input('status', '');
if ($fenxiao_name) {
$condition[] = [ 'f.fenxiao_name', 'like', '%' . $fenxiao_name . '%' ];
}
if ($nickname) {
$condition[] = [ 'm.nickname', 'like', '%' . $nickname . '%' ];
}
if ($mobile) {
$condition[] = [ 'm.mobile', 'like', '%' . $mobile . '%' ];
}
if ($parent_name) {
$condition[] = [ 'pf.fenxiao_name', 'like', '%' . $parent_name . '%' ];
}
if ($level_id) {
$condition[] = [ 'f.level_id', '=', $level_id ];
}
if ($start_time && $end_time) {
$condition[] = [ 'f.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
} elseif (!$start_time && $end_time) {
$condition[] = [ 'f.create_time', '<=', date_to_time($end_time) ];
} elseif ($start_time && !$end_time) {
$condition[] = [ 'f.create_time', '>=', date_to_time($start_time) ];
}
if (!empty($status)) {
$condition[] = [ 'f.status', '=', $status ];
}
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$list = $model->getFenxiaoPageList($condition, $page, $page_size, 'f.create_time desc', $this->site_id);
return $list;
} else {
$level_model = new FenxiaoLevelModel();
$level_list = $level_model->getLevelList([ [ 'status', '=', 1 ], [ 'site_id', '=', $this->site_id ] ], 'level_id,level_name')[ 'data' ];
$this->assign('level_list', $level_list);
$config_model = new ConfigModel();
$basics = $config_model->getFenxiaoBasicsConfig($this->site_id)[ 'data' ][ 'value' ];
$this->assign('basics_info', $basics);
return $this->fetch('fenxiao/lists');
}
}
/**
* 添加分销商
*/
public function add()
{
if (request()->isJson()) {
$fenxiao_data = [
'site_id' => $this->site_id,
'fenxiao_name' => input('fenxiao_name', ''),//分销商名称
'level_id' => input('level_id', 0),//分销商等级
'parent' => input('fenxiao_id', 0),//上级分销商ID
'member_id' => input('member_id', 0),//关联会员ID
];
$apply_model = new FenxiaoApply();
return $apply_model->addFenxiao($fenxiao_data);
} else {
//获取分销商等级
$level_model = new FenxiaoLevelModel();
$level_list = $level_model->getLevelList([ [ 'status', '=', 1 ], [ 'site_id', '=', $this->site_id ] ], 'level_id,level_name')[ 'data' ];
$this->assign('level_list', $level_list);
//获取分销商列表
$fenxiao_model = new FenxiaoModel();
$condition[] = [ 'status', '=', '1' ];
$fenxiao_list = $fenxiao_model->getFenxiaoList($condition, 'fenxiao_id,fenxiao_name')[ 'data' ];
$this->assign('fenxiao_list', $fenxiao_list);
//获取会员列表
$member_model = new MemberModel();
$where[] = [ 'is_fenxiao', '=', '0' ];
$member_list = $member_model->getMemberList($where, 'member_id,nickname')[ 'data' ];
$this->assign('member_list', $member_list);
return $this->fetch('fenxiao/add');
}
}
/**
* 获取分销商列表
*/
public function getFenxiaoList()
{
$page_index = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$fenxiao_search = input('fenxiao_search', '');
$condition = [];
$condition[] = [ 'mobile|fenxiao_name', 'like', '%' . $fenxiao_search . '%' ];
$condition[] = [ 'status', '=', 1 ];
$fenxiao_model = new FenxiaoModel();
$list = $fenxiao_model->getFenxiaoPageLists($condition, $page_index, $page_size, '', 'fenxiao_id,fenxiao_name,account');
return $list;
}
/**
* 获取会员列表
*/
public function getMemberList()
{
$page_index = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$member_search = input('member_search', '');
$condition = [];
$condition[] = [ 'mobile|email|username|nickname', 'like', '%' . $member_search . '%' ];
$condition[] = [ 'site_id', '=', $this->site_id ];
$condition[] = [ 'is_fenxiao', '=', '0' ];
$member_model = new MemberModel();
$list = $member_model->getMemberPageList($condition, $page_index, $page_size, '', 'member_id,headimg,nickname,point,balance');
return $list;
}
/**
* 详情
*/
public function detail()
{
$fenxiao_id = input('fenxiao_id', '');
$model = new FenxiaoModel();
$fenxiao_leve_model = new FenxiaoLevelModel();
$condition[] = [ 'f.fenxiao_id', '=', $fenxiao_id ];
$info = $model->getFenxiaoDetailInfo($condition);
if (empty($info[ 'data' ])) $this->error('未获取到分销商数据', href_url('fenxiao://shop/fenxiao/lists'));
//团队人员数据
$info['data']['team_num'] = $model->getFenxiaoTeamNum($fenxiao_id, $this->site_id)['data'];
$fenxiao_level = $fenxiao_leve_model->getLevelInfo([ [ 'level_id', '=', $info[ 'data' ][ 'level_id' ] ] ]);
$this->assign('status', $model->fenxiao_status_zh);
$this->assign('level', $fenxiao_level[ 'data' ]);
$this->assign('info', $info[ 'data' ]);
$this->assign('fenxiao_id', $fenxiao_id);
$config_model = new ConfigModel();
$basics_config = $config_model->getFenxiaoBasicsConfig($this->site_id);
$this->assign('fenxiao_level_num', $basics_config[ 'data' ][ 'value' ][ 'level' ]);
return $this->fetch('fenxiao/fenxiao_detail');
}
/**
* 分销账户信息
*/
public function account()
{
$model = new FenxiaoModel();
$fenxiao_id = input('fenxiao_id', '');
$condition[] = [ 'f.fenxiao_id', '=', $fenxiao_id ];
$info = $model->getFenxiaoDetailInfo($condition);
if (empty($info[ 'data' ])) $this->error('未获取到分销商数据', href_url('fenxiao://shop/fenxiao/lists'));
$account = $info[ 'data' ][ 'account' ] - $info[ 'data' ][ 'account_withdraw_apply' ];
$info[ 'data' ][ 'account' ] = number_format($account, 2, '.', '');
$this->assign('fenxiao_info', $info[ 'data' ]);
if (request()->isJson()) {
$account_model = new FenxiaoAccount();
$page = input('page', 1);
$status = input('status', '');
$fenxiao_id = input('fenxiao_id', '');
$list_condition[] = [ 'fenxiao_id', '=', $fenxiao_id ];
if ($status) {
if ($status == 1) {
$list_condition[] = [ 'money', '>', 0 ];
} else {
$list_condition[] = [ 'money', '<', 0 ];
}
}
$start_time = input('start_time', '');
$end_time = input('end_time', '');
if ($start_time && $end_time) {
$list_condition[] = [ 'create_time', 'between', [ $start_time, $end_time ] ];
} elseif (!$start_time && $end_time) {
$list_condition[] = [ 'create_time', '<=', $end_time ];
} elseif ($start_time && !$end_time) {
$list_condition[] = [ 'create_time', '>=', $start_time ];
}
$page_size = input('page_size', PAGE_LIST_ROWS);
$list = $account_model->getFenxiaoAccountPageList($list_condition, $page, $page_size);
return $list;
}
}
/**
* 分销商团队
*/
public function team()
{
$fenxiao_id = input('fenxiao_id', 0);
$fenxiao_model = new FenxiaoModel();
if (request()->isJson()) {
$level = input('level', 1);
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$list = $fenxiao_model->getFenxiaoTeam($level, $fenxiao_id, $page, $page_size);
return $list;
}
}
/**
* 订单管理
*/
public function order()
{
$model = new FenxiaoOrderModel();
if (request()->isJson()) {
$page_index = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$fenxiao_id = input('fenxiao_id', '');
$status = input('status', 0);
$condition[] = [ 'one_fenxiao_id|two_fenxiao_id|three_fenxiao_id', '=', $fenxiao_id ];
$search_text_type = input('search_text_type', 'goods_name');//订单编号/商品名称
$search_text = input('search_text', '');
if (!empty($search_text)) {
$condition[] = [ 'fo.' . $search_text_type, 'like', '%' . $search_text . '%' ];
}
if (in_array($status, [ 1, 2 ])) {
$condition[] = [ 'fo.is_settlement', '=', $status - 1 ];
}
//下单时间
$start_time = input('start_time', '');
$end_time = input('end_time', '');
if (!empty($start_time) && empty($end_time)) {
$condition[] = [ 'fo.create_time', '>=', date_to_time($start_time) ];
} elseif (empty($start_time) && !empty($end_time)) {
$condition[] = [ 'fo.create_time', '<=', date_to_time($end_time) ];
} elseif (!empty($start_time) && !empty(date_to_time($end_time))) {
$condition[] = [ 'fo.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
}
$list = $model->getFenxiaoOrderPage($condition, $page_index, $page_size);
return $list;
}
}
/**
* 订单详情
*/
public function orderDetail()
{
$fenxiao_order_model = new FenxiaoOrderModel();
$fenxiao_order_id = input('fenxiao_order_id', '');
$order_info = $fenxiao_order_model->getFenxiaoOrderDetail([ [ 'fenxiao_order_id', '=', $fenxiao_order_id ] ]);
$this->assign('order_info', $order_info[ 'data' ]);
return $this->fetch('fenxiao/order_detail');
}
/**
* 冻结
*/
public function frozen()
{
$fenxiao_id = input('fenxiao_id', '');
$model = new FenxiaoModel();
return $model->frozen($fenxiao_id);
}
/**
* 恢复正常
*/
public function unfrozen()
{
$fenxiao_id = input('fenxiao_id', '');
$model = new FenxiaoModel();
return $model->unfrozen($fenxiao_id);
}
/**
* 分销商申请列表
*/
public function apply()
{
$model = new FenxiaoApply();
if (request()->isJson()) {
$condition[] = [ 'fa.site_id', '=', $this->site_id ];
$condition[] = [ 'fa.status', '=', 1 ];
$condition[] = [ 'm.is_delete', '=', 0 ];
$fenxiao_name = input('fenxiao_name', '');
if ($fenxiao_name) {
$condition[] = [ 'fenxiao_name', 'like', '%' . $fenxiao_name . '%' ];
}
$nickname = input('nickname', '');
if ($nickname) {
$condition[] = [ 'm.nickname', 'like', '%' . $nickname . '%' ];
}
$mobile = input('mobile', '');
if ($mobile) {
$condition[] = [ 'm.mobile', 'like', '%' . $mobile . '%' ];
}
$level_id = input('level_id', '');
if ($level_id) {
$condition[] = [ 'fa.level_id', '=', $level_id ];
}
$create_start_time = input('create_start_time', '');
$create_end_time = input('create_end_time', '');
if ($create_start_time && $create_end_time) {
$condition[] = [ 'fa.create_time', 'between', [ strtotime($create_start_time), strtotime($create_end_time) ] ];
} elseif (!$create_start_time && $create_end_time) {
$condition[] = [ 'fa.create_time', '<=', strtotime($create_end_time) ];
} elseif ($create_start_time && !$create_end_time) {
$condition[] = [ 'fa.create_time', '>=', strtotime($create_start_time) ];
}
$rg_start_time = input('rg_start_time', '');
$rg_end_time = input('rg_end_time', '');
if ($rg_start_time && $rg_end_time) {
$condition[] = [ 'fa.reg_time', 'between', [ strtotime($rg_start_time), strtotime($rg_end_time) ] ];
} elseif (!$rg_start_time && $rg_end_time) {
$condition[] = [ 'fa.reg_time', '<=', strtotime($rg_end_time) ];
} elseif ($rg_start_time && !$rg_end_time) {
$condition[] = [ 'fa.reg_time', '>=', strtotime($rg_start_time) ];
}
$join = [
[ 'member m', 'fa.member_id = m.member_id', 'inner' ]
];
$field = 'fa.apply_id,fa.fenxiao_name,fa.parent,fa.member_id,fa.level_id,fa.level_name,fa.order_complete_money,fa.order_complete_num,fa.reg_time,fa.create_time,fa.status,m.mobile,m.nickname,m.headimg';
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$list = $model->getFenxiaoApplyPageList($condition, $page, $page_size, 'fa.create_time desc', $field, 'fa', $join);
return $list;
} else {
$level_model = new FenxiaoLevelModel();
$level_list = $level_model->getLevelList([ [ 'status', '=', 1 ] ], 'level_id,level_name');
$this->assign('level_list', $level_list[ 'data' ]);
return $this->fetch('fenxiao/apply');
}
}
/**
* 分销商申请通过
*/
public function applyPass()
{
$apply_id = input('apply_id');
$model = new FenxiaoApply();
$res = $model->pass($apply_id, $this->site_id);
return $res;
}
/**
* 分销商申请通过
*/
public function applyRefuse()
{
$apply_id = input('apply_id');
$model = new FenxiaoApply();
$res = $model->refuse($apply_id);
return $res;
}
/**
* 变更上下级
*/
public function change()
{
$member_id = input('member_id');
$model = new FenxiaoModel();
$member_model = new MemberModel();
//用户信息
$member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $member_id ] ], 'fenxiao_id,is_fenxiao')[ 'data' ];
//获取分销信息
$fenxiao_info = $model->getFenxiaoInfo([ [ 'fenxiao_id', '=', $member_info[ 'fenxiao_id' ] ] ], 'parent');
//获取上级分销商信息
$parent_info = [];
if (!empty($fenxiao_info[ 'data' ])) {
$parent_info = $model->getFenxiaoInfo([ [ 'fenxiao_id', '=', $fenxiao_info[ 'data' ][ 'parent' ] ] ], 'fenxiao_id,fenxiao_name')['data'];
}
if (request()->isJson()) {
if ($member_info[ 'is_fenxiao' ] == 1) {
$condition[] = [ 'f.fenxiao_id', '<>', $member_info[ 'fenxiao_id' ] ];
$condition[] = [ 'f.parent', '<>', $member_info[ 'fenxiao_id' ] ];
}
$condition[] = [ 'f.site_id', '=', $this->site_id ];
$status = input('status', 1);
if ($status) {
$condition[] = [ 'f.status', '=', $status ];
}
$fenxiao_name = input('fenxiao_name', '');
if ($fenxiao_name) {
$condition[] = [ 'f.fenxiao_name', 'like', '%' . $fenxiao_name . '%' ];
}
$parent_name = input('parent_name', '');
if ($parent_name) {
$condition[] = [ 'pf.fenxiao_name', 'like', '%' . $parent_name . '%' ];
}
$level_id = input('level_id', '');
if ($level_id) {
$condition[] = [ 'f.level_id', '=', $level_id ];
}
$start_time = input('start_time', '');
$end_time = input('end_time', '');
if ($start_time && $end_time) {
$condition[] = [ 'f.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
} elseif (!$start_time && $end_time) {
$condition[] = [ 'f.create_time', '<=', date_to_time($end_time) ];
} elseif ($start_time && !$end_time) {
$condition[] = [ 'f.create_time', '>=', date_to_time($start_time) ];
}
if(!empty($parent_info)){
$order = \think\facade\Db::raw("IF(f.fenxiao_id = {$parent_info['fenxiao_id']}, 1, 2) asc,f.create_time desc");
}else{
$order = 'f.create_time desc';
}
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$list = $model->getFenxiaoPageList($condition, $page, $page_size, $order);
return $list;
} else {
$level_model = new FenxiaoLevelModel();
$level_list = $level_model->getLevelList([ [ 'status', '=', 1 ], [ 'site_id', '=', $this->site_id ] ], 'level_id,level_name');
$this->assign('level_list', $level_list[ 'data' ]);
$config_model = new ConfigModel();
$basics = $config_model->getFenxiaoBasicsConfig($this->site_id);
$this->assign('basics_info', $basics[ 'data' ][ 'value' ]);
$this->assign('member_id', $member_id);
$this->assign('parent_info', $parent_info);
$change_end_func = input('change_end_func', 'changeEnd');
$this->assign('change_end_func', $change_end_func);
return $this->fetch('fenxiao/change');
}
}
/**
* 确认变更
*/
public function confirmChange()
{
if (request()->isJson()) {
$member_id = input('member_id', '');
$parent = input('parent', '');
$type = input('type', '');
$model = new FenxiaoModel();
if ($type == 1) {
$res = $model->changeParentFenxiao($member_id, $parent);
} else {
$res = $model->cancelParentFenxiao($member_id);
}
return $res;
}
}
/**
* 会员详情
*/
public function memberInfo()
{
if (request()->isJson()) {
$member_id = input('member_id', '');
$condition[] = [ 'site_id', '=', $this->site_id ];
$condition[] = [ 'member_id', '=', $member_id ];
$member_model = new MemberModel();
$member_info_result = $member_model->getMemberInfo($condition);
$member_info = $member_info_result['data'];
if (empty($member_info)) return $member_model->error([], '账号不存在!');
return $member_info_result;
}
}
/**
* 修改分销商等级
*/
public function changeLevel()
{
$member_id = input('member_id', '');
$fenxiao_id = input('fenxiao_id', '');
if (request()->isJson()) {
$level_model = new FenxiaoLevelModel();
$fenxiao_model = new FenxiaoModel();
$fenxiao_info = $fenxiao_model->getFenxiaoInfo([ [ 'fenxiao_id', '=', $fenxiao_id ] ], 'member_id,level_id,level_name')[ 'data' ];
$condition[] = [ 'site_id', '=', $this->site_id ];
if (!empty($fenxiao_info)) {
$condition[] = [ 'level_id', '<>', $fenxiao_info[ 'level_id' ] ];
}
$lists = $level_model->getLevelPageList($condition, '1', PAGE_LIST_ROWS, 'level_num asc');
return $lists;
} else {
$config_model = new ConfigModel();
$basics = $config_model->getFenxiaoBasicsConfig($this->site_id);
$this->assign('basics_info', $basics[ 'data' ][ 'value' ]);
$this->assign('member_id', $member_id);
$this->assign('fenxiao_id', $fenxiao_id);
$change_end_func = input('change_end_func', 'changeEnd');
$this->assign('change_end_func', $change_end_func);
return $this->fetch('fenxiao/change_level');
}
}
/**
* 确认变更
*/
public function confirmChangeLevel()
{
if (request()->isJson()) {
$member_id = input('member_id', '');
$level_id = input('level_id', '');
$level_model = new FenxiaoLevelModel();
$level_data = $level_model->getLevelInfo([ [ 'level_id', '=', $level_id ] ], 'level_id,level_name')[ 'data' ];
$fenxiao_model = new FenxiaoModel();
$data = [
'level_id' => $level_data[ 'level_id' ],
'level_name' => $level_data[ 'level_name' ]
];
$res = $fenxiao_model->changeFenxiaoLevel($data, [ [ 'member_id', '=', $member_id ] ]);
return $res;
}
}
}

View File

@@ -0,0 +1,271 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace addon\fenxiao\shop\controller;
use addon\fenxiao\model\FenxiaoGoodsSku as FenxiaoGoodsSkuModel;
use addon\fenxiao\model\FenxiaoLevel as FenxiaoLevelModel;
use app\model\goods\Goods as GoodsModel;
use app\shop\controller\BaseShop;
use addon\fenxiao\model\FenxiaoGoods as FenxiaoGoodsModel;
use think\facade\Db;
use addon\fenxiao\model\Config as FenxiaoConfigModel;
/**
* 分销商品
*/
class Goods extends BaseShop
{
/**
* 分销等级列表
*/
public function lists()
{
$model = new GoodsModel();
if (request()->isJson()) {
$page_index = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$condition = [
[ 'is_delete', '=', 0 ],
[ 'site_id', '=', $this->site_id ]
];
$search_text_type = input('search_text_type', 'goods_name');//店铺名称或者商品名称
$search_text = input('search_text', '');
$goods_class = input('goods_class', '');//商品种类
$goods_state = input('goods_state', '');//商品状态
$category_id = input('category_id', '');//分类ID
$is_fenxiao = input('is_fenxiao', '');
$start_sale = input('start_sale', 0);
$end_sale = input('end_sale', 0);
if (!empty($search_text)) {
$condition[] = [ $search_text_type, 'like', '%' . $search_text . '%' ];
}
if ($is_fenxiao !== '') {
$condition[] = [ 'is_fenxiao', '=', $is_fenxiao ];
}
if (!empty($start_sale)) $condition[] = [ 'sale_num', '>=', $start_sale ];
if (!empty($end_sale)) $condition[] = [ 'sale_num', '<=', $end_sale ];
if ($goods_class !== '') {
$condition[] = [ 'goods_class', '=', $goods_class ];
}
if ($goods_state !== '') {
$condition[] = [ 'goods_state', '=', $goods_state ];
}
if (!empty($category_id)) {
$condition[] = [ 'category_id', 'like', '%,' . $category_id . ',%' ];
}
$list = $model->getGoodsPageList($condition, $page_index, $page_size);
return $list;
} else {
return $this->fetch('goods/lists');
}
}
public function detail()
{
$goods_id = input('goods_id');
$goods_model = new GoodsModel();
$fenxiao_sku_model = new FenxiaoGoodsSkuModel();
$fenxiao_leve_model = new FenxiaoLevelModel();
$goods_info = $goods_model->getGoodsDetail($goods_id);
if (empty($goods_info[ 'data' ]) || $goods_info[ 'data' ][ 'site_id' ] != $this->site_id) $this->error('商品信息不存在');
$fenxiao_skus = $fenxiao_sku_model->getSkuList([ 'goods_id' => $goods_id ]);
$skus = [];
foreach ($fenxiao_skus[ 'data' ] as $fenxiao_sku) {
$skus[ $fenxiao_sku[ 'level_id' ] . '_' . $fenxiao_sku[ 'sku_id' ] ] = $fenxiao_sku;
}
$goods_info[ 'data' ][ 'fenxiao_skus' ] = $skus;
$goods_info[ 'data' ][ 'goods_image' ] = explode(',', $goods_info[ 'data' ][ 'goods_image' ]);
$fenxiao_level = $fenxiao_leve_model->getLevelList([ [ 'site_id', '=', $this->site_id ] ]);
$this->assign('fenxiao_level', $fenxiao_level[ 'data' ]);
$this->assign('goods_info', $goods_info[ 'data' ]);
$fenxiao_config_model = new FenxiaoConfigModel();
$fenxiao_config = $fenxiao_config_model->getFenxiaoBasicsConfig($this->site_id)[ 'data' ] ?? [];
$this->assign('fenxiao_config', $fenxiao_config[ 'value' ] ?? []);
return $this->fetch('goods/detail');
}
/**
* 添加活动
*/
public function config()
{
$goods_id = input('goods_id');
$goods_model = new GoodsModel();
$fenxiao_sku_model = new FenxiaoGoodsSkuModel();
$fenxiao_leve_model = new FenxiaoLevelModel();
$fenxiao_level = $fenxiao_leve_model->getLevelList([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 1 ] ], '*', 'level_num asc,one_rate asc');
$goods_info = $goods_model->getGoodsDetail($goods_id);
if (empty($goods_info[ 'data' ]) || $goods_info[ 'data' ][ 'site_id' ] != $this->site_id) $this->error('商品信息不存在');
$fenxiao_config_model = new FenxiaoConfigModel();
$fenxiao_config = $fenxiao_config_model->getFenxiaoBasicsConfig($this->site_id)[ 'data' ] ?? [];
$fenxiao_config = $fenxiao_config[ 'value' ] ?? [];
if (request()->isJson()) {
Db::startTrans();
try {
$fenxiao_type = input('fenxiao_type', 1);
$fenxiao_skus = input('fenxiao', []);
$is_fenxiao = input('is_fenxiao', 0);
$fenxiao_price = input('fenxiao_price', []);
$goods_data = [ 'is_fenxiao' => $is_fenxiao, 'fenxiao_type' => $fenxiao_type ];
if ($fenxiao_type == 2) {
$fenxiao_goods_sku_data = [];
foreach ($fenxiao_skus as $level_id => $level_data) {
foreach ($level_data[ 'sku_id' ] as $key => $sku_id) {
$fenxiao_total = 0;
$fenxiao_level = [ 'one', 'two', 'three' ];
foreach ($fenxiao_level as $level) {
$item_rate_array = $level_data[ $level . '_rate' ] ?? [];
$item_rate = $item_rate_array[ $key ] ?? 0;
$item_money_array = $level_data[ $level . '_money' ] ?? [];
$item_money = $item_money_array[ $key ] ?? 0;
$var_rate_name = $level . '_rate';
$$var_rate_name = $item_rate;
$var_money_name = $level . '_money';
$$var_money_name = $item_money;
if ($item_rate > 0) {
$fenxiao_total += $level_data[ 'sku_price' ][ $key ] * $item_rate / 100;
} elseif ($item_money > 0) {
$fenxiao_total += $item_money;
}
}
if (empty($fenxiao_total)) {
return error(-1, '分销金额不可以为零');
}
if ($level_data[ 'sku_price' ][ $key ] < $fenxiao_total) {
return error(-1, '分销总金额不能大于商品sku价格的100%');
}
if ($fenxiao_config[ 'level' ] < 3) {
$three_rate = 0;
$three_money = 0;
//通过分销设置的等级配置
if ($fenxiao_config[ 'level' ] < 2) {
$two_rate = 0;
$two_money = 0;
}
}
$fenxiao_sku = [
'goods_id' => $goods_id,
'level_id' => $level_id,
'sku_id' => $sku_id,
'one_rate' => $one_rate ?? 0,
'one_money' => $one_money ?? 0,
'two_rate' => $two_rate ?? 0,
'two_money' => $two_money ?? 0,
'three_rate' => $three_rate ?? 0,
'three_money' => $three_money ?? 0,
];
$fenxiao_goods_sku_data[] = $fenxiao_sku;
}
}
$fenxiao_sku_model->deleteSku([ 'goods_id' => $goods_id ]);
$fenxiao_sku_model->addSkuList($fenxiao_goods_sku_data);
}
if ($fenxiao_type == 1) {
$fenxiao_goods_sku_data = [];
foreach ($fenxiao_level[ 'data' ] as $level) {
foreach ($goods_info[ 'data' ][ 'sku_data' ] as $sku) {
$item_one_rate = $level[ 'one_rate' ] ?? 0;
$item_two_rate = $level[ 'two_rate' ] ?? 0;
$item_three_rate = $level[ 'three_rate' ] ?? 0;
//通过分销设置的等级配置
if ($fenxiao_config[ 'level' ] < 3) {
$item_three_rate = 0;
if ($fenxiao_config[ 'level' ] < 2) {
$item_two_rate = 0;
}
}
$fenxiao_sku = [
'goods_id' => $goods_id,
'level_id' => $level[ 'level_id' ],
'sku_id' => $sku[ 'sku_id' ],
'one_rate' => $item_one_rate,
'one_money' => 0,
'two_rate' => $item_two_rate,
'two_money' => 0,
'three_rate' => $item_three_rate,
'three_money' => 0,
];
$fenxiao_goods_sku_data[] = $fenxiao_sku;
}
}
$fenxiao_sku_model->deleteSku([ 'goods_id' => $goods_id ]);
$fenxiao_sku_model->addSkuList($fenxiao_goods_sku_data);
}
$fenxiao_goods_model = new FenxiaoGoodsModel();
$re = $fenxiao_goods_model->editGoodsFenxiao($goods_data, [ [ 'goods_id', '=', $goods_id ], [ 'site_id', '=', $this->site_id ] ]);
if ($is_fenxiao) {
foreach ($fenxiao_price as $sku_id => $item) {
if (empty($item) || $item < 0) $item = 0;
$res = model('goods_sku')->update([ 'fenxiao_price' => $item ], [ [ 'sku_id', '=', $sku_id ], [ 'site_id', '=', $this->site_id ] ]);
}
}
Db::commit();
return $re;
} catch (\Exception $e) {
Db::rollback();
return error(-1, $e->getMessage());
}
}
$fenxiao_skus = $fenxiao_sku_model->getSkuList([ 'goods_id' => $goods_id ]);
$skus = [];
foreach ($fenxiao_skus[ 'data' ] as $fenxiao_sku) {
$skus[ $fenxiao_sku[ 'level_id' ] . '_' . $fenxiao_sku[ 'sku_id' ] ] = $fenxiao_sku;
}
$goods_info[ 'data' ][ 'fenxiao_skus' ] = $skus;
$goods_info[ 'data' ][ 'goods_image' ] = explode(',', $goods_info[ 'data' ][ 'goods_image' ]);
$this->assign('fenxiao_level', $fenxiao_level[ 'data' ]);
$this->assign('goods_info', $goods_info[ 'data' ]);
$this->assign('fenxiao_config', $fenxiao_config);
return $this->fetch('goods/config');
}
/**
* 修改分销状态
*/
public function modify()
{
if (request()->isJson()) {
$fenxiao_goods_model = new FenxiaoGoodsModel();
$goods_id = input('goods_id');
$is_fenxiao = input('is_fenxiao', 0);
return $fenxiao_goods_model->modifyGoodsFenxiaoStatus($goods_id, $is_fenxiao ? 0 : 1, $this->site_id);
}
}
/**
* 批量设置是否参与分销
* @return array
*/
public function setGoodsIsFenxiao()
{
if (request()->isJson()) {
$fenxiao_goods_model = new FenxiaoGoodsModel();
$goods_ids = input('goods_ids', '');
$is_fenxiao = input('is_fenxiao', 0);
return $fenxiao_goods_model->modifyGoodsIsFenxiao($goods_ids, $is_fenxiao, $this->site_id);
}
}
}

View File

@@ -0,0 +1,160 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace addon\fenxiao\shop\controller;
use addon\fenxiao\model\Config as ConfigModel;
use addon\fenxiao\model\FenxiaoLevel as FenxiaoLevelModel;
use app\shop\controller\BaseShop;
use addon\fenxiao\model\Fenxiao;
/**
* 分销等级管理
*/
class Level extends BaseShop
{
/**
* 分销等级列表
*/
public function lists()
{
$model = new FenxiaoLevelModel();
$field = 'level_id,level_num,level_name,one_rate,two_rate,three_rate,status,create_time,is_default,one_fenxiao_order_num,one_fenxiao_order_money,one_fenxiao_total_order,order_num,order_money,one_child_num,one_child_fenxiao_num,upgrade_type';
if (request()->isJson()) {
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$list = $model->getLevelPageListInAdmin([ [ 'site_id', '=', $this->site_id ], ['is_default', '=', 0] ], $page, $page_size, 'level_num asc,one_rate asc', $field);
return $list;
} else {
//获取系统配置
$config_model = new ConfigModel();
$basics = $config_model->getFenxiaoBasicsConfig($this->site_id);
$this->assign("basics_info", $basics[ 'data' ][ 'value' ]);
return $this->fetch('level/lists');
}
}
/**
* 添加分销等级
*/
public function add()
{
$model = new FenxiaoLevelModel();
if (request()->isJson()) {
$data = [
'site_id' => $this->site_id,
'level_name' => input('level_name', ''),
'one_rate' => input('one_rate', ''),
'two_rate' => input('two_rate', ''),
'three_rate' => input('three_rate', ''),
'upgrade_type' => input('upgrade_type', ''),
'level_num' => input('level_num', 1),
'fenxiao_order_num' => input('fenxiao_order_num', ''),
'fenxiao_order_meney' => input('fenxiao_order_meney', ''),
'one_fenxiao_order_num' => input('one_fenxiao_order_num', ''),
'one_fenxiao_order_money' => input('one_fenxiao_order_money', ''),
'one_fenxiao_total_order' => input('one_fenxiao_total_order', ''),
'order_num' => input('order_num', ''),
'order_money' => input('order_money', ''),
'child_num' => input('child_num', ''),
'child_fenxiao_num' => input('child_fenxiao_num', ''),
'one_child_num' => input('one_child_num', ''),
'one_child_fenxiao_num' => input('one_child_fenxiao_num', ''),
];
$res = $model->addLevel($data);
return $res;
} else {
//获取系统配置
$config_model = new ConfigModel();
$basics = $config_model->getFenxiaoBasicsConfig($this->site_id);
$this->assign("basics_info", $basics[ 'data' ][ 'value' ]);
$level_weight = $model->getLevelList([ [ 'level_num', '<>', '' ], [ 'site_id', '=', $this->site_id ] ], 'level_num');
$level_weight = $level_weight[ 'data' ];
if (!empty($level_weight)) $level_weight = array_column($level_weight, 'level_num');
$this->assign('level_weight', $level_weight);
return $this->fetch('level/add');
}
}
/**
* 编辑分销等级
*/
public function edit()
{
$model = new FenxiaoLevelModel();
if (request()->isJson()) {
$data = [
'level_name' => input('level_name', ''),
'one_rate' => input('one_rate', ''),
'two_rate' => input('two_rate', ''),
'three_rate' => input('three_rate', ''),
'upgrade_type' => input('upgrade_type', ''),
'level_num' => input('level_num', 0),
'fenxiao_order_num' => input('fenxiao_order_num', ''),
'fenxiao_order_meney' => input('fenxiao_order_meney', ''),
'one_fenxiao_order_num' => input('one_fenxiao_order_num', ''),
'one_fenxiao_order_money' => input('one_fenxiao_order_money', ''),
'one_fenxiao_total_order' => input('one_fenxiao_total_order', ''),
'order_num' => input('order_num', ''),
'order_money' => input('order_money', ''),
'child_num' => input('child_num', ''),
'child_fenxiao_num' => input('child_fenxiao_num', ''),
'one_child_num' => input('one_child_num', ''),
'one_child_fenxiao_num' => input('one_child_fenxiao_num', ''),
];
$level_id = input('level_id', '');
$res = $model->editLevel($data, [ [ 'level_id', '=', $level_id ], [ 'site_id', '=', $this->site_id ] ]);
return $res;
} else {
$level_id = input('level_id', '');
$info = $model->getLevelInfo([ [ 'level_id', '=', $level_id ], [ 'site_id', '=', $this->site_id ] ]);
if (empty($info[ 'data' ])) $this->error('未获取到等级数据', href_url('fenxiao://shop/level/lists'));
$this->assign('info', $info[ 'data' ]);
//获取系统配置
$config_model = new ConfigModel();
$basics = $config_model->getFenxiaoBasicsConfig($this->site_id);
$this->assign("basics_info", $basics[ 'data' ][ 'value' ]);
$level_weight = $model->getLevelList([ [ 'level_num', '<>', '' ], [ 'level_id', '<>', $level_id ], [ 'site_id', '=', $this->site_id ] ], 'level_num');
$level_weight = $level_weight[ 'data' ];
if (!empty($level_weight)) $level_weight = array_column($level_weight, 'level_num');
$this->assign('level_weight', $level_weight);
}
return $this->fetch('level/edit');
}
/**
* 删除分销等级
*/
public function delete()
{
$model = new FenxiaoLevelModel();
$level_id = input('level_id', '');
$res = $model->deleteLevel($level_id, $this->site_id);
return $res;
}
}

View File

@@ -0,0 +1,36 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace addon\fenxiao\shop\controller;
use app\shop\controller\BaseShop;
/**
* 分销市场
*/
class Market extends BaseShop
{
/**
* 分销市场
*/
public function index()
{
$data = [
'site_id' => $this->site_id,
'name' => 'DIY_FENXIAO_MARKET',
'support_diy_view' => [ '', 'DIY_FENXIAO_MARKET' ],
];
$edit_view = event('DiyViewEdit', $data, true);
return $edit_view;
}
}

View File

@@ -0,0 +1,122 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace addon\fenxiao\shop\controller;
use addon\fenxiao\model\FenxiaoOrder;
use app\shop\controller\BaseShop;
use think\App;
/**
* 分销订单
*/
class Order extends BaseShop
{
public function __construct(App $app = null)
{
$this->replace = [
'FENXIAO_JS' => __ROOT__ . '/addon/fenxiao/shop/view/public/js',
'FENXIAO_CSS' => __ROOT__ . '/addon/fenxiao/shop/view/public/css'
];
parent::__construct($app);
}
/**
* 分销订单列表
*/
public function lists()
{
if (request()->isJson()) {
$model = new FenxiaoOrder();
$page_index = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$status = input('status', 0);
$condition = [ [ 'fo.site_id', '=', $this->site_id ] ];
if ($status == 3) {
$condition[] = [ 'fo.is_refund', '=', 1 ];
}
if (in_array($status, [ 1, 2 ])) {
$condition[] = [ 'fo.is_settlement', '=', $status - 1 ];
}
$search_text_type = input('search_text_type', "sku_name");//商品名称/订单编号
$search_text = input('search_text', "");
if (!empty($search_text)) {
$condition[] = [ 'fo.' . $search_text_type, 'like', '%' . $search_text . '%' ];
}
//下单时间
$start_time = input('start_time', '');
$end_time = input('end_time', '');
if (!empty($start_time) && empty($end_time)) {
$condition[] = [ 'fo.create_time', '>=', date_to_time($start_time) ];
} elseif (empty($start_time) && !empty($end_time)) {
$condition[] = [ 'fo.create_time', '<=', date_to_time($end_time) ];
} elseif (!empty($start_time) && !empty(date_to_time($end_time))) {
$condition[] = [ 'fo.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
}
$list = $model->getFenxiaoOrderPage($condition, $page_index, $page_size);
return $list;
} else {
//订单状态
return $this->fetch('order/lists');
}
}
public function detail()
{
$fenxiao_order_model = new FenxiaoOrder();
$order_id = input('order_id', '');
$order_info = $fenxiao_order_model->getFenxiaoOrderDetail([ [ 'order_id', '=', $order_id ] ]);
if (empty($order_info[ 'data' ])) $this->error('未获取到订单数据', href_url('fenxiao://shop/order/lists'));
$this->assign('order_detail', $order_info[ 'data' ]);
return $this->fetch('order/detail');
}
/**
* 订单导出
*/
public function exportorder()
{
$model = new FenxiaoOrder();
$status = input('status', 0);
$fenxiao_order_id = input('order_ids', "");
$condition = [ [ 'fo.site_id', '=', $this->site_id ] ];
if ($status == 3) {
$condition[] = [ 'fo.is_refund', '=', 1 ];
}
if (in_array($status, [ 1, 2 ])) {
$condition[] = [ 'fo.is_settlement', '=', $status - 1 ];
}
$search_text_type = input('search_text_type', "goods_name");//商品名称/订单编号
$search_text = input('search_text', "");
if (!empty($search_text)) {
$condition[] = [ 'fo.' . $search_text_type, 'like', '%' . $search_text . '%' ];
}
//下单时间
$start_time = input('start_time', '');
$end_time = input('end_time', '');
if (!empty($start_time) && empty($end_time)) {
$condition[] = [ 'fo.create_time', '>=', date_to_time($start_time) ];
} elseif (empty($start_time) && !empty($end_time)) {
$condition[] = [ 'fo.create_time', '<=', date_to_time($end_time) ];
} elseif (!empty($start_time) && !empty(date_to_time($end_time))) {
$condition[] = [ 'fo.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
}
if ($fenxiao_order_id) {
$condition = [];
$condition[] = [ "fo.fenxiao_order_id", "in", $fenxiao_order_id ];
}
$model->orderExport($condition);
return;
}
}

View File

@@ -0,0 +1,309 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace addon\fenxiao\shop\controller;
use addon\fenxiao\model\PosterTemplate as PosterTemplateModel;
use app\model\system\Site;
use app\model\upload\Upload;
use app\shop\controller\BaseShop;
use extend\Poster as PosterExtend;
/**
* 海报模板 控制器
*/
class Postertemplate extends BaseShop
{
/**
* 海报模板列表
* @return mixed
*/
public function lists()
{
if (request()->isJson()) {
$page_index = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$search_text = input('search_text', '');
$condition = [ [ 'site_id', '=', $this->site_id ] ];
$condition[] = [ 'template_type', '=', 'fenxiao' ];
if (!empty($search_text)) {
$condition[] = [ 'poster_name', 'like', '%' . $search_text . '%' ];
}
$poster_template_model = new PosterTemplateModel();
$res = $poster_template_model->getPosterTemplatePageList($condition, $page_index, $page_size);
return $res;
} else {
return $this->fetch('poster_template/lists');
}
}
/**
* 添加海报模板
* @return mixed
*/
public function addPosterTemplate()
{
$poster_template_model = new PosterTemplateModel();
if (request()->isJson()) {
$default_template = PosterTemplateModel::DEFAULT_TEMPLATE;
$add_data = [];
$template_json = [];
foreach ($default_template as $field => $field_value) {
if ($field == 'template_json') {
foreach ($default_template[ 'template_json' ] as $json_field => $json_field_value) {
$template_json[ $json_field ] = input($json_field, $json_field_value);
}
} else {
$add_data[ $field ] = input($field, $field_value);
}
}
unset($add_data[ 'template_id' ]);
$add_data[ 'site_id' ] = $this->site_id;
$add_data[ 'template_json' ] = json_encode($template_json, true);
return $poster_template_model->addPosterTemplate($add_data);
} else {
//模板信息
$muban_id = input('muban_id', 0);
$muban_info = $poster_template_model->getMubanInfo([ [ 'muban_id', '=', $muban_id ] ])[ 'data' ];
if (!empty($muban_info)) {
$template_info = $muban_info;
$template_info[ 'template_json' ] = json_decode($template_info[ 'template_json' ], true);
$template_info[ 'template_id' ] = 0;
} else {
$template_info = PosterTemplateModel::DEFAULT_TEMPLATE;
}
$template_info[ 'template_json' ] = $poster_template_model->correctTemplateJsonData($template_info[ 'template_json' ])[ 'data' ];
$template_info = array_merge($template_info, $template_info[ 'template_json' ]);
unset($template_info[ 'template_json' ]);
$this->assign('template_info', $template_info);
//站点信息
$site_model = new Site();
$site_info = $site_model->getSiteInfo([ [ "site_id", "=", $this->site_id ] ], 'site_name,logo,logo_square')[ 'data' ];
$this->assign('site_data', $site_info);
return $this->fetch('poster_template/add');
}
}
/**
* 添加海报模板
* @return mixed
*/
public function editPosterTemplate()
{
$template_id = input('template_id', '');
$poster_template_model = new PosterTemplateModel();
if (request()->isJson()) {
$default_template = PosterTemplateModel::DEFAULT_TEMPLATE;
$edit_data = [];
$template_json = [];
foreach ($default_template as $field => $field_value) {
if ($field == 'template_json') {
foreach ($default_template[ 'template_json' ] as $json_field => $json_field_value) {
$template_json[ $json_field ] = input($json_field, $json_field_value);
}
} else {
$edit_data[ $field ] = input($field, $field_value);
}
}
unset($edit_data[ 'template_id' ]);
$edit_data[ 'site_id' ] = $this->site_id;
$edit_data[ 'template_json' ] = json_encode($template_json, true);
return $poster_data = $poster_template_model->editPosterTemplate($edit_data, [
[ 'template_id', '=', $template_id ],
[ 'site_id', '=', $this->site_id ]
]);
} else {
//模板信息
$template_info = $poster_template_model->getPosterTemplateInfo([
[ 'site_id', '=', $this->site_id ],
[ 'template_id', '=', $template_id ],
], '*')[ 'data' ];
if (empty($template_info)) $this->error('模板信息有误');
$template_info[ 'template_json' ] = json_decode($template_info[ 'template_json' ], true);
$template_info[ 'template_json' ] = $poster_template_model->correctTemplateJsonData($template_info[ 'template_json' ])[ 'data' ];
$template_info = array_merge($template_info, $template_info[ 'template_json' ]);
unset($template_info[ 'template_json' ]);
$this->assign('template_info', $template_info);
//站点信息
$site_model = new Site();
$site_info = $site_model->getSiteInfo([ [ "site_id", "=", $this->site_id ] ], 'site_name,logo,logo_square');
$this->assign('site_data', $site_info[ 'data' ]);
return $this->fetch('poster_template/add');
}
}
/**
* 获取海报模板预览
* @return mixed
*/
public function posterTemplateDetail()
{
$template_id = input('template_id', '');
$condition = [
[ 'template_id', '=', $template_id ],
[ 'site_id', '=', $this->site_id ]
];
$poster_template_model = new PosterTemplateModel();
$poster_data = $poster_template_model->getPosterTemplateInfo($condition);
if (empty($poster_data[ 'data' ])) {
return $poster_template_model->error(null, '海报数据有误');
}
$poster_data[ 'data' ][ 'template_json' ] = json_decode($poster_data[ 'data' ][ 'template_json' ], true);
$poster_data[ 'data' ][ 'template_json' ] = $poster_template_model->correctTemplateJsonData($poster_data[ 'data' ][ 'template_json' ])[ 'data' ];
$site_model = new Site();
$where = array (
[ "site_id", "=", $this->site_id ]
);
$site_info = $site_model->getSiteInfo($where);
$poster_width = 720;
$poster_height = 1280;
$poster = new PosterExtend($poster_width, $poster_height);
$ground = [
[
'action' => 'setBackground', // 设背景色
'data' => [ 255, 255, 255 ]
],
];
$fontRate = 0.725; // 20px 等于 14.5磅,换算比率 1px = 0.725磅
$option = [
[
'action' => 'imageCopy', // 写入二维码
'data' => [
getUrl() . '/public/static/img/caner_erweima.png',
$poster_data[ 'data' ][ 'qrcode_left' ] * 2,
$poster_data[ 'data' ][ 'qrcode_top' ] * 2,
$poster_data[ 'data' ][ 'qrcode_width' ] * 2,
$poster_data[ 'data' ][ 'qrcode_height' ] * 2,
'square',
0,
1
]
],
[
'action' => 'imageText', // 写入分享语
'data' => [
$poster_data[ 'data' ][ 'template_json' ][ 'share_content' ],
$poster_data[ 'data' ][ 'template_json' ][ 'share_content_font_size' ] * $fontRate * 2,
is_array($poster_data[ 'data' ][ 'template_json' ][ 'share_content_color' ]) ? $poster_data[ 'data' ][ 'template_json' ][ 'share_content_color' ] : hex2rgb($poster_data[ 'data' ][ 'template_json' ][ 'share_content_color' ]),
$poster_data[ 'data' ][ 'template_json' ][ 'share_content_left' ] * 2,
( $poster_data[ 'data' ][ 'template_json' ][ 'share_content_top' ] ) * 2,
$poster_data[ 'data' ][ 'template_json' ][ 'share_content_width' ] * 2,
1
]
]
];
$nickname_color = is_array($poster_data[ 'data' ][ 'template_json' ][ 'nickname_color' ]) ? $poster_data[ 'data' ][ 'template_json' ][ 'nickname_color' ] : hex2rgb($poster_data[ 'data' ][ 'template_json' ][ 'nickname_color' ]);
$member_option = [
[
'action' => 'imageCopy', // 写入用户头像
'data' => [
getUrl() . '/public/static/img/default_img/head.png',
$poster_data[ 'data' ][ 'template_json' ][ 'headimg_left' ] * 2,
$poster_data[ 'data' ][ 'template_json' ][ 'headimg_top' ] * 2,
$poster_data[ 'data' ][ 'template_json' ][ 'headimg_width' ] * 2,
$poster_data[ 'data' ][ 'template_json' ][ 'headimg_height' ] * 2,
!empty($poster_data[ 'data' ][ 'template_json' ][ 'headimg_shape' ]) ? $poster_data[ 'data' ][ 'template_json' ][ 'headimg_shape' ] : 'square',
0,
$poster_data[ 'data' ][ 'template_json' ][ 'headimg_is_show' ]
]
],
[
'action' => 'imageText', // 写入分享人昵称
'data' => [
'用户昵称',
$poster_data[ 'data' ][ 'template_json' ][ 'nickname_font_size' ] * $fontRate * 2,
$nickname_color,
$poster_data[ 'data' ][ 'template_json' ][ 'nickname_left' ] * 2,
( $poster_data[ 'data' ][ 'template_json' ][ 'nickname_top' ] ) * 2,
$poster_data[ 'data' ][ 'template_json' ][ 'nickname_width' ] * 2,
$poster_data[ 'data' ][ 'template_json' ][ 'nickname_height' ] * 2,
0,
$poster_data[ 'data' ][ 'template_json' ][ 'nickname_is_show' ]
]
],
];
$back_ground = [
[
'action' => 'imageCopy', // 写入背景图
'data' => [
img($poster_data[ 'data' ][ 'background' ]),
0,
0,
720,
1280,
'square',
0,
1
]
],
];
$option = array_merge($ground, $back_ground, $option, $member_option);
$option_res = $poster->create($option);
if (is_array($option_res)) return $option_res;
$pic_name = rand(10000, 99999);
$res = $option_res->jpeg('upload/poster/goods', 'fenxiao' . $pic_name);
if ($res[ 'code' ] < 0) {
return $res;
}
$upload = new Upload($this->site_id);
$cloud_res = $upload->fileCloud($res[ 'data' ][ 'path' ]);
return $cloud_res;
}
/**
* 删除海报模板
* @return mixed
*/
public function delPosterTemplate()
{
if (request()->isJson()) {
$template_ids = input('template_ids', '');
$condition = [
[ 'template_id', 'in', $template_ids ],
[ 'site_id', '=', $this->site_id ],
];
$poster_template_model = new PosterTemplateModel();
$res = $poster_template_model->deletePosterTemplate($condition);
return $res;
}
}
/**
* 编辑模板状态啊
* @return array
*/
public function editstatus()
{
if (request()->isJson()) {
$template_id = input('template_id', 0);
$template_status = input('template_status', 0);
$condition = [
[ 'template_id', 'in', $template_id ],
[ 'site_id', '=', $this->site_id ]
];
$data = [ 'template_status' => $template_status ];
$poster_template_model = new PosterTemplateModel();
$res = $poster_template_model->editPosterTemplate($data, $condition);
return $res;
}
}
}

View File

@@ -0,0 +1,242 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace addon\fenxiao\shop\controller;
use addon\fenxiao\model\FenxiaoStat;
use addon\fenxiao\model\FenxiaoWithdraw as FenxiaoWithdrawModel;
use addon\wechatpay\model\Config as WechatPayConfig;
use app\shop\controller\BaseShop;
/**
* 分销等级管理
*/
class Withdraw extends BaseShop
{
/**
* 会员提现列表
* @return mixed
*/
public function lists()
{
$model = new FenxiaoWithdrawModel();
$transfer_type_list = $model->getTransferType($this->site_id);
if (request()->isJson()) {
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$withdraw_no = input('withdraw_no', '');
$start_date = input('start_date', '');
$end_date = input('end_date', '');
$status = input('status', 'all');//提现状态
$transfer_type = input('transfer_type', '');//提现转账方式
$fenxiao_name = input('fenxiao_name', '');//提现转账方式
$payment_start_date = input('payment_start_date', '');
$payment_end_date = input('payment_end_date', '');
$condition = [ [ 'fw.site_id', '=', $this->site_id ] ];
if (!empty($withdraw_no)) {
$condition[] = [ 'fw.withdraw_no', 'like', '%' . $withdraw_no . '%' ];
}
if (!empty($transfer_type)) {
$condition[] = [ 'fw.transfer_type', '=', $transfer_type ];
}
if ($status != "all") {
$condition[] = [ 'fw.status', '=', $status ];
}
if (!empty($fenxiao_name)) {
$condition[] = [ 'm.nickname|fw.fenxiao_name', '=', $fenxiao_name ];
}
if ($start_date != '' && $end_date != '') {
$condition[] = [ 'fw.create_time', 'between', [ strtotime($start_date), strtotime($end_date) ] ];
} else if ($start_date != '' && $end_date == '') {
$condition[] = [ 'fw.create_time', '>=', strtotime($start_date) ];
} else if ($start_date == '' && $end_date != '') {
$condition[] = [ 'fw.create_time', '<=', strtotime($end_date) ];
}
if ($payment_start_date != '' && $payment_end_date != '') {
$condition[] = [ 'fw.payment_time', 'between', [ strtotime($payment_start_date), strtotime($payment_end_date) ] ];
} else if ($payment_start_date != '' && $payment_end_date == '') {
$condition[] = [ 'fw.payment_time', '>=', strtotime($payment_start_date) ];
} else if ($payment_start_date == '' && $payment_end_date != '') {
$condition[] = [ 'fw.payment_time', '<=', strtotime($payment_end_date) ];
}
$order = 'fw.create_time desc';
$field = 'fw.id,fw.site_id,fw.withdraw_no,fw.member_id,fw.fenxiao_id,fw.fenxiao_name,fw.withdraw_type,fw.bank_name,fw.account_number,fw.realname,fw.mobile,fw.money,fw.withdraw_rate,
fw.withdraw_rate_money,fw.real_money,fw.`status`,fw.remark,fw.create_time,fw.payment_time,fw.modify_time,fw.transfer_type,fw.transfer_name,fw.transfer_remark,fw.transfer_no,
fw.transfer_account_no,fw.document,fw.audit_time,fw.refuse_reason,fw.applet_type,fw.fail_reason, m.headimg,m.nickname,m.mobile as member_mobile,m.headimg';
$join = [
[ 'member m', 'fw.member_id = m.member_id', 'left' ]
];
$list = $model->getFenxiaoWithdrawPageList($condition, $page, $page_size, $order, $field, 'fw', $join);
foreach ($list[ 'data' ][ 'list' ] as $k => $v) {
$list[ 'data' ][ 'list' ][ $k ][ 'transfer_type_name' ] = $transfer_type_list[ $v[ 'transfer_type' ] ];
}
return $list;
} else {
$this->assign('transfer_type_list', $transfer_type_list);
$fenxiao_stat_model = new FenxiaoStat();
$fenxiao_balance_sum = $fenxiao_stat_model->getFenxiaoAccountSum($this->site_id)[ 'data' ] ?? [];
$this->assign('fenxiao_balance_sum', $fenxiao_balance_sum);
//提现状态
$this->assign('status_list', $model->status);
$config_model = new WechatPayConfig();
$config = $config_model->getPayConfig($this->site_id)[ 'data' ][ 'value' ];;
$transfer_v3_type = $config['transfer_type'] == 'v3' && $config['transfer_v3_type'] == $config_model::TRANSFER_V3_TYPE_USER ;
$this->assign("transfer_v3_type",$transfer_v3_type);
return $this->fetch("withdraw/lists");
}
}
/**
* 提现记录详情
* @return mixed
*/
public function detail()
{
$fenxiao_withdraw_model = new FenxiaoWithdrawModel();
$params = array (
'id' => input('id', 0),
'site_id' => $this->site_id
);
$detail = $fenxiao_withdraw_model->getFenxiaoWithdrawDetail($params)[ 'data' ] ?? [];
if (empty($detail))
$this->error('找不到提现账户记录');
$this->assign('info', $detail);
return $this->fetch('withdraw/detail');
}
/**
* 同意
* @return array
*/
public function agree()
{
if (request()->isJson()) {
$id = input('id', 0);
$fenxiao_withdraw_model = new FenxiaoWithdrawModel();
$params = array (
'site_id' => $this->site_id,
"id" => $id,
);
$result = $fenxiao_withdraw_model->agree($params);
return $result;
}
}
/**
* 拒绝
* @return array
*/
public function refuse()
{
if (request()->isJson()) {
$id = input('id', 0);
$refuse_reason = input('refuse_reason', '');
$fenxiao_withdraw_model = new FenxiaoWithdrawModel();
$data = array (
"refuse_reason" => $refuse_reason,
'site_id' => $this->site_id,
'id' => $id
);
$result = $fenxiao_withdraw_model->refuse($data);
return $result;
}
}
/**
* 转账
*/
public function transferFinish()
{
if (request()->isJson()) {
$id = input('id', 0);
$certificate = input('certificate', '');
$certificate_remark = input('certificate_remark', '');
$fenxiao_withdraw_model = new FenxiaoWithdrawModel();
$data = array (
"id" => $id,
"site_id" => $this->site_id,
"certificate" => $certificate,
"certificate_remark" => $certificate_remark,
);
$result = $fenxiao_withdraw_model->transferFinish($data);
return $result;
}
}
/**
* 转账
*/
public function transfer()
{
if (request()->isJson()) {
$id = input('id', 0);
$fenxiao_withdraw_model = new FenxiaoWithdrawModel();
$result = $fenxiao_withdraw_model->transfer([ 'id' => $id, 'site_id' => $this->site_id ]);
return $result;
}
}
public function export()
{
$fenxiao_withdraw_model = new FenxiaoWithdrawModel();
$withdraw_no = input('withdraw_no', '');
$start_date = input('start_date', '');
$end_date = input('end_date', '');
$status = input('status', 'all');//提现状态
$transfer_type = input('transfer_type', '');//提现转账方式
$fenxiao_name = input('fenxiao_name', '');//提现转账方式
$payment_start_date = input('payment_start_date', '');
$payment_end_date = input('payment_end_date', '');
$condition = [ [ 'site_id', '=', $this->site_id ] ];
if (!empty($withdraw_no)) {
$condition[] = [ 'withdraw_no', 'like', '%' . $withdraw_no . '%' ];
}
if (!empty($transfer_type)) {
$condition[] = [ 'transfer_type', '=', $transfer_type ];
}
if ($status != "all") {
$condition[] = [ 'status', '=', $status ];
}
if (!empty($fenxiao_name)) {
$condition[] = [ 'fenxiao_name', '=', $fenxiao_name ];
}
if ($start_date != '' && $end_date != '') {
$condition[] = [ 'create_time', 'between', [ strtotime($start_date), strtotime($end_date) ] ];
} else if ($start_date != '' && $end_date == '') {
$condition[] = [ 'create_time', '>=', strtotime($start_date) ];
} else if ($start_date == '' && $end_date != '') {
$condition[] = [ 'create_time', '<=', strtotime($end_date) ];
}
if ($payment_start_date != '' && $payment_end_date != '') {
$condition[] = [ 'payment_time', 'between', [ strtotime($payment_start_date), strtotime($payment_end_date) ] ];
} else if ($payment_start_date != '' && $payment_end_date == '') {
$condition[] = [ 'payment_time', '>=', strtotime($payment_start_date) ];
} else if ($payment_start_date == '' && $payment_end_date != '') {
$condition[] = [ 'payment_time', '<=', strtotime($payment_end_date) ];
}
$order = 'create_time desc';
$fenxiao_withdraw_model->exportFenxiaoWithdraw($condition, $order, $this->site_id);
}
}

View File

@@ -0,0 +1,135 @@
<div class="layui-form form-wrap">
<!-- 基础上传 -->
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">分销商申请设置</span>
</div>
<div class="layui-card-body">
<div class="layui-form-item apply">
<label class="layui-form-label">显示申请协议:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="radio" name="is_agreement" value="1" lay-filter="level" title="显示" {if $agreement_info.is_agreement == 1} checked {/if}/>
<input type="radio" name="is_agreement" value="0" lay-filter="level" title="隐藏" {if $agreement_info.is_agreement != 1} checked {/if}/>
</div>
</div>
</div>
<div class="layui-form-item apply_img">
<label class="layui-form-label">申请页面顶部图片:</label>
<div class="layui-input-block">
<div class="upload-img-block">
<div class="upload-img-box {notempty name="$agreement_info['img']"}hover{/notempty}">
<div class="upload-default" id="applyImg">
{if condition="$agreement_info.img"}
<div id="preview_imgUpload" class="preview_img">
<img layer-src src="{:img($agreement_info.img)}" class="img_prev"/>
</div>
{else/}
<div class="upload">
<i class="iconfont iconshangchuan"></i>
<p>点击上传</p>
</div>
{/if}
</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="img" value="{$agreement_info.img}">
</div>
<!-- <p id="applyImg" class=" {if condition='$agreement_info.img'} replace {else/} no-replace{/if}">替换</p>
<input type="hidden" name="img" value="{$agreement_info.img}">
<i class="del {if condition="$agreement_info.img"}show{/if}">x</i> -->
</div>
</div>
<div class="word-aux">
<p>建议尺寸750*337像素</p>
</div>
</div>
</div>
</div>
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">协议设置</span>
</div>
<div class="layui-card-body">
<div class="layui-form-item">
<label class="layui-form-label">协议名称:</label>
<div class="layui-input-block">
<input type="text" name="agreement_title" value="{$document.title}" lay-verify="required" class="layui-input len-mid new_pass" maxlength="18">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">协议内容:</label>
<div class="layui-input-block">
<script id="editor" type="text/plain" class="special-length" style="height:600px;"></script>
<input type="hidden" name="agreement_content" id="agreement_content" value="{$document.content}" />
</div>
</div>
</div>
</div>
<div class="form-row" style="margin-top:0;padding-left:20px;">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
</div>
</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($("#agreement_content").val()){
ue.ready(function() {
ue.setContent($("#agreement_content").val());
});
}
layui.use(['form'], function() {
var form = layui.form,
repeat_flag = false; //防重复标识
form.render();
var upload = new Upload({
elem: '#applyImg'
});
form.on('submit(save)', function(data) {
if (repeat_flag) return;
repeat_flag = true;
var field = data.field;
// 删除图片
if(!field.img) upload.delete();
$.ajax({
type: 'POST',
dataType: 'JSON',
url: ns.url("fenxiao://shop/config/agreement"),
data: {
'is_agreement' : field.is_agreement,
'agreement_title' : field.agreement_title,
'agreement_content' : ue.getContent(),
'img' : field.img,
},
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
}
});
});
});
</script>

View File

@@ -0,0 +1,482 @@
<div class="layui-form form-wrap">
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">分销设置</span>
</div>
<div class="layui-card-body">
<div class="layui-form-item">
<label class="layui-form-label">是否开启分销:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="radio" name="level_config" value="1" lay-filter="open_distribution" title="开启" {if $basics_info.level > 0} checked {/if}/>
<input type="radio" name="level_config" value="0" lay-filter="open_distribution" title="关闭" {if $basics_info.level == 0} checked {/if}/>
</div>
</div>
</div>
<div class="layui-form-item distribution-index {if $basics_info.level == 0}layui-hide{/if}">
<label class="layui-form-label">分销层级:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="radio" name="level" value="1" title="一级分销" {if $basics_info.level == 1 || $basics_info.level == 0} checked {/if} lay-filter="level"/>
<input type="radio" name="level" value="2" title="二级分销" {if $basics_info.level == 2} checked {/if} lay-filter="level"/>
</div>
</div>
</div>
<div class="layui-form-item distribution-index {if $basics_info.level == 0}layui-hide{/if}">
<label class="layui-form-label">是否开启自购分佣:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="radio" name="self_purchase_rebate" value="1" title="开启" {if $basics_info.self_purchase_rebate == 1} checked {/if}/>
<input type="radio" name="self_purchase_rebate" value="0" title="关闭" {if $basics_info.self_purchase_rebate != 1} checked {/if}/>
</div>
</div>
<div class="word-aux ">开启自购,分销商购买自身获得一级佣金<br/>关闭自购,分销商的上级分销商获得一级佣金,自身不再返佣</div>
</div>
<div class="layui-form-item distribution-index {if $basics_info.level == 0}layui-hide{/if}">
<label class="layui-form-label">是否展示商品详情一级佣金:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="radio" name="is_commission_money" value="1" title="开启" {if $basics_info.is_commission_money == 1} checked {/if}/>
<input type="radio" name="is_commission_money" value="0" title="关闭" {if $basics_info.is_commission_money != 1} checked {/if}/>
</div>
</div>
<div class="word-aux ">开启后,商品详情显示,关闭后,商品详情不显示</div>
</div>
</div>
</div>
<div class="layui-card card-common card-brief distribution-index {if $basics_info.level == 0}layui-hide{/if}">
<div class="layui-card-header">
<span class="card-title">上下线关系</span>
</div>
<div class="layui-card-body">
<div class="layui-form-item">
<label class="layui-form-label">绑定下级条件:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="radio" name="child_condition" value="1" lay-filter="child_condition" title="首次点击分享链接" checked />
<input type="radio" name="child_condition" value="2" lay-filter="child_condition" title="首次下单" {if $relation_info.child_condition == 2} checked {/if}/>
<input type="radio" name="child_condition" value="3" lay-filter="child_condition" title="首次付款" {if $relation_info.child_condition == 3} checked {/if}/>
</div>
</div>
<div class="word-aux" id="child_condition_desc"></div>
</div>
</div>
</div>
<div class="layui-card card-common card-brief distribution-index {if $basics_info.level == 0}layui-hide{/if}">
<div class="layui-card-header">
<span class="card-title">分销商资格</span>
</div>
<div class="layui-card-body">
<div class="layui-form-item distribution-index">
<label class="layui-form-label">分销商申请方式:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="radio" name="is_apply" value="0" lay-filter="is_apply" title="人人分销" {if $basics_info.is_apply == 0} checked {/if}/>
<input type="radio" name="is_apply" value="1" lay-filter="is_apply" title="申请分销" {if $basics_info.is_apply == 1} checked {/if}/>
<input type="radio" name="is_apply" value="2" lay-filter="is_apply" title="手动设置" {if $basics_info.is_apply == 2} checked {/if}/>
</div>
</div>
<div class="word-aux">人人分销:分销商不需要申请,达到条件自动成为分销商</div>
<div class="word-aux">申请分销:会员达到条件需要申请才能成为分销商</div>
<div class="word-aux">手动设置:分销商只有在后台进行添加,前台会员无法进行申请</div>
</div>
<div class="fenxiao-condition" {if $basics_info.is_apply == 2}style="display:none;"{/if}>
<div class="layui-form-item is-examine {if $basics_info.is_apply == 0}layui-hide{/if}">
<label class="layui-form-label">是否需要审核:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="radio" name="is_examine" value="1" title="开启" {if $basics_info.is_examine == 1} checked {/if}/>
<input type="radio" name="is_examine" value="0" title="关闭" {if $basics_info.is_examine != 1} checked {/if}/>
</div>
</div>
<div class="word-aux ">开启后,分销商申请之后还需要后台审核</div>
</div>
<div class="layui-form-item distributor">
<label class="layui-form-label">成为分销商条件:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="radio" name="fenxiao_condition" value="0" lay-filter="fenxiao_condition" title="无条件" {if $fenxiao_info.fenxiao_condition == 0} checked {/if}/>
<!-- <input type="radio" name="fenxiao_condition" value="1" lay-filter="fenxiao_condition" title="申请" {if $fenxiao_info.fenxiao_condition == 1} checked {/if}/>-->
<input type="radio" name="fenxiao_condition" value="2" lay-filter="fenxiao_condition" title="消费次数" {if $fenxiao_info.fenxiao_condition == 2} checked {/if}/>
<input type="radio" name="fenxiao_condition" value="3" lay-filter="fenxiao_condition" title="消费金额" {if $fenxiao_info.fenxiao_condition == 3} checked {/if}/>
<input type="radio" name="fenxiao_condition" value="4" lay-filter="fenxiao_condition" title="购买指定商品" {if $fenxiao_info.fenxiao_condition == 4} checked {/if}/>
</div>
</div>
<div class="word-aux"></div>
</div>
<div class="layui-form-item layui-hide consume_count">
<label class="layui-form-label">累计消费次数:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="number" name="consume_count" value="{$fenxiao_info.consume_count}" autocomplete="off" class="layui-input" onblur="checkInput(this, 'consume_count')">
</div>
<div class="layui-form-mid"></div>
</div>
</div>
<div class="layui-form-item layui-hide consume_money">
<label class="layui-form-label">累计消费金额:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="number" name="consume_money" value="{$fenxiao_info.consume_money}" autocomplete="off" class="layui-input" onblur="checkInput(this, 'consume_money')">
</div>
<div class="layui-form-mid"></div>
</div>
</div>
<div class="layui-form-item layui-hide consume_goods">
<div class="layui-form-item goods_list">
<label class="layui-form-label"></label>
<div class="layui-input-block">
<table id="selected_sku_list"></table>
<input type="hidden" lay-verify="goods_ids" name="goods_ids">
<button class="layui-btn" onclick="addGoods()">选择商品</button>
</div>
</div>
</div>
<div class="layui-form-item layui-hide consume_condition">
<label class="layui-form-label">消费条件:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="radio" name="consume_condition" value="1" title="付款后" checked/>
<input type="radio" name="consume_condition" value="2" title="订单完成" {if $fenxiao_info.consume_condition == 2} checked {/if}/>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="layui-card card-common card-brief distribution-index {if $basics_info.level == 0}layui-hide{/if}">
<div class="layui-card-header">
<span class="card-title">默认分销佣金比率</span>
</div>
<div class="layui-card-body">
<div class="fenxiao-rate">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>一级返佣比例:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="one_rate" value="{$level.one_rate ?? 0}" lay-verify="level_rate" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">%</div>
</div>
<div class="word-aux">
<p>会员购买后给对应分销商的返佣比例</p>
</div>
</div>
<div class="fenxiao-rate" {$basics_info.level >= 2}style="display:none"{/if}>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>二级返佣比例:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="two_rate" value="{$level.two_rate ?? 0}" lay-verify="level_rate" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">%</div>
</div>
<div class="word-aux">
<p>会员购买后给对应分销商的上级分销商返佣比例</p>
</div>
</div>
<div class="fenxiao-rate" {$basics_info.level == 3}style="display:none"{/if}>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>三级返佣比例:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="three_rate" value="{$level.three_rate ?? 0}" lay-verify="level_rate" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">%</div>
</div>
<div class="word-aux">
<p>会员购买后给当前等级分销商的上上级分销商返佣比例</p>
</div>
</div>
</div>
</div>
<div class="form-row" style="margin-top:0;padding-left:20px;">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
</div>
<!-- 操作 -->
<script type="text/html" id="operation">
<div class="table-btn">
<a class="layui-btn" onclick="delGoods({{d.goods_id}})">删除</a>
</div>
</script>
</div>
<script>
var selectedGoodsId = [], goods_id=[] ;
var goods_list = {:json_encode($fenxiao_info.goods_list, JSON_UNESCAPED_UNICODE)};
if (goods_list.length==0){
goods_list = [];
}
$.each(goods_list, function(index, item) {
var id = item.goods_id;
selectedGoodsId.push(id);
goods_id.push(id);
});
renderTable(goods_list);
$("input[name='goods_ids']").val(goods_id.toString());
layui.use(['form'], function() {
var form = layui.form,
openDistribution = "{$basics_info.level}",
repeat_flag = false; //防重复标识
form.render();
renderTable(goods_list); // 初始化表格
form.verify({
goods_ids: function(value){
var type = $('[name="fenxiao_condition"]:checked').val();
if(type==4){
if (!/[\S]+/.test(value)) {
return '请选择商品';
}
}
},
level_rate: function (value, elem) {
var title = $(elem).parents('.layui-form-item').find('.layui-form-label').text().replace('*', '').replace('', '');
if (!$(elem).is(':hidden')) {
if (!/[\S]+/.test(value)) {
return '请输入' + title;
}
if (!/^(([0-9][0-9]*)|(([0]\.\d{1,2}|[1-9][0-9]*\.\d{1,2})))$/.test(value)) {
return title + `格式输入错误`;
}
}
}
});
form.on('submit(save)', function(data) {
if (repeat_flag) return;
repeat_flag = true;
if(!parseInt(openDistribution)){
data.field.level = data.field.level_config;
}
if (data.field.level) {
var rate = 0;
$('.fenxiao-rate:not(:hidden)').each(function () {
var value = parseFloat($(this).find('input').val());
if (!isNaN(value)) rate += value;
});
if (rate > 100) {
layer.msg('分销佣金比率之和不能超出100', {icon: 5});
return false;
}
}
$.ajax({
type: 'POST',
dataType: 'JSON',
url: ns.url("fenxiao://shop/config/basics"),
data: data.field,
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
}
});
});
form.on('radio(open_distribution)', function(data){
openDistribution = data.value;
if (!parseInt(openDistribution)){
$(".distribution-index").addClass('layui-hide');
return false;
}
$(".distribution-index").removeClass('layui-hide');
});
form.on('radio(level)', function (data) {
$('.fenxiao-rate').hide();
$('.fenxiao-rate:lt('+ data.value +')').show()
});
form.on('radio(is_apply)', function (data) {
if (data.value == 0) {
$('.is-examine').addClass('layui-hide');
$('.fenxiao-condition').show();
$('[name="is_examine"][value="0"]').prop('checked', true);
} else if (data.value == 1) {
$('.is-examine').removeClass('layui-hide');
$('.fenxiao-condition').show();
} else {
$('.fenxiao-condition').hide();
}
});
//监听成为分销商条件选择
form.on('radio(fenxiao_condition)', function(data){
var value = data.value;
distributionConditions(value);
});
form.on('radio(child_condition)', function(data){
childConditionChange(data.value);
});
function childConditionChange(child_condition){
var config = {
1 : '非分销商用户在点击分销商的分享链接后即可成为该分销商的下线',
2 : '非分销商用户在点击分销商的分享链接后在商城中创建订单即可成为该分销商的下线',
3 : '非分销商用户在点击分销商的分享链接后在商城中创建订单并支付成功即可成为该分销商的下线',
};
$("#child_condition_desc").html(config[child_condition]);
}
//默认选中
childConditionChange('{$relation_info.child_condition}');
distributionConditions("{$fenxiao_info.fenxiao_condition}");
function distributionConditions (value){
value = parseInt(value);
$('.consume_count').addClass("layui-hide");
$('.consume_money').addClass("layui-hide");
$('.consume_goods').addClass("layui-hide");
$('.consume_condition').addClass("layui-hide");
$('.apply').addClass("layui-hide");
//无条件
if(value == 0){
$(".distributor .word-aux").text("不需要任何条件,申请注册即可成为分销商");
}
//申请
if(value == 1){
$('.apply').removeClass("layui-hide");
$(".distributor .word-aux").text("需申请通过,才可以成为分销商");
}
//消费次数
if(value == 2){
$('.consume_count').removeClass("layui-hide");
$('.consume_condition').removeClass("layui-hide");
$(".distributor .word-aux").text("当消费次数达到一定数量并申请通过才可以成为分销商");
}
//消费金额
if(value == 3){
$('.consume_money').removeClass("layui-hide");
$('.consume_condition').removeClass("layui-hide");
$(".distributor .word-aux").text("当消费金额达到一定数量并申请通过才可以成为分销商");
}
//购买指定商品
if(value == 4){
$('.consume_goods').removeClass("layui-hide");
$('.consume_condition').removeClass("layui-hide");
$(".distributor .word-aux").text("商品任选其-购买即可成为分销商");
}
}
});
/* 商品 */
function addGoods(){
goodsSelect(function (data) {
goods_list = [];
goods_id = [];
for (var key in data) {
goods_id.push(data[key].goods_id);
goods_list.push(data[key]);
}
renderTable(goods_list);
$("input[name='goods_ids']").val(goods_id.toString());
selectedGoodsId = goods_id;
}, selectedGoodsId, {mode: "spu"});
}
// 删除选中商品
function delGoods(id) {
var i, j;
$.each(goods_list, function(index, item) {
var goods_id = item.goods_id;
if (id == Number(goods_id)) {
i = index;
}
});
goods_list.splice(i, 1);
renderTable(goods_list);
$.each(selectedGoodsId, function(index, item) {
if (id == Number(item)) {
j = index;
}
});
selectedGoodsId.splice(j, 1);
goods_id = selectedGoodsId;
$("input[name='goods_ids']").val(goods_id.toString());
}
// 表格渲染
function renderTable(goods_list) {
//展示已知数据
table = new Table({
elem: '#selected_sku_list',
page: false,
limit: Number.MAX_VALUE,
cols: [
[{
field: 'goods_name',
title: '商品名称',
unresize: 'false',
width: '50%',
templet: function(data) {
var html = '';
html += `
<div class="goods-title" style="display:flex;">
<div class="goods-img">
<img src="${data.goods_image ? ns.img(data.goods_image.split(",")[0],'small') : ''}" alt="">
</div>
<p class="multi-line-hiding goods-name" style="margin:20px 0 0 10px;">${data.goods_name}</p>
</div>
`;
return html;
}
}, {
field: 'price',
title: '商品价格(元)',
unresize: 'false',
align: 'right',
width: '20%',
templet: function(data) {
return '¥' + data.price;
}
}, {
field: 'goods_stock',
title: '库存',
unresize: 'false',
align: 'center',
width: '20%'
}, {
title: '操作',
toolbar: '#operation',
unresize: 'false',
align:'right'
}],
],
data: goods_list,
});
}
function checkInput(obj, type){
if(type == 'consume_money'){
$(obj).val(Math.abs($(obj).val()));
}
if(type == 'consume_count'){
$(obj).val(Math.floor(Math.abs($(obj).val())));
}
}
</script>

View File

@@ -0,0 +1,58 @@
<div class="layui-form form-wrap">
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">推广活动规则设置</span>
</div>
<div class="layui-card-body">
<div class="layui-form-item">
<label class="layui-form-label">规则内容:</label>
<div class="layui-input-block">
<script id="editor" type="text/plain" class="special-length" style="height:600px;"></script>
<input type="hidden" name="content" id="content" value="{$document.content}" />
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
</div>
</div>
</div>
</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($("#content").val()){
ue.ready(function() {
ue.setContent($("#content").val());
});
}
layui.use(['form'], function() {
var form = layui.form,
repeat_flag = false; //防重复标识
form.render();
form.on('submit(save)', function(data) {
if (repeat_flag) return;
repeat_flag = true;
$.ajax({
type: 'POST',
dataType: 'JSON',
url: ns.url("fenxiao://shop/config/promoterule"),
data: {
'content' : ue.getContent(),
},
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
}
});
});
});
</script>

View File

@@ -0,0 +1,144 @@
<div class="layui-form form-wrap">
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">提现设置</span>
</div>
<div class="layui-card-body">
<div class="layui-form-item">
<label class="layui-form-label">提现审核:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="radio" name="withdraw_status" value="1" title="手动审核" {if $withdraw_info.withdraw_status == 1} checked {/if} />
<input type="radio" name="withdraw_status" value="2" title="自动审核" {if $withdraw_info.withdraw_status == 2} checked {/if}/>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">自动转账:</label>
<div class="layui-input-block">
<input type="checkbox" name="is_auto_transfer" lay-filter="is_auto_transfer" value="1" lay-skin="switch" {if !empty($withdraw_info.is_auto_transfer) && $withdraw_info.is_auto_transfer==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">
<div class="layui-input-inline">
<input type="number" name="withdraw_rate" lay-verify="positivEinteger" value="{$withdraw_info.withdraw_rate ?? 0}" autocomplete="off" class="layui-input len-short" >
</div>
<div class="layui-form-mid">%</div>
</div>
<div class="word-aux">比率必须为0-100的数且保留两位小数,提现到余额时没有手续费</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">最低提现金额:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="number" name="withdraw" id="min" value="{if condition="!empty($withdraw_info.withdraw)"}{$withdraw_info.withdraw ?: 0}{else/}0{/if}" lay-verify="growthMinInteger" autocomplete="off" class="layui-input len-short">
</div>
</div>
<div class="word-aux">最低提现金额必须大于0</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">最高提现额度:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="number" name="max" value="{if condition="!empty($withdraw_info.max)"}{$withdraw_info.max ?: 0}{else/}0{/if}" lay-verify="growthMaxInteger" autocomplete="off" class="layui-input len-short">
</div>
</div>
<div class="word-aux">额度设置为0为不限制</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">转账方式:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
{foreach $transfer_type_list as $k => $v}
<input type="checkbox" lay-filter="transfer_type" name="transfer_type[]" title="{$v}" lay-skin="primary" value="{$k}" {if !empty($withdraw_info.transfer_type) && stripos($withdraw_info.transfer_type, $k) !== false}checked{/if}>
{/foreach}
</div>
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
</div>
</div>
</div>
</div>
<script>
layui.use(['form'], function() {
var form = layui.form,
repeat_flag = false; //防重复标识
form.render();
form.on('submit(save)', function(data) {
if (repeat_flag) return;
repeat_flag = true;
$.ajax({
type: 'POST',
dataType: 'JSON',
url: ns.url("fenxiao://shop/config/settlement"),
data: data.field,
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
}
});
});
/**
* 表单验证
*/
form.verify({
max_no_fee: function(value){
var min_no_fee = $('input[name="min_no_fee"]').val();
if(parseFloat(min_no_fee) > parseFloat(value)){
return '免手续费区间输入有误,区间最大值不能小于最小值';
}
},
positivEinteger: function(value){
if (parseFloat(value) < 0 || parseFloat(value) > 100) {
return '请输入0-100之间的数';
}
if (value.split(".").length > 1) {
var len = value.split(".")[1].length;
if (len > 2) {
return '门店抽成比率最多两位小数';
}
}
},
growthMinInteger: function (value) {
if(value <= 0){
return '最低提现金额必须大于0';
}
if (value.split(".").length > 1) {
let len = value.split(".")[1].length;
if (len > 2) {
return '最低提现金额最多保留两位小数';
}
}
},
growthMaxInteger: function (value) {
var min = $('#min').val();
if(parseFloat(value) < 0){
return '最高提现额度不可为负数';
}
if(parseInt(min) > 0 && parseInt(value) > 0 && parseInt(value) < parseInt(min)){
return '不能小于最低提现额度';
}
},
});
});
</script>

View File

@@ -0,0 +1,96 @@
<div class="layui-form form-wrap">
<div class="layui-form-item">
<label class="layui-form-label">分销概念:</label>
<div class="layui-input-block">
<input type="text" name="concept" lay-verify="required" {if condition="isset($config_info.concept)"} value='{$config_info.concept}' {/if} autocomplete="off" class="layui-input len-mid">
</div>
<div class="word-aux">
<p>更改分销概念的名称,在我的分销中心以及申请成为分销商页面,会用新的分销概念名称替换分销概念</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">分销商名称:</label>
<div class="layui-input-block">
<input type="text" name="fenxiao_name" lay-verify="required" {if condition="isset($config_info.fenxiao_name)"} value='{$config_info.fenxiao_name}' {/if} autocomplete="off" class="layui-input len-mid">
</div>
<div class="word-aux">
<p>更改分销商的名称,在我的分销中心以及申请成为分销商页面,会用新的分销商名称替换分销商名称</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">提现:</label>
<div class="layui-input-block">
<input type="text" name="withdraw" lay-verify="required" {if condition="isset($config_info.withdraw)"} value='{$config_info.withdraw}' {/if} autocomplete="off" class="layui-input len-mid">
</div>
<div class="word-aux">
<p>更改提现名称,在我的分销中心以及申请成为分销商页面,会用新的提现名称替换提现</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">佣金:</label>
<div class="layui-input-block">
<input type="text" name="account" lay-verify="required" {if condition="isset($config_info.account)"} value='{$config_info.account}' {/if} autocomplete="off" class="layui-input len-mid">
</div>
<div class="word-aux">
<p>更改佣金名称,在我的分销中心以及申请成为分销商页面,会用新的分佣金名称替换佣金</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">我的团队:</label>
<div class="layui-input-block">
<input type="text" name="my_team" lay-verify="required" {if condition="isset($config_info.my_team)"} value='{$config_info.my_team}' {/if} autocomplete="off" class="layui-input len-mid">
</div>
<div class="word-aux">
<p>更改我的团队名称,在我的分销中心以及申请成为分销商页面,会用新的我的团队名称替换我的团队</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">下线:</label>
<div class="layui-input-block">
<input type="text" name="child" lay-verify="required" {if condition="isset($config_info.child)"} value='{$config_info.child}' {/if} autocomplete="off" class="layui-input len-mid">
</div>
<div class="word-aux">
<p>更改下线名称,在我的分销中心以及申请成为分销商页面,会用新的下线名称替换下线</p>
</div>
</div>
<div class="form-row">
<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){
if(repeat_flag) return;
repeat_flag = true;
$.ajax({
type: 'POST',
dataType: 'JSON',
url: ns.url("fenxiao://shop/config/words"),
data: data.field,
async: false,
success: function(res){
repeat_flag = false;
layer.msg(res.message);
}
})
});
});
</script>

View File

@@ -0,0 +1,400 @@
<link rel="stylesheet" type="text/css" href="REPLACEBUY_CSS/index.css"/>
<style>
.layui-form {
position: relative;
}
.layui-form-label {
text-align: right;
margin-left: 60px;
}
.layui-form-item {
margin-bottom: 22px;
}
.fenxiao-select {
position: absolute;
left: 400px;
top: 135px;
}
.member-select {
position: absolute;
left: 400px;
top: 175px;
}
.member-select-add{
border:1px solid;
padding: 5px 10px;
}
.layui-unselect.layui-form-radio.layui-form-radioed i:after {
background-color: #fff;
}
.layui-table-body {
max-height: 530px;
}
.inline{width: 205px;}
.layui-input{width: 205px;}
</style>
<div class="layui-form form-wrap">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>分销商名称:</label>
<div class="layui-input-block">
<input name="fenxiao_name" type="text" lay-verify="required" 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 len-mid">
<select name="level_id" lay-verify="required">
<option value="">请选择</option>
{volist name="$level_list" id="level"}
<option value="{$level.level_id}">{$level.level_name}</option>
{/volist}
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">上级分销商:</label>
<!-- <div class="layui-input-inline len-mid">
<select name="fenxiao_id" lay-filter="fenxiao_id">
<option value="">请选择</option>
{volist name="$fenxiao_list" id="fenxiao"}
<option value="{$fenxiao.fenxiao_id}">{$fenxiao.fenxiao_name}</option>
{/volist}
</select>
</div> -->
<button class="layui-btn layui-btn1" onclick="addFenxiao()">选择分销商</button>
</div>
<div class="fenxiao-select"></div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>关联会员:</label>
<!-- <div class="layui-input-inline len-mid">
<select name="member_id" lay-verify="required" lay-filter="member_id">
<option value="">请选择</option>
{volist name="$member_list" id="member"}
<option value="{$member.member_id}">{$member.nickname}</option>
{/volist}
</select>
</div> -->
<button class="layui-btn layui-btn2" onclick="addMember()">选择会员</button>
</div>
<div class="member-select"></div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<button class="layui-btn layui-btn-primary" type="reset" onclick="backFenxiaoList()">返回</button>
</div>
</div>
<script type="text/html" id="addFenxiao">
<div class="layui-form">
<div class="layui-input-inline inline">
<input type="text" name="fenxiao_search" placeholder="请输入分销商名称" autocomplete="off" class="layui-input ">
<button type="button" class="layui-btn layui-btn-primary fenxiao-search" lay-filter="search" lay-submit>
<i class="layui-icon"></i>
</button>
</div>
<table id="fenxiao_list" lay-filter="fenxiao_list"></table>
</div>
</script>
<script type="text/html" id="addMember">
<div class="layui-form">
<div class="layui-input-inline inline">
<input type="text" name="member_search" placeholder="请输入会员名称" autocomplete="off" class="layui-input ">
<button type="button" class="layui-btn layui-btn-primary member-search" lay-filter="search" lay-submit>
<i class="layui-icon"></i>
</button>
</div>
<table id="member_list" lay-filter="member_list"></table>
</div>
</script>
<!-- 会员详情 -->
<script type="text/html" id="member_detail">
<div class="member-detail">
<div class="table-title checked-peo">
<div class="title-pic">
<img src="{{ns.img(d.headimg)}}" onerror=src="{:img('public/static/img/default_img/head.png')}" />
</div>
<div class="title-content">
<div class="member-con-first">
<h3 class="nickname" title="{{d.nickname}}">{{d.nickname}}</h3>
</div>
<div class="member-con-second">
<p class="text-color-gray"><span class="member-mobile">{{d.mobile == "" ? '--' : d.mobile}}</span></p>
</div>
</div>
</div>
<button class="layui-btn check-btn" lay-submit lay-filter="logout_member">重新选择</button>
</div>
</script>
<script type="text/javascript">
var new_fenxiao_id = 0;var new_member_id = 0,repeat_flag = false,table;
layui.use(['form', 'laytpl'], function() {
laytpl = layui.laytpl;
form = layui.form;
form.render();
/**
* 监听提交
*/
form.on('submit(save)', function(data) {
data.field.fenxiao_id = new_fenxiao_id;
data.field.member_id = new_member_id;
$.ajax({
url: ns.url("fenxiao://shop/fenxiao/add"),
data: data.field,
dataType: 'JSON', //服务器返回json格式数据
type: 'POST', //HTTP请求类型
success: function(res) {
repeat_flag = false;
if (res.code == 0) {
layer.msg(res.message);
location.hash = ns.hash("fenxiao://shop/fenxiao/lists")
} else {
layer.msg(res.message);
}
}
});
});
})
function backFenxiaoList() {
location.hash = ns.hash("fenxiao://shop/fenxiao/lists");
}
// 会员详情页面渲染
function memberDetail(data) {
laytpl($("#member_detail").html()).render(data, function(html) {
$(".member").html(html);
$("#member_id").val(data.member_id);
})
}
var add_attr_radioState = 0;
var add_attr_radioState2 = 0;
function addFenxiao() {
var add_attr = $("#addFenxiao").html();
var _this = this;
form.on('radio(layfenxiaoid)', function(obj){
new_fenxiao_id = obj.value;
_this.add_attr_radioState = obj.value;
var title_fenxiao = ($(this).data('index'));
$('.layui-btn1').parents('.layui-form-item').next('.fenxiao-select').html(title_fenxiao)
});
laytpl(add_attr).render({}, function(html) {
add_attr_index = layer.open({
title: '选择分销商',
skin: 'layer-tips-class',
type: 1,
area: ['1000px', '800px'],
content: html,
btn: ["保存", "返回"],
yes: function () {
layer.close(add_attr_index);
}
});
});
//展示已知数据
table = new Table({
elem: '#fenxiao_list',
url: ns.url("fenxiao://shop/fenxiao/getfenxiaolist"),
cols: [
[{
width: "20%",
title: '分销商选择',
unresize: 'false',
templet: function(data) {
var html = '';
if(data.fenxiao_id == Number(add_attr_radioState)){
html += `
<div>
<input type="radio" name="layTableRadioc" checked = true value="${data.fenxiao_id}" data-index="${data.fenxiao_name}" lay-type="layTableRadio" lay-filter="layfenxiaoid">
</div>
`;
}else{
html += `
<div>
<input type="radio" name="layTableRadioc" value="${data.fenxiao_id}" data-index="${data.fenxiao_name}" lay-type="layTableRadio" lay-filter="layfenxiaoid">
</div>
`;
}
return html;
}
},{
title: '分销商名称',
width: '50%',
unresize: 'false',
field: 'fenxiao_name',
}, {
field: 'account',
title: '佣金',
unresize: 'false',
width: '30%',
},
]
],
});
/**
* 搜索功能
*/
form.on('submit(search)', function (data) {
table.reload({
page: {
curr: 1
},
where: data.field
});
});
$(document).keydown(function (event) {
if (event.keyCode == 13) {
$(".fenxiao-search").trigger("click");
}
});
}
function addMember() {
var _this = this;
var add_attr2 = $("#addMember").html();
form.on('radio(laymemberid)', function(obj){
new_member_id = obj.value;
_this.add_attr_radioState2 = obj.value;
});
laytpl(add_attr2).render({}, function(html) {
var add_attr_index2 = layer.open({
title: '选择会员',
skin: 'layer-tips-class',
type: 1,
area: ['1000px', '800px'],
content: html,
btn:["保存","返回"],
yes: function(){
$.ajax({
url: ns.url("fenxiao://shop/fenxiao/memberInfo"),
data:{member_id: new_member_id},
dataType: 'JSON',
type: 'POST',
success: function(res) {
if (res.code == 0) {
var html = '';
html += '<div class="member-detail">'
+'<div class="table-title checked-peo">'
+'<div class="title-pic">'
+'<img src="'+ns.img(res.data.headimg)+'" onerror=this.src="{:img('public/static/img/default_img/head.png')}" />'
+'</div>'
+'<div class="title-content">'
+'<div class="member-con-first">'
+'<h3 class="nickname" title="'+res.data.nickname+'">'+res.data.nickname+'</h3>'
+'</div>'
+'<div class="member-con-second">';
if(res.data.mobile){
html += '<p class="text-color-gray"><span class="member-mobile">'+res.data.mobile+'</span></p>'
}else{
html += '<p class="text-color-gray"><span class="member-mobile">'+'--'+'</span></p>'
}
html+= '</div>'
+'</div>'
+'</div>'
+'</div>';
// memberDetail(res.data);
$('.layui-btn2').parents('.layui-form-item').next('.member-select').html(html);
$('.layui-btn2').parents('.layui-form-item').next('.member-select').addClass('member-select-add border-color');
layer.close(add_attr_index2);
} else {
layer.msg(res.message);
}
}
});
// memberDetail(res.data);
// layer.close(add_attr_index2);
}
});
});
//展示已知数据
table = new Table({
elem: '#member_list',
url: ns.url("fenxiao://shop/fenxiao/getmemberlist"),
cols: [
[{
width: "12%",
title: '会员选择',
unresize: 'false',
templet: function(data) {
var html = '';
if(data.member_id == Number(add_attr_radioState2)){
html += `
<div>
<input type="radio" name="layTableRadioc" checked = true value="${data.member_id}" data-index="${data.nickname}" lay-type="layTableRadio" lay-filter="laymemberid">
</div>
`;
}else{
html += `
<div>
<input type="radio" name="layTableRadioc" value="${data.member_id}" data-index="${data.nickname}" lay-type="layTableRadio" lay-filter="laymemberid">
</div>
`;
}
return html;
}
},{
title: '分销商名称',
width: '50%',
unresize: 'false',
templet: function(data) {
var html = '';
html += `
<div>
<img style="width:40px; height:40px; margin-right:20px;" layer-src src="${ns.img(data.headimg)}" onerror="this.src = '{:img('public/static/img/default_img/head.png')}' "><span>${data.nickname}</span>
</div>
`;
return html;
}
}, {
field: 'balance',
title: '余额',
unresize: 'false',
width: '15%',
},{
field: 'point',
title: '积分',
unresize: 'false',
width: '15%',
},
]
],
});
/**
* 搜索功能
*/
form.on('submit(search)', function (data) {
table.reload({
page: {
curr: 1
},
where: data.field
});
});
$(document).keydown(function (event) {
if (event.keyCode == 13) {
$(".member-search").trigger("click");
}
});
}
</script>

View File

@@ -0,0 +1,269 @@
<style>
.layui-layout-admin .layui-form-item .layui-input-inline {
background-color: #fff;
}
</style>
<div class="screen layui-collapse" lay-filter="">
<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="nickname" placeholder="请输入申请人昵称" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">手机号:</label>
<div class="layui-input-inline">
<input type="text" name="mobile" placeholder="请输入申请人手机号" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">申请等级:</label>
<div class="layui-input-inline">
<select name="level_id" lay-filter="level_id">
<option value="">全部</option>
{volist name="$level_list" id="level"}
<option value="{$level.level_id}">{$level.level_name}</option>
{/volist}
</select>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">注册时间:</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="rg_start_time" id="rg_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="rg_end_time" id="rg_end_time" autocomplete="off" placeholder="结束时间" >
<i class=" iconrili iconfont calendar"></i>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">申请时间:</label>
<!-- <div class="layui-input-inline">
<input type="text" class="layui-input" name="expire_time" id="expire_time" autocomplete="off" >
</div> -->
<div class="layui-input-inline">
<input type="text" class="layui-input" name="create_start_time" id="create_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="create_end_time" id="create_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="status">
<div class="layui-tab-content">
<!-- 列表 -->
<table id="fenxiao_list" lay-filter="fenxiao_list"></table>
</div>
</div>
<!-- 用户信息 -->
<script type="text/html" id="member_info">
<div class='table-title'>
<div class='title-pic'>
<img layer-src src="{{ns.img(d.headimg)}}" onerror="this.src = '{:img('public/static/img/default_img/head.png')}' ">
</div>
<div class='title-content'>
<p class="layui-elip">{{d.nickname}}</p>
<p class="layui-elip">{{d.mobile}}</p>
</div>
</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="pass">审核通过</a>
<a class="layui-btn" lay-event="refuse">审核拒绝</a>
{{# } }}
</div>
</script>
<script>
layui.use(['form', 'laydate', 'element'], function() {
var table,
form = layui.form,
element = layui.element,
laydate = layui.laydate;
var repeat_flag = false;
form.render();
//渲染时间
laydate.render({
elem: '#create_start_time',
type: 'datetime'
});
laydate.render({
elem: '#create_end_time',
type: 'datetime'
});
//渲染时间
laydate.render({
elem: '#rg_start_time',
type: 'datetime'
});
laydate.render({
elem: '#rg_end_time',
type: 'datetime'
});
//监听Tab切换
element.on('tab(status)', function(data) {
var status = $(this).attr("lay-id");
table.reload( {
page: {
curr: 1
},
where: {
'status': status
}
});
});
table = new Table({
elem: '#fenxiao_list',
url: ns.url("fenxiao://shop/fenxiao/apply"),
cols: [
[{
field: 'member_name',
title: '会员信息',
unresize: 'false',
templet:'#member_info'
},{
field: 'fenxiao_name',
title: '申请分销商名称',
unresize: 'false'
}, {
field: 'level_name',
title: '申请分销等级',
unresize: 'false',
}, {
field: 'child',
title: '会员消费(次数/金额)',
unresize: 'false',
templet: function(data) {
return data.order_complete_num+' / '+data.order_complete_money;
}
}, {
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': //查看
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("fenxiao://shop/fenxiao/applypass"),
data: {apply_id:data.apply_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.confirm('确定要拒绝吗?', function (index) {
if (repeat_flag) return;
repeat_flag = true;
layer.close(index);
$.ajax({
url: ns.url("fenxiao://shop/fenxiao/applyrefuse"),
data: {apply_id:data.apply_id},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
if (res.code == 0) {
table.reload();
}
}
});
});
break;
}
});
});
</script>

View File

@@ -0,0 +1,243 @@
<style>
.screen {
margin-top: 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">
<input type="text" id="fenxiao_name" name="fenxiao_name" placeholder="请输入分销商名称" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">分销等级:</label>
<div class="layui-input-inline">
<select name="level_id" lay-filter="level_id">
<option value="">全部</option>
{volist name="$level_list" id="level"}
<option value="{$level.level_id}">{$level.level_name}</option>
{/volist}
</select>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">分销商状态:</label>
<div class="layui-input-inline">
<select name="status" lay-filter="status">
<option value="">全部</option>
<option value="1">正常</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_time" id="start_time" autocomplete="off" placeholder="开始时间" readonly>
<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="结束时间" readonly>
<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>
<input type="hidden" name="parent_fenxiao_id" id="" {if $parent_info}value="{$parent_info.fenxiao_id }"{/if}/>
<!-- 列表 -->
<table id="fenxiao_list" lay-filter="fenxiao_list"></table>
<input type="hidden" value="" id="param" />
<!-- 状态 -->
<script type="text/html" id="status">
{{# if(d.status == 1){ }}
<span style="color: green;">正常</span>
{{# }else if(d.status == -1){ }}
<span style="color: gray;">冻结</span>
{{# } }}
</script>
<!-- 工具栏操作 -->
<script type="text/html" id="operation">
{{# if(d.fenxiao_id != parent_fenxiao_id){ }}
<div class="table-btn">
<a class="layui-btn" lay-event="confirm">变更</a>
</div>
{{# } }}
{{# if(d.fenxiao_id == parent_fenxiao_id){ }}
<div class="table-btn">
<a class="layui-btn red-color" lay-event="cancelconfirm">取消</a>
</div>
{{# } }}
</script>
<script>
var change_end_func = '{$change_end_func}';
var repeat_flag = false;
var parent_fenxiao_id = $("input[name='parent_fenxiao_id']").val();
layui.use(['form', 'laydate'], function() {
var table,
form = layui.form,
laydate = layui.laydate;
form.render();
//渲染时间
laydate.render({
elem: '#start_time',
type: 'datetime'
});
laydate.render({
elem: '#end_time',
type: 'datetime'
});
table = new Table({
elem: '#fenxiao_list',
url: ns.url("fenxiao://shop/fenxiao/change"),
where:{
member_id : "{$member_id}"
},
cols: [
[{
field: 'fenxiao_name',
title: '分销商名称',
unresize: 'false',
width: '30%'
}
, {
field: 'level_name',
title: '分销等级',
unresize: 'false',
width: '20%'
}, {
field: 'status',
title: '当前状态',
templet: '#status',
unresize: 'false',
width: '10%'
}, {
field: 'create_time',
title: '添加时间',
unresize: 'false',
width: '15%',
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 'confirm': //确认更改上下级关系
layer.confirm('确定要变更该分销商为上级分销商吗?', function (index) {
if (repeat_flag) return;
repeat_flag = true;
layer.close(index);
$.ajax({
url: ns.url("fenxiao://shop/fenxiao/confirmChange"),
data: {
parent:data.fenxiao_id,
member_id:"{$member_id}",
type:1
},
dataType: 'JSON',
type: 'POST',
async: false,
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
if (res.code == 0) {
$("#param").val(1);
if(typeof parent[change_end_func] == 'function'){
parent[change_end_func]();
}
}
}
});
});
break;
case 'cancelconfirm': //确认更改上下级关系
layer.confirm('确定要取消上级分销商吗?', function (index) {
if (repeat_flag) return;
repeat_flag = true;
layer.close(index);
$.ajax({
url: ns.url("fenxiao://shop/fenxiao/confirmChange"),
data: {
parent:data.fenxiao_id,
member_id:"{$member_id}",
type:2
},
dataType: 'JSON',
type: 'POST',
async: false,
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
if (res.code == 0) {
$("#param").val(1);
if(typeof parent[change_end_func] == 'function'){
parent[change_end_func]();
}
}
}
});
});
break;
}
});
});
function fun(callback) {
var param = $("#param").val();
callback(param);
}
</script>

View File

@@ -0,0 +1,130 @@
<!-- 列表 -->
<table id="level_list" lay-filter="level_list"></table>
<input type="hidden" value="" id="param" />
<!-- 工具栏操作 -->
<script type="text/html" id="operation">
<div class="table-btn">
<a class="layui-btn" lay-event="confirm">变更</a>
</div>
</script>
<script>
var change_end_func = '{$change_end_func}';
var repeat_flag = false;
layui.use(['form'], function() {
var table, form = layui.form;
form.render();
table = new Table({
elem: '#level_list',
url: ns.url("fenxiao://shop/fenxiao/changelevel"),
where:{
fenxiao_id : "{$fenxiao_id}"
},
cols: [
[{
title: '等级',
unresize: 'false',
width: '20%',
templet: function (data) {
var level = new Array();
level[0] = '默认等级';
level[1] = '一级';
level[2] = '二级';
level[3] = '三级';
level[4] = '四级';
level[5] = '五级';
level[6] = '六级';
level[7] = '七级';
level[8] = '八级';
level[9] = '九级';
level[10] = '十级';
return level[data.level_num] != undefined ? level[data.level_num] : '';
}
}, {
field: 'level_name',
title: '等级名称',
unresize: 'false',
width: '20%',
}, {
field: 'one_rate',
title: '一级佣金比例',
unresize: 'false',
width: '20%',
templet: function(data) {
return data.one_rate + '%';
},
hide: {if $basics_info.level >= 1} false {else /} true {/if}
}, {
field: 'two_rate',
title: '二级佣金比例',
unresize: 'false',
width: '20%',
templet: function(data) {
return data.two_rate + '%';
},
hide: {if $basics_info.level >= 2} false {else /} true {/if}
},{
field:'three_rate',
title: '三级佣金比例',
unresize: 'false',
width: '20%',
templet: function(data) {
return data.three_rate + '%';
},
hide: {if $basics_info.level >= 3} false {else /} true {/if}
}, {
title: '操作',
toolbar: '#operation',
unresize: 'false',
align:'right'
}]
]
});
/**
* 监听工具栏操作
*/
table.tool(function(obj) {
var data = obj.data,
event = obj.event;
switch (event) {
case 'confirm': //确认更改上下级关系
layer.confirm('确定要变更为该等级吗?', function (index) {
if (repeat_flag) return;
repeat_flag = true;
layer.close(index);
$.ajax({
url: ns.url("fenxiao://shop/fenxiao/confirmChangeLevel"),
data: {
level_id:data.level_id,
member_id:"{$member_id}"
},
dataType: 'JSON',
type: 'POST',
async: false,
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
if (res.code == 0) {
$("#param").val(1);
if(typeof parent[change_end_func] == 'function'){
parent[change_end_func]();
}
}
}
});
});
break;
}
});
});
function fun(callback) {
var param = $("#param").val();
callback(param);
}
</script>

View File

@@ -0,0 +1,126 @@
<style>
.layui-layout-admin .table-tab .layui-tab-title{margin-bottom: 15px;}
.calendar{line-height: 34px;text-align: center;}
</style>
<!-- 筛选面板 -->
<div class="single-filter-box" style="margin-top: 15px !important;">
<div class="layui-form">
<div class="layui-inline">
<div class="layui-input-inline">
<input type="text" class="layui-input" name="start_time" id="start_time_account" autocomplete="off" placeholder="开始时间" readonly>
<i class=" iconrili iconfont calendar"></i>
</div>
<div class="layui-input-inline end-time">
<input type="text" class="layui-input" name="end_time" id="end_time_account" placeholder="结束时间" autocomplete="off" readonly>
<i class=" iconrili iconfont calendar"></i>
</div>
<input id="fenxiao_id" value="{$fenxiao_id}" type="hidden" />
<button class="layui-btn layui-btn-primary" lay-submit lay-filter="search_account">搜索</button>
</div>
</div>
</div>
<div class="layui-tab table-tab" lay-filter="status">
<ul class="layui-tab-title">
<li class="layui-this" lay-id="">全部</li>
<li lay-id="1">收入</li>
<li lay-id="2">支出</li>
</ul>
<div class="layui-tab-content">
<!-- 列表 -->
<table id="renewal_list" lay-filter="renewal_list"></table>
</div>
</div>
<script>
var fx_account_table, form, laytpl, laydate, element, fenxiao_id = $("#fenxiao_id").val(), start_time, end_time;
layui.use(['form', 'laytpl', 'laydate'], function() {
form = layui.form;
laytpl = layui.laytpl;
laydate = layui.laydate;
element = layui.element;
form.render();
//监听Tab切换
element.on('tab(status)', function(data) {
var status = $(this).attr("lay-id");
fx_account_table.reload( {
page: {
curr: 1
},
where: {
'status': status
}
});
});
//开始时间
laydate.render({
elem: '#start_time_account', //指定元素
});
//结束时间
laydate.render({
elem: '#end_time_account', //指定元素
});
/**
* 搜索功能
*/
form.on('submit(search_account)', function (data) {
if (start_time) {
data.field.start_time = start_time;
}
if (end_time) {
data.field.end_time = end_time;
}
fx_account_table.reload({
page: {
curr: 1
},
where: data.field
});
});
/**
* 加载表格
*/
fx_account_table = new Table({
elem: '#renewal_list',
url: ns.url("fenxiao://shop/fenxiao/account"),
where: {'fenxiao_id': fenxiao_id},
cols: [
[{
field: 'account_no',
title: '账单编号',
unresize: 'false',
width:'25%',
}, {
field: 'money',
title: '金额(元)',
unresize: 'false',
width:'25%',
}, {
field: 'type_name',
title: '金额类型',
unresize: 'false',
width:'25%',
}, {
field: 'create_time',
title: '创建时间',
unresize: 'false',
width:'25%',
templet: function(data) {
if(data.create_time == 0){
return '--';
}else{
return ns.time_to_date(data.create_time)
}
},
}]
]
});
});
</script>

View File

@@ -0,0 +1,177 @@
<link rel="stylesheet" type="text/css" href="__STATIC__/ext/layui/extend/cascader/cascader.css"/>
<style>
.layui-layer-page .layui-layer-content {overflow-y: auto!important;}
.layui-layout-admin .layui-body .body-content {background: none;padding: 0}
.info-wrap {display: flex}
.info-wrap .layui-card {flex: 1;margin-top: 0}
.info-wrap .layui-card:first-child {margin-right: 15px}
.member-info {display: flex}
.member-info .headimg {margin-right: 15px;width: 70px;height: 70px;display: flex;align-items: center;justify-content: center;overflow: hidden}
.member-info .headimg img {max-width: 100%;height: auto}
.member-info .info {flex: 1;width: 0;display: flex;flex-wrap: wrap}
.member-info .info .data-item {width: 50%;padding-right: 10px;box-sizing: border-box;line-height: 30px}
.member-info .data-item .layui-icon {cursor: pointer}
.layui-tab-content {padding: 0}
.card-brief .layui-card-header{padding-top: 5px !important;}
.card-common .layui-card-body{padding-top: 10px;}
</style>
<div class="info-wrap">
<div class="layui-card card-common card-brief head top">
<div class="layui-card-header">
<span class="card-title">基础信息</span>
</div>
<div class="layui-card-body">
<div class="member-info">
<div class="info">
<div class="data-item">
<span>分销商编号:</span>
<span>{$info.fenxiao_no}</span>
</div>
<div class="data-item">
<span>分销商:</span>
<span>{$info.fenxiao_name}</span>
</div>
<div class="data-item">
<span>会员账号:</span>
<span><a href="{:href_url('shop/member/editmember?member_id=')}{$info.member_id}" target="_blank" class="text-color">{$info.username}</a></span>
</div>
<div class="data-item">
<span>上级分销商:</span>
<span>{if $info.parent_name == ''} 无 {else /}{$info.parent_name} {/if}</span>
</div>
<div class="data-item">
<span>分销商等级:</span>
<span>{$level.level_name}</span>
</div>
<div class="data-item">
<span>当前佣金:</span>
<span>{$info.account} 元</span>
</div>
<div class="data-item">
<span>已提现佣金:</span>
<span>{$info.account_withdraw} 元</span>
</div>
<div class="data-item">
<span>提现中佣金:</span>
<span>{$info.account_withdraw_apply} 元</span>
</div>
<div class="data-item">
<span>当前状态:</span>
<span>{$status[$info['status']]}</span>
</div>
</div>
</div>
</div>
</div>
<div class="layui-card card-common card-brief head top">
<div class="layui-card-header">
<span class="card-title">账户信息</span>
</div>
<div class="layui-card-body">
<div class="member-info">
<div class="info">
<div class="data-item">
<span>一级分销订单总数:</span>
<span id="member_balance">{$info.one_fenxiao_order_num}</span>
</div>
<div class="data-item">
<span>一级分销订单总额:</span>
<span>{$info.one_fenxiao_total_order} 元</span>
</div>
<div class="data-item">
<span>下线总人数:</span>
<span>{$info.team_num.num} 人</span>
</div>
<div class="data-item">
<span>下线总分销商:</span>
<span>{$info.team_num.fenxiao_num} 人</span>
</div>
{if $info.team_num.level >= 1}
<div class="data-item">
<span>一级下线人数:</span>
<span>{$info.team_num.num_1} 人</span>
</div>
<div class="data-item">
<span>一级下线分销商:</span>
<span>{$info.team_num.fenxiao_num_1} 人</span>
</div>
{/if}
{if $info.team_num.level >= 2}
<div class="data-item">
<span>二级下线人数:</span>
<span>{$info.team_num.num_2} 人</span>
</div>
<div class="data-item">
<span>二级下线分销商:</span>
<span>{$info.team_num.fenxiao_num_2} 人</span>
</div>
{/if}
{if $info.team_num.level >= 3}
<div class="data-item">
<span>三级下线人数:</span>
<span>{$info.team_num.num_3} 人</span>
</div>
<div class="data-item">
<span>三级下线分销商:</span>
<span>{$info.team_num.fenxiao_num_3} 人</span>
</div>
{/if}
</div>
</div>
</div>
</div>
</div>
<div class="layui-card card-common card-brief head top">
<div class="layui-card-header">
<span class="card-title">分销商信息</span>
</div>
<div class="layui-card-body layui-tab layui-tab-brief" lay-filter="fenxiao_tab">
<ul class="layui-tab-title">
<li lay-id="fenxiao_team" class="layui-this" >分销商团队</li>
<li lay-id="fenxiao_account">账户流水记录</li>
<li lay-id="fenxiao_order">订单管理</li>
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
{include file="fenxiao/fenxiao_team" /}
</div>
<div class="layui-tab-item">
{include file="fenxiao/fenxiao_account" /}
</div>
<div class="layui-tab-item">
{include file="fenxiao/order_lists" /}
</div>
</div>
</div>
</div>
<script>
layui.use(['element', 'laytpl', 'form', 'laydate'], function () {
var element = layui.element;
var tab = 'fenxiao_team';
var hash_arr = getHashArr();
$.each(hash_arr, function (index, itemobj) {
var item_arr = itemobj.split("=");
if (item_arr.length == 2) {
if (item_arr[0].indexOf("tab") != "-1") {
tab = item_arr[1];
}
}
});
element.tabChange('fenxiao_tab', tab);
element.on('tab(fenxiao_tab)', function () {
localStorage.setItem('formSubmit','search'); // 表单搜索标识,防止页面重新加载
var hash = location.hash;
if (hash.indexOf('tab=') != -1) {
location.hash = hash.replace('tab=' + tab, '');
}
});
});
</script>

View File

@@ -0,0 +1,124 @@
<style>
.layui-layout-admin .table-tab .layui-tab-title{margin-bottom: 15px;}
</style>
<div class="layui-tab table-tab" lay-filter="team_list_tab" style="margin-top: 15px !important;">
<ul class="layui-tab-title">
<li class="layui-this" data-status="1" data-type="live_status">一级</li>
{if $fenxiao_level_num > 1}<li data-status="2" data-type="live_status">二级</li>{/if}
{if $fenxiao_level_num > 2}<li data-status="3" data-type="live_status">三级</li>{/if}
</ul>
<div class="layui-tab-content">
<table id="team_list" lay-filter="team_list"></table>
</div>
</div>
<!-- 用户信息 -->
<script type="text/html" id="userdetail">
<div class='table-title'>
<div class='title-pic'>
<img layer-src src="{{ns.img(d.headimg)}}" onerror="this.src = '{:img('public/static/img/default_img/head.png')}' ">
</div>
<div class='title-content'>
<p class="layui-elip">{{d.nickname}}</p>
</div>
</div>
</script>
<!-- 工具栏操作 -->
<script type="text/html" id="action">
<div class="table-btn">
<a class="layui-btn" lay-event="detail">查看</a>
</div>
</script>
<script>
var form,fx_team_table,element = false;
layui.use(['form', 'element'], function() {
form = layui.form;
element = layui.element;
form.render();
fx_team_table = new Table({
elem: '#team_list',
url: ns.url("fenxiao://shop/fenxiao/team"),
where:{fenxiao_id:"{$fenxiao_id}"},
cols: [
[ {
field: 'userdetail',
title: '账户信息',
width: '18%',
unresize: 'false',
templet: '#userdetail'
}, {
field: 'is_fenxiao',
title: '是否是分销商',
width: '8%',
unresize: 'false',
templet: function (data) {
return data.is_fenxiao ? '是' : '否';
}
}, {
field: 'order_money',
title: '消费额',
width: '8%',
unresize: 'false',
}, {
field: 'order_num',
title: '消费量',
width: '8%',
unresize: 'false',
}, {
field: 'order_complete_money',
title: '消费额(已完成)',
width: '8%',
unresize: 'false',
}, {
field: 'order_complete_num',
title: '消费量(已完成)',
width: '8%',
unresize: 'false',
}, {
field: 'reg-login',
title: '成为会员时间',
width: '18%',
unresize: 'false',
templet: function (data) {
return ns.time_to_date(data.reg_time);
}
}, {
title: '操作',
unresize: 'false',
toolbar: '#action',
align:'right'
}
]
]
});
/**
* 监听工具栏操作
*/
fx_team_table.tool(function(obj) {
var data = obj.data;
switch (obj.event) {
case 'detail': //编辑
location.hash = ns.hash("shop/member/editmember?member_id=" + data.member_id);
break;
}
});
element.on('tab(team_list_tab)', function () {
fx_team_table.reload({
page: {
curr: 1
},
where: {
'level': this.getAttribute('data-status')
}
});
});
});
</script>

View File

@@ -0,0 +1,462 @@
<style>
/* 总样式 */
.summary-wrap { display: flex}
.body-content {background: none !important;padding: 0 !important;margin: 0 !important;}
.summary-wrap .common-wrap{margin:15px 15px 0 15px; flex: 1;padding: 15px; background: #fff;position: relative}
/* 佣金概览 */
.commission-wrap{height: 120px;background: #fff;position: relative;margin:25px 15px 0 15px;padding: 15px}
.commission-wrap .commission-overview{display: flex;}
.commission-wrap .li{width: 25%;height: 120px;text-align: left;display: flex;flex-direction: column;padding: 0 15px 10px 15px}
.commission-wrap .li .title{display: flex;align-items: center;font-size: 14px;margin-top: 25px;color: #909399;}
.commission-wrap .li .money{margin-top: 10px;font-size: 26px;color: #303133;}
/* 分销商概览 */
.summary-wrap .fenxiao-wrap{height: 120px;width: 40%;background: #fff;position: relative; margin:15px 0px 0 15px;padding: 15px}
.summary-wrap .fenxiao-wrap .member-overview{display: flex;}
.summary-wrap .fenxiao-wrap .li{width: 50%;height: 120px;text-align: left;display: flex;flex-direction: column;padding: 0 15px 10px 15px}
.summary-wrap .fenxiao-wrap .li .title{display: flex;align-items: center;font-size: 14px;margin-top: 25px;color: #909399;}
.summary-wrap .fenxiao-wrap .li .num{margin-top: 10px;font-size: 26px;color: #303133;}
/* 分销订单金额概览 */
.summary-wrap .order-wrap{height: 120px;width: 40%;background: #fff;position: relative; flex:1;margin:15px 15px 0 15px;padding: 15px}
.summary-wrap .order-wrap .order-overview{display: flex;}
.summary-wrap .order-wrap .li{width: 33%;height: 120px;text-align: left;display: flex;flex-direction: column;padding: 0 15px 10px 15px}
.summary-wrap .order-wrap .li .title{display: flex;align-items: center;font-size: 14px;margin-top: 25px;color: #909399;}
.summary-wrap .order-wrap .li .num{margin-top: 10px;font-size: 26px;color: #303133;}
.summary-wrap .order-wrap .li .money{margin-top: 10px;font-size: 26px;color: #303133;}
/* 分销商人数报表 */
.summary-wrap .common-wrap:nth-child(1){margin-right: 0}
/* 分销订单金额报表 */
.trend-wrap {margin:15px 15px 0 15px;padding: 15px; background: #fff}
/* 分销商等级比例 */
.summary-wrap .common-wrap .body.level{position: absolute;top: 50%;margin-top: -75px !important;width: calc(100% - 30px)}
</style>
<div class="commission-wrap common-wrap">
<div class="head">
<span class="title">佣金概览</span>
</div>
<div class="commission-overview">
<div class="li">
<div class="title prompt-block">
可提现佣金(元)
<div class="prompt">
<i class="iconfont iconwenhao1"></i>
<div class="prompt-box">
<div class="prompt-con">所有分销订单已完成,佣金已结算,可以提现的佣金(不包含已提现的佣金)</div>
</div>
</div>
</div>
<p class="money" id="fenxiao_account">0.00</p>
</div>
<div class="li">
<div class="title prompt-block">
提现待审核(元)
<div class="prompt">
<i class="iconfont iconwenhao1"></i>
<div class="prompt-box">
<div class="prompt-con">已申请提现等待管理审核的佣金</div>
</div>
</div>
</div>
<p class="money" id="account_withdraw_apply">0.00</p>
</div>
<div class="li">
<div class="title prompt-block">
提现佣金(元)
<div class="prompt">
<i class="iconfont iconwenhao1"></i>
<div class="prompt-box">
<div class="prompt-con">所有已经提现成功的佣金总和</div>
</div>
</div>
</div>
<p class="money" id="account_withdraw">0.00</p>
</div>
<div class="li">
<div class="title prompt-block">
进行中佣金(元)
<div class="prompt">
<i class="iconfont iconwenhao1"></i>
<div class="prompt-box">
<div class="prompt-con">指所有分销订单待结算佣金的和</div>
</div>
</div>
</div>
<p class="money" id="commission_money">0.00</p>
</div>
</div>
</div>
<div class="summary-wrap">
<div class="fenxiao-wrap common-wrap">
<div class="head">
<span class="title">分销商概览</span>
</div>
<div class="member-overview">
<div class="li">
<div class="title">待审核(人)</div>
<p class="num" id="fenxiao_apply_num">0</p>
</div>
<div class="li">
<div class="title">分销商(人)</div>
<p class="num" id="fenxiao_num">0</p>
</div>
</div>
</div>
<div class="order-wrap common-wrap">
<div class="head">
<span class="title">分销概览</span>
</div>
<div class="order-overview">
<div class="li">
<div class="title prompt-block">
分销订单总额(元)
<div class="prompt">
<i class="iconfont iconwenhao1"></i>
<div class="prompt-box">
<div class="prompt-con">指所有分销订单实付金额的和 (包含退款)</div>
</div>
</div>
</div>
<p class="num" id="real_goods_money">0.00</p>
</div>
<div class="li">
<div class="title prompt-block">
分销佣金总额(元)
<div class="prompt">
<i class="iconfont iconwenhao1"></i>
<div class="prompt-box">
<div class="prompt-con">指所有分销订单所得佣金的和</div>
</div>
</div>
</div>
<p class="num" id="commission">0.00</p>
</div>
<div class="li">
<div class="title">分销商品数(个)</div>
<p class="money" id="fenxiao_goods_num">0</p>
</div>
</div>
</div>
</div>
<div class="summary-wrap">
<div class="common-wrap">
<div class="head">
<div class="title">新增分销商数(人)</div>
</div>
<div class="body">
<div id="fenxiao_member" style="width: 100%; height: 300px;"></div>
</div>
</div>
<div class="common-wrap">
<div class="head">
<div class="title">分销商等级比例</div>
</div>
<div class="body level">
<div id="fenxiao_level" style="width: 100%; height: 150px;"></div>
</div>
</div>
</div>
<div class="trend-wrap common-wrap">
<div class="head">
<div class="title">分销订单金额(元)</div>
</div>
<div class="body">
<div id="order_money" style="width: 100%; height: 300px;"></div>
</div>
</div>
<script src="SHOP_JS/echarts.min.js"></script>
<script src="SHOP_JS/china.js"></script>
<script>
getFenxiaoStat()
function getFenxiaoStat(){
$.ajax({
type: 'post',
dataType: 'json',
url: ns.url("fenxiao://shop/fenxiao/stat"),
success:function(res){
$('#fenxiao_account').html(res.fenxiao_account);
$('#account_withdraw').html(res.account_data.account_withdraw);
$('#account_withdraw_apply').html(res.account_data.account_withdraw_apply);
$('#commission_money').html(res.commission_money);
$('#fenxiao_apply_num').html(res.fenxiao_apply_num);
$('#fenxiao_goods_num').html(res.fenxiao_goods_num);
$('#fenxiao_num').html(res.fenxiao_num);
$('#commission').html(res.shop_commission.commission);
$('#real_goods_money').html(res.shop_commission.real_goods_money);
}
})
}
var baseColor = getComputedStyle(document.documentElement).getPropertyValue('--base-color');
function getDay(day){
var today = new Date();
var targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day;
today.setTime(targetday_milliseconds); //注意,这行是关键代码
var tYear = today.getFullYear();
var tMonth = today.getMonth();
var tDate = today.getDate();
tMonth = doHandleMonth(tMonth + 1);
tDate = doHandleMonth(tDate);
return tMonth + "-" + tDate;
}
function doHandleMonth(month){
var m = month;
if(month.toString().length == 1){
m = "0" + month;
}
return m;
}
getFenxiaoOrder();
getFenxiaoLevel();
getFenixaoMmeber();
//图形统计
function getFenxiaoOrder() {
var dateObj = new Date(Date.now() - 1296000000);
var date = dateObj.getFullYear() + '-' + (dateObj.getMonth() + 1) + '-' + (dateObj.getDate() + 1);
$.ajax({
type:'post',
dataType:'json',
url:ns.url("shop/stat/getStatData"),
data : {
start_time: new Date(date).getTime() / 1000
},
success:function(res){
dealWithChart(res.fenxiao_order_total_money);
}
})
}
function getFenixaoMmeber(){
$.ajax({
type:'post',
dataType:'json',
url:ns.url("shop/stat/getStatData"),
success:function(res){
dealWithChartTo(res.add_fenxiao_member_count);
}
})
}
function dealWithChart(ten_day_json){
if(!$('#order_money').length) return;
var data = [getDay(-14), getDay(-13), getDay(-12), getDay(-11), getDay(-10), getDay(-9), getDay(-8), getDay(-7), getDay(-6), getDay(-5), getDay(-4), getDay(-3), getDay(-2), getDay(-1), getDay(0)];
// 基于准备好的dom初始化echarts实例
var baseColor = getComputedStyle(document.documentElement).getPropertyValue('--base-color');
// 指定图表的配置项和数据
// 基于准备好的dom初始化echarts实例
var moneyChart = echarts.init(document.getElementById('order_money'));
// 指定图表的配置项和数据
moneyOption = {
xAxis: {
type: 'category',
data: data
},
yAxis: {
type: 'value'
},
grid: {
top: '8%',
bottom: '9%',
left: '5%',
right: '4%'
},
tooltip: {
trigger: 'axis',
showContent: true,
backgroundColor: 'rgba(0, 0, 0, 0.5)',
padding: [5, 10],
textStyle: {
color: '#fff',
lineHeight: 30,
},
formatter: function(params, ticket, callback) {
return "日期:" + params[0].axisValue + '<br />' + params[0].seriesName + "" + params[0].value + "元";
},
},
series: [{
name: ['订单金额'],
data: ten_day_json,
type: 'line',
smooth: true,
itemStyle: {
color: baseColor
},
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
offset: 0,
color: baseColor
}, {
offset: 1,
color: '#fff'
}])
}
}]
};
// 使用刚指定的配置项和数据显示图表。
moneyChart.setOption(moneyOption);
}
function getFenxiaoLevel(){
$.ajax({
dataType: 'JSON',
type: 'POST',
url: ns.url("fenxiao://shop/level/lists"),
data: {
page_size: 0,
},
success: function(res) {
var level = res.data.list;
if(!$('#fenxiao_level').length) return;
var echart = echarts.init(document.getElementById('fenxiao_level'));
// 指定图表的配置项和数据
var option = {
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b}: {c} ({d}%)'
},
legend: {
orient: 'vertical',
left: '50%',
top: '10%',
align: 'auto',
data: level.map(function (item) {
return {
name: item.level_name,
icon: 'circle',
}
})
},
color: level.map(function (item) {
return getRandomColor();
}),
series: [{
width: 150,
height: 150,
top: '0',
left: '10%',
name: '',
type: 'pie',
radius: ['50%', '70%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center'
},
emphasis: {
label: {
show: true,
fontSize: '12',
color: baseColor
}
},
labelLine: {
show: false
},
data: level.map(function (item) {
return {
value: item.fenxiao_num,
name: item.level_name,
tooltip: {
trigger: 'item',
backgroundColor: 'rgba(255, 255, 255, 0.7)',
borderColor: '#999',
borderWidth: 1,
padding: 10,
textStyle: {
fontSize: 12,
color: '#333'
}
}
}
})
}]
};
// 使用刚指定的配置项和数据显示图表。
echart.setOption(option);
}
})
}
function getRandomColor(){
return '#' + (function(color){
return (color += '0123456789abcdef'[Math.floor(Math.random()*16)])
&& (color.length == 6) ? color : arguments.callee(color);
})('');
}
function dealWithChartTo(ten_day_json){
if(!$('#fenxiao_member').length) return;
var data = [getDay(-6), getDay(-5), getDay(-4), getDay(-3), getDay(-2), getDay(-1), getDay(0)];
// 基于准备好的dom初始化echarts实例
var baseColor = getComputedStyle(document.documentElement).getPropertyValue('--base-color');
// 指定图表的配置项和数据
// 基于准备好的dom初始化echarts实例
var moneyChart = echarts.init(document.getElementById('fenxiao_member'));
// 指定图表的配置项和数据
var moneyOption = {
xAxis: {
type: 'category',
data: data
},
yAxis: {
type: 'value'
},
grid: {
top: '8%',
bottom: '9%',
left: '8%',
right: '4%'
},
tooltip: {
trigger: 'axis',
showContent: true,
backgroundColor: 'rgba(0, 0, 0, 0.5)',
padding: [5, 10],
textStyle: {
color: '#fff',
lineHeight: 30,
},
formatter: function(params, ticket, callback) {
return "日期:" + params[0].axisValue + '<br />' + params[0].seriesName + "" + params[0].value + "人";
},
},
series: [{
name: ['新增分销商数'],
data: ten_day_json,
type: 'line',
smooth: true,
itemStyle: {
color: baseColor
},
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
offset: 0,
color: baseColor
}, {
offset: 1,
color: '#fff'
}])
}
}]
};
// 使用刚指定的配置项和数据显示图表。
moneyChart.setOption(moneyOption);
}
</script>

View File

@@ -0,0 +1,349 @@
<style>
.screen{margin-top: 15px;}
.goods-info{justify-content: left !important;float: unset !important;}
.goods-info-name{max-width: 80px;overflow: hidden;cursor: pointer;}
.change-name{cursor: pointer;}
.layui-layout-admin .layui-form-item .layui-input-inline{background-color: #fff;}
.layui-layout-admin .screen{margin-bottom: 15px;}
.layui-layout-admin .single-filter-box{padding-bottom: 0;}
.time-lineheight {line-height: 1.3}
</style>
<div class="single-filter-box">
<button class="layui-btn" onclick="clickAdd()">添加分销商</button>
</div>
<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="nickname" placeholder="请输入分销商昵称" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">分销商手机号:</label>
<div class="layui-input-inline">
<input type="text" name="mobile" placeholder="请输入分销商手机号" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">上级分销商:</label>
<div class="layui-input-inline">
<input type="text" name="parent_name" placeholder="请输入上级分销商" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<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="开始时间" readonly>
<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="结束时间" readonly>
<i class="iconrili iconfont calendar"></i>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">分销等级:</label>
<div class="layui-input-inline">
<select name="level_id" lay-filter="level_id">
<option value="">全部</option>
{volist name="$level_list" id="level"}
<option value="{$level.level_id}">{$level.level_name}</option>
{/volist}
</select>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">分销商状态:</label>
<div class="layui-input-inline">
<select name="status" lay-filter="status">
<option value="">全部</option>
<option value="1">正常</option>
<option value="-1">已冻结</option>
</select>
</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>
<!-- 列表 -->
<table id="fenxiao_list" lay-filter="fenxiao_list"></table>
<!-- 用户信息 -->
<script type="text/html" id="account">
<div class="layui-elip">当前佣金{{d.account}}</div>
<div class="layui-elip">已提现佣金{{d.account_withdraw}}</div>
</script>
<!-- 会员信息 -->
<script type="text/html" id="username">
<a href="javascript:memberDetail({{ d.member_id }});">{{ d.username }}</a>
</script>
<!-- 状态 -->
<script type="text/html" id="status">
{{# if(d.status == 1){ }}
<span style="color: green;">正常</span>
{{# }else if(d.status == -1){ }}
<span style="color: gray;">冻结</span>
{{# } }}
</script>
<!-- 上级分销商 -->
<script type="text/html" id="parent_name">
<div class="table-btn goods-info">
{{# if(d.parent_name){ }}
<span class="line-hiding goods-info-name">{{d.parent_name}}</span> &nbsp; | &nbsp; <span class="text-color change-name" onclick="change({{d.member_id}})"><i class="layui-icon text-color-gray"> </i></span>
{{# }else{ }}
<span class="line-hiding goods-info-name"></span> &nbsp; | &nbsp; <span class="text-color" onclick="change({{d.member_id}})"><i class="layui-icon text-color-gray"> </i></span>
{{# } }}
</div>
</script>
<!-- 分销等级 -->
<script type="text/html" id="level_name">
<div class="table-btn goods-info">
<span class="line-hiding goods-info-name">{{d.level_name}}</span> &nbsp; | &nbsp; <span class="text-color change-name" onclick="changeLevel({{d.member_id}},{{d.fenxiao_id}})"><i class="layui-icon text-color-gray"> </i></span>
</div>
</script>
<script type="text/html" id="memberInfo">
<div class='table-title'>
<div class='title-pic'>
<img layer-src src="{{ns.img(d.headimg)}}" onerror="this.src = '{:img('public/static/img/default_img/head.png')}' ">
</div>
<div class='title-content'>
<p class="layui-elip">{{d.nickname}}</p>
<p class="layui-elip">{{d.member_mobile}}</p>
</div>
</div>
</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="frozen">冻结</a>
<!-- <a class="layui-btn" lay-event="change">上级分销商变更</a> -->
{{# } }}
{{# if(d.status == -1){ }}
<a class="layui-btn" lay-event="unfrozen">恢复正常</a>
{{# } }}
</div>
</script>
<script>
var table,form,laydate, repeat_flag = false; //防重复标识;
layui.use(['form', 'laydate'], function() {
form = layui.form;
laydate = layui.laydate;
form.render();
//渲染时间
laydate.render({
elem: '#start_time',
type: 'datetime'
});
laydate.render({
elem: '#end_time',
type: 'datetime'
});
table = new Table({
elem: '#fenxiao_list',
url: ns.url("fenxiao://shop/fenxiao/lists"),
cols: [
[{
title: '会员信息',
unresize: 'false',
width: '15%',
templet:'#memberInfo'
}, {
field: 'fenxiao_name',
title: '分销商名称',
unresize: 'false',
width: '10%'
},{
title: '上级分销商',
unresize: 'false',
width: '15%',
templet: '#parent_name',
align:'left'
}, {
title: '分销等级',
unresize: 'false',
width: '15%',
templet: '#level_name',
align:'left'
}, {
title: '佣金账户',
width:'10%',
unresize: 'false',
templet: '#account'
}, {
title: '团队人数',
unresize: 'false',
width: '8%',
templet: function(data){
return data.team_num;
}
}, {
field: 'status',
title: '当前状态',
templet: '#status',
unresize: 'false',
width: '7%'
}, {
field: 'create_time',
title: '添加时间',
unresize: 'false',
width: '10%',
templet: function(data) {
var time = ns.time_to_date(data.create_time).split(' ');
return `<div class="time-lineheight">
<div>`+ time[0] +`</div>
<div>`+ time[1] +`</div>
</div>`;
}
}, {
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': //查看
location.hash = ns.hash('fenxiao://shop/fenxiao/detail', {'fenxiao_id': data.fenxiao_id});
break;
case 'frozen': //冻结
layer.confirm('确定要冻结该账户吗?', function (index) {
if (repeat_flag) return;
repeat_flag = true;
layer.close(index);
$.ajax({
url: ns.url("fenxiao://shop/fenxiao/frozen"),
data: {fenxiao_id: data.fenxiao_id},
dataType: 'JSON',
type: 'POST',
success: function (res) {
layer.msg(res.message);
repeat_flag = false;
if (res.code == 0) {
table.reload();
}
}
});
});
break;
case 'unfrozen': //解冻
layer.confirm('该账户确定要恢复正常吗?', function (index) {
if (repeat_flag) return;
repeat_flag = true;
layer.close(index);
$.ajax({
url: ns.url("fenxiao://shop/fenxiao/unfrozen"),
data: {fenxiao_id: data.fenxiao_id},
dataType: 'JSON',
type: 'POST',
success: function (res) {
layer.msg(res.message);
repeat_flag = false;
if (res.code == 0) {
table.reload();
}
}
});
});
break;
case 'change':
change(data.member_id);
break;
}
});
});
//改变上级分销商
function change(member_id){
var url = ns.url("fenxiao://shop/fenxiao/change", {request_mode: 'iframe',member_id:member_id,change_end_func:'changeEnd'});
layer.open({
title: "变更上级分销商",
type: 2,
area: ['1200px', '800px'],
content: url,
});
}
//改变上级分销商结束
function changeEnd() {
listenerHash(); // 刷新页面
layer.closeAll();
}
//改变等级
function changeLevel(member_id,fenxiao_id){
var url = ns.url("fenxiao://shop/fenxiao/changeLevel", {request_mode: 'iframe',member_id:member_id,fenxiao_id:fenxiao_id,change_end_func:'changeLevelEnd'});
layer.open({
title: "变更分销商等级",
type: 2,
area: ['800px', '650px'],
content: url,
});
}
//改变等级结束
function changeLevelEnd() {
listenerHash(); // 刷新页面
layer.closeAll();
}
function memberDetail(member_id){
window.open(ns.href("shop/member/editMember?member_id=" + member_id));
}
function clickAdd() {
location.hash = ns.hash('fenxiao://shop/fenxiao/add');
}
</script>

View File

@@ -0,0 +1,111 @@
<style>
.good-name {
line-height: 34px;
}
</style>
<div class="layui-form">
<div class="layui-card card-common">
<div class="layui-card-header">
<span class="card-title">商品信息</span>
</div>
<div class="layui-card-body">
<div class="layui-form-item goods-image-wrap">
<label class="layui-form-label">商品图片:</label>
<div class="layui-input-block">
<div class="js-goods-image"><img layer-src src="{:img($order_info.sku_image)}" width = "50px"/></div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">商品名称:</label>
<div class="layui-input-inline good-name">{$order_info.sku_name}</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">商品价格:</label>
<div class="layui-input-inline good-name">¥{$order_info.price}</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">购买数量:</label>
<div class="layui-input-inline good-name">{$order_info.num}</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">实际支付:</label>
<div class="layui-input-inline good-name">¥{$order_info.real_goods_money}</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">结算状态:</label>
<div class="layui-input-inline good-name">
{if $order_info.is_refund == 1}
已退款
{else /}
{if $order_info.is_settlement == 1}
已结算
{else /}
未结算
{/if}
{/if}
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">结算总佣金:</label>
<div class="layui-input-inline good-name">¥{$order_info.commission}</div>
</div>
</div>
</div>
<div class="layui-card card-common">
<div class="layui-card-header">
<span class="card-title">返佣详情</span>
</div>
<div class="layui-card-body">
<div class="layui-form-item">
<label class="layui-form-label"></label>
<div class="layui-input-block">
<table class="layui-table" id="default_rule_list" lay-skin="line" lay-size="lg">
<colgroup>
<col width="25%">
<col width="25%">
<col width="25%">
</colgroup>
<thead>
<tr>
<th>分销商等级</th>
<th>分销商</th>
<th>返佣金额</th>
</tr>
</thead>
<tbody>
<tr>
<td>一级分销商</td>
<td>{$order_info.one_fenxiao_name}</td>
<td>{$order_info.one_commission}</td>
</tr>
<tr>
<td>二级分销商</td>
<td>{$order_info.two_fenxiao_name}</td>
<td>{$order_info.two_commission}</td>
</tr>
<tr>
<td>三级分销商</td>
<td>{$order_info.three_fenxiao_name}</td>
<td>{$order_info.three_commission}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="layui-form form-wrap">
<div class="form-row">
<button class="layui-btn layui-btn-primary" onclick="backFenxiaoOrderList()">返回</button>
</div>
</div>
</div>
<script>
function backFenxiaoOrderList() {
location.hash = ns.hash("fenxiao://shop/order/lists");
}
</script>

View File

@@ -0,0 +1,222 @@
<link rel="stylesheet" href="FENXIAO_CSS/order_list.css">
<style>
.screen .layui-colla-content {border: none;background-color: #F2F3F5;}
.screen .layui-colla-content .layui-input{background-color: #fff !important;}
</style>
<div class="screen layui-collapse" lay-filter="selection_panel" style="margin-top: 15px !important;">
<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_text_type">
<option value="order_no">订单编号</option>
</select>
</div>
<div class="layui-input-inline">
<input type="text" name="search_text" autocomplete="off" class="layui-input" placeholder="" />
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">结算状态:</label>
<div class="layui-input-inline">
<select name="status">
<option value="">全部</option>
<option value="1">未结算</option>
<option value="2">已结算</option>
</select>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">下单时间:</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="start_time" placeholder="开始时间" id="start_time_order" readonly>
<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" placeholder="结束时间" id="end_time_order" readonly>
<i class=" iconrili iconfont calendar"></i>
</div>
<button class="layui-btn layui-btn-primary date-picker-btn" onclick="datePick(7, this);return false;">近7天</button>
<button class="layui-btn layui-btn-primary date-picker-btn" onclick="datePick(30, this);return false;">近30天</button>
</div>
</div>
<input id="fenxiao_id" name="fenxiao_id" value="{$fenxiao_id}" type="hidden" />
<div class="form-row">
<button class="layui-btn" lay-submit id="" lay-filter="search_order">筛选</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
</div>
</div>
<div class="layui-tab table-tab">
<div class="layui-tab-content">
<div id="order_list"></div>
</div>
</div>
<div id="order_page"></div>
<script src="FENXIAO_JS/order_list.js?time=20240827"></script>
<script>
var laypage,element, form;
// 通过hash获取页数
function getHashPage(){
var page = 1;
var hash_arr = getHashArr();
$.each(hash_arr,function(index, itemobj){
var item_arr = itemobj.split("=");
if(item_arr.length == 2){
if(item_arr[0].indexOf("page") != "-1"){
page = item_arr[1];
}
}
});
return page;
}
//从hash中获取数据
function getHashData(){
var hash_arr = getHashArr();
var form_json = {
"fenxiao_id":"",
"end_time" : "",
"search" : "",
"start_time" : "",
"page" : ""
};
if(hash_arr.length > 0){
$.each(hash_arr,function(index, itemobj){
var item_arr = itemobj.split("=");
if(item_arr.length == 2){
$.each(form_json,function(key, form_val){
if(item_arr[0].indexOf(key) != "-1"){
form_json[key] = item_arr[1];
}
})
}
})
}
form.val("order_list", form_json);
return form_json;
}
layui.use(['laypage','laydate','form', 'element'], function(){
form = layui.form;
laypage = layui.laypage;
element = layui.element;
var laydate = layui.laydate;
form.render();
//渲染时间
laydate.render({
elem: '#start_time_order'
,type: 'datetime'
,change: function(value, date, endDate){
$(".date-picker-btn").removeClass("selected");
}
});
laydate.render({
elem: '#end_time_order'
,type: 'datetime'
,change: function(value, date, endDate){
$(".date-picker-btn").removeClass("selected");
}
});
//监听筛选事件
form.on('submit(search_order)', function(data){
data.field.page = 1;
setHashOrderList(data.field);
return false;
});
getOrderList();//筛选
});
var order = new Order();
function getOrderList(param){
var url = ns.url("fenxiao://shop/fenxiao/order");
var data = {
fenxiao_id: '{$fenxiao_id}'
};
if (param != undefined) Object.assign(data, param);
$.ajax({
type : 'post',
dataType: 'json',
url :url,
data: data,
success : function(res){
if(res.code == 0){
order.setData(res.data);
$("#order_list").html(order.fetch());
laypage.render({
elem: 'order_page',
count: res.data.count,
curr: getHashPage(),
layout: ['count', 'prev', 'page', 'next'],
jump: function(obj, first){
//首次不执行
if(!first){
var hash_data = getHashData();
hash_data.page = obj.curr;
setHashOrderList(hash_data);
}
}
});
}else{
layer.msg(res.message);
}
}
});
}
function setHashOrderList(data){
localStorage.setItem('formSubmit','search'); // 表单搜索标识,防止页面重新加载
var hash = ['url=fenxiao://shop/fenxiao/detail','tab=fenxiao_order'];
for (var key in data) {
if (data[key] != '' && data[key] != 'all') {
hash.push(`${key}=${data[key]}`)
}
}
location.hash = hash.join('&');
getOrderList(data);
}
/**
* 七天时间
*/
function datePick(date_num,event_obj){
$(".date-picker-btn").removeClass("selected");
$(event_obj).addClass('selected');
Date.prototype.Format = function (fmt,date_num) { //author: meizz
this.setDate(this.getDate()-date_num);
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"H+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
};
var now_time = new Date().Format("yyyy-MM-dd 23:59:59",0);//当前日期
var before_time = new Date().Format("yyyy-MM-dd 00:00:00",date_num-1);//前几天日期
$("#start_time_order").val(before_time,0);
$("#end_time_order").val(now_time,date_num-1);
}
</script>

View File

@@ -0,0 +1,54 @@
<link rel="stylesheet" type="text/css" href="__STATIC__/ext/layui/extend/cascader/cascader.css"/>
<style>
.goods-category-container {display: inline-block;position: relative;z-index: 10}
</style>
<div class="goods-category-container">
<input type="text" autocomplete="off" show="false" class="layui-input select-category" placeholder="选择商品分类" readonly />
<input type="hidden" name="category_id">
</div>
<script>
var form, layCascader, goodsCategory = [];
$(function() {
layui.use(['form', 'layCascader'], function () {
form = layui.form;
layCascader = layui.layCascader;
form.render();
fetchCategory($('.goods-category-container .select-category'), function (value, node) {
$('[name="category_id"]').val(value);
})
});
});
/**
* 渲染分类选择
* @param elem
* @param callback
*/
function fetchCategory(elem, callback){
if (!goodsCategory.length) {
$.ajax({
url : ns.url("shop/goodscategory/lists"),
dataType: 'JSON',
type: 'POST',
async: false,
success: function(res) {
goodsCategory = res.data;
}
})
}
if($('.select-category').length) {
var _cascader = layCascader({
elem: $('.select-category'),
options: goodsCategory,
props: {
value: 'category_id',
label: 'category_name',
children: 'child_list'
}
});
_cascader.changeEvent(function (value, node) {
typeof callback == 'function' && callback(value, node)
});
}
}
</script>

View File

@@ -0,0 +1,377 @@
<style>
.good-name {
line-height: 34px;
}
/* @media screen and (min-width: 1514px) {
.len-short {width: 80px!important;}
} */
@media screen and (max-width: 1330px) {
.len-short {width: 100px!important;}
}
#rule_list .layui-input {display: inline-block;}
.layui-table[lay-size=lg] td, .layui-table[lay-size=lg] th {padding: 15px;}
.align-right {text-align: right;}
.align-center {text-align: center!important;}
.line-height {line-height: 45px;}
input[disabled] {background-color: #F5F5F5;}
</style>
<div class="layui-collapse tips-wrap">
<div class="layui-colla-item">
<h2 class="layui-colla-title">操作提示</h2>
<ul class="layui-colla-content layui-show">
<li>分销商层级与后台配置有关,最多三级分销。</li>
<li>分销商等级与分销商的分销订单数,分销订单总额,自购订单数,自购订单总额,分销商下线人数,分销商的下级分销商人数有关。</li>
<li>商品分销总佣金不得超过商品实际价格的50%。</li>
<li>分销佣金是根据当前分销订单所属分销商等级或者商品自定义的计算规则进行结算。</li>
<li>分销结算说明: A 、B 、C是分销商C的上级为BB的上级为A。
分佣按照所属分销商的等级佣金比率进行分配分销商C的等级分佣比率为一级10%二级5%三级2%
订单属于分销商C则C获得商品实付金额10%B获得商品实付金额5%A获得商品实付金额2%。
若C推荐的普通用户D购买商品则该订单属于C若C购买商品则该订单属于C。</li>
</ul>
</div>
</div>
<div class="layui-form">
<div class="layui-card card-common">
<div class="layui-card-header">
<span class="card-title">商品信息</span>
</div>
<div class="layui-card-body">
<div class="layui-form-item goods-image-wrap">
<label class="layui-form-label">商品图片:</label>
<div class="layui-input-block">
<div class="js-goods-image"><img layer-src src="{:img($goods_info.goods_image[0],'small')}" width="50px"/></div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">商品名称:</label>
<div class="layui-input-inline good-name">{$goods_info.goods_name}</div>
</div>
</div>
</div>
<div class="layui-card card-common">
<div class="layui-card-header">
<span class="card-title">佣金设置</span>
</div>
<div class="layui-card-body">
<div class="layui-form-item goods-image-wrap">
<label class="layui-form-label">是否参与分销:</label>
<div class="layui-input-block">
<input type="radio" name="is_fenxiao" value="1" title="参与" lay-filter="is_fenxiao" {if $goods_info['is_fenxiao'] == 1 }checked{/if}>
<input type="radio" name="is_fenxiao" value="0" title="不参与" lay-filter="is_fenxiao" {if $goods_info['is_fenxiao'] == 0 }checked{/if}>
</div>
</div>
<div class="word-aux">
<p>设置参与分销时,佣金会按照如下规则进行计算,如果有分销计算价则分销计算价优先。佣金 = 销售价*对应分销等级比例 / 佣金 = 分销计算价*对应分销等级比例</p>
</div>
<div class="layui-form-item goods-image-wrap {if $goods_info['is_fenxiao'] == 0}layui-hide{/if}" id="fenxiao_price">
<label class="layui-form-label">分销计算价格:</label>
<div class="layui-input-block">
<table class="layui-table" lay-skin="line">
<colgroup>
<col width="40%">
<col width="20%">
<col width="20%">
<col width="20%">
</colgroup>
<thead>
<tr>
<th>商品规格</th>
<th>销售价</th>
<th>成本价</th>
<th class="align-center">分销计算价</th>
</tr>
</thead>
<tbody>
{foreach $goods_info['sku_data'] as $sku}
<tr>
<td>
<div class="line-hiding">{$sku.goods_name}</div>
<div style="color:#B2B2B2;">{$sku.spec_name}</div>
</td>
<td>{$sku.discount_price}</td>
<td>{$sku.cost_price}</td>
<td class="align-center">
<input type="number" name="fenxiao_price[{$sku.sku_id}]" class="layui-input len-short input-rate" value="{$sku.fenxiao_price}" style="display: inline-block;">
</td>
</tr>
{/foreach}
</tbody>
</table>
</div>
<div class="word-aux">
<p>未设置分销计算价以该商品实付金额来计算佣金,设置后以该价格来计算佣金。</p>
</div>
</div>
<div class="layui-form-item {if $goods_info['is_fenxiao'] == 0}layui-hide{/if}" id="fenxiao_type">
<label class="layui-form-label">佣金规则:</label>
<div class="layui-input-inline good-name">
<input type="radio" name="fenxiao_type" value="1" title="默认规则" lay-filter="fenxiao_type" {if $goods_info['fenxiao_type'] == 1 }checked{/if}>
<input type="radio" name="fenxiao_type" value="2" title="单独设置" lay-filter="fenxiao_type" {if $goods_info['fenxiao_type'] == 2 }checked{/if}>
</div>
</div>
<div class="layui-form-item {if $goods_info['is_fenxiao'] == 0 || $goods_info['fenxiao_type'] == 2}layui-hide{/if}" id="default_rule">
<label class="layui-form-label"></label>
<div class="layui-input-block">
<table class="layui-table" id="default_rule_list" lay-skin="line" lay-size="lg">
<colgroup>
<col width="25%">
<col width="25%">
{if $fenxiao_config.level >= 2}
<col width="25%">
{/if}
{if $fenxiao_config.level >= 3}
<col width="25%">
{/if}
</colgroup>
<thead>
<tr>
<th>默认规则</th>
<th>一级佣金比例</th>
{if $fenxiao_config.level >= 2}
<th>二级佣金比例</th>
{/if}
{if $fenxiao_config.level >= 3}
<th>三级佣金比例</th>
{/if}
</tr>
</thead>
<tbody>
{foreach $fenxiao_level as $level}
<tr>
<td>{$level.level_name}</td>
<td>{$level.one_rate}%</td>
{if $fenxiao_config.level >= 2}
<td>{$level.two_rate}%</td>
{/if}
{if $fenxiao_config.level >= 3}
<td>{$level.three_rate}%</td>
{/if}
</tr>
{/foreach}
</tbody>
</table>
</div>
</div>
<div class="layui-form-item {if $goods_info['is_fenxiao'] == 0 || $goods_info['fenxiao_type'] == 1}layui-hide{/if}" id="personal_rule">
<label class="layui-form-label"></label>
<div class="layui-input-block">
<table class="layui-table" id="rule_list" lay-skin="line" lay-size="lg">
<colgroup>
<col width="15%">
<col width="10%">
<col width="5%">
<col width="10%">
<col width="20%">
{if $fenxiao_config.level >= 2}
<col width="20%">
{/if}
{if $fenxiao_config.level >= 3}
<col width="20%">
{/if}
</colgroup>
<thead>
<tr>
<th>商品规格</th>
<th><p class="align-right">价格</p></th>
<th></th>
<th><p class="line-hiding" title="分销商等级名称">分销商等级名称</p></th>
<th>一级佣金比例</th>
{if $fenxiao_config.level >= 2}
<th>二级佣金比例</th>
{/if}
{if $fenxiao_config.level >= 3}
<th>三级佣金比例</th>
{/if}
</tr>
</thead>
<tbody>
{foreach $fenxiao_level as $level}
<tr>
{foreach $goods_info['sku_data'] as $sku}
<input name="fenxiao[{$level['level_id']}][sku_id][]" value="{$sku.sku_id}" hidden />
<input name="fenxiao[{$level['level_id']}][sku_price][]" value="{$sku.price}" hidden />
{/foreach}
<td>
{foreach $goods_info['sku_data'] as $sku}
<p class="line-hiding line-height" title="{$sku.sku_name}">{$sku.sku_name}</p>
{/foreach}
</td>
<td>
{foreach $goods_info['sku_data'] as $sku}
<p class="align-right line-height" title="¥{$sku.price}">¥{$sku.price}</p>
{/foreach}
</td>
<td></td>
<td>{$level.level_name}</td>
<td>
{foreach $goods_info['sku_data'] as $sku}
{if isset($goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id])}
<div class="line-height">
<div><input class="layui-input len-short input-rate" type="number" min="0" max="100" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][one_rate][]" value="{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['one_rate'] ?: ''}" {if $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['one_money'] > 0}disabled{/if} > %</div>
<div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][one_money][]" value="{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['one_money'] ?: ''}" {if $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['one_rate'] > 0}disabled{/if} > 元</div>
</div>
{else/}
<div class="line-height">
<div><input class="layui-input len-short input-rate" type="number" min="0" max="100" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][one_rate][]" value="" > %</div>
<div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][one_money][]" value="" ></div>
</div>
{/if}
{/foreach}
</td>
{if $fenxiao_config.level >= 2}
<td>
{foreach $goods_info['sku_data'] as $sku}
{if isset($goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id])}
<div class="line-height">
<div><input class="layui-input len-short input-rate" type="number" min="0" max="100" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][two_rate][]" value="{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['two_rate'] ?: ''}" {if $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['two_money'] > 0}disabled{/if} > %</div>
<div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][two_money][]" value="{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['two_money'] ?: ''}" {if $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['two_rate'] > 0}disabled{/if} > 元</div>
</div>
{else/}
<div class="line-height">
<div><input class="layui-input len-short input-rate" type="number" min="0" max="100" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][two_rate][]" value=""> %</div>
<div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][two_money][]" value=""></div>
</div>
{/if}
{/foreach}
</td>
{/if}
{if $fenxiao_config.level >= 3}
<td>
{foreach $goods_info['sku_data'] as $sku}
{if isset($goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id])}
<div class="line-height">
<div><input class="layui-input len-short input-rate" type="number" min="0" max="100" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][three_rate][]" value="{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['three_rate'] ?: ''}" {if $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['three_money'] > 0}disabled{/if} > %</div>
<div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][three_money][]" value="{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['three_money'] ?: ''}" {if $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['three_rate'] > 0}disabled{/if} > 元</div>
</div>
{else/}
<div class="line-height">
<div><input class="layui-input len-short input-rate" type="number" min="0" max="100" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][three_rate][]" value=""> %</div>
<div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][three_money][]" value=""></div>
</div>
{/if}
{/foreach}
</td>
{/if}
</tr>
{/foreach}
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="single-filter-box">
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<button class="layui-btn layui-btn-primary" onclick="backFenxiaoGoodsList()">返回</button>
</div>
<input type="hidden" name="goods_id" value="{$goods_info.goods_id}" />
</div>
</div>
<script>
var fenxiao_type = {$goods_info.fenxiao_type};
if (fenxiao_type == 1) {
$(".layui-input").removeAttr("lay-verify");
}
layui.use(['form'], function() {
var form = layui.form,
repeat_flag = false;
form.render();
$(".layui-input").each(function() {
$(this).on('input', function(){
var _this = $(this);
if(Number($(_this).val()) > 0){
$(this).parent().siblings().find("input").attr('disabled', true);
$(this).parent().siblings().find("input").removeAttr("lay-verify");
} else {
$(this).parent().siblings().find("input").attr('disabled', false);
$(this).parent().siblings().find("input").attr("lay-verify", "required|flnum");
}
});
});
// 是否参与分销
form.on("radio(is_fenxiao)", function (data) {
if (data.value == 1) {
$("#fenxiao_type,#fenxiao_price,#default_rule").removeClass("layui-hide");
$(".layui-input").removeAttr("lay-verify");
} else {
$("#fenxiao_type,#fenxiao_price,#default_rule").addClass("layui-hide");
$(".layui-input").attr("lay-verify", "required|flnum");
}
});
// 佣金规则
form.on("radio(fenxiao_type)", function (data) {
if (data.value == 1) {
$("#default_rule").removeClass("layui-hide");
$("#personal_rule").addClass("layui-hide");
$(".layui-input").removeAttr("lay-verify");
} else {
$("#default_rule").addClass("layui-hide");
$("#personal_rule").removeClass("layui-hide");
$(".layui-input").attr("lay-verify", "required|flnum");
}
});
/**
* 表单提交
*/
form.on('submit(save)', function(data){
if(repeat_flag) return;
repeat_flag = true;
$.ajax({
type: 'POST',
dataType: 'JSON',
url: ns.url("fenxiao://shop/goods/config"),
data: data.field,
async: false,
success: function(res){
repeat_flag = false;
if (res.code == 0) {
layer.msg('操作成功');
}else{
layer.msg(res.message);
}
}
})
});
/**
* 表单验证
*/
form.verify({
required: function (value) {
if (value.trim() == '' || value < 0) {
return '佣金比例不能为空且必须大于0!';
}
},
flnum: function (value) {
var arrMen = value.split(".");
var val = 0;
if (arrMen.length == 2) {
val = arrMen[1];
}
if (val.length > 2) {
return "佣金比例最多可保留两位小数";
}
}
});
});
function backFenxiaoGoodsList() {
location.hash = ns.hash("fenxiao://shop/goods/lists");
}
</script>

View File

@@ -0,0 +1,187 @@
<style>
.align-right {text-align: right;}
</style>
<div class="layui-form">
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">商品信息</span>
</div>
<div class="layui-card-body">
<div class="layui-form-item goods-image-wrap">
<label class="layui-form-label">商品图片:</label>
<div class="layui-input-block">
<div class="js-goods-image"><img layer-src src="{:img($goods_info.goods_image[0],'small')}" width = "50px"/></div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">商品名称:</label>
<div class="layui-input-inline good-name">{$goods_info.goods_name}</div>
</div>
</div>
</div>
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">佣金设置</span>
</div>
<div class="layui-card-body">
<div class="layui-form-item">
<label class="layui-form-label">佣金规则:</label>
<div class="layui-input-inline good-name">
{if $goods_info['fenxiao_type'] == 1 }默认规则{/if}
{if $goods_info['fenxiao_type'] == 2 }单独设置{/if}
</div>
</div>
<div class="layui-form-item" id="default_rule" {if condition="$goods_info['fenxiao_type'] == 2"} style="display:none" {/if}>
<label class="layui-form-label"></label>
<div class="layui-input-block">
<table class="layui-table" id="default_rule_list" lay-skin="line" lay-size="lg">
<colgroup>
<col width="25%">
<col width="25%">
{if $fenxiao_config.level >= 2}
<col width="25%">
{/if}
{if $fenxiao_config.level >= 3}
<col width="25%">
{/if}
</colgroup>
<thead>
<tr>
<th>默认规则</th>
<th>一级佣金比例</th>
{if $fenxiao_config.level >= 2}
<th>二级佣金比例</th>
{/if}
{if $fenxiao_config.level >= 3}
<th>三级佣金比例</th>
{/if}
</tr>
</thead>
<tbody>
{foreach $fenxiao_level as $level}
<tr>
<td>{$level.level_name}</td>
<td>{$level.one_rate}%</td>
{if $fenxiao_config.level >= 2}
<td>{$level.two_rate}%</td>
{/if}
{if $fenxiao_config.level >= 3}
<td>{$level.three_rate}%</td>
{/if}
</tr>
{/foreach}
</tbody>
</table>
</div>
</div>
<div class="layui-form-item" id="personal_rule" {if condition="$goods_info['fenxiao_type'] == 1"} style="display:none" {/if}>
<label class="layui-form-label"></label>
<div class="layui-input-block">
<table class="layui-table" id="rule_list" lay-skin="line" lay-size="lg">
<colgroup>
<col width="15%">
<col width="10%">
<col width="15%">
<col width="20%">
{if $fenxiao_config.level >= 2}
<col width="20%">
{/if}
{if $fenxiao_config.level >= 3}
<col width="20%">
{/if}
</colgroup>
<thead>
<tr>
<th>商品规格</th>
<th><p class="align-right">价格</p></th>
<th><p class="line-hiding" title="分销商等级名称">分销商等级名称</p></th>
<th>一级佣金比例</th>
{if $fenxiao_config.level >= 2}
<th>二级佣金比例</th>
{/if}
{if $fenxiao_config.level >= 3}
<th>三级佣金比例</th>
{/if}
</tr>
</thead>
<tbody>
{foreach $fenxiao_level as $level}
<tr>
{foreach $goods_info['sku_data'] as $sku}
{/foreach}
<td>
{foreach $goods_info['sku_data'] as $sku}
<p class="line-hiding line-height" title="{$sku.sku_name}">{$sku.sku_name}</p>
{/foreach}
</td>
<td>
{foreach $goods_info['sku_data'] as $sku}
<p class="align-right line-height" title="¥{$sku.price}">¥{$sku.price}</p>
{/foreach}
</td>
<td>{$level.level_name}</td>
<td>
{foreach $goods_info['sku_data'] as $sku}
<p>
{if !empty($goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['one_rate']) && $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['one_rate'] > 0}
{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['one_rate']}%
{/if}
{if !empty($goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['one_money']) && $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['one_money'] > 0}
{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['one_money']}元
{/if}
</p>
{/foreach}
</td>
{if $fenxiao_config.level >= 2}
<td>
{foreach $goods_info['sku_data'] as $sku}
<p>
{if !empty($goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['two_rate']) && $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['two_rate'] > 0}
{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['two_rate']}%
{/if}
{if !empty($goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['two_money']) && $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['two_money'] > 0}
{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['two_money']}元
{/if}
</p>
{/foreach}
</td>
{/if}
{if $fenxiao_config.level >= 3}
<td>
{foreach $goods_info['sku_data'] as $sku}
<p>
{if !empty($goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['three_rate']) && $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['three_rate'] > 0}
{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['three_rate']}%
{/if}
{if !empty($goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['three_money']) && $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['three_money'] > 0}
{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['three_money']}元
{/if}
</p>
{/foreach}
</td>
{/if}
</tr>
{/foreach}
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="layui-form form-wrap">
<div class="form-row">
<button class="layui-btn layui-btn-primary" onclick="backFenxiaoGoodsList()">返回</button>
</div>
</div>
</div>
<script>
function backFenxiaoGoodsList() {
location.hash = ns.hash("fenxiao://shop/goods/lists");
}
</script>

View File

@@ -0,0 +1,409 @@
<style>.table-tab{margin-top: 0;}</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" autocomplete="off" class="layui-input" placeholder="输入商品名称" />
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">商品类型:</label>
<div class="layui-input-inline">
<select name="goods_class" lay-filter="goods_class">
<option value="">全部</option>
<option value="1">实物商品</option>
<option value="2">虚拟商品</option>
</select>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">是否参与:</label>
<div class="layui-input-inline">
<select name="is_fenxiao" lay-filter="is_fenxiao">
<option value="">全部</option>
<option value="1">已参与</option>
<option value="0">未参与</option>
</select>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">商品分类:</label>
<div class="layui-input-inline">
{include file="goods/category_select" /}
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">销量:</label>
<div class="layui-input-inline">
<input type="number" name="start_sale" id="start_sale" lay-verify="int" placeholder="最低销量" class="layui-input" autocomplete="off">
</div>
<div class="layui-form-mid">-</div>
<div class="layui-input-inline">
<input type="number" name="end_sale" id="end_sale" lay-verify="int" placeholder="最高销量" class="layui-input" autocomplete="off">
</div>
</div>
</div>
<input type="hidden" name="goods_state" />
<div class="form-row">
<button class="layui-btn" lay-submit id="" 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="fenxiao_goods_tab">
<div class="layui-tab-content">
<!-- 列表 -->
<table id="fenxiao_list" lay-filter="fenxiao_list"></table>
</div>
</div>
<!-- 商品 -->
<script type="text/html" id="goods_info">
<div class="table-title">
<div class="title-pic">
<img layer-src src="{{ns.img(d.goods_image.split(',')[0], 'small')}}"/>
</div>
<div class="title-content">
<a href="javascript:;" class="multi-line-hiding text-color-sub" title="{{d.goods_name}}">{{d.goods_name}}</a>
</div>
</div>
</script>
<!-- 状态 -->
<script type="text/html" id="status">
{{# if(d.status == 0){ }}
<span style="color: red;">待审核</span>
{{# }else if(d.status == 1){ }}
<span style="color: green;">审核通过</span>
{{# }else if(d.status == 2){ }}
<span style="color: gray;">审核拒绝</span>
{{# }else if(d.status == -1){ }}
<span style="color: gray;">冻结</span>
{{# } }}
</script>
<!-- 工具栏操作 -->
<script type="text/html" id="operation">
<div class="operation-wrap" data-goods-id="{{d.goods_id}}">
<div class="table-btn">
<a class="layui-btn" lay-event="detail">详情</a>
{{# if(d.is_fenxiao == 1){ }}
<a class="layui-btn" lay-event="config">佣金设置</a>
{{# }else{ }}
{{# } }}
</div>
</div>
</script>
<!-- 批量操作 -->
<script type="text/html" id="toolbarOperation">
<button class="layui-btn layui-btn-primary" lay-event="join">参与</button>
<button class="layui-btn layui-btn-primary" lay-event="cancel">不参与</button>
</script>
<!-- 批量操作 -->
<script type="text/html" id="batchOperation">
<button class="layui-btn layui-btn-primary" lay-event="join">参与</button>
<button class="layui-btn layui-btn-primary" lay-event="cancel">不参与</button>
</script>
<script>
var form, element, repeat_flag, table;
layui.use(['form', 'laydate','element'], function() {
form = layui.form, element = layui.element, laydate = layui.laydate;
form.render();
//渲染时间
laydate.render({
elem: '#start_time',
type: 'datetime'
});
laydate.render({
elem: '#end_time',
type: 'datetime'
});
table = new Table({
elem: '#fenxiao_list',
url: ns.url("fenxiao://shop/goods/lists"),
toolbar: '#toolbarOperation',
bottomToolbar: "#batchOperation",
cols: [
[{
type: 'checkbox',
unresize: 'false',
width: '3%'
},
{
title: '商品名称',
unresize: 'false',
templet: '#goods_info',
width: '21%'
}, {
field: 'price',
title: '价格',
unresize: 'false',
align: 'right',
width: '13%',
templet: function (data) {
return '¥' + data.price;
}
}, {
unresize: 'false',
width: '4%'
}, {
field: 'goods_stock',
title: '库存',
unresize: 'false',
width: '8%'
}, {
field: 'sale_num',
title: '销量',
unresize: 'false',
width: '8%'
}, {
title: '销售状态',
unresize: 'false',
width: '10%',
templet: function (data) {
var str = '';
if (data.goods_state == 1) {
str = '<span style="color: green">销售中</span>';
} else if (data.goods_state == 0) {
str = '<span style="color: red">仓库中</span>';
}
return str;
}
}, {
title: '是否参与',
unresize: 'false',
width: '10%',
templet: function (data) {
if(data.is_fenxiao == 1){
return '<input type="checkbox" name="is_fenxiao" data-goods-id="'+ data.goods_id + '" value="1" lay-filter="is_fenxiao" lay-skin="switch" checked>';
}else{
return '<input type="checkbox" name="is_fenxiao" data-goods-id="'+ data.goods_id + '" value="0" lay-filter="is_fenxiao" lay-skin="switch">';
}
}
}, {
title: '<div class="prompt-block">' + '规则' +
'<div class="prompt">' +
'<i class="iconfont iconwenhao1 required growth"></i>' +
'<div class="growth-box reason-box reason-growth prompt-box" >' +
'<div class="prompt-con">' +
'<ul style="font-weight: 100">' +
'<li>1、分销商层级与后台配置有关最多三级分销。</li>' +
'<li>2、分销商等级与分销商的分销订单数分销订单总额自购订单数自购订单总额分销商下线人数分销商的下级分销商人数有关。</li>' +
'<li>3、商品分销总佣金不得超过商品实际价格的50%。</li>' +
'<li>4、分销佣金是根据当前分销订单所属分销商等级或者商品自定义的计算规则进行结算。</li>' +
'<li>5、分销结算说明 A 、B 、C是分销商C的上级为BB的上级为A。' +
'分佣按照所属分销商的等级佣金比率进行分配分销商C的等级分佣比率为一级10%二级5%三级2%' +
'订单属于分销商C则C获得商品实付金额10%B获得商品实付金额5%A获得商品实付金额2%。' +
'若C推荐的普通用户D购买商品则该订单属于C若C购买商品则该订单属于C。</li>' +
'</ul>' +
'</div>' +
'</div>' +
'</div>' +
'</div>',
unresize: 'false',
width: '10%',
templet: function (data) {
var str = '';
if (data.fenxiao_type == 1) {
str = '默认规则';
} else if (data.fenxiao_type == 2) {
str = '单独设置';
}
return str;
}
}, {
title: '操作',
toolbar: '#operation',
unresize: 'false',
align:'right'
}]
]
});
/**
* 搜索功能
*/
form.on('submit(search)', function(data) {
table.reload({
page: {
curr: 1
},
where: data.field
});
return false;
});
//按钮监控
form.on('switch(is_fenxiao)', function(data){
var goods_id = $(data.elem).attr('data-goods-id');
modifyFenxiao(goods_id, data.value, data.elem);
});
/**
* 监听工具栏操作
*/
table.tool(function(obj) {
var data = obj.data,
event = obj.event;
switch (event) {
case 'detail': //查看
location.hash = ns.hash('fenxiao://shop/goods/detail', {'goods_id': data.goods_id});
break;
case 'config':
//编辑
location.hash = ns.hash("fenxiao://shop/goods/config", {"goods_id": data.goods_id});
break;
case 'modify':
//删除
modifyFenxiao(data.goods_id, data.is_fenxiao);
break;
}
});
// 批量操作
table.bottomToolbar(function (obj) {
if (obj.data.length < 1) {
layer.msg('请选择要操作的数据');
return;
}
var id_array = new Array();
for (i in obj.data) id_array.push(obj.data[i].goods_id);
switch (obj.event) {
case "join":
joinFenxiao(id_array);
break;
case 'cancel':
//下架
cancelFenxiao(id_array);
break;
}
});
// 批量操作
table.toolbar(function (obj) {
if (obj.data.length < 1) {
layer.msg('请选择要操作的数据');
return;
}
var id_array = new Array();
for (i in obj.data) id_array.push(obj.data[i].goods_id);
switch (obj.event) {
case "join":
joinFenxiao(id_array);
break;
case 'cancel':
//下架
cancelFenxiao(id_array);
break;
}
});
});
//配置参与状态
function modifyFenxiao(goods_id, is_fenxiao, data) {
if(is_fenxiao == 0){
var fenxiao_tip = "如果商品尚未设置佣金规则,首次开启默认按照分销等级发放佣金,是否继续开启?";
}else{
var fenxiao_tip = "是否设置商品不参与分销?";
}
layer.confirm(fenxiao_tip,{
btn: ['确定', '取消'],
cancel: function(index, layero){
if(is_fenxiao == 1){
$(data).prop("checked",true);
}else{
$(data).prop("checked",false);
}
form.render();
layer.close(index);
return false;
}
}, function () {
if (repeat_flag) return;
repeat_flag = true;
$.ajax({
url: ns.url("fenxiao://shop/goods/modify"),
data: {goods_id: goods_id, is_fenxiao:is_fenxiao},
dataType: 'JSON',
type: 'POST',
success: function (res) {
layer.msg(res.message);
repeat_flag = false;
if (res.code == 0) {
table.reload();
}
}
});
},function () {
if(is_fenxiao == 1){
$(data).prop("checked",true);
form.render();
}else{
$(data).prop("checked",false);
form.render();
}
});
}
function joinFenxiao(goods_ids){
layer.confirm('批量参与分销的商品,如果之前未配置佣金规则,则默认按照分销等级发放佣金,是否继续?', {title: '提示'}, function (index) {
if (repeat_flag) return;
repeat_flag = true;
layer.close(index);
$.ajax({
url: ns.url("fenxiao://shop/goods/setGoodsIsFenxiao"),
data: {goods_ids: goods_ids.toString(), is_fenxiao: 1},
dataType: 'JSON',
type: 'POST',
success: function (res) {
layer.msg(res.message);
repeat_flag = false;
if (res.code == 0) {
table.reload();
}
}
});
});
}
function cancelFenxiao(goods_ids) {
layer.confirm('是否设置商品不参与分销?', {title: '提示'}, function (index) {
if (repeat_flag) return;
repeat_flag = true;
layer.close(index);
$.ajax({
url: ns.url("fenxiao://shop/goods/setGoodsIsFenxiao"),
data: {goods_ids: goods_ids.toString()},
dataType: 'JSON',
type: 'POST',
success: function (res) {
layer.msg(res.message);
repeat_flag = false;
if (res.code == 0) {
table.reload();
}
}
});
});
}
</script>

View File

@@ -0,0 +1,380 @@
<style>
.layui-btn+.layui-btn {margin-left: 0;}
.layui-btn {margin-right: 10px; margin-bottom: 15px;}
.weight-list span{display: inline-block;width: 60px;line-height: 30px;border:1px solid #eee;border-radius: 4px;text-align: center;font-size: 12px;cursor: pointer;}
.weight-list span.disabled{background:#f1f1f1;cursor: not-allowed; }
.layui-btn.layui-btn-primary.level-btn span{margin-left: 5px}
</style>
<div class="layui-form form-wrap">
<!-- 基础上传 -->
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">等级佣金比例</span>
</div>
<div class="layui-card-body">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>等级权重:</label>
<div class="layui-input-block weight-list">
<span value="1" class="{if in_array(1, $level_weight)}disabled{/if}">一级</span>
<span value="2" class="{if in_array(2, $level_weight)}disabled{/if}">二级</span>
<span value="3" class="{if in_array(3, $level_weight)}disabled{/if}">三级</span>
<span value="4" class="{if in_array(4, $level_weight)}disabled{/if}">四级</span>
<span value="5" class="{if in_array(5, $level_weight)}disabled{/if}">五级</span>
<span value="6" class="{if in_array(6, $level_weight)}disabled{/if}">六级</span>
<span value="7" class="{if in_array(7, $level_weight)}disabled{/if}">七级</span>
<span value="8" class="{if in_array(8, $level_weight)}disabled{/if}">八级</span>
<span value="9" class="{if in_array(9, $level_weight)}disabled{/if}">九级</span>
<span value="10" class="{if in_array(10, $level_weight)}disabled{/if}">十级</span>
</div>
<div class="word-aux">
<p>等级权重越大等级越高</p>
</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="level_name" lay-verify="required" autocomplete="off" class="layui-input len-mid" maxlength="40">
</div>
</div>
{if $basics_info.level == 1}
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>一级佣金比例:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="one_rate" lay-verify="required|money" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">%</div>
</div>
<div class="word-aux">
<p>会员购买后给当前等级分销商的佣金比例</p>
</div>
{elseif $basics_info.level == 2 /}
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>一级佣金比例:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="one_rate" lay-verify="required|money" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">%</div>
</div>
<div class="word-aux">
<p>会员购买后给当前等级分销商的佣金比例</p>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>二级佣金比例:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="two_rate" lay-verify="required|mondy" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">%</div>
</div>
<div class="word-aux">
<p>会员购买后给当前等级分销商的上级分销商佣金比例</p>
</div>
{elseif $basics_info.level == 3 /}
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>一级佣金比例:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="one_rate" lay-verify="required|money" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">%</div>
</div>
<div class="word-aux">
<p>会员购买后给当前等级分销商的佣金比例</p>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>二级佣金比例:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="two_rate" lay-verify="required|mondy" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">%</div>
</div>
<div class="word-aux">
<p>会员购买后给当前等级分销商的上级分销商佣金比例</p>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>三级佣金比例:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="three_rate" lay-verify="required|money" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">%</div>
</div>
<div class="word-aux">
<p>会员购买后给当前等级分销商的上上级分销商佣金比例</p>
</div>
{/if}
</div>
</div>
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">升级条件</span>
</div>
<div class="layui-card-body">
<div class="layui-form-item">
<label class="layui-form-label">升级方式:</label>
<div class="layui-input-block">
<input type="radio" name="upgrade_type" value="1" lay-filter="withdraw_type" title="满足以下任意条件" checked />
<input type="radio" name="upgrade_type" value="2" lay-filter="withdraw_type" title="满足以下全部条件" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"></label>
<div class="layui-input-block">
<!-- <button class="layui-btn layui-btn-primary level-btn">分销订单总额<input type="hidden" value="2" /></button> -->
<!-- <button class="layui-btn layui-btn-primary level-btn">分销订单总数<input type="hidden" value="1" /></button> -->
<button class="layui-btn layui-btn-primary level-btn">一级分销订单总数<span class="iconfont iconwenhao1" title="分销商自己购买和自己推荐的直属会员购买的订单次数"></span><input type="hidden" value="1" /></button>
<button class="layui-btn layui-btn-primary level-btn">一级分销订单佣金总额<span class="iconfont iconwenhao1" title="分销商自己购买和自己推荐的直属会员购买的订单佣金总额"></span><input type="hidden" value="2" /></button>
<button class="layui-btn layui-btn-primary level-btn">一级分销订单总额<span class="iconfont iconwenhao1" title="分销商自己购买和推荐的直属会员购买的订单的总额"></span><input type="hidden" value="2" /></button>
<button class="layui-btn layui-btn-primary level-btn">自购订单总数<span class="iconfont iconwenhao1" title="分销商自己购买的订单次数"></span><input type="hidden" value="1" /></button>
<button class="layui-btn layui-btn-primary level-btn">自购订单总额<span class="iconfont iconwenhao1" title="分销商自己购买的订单总额"></span><input type="hidden" value="2" /></button>
<!-- <button class="layui-btn layui-btn-primary level-btn">下线人数<input type="hidden" value="1" /></button> -->
<!-- <button class="layui-btn layui-btn-primary level-btn">下线分销商人数<input type="hidden" value="1" /></button> -->
<button class="layui-btn layui-btn-primary level-btn">一级下线人数<span class="iconfont iconwenhao1" title="分销商的直属下级会员(包含已经申请成为分销商的)"></span><input type="hidden" value="1" /></button>
<button class="layui-btn layui-btn-primary level-btn">一级下线分销商<span class="iconfont iconwenhao1" title="分销商的直属下级分销商"></span><input type="hidden" value="1" /></button>
</div>
</div>
</div>
</div>
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">升级条件限制</span>
</div>
<div class="layui-card-body level-term">
<!-- <div class="layui-form-item layui-hide">
<label class="layui-form-label"><span class="required">*</span>分销订单总数:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="fenxiao_order_num" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">个</div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div>
<div class="layui-form-item layui-hide">
<label class="layui-form-label"><span class="required">*</span>分销订单总额:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="fenxiao_order_meney" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">元</div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div> -->
<div class="layui-form-item layui-hide">
<label class="layui-form-label"><span class="required">*</span>一级分销订单总数:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="one_fenxiao_order_num" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid"></div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div>
<div class="layui-form-item layui-hide">
<label class="layui-form-label"><span class="required">*</span>一级分销订单佣金总额:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="one_fenxiao_order_money" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid"></div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div>
<div class="layui-form-item layui-hide">
<label class="layui-form-label"><span class="required">*</span>一级分销订单总额:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="one_fenxiao_total_order" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid"></div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div>
<div class="layui-form-item layui-hide">
<label class="layui-form-label"><span class="required">*</span>自购订单总数:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="order_num" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid"></div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div>
<div class="layui-form-item layui-hide">
<label class="layui-form-label"><span class="required">*</span>自购订单总额:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="order_money" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid"></div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div>
<!-- <div class="layui-form-item layui-hide">
<label class="layui-form-label"><span class="required">*</span>下线人数:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="child_num" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">人</div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div>
<div class="layui-form-item layui-hide">
<label class="layui-form-label"><span class="required">*</span>下线分销商人数:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="child_fenxiao_num" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">人</div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div> -->
<div class="layui-form-item layui-hide">
<label class="layui-form-label"><span class="required">*</span>一级下线人数:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="one_child_num" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid"></div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div>
<div class="layui-form-item layui-hide">
<label class="layui-form-label"><span class="required">*</span>一级下线分销商:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="one_child_fenxiao_num" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid"></div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<button class="layui-btn layui-btn-primary" onclick="backFenxiaoLevelList()">返回</button>
</div>
</div>
</div>
</div>
<script>
$(function(){
$('.weight-list span').not('.disabled').eq(0).addClass("border-color");
});
layui.use(['form'], function() {
var form = layui.form,
repeat_flag = false; //防重复标识
form.render();
$(".weight-list span").click(function() {
if (!$(this).hasClass("disabled")) {
$(this).addClass("border-color");
$(this).siblings().removeClass("border-color");
}
});
$(".level-btn").click(function() {
var _index = $(this).index();
if (!$(this).hasClass("border-color")) {
$(this).addClass("border-color");
$(".level-term>div").eq(_index).removeClass("layui-hide");
if ($(this).find("input").val() == 1) {
$(".level-term>div").eq(_index).find("input").attr("lay-verify", "required|num");
} else {
$(".level-term>div").eq(_index).find("input").attr("lay-verify", "required|money");
}
}
});
form.on('submit(save)', function(data) {
data.field.level_num = $(".weight-list span.border-color").attr('value');
var arr = $(".layui-card-body").eq(2).children('.layui-form-item').length;
var arr1 = $(".layui-card-body").eq(2).children('.layui-form-item.layui-hide').length;
if (data.field.level_num == undefined){
layer.msg('请选择等级权重');
return;
}
if(arr==arr1){
layer.msg('请选择升级条件');
return;
}
if (repeat_flag) return;
repeat_flag = true;
$.ajax({
type: 'POST',
dataType: 'JSON',
url: ns.url("fenxiao://shop/level/add"),
data: data.field,
success: function(res) {
repeat_flag = false;
if (res.code == 0) {
layer.confirm('添加成功', {
title:'操作提示',
btn: ['返回列表', '继续添加'],
closeBtn: 0,
yes: function(index, layero) {
location.hash = ns.hash("fenxiao://shop/level/lists");
layer.close(index);
},
btn2: function(index, layero) {
listenerHash(); // 刷新页面
layer.close(index);
}
});
}else{
layer.msg(res.message);
}
}
});
});
/**
* 表单验证
*/
form.verify({
num: function(value, item) {
var str = $(item).parents(".layui-form-item").find("label").text().split("*").join("");
str = str.substring(0, str.length - 1);
if (value <= 0) {
return str + '必须大于0';
}
if (value % 1 != 0) {
return str + '必须为整数';
}
},
money: function(value, item) {
var str = $(item).parents(".layui-form-item").find("label").text().split("*").join("");
str = str.substring(0, str.length - 1);
if (value < 0) {
return str + '不能小于0';
}
var arrMen = value.split(".");
var val = 0;
if (arrMen.length == 2) {
val = arrMen[1];
}
if (val.length > 2) {
return str + "最多可保留两位小数";
}
}
});
});
function delDiv(e) {
var _len = $(e).parents(".layui-form-item").index();
$(e).parents(".layui-form-item").addClass("layui-hide");
$(e).parents(".layui-form-item").find("input").removeAttr("lay-verify");
$(e).parents(".layui-form-item").find("input").val("");
$(".level-btn").eq(_len).removeClass("border-color");
}
function backFenxiaoLevelList() {
location.hash = ns.hash("fenxiao://shop/level/lists");
}
</script>

View File

@@ -0,0 +1,397 @@
<style>
.layui-btn+.layui-btn {margin-left: 0;}
.layui-btn {margin-right: 10px; margin-bottom: 15px;}
.weight-list span{display: inline-block;width: 60px;line-height: 30px;border:1px solid #eee;border-radius: 4px;text-align: center;font-size: 12px;cursor: pointer;}
.weight-list span.disabled{background:#f1f1f1;cursor: not-allowed; }
.layui-btn.layui-btn-primary.level-btn span{margin-left: 5px}
</style>
<div class="layui-form form-wrap">
<!-- 基础上传 -->
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">等级佣金比例</span>
</div>
<div class="layui-card-body">
{if $info.is_default eq 0}
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>等级权重:</label>
<div class="layui-input-block weight-list">
<span value="1" class="{if $info.level_num eq 1}border-color{/if} {if in_array(1, $level_weight)}disabled{/if}">一级</span>
<span value="2" class="{if $info.level_num eq 2}border-color{/if} {if in_array(2, $level_weight)}disabled{/if}">二级</span>
<span value="3" class="{if $info.level_num eq 3}border-color{/if} {if in_array(3, $level_weight)}disabled{/if}">三级</span>
<span value="4" class="{if $info.level_num eq 4}border-color{/if} {if in_array(4, $level_weight)}disabled{/if}">四级</span>
<span value="5" class="{if $info.level_num eq 5}border-color{/if} {if in_array(5, $level_weight)}disabled{/if}">五级</span>
<span value="6" class="{if $info.level_num eq 6}border-color{/if} {if in_array(6, $level_weight)}disabled{/if}">六级</span>
<span value="7" class="{if $info.level_num eq 7}border-color{/if} {if in_array(7, $level_weight)}disabled{/if}">七级</span>
<span value="8" class="{if $info.level_num eq 8}border-color{/if} {if in_array(8, $level_weight)}disabled{/if}">八级</span>
<span value="9" class="{if $info.level_num eq 9}border-color{/if} {if in_array(9, $level_weight)}disabled{/if}">九级</span>
<span value="10" class="{if $info.level_num eq 10}border-color{/if} {if in_array(10, $level_weight)}disabled{/if}">十级</span>
</div>
<div class="word-aux">
<p>等级权重越大等级越高</p>
</div>
</div>
{/if}
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>等级名称:</label>
<div class="layui-input-block">
<input type="text" name="level_name" value="{$info.level_name}" lay-verify="required" autocomplete="off" class="layui-input len-mid" maxlength="40">
</div>
</div>
{if $basics_info.level == 1}
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>一级佣金比例:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="one_rate" value="{$info.one_rate}" lay-verify="required|money" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">%</div>
<div class="word-aux">
<p>会员购买后给当前等级分销商的佣金比例</p>
</div>
</div>
{elseif $basics_info.level == 2 /}
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>一级佣金比例:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="number" min="0" name="one_rate" lay-verify="required|money" value="{$info.one_rate}" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">%</div>
</div>
<div class="word-aux">
<p>会员购买后给当前等级分销商的佣金比例</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>二级佣金比例:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="number" min="0" name="two_rate" value="{$info.two_rate}" lay-verify="required|money" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">%</div>
</div>
<div class="word-aux">
<p>会员购买后给当前等级分销商的上级分销商佣金比例</p>
</div>
</div>
{elseif $basics_info.level == 3 /}
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>一级佣金比例:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="one_rate" value="{$info.one_rate}" lay-verify="required|money" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">%</div>
<div class="word-aux">
<p>会员购买后给当前等级分销商的佣金比例</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>二级佣金比例:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="two_rate" value="{$info.two_rate}" lay-verify="required|money" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">%</div>
<div class="word-aux">
<p>会员购买后给当前等级分销商的上级分销商佣金比例</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>三级佣金比例:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="three_rate" value="{$info.three_rate}" lay-verify="required|money" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">%</div>
<div class="word-aux">
<p>会员购买后给当前等级分销商的上上级分销商佣金比例</p>
</div>
</div>
{/if}
</div>
{if $info.is_default eq 0}
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">升级条件</span>
</div>
<div class="layui-card-body">
<div class="layui-form-item">
<label class="layui-form-label">升级方式:</label>
<div class="layui-input-block">
<input type="radio" name="upgrade_type" value="1" lay-filter="withdraw_type" title="满足以下任意条件" checked />
<input type="radio" name="upgrade_type" value="2" lay-filter="withdraw_type" {if $info.upgrade_type == 2} checked {/if} title="满足以下全部条件" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"></label>
<div class="layui-input-block">
<!-- <button class="layui-btn layui-btn-primary level-btn {if $info.fenxiao_order_num > 0}border-color{/if}">分销订单总数<input type="hidden" value="1" /></button>
<button class="layui-btn layui-btn-primary level-btn {if $info.fenxiao_order_meney > 0}border-color{/if}">分销订单总额<input type="hidden" value="2" /></button> -->
<button class="layui-btn layui-btn-primary level-btn {if $info.one_fenxiao_order_num > 0}border-color{/if}">一级分销订单总数<span class="iconfont iconwenhao1" title="分销商自己购买和自己推荐的直属会员购买的订单次数"></span><input type="hidden" value="1" /></button>
<button class="layui-btn layui-btn-primary level-btn {if $info.one_fenxiao_order_money > 0}border-color{/if}">一级分销订单佣金总额<span class="iconfont iconwenhao1" title="分销商自己购买和自己推荐的直属会员购买的订单佣金总额"></span><input type="hidden" value="2" /></button>
<button class="layui-btn layui-btn-primary level-btn {if $info.one_fenxiao_total_order > 0}border-color{/if}">一级分销订单总额<span class="iconfont iconwenhao1" title="分销商自己购买和自己推荐的直属会员购买的订单的总额"></span><input type="hidden" value="2" /></button>
<button class="layui-btn layui-btn-primary level-btn {if $info.order_num > 0}border-color{/if}">自购订单总数<span class="iconfont iconwenhao1" title="分销商自己购买的订单次数"></span><input type="hidden" value="1" /></button>
<button class="layui-btn layui-btn-primary level-btn {if $info.order_money > 0}border-color{/if}">自购订单总额<span class="iconfont iconwenhao1" title="分销商自己购买的订单总额"></span><input type="hidden" value="2" /></button>
<!-- <button class="layui-btn layui-btn-primary level-btn {if $info.child_num > 0}border-color{/if}">下线人数<input type="hidden" value="1" /></button>
<button class="layui-btn layui-btn-primary level-btn {if $info.child_fenxiao_num > 0}border-color{/if}">下线分销商人数<input type="hidden" value="1" /></button> -->
<button class="layui-btn layui-btn-primary level-btn {if $info.one_child_num > 0}border-color{/if}">一级下线人数<span class="iconfont iconwenhao1" title="分销商的直属下级会员(包含已经申请成为分销商的)"></span><input type="hidden" value="1" /></button>
<button class="layui-btn layui-btn-primary level-btn {if $info.one_child_fenxiao_num > 0}border-color{/if}">一级下线分销商<span class="iconfont iconwenhao1" title="分销商的直属下级分销商"></span><input type="hidden" value="1" /></button>
</div>
</div>
</div>
</div>
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">升级条件限制</span>
</div>
<div class="layui-card-body level-term">
<!-- <div class="layui-form-item {if $info.fenxiao_order_num <= 0}layui-hide{/if}">
<label class="layui-form-label"><span class="required">*</span>分销订单总数:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="fenxiao_order_num" value="{$info.fenxiao_order_num}" {if $info.fenxiao_order_num > 0}lay-verify="required|num"{/if} autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">个</div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div>
<div class="layui-form-item {if $info.fenxiao_order_meney <= 0}layui-hide{/if}">
<label class="layui-form-label"><span class="required">*</span>分销订单总额:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="fenxiao_order_meney" value="{$info.fenxiao_order_meney}" {if $info.fenxiao_order_meney > 0}lay-verify="required|money"{/if} autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">元</div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div> -->
<div class="layui-form-item {if $info.one_fenxiao_order_num <= 0}layui-hide{/if}">
<label class="layui-form-label"><span class="required">*</span>一级分销订单总数:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="one_fenxiao_order_num" value="{$info.one_fenxiao_order_num}" {if $info.one_fenxiao_order_num > 0}lay-verify="required|num"{/if} autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid"></div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div>
<div class="layui-form-item {if $info.one_fenxiao_order_money <= 0}layui-hide{/if}">
<label class="layui-form-label"><span class="required">*</span>一级分销订单佣金总额:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="one_fenxiao_order_money" value="{$info.one_fenxiao_order_money}" {if $info.one_fenxiao_order_money >0}lay-verify="required|money"{/if} autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid"></div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div>
<div class="layui-form-item {if $info.one_fenxiao_total_order <= 0}layui-hide{/if}">
<label class="layui-form-label"><span class="required">*</span>一级分销订单总额:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="one_fenxiao_total_order" value="{$info.one_fenxiao_total_order}" {if $info.one_fenxiao_total_order >0}lay-verify="required|money"{/if} autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid"></div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div>
<div class="layui-form-item {if $info.order_num <= 0}layui-hide{/if}">
<label class="layui-form-label"><span class="required">*</span>自购订单总数:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="order_num" value="{$info.order_num}" {if $info.order_num > 0}lay-verify="required|num"{/if} autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid"></div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div>
<div class="layui-form-item {if $info.order_money <= 0}layui-hide{/if}">
<label class="layui-form-label"><span class="required">*</span>自购订单总额:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="order_money" value="{$info.order_money}" {if $info.order_money > 0}lay-verify="required|money"{/if} autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid"></div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div>
<!-- <div class="layui-form-item {if $info.child_num <= 0}layui-hide{/if}">
<label class="layui-form-label"><span class="required">*</span>下线人数:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="child_num" value="{$info.child_num}" {if $info.child_num > 0}lay-verify="required|num"{/if} autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">人</div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div>
<div class="layui-form-item {if $info.child_fenxiao_num <= 0}layui-hide{/if}">
<label class="layui-form-label"><span class="required">*</span>下线分销商人数:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="child_fenxiao_num" value="{$info.child_fenxiao_num}" {if $info.child_fenxiao_num > 0}lay-verify="required|num"{/if} autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">人</div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div> -->
<div class="layui-form-item {if $info.one_child_num <= 0}layui-hide{/if}">
<label class="layui-form-label"><span class="required">*</span>一级下线人数:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="one_child_num" value="{$info.one_child_num}" {if $info.one_child_num > 0}lay-verify="required|num"{/if} autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid"></div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div>
<div class="layui-form-item {if $info.one_child_fenxiao_num <= 0}layui-hide{/if}">
<label class="layui-form-label"><span class="required">*</span>一级下线分销商:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="one_child_fenxiao_num" value="{$info.one_child_fenxiao_num}" {if $info.one_child_fenxiao_num > 0}lay-verify="required|num"{/if} autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid"></div>
<a href="javascript:;" class="text-color layui-form-mid" onclick="delDiv(this)">删除</a>
</div>
<div class="form-row">
<input type="hidden" name="level_id" value="{$info.level_id}">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<button class="layui-btn layui-btn-primary" onclick="backFenxiaoLevelList()">返回</button>
</div>
</div>
</div>
{else/}
<div class="form-row">
<input type="hidden" name="level_id" value="{$info.level_id}">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<button class="layui-btn layui-btn-primary" onclick="backFenxiaoLevelList()">返回</button>
</div>
{/if}
</div>
<script>
{empty name="$level_weight"}
$(function(){
$('.weight-list span').not('.disabled').eq(0).addClass("border-color");
});
{/empty}
layui.use(['form'], function() {
var form = layui.form,
repeat_flag = false; //防重复标识
form.render();
$(".weight-list span").click(function() {
if (!$(this).hasClass("disabled")) {
$(this).addClass("border-color");
$(this).siblings().removeClass("border-color");
}
});
$(".level-btn").click(function() {
var _index = $(this).index();
if (!$(this).hasClass("border-color")) {
$(this).addClass("border-color");
$(".level-term>div").eq(_index).removeClass("layui-hide");
if ($(this).find("input").val() == 1) {
$(".level-term>div").eq(_index).find("input").attr("lay-verify", "required|num");
} else {
$(".level-term>div").eq(_index).find("input").attr("lay-verify", "required|money");
}
}
});
form.on('submit(save)', function(data) {
{if $info.is_default eq 0}
data.field.level_num = $(".weight-list span.border-color").attr('value');
var arr = $(".layui-card-body").eq(2).children('.layui-form-item').length;
var arr1 = $(".layui-card-body").eq(2).children('.layui-form-item.layui-hide').length;
if (data.field.level_num == undefined){
layer.msg('请选择等级权重');
return;
}
if(arr==arr1){
layer.msg('请选择升级条件');
return;
}
{/if}
if (repeat_flag) return;
repeat_flag = true;
$.ajax({
type: 'POST',
dataType: 'JSON',
url: ns.url("fenxiao://shop/level/edit"),
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("fenxiao://shop/level/lists");
layer.close(index);
},
btn2: function(index, layero) {
layer.close(index);
}
});
}else{
layer.msg(res.message);
}
}
});
});
/**
* 表单验证
*/
form.verify({
num: function(value, item) {
var str = $(item).parents(".layui-form-item").find("label").text().split("*").join("");
str = str.substring(0, str.length - 1);
if (value <= 0) {
return str + '必须大于0';
}
if (value % 1 != 0) {
return str + '必须为整数';
}
},
money: function(value, item) {
var str = $(item).parents(".layui-form-item").find("label").text().split("*").join("");
str = str.substring(0, str.length - 1);
if (value < 0) {
return str + '不能小于0';
}
var arrMen = value.split(".");
var val = 0;
if (arrMen.length == 2) {
val = arrMen[1];
}
if (val.length > 2) {
return str + "最多可保留两位小数";
}
}
});
});
function delDiv(e) {
var _len = $(e).parents(".layui-form-item").index();
$(e).parents(".layui-form-item").addClass("layui-hide");
$(e).parents(".layui-form-item").find("input").removeAttr("lay-verify");
$(e).parents(".layui-form-item").find("input").val("");
$(".level-btn").eq(_len).removeClass("border-color");
}
function backFenxiaoLevelList() {
location.hash = ns.hash("fenxiao://shop/level/lists");
}
</script>

View File

@@ -0,0 +1,260 @@
<div class="single-filter-box">
<button class="layui-btn" onclick="clickAdd()">添加等级</button>
</div>
<!-- 列表 -->
<table id="level_list" lay-filter="level_list"></table>
<!-- 商品 -->
<script type="text/html" id="goods">
<div class="table-title">
<div class="title-pic">
<img layer-src src="{{ns.img(d.goods_image.split(',')[0],'small')}}"/>
</div>
<div class="title-content">
<a href="javascript:;" class="multi-line-hiding text-color">{{d.goods_name}}</a>
</div>
</div>
</script>
<!-- 时间 -->
<script id="time" type="text/html">
<div class="layui-elip">开始时间{{ns.time_to_date(d.start_time)}}</div>
<div class="layui-elip">结束时间{{ns.time_to_date(d.end_time)}}</div>
</script>
<!-- 状态 -->
<script type="text/html" id="status">
{{# if(d.status == 0){ }}
停用
{{# }else if(d.status == 1){ }}
启用
{{# } }}
</script>
<!-- 操作 -->
<script type="text/html" id="operation">
<div class="table-btn">
<a class="layui-btn" lay-event="edit">编辑</a>
{{# if(d.is_default == 0){ }}
<a class="layui-btn" lay-event="del">删除</a>
{{# } }}
</div>
</script>
<script>
layui.use('form', function() {
var table,
repeat_flag = false; //防重复标识
table = new Table({
elem: '#level_list',
url: ns.url("fenxiao://shop/level/lists"),
cols: [
[{
title: '等级',
unresize: 'false',
width: '10%',
templet: function (data) {
var level = new Array();
level[0] = '默认等级';
level[1] = '一级';
level[2] = '二级';
level[3] = '三级';
level[4] = '四级';
level[5] = '五级';
level[6] = '六级';
level[7] = '七级';
level[8] = '八级';
level[9] = '九级';
level[10] = '十级';
return level[data.level_num] != undefined ? level[data.level_num] : '';
}
}, {
field: 'level_name',
title: '等级名称',
unresize: 'false',
width: '10%'
}, {
field: 'one_rate',
title: '一级佣金比例',
unresize: 'false',
width: '10%',
templet: function(data) {
return data.one_rate + '%';
},
hide: {if $basics_info.level >= 1} false {else /} true {/if}
}, {
field: 'two_rate',
title: '二级佣金比例',
unresize: 'false',
width: '10%',
templet: function(data) {
return data.two_rate + '%';
},
hide: {if $basics_info.level >= 2} false {else /} true {/if}
}, {
field:'three_rate',
title: '三级佣金比例',
unresize: 'false',
width: '15%',
templet: function(data) {
return data.three_rate + '%';
},
hide: {if $basics_info.level >= 3} false {else /} true {/if}
}, {
title: '升级条件',
unresize: 'false',
width: '35%',
templet: function(data) {
if(data.level_num == 0){
return "默认等级";
}else{
var upgrade_content = '';
if(data.upgrade_type == 1){
upgrade_content += data.one_fenxiao_order_num == 0 ? '' : '一级分销订单总数大于等于' + data.one_fenxiao_order_num + ' 或者 ';
upgrade_content += data.one_fenxiao_order_money == 0 ? '' : '一级分销订单佣金总额大于等于' + data.one_fenxiao_order_money + ' 或者 ';
upgrade_content += data.one_fenxiao_total_order == 0 ? '' : '一级分销订单总额大于等于' + data.one_fenxiao_total_order + ' 或者 ';
upgrade_content += data.order_num == 0 ? '' : '自购订单总数大于等于' + data.order_num + ' 或者 ';
upgrade_content += data.order_money == 0 ? '' : '自购订单总额大于等于' + data.order_money + ' 或者 ';
upgrade_content += data.one_child_num == 0 ? '' : '下线人数大于等于' + data.one_child_num + ' 或者 ';
upgrade_content += data.one_child_fenxiao_num == 0 ? '' : '下线分销商人数大于等于' + data.one_child_fenxiao_num + ' 或者 ';
}else if(data.upgrade_type == 2){
upgrade_content += data.one_fenxiao_order_num == 0 ? '' : '一级分销订单总数大于等于' + data.one_fenxiao_order_num + ' 并且 ';
upgrade_content += data.one_fenxiao_order_money == 0 ? '' : '一级分销订单佣金总额大于等于' + data.one_fenxiao_order_money + ' 并且 ';
upgrade_content += data.one_fenxiao_total_order == 0 ? '' : '一级分销订单总额大于等于' + data.one_fenxiao_total_order + ' 并且 ';
upgrade_content += data.order_num == 0 ? '' : '自购订单总数大于等于' + data.order_num + ' 并且 ';
upgrade_content += data.order_money == 0 ? '' : '自购订单总额大于等于' + data.order_money + ' 并且 ';
upgrade_content += data.one_child_num == 0 ? '' : '下线人数大于等于' + data.one_child_num + ' 并且 ';
upgrade_content += data.one_child_fenxiao_num == 0 ? '' : '下线分销商人数大于等于' + data.one_child_fenxiao_num + ' 并且 ';
}
var upgrade_content = upgrade_content.replace(/ 或者 $/g,"");
var upgrade_content = upgrade_content.replace(/ 并且 $/g,"");
return upgrade_content;
}
}
}, {
title: '操作',
toolbar: '#operation',
unresize: 'false',
align:'right'
}]
],
});
/**
* 监听工具栏操作
*/
table.tool(function(obj) {
var data = obj.data;
switch (obj.event) {
case 'del': //删除
del(data.level_id);
break;
case 'start': //启用
start_status(data.level_id,1);
break;
case 'stop': //停用
stop_status(data.level_id,0);
break;
case 'edit': //编辑
location.hash = ns.hash("fenxiao://shop/level/edit", {"level_id": data.level_id});
break;
}
});
/**
* 删除
*/
function del(level_id){
if (repeat_flag) return false;
repeat_flag = true;
layer.confirm('确定要删除该分销等级吗?', function(index) {
layer.close(index);
$.ajax({
url: ns.url("fenxiao://shop/level/delete"),
data: {level_id:level_id},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
if (res.code == 0) {
table.reload();
}
}
});
}, function () {
layer.close();
repeat_flag = false;
});
}
/**
* 停用
*/
function stop_status(level_id,type){
if (repeat_flag) return false;
repeat_flag = true;
layer.confirm('确定要停用该分销等级吗?', function(index) {
layer.close(index);
$.ajax({
url: ns.url("fenxiao://shop/level/status"),
data: {level_id:level_id,type:type},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
if (res.code == 0) {
table.reload();
}
}
});
}, function () {
layer.close();
repeat_flag = false;
});
}
/**
* 启用
*/
function start_status(level_id,type){
if (repeat_flag) return false;
repeat_flag = true;
layer.confirm('确定要启用该分销等级吗?', function(index) {
layer.close(index);
$.ajax({
url: ns.url("fenxiao://shop/level/status"),
data: {level_id:level_id,type:type},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
if (res.code == 0) {
table.reload();
}
}
});
}, function () {
layer.close();
repeat_flag = false;
});
}
});
function clickAdd()
{
location.hash = ns.hash('fenxiao://shop/level/add');
}
</script>

View File

@@ -0,0 +1,202 @@
<style>
.layui-form-item{margin-bottom: 0;}
.product-info .img-block{width:60px;height:60px;float:left;border:1px solid #e2e2e2;display: flex;align-items: center;justify-content: center;}
.product-info .img-block>img{max-width:100%;max-height:100%;}
.product-info .info{margin-left:70px}
.product-info .info p{color:#8e8c8c;font-size:12px}
.commission-info dl{display: flex;align-items: center;margin-bottom: 10px}
.commission-info dl:last-child{margin-bottom: 0;}
.commission-info dl dd{flex: 1;padding-left: 10px;}
.address{height: 0;width: 1px; border: none; overflow: hidden;}
</style>
<div class="order-detail">
<div class="layui-row layui-col-space1 order-detail-info" >
<div class="order-detail-left" >
<div class="layui-card card-common card-brief">
<div class="layui-card-header nav-title">
<span class="card-title">订单信息</span>
</div>
<div class="layui-card-body">
<div class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label">订单编号:</label>
<div class="layui-input-block">
<div class="layui-inline">
<div class="layui-form-mid layui-word-aux">{$order_detail['order_no']}</div>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">订单类型:</label>
<div class="layui-input-block">
<div class="layui-inline">
<div class="layui-form-mid layui-word-aux">{$order_detail['order_type_name']}</div>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">订单来源:</label>
<div class="layui-input-block">
<div class="layui-inline">
<div class="layui-form-mid layui-word-aux">
<p>{$order_detail.order_from_name}</p>
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">付款方式:</label>
<div class="layui-input-block">
<div class="layui-inline">
<div class="layui-form-mid layui-word-aux">{$order_detail.pay_type_name}</div>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">买家:</label>
<div class="layui-input-block">
<div class="layui-inline">
<div class="layui-form-mid layui-word-aux">{$order_detail.nickname}</div>
</div>
</div>
</div>
<div class="layui-form-item order-detail-hr"></div>
<div class="layui-form-item">
<label class="layui-form-label">配送方式:</label>
<div class="layui-input-block">
<div class="layui-inline">
<div class="layui-form-mid layui-word-aux">
<p>{$order_detail['delivery_type_name']}</p>
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">收货人:</label>
<div class="layui-input-block">
<div class="layui-inline">
<div class="layui-form-mid layui-word-aux">
<p>{$order_detail['name']}</p>
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">联系电话:</label>
<div class="layui-input-block">
<div class="layui-inline">
<div class="layui-form-mid layui-word-aux">
<p>{$order_detail['mobile']}</p>
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">收货地址:</label>
<div class="layui-input-block">
<div class="layui-inline">
<div class="layui-form-mid layui-word-aux">
<p>{$order_detail['full_address']}-{$order_detail['address']}
<input type="text" class="address" id="address" value="{$order_detail['full_address']}-{$order_detail['address']}">
<a href="javascript:ns.copy('address');" class="iconfont iconfuzhi" style="margin-top: 4px"></a>
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div style="height: 15px;"></div>
{notempty name="$order_detail['order_goods']"}
<div class="order-detail-table">
<table class="layui-table" lay-filter="parse-table-order-product" lay-skin="line" lay-size="lg">
<thead>
<colgroup>
<col width="35%">
<col width="20%">
<col width="30%">
<col width="15%">
</colgroup>
<tr>
<th>商品信息</th>
<th style="text-align:right">单价(元) / 数量</th>
<th>分佣信息</th>
<th>佣金状态</th>
</tr>
</thead>
<tbody>
{foreach $order_detail['order_goods'] as $list_k => $order_goods_item}
<tr>
<td>
<div class="product-info">
<div class="img-block">';
<img layer-src src="{:img($order_goods_item.sku_image, 'small')}">
</div>
<div class="info">
<span title="{$order_goods_item.sku_name}" class="multi-line-hiding text-color">{$order_goods_item.sku_name}</span>
</div>
</div>
</td>
<td style="text-align:right;">
<div>{$order_goods_item.price}</div>
<div>{$order_goods_item.num}件</div>
</td>
<td class="commission-info">
<dl>
<dt>一级分佣</dt>
<dd>
{if $order_goods_item.one_commission > 0}
<div class="title-left">分销商:{$order_goods_item.one_fenxiao_name}</div>
<div class="title-left">佣金:¥{$order_goods_item.one_commission}</div>
{else/}
<div class="title-left">分销商:--</div>
<div class="title-left">佣金:--</div>
<div class="title-left">分佣比率:--</div>
{/if}
</dd>
</dl>
<dl>
<dt>二级分佣</dt>
<dd>
{if $order_goods_item.two_commission > 0}
<div class="title-left">分销商:{$order_goods_item.two_fenxiao_name}</div>
<div class="title-left">佣金:¥{$order_goods_item.two_commission}</div>
{else/}
<div class="title-left">分销商:--</div>
<div class="title-left">佣金:--</div>
{/if}
</dd>
</dl>
<dl>
<dt>三级分佣</dt>
<dd>
{if $order_goods_item.three_commission > 0}
<div class="title-left">分销商:{$order_goods_item.three_fenxiao_name}</div>
<div class="title-left">佣金:¥{$order_goods_item.three_commission}</div>
{else/}
<div class="title-left">分销商:--</div>
<div class="title-left">佣金:--</div>
{/if}
</dd>
</dl>
</td>
<td colspan="{:count($order_detail['order_goods'])}">
{if $order_detail.order_status == -1}
{$order_detail.order_status_name}
{else/}
{$order_detail['order_goods'][0]['is_settlement'] == 1 ? '已结算': '待结算'}
{/if}
</td>
</tr>
{/foreach}
</tbody>
</table>
</div>
{/notempty}

View File

@@ -0,0 +1,236 @@
<link rel="stylesheet" href="FENXIAO_CSS/order_list.css">
<style>
.screen{margin-top: 0;}
</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_text_type" >
<option value="order_no">订单编号</option>
<option value="sku_name">商品名称</option>
</select>
</div>
<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" lay-filter="is_settlement">
<option value="">全部</option>
<option value="1">待结算</option>
<option value="2">已结算</option>
</select>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">下单时间:</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="start_time" placeholder="开始时间" id="start_time" readonly>
<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" placeholder="结束时间" id="end_time" readonly>
<i class=" iconrili iconfont calendar"></i>
</div>
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="search">筛选</button>
<button class="layui-btn layui-btn-primary" lay-submit lay-filter="batch_export_order" >导出订单</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
</div>
</div>
<div class="layui-tab table-tab">
<div class="layui-tab-content">
<!-- 列表 -->
<div id="order_list"></div>
</div>
</div>
<div id="order_page"></div>
<script src="FENXIAO_JS/order_list.js"></script>
<script>
var laypage,element, form;
var orderDataAll = [];
// 通过hash获取页数
function getHashPage(){
var page = 1;
var hash_arr = getHashArr();
$.each(hash_arr,function(index, itemobj){
var item_arr = itemobj.split("=");
if(item_arr.length == 2){
if(item_arr[0].indexOf("page") != "-1"){
page = item_arr[1];
}
}
});
return page;
}
//从hash中获取数据
function getHashData(){
var hash_arr = getHashArr();
var form_json = {
"end_time" : "",
"order_label" : $("select[name=order_label]").val(),
"status" : "",
"search" : "",
"start_time" : "",
"page" : ""
};
if(hash_arr.length > 0){
$.each(hash_arr,function(index, itemobj){
var item_arr = itemobj.split("=");
if(item_arr.length == 2){
$.each(form_json,function(key, form_val){
if(item_arr[0].indexOf(key) != "-1"){
form_json[key] = item_arr[1];
}
})
}
})
}
form.val("order_list", form_json);
return form_json;
}
layui.use(['laypage','laydate','form', 'element'], function(){
form = layui.form;
laypage = layui.laypage;
element = layui.element;
var laydate = layui.laydate;
form.render();
//渲染时间
laydate.render({
elem: '#start_time'
,type: 'datetime'
,change: function(value, date, endDate){
$(".date-picker-btn").removeClass("selected");
}
});
laydate.render({
elem: '#end_time'
,type: 'datetime'
,change: function(value, date, endDate){
$(".date-picker-btn").removeClass("selected");
}
});
//监听筛选事件
form.on('submit(search)', function(data){
data.field.page = 1;
setHashOrderList(data.field);
//getOrderList(data.field);
return false;
});
form.on('submit(batch_export_order)', function(data){
if(orderDataAll){
var orderDataString = orderDataAll.toString();
location.href = ns.url("fenxiao://shop/order/exportorder?request_mode=download&order_ids=" + orderDataString);
}else{
location.href = ns.url("fenxiao://shop/order/exportorder?request_mode=download",data.field);
}
return false;
});
getHashData();
getOrderList();//筛选
});
//哈希值 订单数据
function setHashOrderList(data){
localStorage.setItem('formSubmit','search'); // 表单搜索标识,防止页面重新加载
var hash = ['url=fenxiao://shop/order/lists'];
for (var key in data) {
if (data[key] != '' && data[key] != 'all') {
hash.push(`${key}=${data[key]}`)
}
}
location.hash = hash.join('&');
getOrderList();
}
var order = new Order();
function getOrderList(data){
var url = ns.url("fenxiao://shop/order/lists",getHashArr().join('&'));
$.ajax({
type : 'post',
dataType: 'json',
url :url,
data: data,
success : function(res){
if(res.code == 0){
order.setData(res.data);
$("#order_list").html(order.fetch());
form.render();
//批量选择
form.on('checkbox(allCheckbox)', function(data){
$(".sub-selected-checkbox input").prop("checked",data.elem.checked);
$(".all-selected-checkbox input").prop("checked",data.elem.checked);
form.render("checkbox");
getOrderId();
});
//全选选择
form.on('checkbox(subCheckbox)', function(data){
var subLen = $(".sub-selected-checkbox input:checked").length;
$(".all-selected-checkbox input").prop("checked",false);
if (subLen == 10){
$(".all-selected-checkbox input").prop("checked",true);
}
form.render("checkbox");
getOrderId();
});
//获取选中的id
function getOrderId(){
var lists = $(".sub-selected-checkbox input:checked");
orderDataAll = [];
lists.each(function(index,item){
orderDataAll.push(JSON.parse($(item).parents(".sub-selected-checkbox").attr("data-json")));
});
}
laypage.render({
elem: 'order_page',
count: res.data.count,
curr: getHashPage(),
layout: ['count', 'prev', 'page', 'next'],
jump: function(obj, first){
//首次不执行
if(!first){
var hash_data = getHashData();
hash_data.page = obj.curr;
setHashOrderList(hash_data);
}
}
});
}else{
layer.msg(res.message);
}
}
});
}
</script>

View File

@@ -0,0 +1,521 @@
<style>
.layui-layout-admin .layui-body .body-content {
min-height: initial;
padding-top: 0;
padding-bottom: 0;
margin: 0;
}
.layui-form-label.mid {
width: 100px;
}
.layui-form-label.mid+.layui-input-block {
margin-left: 100px;
}
.new-mid {
margin-left: -20px !important;
}
.poster-form {
display: flex;
background: #eee;
}
.poster-left {
width: 400px;
height: 800px;
background: #FFFFFF;
padding: 10px 30px 10px 10px;
}
.poster-left-header {
font-size: 18px;
border-bottom: 1px solid #eee;
padding: 0 0 10px 0;
margin: 0 0 10px 0;
}
.layui-input-block {
margin-left: 0;
}
.poster-headimg,
.poster-name {
display: flex;
}
.poster-right {
width: 360px;
height: 640px;
opacity: 0.9;
margin: 20px 0 0 271px;
background-color: #fff;
}
.tips {
width: 153px;
height: 16px;
font-size: 12px;
font-family: Microsoft YaHei;
font-weight: 400;
color: #909399;
padding-left: 100px;
}
.album-img-select {
height: 30px;
line-height: 30px;
margin: 0 0 5px 20px;
}
.upload-img-block {
width: 300px;
height: 100px;
}
.form-row {
padding-top: 20px;
}
.poster-tips {
background: #fff;
width: 280px;
margin-left: 320px;
padding: 20px 20px;
border: 1px solid #e8e8e8;
border-right: none;
}
.set-tips {
font-size: 16px;
font-family: Microsoft YaHei;
font-weight: bolder;
color: #303133;
line-height: 22px;
}
.content {
font-size: 12px;
font-family: Microsoft YaHei;
font-weight: 400;
color: #909399;
line-height: 22px;
margin-top: 10px;
}
.layui-nav-more1 {
width: 7px;
height: 7px;
border-width: 1px;
border-color: #333 #333 transparent transparent;
border-style: solid;
transform: rotate(135deg);
top: 16px;
right: 16px;
margin-top: 7px;
}
.layui-nav-more2 {
width: 7px;
height: 7px;
border-width: 1px;
border-color: #333 #333 transparent transparent;
border-style: solid;
transform: rotate(135deg);
top: 16px;
right: 16px;
margin-top: 7px;
}
.layui-new-more1 {
transform: rotate(45deg);
}
.layui-new-more2 {
transform: rotate(45deg);
}
.layui-colorpicker {
margin-left: 15px;
}
.form-row {
position: fixed;
bottom: 0px;
left: 0;
width: 89.7%;
background: #fff;
padding: 10px 0;
display: flex;
justify-content: center;
}
.form-row button{
margin-right: 20px;
}
.layui-colorpicker-main-input .layui-btn {
padding: 0 10px;
}
.circle {
border-radius: 50%;
}
.upload img {
margin-top: 20px;
}
.img_prev {
margin-top: 0 !important;
}
</style>
<div class="layui-form add-poster">
<div class="poster-form">
<div id="view" style="display: flex;"></div>
<div class="poster-tips">
<div class="set-tips">海报设置说明</div>
<div class="content">
1. 用户头像,用户昵称这两个元素需要空出<br>
2. 裂变海报其他部分皆可自定义设计<br>
3. 可自行拖拉设置相应元素的大小
</div>
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save_poster">保存</button>
<input type="hidden" name="template_id" value='{notempty name="$template_data"}{$template_data.template_id}{/notempty}'>
<button class="layui-btn layui-btn-primary" onclick="backFenxiaoPosterTemplateList()">返回</button>
</div>
</div>
<script type="text/html" id="poster_left">
<div class="poster-left">
<div class="poster-left-header">基础设置</div>
<div class="layui-form-item">
<label class="layui-form-label mid"><span class="required">*</span></label>
<div class="layui-input-block mid">
<input type="text" class="layui-input" lay-verify="required" placeholder="请输入海报名称" name="poster_name" value="{{d.poster_name || ''}}"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label mid"><span class="required">*</span></label>
<div class="layui-input-block mid">
<input type="text" class="layui-input" lay-verify="required" placeholder="请输入宣传语" name="share_content" value="{{d.share_content || ''}}"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label short-label mid"><span class="required">*</span></label>
<div class="layui-input-block mid">
<div class="upload-img-block icon">
<div class="upload-img-box {{d.background ? 'hover' : ''}}" >
<div class="upload-default" id="posterImg">
{{# if (d.background) { }}
<div id="preview_posterImg" class="preview_img">
<img layer-src src='{{ ns.img(d.background) }}' class="img_prev" data-id="qr_img"/>
<p style="width: 300px;"></p>
</div>
{{# } else { }}
<div class="upload">
<i class="iconfont iconshangchuan"></i>
<p>点击上传</p>
</div>
{{# } }}
</div>
<div class="operation">
<div style="position: absolute; top: -10px; left: 110px;">
<i title="图片预览" class="iconfont iconreview js-preview"></i>
<i title="删除图片" class="layui-icon layui-icon-delete js-delete"></i>
</div>
<div class="replace_img js-replace">点击替换</div>
</div>
<input type="hidden" lay-verify="background" name="background" value='{{d.background}}' />
</div>
</div>
</div>
</div>
<div class="tips">建议图片尺寸720*1280px</div>
<div class="layui-form-item poster-headimg">
<div class="layui-form album-img-select">
<input type="checkbox" name="switch" lay-filter="headimg" value="" lay-skin="primary" {{d.headimg_is_show == '1' ? 'checked' : ''}}>
</div>
<label class="layui-form-label mid" style="text-align: left;">用户头像</label>
<div class="layui-input-block mid new-mid">
<div class="layui-input-block">
<input type="radio" lay-filter="headimg" name="shop_status" value="circle" title="圆形" {{d.headimg_shape == 'circle' ? 'checked' : ''}}>
<input type="radio" lay-filter="headimg" name="shop_status" value="square" title="方形" {{d.headimg_shape == 'square' ? 'checked' : ''}}>
</div>
</div>
</div>
<div class="layui-form-item poster-name">
<div class="layui-form album-img-select">
<input type="checkbox" name="check[]" lay-filter="nickname" value="" lay-skin="primary" {{d.nickname_is_show == '1' ? 'checked' : ''}}>
</div>
<label class="layui-form-label mid" style="text-align: left;">用户昵称</label>
<div class="layui-input-block mid new-mid">
<div class="poster-name-box">
<div class="layui-form poster-select len-short" lay-filter="poster-select">
<select name="" lay-filter="nickname">
{{# for (var font_index = 14; font_index <= 36; font_index++) { }}
{{# if (font_index == d.nickname_font_size) { }}
<option value="{{font_index}}" selected>{{font_index}}px</option>
{{# } else { }}
<option value="{{font_index}}">{{font_index}}px</option>
{{# } }}
{{# } }}
</select>
</div>
</div>
</div>
<div class="layui-form poster_color_nickname">
颜色
<div>
<input type="hidden" name="color" id="friendfission-all-input">
<div class="friendfission-all"></div>
</div>
</div>
</div>
<div class="layui-form-item poster-name">
<div class="layui-form album-img-select">
<input type="checkbox" name="check[]" lay-filter="share_content" value="" lay-skin="primary" {{d.share_content_is_show == '1' ? 'checked' : ''}}>
</div>
<label class="layui-form-label mid" style="text-align: left;">宣传语</label>
<div class="layui-input-block mid new-mid">
<div class="poster-name-box">
<div class="layui-form poster-select len-short" lay-filter="poster-select">
<select name="" lay-filter="share_content">
{{# for (var font_index = 14; font_index <= 36; font_index++) { }}
{{# if (font_index == d.share_content_font_size) { }}
<option value="{{font_index}}" selected>{{font_index}}px</option>
{{# } else { }}
<option value="{{font_index}}">{{font_index}}px</option>
{{# } }}
{{# } }}
</select>
</div>
</div>
</div>
<div class="layui-form poster_color_share_content">
颜色
<div>
<input type="hidden" name="color" id="friendfission-all-input">
<div class="friendfission-all"></div>
</div>
</div>
</div>
</div>
<div class="poster-right design-sketch" style="position: relative;border: 1px solid #d6d6d6;
{notempty name='$template_data.background'}background-image:url({:img($template_data.background)}); background-size: 100% 100%; background-repeat: no-repeat;{/notempty}
{{# if (d.background) { }}background-image:url({{ ns.img(d.background) }});background-size: 100% 100%;background-repeat: no-repeat;{{# } }}
">
<div class="headimg {{d.headimg_is_show == '1' ? '' : 'layui-hide'}}" style="position:absolute;top: {{d.headimg_top}}px; left: {{d.headimg_left}}px; width: {{d.headimg_width}}px; height: {{d.headimg_height}}px;">
<img alt="" class="{{d.headimg_shape == 'circle' ? 'circle' : ''}}" src="__STATIC__/img/caner1.png" width="100%" />
</div>
<div class="nickname {{d.nickname_is_show == '1' ? '' : 'layui-hide'}}" style="position:absolute;top: {{d.nickname_top}}px; left: {{d.nickname_left}}px; width: {{d.nickname_width}}px; color: {{d.nickname_color}}; font-size: {{d.nickname_font_size}}px;">
<span class="design-text">用户昵称</span>
</div>
<div style="margin: 10px;">
<div class="share_content {{d.share_content_is_show == '1' ? '' : 'layui-hide'}}" style="position:absolute;top: {{d.share_content_top}}px; color: {{d.share_content_color}}; left: {{d.share_content_left}}px; width: {{d.share_content_width}}px; height: {{d.share_content_height}}px; font-size: {{d.share_content_font_size}}px;">
<span class="design-text">{{d.share_content}}</span>
</div>
</div>
<div class="qrcode" style="top: {{d.qrcode_top}}px; left: {{d.qrcode_left}}px; height: {{d.qrcode_height}}px; width: {{d.qrcode_width}}px;">
<img alt="" src="__STATIC__/img/caner_erweima.png" width="100%" />
</div>
</div>
</script>
<script src="STATIC_JS/tdrag.js"></script>
<script>
var form, laytpl, laypage, laydate, colorpicker, repeat_flag = false;
var poster_detail = JSON.parse('{:json_encode($template_info)}');
layui.use(['form', 'laytpl', 'colorpicker'], function() {
var form = layui.form,
laytpl = layui.laytpl,
colorpicker = layui.colorpicker,
repeat_flag = false; //防重复标识
form.render();
laytpl($("#poster_left").html()).render(poster_detail, function(html) {
$('#view').html(html);
form.render();
new Upload({
elem: '#posterImg',
data: {
},
callback: function(res) {
if (res.code >= 0) {
$('.poster-right').css({
"background-image": `url('${ns.img(res.data.pic_path)}')`,
"background-size": "100% 100%",
"background-repeat": "no-repeat"
});
poster_detail.background = res.data.pic_path;
$("input[name='background']").val(res.data.pic_path)
}
},
deleteCallback: function() {
poster_detail.background = '';
$("input[name='background']").val('')
}
});
});
//是否显示的控制
var checkbox_field_arr = ['headimg', 'nickname', 'share_content'];
checkbox_field_arr.forEach(function(field_name, index){
form.on('checkbox('+ field_name +')', function(data) {
poster_detail[field_name + '_is_show'] = data.elem.checked ? '1' : '0';
if (data.elem.checked) {
$("."+ field_name).removeClass("layui-hide");
} else {
$("."+ field_name).addClass("layui-hide");
}
})
});
//字体大小控制
var font_field_arr = ['nickname', 'share_content'];
font_field_arr.forEach(function(field_name, index){
form.on('select('+ field_name +')', function(data) {
poster_detail[field_name + '_font_size'] = data.value;
$("."+ field_name).css("font-size", data.value + "px")
});
});
//字体颜色控制
var color_field_arr = ['nickname', 'share_content'];
color_field_arr.forEach(function(field_name, index){
colorpicker.render({
elem: '.poster_color_' + field_name, //绑定元素
color: poster_detail[field_name + '_color'],
done: function(color) {
$("."+ field_name).css("color", color);
poster_detail[field_name + '_color'] = color;
}
});
});
//圆角控制
var shape_field_arr = ['headimg'];
shape_field_arr.forEach(function(field_name, index){
form.on('radio('+ field_name +')', function(data) {
var shape = data.value;
poster_detail[field_name + '_shape'] = shape;
if(shape == 'circle'){
$("."+ field_name +" img").addClass('circle');
}else{
$("."+ field_name +" img").removeClass('circle');
}
})
});
//拖拽控制
var drag_field_arr = ['headimg', 'nickname', 'qrcode', 'share_content'];
drag_field_arr.forEach((field_name, index) => {
$(`.${field_name}`).Tdrag({
scope: '.design-sketch',
cbChange: function(obj, self) {
poster_detail[field_name + '_top'] = parseFloat($(self.$element).css('top'));
poster_detail[field_name + '_left'] =parseFloat($(self.$element).css('left'));
poster_detail[field_name + '_width'] = parseFloat($(self.$element).css('width'));
poster_detail[field_name + '_height'] = parseFloat($(self.$element).css('height'));
},
cbEnd: function (obj, self) {
poster_detail[field_name + '_top'] = parseFloat($(self.$element).css('top'));
poster_detail[field_name + '_left'] =parseFloat($(self.$element).css('left'));
poster_detail[field_name + '_width'] = parseFloat($(self.$element).css('width'));
poster_detail[field_name + '_height'] = parseFloat($(self.$element).css('height'));
}
});
});
form.verify({
background: function(value){
if(!value){
return '请上传海报背景';
}
}
});
/**
* 监听提交
*/
form.on('submit(save_poster)', function(data) {
poster_detail.poster_name = data.field.poster_name;
poster_detail.share_content = data.field.share_content;
if (repeat_flag) return false;
repeat_flag = true;
$.ajax({
url: ns.url("fenxiao://shop/postertemplate/"+ (poster_detail['template_id'] ? 'edit' : 'add') +"postertemplate"),
data:poster_detail,
dataType: 'JSON', //服务器返回json格式数据
type: 'POST', //HTTP请求类型
success: function(res) {
repeat_flag = false;
if(res.code == 0){
layer.confirm(poster_detail['template_id'] ? '编辑成功' : '添加成功',{
title: '操作提示',
btn: ['返回列表',poster_detail['template_id'] ? '继续编辑' : '继续添加'],
closeBtn: 0,
yes: function(index, layero) {
location.hash = ns.hash("fenxiao://shop/postertemplate/lists");
layer.close(index);
},
btn2: function(index, layero) {
listenerHash(); // 刷新页面
layer.close(index);
}
})
} else {
layer.msg(res.message);
}
}
});
});
});
function backFenxiaoPosterTemplateList() {
location.hash = ns.hash("fenxiao://shop/postertemplate/lists");
localStorage.removeItem("poster_data");
}
$('body').off('click', '.layui-nav-more1').on('click', '.layui-nav-more1', function() {
$(this).addClass('layui-new-more1');
$('.layer-form').css("display", 'none');
});
$('body').off('click', '.layui-new-more1').on('click', '.layui-new-more1', function() {
$(this).removeClass('layui-new-more1');
$('.layer-form').css("display", 'block');
});
$('body').off('click', '.layui-nav-more2').on('click', '.layui-nav-more2', function() {
$(this).addClass('layui-new-more2');
$('.layer-form2').css("display", 'none');
});
$('body').off('click', '.layui-new-more2').on('click', '.layui-new-more2', function() {
$(this).removeClass('layui-new-more2');
$('.layer-form2').css("display", 'block');
});
$('body').off('click', '.js-delete').on('click', '.js-delete', function() {
$('.poster-right').css("background-image", 'none');
});
</script>

View File

@@ -0,0 +1,316 @@
<style type="text/css">
.iconadd_light{font-size: 40px;}
.good-poster{width: 240px;height: 413px;margin:0 0 10px 30px;text-align: center;position: relative;cursor: pointer;}
</style>
<div class="single-filter-box">
<button class="layui-btn add-button" onclick="add()">添加海报</button>
</div>
<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="请输入海报名称" class="layui-input" autocomplete="off">
</div>
</div>
</div>
<div class="form-row">
<button type="button" class="layui-btn" lay-filter="search" lay-submit>筛选</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
</div>
</div>
<div class="layui-tab table-tab" lay-filter="manjian_tab">
<div class="layui-tab-content">
<!-- 列表 -->
<table id="poster_list" lay-filter="poster_list"></table>
</div>
</div>
<script type="text/html" id="qr_img">
<div class='table-title'>
<div class='title-pic'>
<img layer-src src="{{ns.img()}}" onerror="this.src = '{:img('public/static/img/default_img/head.png')}' ">
</div>
</div>
</script>
<script type="text/html" id="poster_status">
<div class='table-title'>
{{# if(d.template_status == 0){ }}
<div class='title-pic' style="text-align:left">未启用</div>
{{# }else{ }}
<div class='title-pic text-color' style="text-align:left">启用</div>
{{# } }}
</div>
</script>
<!-- 操作 -->
<script type="text/html" id="operation">
<div class="table-btn">
<a class="layui-btn" lay-event="detail">预览</a>
<a class="layui-btn" lay-event="edit">编辑</a>
{{# if(d.template_status==0){ }}
<a class="layui-btn" lay-event="start">启用</a>
<a class="layui-btn" lay-event="delete">删除</a>
{{# }else{ }}
<a class="layui-btn" lay-event="close">关闭</a>
{{# } }}
</div>
</script>
<script type="text/html" id="add">
<div style="display: flex;">
<div>
<div class="border-color text-color" style="width: 240px; height: 413px; border: 1px dashed;text-align: center; line-height: 413px; cursor: pointer; display: inline-block;" onclick="toAdd()">
<i class="iconfont iconadd_light"></i>
</div>
<div style="text-align: center; margin-top: 10px;">自定义海报</div>
</div>
<div style="display: inline-block; position: relative;">
<div style="display: flex;">
{{# d.forEach(function(item, index){ }}
<li class="good-poster" onclick="toAdd({{ item.muban_id }})">
<span class="iconfont" ></span>
<img data-id="1" style="width: 100%;" src="{{ item.image }}">
<span style="color: #000000; font-size: 14px;">{{ item.name }}</span>
<div class="js-zhezhao" ></div>
</li>
{{# }) }}
</div>
</div>
</div>
</script>
<!-- 详情弹框html -->
<script type="text/html" id="detail">
<img layer-src src="{{ns.img(d)}}" style="width: 360px; height: 640px;" />
</script>
<script>
var laytpl,template_id,table,form,repeat_flag = false;
layui.use(['form', 'element', 'laytpl'], function() {
form = layui.form;
element = layui.element;
laytpl = layui.laytpl;
form.render();
table = new Table({
elem: '#poster_list',
url: ns.url("fenxiao://shop/postertemplate/lists"),
cols: [
[ {
field: 'poster_name',
title: '海报名称',
unresize: 'false',
width: '15%',
}, {
field: 'template_status',
title: '海报状态',
unresize: 'false',
width: '60%',
templet: '#poster_status'
}, {
title: '操作',
toolbar: '#operation',
unresize: 'false',
align:'right'
}]
]
});
/**
* 监听工具栏操作
*/
table.tool(function(obj) {
var data = obj.data;
switch (obj.event) {
case 'detail': //预览
detailPoster(data.template_id);
break;
case 'edit': //编辑
location.hash = ns.hash("fenxiao://shop/postertemplate/editpostertemplate", {
"template_id": data.template_id
});
break;
case 'delete': //删除
deletePoster(data.template_id, data.template_status);
break;
case 'close': //关闭
close(data.template_id);
break;
case 'start': //启用
start(data.template_id);
break;
}
});
/**
* 删除
*/
function deletePoster(template_ids, template_status) {
if (template_status == 1) {
return layer.msg('请先关闭海报后再删除');
}
layer.confirm('确定要删除该海报吗?', function(index) {
if (repeat_flag) return false;
repeat_flag = true;
layer.close(index);
$.ajax({
url: ns.url("fenxiao://shop/postertemplate/delpostertemplate"),
data: {
template_ids: template_ids
},
dataType: 'JSON',
type: 'POST',
success: function(res) {
repeat_flag = false;
layer.msg(res.message);
if (res.code == 0) {
table.reload({
page: {
curr: 1
},
});
}
}
});
}, function() {
layer.close();
});
}
/**
* 关闭
*/
function close(template_id) {
layer.confirm('确定关闭吗?', function(index) {
if (repeat_flag) return false;
repeat_flag = true;
layer.close(index);
$.ajax({
url: ns.url("fenxiao://shop/postertemplate/editstatus"),
data: {
template_id: template_id,
template_status: 0
},
dataType: 'JSON',
type: 'POST',
success: function(res) {
repeat_flag = false;
layer.msg(res.message);
if (res.code == 0) {
table.reload();
}
}
});
});
}
/**
* 预览
*/
function detailPoster(template_id) {
if (repeat_flag) return false;
repeat_flag = true;
$.ajax({
url: ns.url("fenxiao://shop/postertemplate/postertemplatedetail"),
data: {
template_id: template_id,
},
dataType: 'JSON',
type: 'POST',
success: function(res) {
repeat_flag = false;
if (res.code >= 0) {
laytpl($("#detail").html()).render(res.data, function(html) {
layer.open({
type: 1,
shadeClose: true,
shade: 0.3,
offset: 'auto',
fixed: false,
title: "预览",
area: ['400px', '760px'],
btn: ['关闭'],
content: html,
skin: 'detail'
});
})
}else{
layer.msg(res.message || '操作错误');
}
}
});
}
/**
* 开启
*/
function start(template_id) {
layer.confirm('确定启用吗?', function(index) {
if (repeat_flag) return false;
repeat_flag = true;
layer.close(index);
$.ajax({
url: ns.url("fenxiao://shop/postertemplate/editstatus"),
data: {
template_id: template_id,
template_status: 1
},
dataType: 'JSON',
type: 'POST',
success: function(res) {
repeat_flag = false;
layer.msg(res.message);
if (res.code == 0) {
table.reload();
}
}
});
});
}
/**
* 搜索功能
*/
form.on('submit(search)', function(data) {
table.reload({
page: {
curr: 1
},
where: data.field
});
});
});
function add() {
var mubanList = [
{muban_id: 4, name:'分销海报1', image:"__ROOT__/addon/fenxiao/shop/view/public/img/poster1.jpg"},
];
laytpl($("#add").html()).render(mubanList, function(html) {
layer.open({
type: 1,
shadeClose: true,
shade: 0.3,
offset: 'auto',
fixed: false,
title: "添加海报",
area: ['560px', '560px'],
btnAlign: 'c',
content: html,
skin: 'add',
});
})
}
function toAdd(muban_id) {
location.hash = ns.hash("fenxiao://shop/postertemplate/addpostertemplate", {muban_id:muban_id});
}
</script>

View File

@@ -0,0 +1,49 @@
.layui-table {margin-top: 15px;}
.layui-table thead tr {background-color: #F8F6F9;}
.layui-table th {border-width: 0; font-size: 14px!important;}
.layui-table td {padding: 8px 15px;}
.layui-table-cell {height: 32px; line-height: 32px;font-size: 12px;}
.layui-table .header-row {border-top: 1px solid #e6e6e6;background: #f7f7f7;}
.layui-table .header-row:hover{background: #f7f7f7;}
.separation-row hr {margin: 0;}
.screen {margin-top: 15px;}
.layui-layout-admin .layui-form-item .layui-input-inline{background-color: #fff;}
/* .layui-layout-admin .layui-body{min-width:1100px} */
/*.date-picker-btn.selected{background-color:#0d73f9;color:#fff}*/
.layui-table td,.layui-table th,.layui-table-fixed-r,.layui-table-header,.layui-table-page,.layui-table-tips-main,.layui-table-tool,.layui-table-view,.layui-table[lay-skin=line],.layui-table[lay-skin=row]{border-color:#f1f1f1 !important;}
.layui-table thead th{border-bottom:none;padding-left:0;padding-right:0;}
.order-list-table .separation-row td{padding:10px 20px;border: 0;}
.order-list-table .separation-row:hover{background-color: #fff;}
.order-list-table .header-row td{padding: 3px 15px!important;}
.order-list-table .header-row td:nth-child(1){border-right: 0;}
.order-list-table .header-row td:nth-child(2){text-align:center;border-left: 0;}
.order-list-table .header-row span{vertical-align:middle}
/*.order-list-table .header-row td .order-item-header:first-child{margin-left:18px}*/
.order-list-table .header-row td .order-item-header{text-align:left;color:#333;}
.order-list-table .header-row td .order-item-header.more{cursor: pointer;overflow: hidden;position: relative;}
.order-list-table .header-row td .more-operation{display: none;font-size: 14px;line-height: 20px;background-color: #fff;border-radius: 2px;box-shadow: 0 2px 8px 0 rgba(200,201,204,.5);position: absolute;z-index: 2000;padding: 10px;top: 28px;transform: translateX(10px);left: -12px;width: 200px;}
.order-list-table .header-row td .more-operation:before{left: 8px;top: -14px;border: solid transparent;content: "";height: 0;width: 0;position: absolute;pointer-events: none;border-color: transparent;border-bottom-color: #fff;border-width: 8px;}
.order-list-table .header-row td .more-operation span{color:#333;}
.order-list-table .checkbox-all .layui-table-cell{padding:0;text-align:center}
.order-list-table .product-info .layui-table-cell{padding:0 5px}
.order-list-table .content-row:hover{background-color:#fff !important;}
.order-list-table .content-row .product-info{border-right: 0;}
.order-list-table .content-row .product-info .img-block{width:60px;height:60px;float:left;border:1px solid #e2e2e2;display: flex;align-items: center;justify-content: center;}
.order-list-table .content-row .product-info .img-block>img{max-width:100%;max-height:100%;}
.order-list-table .content-row .product-info .info{margin-left:70px}
.order-list-table .content-row .product-info .info p{color:#8e8c8c;font-size:12px}
.order-list-table .content-row .order-price{border-left: 0;}
.order-list-table .content-row .product-list{border-right-width:1px}
.order-list-table .content-row .product-list p{font-size:12px}
.order-list-table .content-row .transaction-status{line-height: 24px;}
.order-list-table .content-row .buyers{line-height: 24px;}
.order-list-table .operation a{font-size: 14px;}
.order-no-data-block ul{width:200px;margin:20px auto; padding-bottom: 20px;}
.order-no-data-block ul li{text-align:center;color:#c2c2c2}
.order-no-data-block ul li:first-child{height:70px;line-height:70px}
.order-no-data-block ul li:first-child i{font-size:35px}
.footer-row{border:1px solid #f2f2f2}
#order_page {text-align: right;}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

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: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

View File

@@ -0,0 +1,244 @@
/**
* 渲染订单列表
*/
Order = function () {
};
/**
* 设置数据集
*/
Order.prototype.setData = function (data) {
Order.prototype.data = data;
};
/**
* 列名数据
*/
Order.prototype.cols = [
{
type: 'checkbox',
fixed: 'left',
width: '4%',
merge: true,
template: function (orderitem, order) {
var h = '<div class="sub-selected-checkbox" data-json='+ order.fenxiao_order_id +'>';
h += '<input type="checkbox" lay-skin="primary" lay-filter="subCheckbox" name="">';
h += '</div>';
return h;
}
},
{
title: '<span>商品</span>',
width: "30%",
className: "product-info",
template: function (orderitem, order) {
var h = '<div class="img-block">';
h += '<img layer-src src="' + ns.img(orderitem.sku_image,'small') + '">';
h += '</div>';
h += '<div class="info">';
h += '<a href="' + ns.href("shop/order/detail", {order_id: orderitem.order_id}) + '" target="_blank" title="' + orderitem.sku_name + '" class="multi-line-hiding text-color-sub">' + orderitem.sku_name + '</a>';
return h;
}
},
{
title: "单价(元) / 数量",
width: "10%",
align: "right",
className: "order-price",
template: function (orderitem, order) {
var h = '<div style="padding-right: 15px;">';
h += '<div>';
h += '<span>' + orderitem.price + '<span> [销售价]</span></span>';
h += '</div>';
h += '<div>';
h += '<span>' + (orderitem.real_goods_money / orderitem.num).toFixed(2) + '<span> [分销价]</span></span>';
h += '</div>';
h += '<div>';
h += '<span>' + orderitem.num + '件</span>';
h += '</div>';
h += '</div>';
return h;
}
},
{
title: "买家信息",
width: "15%",
align: "left",
className: "buyers",
merge: true,
template: function (orderitem, order) {
var h = '';
if (order.order_type != 4) {
h += '<p>';
h += '<span>' + order.name + '</span>';
h += '</p>';
h += '<span>' + order.mobile + '</span>';
h += '<span class="line-hiding" title="' + order.full_address + '">' + order.full_address + '</span>';
} else {
h = '<p>';
h += '<span>' + order.mobile + '</span>';
h += '</p>';
}
return h;
}
},
{
title: "订单状态",
width: "10%",
align: "center",
className: "transaction-status",
merge: true,
template: function (orderitem, order) {
var html = '<div>' + order.order_status_name + '</div>';
return html;
}
},
{
title : "分佣信息",
width : "20%",
align : "left",
className : "create-time",
merge : false,
template : function(orderitem,order){
var html = '<div>一级分佣:'+ (orderitem.one_fenxiao_id > 0 ? orderitem.one_fenxiao_name +' ¥' + orderitem.one_commission : '--') +'</div>';
html += '<div>二级分佣:'+ (orderitem.two_fenxiao_id > 0 ? orderitem.two_fenxiao_name +' ¥' + orderitem.two_commission : '--') +'</div>';
html += '<div>三级分佣:'+ (orderitem.three_fenxiao_id > 0 ? orderitem.three_fenxiao_name +' ¥' + orderitem.three_commission : '--') +'</div>';
return html;
}
},
{
title : "佣金状态",
width : "15%",
align : "center",
className : "settlement",
merge : true,
template : function(orderitem,order){
var settlement_name = order.is_settlement == 1 ? "已结算" : "待结算";
if(order.order_status_name == "已关闭"){
settlement_name = "已关闭";
}
return '<div>'+settlement_name+'</div>';
}
},
];
/**
* 渲染表头
*/
Order.prototype.header = function (hasThead) {
var colgroup = '<colgroup>';
var thead = '';
if (hasThead) thead = '<thead><tr>';
for (var i = 0; i < this.cols.length; i++) {
var align = this.cols[i].align ? "text-align:" + this.cols[i].align : "";
colgroup += '<col width="' + this.cols[i].width + '">';
if (hasThead) {
thead += '<th style="' + align + '" class="' + (this.cols[i].className || "") + '">';
thead += '<div class="layui-table-cell">';
if(this.cols[i].type){
thead += '<div class="all-selected-checkbox">';
thead += '<input type="checkbox" lay-skin="primary" lay-filter="allCheckbox" name="">';
thead += '</div>';
}else{
thead += this.cols[i].title;
}
thead += '</div>';
thead += '</th>';
}
}
colgroup += '</colgroup>';
if (hasThead) thead += '</tr></thead>';
return colgroup + thead;
};
/**
* 渲染内容
*/
Order.prototype.tbody = function () {
var tbody = '<tbody>';
for (var i = 0; i < this.data.list.length; i++) {
var order = this.data.list[i];
var orderitemList = order.order_goods;
var pay_type_name = order.pay_type_name != '' ? order.pay_type_name : "";
if (i > 0) {
//分割行
tbody += '<tr class="separation-row">';
tbody += '<td colspan="' + this.cols.length + '"></td>';
tbody += '</tr>';
}
//订单项头部
tbody += '<tr class="header-row">';
tbody += '<td colspan="6">';
tbody += '<span class="order-item-header" style="margin-right:10px;">订单号:' + order.order_no + '</span>';
tbody += '<span class="order-item-header" style="margin-left:50px;">下单时间:' + ns.time_to_date(order.create_time) + '</span>';
tbody += '</td>';
tbody += '<td>';
tbody += '<div class="table-btn" style="justify-content: flex-end;">';
tbody += '<a class="layui-btn layui-btn-xs" href="' + ns.href("fenxiao://shop/order/detail", {order_id: order.order_id}) + '" target="_blank">详情</a>';
tbody += '</div>';
tbody += '</td>';
tbody += '</tr>';
var orderitemHtml = '';
loadImgMagnify();
for (var j = 0; j < orderitemList.length; j++) {
var orderitem = orderitemList[j];
orderitemHtml += '<tr class="content-row">';
for (var k = 0; k < this.cols.length; k++) {
if (j == 0 && this.cols[k].merge && this.cols[k].template) {
orderitemHtml += '<td class="' + (this.cols[k].className || "") + '" align="' + (this.cols[k].align || "") + '" style="' + (this.cols[k].style || "") + '" rowspan="' + orderitemList.length + '">';
orderitemHtml += this.cols[k].template(orderitem, order);
orderitemHtml += '</td>';
} else if (this.cols[k].template && !this.cols[k].merge) {
orderitemHtml += '<td class="' + (this.cols[k].className || "") + '" align="' + (this.cols[k].align || "") + '" style="' + (this.cols[k].style || "") + '">';
orderitemHtml += this.cols[k].template(orderitem, order);
orderitemHtml += '</td>';
}
}
orderitemHtml += '</tr>';
}
tbody += orderitemHtml;
}
tbody += '</tbody>';
return tbody;
};
/**
* 渲染表格
*/
Order.prototype.fetch = function () {
if (this.data.list.length > 0) {
return '<table class="layui-table layui-form">' + this.header(true) + '</table><table class="layui-table order-list-table layui-form">' + this.header(false) + this.tbody() + '</table>';
} else {
return '<table class="layui-table order-list-table layui-form">' + this.header(true) + '</table>' + '<div class="order-no-data-block"><ul><li><i class="layui-icon layui-icon-tabs"></i> </li><li>暂无订单</li></ul></div>';
}
};
function showMore(order_id) {
$(".more-operation[data-order-id]").hide();
$(".more-operation[data-order-id='" + order_id + "']").show();
$("body").bind('click',function (e) {
if (!$(e.target).closest(".order-item-header.more").length) {
$(".more-operation[data-order-id='" + order_id + "']").hide();
$("body").unbind('click');
}
});
}

View File

@@ -0,0 +1,98 @@
<link rel="stylesheet" href="STATIC_CSS/promotion_detail.css">
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">基本信息</span>
</div>
<div class="layui-card-body">
<div class="promotion-view">
<div class="promotion-view-item">
<label>提现状态:</label>
<span>{$info.status_name}</span>
</div>
{if $info.status == -1}
<div class="promotion-view-item">
<label>拒绝原因:</label>
<span>{$info.refuse_reason}</span>
</div>
{/if}
{if $info.status == -2}
<div class="promotion-view-item">
<label>失败原因:</label>
<span>{$info.fail_reason}</span>
</div>
{/if}
<div class="promotion-view-item">
<label>申请提现金额:</label>
<span>¥{$info.money}</span>
</div>
<div class="promotion-view-item">
<label>提现手续费:</label>
<span>¥{$info.withdraw_rate_money}</span>
</div>
<div class="promotion-view-item">
<label>提现到账金额:</label>
<span>¥{$info.real_money}</span>
</div>
<div class="promotion-view-item">
<label>提现申请时间:</label>
<span>{:time_to_date($info.create_time)}</span>
</div>
<div class="promotion-view-item">
<label>提现方式:</label>
<span>{$info.transfer_name}</span>
</div>
{if $info.transfer_type == "bank"}
<div class="promotion-view-item">
<label>提现方式:</label>
<span>{$info['bank_name']}</span>
</div>
{/if}
<div class="promotion-view-item">
<label>提现收款账号:</label>
<span>{$info.account_number}</span>
</div>
<div class="promotion-view-item">
<label>真实姓名:</label>
<span>{$info.realname}</span>
</div>
<div class="promotion-view-item">
<label>手机号:</label>
<span>{$info.mobile}</span>
</div>
</div>
{if $info['status'] == 3}
<div class="promotion-view">
{if !empty($info['document'])}
<div class="promotion-view-item-line">
<label class="promotion-view-item-custom-label">转账凭证:</label>
<div class="promotion-view-item-custom-box img-upload">
<div class="upload-img-block icon">
<div class="upload-img-box">
<img layer-src src="{:img($info['document'])}" alt="转账凭证" />
</div>
</div>
</div>
</div>
{/if}
{if !empty($info.transfer_remark)}
<div class="promotion-view-item-line">
<label class="promotion-view-item-custom-label">凭证说明:</label>
<div class="promotion-view-item-custom-box">{$info.transfer_remark}</div>
</div>
{/if}
</div>
{/if}
</div>
</div>
<script>
function backFenxiaoWithdrawList() {
location.hash = ns.hash("fenxiao://shopwithdraw/lists");
}
</script>

View File

@@ -0,0 +1,604 @@
<style>
.layui-layout-admin .screen{margin-bottom: 15px;}
.member-table{cursor: pointer;}
</style>
<div class="layui-card card-common card-brief panel-content">
<div class="layui-card-header simple">
<span class="card-title">提现概况</span>
</div>
<div class="layui-card-body">
<div class="content">
<p class="title">可提现佣金(元)</p>
<p class="money">{$fenxiao_balance_sum.account}</p>
</div>
<div class="content">
<p class="title">已提现佣金(元)</p>
<p class="money">{$fenxiao_balance_sum.account_withdraw}</p>
</div>
<div class="content">
<p class="title">提现中佣金(元)</p>
<p class="money">{$fenxiao_balance_sum.account_withdraw_apply}</p>
</div>
</div>
</div>
<!-- 搜索框 -->
<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="fenxiao_name" 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="transfer_type">
<option value="">全部</option>
{foreach $transfer_type_list as $transfer_type_k=> $transfer_type_v}
<option value="{$transfer_type_k}">{$transfer_type_v}</option>
{/foreach}
</select>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">状态</label>
<div class="layui-input-inline">
<select name="status">
<option value="all">全部</option>
{foreach $status_list as $key=>$val}
<option value="{$key}">{$val}</option>
{/foreach}
</select>
</div>
</div>
</div>
<div class="layui-form-item">
<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 class="layui-inline">
<label class="layui-form-label">到账时间</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="start_date" id="payment_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="payment_end_time" placeholder="请输入结束时间" autocomplete="off" readonly>
</div>
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="search">筛选</button>
<button class="layui-btn" lay-submit lay-filter="exportFn">导出</button>
</div>
</form>
</div>
</div>
<!-- 列表 -->
<table id="withdraw_list" lay-filter="withdraw_list"></table>
<script type="text/html" id="status">
{{# if(d.status == 1){ }}
<div class="layui-elip text-color">待审核</div>
{{# }else if(d.status == 2){ }}
<div class="layui-elip text-color">待转账</div>
{{# }else if(d.status == 3){ }}
<div class="layui-elip" style="color: green">已转账</div>
{{# }else if(d.status == 4){ }}
<div class="layui-elip" style="color: gray">转账中</div>
{{# }else if(d.status == -1){ }}
<div class="layui-elip text" style="color: red">已拒绝</div>
<div class="layui-elip text" style="color: gray">{{d.refuse_reason}}</div>
{{# }else if(d.status == -2){ }}
<div class="layui-elip text" style="color: red">转账失败</div>
<div class="layui-elip text" style="color: gray">{{d.fail_reason}}</div> {{# } }}
</script>
<!--操作-->
<script type="text/html" id="operation">
<div class="table-btn">
<a class="layui-btn" lay-event="detail">查看</a>
{{# if(d.status == 1){ }}
<a href="javascript:;" class="layui-btn" lay-event="agree">同意</a>
<a href="javascript:;" class="layui-btn" lay-event="refuse">拒绝</a>
{{# }else if(d.status == 2){ }}
{{# if((d.transfer_type != "bank" && (d.transfer_type != 'wechatpay' || (d.transfer_type == 'wechatpay' && !transfer_v3_type)) ) ){ }}
<a href="javascript:;" class="layui-btn" lay-event="transfer">在线转账</a>
{{# } }}
{{# if(d.transfer_type != 'wechatpay' || (d.transfer_type == 'wechatpay' && !transfer_v3_type)){ }}
<a href="javascript:;" class="layui-btn" lay-event="actiontransfer">手动转账</a>
{{# } }}
<a href="javascript:;" class="layui-btn" lay-event="refuse">拒绝</a>
{{# } }}
</div>
</script>
<!-- 用户信息 -->
<script type="text/html" id="fenxiao_info">
<div class='table-title member-table'>
<div class='title-pic'>
<img src="{{ns.img(d.headimg || '')}}" onerror="this.src = '{:img('public/static/img/default_img/head.png')}' ">
</div>
<div class='title-content' onclick="toDetail({{d.fenxiao_id}})">
<p class="layui-elip">{{d.nickname}}</p>
<span title="{{ d.mobile }}">{{ d.member_mobile }}</span>
</div>
</div>
</script>
<!--时间-->
<script type="text/html" id="apply_time">
<div class="layui-elip">{{ns.time_to_date(d.create_time)}}</div>
</script>
<script>
var transfer_v3_type = "{$transfer_v3_type}"
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("fenxiao://shop/withdraw/lists"),
cols: [
[{
title: '分销商',
width: '17%',
unresize: 'false',
templet: '#fenxiao_info'
}, {
field: 'transfer_type_name',
title: '提现方式',
width: '10%',
unresize: 'false',
}, {
field: 'apply_money',
title: '申请提现金额',
width: '12%',
unresize: 'false',
align: 'right',
templet: function(data) {
return '¥'+ data.money
}
}, {
field: 'withdraw_rate_money',
title: '提现手续费',
width: '12%',
unresize: 'false',
align: 'right',
templet: function(data) {
return '¥'+ data.withdraw_rate_money
}
}, {
field: 'money',
title: '实际转账金额',
width: '12%',
unresize: 'false',
align: 'right',
templet: function(data) {
return '¥'+ data.real_money
}
}, {
field: 'status_name',
title: '提现状态',
width: '12%',
unresize: 'false',
templet: '#status'
}, {
title: '申请时间',
unresize: 'false',
width: '15%',
templet: '#apply_time'
}, {
title: '操作',
toolbar: '#operation',
unresize: 'false',
align:'right'
}]
]
});
/**
* 搜索功能
*/
form.on('submit(search)', function(data) {
table.reload({
page: {
curr: 1
},
where: data.field
});
return false;
});
form.on('submit(exportFn)', function(data) {
location.href = ns.url("fenxiao://shop/withdraw/export?request_mode=download",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 'transfer':
transfer(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'
});
// return false;
// actiontransfer(data);
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) {
window.open(ns.href("fenxiao://shop/withdraw/detail",{id:field.id}));
}
/**
* 自动转账
*/
var transfer_repeat_flag = false;
function transfer(field) {
if(transfer_repeat_flag) return false;
transfer_repeat_flag = true;
layer.confirm('确定要进行自动转账吗?', function(index) {
layer.close(index);
$.ajax({
url: ns.url("fenxiao://shop/withdraw/transfer"),
data: field,
dataType: 'JSON', //服务器返回json格式数据
type: 'POST', //HTTP请求类型
success: function(res) {
transfer_repeat_flag = false;
if (res.code >= 0) {
table.reload({
page: {
curr: 1
}
});
layer.closeAll();
} else {
layer.closeAll();
layer.msg(res.message);
}
}
});
}, function () {
layer.close();
transfer_repeat_flag = false;
});
}
/**
* 手动转账
*/
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("fenxiao://shop/withdraw/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) {
layer.close(index);
$.ajax({
url: ns.url("fenxiao://shop/withdraw/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("fenxiao://shop/withdraw/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(fenxiao_id){
location.hash=ns.hash('fenxiao://shop/fenxiao/detail', {fenxiao_id:fenxiao_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 ">{{d.transfer_name}}</p>
</div>
</div>
{{# if(d.transfer_type == "bank"){ }}
<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>
{{# }else if(d.transfer_type == "alipay"){ }}
<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.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.withdraw_rate_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.real_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>