初始上传

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,710 @@
<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.active{border-color: var(--base-color); }
.weight-list span.disabled{background:#f1f1f1;cursor: not-allowed; }
.form-wrap{padding-top: 0;}
</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">
<input type="text" name="cluster_name" lay-verify="required" autocomplete="off" class="layui-input len-mid">
</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">
<button class="layui-btn layui-btn-primary cluster-btn">会员等级<input type="hidden" value="0" /></button>
<button class="layui-btn layui-btn-primary cluster-btn">会员标签<input type="hidden" value="1" /></button>
<button class="layui-btn layui-btn-primary cluster-btn">性别<input type="hidden" value="2" /></button>
<button class="layui-btn layui-btn-primary cluster-btn">生日<input type="hidden" value="3" /></button>
<button class="layui-btn layui-btn-primary cluster-btn">注册时间<input type="hidden" value="4" /></button>
<button class="layui-btn layui-btn-primary cluster-btn">当前积分<input type="hidden" value="5" /></button>
<button class="layui-btn layui-btn-primary cluster-btn">当前余额<input type="hidden" value="6" /></button>
<button class="layui-btn layui-btn-primary cluster-btn">当前成长值<input type="hidden" value="7" /></button>
<button class="layui-btn layui-btn-primary cluster-btn">连续签到次数<input type="hidden" value="8" /></button>
<button class="layui-btn layui-btn-primary cluster-btn">会员手机<input type="hidden" value="9" /></button>
</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 cluster-btn">付款金额<input type="hidden" value="10" /></button>
<button class="layui-btn layui-btn-primary cluster-btn">消费金额<input type="hidden" value="11" /></button>
<button class="layui-btn layui-btn-primary cluster-btn">付款次数<input type="hidden" value="12" /></button>
<button class="layui-btn layui-btn-primary cluster-btn">消费次数<input type="hidden" value="13" /></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">
<div class="layui-form-item">
<div class="layui-input-block">
<table class="layui-table" id="goods" lay-skin="line" lay-size="lg">
<colgroup>
<col width="15%">
<col width="20%">
<col width="50%">
<col width="10%">
</colgroup>
<thead>
<tr>
<th>选项</th>
<th>范围</th>
<th>条件</th>
<th class="operation">操作</th>
</tr>
</thead>
<tbody>
<tr class="cluster-content layui-hide">
<td>会员等级</td>
<td>
<input type="radio" class="include" name="basic[member_level][include]" value="1" title="包含" checked>
<input type="radio" class="include" name="basic[member_level][include]" value="2" title="不包含">
</td>
<td>
<div class="layui-input-inline">
<input type="text" autocomplete="off" class="layui-input member-level-con" readonly onclick="settinglevel()">
<input type="hidden" name="basic[member_level][content]">
</div>
<input type="hidden" class="is-show" name="basic[member_level][is_show]" value="0">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content layui-hide">
<td>会员标签</td>
<td>
<input type="radio" class="include" name="basic[member_label][include]" value="1" title="包含" checked>
<input type="radio" class="include" name="basic[member_label][include]" value="2" title="不包含">
</td>
<td>
<div class="layui-input-inline">
<input type="text" autocomplete="off" class="layui-input member-label-con" readonly onclick="settinglabel()">
<input type="hidden" name="basic[member_label][content]">
</div>
<input type="hidden" class="is-show" name="basic[member_label][is_show]" value="0">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content layui-hide">
<td>会员性别</td>
<td>
<input type="radio" class="include" name="basic[sex][include]" value="1" title="包含" checked>
<input type="radio" class="include" name="basic[sex][include]" value="2" title="不包含">
</td>
<td>
<input type="checkbox" class="input-checkbox" lay-skin="primary" lay-filter="sex" name="basic[sex][content]" value="0" title="保密">
<input type="checkbox" class="input-checkbox" lay-skin="primary" lay-filter="sex" name="basic[sex][content]" value="1" title="男">
<input type="checkbox" class="input-checkbox" lay-skin="primary" lay-filter="sex" name="basic[sex][content]" value="2" title="女">
<input type="hidden" class="is-show" name="basic[sex][is_show]" value="0">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content layui-hide">
<td>会员生日</td>
<td>
<input type="radio" class="include" name="basic[birthday][include]" value="1" title="包含" checked>
<input type="radio" class="include" name="basic[birthday][include]" value="2" title="不包含">
</td>
<td>
<div class="layui-input-inline">
<input type="text" class="layui-input layui-input-start" name="basic[birthday][start]" id="birthday_start_date" 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 layui-input-end" name="basic[birthday][end]" id="birthday_end_date" placeholder="请输入结束时间" autocomplete="off" readonly>
</div>
<input type="hidden" class="is-show" name="basic[birthday][is_show]" value="0">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content layui-hide">
<td>注册时间</td>
<td>
<input type="radio" class="include" name="basic[reg_time][include]" value="1" title="包含" checked>
<input type="radio" class="include" name="basic[reg_time][include]" value="2" title="不包含">
</td>
<td>
<div class="layui-input-inline">
<input type="text" class="layui-input layui-input-start" name="basic[reg_time][start]" id="reg_start_date" 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 layui-input-end" name="basic[reg_time][end]" id="reg_end_date" placeholder="请输入结束时间" autocomplete="off" readonly>
</div>
<input type="hidden" class="is-show" name="basic[reg_time][is_show]" value="0">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content layui-hide">
<td>当前积分</td>
<td>
<input type="radio" class="include" name="basic[point][include]" value="1" title="包含" checked>
<input type="radio" class="include" name="basic[point][include]" value="2" title="不包含">
</td>
<td>
<div class="layui-input-inline">
<input type="number" class="layui-input layui-input-start layui-input-int" name="basic[point][start]" placeholder="请输入积分最小值" autocomplete="off" min="0">
</div>
<div class="layui-input-inline split">-</div>
<div class="layui-input-inline end-time">
<input type="number" class="layui-input layui-input-end layui-input-int" name="basic[point][end]" placeholder="请输入积分最大值" autocomplete="off" min="0">
</div>
<input type="hidden" class="is-show" name="basic[point][is_show]" value="0">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content layui-hide">
<td>当前余额</td>
<td>
<input type="radio" class="include" name="basic[balance][include]" value="1" title="包含" checked>
<input type="radio" class="include" name="basic[balance][include]" value="2" title="不包含">
</td>
<td>
<div class="layui-input-inline">
<input type="number" class="layui-input layui-input-start layui-input-flo" name="basic[balance][start]" placeholder="请输入当前余额最小值" autocomplete="off" min="0">
</div>
<div class="layui-input-inline split">-</div>
<div class="layui-input-inline end-time">
<input type="number" class="layui-input layui-input-end layui-input-flo" name="basic[balance][end]" placeholder="请输入当前余额最大值" autocomplete="off" min="0">
</div>
<input type="hidden" class="is-show" name="basic[balance][is_show]" value="0">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content layui-hide">
<td>当前成长值</td>
<td>
<input type="radio" class="include" name="basic[growth][include]" value="1" title="包含" checked>
<input type="radio" class="include" name="basic[growth][include]" value="2" title="不包含">
</td>
<td>
<div class="layui-input-inline">
<input type="number" class="layui-input layui-input-start layui-input-flo" name="basic[growth][start]" placeholder="请输入当前成长值最小值" autocomplete="off" min="0">
</div>
<div class="layui-input-inline split">-</div>
<div class="layui-input-inline end-time">
<input type="number" class="layui-input layui-input-end layui-input-flo" name="basic[growth][end]" placeholder="请输入当前成长值最大值" autocomplete="off" min="0">
</div>
<input type="hidden" class="is-show" name="basic[growth][is_show]" value="0">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content layui-hide">
<td>签到次数</td>
<td>
<input type="radio" class="include" name="basic[sign_days_series][include]" value="1" title="包含" checked>
<input type="radio" class="include" name="basic[sign_days_series][include]" value="2" title="不包含">
</td>
<td>
<div class="layui-input-inline">
<input type="number" class="layui-input layui-input-start layui-input-int" name="basic[sign_days_series][start]" placeholder="请输入签到次数最小值" autocomplete="off" min="0">
</div>
<div class="layui-input-inline split">-</div>
<div class="layui-input-inline end-time">
<input type="number" class="layui-input layui-input-end layui-input-int" name="basic[sign_days_series][end]" placeholder="请输入签到次数最大值" autocomplete="off" min="0">
</div>
<input type="hidden" class="is-show" name="basic[sign_days_series][is_show]" value="0">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content layui-hide">
<td>会员手机</td>
<td>
<input type="radio" class="include" name="basic[mobile][include]" value="1" title="包含" checked>
<input type="radio" class="include" name="basic[mobile][include]" value="2" title="不包含">
</td>
<td>
<div class="layui-input-inline">
<input type="text" name="basic[mobile][content]" autocomplete="off" class="layui-input member-mobile">
</div>
<input type="hidden" class="is-show" name="basic[mobile][is_show]" value="0">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content layui-hide">
<td>付款金额</td>
<td>
<input type="radio" class="include" name="consume[order_money][include]" value="1" title="包含" checked>
<input type="radio" class="include" name="consume[order_money][include]" value="2" title="不包含">
</td>
<td>
<div class="layui-input-inline">
<input type="number" class="layui-input layui-input-start layui-input-flo" name="consume[order_money][start]" placeholder="请输入付款金额最小值" autocomplete="off" min="0">
</div>
<div class="layui-input-inline split">-</div>
<div class="layui-input-inline end-time">
<input type="number" class="layui-input layui-input-end layui-input-flo" name="consume[order_money][end]" placeholder="请输入付款金额最大值" autocomplete="off" min="0">
</div>
<input type="hidden" class="is-show" name="consume[order_money][is_show]" value="0">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content layui-hide">
<td>消费金额</td>
<td>
<input type="radio" class="include" name="consume[order_complete_money][include]" value="1" title="包含" checked>
<input type="radio" class="include" name="consume[order_complete_money][include]" value="2" title="不包含">
</td>
<td>
<div class="layui-input-inline">
<input type="number" class="layui-input layui-input-start layui-input-flo" name="consume[order_complete_money][start]" placeholder="请输入消费金额最小值" autocomplete="off" min="0">
</div>
<div class="layui-input-inline split">-</div>
<div class="layui-input-inline end-time">
<input type="number" class="layui-input layui-input-end layui-input-flo" name="consume[order_complete_money][end]" placeholder="请输入消费金额最大值" autocomplete="off" min="0">
</div>
<input type="hidden" class="is-show" name="consume[order_complete_money][is_show]" value="0">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content layui-hide">
<td>付款次数</td>
<td>
<input type="radio" class="include" name="consume[order_num][include]" value="1" title="包含" checked>
<input type="radio" class="include" name="consume[order_num][include]" value="2" title="不包含">
</td>
<td>
<div class="layui-input-inline">
<input type="number" class="layui-input layui-input-start layui-input-int" name="consume[order_num][start]" placeholder="请输入付款次数最小值" autocomplete="off" min="0">
</div>
<div class="layui-input-inline split">-</div>
<div class="layui-input-inline end-time">
<input type="number" class="layui-input layui-input-end layui-input-int" name="consume[order_num][end]" placeholder="请输入付款次数最大值" autocomplete="off" min="0">
</div>
<input type="hidden" class="is-show" name="consume[order_num][is_show]" value="0">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content layui-hide">
<td>消费次数</td>
<td>
<input type="radio" class="include" name="consume[order_complete_num][include]" value="1" title="包含" checked>
<input type="radio" class="include" name="consume[order_complete_num][include]" value="2" title="不包含">
</td>
<td>
<div class="layui-input-inline">
<input type="number" class="layui-input layui-input-start layui-input-int" name="consume[order_complete_num][start]" placeholder="请输入消费次数最小值" autocomplete="off" min="0">
</div>
<div class="layui-input-inline split">-</div>
<div class="layui-input-inline end-time">
<input type="number" class="layui-input layui-input-end layui-input-int" name="consume[order_complete_num][end]" placeholder="请输入消费次数最大值" autocomplete="off" min="0">
</div>
<input type="hidden" class="is-show" name="consume[order_complete_num][is_show]" value="0">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="form-row" style="margin-left: 110px;">
<button class="layui-btn" lay-submit lay-filter="calculate">计算会员数</button>
<div>符合条件的群体人数: <span class="member_num text-color">0</span> 人,点击计算按钮可查看符合条件的群体人数。</div>
</div>
</div>
<div class="layui-card-body">
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<button class="layui-btn layui-btn-primary" onclick="backMemberClusterList()">返回</button>
</div>
</div>
</div>
</div>
<script>
$(function(){
$('.weight-list span').not('.disabled').eq(0).addClass("active");
})
var form, laytpl, laydate, isClick = false, member_num = 0, member_ids = '', sexVal = [];
layui.use(['form', 'laytpl', 'laydate'], function() {
form = layui.form;
laytpl = layui.laytpl;
laydate = layui.laydate;
form.render();
//生日开始时间
laydate.render({
elem: '#birthday_start_date',
type: 'datetime'
});
//生日结束时间
laydate.render({
elem: '#birthday_end_date',
type: 'datetime'
});
//注册开始时间
laydate.render({
elem: '#reg_start_date',
type: 'datetime'
});
//注册结束时间
laydate.render({
elem: '#reg_end_date',
type: 'datetime'
});
$(".weight-list span").click(function() {
if (!$(this).hasClass("disabled")) {
$(this).addClass("active");
$(this).siblings().removeClass("active");
}
});
$(".cluster-btn").click(function() {
var _index = $(this).children().val();
if (!$(this).hasClass("border-color")) {
$(this).addClass("border-color");
$(".cluster-content").eq(_index).removeClass("layui-hide");
$(".cluster-content").eq(_index).find(".is-show").val(1);
$(".cluster-content").eq(_index).find(".layui-input-inline input.layui-input").attr("lay-verify", "notnull");
$(".cluster-content").eq(_index).find(".layui-input-inline input.layui-input-start").attr("lay-verify", "notnull|start");
$(".cluster-content").eq(_index).find(".layui-input-inline input.layui-input-end").attr("lay-verify", "notnull|end");
$(".cluster-content").eq(_index).find(".layui-input-inline input[type='number']").attr("lay-verify", "notnull|end|num");
$(".cluster-content").eq(_index).find(".layui-input-inline input.member-mobile").attr("lay-verify", "notnull|len");
$(".cluster-content").eq(_index).find(".layui-input-inline input.layui-input-int.layui-input-start").attr("lay-verify", "notnull|start|num|int");
$(".cluster-content").eq(_index).find(".layui-input-inline input.layui-input-flo.layui-input-end").attr("lay-verify", "notnull|end|num|flo");
}
//点击了需要重新计算
// isClick = false;
form.render();
});
form.on('submit(calculate)', function(data) {
// isClick = true;
var rule_json = resetData(data.field);
if (rule_json.basic.sex.is_show == 1) {
var flag = false;
$(".input-checkbox").each(function() {
var isChecked = $(this).is(":checked");
if (isChecked) {
flag = true;
}
});
if (!flag) {
layer.msg("请选择性别", {icon: 5, anim: 6});
return false;
}
}
$.ajax({
url: ns.url("shop/membercluster/calculate"),
type: "POST",
dataType: "JSON",
data: {
rule_json: JSON.stringify(rule_json)
},
success: function(res) {
if (res.code >= 0) {
member_num = res.data.member_num;
member_ids = res.data.member_ids;
$(".member_num").html(member_num);
}
}
})
});
form.on('submit(save)', function(data) {
// if (isClick) {
var rule_json = resetData(data.field);
$.ajax({
url: ns.url("shop/membercluster/addCluster"),
type: "POST",
dataType: "JSON",
data: {
cluster_name: data.field.cluster_name,
rule_json: JSON.stringify(rule_json),
},
success: function(res) {
if (res.code >= 0) {
layer.confirm('添加成功', {
title:'操作提示',
btn: ['返回列表', '继续添加'],
closeBtn: 0,
yes: function(index, layero) {
location.hash = ns.hash("shop/membercluster/clusterList")
layer.close(index);
},
btn2: function(index, layero) {
listenerHash(); // 刷新页面
layer.close(index);
}
});
}else{
layer.msg(res.message);
}
}
})
// } else {
// layer.msg("请先计算会员数", {icon: 5, anim: 6});
// }
});
form.on('submit(setlabel)', function(obj) {
var field = obj.field;
var arr_id = [], temp = [];
for (var prop in field) {
arr_id.push(field[prop]);
$("#set_label").find("input").each(function() {
var label_id = $(this).attr("data-id");
if (field[prop] == label_id) {
temp.push($(this).attr("title"))
}
})
}
$(".member-label-con").val(temp);
$("input[name='basic[member_label][content]']").val(arr_id);
layer.closeAll('page');
});
form.on('submit(setlevel)', function(obj) {
var field = obj.field;
var arr_id = [], temp = [];
for (var prop in field) {
arr_id.push(field[prop]);
$("#set_level").find("input").each(function() {
var level_id = $(this).attr("data-id");
if (field[prop] == level_id) {
temp.push($(this).attr("title"))
}
})
}
$(".member-level-con").val(temp);
$("input[name='basic[member_level][content]']").val(arr_id);
layer.closeAll('page');
});
/**
* 表单验证
*/
form.verify({
notnull: function(value, item) {
var str = $(item).parents(".cluster-content").find("td").eq(0).text();
if (value == '') {
return str + '不能为空';
}
},
end: function(value, item) {
var start = $(item).parents(".cluster-content").find(".layui-input-start").val();
var str1 = $(item).attr("placeholder").slice(3);
var str2 = $(item).parents(".cluster-content").find(".layui-input-start").attr("placeholder").slice(3);
if (Number(value) < Number(start)) {
return str1 + "不能小于" + str2;
}
},
num: function(value, item) {
var str = $(item).parents(".cluster-content").find("td").eq(0).text();
if (value < 0) {
return str + "不能小于0";
}
},
len: function(value, item) {
if (value.length > 11) {
return "手机号为11位";
}
},
int: function(value, item) {
var str = $(item).parents(".cluster-content").find("td").eq(0).text();
if (value % 1 != 0) {
return str + "不能为小数";
}
},
flo: function(value, item) {
var str = $(item).parents(".cluster-content").find("td").eq(0).text();
if (value * 100 % 1 != 0) {
return str + "最多保留两位小数";
}
}
})
});
/**
* 设置标签
*/
function settinglabel() {
laytpl($("#label_change").html()).render({}, function(html) {
layer_label = layer.open({
title: '设置标签',
skin: 'layer-tips-class',
type: 1,
area: ['450px','260px'],
content: html,
});
});
form.render();
}
/**
* 设置等级
*/
function settinglevel() {
laytpl($("#level_change").html()).render({}, function(html) {
layer_level = layer.open({
title: '设置等级',
skin: 'layer-tips-class',
type: 1,
area: ['450px','260px'],
content: html,
});
});
form.render();
}
function delDiv(e) {
var _len = $(e).parents(".cluster-content").index();
$(e).parents(".cluster-content").addClass("layui-hide");
$(e).parents(".cluster-content").find("input").removeAttr("lay-verify");
$(e).parents(".cluster-content").find(".layui-input-inline input").val("");
$(e).parents(".cluster-content").find(".is-show").val(0);
$(e).parents(".cluster-content").find("input[name='basic[sex][content]']").prop("checked",false);
$(".cluster-btn").eq(_len).removeClass("border-color");
}
function closeLabel() {
layer.close(layer_label);
}
function closeLevel() {
layer.close(layer_level);
}
function backMemberClusterList() {
location.hash = ns.hash("shop/membercluster/clusterList");
}
// 数据结构
function resetData(data) {
var rule_json = {};
$.each(data, function(index, item) {
if (index.indexOf("[") != -1) {
var arr = index.split("[");
if (rule_json[arr[0]] == undefined) {
rule_json[arr[0]] = {};
}
var name = arr[1].slice(0, arr[1].length - 1);
if (rule_json[arr[0]][name] == undefined) {
rule_json[arr[0]][name] = {};
}
var attr = arr[2].slice(0, arr[2].length - 1);
rule_json[arr[0]][name][attr] = item;
}
})
sexVal = [];
$("input[name='basic[sex][content]']:checked").each(function (index, item) {
sexVal.push($(this).val());
});
rule_json.basic.sex.content = sexVal.toString();
return rule_json;
}
</script>
<!-- 设置标签弹框html -->
<script type="text/html" id="label_change">
<div class="layui-form member-form" id="set_label" lay-filter="form">
<div class="layui-form-item">
<label class="layui-form-label sm">标签</label>
<div class="layui-input-block">
{foreach $member_label_list as $member_label_list_k => $member_label_list_v}
<input type="checkbox" name="label_id{$member_label_list_v.label_id}" data-id="{$member_label_list_v.label_id}" value="{$member_label_list_v.label_id}" title="{$member_label_list_v.label_name}" lay-skin="primary">
{/foreach}
</div>
</div>
<div class="form-row sm">
<button class="layui-btn" lay-submit lay-filter="setlabel">确定</button>
<button class="layui-btn layui-btn-primary" onclick="closeLabel()">返回</button>
</div>
</div>
</script>
<!-- 设置标签弹框html -->
<script type="text/html" id="level_change">
<div class="layui-form member-form" id="set_level" lay-filter="form">
<div class="layui-form-item">
<label class="layui-form-label sm">等级</label>
<div class="layui-input-block">
{foreach $member_level_list as $member_level_list_k => $member_level_list_v}
<input type="checkbox" name="level_id{$member_level_list_v.level_id}" data-id="{$member_level_list_v.level_id}" value="{$member_level_list_v.level_id}" title="{$member_level_list_v.level_name}" lay-skin="primary">
{/foreach}
</div>
</div>
<div class="form-row sm">
<button class="layui-btn" lay-submit lay-filter="setlevel">确定</button>
<button class="layui-btn layui-btn-primary" onclick="closeLevel()">返回</button>
</div>
</div>
</script>

View File

@@ -0,0 +1,405 @@
<link rel="stylesheet" type="text/css" href="SHOP_CSS/member_cluster.css" />
<style>
.layui-layout-admin .screen{margin-bottom: 15px;}
</style>
<!-- 添加会员群体 -->
<div class="single-filter-box">
<button type="button" class="layui-btn" onclick="location.hash = '{:hash_url("shop/membercluster/addCluster")}'">添加群体</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="cluster_name" placeholder="群体名称" autocomplete="off" class="layui-input ">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">更新时间</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="start_date" id="start_date" 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_date" placeholder="请输入结束时间" autocomplete="off" readonly>
</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="cluster_list" lay-filter="cluster_list"></table>
<!-- 工具栏操作 -->
<script type="text/html" id="operation">
<div class="table-btn">
<a class="layui-btn" lay-event="member">查看会员</a>
<a class="layui-btn" lay-event="info">编辑</a>
<a class="layui-btn" lay-event="delete">删除</a>
<a class="layui-btn" lay-event="more">批量处理</a>
<div class="more-operation">
<a class="operation" lay-event="recive_coupon">发放优惠券</a>
<a class="operation" lay-event="adjust_balance">调整余额</a>
<a class="operation" lay-event="adjust_integral">调整积分</a>
<a class="operation" lay-event="export_cluster_member">导出</a>
</div>
</div>
</script>
<!-- 积分弹框html -->
<script type="text/html" id="point">
<div class="layui-form integral-bounced">
<div class="layui-form-item">
<label class="layui-form-label">调整数额</label>
<div class="layui-input-block amount">
<input type="number" value="0" placeholder="请输入调整数额" name="adjust_num" lay-verify="num" class="layui-input len-short">
</div>
<span class="word-aux">调整数额与当前积分数相加不能小于0</span>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注</label>
<div class="layui-input-block len-long">
<textarea class="layui-textarea" name="remark" placeholder="请输入备注" maxlength="150"></textarea>
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="savePoint">确定</button>
</div>
<input type="hidden" name="cluster_id" value="{{d.cluster_id}}" />
</div>
</script>
<!-- 余额弹框html -->
<script type="text/html" id="balance">
<div class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label">调整数额不可提现</label>
<div class="layui-input-block">
<input type="number" value="0" placeholder="请输入调整数额" name="adjust_num" lay-verify="num" class="layui-input len-short">
</div>
<span class="word-aux">调整数额与当前储值余额相加不能小于0</span>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注</label>
<div class="layui-input-block len-long">
<textarea class="layui-textarea" name="remark" placeholder="请输入备注" maxlength="150"></textarea>
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="saveBalance">确定</button>
</div>
<input type="hidden" name="cluster_id" value="{{d.cluster_id}}" />
</div>
</script>
<script type='text/javascript' src='SHOP_JS/member_cluster.js'></script>
<script type="text/javascript">
var table, form, laytpl, laydate,
repeat_flag = false,
currentDate = new Date(),
minDate = "";
layui.use(['form', 'laytpl', 'laydate'], function() {
form = layui.form;
laytpl = layui.laytpl;
laydate = layui.laydate;
currentDate.setDate(currentDate.getDate() - 7);
form.render();
//注册开始时间
laydate.render({
elem: '#start_date',
type: 'datetime'
});
//注册结束时间
laydate.render({
elem: '#end_date',
type: 'datetime'
});
/**
* 加载表格
*/
table = new Table({
elem: '#cluster_list',
url: ns.url("shop/membercluster/clusterList"),
cols: [
[
{
field: 'cluster_name',
title: '群体名称',
width: '25%',
unresize: 'false'
}, {
field: 'member_num',
title: '人数',
width: '25%',
unresize: 'false',
templet: function (data) {
return "<a href='"+ns.href("shop/member/memberList?cluster_id=" + data.cluster_id)+"'>"+"<span class='text-color'>"+data.member_num+"</span>"+"</a>";
}
}, {
field: 'update_time',
title: '更新时间',
width: '25%',
unresize: 'false',
templet: function (data) {
return ns.time_to_date(data.update_time);
}
}, {
title: '操作',
unresize: 'false',
toolbar: '#operation',
align : 'right'
}
]
],
});
/**
* 监听工具栏操作
*/
table.tool(function(obj) {
var data = obj.data;
switch (obj.event) {
case 'info': //编辑
location.hash = ns.hash("shop/membercluster/editCluster?cluster_id=" + data.cluster_id);
break;
case 'delete': //删除
delCluster(data.cluster_id);
break;
case 'adjust_balance': //调整余额
adjustBalance(data);
break;
case 'adjust_integral': //调整积分
adjustIntegral(data);
break;
case 'more': //更多
$('.more-operation').css('display', 'none');
$(obj.tr).find('.more-operation').css('display', 'block');
break;
case 'recive_coupon': //发放优惠券
selectCoupon(data);
break;
case 'export_cluster_member': //导出相应会员
exportClusterMember(data.cluster_id);
break;
case 'member': //查看会员
window.open(ns.href("shop/member/memberList?cluster_id=" + data.cluster_id));
break;
}
});
$(document).click(function(event) {
if ($(event.target).attr('lay-event') != 'more' && $('.more-operation').not(':hidden').length) {
$('.more-operation').css('display', 'none');
}
});
/**
* 删除
*/
function delCluster(cluster_ids) {
if (repeat_flag) return false;
repeat_flag = true;
layer.confirm('确认删除会员群体?', function(index) {
layer.close(index);
$.ajax({
url: ns.url("shop/membercluster/deleteCluster"),
data: {cluster_ids},
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 adjustBalance(e){
laytpl($("#balance").html()).render(e, function(html) {
layer.open({
title: '调整储值余额',
skin: 'layer-tips-class',
type: 1,
area: ['800px'],
content: html
});
});
}
//调整积分
function adjustIntegral(e){
laytpl($("#point").html()).render(e, function(html) {
layer.open({
title: '调整积分',
skin: 'layer-tips-class',
type: 1,
area: ['800px'],
content: html
});
});
}
var repeat_flag_point = false;
form.on('submit(savePoint)', function(data) {
if (repeat_flag_point) return false;
repeat_flag_point = true;
if (data.field.adjust_num == 0) {
layer.msg('调整数值不能为0');
repeat_flag_point = false;
return ;
}
if (data.field.adjust_num < 0) {
layer.msg('积分不可以为负数');
repeat_flag_point = false;
return ;
}
$.ajax({
type: "POST",
url: ns.url("shop/membercluster/sendPoint"),
data: data.field,
dataType: 'JSON',
success: function(res) {
layer.msg(res.message);
repeat_flag_point = false;
if (res.code == 0) {
layer.closeAll('page');
table.reload();
}
}
});
});
var repeat_flag_balance = false;
form.on('submit(saveBalance)', function(data) {
if (repeat_flag_balance) return false;
repeat_flag_balance = true;
if (data.field.adjust_num == 0) {
layer.msg('调整数值不能为0');
repeat_flag_balance = false;
return ;
}
if (data.field.adjust_num < 0) {
layer.msg('当前储值余额不可以为负数');
repeat_flag_balance = false;
return ;
}
$.ajax({
type: "POST",
url: ns.url("shop/membercluster/sendBalance"),
data: data.field,
dataType: 'JSON',
success: function(res) {
layer.msg(res.message);
repeat_flag_balance = false;
if (res.code == 0) {
layer.closeAll('page');
table.reload();
}
}
});
});
/**
* 导出群体内会员信息
*/
function exportClusterMember(cluster_id) {
location.href = ns.url("shop/membercluster/exportClusterMember",{request_mode: 'download',"cluster_id":cluster_id});
}
/**
* 搜索功能
*/
form.on('submit(search)', function(data) {
table.reload({
page: {
curr: 1
},
where: data.field
});
return false;
});
$(".search-form").click(function() {
$(".layui-form-search").show();
$(this).hide();
});
$(".form-hide-btn").click(function() {
$(".layui-form-search").hide();
$(".search-form").show();
});
/**
* 发放优惠券
*/
function selectCoupon(data) {
laytpl($("#recive_coupon").html()).render(data, function(html) {
layer_coupon = layer.open({
title: '选择优惠券',
skin: 'layer-tips-class',
type: 1,
area: ['700px', '542px'],
content: html,
});
renderCoupon("", data.cluster_id);
});
}
});
</script>
<!-- 发放优惠券弹框 -->
<script type="text/html" id="recive_coupon">
<div class="recive-coupon">
<div class="coupon-modal">
<div class="coupon-list all-coupon">
<div class="title bg-color-gray">可选优惠券</div>
<div class="box"></div>
</div>
<button class="add">添加</button>
<div class="coupon-list selected-coupon">
<div class="title bg-color-gray">已选优惠券</div>
<div class="box"></div>
</div>
</div>
<div class="modal-operation">
<button class="layui-btn save-btn">确定</button>
<button class="layui-btn layui-btn-primary" onclick="back()">返回</button>
</div>
</div>
</script>

View File

@@ -0,0 +1,712 @@
<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.active{border-color: var(--base-color); }
.weight-list span.disabled{background:#f1f1f1;cursor: not-allowed; }
.form-wrap{padding-top: 0;}
</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">
<input type="text" name="cluster_name" lay-verify="required" autocomplete="off" value="{$cluster_info['cluster_name']}" class="layui-input len-mid">
</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">
<button class="layui-btn layui-btn-primary cluster-btn {if $cluster_info['rule_arr']['basic']['member_level']['is_show'] == 1} border-color {/if}">会员等级<input type="hidden" value="0" /></button>
<button class="layui-btn layui-btn-primary cluster-btn {if $cluster_info['rule_arr']['basic']['member_label']['is_show'] == 1} border-color {/if}">会员标签<input type="hidden" value="1" /></button>
<button class="layui-btn layui-btn-primary cluster-btn {if $cluster_info['rule_arr']['basic']['sex']['is_show'] == 1} border-color {/if}">性别<input type="hidden" value="2" /></button>
<button class="layui-btn layui-btn-primary cluster-btn {if $cluster_info['rule_arr']['basic']['birthday']['is_show'] == 1} border-color {/if}">生日<input type="hidden" value="3" /></button>
<button class="layui-btn layui-btn-primary cluster-btn {if $cluster_info['rule_arr']['basic']['reg_time']['is_show'] == 1} border-color {/if}">注册时间<input type="hidden" value="4" /></button>
<button class="layui-btn layui-btn-primary cluster-btn {if $cluster_info['rule_arr']['basic']['point']['is_show'] == 1} border-color {/if}">当前积分<input type="hidden" value="5" /></button>
<button class="layui-btn layui-btn-primary cluster-btn {if $cluster_info['rule_arr']['basic']['balance']['is_show'] == 1} border-color {/if}">当前余额<input type="hidden" value="6" /></button>
<button class="layui-btn layui-btn-primary cluster-btn {if $cluster_info['rule_arr']['basic']['growth']['is_show'] == 1} border-color {/if}">当前成长值<input type="hidden" value="7" /></button>
<button class="layui-btn layui-btn-primary cluster-btn {if $cluster_info['rule_arr']['basic']['sign_days_series']['is_show'] == 1} border-color {/if}">连续签到次数<input type="hidden" value="8" /></button>
<button class="layui-btn layui-btn-primary cluster-btn {if $cluster_info['rule_arr']['basic']['mobile']['is_show'] == 1} border-color {/if}">会员手机<input type="hidden" value="9" /></button>
</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 cluster-btn {if $cluster_info['rule_arr']['consume']['order_money']['is_show'] == 1} border-color {/if}">付款金额<input type="hidden" value="10" /></button>
<button class="layui-btn layui-btn-primary cluster-btn {if $cluster_info['rule_arr']['consume']['order_complete_money']['is_show'] == 1} border-color {/if}">消费金额<input type="hidden" value="11" /></button>
<button class="layui-btn layui-btn-primary cluster-btn {if $cluster_info['rule_arr']['consume']['order_num']['is_show'] == 1} border-color {/if}">付款次数<input type="hidden" value="12" /></button>
<button class="layui-btn layui-btn-primary cluster-btn {if $cluster_info['rule_arr']['consume']['order_complete_num']['is_show'] == 1} border-color {/if}">消费次数<input type="hidden" value="13" /></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">
<div class="layui-form-item">
<div class="layui-input-block">
<table class="layui-table" id="goods" lay-skin="line" lay-size="lg">
<colgroup>
<col width="15%">
<col width="20%">
<col width="50%">
<col width="10%">
</colgroup>
<thead>
<tr>
<th>选项</th>
<th>范围</th>
<th>条件</th>
<th class="operation">操作</th>
</tr>
</thead>
<tbody>
<tr class="cluster-content {if $cluster_info['rule_arr']['basic']['member_level']['is_show'] == 0} layui-hide {/if}">
<td>会员等级</td>
<td>
<input type="radio" class="include" name="basic[member_level][include]" value="1" title="包含" {if condition="$cluster_info['rule_arr']['basic']['member_level']['include'] == 1"} checked {/if}>
<input type="radio" class="include" name="basic[member_level][include]" value="2" title="不包含" {if condition="$cluster_info['rule_arr']['basic']['member_level']['include'] == 2"} checked {/if}>
</td>
<td>
<div class="layui-input-inline">
<input type="text" autocomplete="off" class="layui-input member-level-con" readonly onclick="settinglevel()" value="{$cluster_info['rule_arr']['basic']['member_level']['content_name']}">
<input type="hidden" name="basic[member_level][content]" value="{$cluster_info['rule_arr']['basic']['member_level']['content']}">
</div>
<input type="hidden" class="is-show" name="basic[member_level][is_show]" value="{$cluster_info['rule_arr']['basic']['member_level']['is_show']}">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content {if $cluster_info['rule_arr']['basic']['member_label']['is_show'] == 0} layui-hide {/if}">
<td>会员标签</td>
<td>
<input type="radio" class="include" name="basic[member_label][include]" value="1" title="包含" {if condition="$cluster_info['rule_arr']['basic']['member_label']['include'] == 1"} checked {/if}>
<input type="radio" class="include" name="basic[member_label][include]" value="2" title="不包含" {if condition="$cluster_info['rule_arr']['basic']['member_label']['include'] == 2"} checked {/if}>
</td>
<td>
<div class="layui-input-inline">
<input type="text" autocomplete="off" class="layui-input member-label-con" readonly onclick="settinglabel()" value="{$cluster_info['rule_arr']['basic']['member_label']['content_name']}">
<input type="hidden" name="basic[member_label][content]" value="{$cluster_info['rule_arr']['basic']['member_label']['content']}">
</div>
<input type="hidden" class="is-show" name="basic[member_label][is_show]" value="{$cluster_info['rule_arr']['basic']['member_label']['is_show']}">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content {if $cluster_info['rule_arr']['basic']['sex']['is_show'] == 0} layui-hide {/if}">
<td>会员性别</td>
<td>
<input type="radio" class="include" name="basic[sex][include]" value="1" title="包含" {if condition="$cluster_info['rule_arr']['basic']['sex']['include'] == 1"} checked {/if}>
<input type="radio" class="include" name="basic[sex][include]" value="2" title="不包含" {if condition="$cluster_info['rule_arr']['basic']['sex']['include'] == 2"} checked {/if}>
</td>
<td>
<input type="checkbox" class="input-checkbox" lay-skin="primary" lay-filter="sex" name="basic[sex][content]" value="0" title="保密" {if in_array(0, $cluster_info['rule_arr']['basic']['sex']['content_arr'])}checked{/if}>
<input type="checkbox" class="input-checkbox" lay-skin="primary" lay-filter="sex" name="basic[sex][content]" value="1" title="男" {if in_array(1, $cluster_info['rule_arr']['basic']['sex']['content_arr'])}checked{/if}>
<input type="checkbox" class="input-checkbox" lay-skin="primary" lay-filter="sex" name="basic[sex][content]" value="2" title="女" {if in_array(2, $cluster_info['rule_arr']['basic']['sex']['content_arr'])}checked{/if}>
<input type="hidden" class="is-show" name="basic[sex][is_show]" value="{$cluster_info['rule_arr']['basic']['sex']['is_show']}">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content {if $cluster_info['rule_arr']['basic']['birthday']['is_show'] == 0} layui-hide {/if}">
<td>会员生日</td>
<td>
<input type="radio" class="include" name="basic[birthday][include]" value="1" title="包含" {if condition="$cluster_info['rule_arr']['basic']['birthday']['include'] == 1"} checked {/if}>
<input type="radio" class="include" name="basic[birthday][include]" value="2" title="不包含" {if condition="$cluster_info['rule_arr']['basic']['birthday']['include'] == 2"} checked {/if}>
</td>
<td>
<div class="layui-input-inline">
<input type="text" class="layui-input layui-input-start" name="basic[birthday][start]" id="birthday_start_date" placeholder="请输入开始时间" autocomplete="off" readonly value="{$cluster_info['rule_arr']['basic']['birthday']['start']}">
</div>
<div class="layui-input-inline split">-</div>
<div class="layui-input-inline end-time">
<input type="text" class="layui-input layui-input-end" name="basic[birthday][end]" id="birthday_end_date" placeholder="请输入结束时间" autocomplete="off" readonly value="{$cluster_info['rule_arr']['basic']['birthday']['end']}">
</div>
<input type="hidden" class="is-show" name="basic[birthday][is_show]" value="{$cluster_info['rule_arr']['basic']['birthday']['is_show']}">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content {if $cluster_info['rule_arr']['basic']['reg_time']['is_show'] == 0} layui-hide {/if}">
<td>注册时间</td>
<td>
<input type="radio" class="include" name="basic[reg_time][include]" value="1" title="包含" {if condition="$cluster_info['rule_arr']['basic']['reg_time']['include'] == 1"} checked {/if}>
<input type="radio" class="include" name="basic[reg_time][include]" value="2" title="不包含" {if condition="$cluster_info['rule_arr']['basic']['reg_time']['include'] == 2"} checked {/if}>
</td>
<td>
<div class="layui-input-inline">
<input type="text" class="layui-input layui-input-start" name="basic[reg_time][start]" id="reg_start_date" placeholder="请输入开始时间" autocomplete="off" readonly value="{$cluster_info['rule_arr']['basic']['reg_time']['start']}">
</div>
<div class="layui-input-inline split">-</div>
<div class="layui-input-inline end-time">
<input type="text" class="layui-input layui-input-end" name="basic[reg_time][end]" id="reg_end_date" placeholder="请输入结束时间" autocomplete="off" readonly value="{$cluster_info['rule_arr']['basic']['reg_time']['end']}">
</div>
<input type="hidden" class="is-show" name="basic[reg_time][is_show]" value="{$cluster_info['rule_arr']['basic']['reg_time']['is_show']}">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content {if $cluster_info['rule_arr']['basic']['point']['is_show'] == 0} layui-hide {/if}">
<td>当前积分</td>
<td>
<input type="radio" class="include" name="basic[point][include]" value="1" title="包含" {if condition="$cluster_info['rule_arr']['basic']['point']['include'] == 1"} checked {/if}>
<input type="radio" class="include" name="basic[point][include]" value="2" title="不包含" {if condition="$cluster_info['rule_arr']['basic']['point']['include'] == 2"} checked {/if}>
</td>
<td>
<div class="layui-input-inline">
<input type="number" class="layui-input layui-input-start layui-input-int" name="basic[point][start]" placeholder="请输入积分最小值" autocomplete="off" min="0" value="{$cluster_info['rule_arr']['basic']['point']['start']}">
</div>
<div class="layui-input-inline split">-</div>
<div class="layui-input-inline end-time">
<input type="number" class="layui-input layui-input-end layui-input-int" name="basic[point][end]" placeholder="请输入积分最大值" autocomplete="off" min="0" value="{$cluster_info['rule_arr']['basic']['point']['end']}">
</div>
<input type="hidden" class="is-show" name="basic[point][is_show]" value="{$cluster_info['rule_arr']['basic']['point']['is_show']}">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content {if $cluster_info['rule_arr']['basic']['balance']['is_show'] == 0} layui-hide {/if}">
<td>当前余额</td>
<td>
<input type="radio" class="include" name="basic[balance][include]" value="1" title="包含" {if condition="$cluster_info['rule_arr']['basic']['balance']['include'] == 1"} checked {/if}>
<input type="radio" class="include" name="basic[balance][include]" value="2" title="不包含" {if condition="$cluster_info['rule_arr']['basic']['balance']['include'] == 2"} checked {/if}>
</td>
<td>
<div class="layui-input-inline">
<input type="number" class="layui-input layui-input-start layui-input-flo" name="basic[balance][start]" placeholder="请输入当前余额最小值" autocomplete="off" min="0" value="{$cluster_info['rule_arr']['basic']['balance']['start']}">
</div>
<div class="layui-input-inline split">-</div>
<div class="layui-input-inline end-time">
<input type="number" class="layui-input layui-input-end layui-input-flo" name="basic[balance][end]" placeholder="请输入当前余额最大值" autocomplete="off" min="0" value="{$cluster_info['rule_arr']['basic']['balance']['end']}">
</div>
<input type="hidden" class="is-show" name="basic[balance][is_show]" value="{$cluster_info['rule_arr']['basic']['balance']['is_show']}">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content {if $cluster_info['rule_arr']['basic']['growth']['is_show'] == 0} layui-hide {/if}">
<td>当前成长值</td>
<td>
<input type="radio" class="include" name="basic[growth][include]" value="1" title="包含" {if condition="$cluster_info['rule_arr']['basic']['growth']['include'] == 1"} checked {/if}>
<input type="radio" class="include" name="basic[growth][include]" value="2" title="不包含" {if condition="$cluster_info['rule_arr']['basic']['growth']['include'] == 2"} checked {/if}>
</td>
<td>
<div class="layui-input-inline">
<input type="number" class="layui-input layui-input-start layui-input-flo" name="basic[growth][start]" placeholder="请输入当前成长值最小值" autocomplete="off" min="0" value="{$cluster_info['rule_arr']['basic']['growth']['start']}">
</div>
<div class="layui-input-inline split">-</div>
<div class="layui-input-inline end-time">
<input type="number" class="layui-input layui-input-end layui-input-flo" name="basic[growth][end]" placeholder="请输入当前成长值最大值" autocomplete="off" min="0" value="{$cluster_info['rule_arr']['basic']['growth']['end']}">
</div>
<input type="hidden" class="is-show" name="basic[growth][is_show]" value="{$cluster_info['rule_arr']['basic']['growth']['is_show']}">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content {if $cluster_info['rule_arr']['basic']['sign_days_series']['is_show'] == 0} layui-hide {/if}">
<td>签到次数</td>
<td>
<input type="radio" class="include" name="basic[sign_days_series][include]" value="1" title="包含" {if condition="$cluster_info['rule_arr']['basic']['sign_days_series']['include'] == 1"} checked {/if}>
<input type="radio" class="include" name="basic[sign_days_series][include]" value="2" title="不包含" {if condition="$cluster_info['rule_arr']['basic']['sign_days_series']['include'] == 2"} checked {/if}>
</td>
<td>
<div class="layui-input-inline">
<input type="number" class="layui-input layui-input-start layui-input-int" name="basic[sign_days_series][start]" placeholder="请输入签到次数最小值" autocomplete="off" min="0" value="{$cluster_info['rule_arr']['basic']['sign_days_series']['start']}">
</div>
<div class="layui-input-inline split">-</div>
<div class="layui-input-inline end-time">
<input type="number" class="layui-input layui-input-end layui-input-int" name="basic[sign_days_series][end]" placeholder="请输入签到次数最大值" autocomplete="off" min="0" value="{$cluster_info['rule_arr']['basic']['sign_days_series']['end']}">
</div>
<input type="hidden" class="is-show" name="basic[sign_days_series][is_show]" value="{$cluster_info['rule_arr']['basic']['sign_days_series']['is_show']}">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content {if $cluster_info['rule_arr']['basic']['mobile']['is_show'] == 0} layui-hide {/if}">
<td>会员手机</td>
<td>
<input type="radio" class="include" name="basic[mobile][include]" value="1" title="包含" {if condition="$cluster_info['rule_arr']['basic']['mobile']['include'] == 1"} checked {/if}>
<input type="radio" class="include" name="basic[mobile][include]" value="2" title="不包含" {if condition="$cluster_info['rule_arr']['basic']['mobile']['include'] == 2"} checked {/if}>
</td>
<td>
<div class="layui-input-inline">
<input type="text" name="basic[mobile][content]" lay-verify="flo" autocomplete="off" class="layui-input member-mobile" value="{$cluster_info['rule_arr']['basic']['mobile']['content']}">
</div>
<input type="hidden" class="is-show" name="basic[mobile][is_show]" value="{$cluster_info['rule_arr']['basic']['mobile']['is_show']}">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content {if $cluster_info['rule_arr']['consume']['order_money']['is_show'] == 0} layui-hide {/if}">
<td>付款金额</td>
<td>
<input type="radio" class="include" name="consume[order_money][include]" value="1" title="包含" {if condition="$cluster_info['rule_arr']['consume']['order_money']['include'] == 1"} checked {/if}>
<input type="radio" class="include" name="consume[order_money][include]" value="2" title="不包含" {if condition="$cluster_info['rule_arr']['consume']['order_money']['include'] == 2"} checked {/if}>
</td>
<td>
<div class="layui-input-inline">
<input type="number" class="layui-input layui-input-start layui-input-flo" name="consume[order_money][start]" placeholder="请输入付款金额最小值" autocomplete="off" min="0" value="{$cluster_info['rule_arr']['consume']['order_money']['start']}">
</div>
<div class="layui-input-inline split">-</div>
<div class="layui-input-inline end-time">
<input type="number" class="layui-input layui-input-end layui-input-flo" name="consume[order_money][end]" placeholder="请输入付款金额最大值" autocomplete="off" min="0" value="{$cluster_info['rule_arr']['consume']['order_money']['end']}">
</div>
<input type="hidden" class="is-show" name="consume[order_money][is_show]" value="{$cluster_info['rule_arr']['consume']['order_money']['is_show']}">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content {if $cluster_info['rule_arr']['consume']['order_complete_money']['is_show'] == 0} layui-hide {/if}">
<td>消费金额</td>
<td>
<input type="radio" class="include" name="consume[order_complete_money][include]" value="1" title="包含" {if condition="$cluster_info['rule_arr']['consume']['order_complete_money']['include'] == 1"} checked {/if}>
<input type="radio" class="include" name="consume[order_complete_money][include]" value="2" title="不包含" {if condition="$cluster_info['rule_arr']['consume']['order_complete_money']['include'] == 2"} checked {/if}>
</td>
<td>
<div class="layui-input-inline">
<input type="number" class="layui-input layui-input-start layui-input-flo" name="consume[order_complete_money][start]" placeholder="请输入消费金额最小值" autocomplete="off" min="0" value="{$cluster_info['rule_arr']['consume']['order_complete_money']['start']}">
</div>
<div class="layui-input-inline split">-</div>
<div class="layui-input-inline end-time">
<input type="number" class="layui-input layui-input-end layui-input-flo" name="consume[order_complete_money][end]" placeholder="请输入消费金额最大值" autocomplete="off" min="0" value="{$cluster_info['rule_arr']['consume']['order_complete_money']['end']}">
</div>
<input type="hidden" class="is-show" name="consume[order_complete_money][is_show]" value="{$cluster_info['rule_arr']['consume']['order_complete_money']['is_show']}">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content {if $cluster_info['rule_arr']['consume']['order_num']['is_show'] == 0} layui-hide {/if}">
<td>付款次数</td>
<td>
<input type="radio" class="include" name="consume[order_num][include]" value="1" title="包含" {if condition="$cluster_info['rule_arr']['consume']['order_num']['include'] == 1"} checked {/if}>
<input type="radio" class="include" name="consume[order_num][include]" value="2" title="不包含" {if condition="$cluster_info['rule_arr']['consume']['order_num']['include'] == 2"} checked {/if}>
</td>
<td>
<div class="layui-input-inline">
<input type="number" class="layui-input layui-input-start layui-input-int" name="consume[order_num][start]" placeholder="请输入付款次数最小值" autocomplete="off" min="0" value="{$cluster_info['rule_arr']['consume']['order_num']['start']}">
</div>
<div class="layui-input-inline split">-</div>
<div class="layui-input-inline end-time">
<input type="number" class="layui-input layui-input-end layui-input-int" name="consume[order_num][end]" placeholder="请输入付款次数最大值" autocomplete="off" min="0" value="{$cluster_info['rule_arr']['consume']['order_num']['end']}">
</div>
<input type="hidden" class="is-show" name="consume[order_num][is_show]" value="{$cluster_info['rule_arr']['consume']['order_num']['is_show']}">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
<tr class="cluster-content {if $cluster_info['rule_arr']['consume']['order_complete_num']['is_show'] == 0} layui-hide {/if}">
<td>消费次数</td>
<td>
<input type="radio" class="include" name="consume[order_complete_num][include]" value="1" title="包含" {if condition="$cluster_info['rule_arr']['consume']['order_complete_num']['include'] == 1"} checked {/if}>
<input type="radio" class="include" name="consume[order_complete_num][include]" value="2" title="不包含" {if condition="$cluster_info['rule_arr']['consume']['order_complete_num']['include'] == 2"} checked {/if}>
</td>
<td>
<div class="layui-input-inline">
<input type="number" class="layui-input layui-input-start layui-input-int" name="consume[order_complete_num][start]" placeholder="请输入消费次数最小值" autocomplete="off" min="0" value="{$cluster_info['rule_arr']['consume']['order_complete_num']['start']}">
</div>
<div class="layui-input-inline split">-</div>
<div class="layui-input-inline end-time">
<input type="number" class="layui-input layui-input-end layui-input-int" name="consume[order_complete_num][end]" placeholder="请输入消费次数最大值" autocomplete="off" min="0" value="{$cluster_info['rule_arr']['consume']['order_complete_num']['end']}">
</div>
<input type="hidden" class="is-show" name="consume[order_complete_num][is_show]" value="{$cluster_info['rule_arr']['consume']['order_complete_num']['is_show']}">
</td>
<td class='operation'>
<div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="form-row" style="margin-left: 110px;">
<button class="layui-btn" lay-submit lay-filter="calculate">计算会员数</button>
<div>符合条件的群体人数: <span class="member_num text-color">{$cluster_info['member_num']}</span> 人,点击计算按钮可查看符合条件的群体人数。</div>
</div>
</div>
<div class="layui-card-body">
<div class="form-row">
<!-- 获取cluster_id -->
<input type="hidden" name="cluster_id" id="cluster_id" lay-verify="required" value="{$cluster_info.cluster_id}" class="layui-input">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<button class="layui-btn layui-btn-primary" onclick="backMemberClusterList()">返回</button>
</div>
</div>
</div>
</div>
<script>
$(function(){
$('.weight-list span').not('.disabled').eq(0).addClass("active");
$(".cluster-content").each(function() {
if ($(this).hasClass("layui-hide")) {
$(this).find("input").removeAttr("lay-verify");
} else {
$(this).find(".layui-input-inline input.layui-input").attr("lay-verify", "notnull");
$(this).find(".layui-input-inline input.layui-input-start").attr("lay-verify", "notnull|start");
$(this).find(".layui-input-inline input.layui-input-end").attr("lay-verify", "notnull|end");
$(this).find(".layui-input-inline input[type='number']").attr("lay-verify", "notnull|end|num");
$(this).find(".layui-input-inline input.member-mobile").attr("lay-verify", "notnull|len");
$(this).find(".layui-input-inline input.layui-input-int").attr("lay-verify", "notnull|end|num|int");
$(this).find(".layui-input-inline input.layui-input-flo").attr("lay-verify", "notnull|end|num|flo");
}
});
})
var form, laytpl, laydate, isClick = false, member_num = 0, member_ids = '', sexVal = [];
layui.use(['form', 'laytpl', 'laydate'], function() {
form = layui.form;
laytpl = layui.laytpl;
laydate = layui.laydate;
form.render();
//生日开始时间
laydate.render({
elem: '#birthday_start_date',
type: 'datetime'
});
//生日结束时间
laydate.render({
elem: '#birthday_end_date',
type: 'datetime'
});
//注册开始时间
laydate.render({
elem: '#reg_start_date',
type: 'datetime'
});
//注册结束时间
laydate.render({
elem: '#reg_end_date',
type: 'datetime'
});
$(".weight-list span").click(function() {
if (!$(this).hasClass("disabled")) {
$(this).addClass("active");
$(this).siblings().removeClass("active");
}
});
$(".cluster-btn").click(function() {
var _index = $(this).children().val();
if (!$(this).hasClass("border-color")) {
$(this).addClass("border-color");
$(".cluster-content").eq(_index).removeClass("layui-hide");
$(".cluster-content").eq(_index).find(".is-show").val(1);
$(".cluster-content").eq(_index).find(".layui-input-inline input.layui-input").attr("lay-verify", "notnull");
$(".cluster-content").eq(_index).find(".layui-input-inline input.layui-input-start").attr("lay-verify", "notnull|start");
$(".cluster-content").eq(_index).find(".layui-input-inline input.layui-input-end").attr("lay-verify", "notnull|end");
$(".cluster-content").eq(_index).find(".layui-input-inline input[type='number']").attr("lay-verify", "notnull|end|num");
$(".cluster-content").eq(_index).find(".layui-input-inline input.member-mobile").attr("lay-verify", "notnull|len");
$(".cluster-content").eq(_index).find(".layui-input-inline input.layui-input-int.layui-input-start").attr("lay-verify", "notnull|start|num|int");
$(".cluster-content").eq(_index).find(".layui-input-inline input.layui-input-flo.layui-input-end").attr("lay-verify", "notnull|end|num|flo");
}
//点击了需要重新计算
// isClick = false;
form.render();
});
form.on('submit(calculate)', function(data) {
// isClick = true;
var rule_json = resetData(data.field);
if (rule_json.basic.sex.is_show == 1) {
var flag = false;
$(".input-checkbox").each(function() {
var isChecked = $(this).is(":checked");
if (isChecked) {
flag = true;
}
});
if (!flag) {
layer.msg("请选择性别", {icon: 5, anim: 6});
return false;
}
}
$.ajax({
url: ns.url("shop/membercluster/calculate"),
type: "POST",
dataType: "JSON",
data: {
rule_json: JSON.stringify(rule_json)
},
success: function(res) {
if (res.code >= 0) {
member_num = res.data.member_num;
member_ids = res.data.member_ids;
$(".member_num").html(member_num);
}
}
})
});
form.on('submit(save)', function(data) {
// if (isClick) {
var rule_json = resetData(data.field);
$.ajax({
url: ns.url("shop/membercluster/editCluster"),
type: "POST",
dataType: "JSON",
data: {
cluster_name: data.field.cluster_name,
rule_json: JSON.stringify(rule_json),
cluster_id: $("#cluster_id").val()
},
success: function(res) {
layer.msg(res.message);
if (res.code >= 0) {
location.hash = ns.hash("shop/membercluster/clusterList")
}
}
})
// } else {
// layer.msg("请先计算会员数", {icon: 5, anim: 6});
// }
});
form.on('submit(setlabel)', function(obj) {
var field = obj.field;
var arr_id = [], temp = [];
for (var prop in field) {
arr_id.push(field[prop]);
$("#set_label").find("input").each(function() {
var label_id = $(this).attr("data-id");
if (field[prop] == label_id) {
temp.push($(this).attr("title"))
}
})
}
$(".member-label-con").val(temp);
$("input[name='basic[member_label][content]']").val(arr_id);
layer.closeAll('page');
});
form.on('submit(setlevel)', function(obj) {
var field = obj.field;
var arr_id = [], temp = [];
for (var prop in field) {
arr_id.push(field[prop]);
$("#set_level").find("input").each(function() {
var level_id = $(this).attr("data-id");
if (field[prop] == level_id) {
temp.push($(this).attr("title"))
}
})
}
$(".member-level-con").val(temp);
$("input[name='basic[member_level][content]']").val(arr_id);
layer.closeAll('page');
});
/**
* 表单验证
*/
form.verify({
notnull: function(value, item) {
var str = $(item).parents(".cluster-content").find("td").eq(0).text();
if (value == '') {
return str + '不能为空';
}
},
end: function(value, item) {
var start = $(item).parents(".cluster-content").find(".layui-input-start").val();
var str1 = $(item).attr("placeholder").slice(3);
var str2 = $(item).parents(".cluster-content").find(".layui-input-start").attr("placeholder").slice(3);
if (Number(value) < Number(start)) {
return str1 + "不能小于" + str2;
}
},
num: function(value, item) {
var str = $(item).parents(".cluster-content").find("td").eq(0).text();
if (value < 0) {
return str + "不能小于0";
}
},
len: function(value, item) {
if (value.length > 11) {
return "手机号为11位";
}
},
int: function(value, item) {
var str = $(item).parents(".cluster-content").find("td").eq(0).text();
if (value % 1 != 0) {
return str + "不能为小数";
}
},
flo: function(value, item) {
var str = $(item).parents(".cluster-content").find("td").eq(0).text();
if (value * 100 % 1 != 0) {
return str + "最多保留两位小数";
}
}
})
});
/**
* 设置标签
*/
function settinglabel() {
laytpl($("#label_change").html()).render({}, function(html) {
layer_label = layer.open({
title: '设置标签',
skin: 'layer-tips-class',
type: 1,
area: ['450px','260px'],
content: html,
});
});
form.render();
}
/**
* 设置等级
*/
function settinglevel() {
laytpl($("#level_change").html()).render({}, function(html) {
layer_level = layer.open({
title: '设置等级',
skin: 'layer-tips-class',
type: 1,
area: ['450px','260px'],
content: html,
});
});
form.render();
}
function delDiv(e) {
var _len = $(e).parents(".cluster-content").index();
$(e).parents(".cluster-content").addClass("layui-hide");
$(e).parents(".cluster-content").find("input").removeAttr("lay-verify");
$(e).parents(".cluster-content").find(".layui-input-inline input").val("");
$(e).parents(".cluster-content").find(".is-show").val(0);
$(e).parents(".cluster-content").find("input[name='basic[sex][content]']").prop("checked",false);
$(".cluster-btn").eq(_len).removeClass("border-color");
}
function closeLabel() {
layer.close(layer_label);
}
function closeLevel() {
layer.close(layer_level);
}
function backMemberClusterList() {
location.hash = ns.hash("shop/membercluster/clusterList");
}
// 数据结构
function resetData(data) {
var rule_json = {};
$.each(data, function(index, item) {
if (index.indexOf("[") != -1) {
var arr = index.split("[");
if (rule_json[arr[0]] == undefined) {
rule_json[arr[0]] = {};
}
var name = arr[1].slice(0, arr[1].length - 1);
if (rule_json[arr[0]][name] == undefined) {
rule_json[arr[0]][name] = {};
}
var attr = arr[2].slice(0, arr[2].length - 1);
rule_json[arr[0]][name][attr] = item;
}
})
sexVal = [];
$("input[name='basic[sex][content]']:checked").each(function (index, item) {
sexVal.push($(this).val());
});
rule_json.basic.sex.content = sexVal.toString();
return rule_json;
}
</script>
<!-- 设置标签弹框html -->
<script type="text/html" id="label_change">
<div class="layui-form member-form" id="set_label" lay-filter="form">
<div class="layui-form-item">
<label class="layui-form-label sm">标签</label>
<div class="layui-input-block">
{foreach $member_label_list as $member_label_list_k => $member_label_list_v}
<input type="checkbox" name="label_id{$member_label_list_v.label_id}" data-id="{$member_label_list_v.label_id}" value="{$member_label_list_v.label_id}" title="{$member_label_list_v.label_name}" lay-skin="primary">
{/foreach}
</div>
</div>
<div class="form-row sm">
<button class="layui-btn" lay-submit lay-filter="setlabel">确定</button>
<button class="layui-btn layui-btn-primary" onclick="closeLabel()">返回</button>
</div>
</div>
</script>
<!-- 设置标签弹框html -->
<script type="text/html" id="level_change">
<div class="layui-form member-form" id="set_level" lay-filter="form">
<div class="layui-form-item">
<label class="layui-form-label sm">等级</label>
<div class="layui-input-block">
{foreach $member_level_list as $member_level_list_k => $member_level_list_v}
<input type="checkbox" name="level_id{$member_level_list_v.level_id}" data-id="{$member_level_list_v.level_id}" value="{$member_level_list_v.level_id}" title="{$member_level_list_v.level_name}" lay-skin="primary">
{/foreach}
</div>
</div>
<div class="form-row sm">
<button class="layui-btn" lay-submit lay-filter="setlevel">确定</button>
<button class="layui-btn layui-btn-primary" onclick="closeLevel()">返回</button>
</div>
</div>
</script>