其余文件
This commit is contained in:
69
app/admin/view/system/cache/cache.html
vendored
Normal file
69
app/admin/view/system/cache/cache.html
vendored
Normal file
@ -0,0 +1,69 @@
|
||||
{layout name="layout1" /}
|
||||
<div class="wrapper">
|
||||
<div class="layui-card layui-form">
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-collapse like-layui-collapse" style="border:1px dashed #c4c4c4">
|
||||
<div class="layui-colla-item">
|
||||
<h2 class="layui-colla-title like-layui-colla-title" style="background-color: #fff">操作提示</h2>
|
||||
<div class="layui-colla-content layui-show">
|
||||
<p>*管理系统运行过程中产生的缓存。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card-body" id="card-body">
|
||||
<table id="like-lists" lay-filter="like-lists"></table>
|
||||
<script type="text/html" id="operation">
|
||||
<a class="layui-btn layui-btn-normal layui-btn-sm" lay-event="clear">清除系统缓存</a>
|
||||
</script>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
layui.use(['table', 'form'], function () {
|
||||
var $ = layui.$
|
||||
, form = layui.form
|
||||
, table = layui.table;
|
||||
|
||||
table.render({
|
||||
elem: '#like-lists'
|
||||
, cols: [[
|
||||
{field: 'name', title: '管理内容', width: 200}
|
||||
, {field: 'desc', title: '内容说明', Width: 150}
|
||||
, {fixed: 'right', title: '操作', width: 200, align: 'center', toolbar: '#operation'}
|
||||
]]
|
||||
, data: [{
|
||||
"name": "系统缓存"
|
||||
, "desc": "系统运行过程中产生的各类缓存数据"
|
||||
}]
|
||||
});
|
||||
|
||||
|
||||
table.on('tool(like-lists)', function(obj) {
|
||||
if(obj.event === 'clear') {
|
||||
like.ajax({
|
||||
url:'{:url("system.Cache/cache")}',
|
||||
type:"post",
|
||||
success:function(res) {
|
||||
if(res.code === 1) {
|
||||
layui.layer.msg(res.msg, {
|
||||
offset: '15px'
|
||||
, icon: 1
|
||||
, time: 1000
|
||||
},function () {
|
||||
location.reload();
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
146
app/admin/view/system/crontab/add.html
Normal file
146
app/admin/view/system/crontab/add.html
Normal file
@ -0,0 +1,146 @@
|
||||
{layout name="layout2" /}
|
||||
<style>
|
||||
.layui-form-item .layui-input-inline {
|
||||
width: 240px;
|
||||
}
|
||||
</style>
|
||||
<div class="layui-form" lay-filter="layuiadmin-form-admin" id="layuiadmin-form-admin" style="padding: 20px 30px 0 0;">
|
||||
<input type="hidden" value="0" name="id">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">名称</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="name" lay-verify="required" lay-vertype="tips" placeholder="请输入名称"
|
||||
autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">类型</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" lay-filter="type" name="type" value="1" title="定时任务" checked>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">命令</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="command" lay-verify="required" lay-vertype="tips"
|
||||
placeholder="请输入thinkphp命令,例:version" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">参数</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="parameter" placeholder="请输入参数,例:--id 8 --name 测试" autocomplete="off"
|
||||
class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">状态</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="checkbox" lay-filter="disable" name="status" lay-skin="switch" lay-text="立即启动|停止" checked>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item" id="expression">
|
||||
<label class="layui-form-label">规则</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="expression" lay-verify="expression_required" lay-vertype="tips"
|
||||
placeholder="请输入crontab规则,例:59 * * * *" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item" id="preview" style="display: none">
|
||||
<label class="layui-form-label">执行预览</label>
|
||||
<div class="layui-input-inline">
|
||||
<table class="layui-table">
|
||||
<colgroup>
|
||||
<col width="60">
|
||||
<col width="160">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>次数</th>
|
||||
<th>执行时间</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody_lists">
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-form-text">
|
||||
<label class="layui-form-label">备注</label>
|
||||
<div class="layui-input-inline">
|
||||
<textarea name="remark" placeholder="请输入内容" class="layui-textarea"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-hide">
|
||||
<input type="button" lay-submit lay-filter="crontab-submit" id="crontab-submit" value="确认">
|
||||
</div>
|
||||
</div>
|
||||
<script src="/static/common/js/array.js"></script>
|
||||
<script>
|
||||
var code;
|
||||
layui.config({
|
||||
version:"{$front_version}",
|
||||
base: '/static/lib/' //静态资源所在路径
|
||||
}).use(['form'], function () {
|
||||
var $ = layui.$
|
||||
, form = layui.form;
|
||||
|
||||
function preview() {
|
||||
expression = $("[name=expression]").val();
|
||||
if (isEmptyString(expression)) {
|
||||
$('#tbody_lists').html('');
|
||||
$('#preview').hide();
|
||||
return;
|
||||
}
|
||||
var data = {'expression': expression};
|
||||
like.ajax({
|
||||
url: '{:url("system.Crontab/expression")}',
|
||||
data: data,
|
||||
type: "get",
|
||||
success: function (res) {
|
||||
if (res.code == 1) {
|
||||
var html = '';
|
||||
var data = res.data;
|
||||
for (var i in data) {
|
||||
html += '<tr>';
|
||||
html += '<td>' + data[i]['time'] + '</td>';
|
||||
html += '<td>' + data[i]['date'] + '</td>';
|
||||
html += '</tr>';
|
||||
}
|
||||
$('#preview').show();
|
||||
$('#tbody_lists').html(html);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$("[name=expression]").bind('input propertychange', function () {
|
||||
clearTimeout(code);
|
||||
code = setTimeout(function () {
|
||||
preview();
|
||||
}, 1000);
|
||||
});
|
||||
|
||||
form.on('radio(type)', function (data) {
|
||||
if (data.value == 1) {
|
||||
$('#expression').show();
|
||||
preview();
|
||||
} else {
|
||||
$('#expression').hide();
|
||||
$('#preview').hide();
|
||||
}
|
||||
});
|
||||
|
||||
form.verify({
|
||||
expression_required: function (value, item) {
|
||||
if ($('input[name="type"]:checked').val() == 2) {
|
||||
return;
|
||||
}
|
||||
if(isEmptyString(value)){
|
||||
return '定时任务的规则不能为空';
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
})
|
||||
</script>
|
||||
156
app/admin/view/system/crontab/edit.html
Normal file
156
app/admin/view/system/crontab/edit.html
Normal file
@ -0,0 +1,156 @@
|
||||
{layout name="layout2" /}
|
||||
<style>
|
||||
.layui-form-item .layui-input-inline {
|
||||
width: 240px;
|
||||
}
|
||||
</style>
|
||||
<div class="layui-form" lay-filter="layuiadmin-form-admin" id="layuiadmin-form-admin" style="padding: 20px 30px 0 0;">
|
||||
<input type="hidden" value="0" name="id">
|
||||
<div class="layui-form-item">
|
||||
<input type="hidden" name="id" value="{$info.id}">
|
||||
<label class="layui-form-label">名称</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="name" lay-verify="required" lay-vertype="tips" placeholder="请输入名称"
|
||||
autocomplete="off" class="layui-input" value="{$info.name}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">类型</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" lay-filter="type" name="type" value="1" title="定时任务" {eq name="info.type" value="1"}checked{/eq}>
|
||||
<!--<input type="radio" lay-filter="type" name="type" value="2" title="守护进程" {eq name="info.type" value="2"}checked{/eq}>-->
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">命令</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="command" lay-verify="required" lay-vertype="tips"
|
||||
placeholder="请输入thinkphp命令,例:version" autocomplete="off" class="layui-input" value="{$info.command}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">参数</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="parameter" placeholder="请输入参数,例:--id 8 --name 测试" autocomplete="off"
|
||||
class="layui-input" value="{$info.parameter}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">状态</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="checkbox" lay-filter="disable" name="status" lay-skin="switch" lay-text="立即启动|停止" {eq name="info.status" value="1"}checked{/eq}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item" id="expression">
|
||||
<label class="layui-form-label">规则</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="expression" lay-verify="expression_required" lay-vertype="tips"
|
||||
placeholder="请输入crontab规则,例:59 * * * *" autocomplete="off" class="layui-input" value="{$info.expression}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item" id="preview" style="display: none">
|
||||
<label class="layui-form-label">执行预览</label>
|
||||
<div class="layui-input-inline">
|
||||
<table class="layui-table">
|
||||
<colgroup>
|
||||
<col width="60">
|
||||
<col width="160">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>次数</th>
|
||||
<th>执行时间</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody_lists">
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-form-text">
|
||||
<label class="layui-form-label">备注</label>
|
||||
<div class="layui-input-inline">
|
||||
<textarea name="remark" placeholder="请输入内容" class="layui-textarea">{$info.remark}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-hide">
|
||||
<input type="button" lay-submit lay-filter="crontab-submit-edit" id="crontab-submit-edit" value="确认">
|
||||
</div>
|
||||
</div>
|
||||
<script src="/static/common/js/array.js"></script>
|
||||
<script>
|
||||
var code;
|
||||
layui.config({
|
||||
version:"{$front_version}",
|
||||
base: '/static/lib/' //静态资源所在路径
|
||||
}).use(['form'], function () {
|
||||
var $ = layui.$
|
||||
, form = layui.form;
|
||||
|
||||
function preview() {
|
||||
expression = $("[name=expression]").val();
|
||||
if (isEmptyString(expression)) {
|
||||
$('#tbody_lists').html('');
|
||||
$('#preview').hide();
|
||||
return;
|
||||
}
|
||||
var data = {'expression': expression};
|
||||
like.ajax({
|
||||
url: '{:url("system.Crontab/expression")}',
|
||||
data: data,
|
||||
type: "get",
|
||||
success: function (res) {
|
||||
if (res.code == 1) {
|
||||
var html = '';
|
||||
var data = res.data;
|
||||
for (var i in data) {
|
||||
html += '<tr>';
|
||||
html += '<td>' + data[i]['time'] + '</td>';
|
||||
html += '<td>' + data[i]['date'] + '</td>';
|
||||
html += '</tr>';
|
||||
}
|
||||
$('#preview').show();
|
||||
$('#tbody_lists').html(html);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$("[name=expression]").bind('input propertychange', function () {
|
||||
clearTimeout(code);
|
||||
code = setTimeout(function () {
|
||||
preview();
|
||||
}, 1000);
|
||||
});
|
||||
|
||||
form.on('radio(type)', function (data) {
|
||||
if (data.value == 1) {
|
||||
$('#expression').show();
|
||||
preview();
|
||||
} else {
|
||||
$('#expression').hide();
|
||||
$('#preview').hide();
|
||||
}
|
||||
});
|
||||
|
||||
form.verify({
|
||||
expression_required: function (value, item) {
|
||||
if ($('input[name="type"]:checked').val() == 2) {
|
||||
return;
|
||||
}
|
||||
if(isEmptyString(value)){
|
||||
return '定时任务的规则不能为空';
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if ('{$info.type}' == '1') {
|
||||
$('#expression').show();
|
||||
preview();
|
||||
} else {
|
||||
$('#expression').hide();
|
||||
$('#preview').hide();
|
||||
}
|
||||
preview();
|
||||
})
|
||||
</script>
|
||||
205
app/admin/view/system/crontab/lists.html
Normal file
205
app/admin/view/system/crontab/lists.html
Normal file
@ -0,0 +1,205 @@
|
||||
{layout name="layout1" /}
|
||||
<div class="wrapper">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-collapse like-layui-collapse" lay-accordion="" style="border:1px dashed #c4c4c4">
|
||||
<div class="layui-colla-item">
|
||||
<h2 class="layui-colla-title like-layui-colla-title" style="background-color: #fff">操作提示</h2>
|
||||
<div class="layui-colla-content layui-show">
|
||||
<p>1.请在linux环境使用crontab命令添加定时任务:*/1 * * * * php think crontab 。</p>
|
||||
<p>2.规则如下:</p>
|
||||
<p>*(0~59分) *(0~23小时) *(1~31号) *(1-12月) *(0-7星期,0和7都代表星期日)</p>
|
||||
<p>*(星号):代表任何时刻都接受的意思。例:0 10 * * * command 日、月、周都是*,就代表着不论何月、何日的星期几的10:00都执行后续命令的意思。</p>
|
||||
<p>,(逗号):代表分隔时段的意思。例:要执行的工作是2:00与3:00时,就会是:0 2,3 * * * command时间还是有五列,不过第二列是 2,3 ,代表2与3都适用。</p>
|
||||
<p>-(减号): 代表一段时间范围内,例:8点到11点之间的每小时的18分都进行一项工作:18 8-11 * * * command仔细看到第二列变成8-11.代表 8,9,10,11,12 都适用的。</p>
|
||||
<p>/n(斜线):那个n代表数字,即是每隔n单位间隔的意思,例:每五分钟进行一次,则:*/5 * * * * 。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div style="padding-bottom: 10px;">
|
||||
<button class="layui-btn layui-btn-sm layuiadmin-btn-crontab {$view_theme_color}" data-type="add">添加</button>
|
||||
</div>
|
||||
<table id="crontab-lists" lay-filter="crontab-lists"></table>
|
||||
<script type="text/html" id="status">
|
||||
{{# if(d.status == 1){ }}
|
||||
<button class="layui-btn layui-btn-sm {$view_theme_button}">运行</button>
|
||||
{{# } }}
|
||||
|
||||
{{# if(d.status == 2){ }}
|
||||
<button class="layui-btn layui-btn-sm layui-btn-danger">停止</button>
|
||||
{{# } }}
|
||||
|
||||
{{# if(d.status == 3){ }}
|
||||
<button class="layui-btn layui-btn-sm layui-btn-danger">错误</button>
|
||||
{{# } }}
|
||||
</script>
|
||||
<script type="text/html" id="operation">
|
||||
<a class="layui-btn layui-btn-sm layui-btn-normal" lay-event="edit">编辑</a>
|
||||
{{# if(d.system == 0){ }}
|
||||
<a class="layui-btn layui-btn-sm layui-btn-danger" lay-event="delete">删除</a>
|
||||
{{# } }}
|
||||
{{# if(d.system == 1){ }}
|
||||
<a class="layui-btn layui-btn-sm layui-btn-danger layui-btn-disabled">删除</a>
|
||||
{{# } }}
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
layui.config({
|
||||
version:"{$front_version}",
|
||||
base: '/static/lib/' //静态资源所在路径
|
||||
}).use(['table'], function () {
|
||||
var $ = layui.$
|
||||
, form = layui.form
|
||||
, table = layui.table;
|
||||
|
||||
|
||||
table.render({
|
||||
elem: '#crontab-lists'
|
||||
, url: '{:url("system.Crontab/lists")}' //模拟接口
|
||||
, cols: [[
|
||||
{field: 'name', width: 150, title: '名称'}
|
||||
, {field: 'type_desc', width: 90, title: '类型'}
|
||||
, {field: 'command', width: 150, title: '命令'}
|
||||
, {field: 'parameter', width: 100, title: '参数'}
|
||||
, {field: 'expression', width: 100, title: '规则'}
|
||||
, {width:80,title: '状态', templet: '#status', align: 'center',sort: true}
|
||||
, {field: 'error', width: 120, title: '错误原因'}
|
||||
, {field: 'last_time_str', width: 160, title: '最后执行时间'}
|
||||
, {field: 'time', width: 90, title: '时长'}
|
||||
, {field: 'max_time', width: 90, title: '最大时长'}
|
||||
, {fixed: 'right', title: '操作',width: 300,align: 'center', toolbar: '#operation'}
|
||||
]]
|
||||
, text: {none: '暂无数据!'}
|
||||
, parseData: function (res) { //将原始数据解析成 table 组件所规定的数据
|
||||
return {
|
||||
"code": res.code,
|
||||
"msg": res.msg,
|
||||
"count": res.data.count, //解析数据长度
|
||||
"data": res.data.lists, //解析数据列表
|
||||
};
|
||||
},
|
||||
response: {
|
||||
statusCode: 1
|
||||
}
|
||||
,done: function(res, curr, count){
|
||||
// 解决操作栏因为内容过多换行问题
|
||||
$(".layui-table-main tr").each(function (index, val) {
|
||||
$($(".layui-table-fixed-l .layui-table-body tbody tr")[index]).height($(val).height());
|
||||
$($(".layui-table-fixed-r .layui-table-body tbody tr")[index]).height($(val).height());
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
//监听工具条
|
||||
table.on('tool(crontab-lists)', function (obj) {
|
||||
var operation = obj.event;
|
||||
var id = obj.data['id'];
|
||||
switch (operation) {
|
||||
case 'delete':
|
||||
layer.confirm('确定删除定时任务吗?', function(index){
|
||||
like.ajax({
|
||||
url:'{:url("system.Crontab/del")}',
|
||||
data:{'id':id},
|
||||
type:"post",
|
||||
success:function(res)
|
||||
{
|
||||
if(res.code == 1) {
|
||||
obj.del();
|
||||
layui.layer.msg(res.msg, {
|
||||
offset: '15px'
|
||||
, icon: 1
|
||||
, time: 1000
|
||||
});
|
||||
layer.close(index);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
break;
|
||||
case 'edit':
|
||||
layer.open({
|
||||
type: 2
|
||||
,title: '编辑系统任务'
|
||||
,content: '{:url("system.Crontab/edit")}?id='+id
|
||||
,area: ['90%', '90%']
|
||||
,btn: ['确定', '取消']
|
||||
,yes: function(index, layero){
|
||||
var iframeWindow = window['layui-layer-iframe'+ index]
|
||||
,submitID = 'crontab-submit-edit'
|
||||
,submit = layero.find('iframe').contents().find('#'+ submitID);
|
||||
//监听提交
|
||||
iframeWindow.layui.form.on('submit('+ submitID +')', function(data){
|
||||
var field = data.field;
|
||||
like.ajax({
|
||||
url:'{:url("system.Crontab/edit")}',
|
||||
data:field,
|
||||
type:"post",
|
||||
success:function(res)
|
||||
{
|
||||
if(res.code == 1) {
|
||||
layui.layer.msg(res.msg, {
|
||||
offset: '15px'
|
||||
, icon: 1
|
||||
, time: 1000
|
||||
});
|
||||
layer.close(index); //关闭弹层
|
||||
table.reload('crontab-lists'); //数据刷新
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
submit.trigger('click');
|
||||
}
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
var active = {
|
||||
add: function(){
|
||||
layer.open({
|
||||
type: 2
|
||||
,title: '添加系统任务'
|
||||
,content: '{:url("system.Crontab/add")}'
|
||||
,area: ['90%', '90%']
|
||||
,btn: ['确定', '取消']
|
||||
,yes: function(index, layero){
|
||||
var iframeWindow = window['layui-layer-iframe'+ index]
|
||||
,submitID = 'crontab-submit'
|
||||
,submit = layero.find('iframe').contents().find('#'+ submitID);
|
||||
//监听提交
|
||||
iframeWindow.layui.form.on('submit('+ submitID +')', function(data){
|
||||
var field = data.field;
|
||||
like.ajax({
|
||||
url:'{:url("system.Crontab/add")}',
|
||||
data:field,
|
||||
type:"post",
|
||||
success:function(res)
|
||||
{
|
||||
if(res.code == 1) {
|
||||
layui.layer.msg(res.msg, {
|
||||
offset: '15px'
|
||||
, icon: 1
|
||||
, time: 1000
|
||||
});
|
||||
layer.close(index); //关闭弹层
|
||||
table.reload('crontab-lists'); //数据刷新
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
submit.trigger('click');
|
||||
}
|
||||
});
|
||||
},
|
||||
}
|
||||
$('.layui-btn.layuiadmin-btn-crontab').on('click', function(){
|
||||
var type = $(this).data('type');
|
||||
active[type] ? active[type].call(this) : '';
|
||||
});
|
||||
});
|
||||
</script>
|
||||
235
app/admin/view/system/log/lists.html
Normal file
235
app/admin/view/system/log/lists.html
Normal file
@ -0,0 +1,235 @@
|
||||
{layout name="layout1" /}
|
||||
<style>
|
||||
.layui-table-cell {
|
||||
font-size: 14px;
|
||||
padding: 0 5px;
|
||||
height: auto;
|
||||
overflow: visible;
|
||||
text-overflow: inherit;
|
||||
white-space: normal;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.goods-content > div:not(:last-of-type) {
|
||||
border-bottom: 1px solid #DCDCDC;
|
||||
}
|
||||
|
||||
.goods-data::after {
|
||||
display: block;
|
||||
content: '';
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.goods_name_hide {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
</style>
|
||||
<div class="wrapper">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-collapse like-layui-collapse" lay-accordion="" style="border:1px dashed #c4c4c4">
|
||||
<div class="layui-colla-item">
|
||||
<h2 class="layui-colla-title like-layui-colla-title" style="background-color: #fff">操作提示</h2>
|
||||
<div class="layui-colla-content layui-show">
|
||||
<p>*记录管理后台系统日志,可用于排查事故原因</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form" style="margin-top:15px;">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-row">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">管理员:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="account" id="account" placeholder="请输入搜索内容"
|
||||
autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">访问链接:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="uri" id="uri" 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="type" id="type">
|
||||
<option value="">全部</option>
|
||||
<option value="GET">GET</option>
|
||||
<option value="POST">POST</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">来源ip:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="ip" id="ip" placeholder="请输入搜索内容"
|
||||
autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-row">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">日志时间:</label>
|
||||
<div class="layui-input-inline">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="start_time" class="layui-input" id="start_time"
|
||||
placeholder="" autocomplete="off">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="margin-right: 5px;width: 20px;">
|
||||
<label class="layui-form-mid">至</label>
|
||||
</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="end_time" class="layui-input" id="end_time"
|
||||
placeholder="" autocomplete="off">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<div class="layui-btn-group">
|
||||
<button type="button" id="today" day="1" class="layui-btn layui-btn-primary day">今天</button>
|
||||
<button type="button" day="-1" class="layui-btn layui-btn-primary day">昨天</button>
|
||||
<button type="button" day="7" class="layui-btn layui-btn-primary day">最近7天</button>
|
||||
<button type="button" day="30" class="layui-btn layui-btn-primary day">最近30天</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<button class="layui-btn layuiadmin-btn-ad {$view_theme_color}" lay-submit
|
||||
lay-filter="order-search">查询
|
||||
</button>
|
||||
<button class="layui-btn layuiadmin-btn-ad layui-btn-primary " lay-submit
|
||||
lay-filter="order-clear-search">重置
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--数据表格-->
|
||||
<table id="order-lists" lay-filter="order-lists"></table>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
layui.config({
|
||||
version:"{$front_version}",
|
||||
base: '/static/lib/' //静态资源所在路径
|
||||
}).use(['table', 'laydate'], function () {
|
||||
var $ = layui.$
|
||||
, form = layui.form
|
||||
, table = layui.table
|
||||
, element = layui.element
|
||||
, laydate = layui.laydate;
|
||||
|
||||
//监听搜索
|
||||
form.on('submit(order-search)', function (data) {
|
||||
var field = data.field;
|
||||
//执行重载
|
||||
table.reload('order-lists', {
|
||||
where: field
|
||||
});
|
||||
});
|
||||
//清空查询
|
||||
form.on('submit(order-clear-search)', function () {
|
||||
$('#account').val('');
|
||||
$('#uri').val('');
|
||||
$('#ip').val('');
|
||||
$('#start_time').val('');
|
||||
$('#end_time').val('');
|
||||
$('#type').val('');
|
||||
form.render('select');
|
||||
$('.day').removeClass('layui-btn-normal');
|
||||
$('.day').removeClass('layui-btn-primary');
|
||||
$('.day').addClass('layui-btn-primary');
|
||||
//刷新列表
|
||||
table.reload('order-lists', {
|
||||
where: []
|
||||
});
|
||||
});
|
||||
|
||||
//日期时间范围
|
||||
laydate.render({
|
||||
elem: '#start_time'
|
||||
, type: 'datetime'
|
||||
,theme: '#1E9FFF'
|
||||
});
|
||||
|
||||
laydate.render({
|
||||
elem: '#end_time'
|
||||
, type: 'datetime'
|
||||
,theme: '#1E9FFF'
|
||||
});
|
||||
|
||||
$('.day').click(function(){
|
||||
$('.day').removeClass('layui-btn-normal');
|
||||
$('.day').removeClass('layui-btn-primary');
|
||||
$('.day').addClass('layui-btn-primary');
|
||||
$(this).removeClass('layui-btn-primary');
|
||||
$(this).addClass('layui-btn-normal');
|
||||
var day = $(this).attr('day');
|
||||
switch (day) {
|
||||
case '-1':
|
||||
$('#start_time').val('{$yesterday[0]}');
|
||||
$('#end_time').val('{$yesterday[1]}');
|
||||
break;
|
||||
case '1':
|
||||
$('#start_time').val('{$today[0]}');
|
||||
$('#end_time').val('{$today[1]}');
|
||||
break;
|
||||
case '7':
|
||||
$('#start_time').val('{$days_ago7[0]}');
|
||||
$('#end_time').val('{$days_ago7[1]}');
|
||||
break;
|
||||
case '30':
|
||||
$('#start_time').val('{$days_ago30[0]}');
|
||||
$('#end_time').val('{$days_ago30[1]}');
|
||||
break;
|
||||
}
|
||||
|
||||
});
|
||||
//获取列表
|
||||
getList();
|
||||
function getList() {
|
||||
table.render({
|
||||
limit:20,
|
||||
elem: '#order-lists'
|
||||
, url: '{:url("system.log/lists")}'
|
||||
, cols: [[
|
||||
{field: 'id', title: '记录ID', width: 60, align: 'center'}
|
||||
, {field: 'account', title: '管理员', align: 'center', width: 80}
|
||||
, {field: 'uri', title: '访问链接', align: 'center', width: 200}
|
||||
, {field: 'type', title: '访问方式', align: 'center', width: 80}
|
||||
, {field: 'param', title: '访问参数', align: 'left', width: 200}
|
||||
, {field: 'ip', title: '来源', align: 'center', width: 110}
|
||||
, {fixed: 'right', field: 'create_time', title: '日志时间', align: 'center', width: 160}
|
||||
]]
|
||||
, page: true
|
||||
, text: {none: '暂无数据!'}
|
||||
, parseData: function (res) { //将原始数据解析成 table 组件所规定的数据
|
||||
return {
|
||||
"code": res.code,
|
||||
"msg": res.msg,
|
||||
"count": res.data.count, //解析数据长度
|
||||
"data": res.data.lists, //解析数据列表
|
||||
};
|
||||
},
|
||||
response: {
|
||||
statusCode: 1
|
||||
}
|
||||
,done: function(res, curr, count){
|
||||
// 解决操作栏因为内容过多换行问题
|
||||
$(".layui-table-main tr").each(function (index, val) {
|
||||
$($(".layui-table-fixed-l .layui-table-body tbody tr")[index]).height($(val).height());
|
||||
$($(".layui-table-fixed-r .layui-table-body tbody tr")[index]).height($(val).height());
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
141
app/admin/view/system/upgrade/choose_page.html
Normal file
141
app/admin/view/system/upgrade/choose_page.html
Normal file
@ -0,0 +1,141 @@
|
||||
{layout name="layout1" /}
|
||||
<style>
|
||||
.container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.container p {
|
||||
margin-top: 30px;
|
||||
margin-bottom: 20px;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.container button {
|
||||
margin-top: 10px;
|
||||
width: 300px;
|
||||
}
|
||||
.layui-btn + .layui-btn {
|
||||
margin-left: 0;
|
||||
}
|
||||
</style>
|
||||
<div class="container">
|
||||
<p>系统是否进行过二次开发?</p>
|
||||
<button class="layui-btn layui-btn-normal" id="update">未做过二次开发,直接更新</button>
|
||||
<button class="layui-btn layui-btn-primary" id="secondary">已做过二次开发</button>
|
||||
<button class="layui-btn layui-btn-primary" id="cancle">取消更新</button>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
var versionData = [];
|
||||
|
||||
function setVersionData(data) {
|
||||
versionData = data;
|
||||
}
|
||||
|
||||
layui.config({
|
||||
version:"{$front_version}",
|
||||
base: '/static/plug/layui-admin/dist/layuiadmin/'
|
||||
}).extend({
|
||||
index: 'lib/index' //主入口模块
|
||||
}).use(['index','layer', 'like'], function() {
|
||||
var layer = layui.layer;
|
||||
var $ = layui.$;
|
||||
var like = layui.like;
|
||||
|
||||
|
||||
// 更新
|
||||
$('#update').click(function() {
|
||||
layer.confirm('一键更新导致的系统问题,欢迎前往社区反馈,请做好系统备份!', {
|
||||
time: 0, //不自动关闭
|
||||
btn: ['确定更新', '取消更新'],
|
||||
title: '注意',
|
||||
area: ['60%','60%'],
|
||||
yes: function(index) {
|
||||
like.ajax({
|
||||
url:'{:url("system.Upgrade/handleUpgrade")}',
|
||||
data:versionData,
|
||||
type:"post",
|
||||
success:function(res)
|
||||
{
|
||||
if(res.code == 1)
|
||||
{
|
||||
layui.layer.msg(res.msg, {
|
||||
offset: '15px'
|
||||
, icon: 1
|
||||
, time: 2000
|
||||
},function () {
|
||||
layer.close(index);
|
||||
window.parent.location.reload();
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 已做过二次开发
|
||||
$('#secondary').click(function() {
|
||||
layer.confirm('二次开发后请谨慎使用一键更新功能!\n' +
|
||||
'\n' + '二次开发后一键更新导致的系统问题,官方无法处理,请做好系统备份', {
|
||||
time: 0, //不自动关闭
|
||||
btn: ['确定更新', '下载更新包,手动更新','取消更新'],
|
||||
title: '注意',
|
||||
area: ['60%','60%'],
|
||||
yes: function(index) {
|
||||
like.ajax({
|
||||
url:'{:url("system.Upgrade/handleUpgrade")}',
|
||||
data:versionData,
|
||||
type:"post",
|
||||
success:function(res)
|
||||
{
|
||||
if(res.code == 1)
|
||||
{
|
||||
layui.layer.msg(res.msg, {
|
||||
offset: '15px'
|
||||
, icon: 1
|
||||
, time: 2000
|
||||
},function () {
|
||||
layer.close(index);
|
||||
window.parent.location.reload();
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
versionData.update_type = 2; //服务端更新包类型
|
||||
// 写入更新日志
|
||||
$.ajax({
|
||||
url: '{:url("system.upgrade/getPkg")}',
|
||||
type: 'post',
|
||||
data: versionData,
|
||||
success: function(res) {
|
||||
if(res.code == 1) {
|
||||
// 下载更新包
|
||||
window.location.href = res.data.link;
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
btn3: function(index, layero) {
|
||||
layer.close(index);
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
// 取消更新
|
||||
$('#cancle').click(function() {
|
||||
var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
|
||||
parent.layer.close(index); //再执行关闭
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
247
app/admin/view/system/upgrade/index.html
Normal file
247
app/admin/view/system/upgrade/index.html
Normal file
@ -0,0 +1,247 @@
|
||||
{layout name="layout1" /}
|
||||
|
||||
<style>
|
||||
.layui-table-cell { height: auto; }
|
||||
.tips { color: red}
|
||||
.mag-10 { margin-top: 10px}
|
||||
</style>
|
||||
|
||||
<div class="wrapper">
|
||||
<div class="layui-card layui-form">
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-collapse like-layui-collapse" style="border:1px dashed #c4c4c4">
|
||||
<div class="layui-colla-item">
|
||||
<h2 class="layui-colla-title like-layui-colla-title" style="background-color: #fff">操作提示</h2>
|
||||
<div class="layui-colla-content layui-show">
|
||||
<p>* 版本更新需要逐个版本更新,<font class="tips">更新前请备份好系统和数据库</font>,更新成功后需要强制刷新站点;</p>
|
||||
<p>* 系统没有做二次开发,可以直接选择在线更新功能;</p>
|
||||
<p>* 系统已做二次开发,进行了功能修改,请谨慎选择在线更新功能,推荐以更新包的形式手动更新;</p>
|
||||
<p>* <a href="https://home.likeshop.cn/article/95.html" target="_blank" class ="doc">关于后续版本的升级说明(推荐阅读)</a></p>
|
||||
<p>* <font class="tips">更新至v1.3.0版本后,请执行 www.example.com/admin/distribution.center/updateTable, www.example.com为你的域名。</font></p>
|
||||
<p>* <font class="tips">更新至v1.3.0版本后,商品分销比例需在分销应用-分销设置-分销商品单独设置。</font></p>
|
||||
<p>* <font class="tips">更新至v1.4.1版本后,请执行 www.example.com/api/distribution/fixAncestorRelation, www.example.com为你的域名。</font></p>
|
||||
<p>* v1.4.1版本新增商家移动端,支持打包发布为H5、小程序、APP。H5访问地址为 www.example.com/business, www.example.com为你的商城域名。</p>
|
||||
<p>* <font class="tips">更新至v1.9.2版本后,客服域名配置请参考最新文档。</font></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card-body">
|
||||
<table id="lists" lay-filter="lists"></table>
|
||||
<script type="text/html" id="operation">
|
||||
|
||||
<!--一键更新-->
|
||||
{{# if(d.able_update === 1){ }}
|
||||
<a class="layui-btn layui-btn-sm layui-btn-normal mag-10" lay-event="update">一键更新</a> <br/>
|
||||
{{# } }}
|
||||
|
||||
<!--服务端更新包-->
|
||||
{{# if(d.package_link != "undefined" && d.package_link != null && d.package_link != ""){ }}
|
||||
<a class="layui-btn layui-btn-sm layui-btn-primary mag-10" lay-event="download-server">服务端更新包</a> <br/>
|
||||
{{# } }}
|
||||
|
||||
<!--pc更新包-->
|
||||
{{# if(d.pc_package_link != "undefined" && d.pc_package_link != null && d.pc_package_link != ""){ }}
|
||||
<a class="layui-btn layui-btn-sm layui-btn-primary mag-10" lay-event="download-pc">pc更新包</a> <br/>
|
||||
{{# } }}
|
||||
|
||||
<!--uniapp更新包-->
|
||||
{{# if(d.uniapp_package_link != "undefined" && d.uniapp_package_link != null && d.uniapp_package_link != ""){ }}
|
||||
<a class="layui-btn layui-btn-sm layui-btn-primary mag-10" lay-event="download-uniapp">uniapp更新包</a> <br/>
|
||||
{{# } }}
|
||||
|
||||
<!--商家后台移动端更新包-->
|
||||
{{# if(d.business_package_link != "undefined" && d.business_package_link != null && d.business_package_link != ""){ }}
|
||||
<a class="layui-btn layui-btn-sm layui-btn-primary mag-10" lay-event="download-business">商家移动端更新包</a> <br/>
|
||||
{{# } }}
|
||||
|
||||
<!--客服端更新包-->
|
||||
{{# if(d.kefu_package_link != "undefined" && d.kefu_package_link != null && d.kefu_package_link != ""){ }}
|
||||
<a class="layui-btn layui-btn-sm layui-btn-primary mag-10" lay-event="download-kefu">客服端更新包</a> <br/>
|
||||
{{# } }}
|
||||
|
||||
<a class="layui-btn layui-btn-sm layui-btn-primary mag-10" lay-event="download-full">完整安装包</a>
|
||||
</script>
|
||||
|
||||
<!--更新内容-->
|
||||
<script type="text/html" id="content">
|
||||
<div style="text-align: left">
|
||||
{{# layui.each(d.add, function(index, item){ }}
|
||||
<li>
|
||||
<span>{{ item }}</span>
|
||||
<li>
|
||||
{{# }); }}
|
||||
|
||||
{{# layui.each(d.optimize, function(index, item){ }}
|
||||
<li>
|
||||
<span>{{ item }}</span>
|
||||
</li>
|
||||
{{# }); }}
|
||||
|
||||
{{# layui.each(d.repair, function(index, item){ }}
|
||||
<li>
|
||||
<span>{{ item }}</span>
|
||||
</li>
|
||||
{{# }); }}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!--版本-->
|
||||
<script type="text/html" id="version">
|
||||
{{# if(d.new_version === 1){ }}
|
||||
<span style="color: red">new-</span><span>{{d.version_no}}</span>
|
||||
{{# } else { }}
|
||||
<span>{{d.version_no}}</span>
|
||||
{{# } }}
|
||||
<p>{{d.version_str}}</p>
|
||||
</script>
|
||||
|
||||
<!--更新注意提示-->
|
||||
<script type="text/html" id="notice">
|
||||
{{# layui.each(d.notice, function(index, item){ }}
|
||||
<li>
|
||||
<span>{{ item }}</span>
|
||||
</li>
|
||||
{{# }); }}
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
layui.use(['table'], function () {
|
||||
var table = layui.table;
|
||||
var layer = layui.layer;
|
||||
var $ = layui.$;
|
||||
|
||||
|
||||
like.tableLists('#lists', '{:url("system.Upgrade/index")}', [
|
||||
{field: 'create_time', title: '发布日期', width: 200, align: 'center'}
|
||||
, {field: 'version_no', title: '版本', width: 200, align: 'center', templet: '#version'}
|
||||
, {field: 'content', title: '版本内容', width: 300, align: 'center', templet: '#content'}
|
||||
, {field: 'notice', title: '注意事项', width: 300, align: 'center', templet: '#notice'}
|
||||
, {title: '操作', align: 'center', width: 300, toolbar: '#operation'}
|
||||
]);
|
||||
|
||||
|
||||
// 监听行工具栏按钮
|
||||
table.on('tool(lists)', function (obj) {
|
||||
var data = obj.data;
|
||||
var layEvent = obj.event;
|
||||
|
||||
// 一键更新
|
||||
if (layEvent === 'update') {
|
||||
layer.open({
|
||||
type: 2,
|
||||
title: '请选择操作',
|
||||
content: '{:url("system.upgrade/choosePage")}',
|
||||
area: ['60%', '60%'],
|
||||
success: function(layero, index){
|
||||
var iframe = window['layui-layer-iframe'+index];
|
||||
iframe.setVersionData(obj.data);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// 下载服务端更新包
|
||||
if (layEvent === 'download-server') {
|
||||
data.update_type = 2; //服务端更新包类型
|
||||
like.ajax({
|
||||
url: '{:url("system.upgrade/getPkg")}',
|
||||
type: 'post',
|
||||
data: data,
|
||||
success: function(res) {
|
||||
if(res.code == 1) {
|
||||
// 下载更新包
|
||||
window.location.href = res.data.link;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
//下载pc端更新包
|
||||
if (layEvent === 'download-pc') {
|
||||
data.update_type = 3; // pc端更新包类型
|
||||
like.ajax({
|
||||
url: '{:url("system.upgrade/getPkg")}',
|
||||
type: 'post',
|
||||
data: data,
|
||||
success: function(res) {
|
||||
if(res.code == 1) {
|
||||
// 下载更新包
|
||||
window.location.href = res.data.link;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//下载uniapp更新包
|
||||
if (layEvent === 'download-uniapp') {
|
||||
data.update_type = 4;
|
||||
like.ajax({
|
||||
url: '{:url("system.upgrade/getPkg")}',
|
||||
type: 'post',
|
||||
data: data,
|
||||
success: function(res) {
|
||||
if(res.code == 1) {
|
||||
// 下载更新包
|
||||
window.location.href = res.data.link;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 下载商家移动端更新包 download-business
|
||||
if (layEvent === 'download-business') {
|
||||
data.update_type = 7;
|
||||
like.ajax({
|
||||
url: '{:url("system.upgrade/getPkg")}',
|
||||
type: 'post',
|
||||
data: data,
|
||||
success: function(res) {
|
||||
if(res.code == 1) {
|
||||
// 下载更新包
|
||||
window.location.href = res.data.link;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 下载客服端更新包 download-kefu
|
||||
if (layEvent === 'download-kefu') {
|
||||
data.update_type = 8;
|
||||
like.ajax({
|
||||
url: '{:url("system.upgrade/getPkg")}',
|
||||
type: 'post',
|
||||
data: data,
|
||||
success: function(res) {
|
||||
if(res.code == 1) {
|
||||
// 下载更新包
|
||||
window.location.href = res.data.link;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// 下载完整安装包
|
||||
if (layEvent === 'download-full') {
|
||||
data.update_type = 6;
|
||||
like.ajax({
|
||||
url: '{:url("system.upgrade/getPkg")}',
|
||||
type: 'post',
|
||||
data: data,
|
||||
success: function(res) {
|
||||
if(res.code == 1) {
|
||||
window.open(res.data.link);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
Reference in New Issue
Block a user