chore: 重写初始提交(清空历史,整理后全量提交)
This commit is contained in:
@@ -0,0 +1,271 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>广告管理</title>
|
||||
<meta name="renderer" content="webkit">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<link href="/assets/layui/css/layui.css" rel="stylesheet">
|
||||
<link href="/assets/ywxapp/css/ywxapp.css" rel="stylesheet">
|
||||
<script type="text/javascript">
|
||||
var config = { root: "/" };
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="layui-card">
|
||||
<div class="layui-form layui-card-header layuiadmin-card-header-auto">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<select name="slot" id="slotFilter">
|
||||
<option value="">全部广告位</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<select name="status">
|
||||
<option value="">全部状态</option>
|
||||
<option value="1">启用</option>
|
||||
<option value="0">禁用</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<button class="layui-btn layuiadmin-btn-useradmin" lay-submit lay-filter="tableSearchButton">
|
||||
<i class="layui-icon layui-icon-search"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<table class="layui-hide" id="dataTable" lay-filter="dataTable"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="dataBar">
|
||||
<div class="layui-btn-group">
|
||||
<a class="layui-btn layui-btn-sm layui-btn-primary" title="编辑" lay-event="update"><i class="layui-icon layui-icon-edit"></i></a>
|
||||
<a class="layui-btn layui-btn-sm layui-btn-primary" title="删除" lay-event="delete"><i class="layui-icon layui-icon-delete"></i></a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="statusTpl">
|
||||
<input type="checkbox" name="status" value="{{d.id}}" lay-skin="switch" lay-text="启用|禁用" lay-filter="statusSwitch" {{ d.status == 1 ? 'checked' : '' }}>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="typeTpl">
|
||||
{{# if(d.type == 1){ }}图片{{# } else { }}代码{{# } }}
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="slotTpl">
|
||||
{{# var m={'home_top':'首页顶部','home_bottom':'首页底部','detail_inline':'详情页内联','sidebar':'侧边栏'}; }}
|
||||
{{ m[d.slot] || d.slot }}
|
||||
</script>
|
||||
|
||||
<!-- 添加/编辑表单 -->
|
||||
<script type="text/html" id="dataFormTpl">
|
||||
<form class="layui-form" style="padding:20px 20px 0;">
|
||||
<input type="hidden" name="id" value="{{d.id||''}}">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">广告位</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="slot" lay-verify="required">
|
||||
<option value="">请选择广告位</option>
|
||||
{{# d.slots.forEach(function(item){ }}
|
||||
<option value="{{item.id}}" {{ d.slot == item.id ? 'selected' : '' }}>{{item.title}}</option>
|
||||
{{# }); }}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">标题</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="title" required lay-verify="required" placeholder="广告标题" class="layui-input" value="{{d.title||''}}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">类型</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="type" value="1" title="图片广告" {{ d.type==undefined || d.type==1 ? 'checked' : '' }}>
|
||||
<input type="radio" name="type" value="2" title="代码广告" {{ d.type==2 ? 'checked' : '' }}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">图片</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="image" placeholder="图片URL(图片广告必填)" class="layui-input" value="{{d.image||''}}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">跳转链接</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="url" placeholder="点击图片后跳转的URL" class="layui-input" value="{{d.url||''}}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-form-text">
|
||||
<label class="layui-form-label">广告代码</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="code" placeholder="自定义HTML/JS代码(联盟广告等),代码广告必填" class="layui-textarea">{{d.code||''}}</textarea>
|
||||
</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="{{d.sort||0}}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">状态</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="status" value="1" title="启用" {{ d.status==undefined || d.status==1 ? 'checked' : '' }}>
|
||||
<input type="radio" name="status" value="0" title="禁用" {{ d.status==0 ? 'checked' : '' }}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">生效起</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="start_at" id="startAt" placeholder="留空=立即生效" class="layui-input" value="{{d.start_at_text||''}}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">生效止</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="end_at" id="endAt" placeholder="留空=长期有效" class="layui-input" value="{{d.end_at_text||''}}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-hide">
|
||||
<button class="layui-btn" lay-submit="" lay-filter="wxapp-form-submit" id="wxapp-form-submit">提交</button>
|
||||
</div>
|
||||
</form>
|
||||
</script>
|
||||
|
||||
<script src="/assets/layui/layui.js"></script>
|
||||
<script src="/assets/ywxapp/ywxapp.js" module="backend"></script>
|
||||
<script>
|
||||
layui.use(['http', 'table', 'form', 'laytpl', 'laydate', 'layer'], function () {
|
||||
var $ = layui.$, table = layui.table, form = layui.form, laytpl = layui.laytpl, laydate = layui.laydate, http = layui.http, layer = layui.layer;
|
||||
var slots = [];
|
||||
http.get('/haonav/backend/ad/create').then(function (res) {
|
||||
if (res.code === 0) {
|
||||
slots = res.data || [];
|
||||
var sel = document.getElementById('slotFilter');
|
||||
slots.forEach(function (s) { sel.appendChild(new Option(s.title, s.id)); });
|
||||
form.render('select');
|
||||
} else { layer.msg(res.msg || '加载失败'); }
|
||||
});
|
||||
|
||||
var dataTable = table.render({
|
||||
elem: '#dataTable',
|
||||
defaultToolbar: [{ title: '创建广告', layEvent: 'dataCreate', icon: 'layui-icon-add-1' }, 'filter', 'exports', 'print' ],
|
||||
url: '/haonav/backend/ad/index',
|
||||
page: true, limit: 20,
|
||||
parseData: function (res) {
|
||||
return { code: res.code, msg: res.message || '', count: res.count || 0, data: res.data || [] };
|
||||
},
|
||||
cols: [[
|
||||
{ type: 'checkbox', fixed: 'left' },
|
||||
{ field: 'id', title: 'ID', width: 70, sort: true },
|
||||
{ field: 'slot', title: '广告位', width: 110, templet: '#slotTpl' },
|
||||
{ field: 'title', title: '标题', minWidth: 120 },
|
||||
{ field: 'type', title: '类型', width: 90, templet: '#typeTpl' },
|
||||
{ field: 'image', title: '预览', width: 90, align: 'center', templet: function (d) { return d.type == 1 && d.image ? '<img src="' + d.image + '" style="max-height:32px;max-width:60px;">' : (d.type == 2 ? '<span style="color:#999">代码</span>' : '-'); } },
|
||||
{ field: 'url', title: '链接', minWidth: 120, templet: function (d) { return d.url ? '<a href="' + d.url + '" target="_blank" style="color:#01AAED;">' + d.url + '</a>' : '-'; } },
|
||||
{ field: 'click_count', title: '点击', width: 80, sort: true },
|
||||
{ field: 'sort', title: '排序', width: 80, sort: true, edit: 'text' },
|
||||
{ field: 'status', title: '状态', width: 90, align: 'center', templet: '#statusTpl', unresize: true },
|
||||
{ field: 'create_at', title: '创建时间', width: 160, align: 'center', templet: function (d) { return d.create_at ? d.create_at : '-'; } },
|
||||
{ title: '操作', width: 110, align: 'center', toolbar: '#dataBar', fixed: 'right' }
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('toolbar(dataTable)', function (obj) {
|
||||
if (obj.event === 'dataCreate') { active.dataCreate(); }
|
||||
});
|
||||
|
||||
table.on('edit(dataTable)', function (obj) {
|
||||
if (obj.field === 'sort') {
|
||||
http.post('sort', { id: obj.data.id, sort: obj.value }).then(function (res) {
|
||||
if (res.code === 0) { layer.msg(res.message || '已保存'); }
|
||||
else { layer.msg(res.message || '保存失败'); table.reload('dataTable', {}, true); }
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
table.on('tool(dataTable)', function (elem) {
|
||||
if (elem.event === 'update') { active.dataEdit(elem.data); }
|
||||
else if (elem.event === 'delete') { active.dataDelete([elem.data.id]); }
|
||||
});
|
||||
|
||||
form.on('submit(tableSearchButton)', function (data) {
|
||||
table.reload('dataTable', { where: data.field });
|
||||
});
|
||||
|
||||
form.on('switch(statusSwitch)', function (obj) {
|
||||
var id = this.value, st = obj.elem.checked ? 1 : 0;
|
||||
http.post('status', { id: id, status: st }).then(function (res) {
|
||||
if (res.code === 0) { layer.msg(res.message || '已保存'); }
|
||||
else { layer.msg(res.message || '失败'); obj.elem.checked = !obj.elem.checked; form.render('checkbox'); }
|
||||
});
|
||||
});
|
||||
|
||||
var dataFromFun = function (data, callback, done) {
|
||||
var html = laytpl($('#dataFormTpl').html()).render(data || {});
|
||||
layer.open({
|
||||
title: data.id ? '编辑广告' : '添加广告',
|
||||
content: html, anim: 'slideLeft', offset: 'r',
|
||||
btnAlign: 'l', area: ['440px', '99%'], shade: 0.1, shadeClose: true,
|
||||
btn: ['确定', '取消'],
|
||||
success: function (layero, index) {
|
||||
callback(layero, index);
|
||||
form.render();
|
||||
laydate.render({ elem: '#startAt', type: 'datetime' });
|
||||
laydate.render({ elem: '#endAt', type: 'datetime' });
|
||||
},
|
||||
yes: function (index, layero) {
|
||||
layui.form.on('submit(wxapp-form-submit)', function (elem) {
|
||||
done(layero, index, elem); layui.off('submit(wxapp-form-submit)'); return false;
|
||||
});
|
||||
layero.contents().find('#wxapp-form-submit').trigger('click');
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
var active = {
|
||||
dataCreate: function () {
|
||||
dataFromFun({ slots: slots }, function () { }, function (layero, index, elem) {
|
||||
var field = elem.field;
|
||||
http.post('save', field).then(function (res) {
|
||||
if (res.code === 0) { layer.close(index); table.reload('dataTable', {}, true); }
|
||||
else { layer.msg(res.message || '失败'); }
|
||||
});
|
||||
});
|
||||
},
|
||||
dataEdit: function (data) {
|
||||
http.get('edit?id=' + data.id).then(function (res) {
|
||||
if (res.code !== 0) { return layer.msg(res.msg || '加载失败'); }
|
||||
var d = res.data.info || {};
|
||||
d.slots = res.data.slots || slots;
|
||||
dataFromFun(d, function () { }, function (layero, index, elem) {
|
||||
var field = elem.field;
|
||||
http.put('update', field).then(function (r) {
|
||||
if (r.code === 0) { layer.close(index); table.reload('dataTable', {}, true); }
|
||||
else { layer.msg(r.message || '失败'); }
|
||||
});
|
||||
});
|
||||
});
|
||||
},
|
||||
dataDelete: function (ids) {
|
||||
if (!ids.length) { return layer.msg('请选择数据'); }
|
||||
layer.confirm('确定删除吗?', function (index) {
|
||||
http.delete('delete', { ids: ids.join(',') }).then(function (res) {
|
||||
if (res.code === 0) { layer.close(index); table.reload('dataTable', {}, true); }
|
||||
else { layer.msg(res.message || '失败'); }
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Reference in New Issue
Block a user