Files

272 lines
12 KiB
HTML

<!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>