添加项目文件。
This commit is contained in:
@@ -0,0 +1,715 @@
|
||||
|
||||
<title>靓号管理</title>
|
||||
|
||||
<div class="layui-card layadmin-header">
|
||||
<div class="layui-breadcrumb" lay-filter="breadcrumb">
|
||||
<a lay-href="">主页</a>
|
||||
<a><cite>靓号管理</cite></a>
|
||||
<a><cite>靓号列表</cite></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-fluid">
|
||||
<div class="layui-form layui-card-header layuiadmin-card-header-auto" lay-filter="layadmin-beautifulnumber-formlist">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">靓号</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="numberSearch" placeholder="靓号搜索" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">等级</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="level">
|
||||
<option value="">全部</option>
|
||||
<option value="S">S级</option>
|
||||
<option value="A">A级</option>
|
||||
<option value="B">B级</option>
|
||||
<option value="C">C级</option>
|
||||
<option value="D">D级</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">状态</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="status">
|
||||
<option value="">全部</option>
|
||||
<option value="0">未售</option>
|
||||
<option value="1">已售</option>
|
||||
<option value="2">冻结</option>
|
||||
<option value="3">普通号</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<button class="layui-btn layuiadmin-btn-beautifulnumber" lay-submit lay-filter="LAY-beautifulnumber-front-search">
|
||||
<i class="layui-icon layui-icon-search layuiadmin-button-btn"></i> 搜索
|
||||
</button>
|
||||
<button class="layui-btn layui-btn-primary" lay-filter="LAY-beautifulnumber-front-reset">
|
||||
<i class="layui-icon layui-icon-refresh layuiadmin-button-btn"></i> 重置
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-btn-group">
|
||||
<button class="layui-btn layui-btn-sm" lay-event="addNumber">
|
||||
<i class="layui-icon layui-icon-add-circle"></i> 添加靓号
|
||||
</button>
|
||||
<button class="layui-btn layui-btn-sm" lay-event="batchAddNumbers">
|
||||
<i class="layui-icon layui-icon-add-circle"></i> 批量添加
|
||||
</button>
|
||||
<button class="layui-btn layui-btn-sm layui-btn-normal" lay-event="initRules">
|
||||
<i class="layui-icon layui-icon-refresh"></i> 初始化规则
|
||||
</button>
|
||||
<button class="layui-btn layui-btn-sm" lay-event="initNumbers">
|
||||
<i class="layui-icon layui-icon-refresh"></i> 根据规则生成靓号
|
||||
</button>
|
||||
<button class="layui-btn layui-btn-sm layui-btn-warm" lay-event="refresh">
|
||||
<i class="layui-icon layui-icon-refresh"></i> 刷新
|
||||
</button>
|
||||
</div>
|
||||
<br><br>
|
||||
|
||||
<table id="LAY-beautifulnumber-back-manage" lay-filter="LAY-beautifulnumber-back-manage"></table>
|
||||
|
||||
<script type="text/html" id="table-beautifulnumber-admin">
|
||||
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="give"><i class="layui-icon layui-icon-gift"></i>赠送</a>
|
||||
<!--<a class="layui-btn layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a>-->
|
||||
<a class="layui-btn layui-btn-xs" lay-event="editPrice"><i class="layui-icon layui-icon-edit"></i>改价</a>
|
||||
{{# if(d.status === 0){ }}
|
||||
<a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="freeze"><i class="layui-icon layui-icon-close"></i>冻结</a>
|
||||
{{# } else if(d.status === 2){ }}
|
||||
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="unfreeze"><i class="layui-icon layui-icon-ok"></i>解冻</a>
|
||||
{{# } }}
|
||||
{{# if(d.status !== 3){ }}
|
||||
<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="setNormal"><i class="layui-icon layui-icon-set"></i>普通号</a>
|
||||
{{# } }}
|
||||
{{# if(d.status !== 1){ }}
|
||||
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>
|
||||
{{# } }}
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
layui.use(['admin', 'table', 'form'], function () {
|
||||
var i = (layui.$, layui.admin),
|
||||
$ = layui.$,
|
||||
admin = layui.admin,
|
||||
view = layui.view,
|
||||
table = layui.table,
|
||||
setter = layui.setter,
|
||||
form = layui.form;
|
||||
|
||||
form.render(null, 'layadmin-beautifulnumber-formlist');
|
||||
|
||||
//监听搜索
|
||||
form.on('submit(LAY-beautifulnumber-front-search)', function (data) {
|
||||
var field = data.field;
|
||||
// 转换状态为数字
|
||||
if (field.status) {
|
||||
field.status = parseInt(field.status);
|
||||
}
|
||||
//执行重载
|
||||
table.reload('LAY-beautifulnumber-back-manage', {
|
||||
where: field,
|
||||
page: { curr: 1 }
|
||||
});
|
||||
});
|
||||
|
||||
// 监听重置
|
||||
$('.layui-btn-group').on('click', '[lay-event="refresh"]', function () {
|
||||
table.reload('LAY-beautifulnumber-back-manage');
|
||||
});
|
||||
|
||||
// 添加单个靓号
|
||||
$('.layui-btn-group').on('click', '[lay-event="addNumber"]', function () {
|
||||
var content =
|
||||
'<form class="layui-form" style="padding: 20px;" lay-filter="layuiadmin-form-add-number">' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<label class="layui-form-label">靓号</label>' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<input type="text" name="number" class="layui-input" placeholder="输入靓号" required>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<label class="layui-form-label">等级</label>' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<select name="level">' +
|
||||
'<option value="S">S级</option>' +
|
||||
'<option value="A">A级</option>' +
|
||||
'<option value="B">B级</option>' +
|
||||
'<option value="C">C级</option>' +
|
||||
'<option value="D" selected>D级</option>' +
|
||||
'</select>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<label class="layui-form-label">价格</label>' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<input type="number" name="price" class="layui-input" placeholder="金币数量" value="0">' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
|
||||
'<div class="layui-form-item">' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<button class="layui-btn" lay-submit lay-filter="LAY-add-number-submit">添加</button>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'</form>';
|
||||
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: '添加靓号',
|
||||
area: ['600px', '450px'],
|
||||
content: content
|
||||
});
|
||||
|
||||
layui.form.render();
|
||||
layui.form.on('submit(LAY-add-number-submit)', function(dataField) {
|
||||
var param = {
|
||||
number: dataField.field.number,
|
||||
level: dataField.field.level,
|
||||
price: parseInt(dataField.field.price) || 0
|
||||
};
|
||||
admin.req({
|
||||
method: "post",
|
||||
contentType: "application/json;charset=UTF-8",
|
||||
url: setter.baseurl + "adminapi/BeautifulNumber/add-number",
|
||||
data: JSON.stringify(param),
|
||||
done: function (res) {
|
||||
if (res.code === 0 || res.code === 200) {
|
||||
layer.closeAll();
|
||||
layer.msg('添加成功');
|
||||
table.reload("LAY-beautifulnumber-back-manage");
|
||||
} else {
|
||||
layer.msg(res.info || '添加失败');
|
||||
}
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
// 批量添加靓号
|
||||
$('.layui-btn-group').on('click', '[lay-event="batchAddNumbers"]', function () {
|
||||
var content =
|
||||
'<form class="layui-form" style="padding: 20px;" lay-filter="layuiadmin-form-batch-add">' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<label class="layui-form-label">靓号列表</label>' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<textarea name="numbers" class="layui-textarea" placeholder="每行一个号码" style="height: 200px;" required></textarea>' +
|
||||
'<div style="color:#999;font-size:12px;margin-top:5px;">每行输入一个靓号,系统会自动过滤已存在的号码</div>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<label class="layui-form-label">等级</label>' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<select name="level">' +
|
||||
'<option value="S">S级</option>' +
|
||||
'<option value="A">A级</option>' +
|
||||
'<option value="B">B级</option>' +
|
||||
'<option value="C">C级</option>' +
|
||||
'<option value="D" selected>D级</option>' +
|
||||
'</select>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<label class="layui-form-label">价格</label>' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<input type="number" name="price" class="layui-input" placeholder="金币数量" value="0">' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
|
||||
'<div class="layui-form-item">' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<button class="layui-btn" lay-submit lay-filter="LAY-batch-add-submit">批量添加</button>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'</form>';
|
||||
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: '批量添加靓号',
|
||||
area: ['500px', '500px'],
|
||||
content: content
|
||||
});
|
||||
|
||||
layui.form.render();
|
||||
layui.form.on('submit(LAY-batch-add-submit)', function(dataField) {
|
||||
var numbersText = dataField.field.numbers.trim();
|
||||
if (!numbersText) {
|
||||
layer.msg('请输入靓号列表');
|
||||
return false;
|
||||
}
|
||||
var numbers = numbersText.split('\n').map(function(n) { return n.trim(); }).filter(function(n) { return n; });
|
||||
var param = {
|
||||
numbers: numbers,
|
||||
level: dataField.field.level,
|
||||
price: parseInt(dataField.field.price) || 0
|
||||
|
||||
};
|
||||
admin.req({
|
||||
method: "post",
|
||||
contentType: "application/json;charset=UTF-8",
|
||||
url: setter.baseurl + "adminapi/BeautifulNumber/batch-add-numbers",
|
||||
data: JSON.stringify(param),
|
||||
done: function (res) {
|
||||
if (res.code === 0 || res.code === 200) {
|
||||
layer.closeAll();
|
||||
layer.msg(res.data ? res.data.message : '添加成功');
|
||||
table.reload("LAY-beautifulnumber-back-manage");
|
||||
} else {
|
||||
layer.msg(res.info || '添加失败');
|
||||
}
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
// 监听初始化规则
|
||||
$('.layui-btn-group').on('click', '[lay-event="initRules"]', function () {
|
||||
layer.confirm("确定初始化靓号规则吗?", function (idx) {
|
||||
admin.req({
|
||||
method: "post",
|
||||
url: setter.baseurl + "adminapi/BeautifulNumber/init-rules",
|
||||
done: function (res) {
|
||||
if (res.code === 0 || res.code === 200) {
|
||||
layer.msg('初始化成功');
|
||||
} else {
|
||||
layer.msg(res.info || '初始化失败');
|
||||
}
|
||||
layer.close(idx);
|
||||
}
|
||||
})
|
||||
})
|
||||
});
|
||||
|
||||
// 监听根据规则生成靓号
|
||||
$('.layui-btn-group').on('click', '[lay-event="initNumbers"]', function () {
|
||||
layer.confirm("确定根据规则生成靓号吗?已售出的靓号不会被删除,未售出的靓号将按规则重新生成。", function (idx) {
|
||||
admin.req({
|
||||
method: "post",
|
||||
url: setter.baseurl + "adminapi/BeautifulNumber/init-numbers",
|
||||
done: function (res) {
|
||||
layer.close(idx);
|
||||
if (res.code === 0 || res.code === 200) {
|
||||
layer.msg(res.info || '初始化成功');
|
||||
table.reload("LAY-beautifulnumber-back-manage");
|
||||
} else {
|
||||
layer.msg(res.info || '初始化失败');
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
});
|
||||
|
||||
table.render({
|
||||
elem: "#LAY-beautifulnumber-back-manage",
|
||||
url: setter.baseurl + "adminapi/BeautifulNumber/list",
|
||||
method: "get",
|
||||
headers: {
|
||||
'token': layui.data(setter.tableName)[setter.request.tokenName]
|
||||
},
|
||||
page: true,
|
||||
where: {},
|
||||
request: {
|
||||
pageName: 'page',
|
||||
limitName: 'size'
|
||||
},
|
||||
limit: 10,
|
||||
cols: [[
|
||||
{ type: 'checkbox', fixed: 'left' },
|
||||
{ field: "number", title: "靓号", width: 150 },
|
||||
{ field: "ruleName", title: "规则", width: 120 },
|
||||
{
|
||||
field: "level", title: "等级", width: 80,
|
||||
templet: function (d) {
|
||||
var colors = { 'S': '#ff4d4f', 'A': '#faad14', 'B': '#722ed1', 'C': '#1890ff', 'D': '#8c8c8c' };
|
||||
return '<span style="color:' + (colors[d.level] || '#8c8c8c') + ';font-weight:bold;">' + d.level + '</span>';
|
||||
}
|
||||
},
|
||||
{ field: "price", title: "价格", width: 120, templet: function (d) { return formatNumber(d.price); } },
|
||||
{
|
||||
field: "status", title: "状态", width: 100,
|
||||
templet: function (d) {
|
||||
var statusMap = { 0: '<span class="layui-badge">未售</span>', 1: '<span class="layui-badge layui-bg-green">已售</span>', 2: '<span class="layui-badge layui-bg-orange">冻结</span>', 3: '<span class="layui-badge layui-bg-gray">普通号</span>' };
|
||||
return statusMap[d.status] || '-';
|
||||
}
|
||||
},
|
||||
{
|
||||
field: "saleTime", title: "售出时间", width: 160,
|
||||
templet: function (d) {
|
||||
return d.saleTime ? formatTimestamp(d.saleTime) : '-';
|
||||
}
|
||||
},
|
||||
{ field: "userId", title: "购买者ID", width: 150 },
|
||||
|
||||
{ width: 450, title: "操作", align: "center", fixed: "right", toolbar: "#table-beautifulnumber-admin" }
|
||||
]],
|
||||
text: "对不起,加载出现异常!",
|
||||
response: {
|
||||
statusName: 'code',
|
||||
statusCode: 0,
|
||||
msgName: 'info',
|
||||
countName: 'count',
|
||||
dataName: 'data'
|
||||
}
|
||||
});
|
||||
|
||||
table.on("tool(LAY-beautifulnumber-back-manage)", function (e) {
|
||||
var l = e.data;
|
||||
|
||||
if ("del" === e.event) {
|
||||
layer.confirm("确定删除此靓号么?", function (i) {
|
||||
admin.req({
|
||||
method: "post",
|
||||
contentType: "application/json;charset=UTF-8",
|
||||
headers: {
|
||||
'token': layui.data(setter.tableName)[setter.request.tokenName]
|
||||
},
|
||||
url: setter.baseurl + "adminapi/BeautifulNumber/delete",
|
||||
data: JSON.stringify({ id: l.id }),
|
||||
done: function (res) {
|
||||
if (res.code === 0 || res.code === 200) {
|
||||
e.del(), layer.close(i);
|
||||
layer.msg('删除成功');
|
||||
} else {
|
||||
layer.msg(res.info || '删除失败');
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
if ("editPrice" === e.event) {
|
||||
i.popup({
|
||||
title: "修改价格",
|
||||
area: ["400px", "200px"],
|
||||
id: "LAY-popup-edit-price",
|
||||
success: function (div, idx) {
|
||||
$(div).html(
|
||||
'<form class="layui-form" style="padding: 20px;" lay-filter="layadmin-form-edit-price">' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<label class="layui-form-label">靓号</label>' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<input type="text" class="layui-input" value="' + (l.number || '') + '" disabled>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<label class="layui-form-label">新价格</label>' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<input type="number" name="price" class="layui-input" value="' + (l.price || 0) + '" required>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<button class="layui-btn" lay-submit lay-filter="LAY-edit-price-submit">修改</button>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'</form>'
|
||||
);
|
||||
form.render(null, "layadmin-form-edit-price");
|
||||
form.on("submit(LAY-edit-price-submit)", function (data) {
|
||||
admin.req({
|
||||
method: "post",
|
||||
contentType: "application/json;charset=UTF-8",
|
||||
headers: {
|
||||
'token': layui.data(setter.tableName)[setter.request.tokenName]
|
||||
},
|
||||
url: setter.baseurl + "adminapi/BeautifulNumber/update-price",
|
||||
data: JSON.stringify({ id: l.id, price: parseInt(data.field.price) }),
|
||||
done: function (res) {
|
||||
if (res.code === 0 || res.code === 200) {
|
||||
layer.close(idx);
|
||||
layer.msg('修改成功');
|
||||
table.reload("LAY-beautifulnumber-back-manage");
|
||||
} else {
|
||||
layer.msg(res.info || '修改失败');
|
||||
}
|
||||
}
|
||||
})
|
||||
return false;
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
if ("freeze" === e.event) {
|
||||
layer.confirm("确定冻结此靓号么?", function (i) {
|
||||
admin.req({
|
||||
method: "post",
|
||||
contentType: "application/json;charset=UTF-8",
|
||||
headers: {
|
||||
'token': layui.data(setter.tableName)[setter.request.tokenName]
|
||||
},
|
||||
url: setter.baseurl + "adminapi/BeautifulNumber/freeze",
|
||||
data: JSON.stringify({ id: l.id }),
|
||||
done: function (res) {
|
||||
if (res.code === 0 || res.code === 200) {
|
||||
layer.msg('冻结成功');
|
||||
table.reload("LAY-beautifulnumber-back-manage");
|
||||
} else {
|
||||
layer.msg(res.info || '冻结失败');
|
||||
}
|
||||
layer.close(i);
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
if ("unfreeze" === e.event) {
|
||||
layer.confirm("确定解冻此靓号么?", function (i) {
|
||||
admin.req({
|
||||
method: "post",
|
||||
contentType: "application/json;charset=UTF-8",
|
||||
headers: {
|
||||
'token': layui.data(setter.tableName)[setter.request.tokenName]
|
||||
},
|
||||
url: setter.baseurl + "adminapi/BeautifulNumber/unfreeze",
|
||||
data: JSON.stringify({ id: l.id }),
|
||||
done: function (res) {
|
||||
if (res.code === 0 || res.code === 200) {
|
||||
layer.msg('解冻成功');
|
||||
table.reload("LAY-beautifulnumber-back-manage");
|
||||
} else {
|
||||
layer.msg(res.info || '解冻失败');
|
||||
}
|
||||
layer.close(i);
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
if ("setNormal" === e.event) {
|
||||
layer.confirm("确定将此靓号设为普通号么?", function (i) {
|
||||
admin.req({
|
||||
method: "post",
|
||||
contentType: "application/json;charset=UTF-8",
|
||||
headers: {
|
||||
'token': layui.data(setter.tableName)[setter.request.tokenName]
|
||||
},
|
||||
url: setter.baseurl + "adminapi/BeautifulNumber/set-normal",
|
||||
data: JSON.stringify({ id: l.id }),
|
||||
done: function (res) {
|
||||
if (res.code === 0 || res.code === 200) {
|
||||
layer.msg('设置成功');
|
||||
table.reload("LAY-beautifulnumber-back-manage");
|
||||
} else {
|
||||
layer.msg(res.info || '设置失败');
|
||||
}
|
||||
layer.close(i);
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
if ("give" === e.event) {
|
||||
i.popup({
|
||||
title: "赠送靓号给用户",
|
||||
area: ["600px", "380px"],
|
||||
id: "LAY-popup-give-number",
|
||||
success: function (div, idx) {
|
||||
$(div).html(
|
||||
'<div style="padding:20px;">' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<label class="layui-form-label" style="width:70px;">靓号</label>' +
|
||||
'<div class="layui-input-block" style="left:90px;">' +
|
||||
'<span class="layui-badge layui-bg-blue" style="padding:6px 15px;font-size:14px;">' + (l.number || '') + '</span>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="layui-form-item" style="margin-bottom:5px;">' +
|
||||
'<label class="layui-form-label" style="width:70px;">选择用户</label>' +
|
||||
'<div class="layui-input-block" style="left:90px;position:relative;">' +
|
||||
'<input type="text" id="user-search-input" class="layui-input" style="padding-right:35px;" placeholder="输入用户名、昵称、用户编号或手机号搜索">' +
|
||||
'<i class="layui-icon layui-icon-loading layui-anim layui-anim-loop" id="search-loading" style="position:absolute;right:10px;top:10px;display:none;"></i>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div id="user-dropdown" class="user-dropdown-list" style="display:none;position:absolute;left:90px;width:calc(100% - 90px);max-height:250px;overflow-y:auto;background:#fff;border:1px solid #e6e6e6;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.1);z-index:99999;"></div>' +
|
||||
'<div style="margin-top:10px;color:#999;font-size:12px;margin-left:70px;">提示:可按用户名、昵称、用户编号、手机号进行模糊搜索</div>' +
|
||||
'<div id="selected-user-info" style="margin-top:15px;padding:15px;background:#e8f4ff;border-radius:6px;border:1px solid #b8d6f0;display:none;margin-left:70px;">' +
|
||||
'<div style="display:flex;align-items:center;justify-content:space-between;">' +
|
||||
'<div>' +
|
||||
'<span style="color:#666;">已选择用户:</span>' +
|
||||
'<span id="selected-user-text" style="color:#1e88e5;font-weight:bold;font-size:15px;"></span>' +
|
||||
'</div>' +
|
||||
'<button type="button" class="layui-btn layui-btn-sm layui-btn-danger" id="btn-clear-user"><i class="layui-icon layui-icon-close"></i> 清除</button>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div style="margin-top:20px;text-align:center;">' +
|
||||
'<button type="button" class="layui-btn layui-btn-primary layui-btn-sm" id="btn-cancel-give" style="margin-right:15px;">取消</button>' +
|
||||
'<button type="button" class="layui-btn layui-btn-sm" id="btn-confirm-give"><i class="layui-icon layui-icon-ok"></i> 确认赠送</button>' +
|
||||
'</div>' +
|
||||
'</div>'
|
||||
);
|
||||
|
||||
var selectedUser = null;
|
||||
var searchTimer = null;
|
||||
var $dropdown = $('#user-dropdown');
|
||||
var $input = $('#user-search-input');
|
||||
|
||||
function renderDropdown(users) {
|
||||
if (!users || users.length === 0) {
|
||||
$dropdown.html('<div style="padding:15px;color:#999;text-align:center;">未找到匹配的用户</div>').show();
|
||||
return;
|
||||
}
|
||||
var html = '';
|
||||
users.forEach(function(user) {
|
||||
var number = user.baseInfo ? user.baseInfo.number : '';
|
||||
var name = user.baseInfo ? user.baseInfo.userName : '';
|
||||
var mobile = user.baseInfo ? user.baseInfo.mobile : '';
|
||||
html += '<div class="user-dropdown-item" data-id="' + user.id + '" data-number="' + number + '" data-name="' + name + '" data-mobile="' + mobile + '" style="padding:12px 15px;cursor:pointer;border-bottom:1px solid #f0f0f0;">' +
|
||||
'<div style="display:flex;justify-content:space-between;align-items:center;">' +
|
||||
'<div><span style="font-weight:bold;color:#333;font-size:14px;">' + name + '</span> <span style="color:#666;font-size:12px;">[' + number + ']</span></div>' +
|
||||
(mobile ? '<span style="color:#999;font-size:12px;">' + mobile + '</span>' : '<span style="color:#999;font-size:12px;">无手机号</span>') +
|
||||
'</div></div>';
|
||||
});
|
||||
$dropdown.html(html).show();
|
||||
}
|
||||
|
||||
function searchUsers(keyword) {
|
||||
if (!keyword || keyword.length < 1) {
|
||||
$dropdown.hide();
|
||||
return;
|
||||
}
|
||||
$('#search-loading').show();
|
||||
admin.req({
|
||||
method: "post",
|
||||
contentType: "application/json;charset=UTF-8",
|
||||
url: setter.baseurl + "adminapi/AdminUser/GetUserList",
|
||||
headers: {
|
||||
'token': layui.data(setter.tableName)[setter.request.tokenName]
|
||||
},
|
||||
data: JSON.stringify({ keyWord: keyword, pageIndex: 1, pageSize: 20 }),
|
||||
done: function (res) {
|
||||
$('#search-loading').hide();
|
||||
if (res.data && res.data.length > 0) {
|
||||
renderDropdown(res.data);
|
||||
} else {
|
||||
renderDropdown([]);
|
||||
}
|
||||
},
|
||||
fail: function() {
|
||||
$('#search-loading').hide();
|
||||
renderDropdown([]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$input.on('input', function() {
|
||||
var keyword = $(this).val().trim();
|
||||
clearTimeout(searchTimer);
|
||||
if (keyword.length < 1) {
|
||||
$dropdown.hide();
|
||||
return;
|
||||
}
|
||||
searchTimer = setTimeout(function() {
|
||||
searchUsers(keyword);
|
||||
}, 300);
|
||||
});
|
||||
|
||||
$input.on('focus', function() {
|
||||
var keyword = $(this).val().trim();
|
||||
if (keyword.length >= 1 && $dropdown.find('.user-dropdown-item').length > 0) {
|
||||
$dropdown.show();
|
||||
}
|
||||
});
|
||||
|
||||
$(document).off('click', '.user-dropdown-item').on('click', '.user-dropdown-item', function() {
|
||||
var userId = $(this).data('id');
|
||||
var userNumber = $(this).data('number');
|
||||
var userName = $(this).data('name');
|
||||
var userMobile = $(this).data('mobile');
|
||||
selectedUser = { id: userId, number: userNumber, name: userName, mobile: userMobile };
|
||||
$input.val(name + ' [' + userNumber + ']' + (userMobile ? ' ' + userMobile : ''));
|
||||
$dropdown.hide();
|
||||
$('#selected-user-text').text(userName + ' [' + userNumber + ']' + (userMobile ? ' ' + userMobile : ''));
|
||||
$('#selected-user-info').show();
|
||||
});
|
||||
|
||||
$(document).on('click', function(e) {
|
||||
if (!$(e.target).closest('#user-search-input, #user-dropdown').length) {
|
||||
$dropdown.hide();
|
||||
}
|
||||
});
|
||||
|
||||
$('#btn-clear-user').on('click', function() {
|
||||
selectedUser = null;
|
||||
$input.val('').focus();
|
||||
$('#selected-user-info').hide();
|
||||
});
|
||||
|
||||
$('#btn-cancel-give').on('click', function() {
|
||||
layer.close(idx);
|
||||
});
|
||||
|
||||
$('#btn-confirm-give').on('click', function() {
|
||||
if (!selectedUser) {
|
||||
layer.msg('请先选择用户');
|
||||
return;
|
||||
}
|
||||
admin.req({
|
||||
method: "post",
|
||||
contentType: "application/json;charset=UTF-8",
|
||||
headers: {
|
||||
'token': layui.data(setter.tableName)[setter.request.tokenName]
|
||||
},
|
||||
url: setter.baseurl + "adminapi/BeautifulNumber/give-to-user",
|
||||
data: JSON.stringify({ number: l.number, userId: selectedUser.id }),
|
||||
done: function (res) {
|
||||
if (res.code === 0 || res.code === 200) {
|
||||
layer.close(idx);
|
||||
layer.msg('赠送成功');
|
||||
table.reload("LAY-beautifulnumber-back-manage");
|
||||
} else {
|
||||
layer.msg(res.info || '赠送失败');
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
// 数字格式化
|
||||
function formatNumber(num) {
|
||||
if (!num) return '0';
|
||||
return num.toString().replace(/\B(?=(\d{4})+(?!\d))/g, ",");
|
||||
}
|
||||
|
||||
// 时间戳格式化
|
||||
function formatTimestamp(timestamp, format = 'yyyy-MM-dd hh:mm:ss') {
|
||||
if (!timestamp) return '-';
|
||||
const date = new Date(timestamp * 1000);
|
||||
const o = {
|
||||
'M+': date.getMonth() + 1,
|
||||
'd+': date.getDate(),
|
||||
'h+': date.getHours(),
|
||||
'm+': date.getMinutes(),
|
||||
's+': date.getSeconds()
|
||||
};
|
||||
if (/(y+)/.test(format)) {
|
||||
format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
|
||||
}
|
||||
for (const k in o) {
|
||||
if (new RegExp('(' + k + ')').test(format)) {
|
||||
format = format.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
|
||||
}
|
||||
}
|
||||
return format;
|
||||
}
|
||||
|
||||
// e("beautifulnumber", {})
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,520 @@
|
||||
|
||||
<title>靓号规则配置</title>
|
||||
|
||||
<div class="layui-card layadmin-header">
|
||||
<div class="layui-breadcrumb" lay-filter="breadcrumb">
|
||||
<a lay-href="">主页</a>
|
||||
<a><cite>靓号管理</cite></a>
|
||||
<a><cite>规则配置</cite></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-fluid">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">
|
||||
<div class="layui-btn-group">
|
||||
<button class="layui-btn layui-btn-sm" id="btn-add">
|
||||
<i class="layui-icon layui-icon-add-circle"></i> 添加规则
|
||||
</button>
|
||||
<button class="layui-btn layui-btn-sm" id="btn-save">
|
||||
<i class="layui-icon layui-icon-ok"></i> 保存规则
|
||||
</button>
|
||||
<button class="layui-btn layui-btn-sm layui-btn-normal" id="btn-init">
|
||||
<i class="layui-icon layui-icon-refresh"></i> 初始化规则
|
||||
</button>
|
||||
<button class="layui-btn layui-btn-sm layui-btn-warm" id="btn-reload">
|
||||
<i class="layui-icon layui-icon-refresh"></i> 刷新
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<table id="LAY-rules-manage" lay-filter="LAY-rules-manage"></table>
|
||||
|
||||
<script type="text/html" id="table-rule-admin">
|
||||
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a>
|
||||
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="toolbar-rule">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm" lay-event="add">添加规则</button>
|
||||
</div>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
layui.use(['admin', 'table', 'form', 'layer'], function () {
|
||||
var $ = layui.$,
|
||||
admin = layui.admin,
|
||||
table = layui.table,
|
||||
form = layui.form,
|
||||
layer = layui.layer,
|
||||
setter = layui.setter;
|
||||
|
||||
var rules = [];
|
||||
|
||||
function loadRules() {
|
||||
admin.req({
|
||||
method: "get",
|
||||
url: setter.baseurl + "adminapi/BeautifulNumber/rules",
|
||||
done: function (res) {
|
||||
if (res.code === 0 && res.data) {
|
||||
rules = res.data;
|
||||
renderTable();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function renderTable() {
|
||||
|
||||
|
||||
table.render({
|
||||
elem: '#LAY-rules-manage',
|
||||
data: rules,
|
||||
cols: [[
|
||||
{ field: "ruleName", title: "规则名称", width: 150, edit: 'text' },
|
||||
{ field: "rulePattern", title: "生成模式", width: 150 },
|
||||
{ field: "level", title: "等级", width: 70, edit: 'text' },
|
||||
{ field: "price", title: "价格(金币)", width: 100, edit: 'text' },
|
||||
{ field: "sort", title: "排序", width: 70, edit: 'text' },
|
||||
{
|
||||
field: "isEnable",
|
||||
title: "启用",
|
||||
width: 80,
|
||||
templet: function(d) {
|
||||
return d.isEnable ? '<span class="layui-badge">是</span>' : '<span class="layui-badge layui-bg-gray">否</span>';
|
||||
}
|
||||
},
|
||||
{ width: 250, title: "操作", align: "center", fixed: "right", toolbar: "#table-rule-admin" }
|
||||
]],
|
||||
toolbar: '#toolbar-rule'
|
||||
});
|
||||
}
|
||||
|
||||
$('#btn-reload').on('click', function() {
|
||||
loadRules();
|
||||
layer.msg('刷新成功');
|
||||
});
|
||||
|
||||
$('#btn-add').on('click', function() {
|
||||
showAddDialog();
|
||||
});
|
||||
|
||||
$('#btn-init').on('click', function() {
|
||||
layer.confirm('确定初始化靓号规则吗?这将覆盖现有规则!', function(idx) {
|
||||
admin.req({
|
||||
method: "post",
|
||||
url: setter.baseurl + "adminapi/BeautifulNumber/init-rules",
|
||||
done: function (res) {
|
||||
layer.close(idx);
|
||||
if (res.code === 0 || res.code === 200) {
|
||||
layer.msg('初始化成功');
|
||||
loadRules();
|
||||
} else {
|
||||
layer.msg(res.info || '初始化失败');
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$('#btn-save').on('click', function() {
|
||||
layer.confirm('确定保存所有规则吗?', function(idx) {
|
||||
admin.req({
|
||||
method: "post",
|
||||
contentType: "application/json;charset=UTF-8",
|
||||
url: setter.baseurl + "adminapi/BeautifulNumber/update-rules",
|
||||
data: JSON.stringify(rules),
|
||||
done: function (res) {
|
||||
layer.close(idx);
|
||||
if (res.code === 0 || res.code === 200) {
|
||||
layer.msg('保存成功');
|
||||
loadRules();
|
||||
} else {
|
||||
layer.msg(res.info || '保存失败');
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
table.on("tool(LAY-rules-manage)", function (obj) {
|
||||
var data = obj.data;
|
||||
|
||||
if ("del" === obj.event) {
|
||||
layer.confirm("确定删除此规则么?", function (i) {
|
||||
admin.req({
|
||||
method: "post",
|
||||
contentType: "application/json;charset=UTF-8",
|
||||
url: setter.baseurl + "adminapi/BeautifulNumber/delete-rule",
|
||||
data: JSON.stringify({ id: data.id }),
|
||||
done: function (res) {
|
||||
layer.close(i);
|
||||
if (res.code === 0 || res.code === 200) {
|
||||
layer.msg('删除成功');
|
||||
loadRules();
|
||||
} else {
|
||||
layer.msg(res.info || '删除失败');
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if ("edit" === obj.event) {
|
||||
showEditDialog(data, obj);
|
||||
}
|
||||
});
|
||||
|
||||
table.on('toolbar(LAY-rules-manage)', function(obj){
|
||||
if(obj.event === 'add'){
|
||||
showAddDialog();
|
||||
}
|
||||
});
|
||||
|
||||
function showAddDialog() {
|
||||
var content =
|
||||
'<form class="layui-form" style="padding: 20px;" lay-filter="layuiadmin-form-add-rule">' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<label class="layui-form-label">规则名称</label>' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<input type="text" name="ruleName" class="layui-input" placeholder="如:AAAA、ABBB、ABCDEFGH、AAAABBBX">' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<label class="layui-form-label">等级</label>' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<select name="level">' +
|
||||
'<option value="S">S级</option>' +
|
||||
'<option value="A">A级</option>' +
|
||||
'<option value="B">B级</option>' +
|
||||
'<option value="C">C级</option>' +
|
||||
'<option value="D">D级</option>' +
|
||||
'</select>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<label class="layui-form-label">价格</label>' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<input type="number" name="price" class="layui-input" placeholder="金币数量">' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<label class="layui-form-label">排序</label>' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<input type="number" name="sort" class="layui-input" placeholder="数字越小越靠前" value="0">' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<button class="layui-btn" lay-submit lay-filter="LAY-add-rule-submit">添加</button>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'</form>';
|
||||
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: '添加规则',
|
||||
area: ['650px', '500px'],
|
||||
content: content
|
||||
});
|
||||
|
||||
layui.form.render();
|
||||
layui.form.on('submit(LAY-add-rule-submit)', function(dataField) {
|
||||
var ruleName = dataField.field.ruleName.toUpperCase().trim();
|
||||
if (!ruleName) {
|
||||
layer.msg('请输入规则名称');
|
||||
return false;
|
||||
}
|
||||
|
||||
var newRule = {
|
||||
ruleName: ruleName,
|
||||
rulePattern: ruleName,
|
||||
level: dataField.field.level,
|
||||
price: parseInt(dataField.field.price) || 0,
|
||||
sort: parseInt(dataField.field.sort) || 0,
|
||||
isEnable: true
|
||||
};
|
||||
|
||||
admin.req({
|
||||
method: "post",
|
||||
contentType: "application/json;charset=UTF-8",
|
||||
url: setter.baseurl + "adminapi/BeautifulNumber/add-rule",
|
||||
data: JSON.stringify(newRule),
|
||||
done: function (res) {
|
||||
layer.closeAll();
|
||||
if (res.code === 0 || res.code === 200) {
|
||||
layer.msg('添加成功');
|
||||
loadRules();
|
||||
} else {
|
||||
layer.msg(res.info || '添加失败');
|
||||
}
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
function showEditDialog(data, obj) {
|
||||
var level = data.level || 'D';
|
||||
var isEnabled = data.isEnable ? 'checked' : '';
|
||||
var content =
|
||||
'<form class="layui-form" style="padding: 20px;" lay-filter="layuiadmin-form-edit-rule">' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<label class="layui-form-label">规则名称</label>' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<input type="text" name="ruleName" class="layui-input" value="' + (data.ruleName || '') + '" placeholder="如:KKKKKKKK KKKKTTTT ABCDEFGH KKKKXXXX">' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<label class="layui-form-label">等级</label>' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<select name="level">' +
|
||||
'<option value="S" ' + (level === 'S' ? 'selected' : '') + '>S级</option>' +
|
||||
'<option value="A" ' + (level === 'A' ? 'selected' : '') + '>A级</option>' +
|
||||
'<option value="B" ' + (level === 'B' ? 'selected' : '') + '>B级</option>' +
|
||||
'<option value="C" ' + (level === 'C' ? 'selected' : '') + '>C级</option>' +
|
||||
'<option value="D" ' + (level === 'D' ? 'selected' : '') + '>D级</option>' +
|
||||
'</select>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<label class="layui-form-label">价格</label>' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<input type="number" name="price" class="layui-input" value="' + (data.price || 0) + '" placeholder="金币数量">' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<label class="layui-form-label">排序</label>' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<input type="number" name="sort" class="layui-input" value="' + (data.sort || 0) + '" placeholder="数字越小越靠前">' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<label class="layui-form-label">启用</label>' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<input type="checkbox" name="isEnable" lay-skin="switch" lay-text="开启|关闭" ' + isEnabled + '>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="layui-form-item">' +
|
||||
'<div class="layui-input-block">' +
|
||||
'<button class="layui-btn" lay-submit lay-filter="LAY-edit-rule-submit">保存</button>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'</form>';
|
||||
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: '编辑规则',
|
||||
area: ['500px', '450px'],
|
||||
content: content
|
||||
});
|
||||
|
||||
layui.form.render();
|
||||
layui.form.on('submit(LAY-edit-rule-submit)', function(formData) {
|
||||
var isEnable = $(formData.form).find('input[name="isEnable"]').prop('checked');
|
||||
var ruleName = formData.field.ruleName.toUpperCase().trim();
|
||||
|
||||
if (!ruleName) {
|
||||
layer.msg('请输入规则名称');
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
var updatedRule = {
|
||||
id: data.id,
|
||||
ruleName: ruleName,
|
||||
|
||||
level: formData.field.level,
|
||||
price: parseInt(formData.field.price) || 0,
|
||||
sort: parseInt(formData.field.sort) || 0,
|
||||
isEnable: isEnable
|
||||
};
|
||||
|
||||
admin.req({
|
||||
method: "post",
|
||||
contentType: "application/json;charset=UTF-8",
|
||||
url: setter.baseurl + "adminapi/BeautifulNumber/update-rule",
|
||||
data: JSON.stringify(updatedRule),
|
||||
done: function (res) {
|
||||
layer.closeAll();
|
||||
if (res.code === 0 || res.code === 200) {
|
||||
layer.msg('保存成功');
|
||||
loadRules();
|
||||
} else {
|
||||
layer.msg(res.info || '保存失败');
|
||||
}
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
function generateRegexPattern(ruleName) {
|
||||
if (!ruleName) {
|
||||
return { valid: false, message: '请输入规则名称' };
|
||||
}
|
||||
|
||||
ruleName = ruleName.toUpperCase().trim();
|
||||
|
||||
if (ruleName.length!=8) {
|
||||
return { valid: false, message: '规则名称长度必须是8位' };
|
||||
}
|
||||
|
||||
// 检查是否全部是连续字母A-H (如 ABCDEFGH 表示8连号)
|
||||
var isAllConsecutive = true;
|
||||
var expectedChar = 'A';
|
||||
for (var i = 0; i < ruleName.length; i++) {
|
||||
if (ruleName[i] !== expectedChar) {
|
||||
isAllConsecutive = false;
|
||||
break;
|
||||
}
|
||||
expectedChar = String.fromCharCode(expectedChar.charCodeAt(0) + 1);
|
||||
}
|
||||
|
||||
// 如果是 ABCDEFGH 这种连续字母,表示全部是连续数字
|
||||
if (isAllConsecutive) {
|
||||
var len = ruleName.length;
|
||||
// 生成匹配连续数字的正则: 01234567, 12345678, 23456789
|
||||
var patterns = [];
|
||||
for (var start = 0; start <= 9 - len; start++) {
|
||||
var seq = '';
|
||||
for (var k = 0; k < len; k++) {
|
||||
seq += (start + k);
|
||||
}
|
||||
if (patterns.length > 0 && patterns.length < 10) {
|
||||
patterns.push(seq);
|
||||
}
|
||||
}
|
||||
if (patterns.length > 0) {
|
||||
return {
|
||||
valid: true,
|
||||
rulePattern: "^(" + patterns.join('|') + ")$"
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
var regex = "^";
|
||||
var prevGroup = '';
|
||||
|
||||
for (var i = 0; i < ruleName.length; i++) {
|
||||
var char = ruleName[i];
|
||||
|
||||
if (char === 'A') {
|
||||
if (prevGroup !== 'A') {
|
||||
var aLen = 0;
|
||||
var j = i;
|
||||
while (j < ruleName.length && ruleName[j] === 'A') {
|
||||
aLen++;
|
||||
j++;
|
||||
}
|
||||
if (aLen === 1) {
|
||||
regex += "(\\d)";
|
||||
} else {
|
||||
regex += "(\\d)\\1{" + (aLen - 1) + "}";
|
||||
}
|
||||
prevGroup = 'A';
|
||||
}
|
||||
} else if (char === 'B') {
|
||||
if (prevGroup !== 'B') {
|
||||
var bLen = 0;
|
||||
var j = i;
|
||||
while (j < ruleName.length && ruleName[j] === 'B') {
|
||||
bLen++;
|
||||
j++;
|
||||
}
|
||||
regex += "(\\d{" + bLen + "})";
|
||||
prevGroup = 'B';
|
||||
}
|
||||
} else if (char === 'X') {
|
||||
regex += "\\d";
|
||||
prevGroup = 'X';
|
||||
} else if (char >= '0' && char <= '9') {
|
||||
regex += char;
|
||||
prevGroup = 'N';
|
||||
} else if (char >= 'A' && char <= 'H') {
|
||||
// C-H 也当作连续数字处理
|
||||
if (prevGroup !== 'CONSECUTIVE') {
|
||||
var cLen = 0;
|
||||
var j = i;
|
||||
while (j < ruleName.length) {
|
||||
var c = ruleName[j];
|
||||
if (c >= 'A' && c <= 'H') {
|
||||
cLen++;
|
||||
j++;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
regex += "(\\d{" + cLen + "})";
|
||||
prevGroup = 'CONSECUTIVE';
|
||||
i = j - 1;
|
||||
}
|
||||
} else {
|
||||
return { valid: false, message: '规则名称只能包含A-H、X和数字' };
|
||||
}
|
||||
}
|
||||
|
||||
regex += "$";
|
||||
|
||||
try {
|
||||
new RegExp(regex);
|
||||
} catch(e) {
|
||||
return { valid: false, message: '生成的正则表达式无效: ' + regex };
|
||||
}
|
||||
|
||||
return {
|
||||
valid: true,
|
||||
rulePattern: regex
|
||||
};
|
||||
}
|
||||
|
||||
window.generateRegex = function() {
|
||||
var ruleName = $('#ruleNameInput').val().toUpperCase().trim();
|
||||
if (ruleName) {
|
||||
var result = generateRegexPattern(ruleName);
|
||||
if (result.valid) {
|
||||
$('#rulePatternInput').val(result.rulePattern);
|
||||
}
|
||||
} else {
|
||||
$('#rulePatternInput').val('');
|
||||
}
|
||||
};
|
||||
|
||||
window.generateEditRegex = function() {
|
||||
var ruleName = $('#editRuleNameInput').val().toUpperCase().trim();
|
||||
if (ruleName) {
|
||||
var result = generateRegexPattern(ruleName);
|
||||
if (result.valid) {
|
||||
$('#editRulePatternInput').val(result.rulePattern);
|
||||
}
|
||||
} else {
|
||||
$('#editRulePatternInput').val('');
|
||||
}
|
||||
};
|
||||
|
||||
table.on('edit(LAY-rules-manage)', function(obj){
|
||||
var field = obj.field;
|
||||
var value = obj.value;
|
||||
var data = obj.data;
|
||||
|
||||
if (!isNaN(value) && value !== '') {
|
||||
if (field === 'price' || field === 'sort') {
|
||||
data[field] = parseInt(value);
|
||||
}
|
||||
}
|
||||
|
||||
if (field === 'ruleName') {
|
||||
data.rulePattern = value;
|
||||
renderTable();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
loadRules();
|
||||
});
|
||||
</script>
|
||||
Reference in New Issue
Block a user