mirror of
https://gitee.com/zoujingli/ThinkAdmin.git
synced 2026-07-05 07:31:14 +08:00
Compare commits
15 Commits
ace4b8de9d
...
3cef4f83c4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3cef4f83c4 | ||
|
|
a817e6dfef | ||
|
|
e238645b94 | ||
|
|
eb4ced8645 | ||
|
|
249dc20cc5 | ||
|
|
56fa725e64 | ||
|
|
a94f864982 | ||
|
|
584bae4826 | ||
|
|
710264fd8c | ||
|
|
c0c5f3e36e | ||
|
|
6c461d8243 | ||
|
|
9bf96845c5 | ||
|
|
4ee70e8fa4 | ||
|
|
b1368dedd6 | ||
|
|
dcd54a3e30 |
@ -58,7 +58,7 @@ class Menu extends Controller
|
||||
if (!empty($p2['sub'])) foreach ($p2['sub'] as $k3 => $p3) {
|
||||
if ($p3['status'] > 0) unset($p2['sub'][$k3]);
|
||||
}
|
||||
if (empty($p2['sub']) && ($p2['url'] === '#' or $p1['status'] > 0)) unset($p1['sub'][$k2]);
|
||||
if (empty($p2['sub']) && ($p2['url'] === '#' or $p2['status'] > 0)) unset($p1['sub'][$k2]);
|
||||
}
|
||||
if (empty($p1['sub']) && ($p1['url'] === '#' or $p1['status'] > 0)) unset($data[$k1]);
|
||||
}
|
||||
|
||||
@ -5,6 +5,7 @@ namespace app\data\controller\base;
|
||||
use app\data\model\BaseUserDiscount;
|
||||
use app\data\service\UserUpgradeService;
|
||||
use think\admin\Controller;
|
||||
use think\admin\helper\QueryHelper;
|
||||
|
||||
/**
|
||||
* 折扣方案管理
|
||||
@ -23,20 +24,12 @@ class Discount extends Controller
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$this->title = '折扣方案管理';
|
||||
$query = BaseUserDiscount::mQuery();
|
||||
$query->where(['deleted' => 0])->order('sort desc,id desc')->page();
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据列表处理
|
||||
* @param array $data
|
||||
*/
|
||||
protected function _page_filter(array &$data)
|
||||
{
|
||||
foreach ($data as &$vo) {
|
||||
$vo['items'] = json_decode($vo['items'], true);
|
||||
}
|
||||
$this->type = input('get.type', 'index');
|
||||
BaseUserDiscount::mQuery()->layTable(function () {
|
||||
$this->title = '折扣方案管理';
|
||||
}, function (QueryHelper $query) {
|
||||
$query->where(['status' => intval($this->type === 'index'), 'deleted' => 0]);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@ -71,9 +64,9 @@ class Discount extends Controller
|
||||
}
|
||||
$vo['items'] = json_encode($rule, JSON_UNESCAPED_UNICODE);
|
||||
} else {
|
||||
$this->levels = UserUpgradeService::instance()->levels();
|
||||
$this->levels = UserUpgradeService::levels();
|
||||
if (empty($this->levels)) $this->error('未配置用户等级!');
|
||||
if (!empty($vo['items'])) foreach (json_decode($vo['items'], true) as $item) {
|
||||
foreach ($vo['items'] ?? [] as $item) {
|
||||
$vo["_level_{$item['level']}"] = $item['discount'];
|
||||
}
|
||||
}
|
||||
|
||||
@ -24,7 +24,7 @@ class Upgrade extends Controller
|
||||
public function index()
|
||||
{
|
||||
$this->title = '用户等级管理';
|
||||
BaseUserUpgrade::mQuery()->order('number asc')->page();
|
||||
BaseUserUpgrade::mQuery()->order('number asc')->layTable();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -47,6 +47,7 @@ class Upgrade extends Controller
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
$this->max = BaseUserUpgrade::maxNumber() + 1;
|
||||
BaseUserUpgrade::mForm('form');
|
||||
}
|
||||
|
||||
@ -56,6 +57,7 @@ class Upgrade extends Controller
|
||||
*/
|
||||
public function edit()
|
||||
{
|
||||
$this->max = BaseUserUpgrade::maxNumber();
|
||||
BaseUserUpgrade::mForm('form');
|
||||
}
|
||||
|
||||
@ -67,9 +69,7 @@ class Upgrade extends Controller
|
||||
{
|
||||
if ($this->request->isGet()) {
|
||||
$this->prizes = RebateService::PRIZES;
|
||||
if (!isset($vo['number'])) {
|
||||
$vo['number'] = BaseUserUpgrade::mk()->order('number desc')->value('number', -1) + 1;
|
||||
}
|
||||
$vo['number'] = $vo['number'] ?? BaseUserUpgrade::maxNumber();
|
||||
$vo['rebate_rule'] = str2arr($vo['rebate_rule'] ?? '');
|
||||
} else {
|
||||
$vo['utime'] = time();
|
||||
@ -80,6 +80,11 @@ class Upgrade extends Controller
|
||||
$vo['teams_direct_status'] = isset($vo['teams_direct_status']) ? 1 : 0;
|
||||
$vo['teams_indirect_status'] = isset($vo['teams_indirect_status']) ? 1 : 0;
|
||||
$vo['order_amount_status'] = isset($vo['order_amount_status']) ? 1 : 0;
|
||||
// 默认等级去除条件
|
||||
if (empty($vo['number'])) {
|
||||
$vo['rebate_rule'] = [];
|
||||
foreach ($vo as $k => &$v) if (is_numeric(stripos($k, '_status'))) $v = 0;
|
||||
}
|
||||
// 根据数量判断状态
|
||||
$vo['teams_users_status'] = intval($vo['teams_users_status'] && $vo['teams_users_number'] > 0);
|
||||
$vo['teams_direct_status'] = intval($vo['teams_direct_status'] && $vo['teams_direct_number'] > 0);
|
||||
|
||||
@ -11,5 +11,23 @@ use think\admin\Model;
|
||||
*/
|
||||
class BaseUserDiscount extends Model
|
||||
{
|
||||
/**
|
||||
* 格式化等级规则
|
||||
* @param mixed $value
|
||||
* @return mixed
|
||||
*/
|
||||
public function getItemsAttr($value)
|
||||
{
|
||||
return empty($value) ? $value : json_decode($value, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化创建时间
|
||||
* @param string $value
|
||||
* @return string
|
||||
*/
|
||||
public function getCreateAtAttr(string $value): string
|
||||
{
|
||||
return format_datetime($value);
|
||||
}
|
||||
}
|
||||
@ -11,5 +11,36 @@ use think\admin\Model;
|
||||
*/
|
||||
class BaseUserUpgrade extends Model
|
||||
{
|
||||
/**
|
||||
* 获取用户等级
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
*/
|
||||
public static function items(): array
|
||||
{
|
||||
return static::mk()->where(['status' => 1])
|
||||
->hidden(['id', 'utime', 'status', 'create_at'])
|
||||
->order('number asc')->select()->toArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取最大级别数
|
||||
* @return int
|
||||
*/
|
||||
public static function maxNumber(): int
|
||||
{
|
||||
return static::mk()->max('number', 0) + 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化创建时间
|
||||
* @param string $value
|
||||
* @return string
|
||||
*/
|
||||
public function getCreateAtAttr(string $value): string
|
||||
{
|
||||
return format_datetime($value);
|
||||
}
|
||||
}
|
||||
@ -21,7 +21,7 @@ class UserUpgradeService extends Service
|
||||
* 获取用户等级数据
|
||||
* @return array
|
||||
*/
|
||||
public function levels(): array
|
||||
public static function levels(): array
|
||||
{
|
||||
$model = BaseUserUpgrade::mk()->where(['status' => 1]);
|
||||
return $model->order('number asc')->column('*', 'number');
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card">
|
||||
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card" data-table-id="DiscountTable">
|
||||
<div class="layui-card-body padding-left-40">
|
||||
|
||||
<label class="layui-form-item block relative">
|
||||
@ -12,19 +12,17 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-left" style="width:auto">用户等级</th>
|
||||
<th class="text-right" style="width:180px">原价比例 ( 0.00% - 100.00% )</th>
|
||||
<th class="text-right">原价比例 ( 0.00% - 100.00% )</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{foreach $levels as $level}
|
||||
<tr class="think-bg-white">
|
||||
<td class="nowrap sub-span-blue">
|
||||
[ <span>VIP{$level.number|default='0'}</span> ] {$level.name|default=''}
|
||||
</td>
|
||||
<td class="nowrap sub-span-blue">[ <span>VIP{$level.number|default='0'}</span> ] {$level.name|default=''}</td>
|
||||
<td class="nowrap padding-0">
|
||||
<label>
|
||||
{php} $key = "_level_" . $level['number']; {/php}
|
||||
<input data-blur-number="4" data-value-max="100" data-value-min="0" name="_level_{$level.number}" placeholder="请输入用户等级折扣" value="{$vo[$key]??'100.0000'}">
|
||||
{php} $key = '_level_' . $level['number']; {/php}
|
||||
<input data-blur-number="4" data-value-min="0" data-value-max="100" name="_level_{$level.number}" value="{$vo[$key]??'100.0000'}" placeholder="请输入用户等级折扣">
|
||||
<span class="notselect margin-left-5">%</span>
|
||||
</label>
|
||||
</td>
|
||||
@ -49,6 +47,7 @@
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
<style>
|
||||
.think-level-box tr input {
|
||||
width: 90%;
|
||||
|
||||
@ -1,74 +1,89 @@
|
||||
{extend name="../../admin/view/main"}
|
||||
{extend name='../../admin/view/table'}
|
||||
|
||||
{block name="button"}
|
||||
<!--{if auth("add")}-->
|
||||
<button class='layui-btn layui-btn-sm layui-btn-primary' data-modal="{:url('add')}" data-title="添加折扣方案">添加折扣方案</button>
|
||||
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="DiscountTable" data-modal="{:url('add')}" data-title="添加折扣">添加折扣</button>
|
||||
<!--{/if}-->
|
||||
{/block}
|
||||
|
||||
{block name='content'}
|
||||
<div class="think-box-notify">
|
||||
特别注意:当用户等级删除或修改之后,此处折扣方案也需要重新配置!
|
||||
{block name="content"}
|
||||
<div class="layui-tab layui-tab-card">
|
||||
<ul class="layui-tab-title">
|
||||
{foreach ['index'=>'折扣管理','recycle'=>'回 收 站'] as $k=>$v}{if isset($type) and $type eq $k}
|
||||
<li data-open="{:url('index')}?type={$k}" class="layui-this color-green">{$v}</li>
|
||||
{else}
|
||||
<li data-open="{:url('index')}?type={$k}">{$v}</li>
|
||||
{/if}{/foreach}
|
||||
</ul>
|
||||
<div class="layui-tab-content">
|
||||
<table id="DiscountTable" data-url="{:sysuri()}" data-target-search="form.form-search"></table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="think-box-shadow margin-top-10">
|
||||
<table class="layui-table" lay-skin="line">
|
||||
{notempty name='list'}
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='list-table-check-td think-checkbox'>
|
||||
<label><input data-auto-none data-check-target='.list-check-box' type='checkbox'></label>
|
||||
</th>
|
||||
<th class='list-table-sort-td'>
|
||||
<button class="layui-btn layui-btn-xs" data-reload type="button">刷 新</button>
|
||||
</th>
|
||||
<th class="text-left nowrap">折扣方案</th>
|
||||
<th class="text-left nowrap">等级折扣</th>
|
||||
<th class="text-left nowrap">使用状态</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
{/notempty}
|
||||
<tbody>
|
||||
{foreach $list as $key=>$vo}
|
||||
<tr>
|
||||
<td class='list-table-check-td think-checkbox'>
|
||||
<label><input class="list-check-box" type='checkbox' value='{$vo.id}'></label>
|
||||
</td>
|
||||
<td class='list-table-sort-td'>
|
||||
<label><input class="list-sort-input" data-action-blur="{:sysuri()}" data-loading="false" data-value="id#{$vo.id};action#sort;sort#{value}" value="{$vo.sort}"></label>
|
||||
</td>
|
||||
<td class="text-left nowrap">{$vo.name|default=''}</td>
|
||||
<td class="text-left">
|
||||
{foreach $vo.items as $v}
|
||||
<span class="layui-badge-rim margin-right-5 margin-bottom-5 nowrap">
|
||||
<b class="color-green">VIP{$v.level}</b> : <b class="color-blue">{$v.discount+0}%</b>
|
||||
</span>
|
||||
{/foreach}
|
||||
</td>
|
||||
<td class='text-left nowrap'>
|
||||
{if $vo.status eq 0}<span class="color-red">已禁用</span>{elseif $vo.status eq 1}<span class="color-green">使用中</span>{/if}
|
||||
</td>
|
||||
<td class='text-left nowrap'>
|
||||
{/block}
|
||||
|
||||
<!--{if auth("edit")}-->
|
||||
<a class="layui-btn layui-btn-sm" data-modal='{:url("edit")}?id={$vo.id}' data-title="编辑折扣方案">编 辑</a>
|
||||
<!--{/if}-->
|
||||
{block name='script'}
|
||||
<script>
|
||||
$(function () {
|
||||
// 初始化表格组件
|
||||
$('#DiscountTable').layTable({
|
||||
even: true, height: 'full',
|
||||
sort: {field: 'sort desc,id', type: 'desc'},
|
||||
where: {type: '{$type|default="index"}'},
|
||||
cols: [[
|
||||
{field: 'sort', title: '排序权重', align: 'center', width: 100, sort: true, templet: '#SortInputTpl'},
|
||||
{field: 'id', title: 'ID', align: "center", width: 80},
|
||||
{field: 'name', title: '折扣名称', align: 'left', minWidth: 140},
|
||||
{
|
||||
field: 'items', title: '折扣方案', align: 'left', width: '33%', templet: function (d) {
|
||||
return (d.html = ''), d.items.forEach(function (item) {
|
||||
d.html += laytpl('<span class="layui-badge layui-bg-gray">VIP{{d.level}} 折扣 {{d.discount}}%</span>').render(item);
|
||||
}), d.html;
|
||||
}
|
||||
},
|
||||
{field: 'status', title: '状态', align: 'center', width: 110, templet: '#StatusSwitchTpl'},
|
||||
{field: 'create_at', title: '创建时间', align: 'center', minWidth: 170, sort: true},
|
||||
{toolbar: '#toolbar', title: '操作面板', align: 'center', minWidth: 80, fixed: 'right'},
|
||||
]]
|
||||
});
|
||||
|
||||
<!--{if auth("state") and $vo.status eq 1}-->
|
||||
<a class="layui-btn layui-btn-sm layui-btn-warm" data-action="{:url('state')}" data-csrf="{:systoken('state')}" data-value="id#{$vo.id};status#0">禁 用</a>
|
||||
<!--{elseif auth("state")}-->
|
||||
<a class="layui-btn layui-btn-sm layui-btn-warm" data-action="{:url('state')}" data-csrf="{:systoken('state')}" data-value="id#{$vo.id};status#1">启 用</a>
|
||||
<!--{/if}-->
|
||||
// 数据状态切换操作
|
||||
layui.form.on('switch(StatusSwitch)', function (obj) {
|
||||
var data = {id: obj.value, status: obj.elem.checked > 0 ? 1 : 0};
|
||||
$.form.load("{:url('state')}", data, 'post', function (ret) {
|
||||
if (ret.code < 1) $.msg.error(ret.info, 3, function () {
|
||||
$('#DiscountTable').trigger('reload');
|
||||
}); else {
|
||||
$('#DiscountTable').trigger('reload');
|
||||
}
|
||||
return false;
|
||||
}, false);
|
||||
});
|
||||
});
|
||||
|
||||
<!--{if auth("remove")}-->
|
||||
<a class="layui-btn layui-btn-sm layui-btn-danger" data-action="{:url('remove')}" data-confirm="确定要删除折扣方案吗?" data-csrf="{:systoken('remove')}" data-value="id#{$vo.id}">删 除</a>
|
||||
<!--{/if}-->
|
||||
</script>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
</tbody>
|
||||
</table>
|
||||
{empty name='list'}<span class="notdata">没有记录哦</span>{else}{$pagehtml|raw|default=''}{/empty}
|
||||
</div>
|
||||
<!-- 列表排序权重模板 -->
|
||||
<script type="text/html" id="SortInputTpl">
|
||||
<input type="number" min="0" data-blur-number="0" data-action-blur="{:sysuri()}" data-value="id#{{d.id}};action#sort;sort#{value}" data-loading="false" value="{{d.sort}}" class="layui-input text-center">
|
||||
</script>
|
||||
|
||||
<!-- 数据状态切换模板 -->
|
||||
<script type="text/html" id="StatusSwitchTpl">
|
||||
<!--{if auth("state")}-->
|
||||
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="已激活|已禁用" lay-filter="StatusSwitch" {{d.status>0?'checked':''}}>
|
||||
<!--{else}-->
|
||||
{{d.status ? '<b class="color-green">已启用</b>' : '<b class="color-red">已禁用</b>'}}
|
||||
<!--{/if}-->
|
||||
</script>
|
||||
|
||||
<!-- 数据操作工具条模板 -->
|
||||
<script type="text/html" id="toolbar">
|
||||
<!--{if auth("edit") and isset($type) and $type eq 'index'}-->
|
||||
<a class="layui-btn layui-btn-primary layui-btn-sm" data-title="编辑折扣" data-modal='{:url("edit")}?id={{d.id}}'>编 辑</a>
|
||||
<!--{/if}-->
|
||||
|
||||
<!--{if auth("remove") and isset($type) and $type neq 'index'}-->
|
||||
<a class="layui-btn layui-btn-danger layui-btn-sm" data-action="{:url('remove')}" data-value="id#{{d.id}}" data-confirm="确定要删除折扣吗?">删 除</a>
|
||||
<!--{/if}-->
|
||||
</script>
|
||||
{/block}
|
||||
@ -1,7 +1,7 @@
|
||||
{extend name="../../admin/view/main"}
|
||||
|
||||
{block name='content'}
|
||||
<div class="think-box-notify">温馨提示:如需添加新内容,需要在系统管理的基础数据添加类似为 “<b>{$type|default=''}</b>” 的基础数据。</div>
|
||||
<div class="think-box-notify">温馨提示:如需添加新内容,需要在系统管理的基础数据添加类型为 “<b>{$type|default=''}</b>” 的基础数据。</div>
|
||||
<div class="layui-row layui-col-space20 portal-block-container notselect">
|
||||
{foreach $types as $key=>$type}
|
||||
<div class="layui-col-sm4 layui-col-md4 layui-col-lg3">
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{extend name="../../admin/view/main"}
|
||||
|
||||
{block name='content'}
|
||||
<div class="think-box-notify">温馨提示:如需添加新内容,需要在系统管理的基础数据添加类似为 “<b>{$type|default=''}</b>” 的基础数据。</div>
|
||||
<div class="think-box-notify">温馨提示:如需添加新内容,需要在系统管理的基础数据添加类型为 “<b>{$type|default=''}</b>” 的基础数据。</div>
|
||||
<div class="layui-row layui-col-space20 portal-block-container notselect">
|
||||
{foreach $types as $key=>$type}
|
||||
<div class="layui-col-sm4 layui-col-md4 layui-col-lg3">
|
||||
|
||||
@ -3,14 +3,24 @@
|
||||
top: 0;
|
||||
left: -10px;
|
||||
right: -10px;
|
||||
bottom: 2px;
|
||||
color: #fff;
|
||||
bottom: 3px;
|
||||
color: #FFF;
|
||||
display: flex;
|
||||
position: absolute;
|
||||
font-size: 24px;
|
||||
text-align: center;
|
||||
line-height: 190px;
|
||||
border-radius: 5px;
|
||||
background: rgba(0, 0, 0, 0.6);
|
||||
font-size: 18px;
|
||||
border-radius: 3px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: rgba(0, 0, 0, 0.4);
|
||||
text-shadow: #666 1px 1px 3px;
|
||||
}
|
||||
|
||||
.min-input {
|
||||
width: 80px
|
||||
}
|
||||
|
||||
.min-input[type=number] {
|
||||
padding-left: 15px
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -21,9 +31,9 @@
|
||||
<legend><span class="layui-badge layui-bg-cyan">用户等级</span></legend>
|
||||
<div class="layui-form-item layui-row layui-col-space15">
|
||||
<div class="layui-col-xs3 block relative">
|
||||
<b class="color-green label-required-prev">等级序号</b><span class="margin-left-5 color-desc">Serial</span>
|
||||
<span class="help-label label-required-prev"><b>等级序号</b>Serial</span>
|
||||
<select class="layui-select" name="number" lay-filter="number">
|
||||
{for start="0" end="10" name="i"}{if isset($vo.number) and $vo.number eq $i}
|
||||
{for start="0" end="$max" name="i"}{if isset($vo.number) and $vo.number eq $i}
|
||||
<option selected value="{$i}">当前 VIP {$vo.number} 等级</option>
|
||||
{else}
|
||||
<option value="{$i}">设置 VIP {$i} 等级</option>
|
||||
@ -31,7 +41,7 @@
|
||||
</select>
|
||||
</div>
|
||||
<label class="layui-col-xs9 block relative">
|
||||
<b class="color-green label-required-prev">等级名称</b><span class="margin-left-5 color-desc">Name</span>
|
||||
<span class="help-label label-required-prev"><b>等级名称</b>Name</span>
|
||||
<input class="layui-input" name="name" placeholder="请输入等级名称" required value="{$vo.name|default=''}">
|
||||
</label>
|
||||
</div>
|
||||
@ -74,7 +84,7 @@
|
||||
<div>
|
||||
<label class="think-checkbox notselect">
|
||||
{if isset($vo.goods_vip_status) and $vo.goods_vip_status eq 1}
|
||||
① <input checked lay-ignore name="goods_vip_status" type="checkbox" value="1">开启
|
||||
① <input lay-ignore name="goods_vip_status" type="checkbox" value="1" checked>开启
|
||||
{else}
|
||||
① <input lay-ignore name="goods_vip_status" type="checkbox" value="1">开启
|
||||
{/if}
|
||||
@ -84,48 +94,48 @@
|
||||
<div>
|
||||
<label class="think-checkbox notselect">
|
||||
{if isset($vo.teams_direct_status) and $vo.teams_direct_status eq 1}
|
||||
② <input checked lay-ignore name="teams_direct_status" type="checkbox" value="1">开启
|
||||
② <input lay-ignore name="teams_direct_status" type="checkbox" value="1" checked>开启
|
||||
{else}
|
||||
② <input lay-ignore name="teams_direct_status" type="checkbox" value="1">开启
|
||||
{/if}
|
||||
<span class="color-blue">直推团队</span> 升级,<span class="color-blue">直推团队</span> 达到
|
||||
<input class="inline-block text-center" data-blur-number="0" name="teams_direct_number" style="width:80px" value="{$vo.teams_direct_number|default='0'}">
|
||||
<input class="inline-block text-center min-input" name="teams_direct_number" data-blur-number="0" min="0" type="number" value="{$vo.teams_direct_number|default='0'}">
|
||||
人;
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label class="think-checkbox notselect">
|
||||
{if isset($vo.teams_indirect_status) and $vo.teams_indirect_status eq 1}
|
||||
③ <input checked lay-ignore name="teams_indirect_status" type="checkbox" value="1">开启
|
||||
③ <input lay-ignore name="teams_indirect_status" type="checkbox" value="1" checked>开启
|
||||
{else}
|
||||
③ <input lay-ignore name="teams_indirect_status" type="checkbox" value="1">开启
|
||||
{/if}
|
||||
<span class="color-blue">间接团队</span> 升级,<span class="color-blue">间接团队</span> 达到
|
||||
<input class="inline-block text-center" data-blur-number="0" name="teams_indirect_number" style="width:80px" value="{$vo.teams_indirect_number|default='0'}">
|
||||
<input class="inline-block text-center min-input" name="teams_indirect_number" data-blur-number="0" min="0" type="number" value="{$vo.teams_indirect_number|default='0'}">
|
||||
人;
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label class="think-checkbox notselect">
|
||||
{if isset($vo.teams_users_status) and $vo.teams_users_status eq 1}
|
||||
④ <input checked lay-ignore name="teams_users_status" type="checkbox" value="1">开启
|
||||
④ <input lay-ignore name="teams_users_status" type="checkbox" value="1" checked>开启
|
||||
{else}
|
||||
④ <input lay-ignore name="teams_users_status" type="checkbox" value="1">开启
|
||||
{/if}
|
||||
<span class="color-blue">团队总数</span> 升级,<span class="color-blue">团队总数</span> 达到
|
||||
<input class="inline-block text-center" data-blur-number="0" name="teams_users_number" style="width:80px" value="{$vo.teams_users_number|default='0'}">
|
||||
<input class="inline-block text-center min-input" name="teams_users_number" data-blur-number="0" min="0" type="number" value="{$vo.teams_users_number|default='0'}">
|
||||
人;
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label class="think-checkbox notselect">
|
||||
{if isset($vo.order_amount_status) and $vo.order_amount_status eq 1}
|
||||
⑤ <input checked lay-ignore name="order_amount_status" type="checkbox" value="1">开启
|
||||
⑤ <input lay-ignore name="order_amount_status" type="checkbox" value="1" checked>开启
|
||||
{else}
|
||||
⑤ <input lay-ignore name="order_amount_status" type="checkbox" value="1">开启
|
||||
{/if}
|
||||
<span class="color-blue">订单总额</span> 升级,<span class="color-blue">订单总额</span> 达到
|
||||
<input class="inline-block text-center" data-blur-number="2" name="order_amount_number" style="width:80px" value="{$vo.order_amount_number|default='0'}">
|
||||
<input class="inline-block text-center min-input" name="order_amount_number" data-blur-number="2" min="0" type="number" value="{$vo.order_amount_number|default='0'}">
|
||||
元;
|
||||
</label>
|
||||
</div>
|
||||
@ -134,13 +144,14 @@
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="layui-form-item">
|
||||
<legend><span class="layui-badge layui-bg-cyan">发放奖利</span></legend>
|
||||
<div class="layui-form-item notselect">
|
||||
<legend><span class="layui-badge layui-bg-cyan">奖利规则</span></legend>
|
||||
<div class="layui-form-item notselect relative">
|
||||
{foreach $prizes as $prize}{if isset($vo.rebate_rule) && is_array($vo.rebate_rule) && in_array($prize.code, $vo.rebate_rule)}
|
||||
<label class="think-checkbox"><input checked lay-ignore name="rebate_rule[]" type="checkbox" value="{$prize.code}"> {$prize.name}</label>
|
||||
<label class="think-checkbox"><input lay-ignore name="rebate_rule[]" type="checkbox" value="{$prize.code}" checked> {$prize.name}</label>
|
||||
{else}
|
||||
<label class="think-checkbox"><input lay-ignore name="rebate_rule[]" type="checkbox" value="{$prize.code}"> {$prize.name}</label>
|
||||
{/if}{/foreach}
|
||||
<div data-level-zero class="layui-hide notselect">默认等级,不能发放等级奖励</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
@ -162,14 +173,14 @@
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
(function ($ele) {
|
||||
$(function () {
|
||||
var $elem = $('[data-level-zero]');
|
||||
layui.form.on('select(number)', apply);
|
||||
apply({value: parseInt("{$vo.number|default='0'}")});
|
||||
|
||||
function apply(data) {
|
||||
data.value > 0 ? $ele.addClass('layui-hide') : $ele.removeClass('layui-hide');
|
||||
data.value > 0 ? $elem.addClass('layui-hide') : $elem.removeClass('layui-hide');
|
||||
}
|
||||
})($('[data-level-zero]'));
|
||||
});
|
||||
</script>
|
||||
</form>
|
||||
|
||||
@ -1,77 +1,124 @@
|
||||
{extend name="../../admin/view/main"}
|
||||
{extend name="../../admin/view/table"}
|
||||
|
||||
{block name="button"}
|
||||
<!--{if auth("add") and $page.total <= 9}-->
|
||||
<button class='layui-btn layui-btn-sm layui-btn-primary' data-modal="{:url('add')}">添加用户等级</button>
|
||||
<!--{if auth("add")}-->
|
||||
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="UpgradeTable" data-modal="{:url('add')}">添加等级</button>
|
||||
<!--{/if}-->
|
||||
|
||||
<!--{if auth("sync")}-->
|
||||
<button class='layui-btn layui-btn-sm layui-btn-primary' data-queue="{:url('sync')}">刷新用户数据</button>
|
||||
<button class='layui-btn layui-btn-sm layui-btn-primary' data-queue="{:url('sync')}">同步用户</button>
|
||||
<!--{/if}-->
|
||||
{/block}
|
||||
|
||||
{block name='content'}
|
||||
<div class="think-box-notify">
|
||||
特别注意:用户等级配置不能随意修改或删除,会影响系统结算与用户升级!
|
||||
{block name="content"}
|
||||
<div class="think-box-shadow">
|
||||
<table id="UpgradeTable" data-url="{:sysuri()}" data-target-search="form.form-search"></table>
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
<div class="think-box-shadow margin-top-10">
|
||||
<table class="layui-table" lay-skin="line">
|
||||
{notempty name='list'}
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='list-table-check-td think-checkbox'>
|
||||
<label><input data-auto-none data-check-target='.list-check-box' type='checkbox'></label>
|
||||
</th>
|
||||
<th class="text-left nowrap">用户等级</th>
|
||||
<th class="text-center nowrap">团队计数</th>
|
||||
<th class="text-center nowrap">升级规则</th>
|
||||
<th class="text-center nowrap">入会礼包</th>
|
||||
<th class="text-center nowrap">团队总数</th>
|
||||
<th class="text-center nowrap">直属团队</th>
|
||||
<th class="text-center nowrap">间接团队</th>
|
||||
<th class="text-center nowrap">订单金额</th>
|
||||
<th class="text-left nowrap">奖利规则</th>
|
||||
<th class="text-left nowrap">使用状态</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
{/notempty}
|
||||
<tbody>
|
||||
{foreach $list as $key=>$vo}
|
||||
<tr>
|
||||
<td class='list-table-check-td think-checkbox'>
|
||||
<label><input class="list-check-box" type='checkbox' value='{$vo.id}'></label>
|
||||
</td>
|
||||
<td class="text-left nowrap"> [ <span class="color-blue">VIP{$vo.number}</span> ] {$vo.name|default=''}</td>
|
||||
<td class="text-center nowrap">{if $vo.upgrade_team>0}<b class="layui-icon layui-icon-ok-circle color-green"></b> {else} - {/if}</td>
|
||||
<td class="text-center nowrap">{if $vo.upgrade_type eq 1}<span class="color-green">全部完成</span>{else}<span class="color-blue">任何条件</span>{/if}</td>
|
||||
<td class="text-center nowrap">{if $vo.goods_vip_status>0}<b class="layui-icon layui-icon-ok-circle color-green"></b> {else} - {/if}</td>
|
||||
<td class="text-center nowrap">{if $vo.teams_users_status>0} <b class="color-green">{$vo.teams_users_number}</b> 人 {else} - {/if}</td>
|
||||
<td class="text-center nowrap">{if $vo.teams_direct_status>0} <b class="color-green">{$vo.teams_direct_number}</b> 人 {else} - {/if}</td>
|
||||
<td class="text-center nowrap">{if $vo.teams_indirect_status>0} <b class="color-green">{$vo.teams_indirect_number}</b> 人 {else} - {/if}</td>
|
||||
<td class="text-center nowrap">{if $vo.order_amount_status>0} <b class="color-green">{$vo.order_amount_number+0}</b> 元 {else} - {/if}</td>
|
||||
<td class="text-left">{foreach $vo.rebate_rule as $v}<span class="nowrap margin-right-5">{$v}</span>{/foreach}</td>
|
||||
<td class='text-left nowrap'>{if $vo.status eq 0}<span class="color-red">已禁用</span>{elseif $vo.status eq 1}<span class="color-green">使用中</span>{/if}</td>
|
||||
<td class='text-left nowrap'>
|
||||
<!--{if auth("edit")}-->
|
||||
<a class="layui-btn layui-btn-sm" data-modal='{:url("edit")}?id={$vo.id}' data-title="编辑用户等级">编 辑</a>
|
||||
<!--{/if}-->
|
||||
{block name='script'}
|
||||
<script>
|
||||
$(function () {
|
||||
// 初始化表格组件
|
||||
$('#UpgradeTable').layTable({
|
||||
even: true, height: 'full',
|
||||
cols: [[
|
||||
{
|
||||
field: 'number', title: '等级名称', align: 'left', minWidth: 140, templet: function (d) {
|
||||
return laytpl('<div>[ <b class="color-blue">VIP{{d.number}}</b> ] {{d.name}}</div>').render(d);
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'upgrade_team', title: '团队计数', align: 'center', minWidth: 80, templet: function (d) {
|
||||
if (!d.upgrade_team || d.upgrade_team < 1) return '-';
|
||||
return '<b class="layui-icon layui-icon-ok-circle color-green"></b>';
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'upgrade_type', title: '升级规则', align: 'center', minWidth: 80, templet: function (d) {
|
||||
if (d.upgrade_type === 1) return '<span class="color-green">全部完成</span>';
|
||||
else return '<span class="color-blue">任何条件</span>';
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'goods_vip_status', title: '入会礼包', align: 'center', minWidth: 80, templet: function (d) {
|
||||
if (!d.goods_vip_status || d.goods_vip_status < 1) return '-';
|
||||
return '<b class="layui-icon layui-icon-ok-circle color-green"></b>';
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'teams_users_status', title: '团队总数', align: 'center', minWidth: 80, templet: function (d) {
|
||||
if (!d.teams_users_status || d.teams_users_status < 1) return '-';
|
||||
return laytpl('<b>{{d.teams_users_number}}</b>').render(d);
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'teams_direct_status', title: '直属团队', align: 'center', minWidth: 80, templet: function (d) {
|
||||
if (!d.teams_direct_status || d.teams_direct_status < 1) return '-';
|
||||
return laytpl('<b>{{d.teams_direct_number}}</b>').render(d);
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'teams_indirect_status', title: '间接团队', align: 'center', minWidth: 80, templet: function (d) {
|
||||
if (!d.teams_indirect_status || d.teams_indirect_status < 1) return '-';
|
||||
return laytpl('<b>{{d.teams_indirect_number}}</b>').render(d);
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'order_amount_status', title: '订单金额', align: 'center', minWidth: 80, templet: function (d) {
|
||||
if (!d.order_amount_status || d.order_amount_status < 1) return '-';
|
||||
return laytpl('<b>{{d.order_amount_number}}</b>').render(d);
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'rebate_rule', title: '奖利规则', align: 'center', minWidth: 100, templet: function (d) {
|
||||
return (d.html = ''), (d.rebate_rule || []).forEach(function (rule) {
|
||||
d.html += laytpl('<span class="layui-badge layui-bg-gray">{{d.v}}</span>').render({v: rule});
|
||||
}), d.html || '-';
|
||||
}
|
||||
},
|
||||
{field: 'status', title: '等级状态', align: 'center', minWidth: 110, templet: '#StatusSwitchTpl'},
|
||||
{field: 'create_at', title: '创建时间', align: 'center', minWidth: 170, sort: true},
|
||||
{toolbar: '#toolbar', title: '操作面板', align: 'center', minWidth: 160, fixed: 'right'},
|
||||
]]
|
||||
});
|
||||
|
||||
<!--{if auth("state") and $vo.status eq 1}-->
|
||||
<a class="layui-btn layui-btn-sm layui-btn-warm" data-action="{:url('state')}" data-value="id#{$vo.id};status#0">禁 用</a>
|
||||
<!--{elseif auth("state") and $vo.status eq 0}-->
|
||||
<a class="layui-btn layui-btn-sm layui-btn-warm" data-action="{:url('state')}" data-value="id#{$vo.id};status#1">启 用</a>
|
||||
<!--{/if}-->
|
||||
// 数据状态切换操作
|
||||
layui.form.on('switch(StatusSwitch)', function (obj) {
|
||||
var data = {id: obj.value, status: obj.elem.checked > 0 ? 1 : 0};
|
||||
$.form.load("{:url('state')}", data, 'post', function (ret) {
|
||||
if (ret.code < 1) $.msg.error(ret.info, 3, function () {
|
||||
$('#UpgradeTable').trigger('reload');
|
||||
});
|
||||
return false;
|
||||
}, false);
|
||||
});
|
||||
});
|
||||
|
||||
<!--{if auth("remove")}-->
|
||||
<a class="layui-btn layui-btn-sm layui-btn-danger" data-action="{:url('remove')}" data-confirm="确定要删除用户等级吗?" data-csrf="{:systoken('remove')}" data-value="id#{$vo.id}">删 除</a>
|
||||
<!--{/if}-->
|
||||
</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
</tbody>
|
||||
</table>
|
||||
{empty name='list'}<span class="notdata">没有记录哦</span>{else}{$pagehtml|raw|default=''}{/empty}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 列表排序权重模板 -->
|
||||
<script type="text/html" id="SortInputTpl">
|
||||
<input type="number" min="0" data-blur-number="0" data-action-blur="{:sysuri()}" data-value="id#{{d.id}};action#sort;sort#{value}" data-loading="false" value="{{d.sort}}" class="layui-input text-center">
|
||||
</script>
|
||||
|
||||
<!-- 数据状态切换模板 -->
|
||||
<script type="text/html" id="StatusSwitchTpl">
|
||||
<!--{if auth("state")}-->
|
||||
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="已激活|已禁用" lay-filter="StatusSwitch" {{d.status>0?'checked':''}}>
|
||||
<!--{else}-->
|
||||
{{d.status ? '<b class="color-green">已启用</b>' : '<b class="color-red">已禁用</b>'}}
|
||||
<!--{/if}-->
|
||||
</script>
|
||||
|
||||
<!-- 数据操作工具条模板 -->
|
||||
<script type="text/html" id="toolbar">
|
||||
<!--{if auth('edit')}-->
|
||||
<a class="layui-btn layui-btn-primary layui-btn-sm" data-table-id="UpgradeTable" data-title="编辑等级" data-modal='{:url("edit")}?id={{d.id}}'>编 辑</a>
|
||||
<!--{/if}-->
|
||||
|
||||
<!--{if auth("remove")}-->
|
||||
<a class="layui-btn layui-btn-danger layui-btn-sm" data-confirm="确定要删除问题吗?" data-action="{:url('remove')}" data-value="id#{{d.id}}">删 除</a>
|
||||
<!--{/if}-->
|
||||
</script>
|
||||
{/block}
|
||||
@ -8,7 +8,7 @@
|
||||
|
||||
{block name="content"}
|
||||
<div class="think-box-notify">
|
||||
余额统计:累计已充值余额 <b>{$balance.0|default=0.00}</b> 元,已使用 <b>{$balance.1|default=0.00}</b> 元,剩余可使用 <b>{$balance.0-$balance.1}</b> 元。
|
||||
余额统计:累计已充值余额 <b>{$balance.0|default=0.00|number_format}</b> 元,已使用 <b>{$balance.1|default=0.00|number_format}</b> 元,剩余可使用 <b>{$balance.0-$balance.1|number_format}</b> 元。
|
||||
</div>
|
||||
<div class="think-box-shadow margin-top-10">
|
||||
{include file='user/balance/index_search'}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user