初始上传

This commit is contained in:
2026-04-04 17:27:12 +08:00
parent 4d80d28eb4
commit b7e11774ee
11191 changed files with 1588469 additions and 0 deletions

220
app/shop/view/adv/add_adv.html Executable file
View File

@@ -0,0 +1,220 @@
<style>
.adv-url-show{margin-right: 10px;}
.layui-colorpicker-main-input div.layui-inline{margin-right: 0;}
.layui-colorpicker-main-input input.layui-input{width: 130px;height: 34px;}
</style>
<div class="layui-form form-wrap">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>广告名称:</label>
<div class="layui-input-block">
<input name="adv_title" type="text" lay-verify="required" class="layui-input len-long">
</div>
</div>
{notempty name="$adv_position_list"}
<div class="layui-form-item">
<label class="layui-form-label">所属广告位:</label>
<div class="layui-input-block len-mid">
<select name="ap_id" lay-filter="ap_id">
{foreach $adv_position_list as $adv_position_k => $adv_position_v}
<option value="{$adv_position_v.ap_id}" {if $ap_id == $adv_position_v.ap_id}selected{/if} data-type="{$adv_position_v.type}" data-width="{$adv_position_v.ap_width}" data-height="{$adv_position_v.ap_height}">{$adv_position_v.ap_name}</option>
{/foreach}
</select>
</div>
</div>
<div class="layui-form-item" data-type="2" {if $adv_position_list[0]['type'] == 1}style="display: none"{/if}>
<label class="layui-form-label">移动端广告链接:</label>
<div class="layui-input-block len-mid">
<span class="adv-url-show"></span>
<button class="layui-btn layui-btn-primary sm" onclick="selectedLink()">选择链接</button>
</div>
</div>
<input name="adv_url" type="hidden" />
{/notempty}
<div class="layui-form-item">
<label class="layui-form-label">广告图片:</label>
<div class="layui-input-block">
<div class="upload-img-block img-upload">
<div class="upload-img-box">
<div class="upload-default" id="adv_image">
<div class="upload">
<i class="iconfont iconshangchuan"></i>
<p>点击上传</p>
</div>
</div>
<div class="operation">
<div>
<i title="图片预览" class="iconfont iconreview js-preview" style="margin-right: 20px;"></i>
<i title="删除图片" class="layui-icon layui-icon-delete js-delete"></i>
</div>
<div class="replace_img js-replace">点击替换</div>
</div>
<input type="hidden" name="adv_image" value="">
</div>
</div>
</div>
<div class="word-aux">建议宽度<span class="pic_width">750</span>px 建议高度<span class="pic_height">350</span>px</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">排序:</label>
<div class="layui-input-block">
<input name="slide_sort" value="0" type="number" placeholder="排序" lay-verify="num" class="layui-input len-short">
</div>
<div class="word-aux">排序值必须为整数</div>
</div>
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">广告价格:</label>
<div class="layui-input-block">
<input name="price" value="0.00" type="number" placeholder="广告价格" lay-verify="flo" class="layui-input len-short">
</div>
<div class="word-aux">广告价格 / 月</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<button class="layui-btn layui-btn-primary" onclick="backAdvList()">返回</button>
<a id="advImageId"></a>
</div>
<input type="hidden" name="background" id="ap_background_color" value="#FFFFFF" />
</div>
<script>
var saveData = null;
var totalUploadNum = 0;
var completeUploadNum = 0;
var logo_upload;
layui.use(['form', 'colorpicker'], function () {
var form = layui.form,
colorpicker = layui.colorpicker,
repeat_flag = false; //防重复标识
form.render();
form.on('select(ap_id)', function(data){
var type = $(data.elem).find("option:selected").attr("data-type");
$("[data-type]").hide();
$("[data-type='"+ type+"']").show();
});
/**
* 颜色
*/
colorpicker.render({
elem: '#bg_color', //绑定元素
color: "#FFFFFF",
done: function(color) {
$(".tdrag-name").css("color", color);
$("#ap_background_color").val(color);
}
});
// 广告图片
logo_upload = new Upload({
elem: '#adv_image',
auto:false,
bindAction:'#advImageId',
callback: function(res) {
uploadComplete('adv_image', res.data.pic_path);
}
});
function uploadComplete(field, pic_path) {
saveData.field[field] = pic_path;
completeUploadNum += 1;
if(completeUploadNum == totalUploadNum){
saveFunc();
}
}
function saveFunc(){
var data = saveData;
$.ajax({
url: ns.url("shop/adv/addAdv"),
data: data.field,
dataType: 'JSON',
type: 'POST',
success: function(res) {
repeat_flag = false;
if (res.code == 0) {
layer.confirm('添加成功', {
title:'操作提示',
btn: ['返回列表', '继续添加'],
yes: function(index, layero) {
location.hash = ns.hash("shop/adv/lists", {ap_id: '{$ap_id}'})
layer.close(index);
},
btn2: function(index, layero) {
listenerHash(); // 刷新页面
layer.close(index);
}
});
} else {
layer.msg(res.message);
}
}
});
}
/**
* 监听提交
*/
form.on('submit(save)', function(data) {
if (repeat_flag) return;
repeat_flag = true;
saveData = data;
var obj = $("img.img_prev[data-prev='1']");
totalUploadNum = obj.length;
if(totalUploadNum > 0){
obj.each(function(){
var actionId = $(this).attr('data-action-id');
$(actionId).click();
})
}else{
saveFunc();
}
});
/**
* 表单验证
*/
form.verify({
num: function (value) {
let reg = ns.getRegexp('>=0num');
if (value !== '' && !reg.test(value)) {
return '排序数值必须为大于或等于0的整数'
}
},
flo: function (value) {
let reg = ns.getRegexp('>=0float2');
if (value !== '' && !reg.test(value)) {
return '价格必须大于或等于0最多保留两位小数'
}
}
});
});
function backAdvList() {
location.hash = ns.hash("shop/adv/lists", {ap_id : '{$ap_id}'})
}
function selectedLink() {
var d = {};
ns.select_link(d, function (data) {
for (var o in data) {
if (data[o] == null) delete data[o];
}
$("input[name='adv_url']").val(JSON.stringify(data));
$(".adv-url-show").text(data.title);
});
}
</script>

View File

@@ -0,0 +1,115 @@
<style>
.layui-colorpicker-main-input div.layui-inline{margin-right: 0;}
.layui-colorpicker-main-input input.layui-input{width: 130px;height: 34px;}
</style>
<div class="layui-form form-wrap">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>广告名称:</label>
<div class="layui-input-block">
<input name="ap_name" type="text" lay-verify="required" class="layui-input len-long">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>广告关键字:</label>
<div class="layui-input-block">
<input name="keyword" type="text" lay-verify="required" class="layui-input len-long">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">广告位简介:</label>
<div class="layui-input-block len-long">
<textarea name="ap_intro" class="layui-textarea" maxlength="150"></textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">是否启用:</label>
<div class="layui-input-block">
<input type="checkbox" name="state" value="1" lay-skin="switch" lay-filter="state" checked/>
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<button class="layui-btn layui-btn-primary" onclick="backAdvIndex()">返回</button>
</div>
<input type="hidden" name="ap_background_color" id="ap_background_color" value="#FFFFFF" />
</div>
<script>
layui.use(['form', 'colorpicker'], function () {
var form = layui.form,
colorpicker = layui.colorpicker,
repeat_flag = false; //防重复标识
form.render();
/**
* 颜色
*/
colorpicker.render({
elem: '#bg_color', //绑定元素
color: "#FFFFFF",
done: function(color) {
$(".tdrag-name").css("color", color);
$("#ap_background_color").val(color);
}
});
/**
* 监听提交
*/
form.on('submit(save)', function(data) {
if (repeat_flag) return;
repeat_flag = true;
$.ajax({
url: ns.url("shop/adv/addPosition"),
data: data.field,
dataType: 'JSON',
type: 'POST',
success: function(res) {
repeat_flag = false;
if (res.code == 0) {
layer.confirm('添加成功', {
title:'操作提示',
btn: ['返回列表', '继续添加'],
yes: function(index, layero) {
location.hash = ns.hash("shop/adv/index")
layer.close(index);
},
btn2: function(index, layero) {
listenerHash(); // 刷新页面
layer.close(index);
}
});
} else {
layer.msg(res.message);
}
}
});
});
/**
* 表单验证
*/
form.verify({
int: function (value) {
if (value == '') {
return;
}
if (value < 0 || value%1 != 0) {
return '请输入0或正整数'
}
}
});
});
function backAdvIndex() {
location.hash = ns.hash("shop/adv/index")
}
</script>

233
app/shop/view/adv/edit_adv.html Executable file
View File

@@ -0,0 +1,233 @@
<style>
.adv-url-show{margin-right: 10px;}
.layui-colorpicker-main-input div.layui-inline{margin-right: 0;}
.layui-colorpicker-main-input input.layui-input{width: 130px;height: 34px;}
</style>
<div class="layui-form form-wrap">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>广告名称:</label>
<div class="layui-input-block">
<input name="adv_title" type="text" value="{$adv_info.adv_title}" lay-verify="required" class="layui-input len-long">
</div>
</div>
{notempty name="$adv_position_list"}
<div class="layui-form-item">
<label class="layui-form-label">所属广告位:</label>
<div class="layui-input-block len-mid">
<select name="ap_id" lay-filter="ap_id">
{foreach $adv_position_list as $adv_position_k => $adv_position_v}
<option value="{$adv_position_v.ap_id}" data-type="{$adv_position_v.type}" data-width="{$adv_position_v.ap_width}" data-height="{$adv_position_v.ap_height}" {if condition="$adv_position_v.ap_id == $adv_info.ap_id"}selected{/if} >{$adv_position_v.ap_name}</option>
{/foreach}
</select>
</div>
</div>
<div class="layui-form-item" data-type="2" {if $type == 1}style="display: none"{/if}>
<label class="layui-form-label">移动端广告链接:</label>
<div class="layui-input-block len-mid">
<span class="adv-url-show"></span>
<button class="layui-btn layui-btn-primary sm" onclick="selectedLink()">选择链接</button>
</div>
</div>
<input name="adv_url" type="hidden" value="{$adv_info.adv_url}" />
{/notempty}
<div class="layui-form-item">
<label class="layui-form-label">广告图片:</label>
<div class="layui-input-block">
<div class="upload-img-block img-upload">
<div class="upload-img-box {notempty name="$adv_info['adv_image']"}hover{/notempty}">
<div class="upload-default" id="adv_image">
{if condition="$adv_info.adv_image"}
<div id="preview_adv_image" class="preview_img">
<img layer-src src="{:img($adv_info.adv_image)}" class="img_prev"/>
</div>
{else/}
<div class="upload">
<i class="iconfont iconshangchuan"></i>
<p>点击上传</p>
</div>
{/if}
</div>
<div class="operation">
<div>
<i title="图片预览" class="iconfont iconreview js-preview" style="margin-right: 20px;"></i>
<i title="删除图片" class="layui-icon layui-icon-delete js-delete"></i>
</div>
<div class="replace_img js-replace">点击替换</div>
</div>
<input type="hidden" name="adv_image" value="{$adv_info.adv_image}">
</div>
</div>
</div>
<div class="word-aux">建议宽度<span class="pic_width">750</span>px 建议高度<span class="pic_height">350</span>px</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">排序:</label>
<div class="layui-input-block">
<input name="slide_sort" value="{$adv_info.slide_sort}" type="number" placeholder="排序" lay-verify="num" class="layui-input len-short">
</div>
<div class="word-aux">排序值必须为整数</div>
</div>
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">广告价格:</label>
<div class="layui-input-block">
<input name="price" value="{$adv_info.price}" type="number" placeholder="广告价格" lay-verify="flo" class="layui-input len-short">
</div>
<div class="word-aux">单位:元 &nbsp;&nbsp; 价格不能小于0可以保留两位小数</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<button class="layui-btn layui-btn-primary" onclick="backAdvList()">返回</button>
<a id="advImageId"></a>
</div>
<input type="hidden" name="background" id="background" value="{$adv_info.background}" />
<input type="hidden" name="adv_id" value="{$adv_info.adv_id}" />
</div>
<script>
var color = $("#background").val();
var adv_url_json = $("input[name='adv_url']").val();
var saveData = null;
var totalUploadNum = 0;
var completeUploadNum = 0;
var ap_id = '{$ap_id}';
var logo_upload;
if(adv_url_json) adv_url_json = JSON.parse(adv_url_json);
$(".adv-url-show").text(adv_url_json.title);
layui.use(['form', 'colorpicker'], function () {
var form = layui.form,
colorpicker = layui.colorpicker,
repeat_flag = false; //防重复标识
form.render();
form.on('select(ap_id)', function(data){
var type = $(data.elem).find("option:selected").attr("data-type");
$("[data-type]").hide();
$("[data-type='"+ type+"']").show();
});
/**
* 颜色
*/
colorpicker.render({
elem: '#bg_color', //绑定元素
color: color,
done: function(color) {
$(".tdrag-name").css("color", color);
$("#background").val(color);
}
});
// 广告图片
logo_upload = new Upload({
elem: '#adv_image',
auto:false,
bindAction:'#advImageId',
callback: function(res) {
uploadComplete('adv_image', res.data.pic_path);
}
});
function uploadComplete(field, pic_path) {
saveData.field[field] = pic_path;
completeUploadNum += 1;
if(completeUploadNum == totalUploadNum){
saveFunc();
}
}
function saveFunc(){
var data = saveData;
$.ajax({
url: ns.url("shop/adv/editAdv"),
data: data.field,
dataType: 'JSON',
type: 'POST',
success: function(res) {
repeat_flag = false;
if (res.code == 0) {
layer.confirm('编辑成功', {
title:'操作提示',
btn: ['返回列表', '继续操作'],
yes: function(index, layero) {
location.hash = ns.hash("shop/adv/lists", {ap_id:ap_id})
layer.close(index);
},
btn2: function(index, layero) {
layer.close(index);
}
});
} else {
layer.msg(res.message);
}
}
});
}
/**
* 监听提交
*/
form.on('submit(save)', function(data) {
if (repeat_flag) return;
repeat_flag = true;
saveData = data;
var obj = $("img.img_prev[data-prev='1']");
totalUploadNum = obj.length;
if(totalUploadNum > 0){
obj.each(function(){
var actionId = $(this).attr('data-action-id');
$(actionId).click();
})
}else{
saveFunc();
}
});
/**
* 表单验证
*/
form.verify({
num: function (value) {
let reg = ns.getRegexp('>=0num');
if (value !== '' && !reg.test(value)) {
return '排序数值必须为大于或等于0的整数'
}
},
flo: function (value) {
let reg = ns.getRegexp('>=0float2');
if (value !== '' && !reg.test(value)) {
return '价格必须大于或等于0最多保留两位小数'
}
}
});
});
function backAdvList() {
location.hash = ns.hash("shop/adv/lists", {ap_id:ap_id})
}
function selectedLink() {
if (adv_url_json == "") {
adv_url_json = {};
}
ns.select_link(adv_url_json, function (data) {
for (var o in data) {
if (data[o] == null) delete data[o];
}
$("input[name='adv_url']").val(JSON.stringify(data));
$(".adv-url-show").text(data.title);
});
}
</script>

View File

@@ -0,0 +1,117 @@
<style>
.layui-colorpicker-main-input div.layui-inline{margin-right: 0;}
.layui-colorpicker-main-input input.layui-input{width: 130px;height: 34px;}
</style>
<div class="layui-form form-wrap">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>广告位置名:</label>
<div class="layui-input-block">
<input name="ap_name" type="text" value="{$info.ap_name}" lay-verify="required" class="layui-input len-long {if condition="$info.is_system == 1"}layui-btn-disabled{/if}" {if condition="$info.is_system == 1"}disabled{/if}>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>广告关键字:</label>
<div class="layui-input-block">
<input name="keyword" value='{$info.keyword}'type="text" lay-verify="required" class="layui-input len-long {if condition="$info.is_system == 1"}layui-btn-disabled{/if}" {if condition="$info.is_system == 1"}disabled{/if}>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">广告位简介:</label>
<div class="layui-input-block len-long">
<textarea name="ap_intro" maxlength="150" class="layui-textarea {if condition="$info.is_system == 1"}layui-btn-disabled{/if}" {if condition="$info.is_system == 1"}disabled{/if}>{$info.ap_intro}</textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">是否启用:</label>
<div class="layui-input-block">
<input type="checkbox" name="state" value="1" lay-skin="switch" lay-filter="state" {if condition="$info.state == 1"} checked {/if} />
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<button class="layui-btn layui-btn-primary" onclick="backAdvIndex()">返回</button>
</div>
<input type="hidden" name="ap_id" value="{$info.ap_id}" />
<input type="hidden" name="ap_background_color" id="ap_background_color" value="{$info.ap_background_color}" />
</div>
<script>
var colorN = $("#ap_background_color").val();
layui.use(['form', 'colorpicker'], function () {
var form = layui.form,
colorpicker = layui.colorpicker,
repeat_flag = false; //防重复标识
form.render();
/**
* 颜色
*/
colorpicker.render({
elem: '#font_color', //绑定元素
color: colorN,
done: function(color) {
$(".tdrag-name").css("color", color);
$("#ap_background_color").val(color);
}
});
/**
* 监听提交
*/
form.on('submit(save)', function(data) {
if (repeat_flag) return;
repeat_flag = true;
$.ajax({
url: ns.url("shop/adv/editPosition"),
data: data.field,
dataType: 'JSON',
type: 'POST',
success: function(res) {
repeat_flag = false;
if (res.code == 0) {
layer.confirm('编辑成功', {
title:'操作提示',
btn: ['返回列表', '继续操作'],
yes: function(index, layero) {
location.hash = ns.hash("shop/adv/index")
layer.close(index);
},
btn2: function(index, layero) {
layer.close(index);
}
});
} else {
layer.msg(res.message);
}
}
});
});
/**
* 表单验证
*/
form.verify({
int: function (value) {
if (value == '') {
return;
}
if (value < 0 || value%1 != 0) {
return '请输入0或正整数'
}
}
});
});
function backAdvIndex() {
location.hash = ns.hash("shop/adv/index")
}
</script>

240
app/shop/view/adv/index.html Executable file
View File

@@ -0,0 +1,240 @@
<style>
.layui-form{margin-left: initial !important;}
.single-filter-box{padding-top: 0;}
</style>
<div class="single-filter-box">
<div></div>
<div class="layui-form">
<div class="layui-input-inline">
<input type="text" name="search_text" placeholder="请输入广告位名称" class="layui-input">
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
<i class="layui-icon">&#xe615;</i>
</button>
</div>
</div>
</div>
<!-- 列表 -->
<table id="adv_position" lay-filter="adv_position"></table>
<!-- 广告位宽度 -->
<script type="text/html" id="ap_width">
<input name="ap_width" type="number" onchange="editPosition({{d.ap_id}}, 'ap_width', this)" value="{{d.ap_width}}"
class="layui-input sort-len">
</script>
<!-- 广告位高度 -->
<script type="text/html" id="ap_height">
<input name="ap_height" type="number" onchange="editPosition({{d.ap_id}}, 'ap_height', this)" value="{{d.ap_height}}" class="layui-input sort-len">
</script>
<!-- 操作 -->
<script type="text/html" id="action">
<div class="table-btn">
<a class="layui-btn" lay-event="manager">管理广告</a>
<a class="layui-btn" lay-event="edit">编辑</a>
</div>
</script>
<!-- 批量删除 -->
<script type="text/html" id="toolbarOperation">
<button class="layui-btn layui-btn-primary" lay-event="del">批量删除</button>
</script>
<!-- 批量删除 -->
<script type="text/html" id="batchOperation">
<button class="layui-btn layui-btn-primary" lay-event="del">批量删除</button>
</script>
<script>
var table, form,
repeat_flag = false; //防重复标识
layui.use('form', function () {
form = layui.form;
form.render();
form.on('switch(state)', function(data){
let state = data.elem.checked ? 1 : 0;
let ap_id = $(data.elem).attr('data-ap-id');
if(repeat_flag) return;
repeat_flag = true;
$.ajax({
url: ns.url("shop/adv/alterAdvPositionState"),
data: {
ap_id : ap_id,
state : state,
},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
}
});
})
table = new Table({
elem: '#adv_position',
url: ns.url("shop/adv/index"),
cols: [
[
{
field: 'ap_name',
title: '广告位名称',
unresize: 'false',
width: '16%',
}, {
field: 'keyword',
title: '广告关键字',
unresize: 'false',
width: '24%',
}, {
title: '是否是系统',
unresize: 'false',
templet: function(data) {
return data.is_system == 0 ? "否" : "是";
},
width: '10%',
},{
title: '是否启用',
unresize: 'false',
templet: function(data) {
return '<input type="checkbox" name="state" value="1" lay-skin="switch" lay-filter="state" data-ap-id="'+ data.ap_id +'" '+ (data.state == 1 ? 'checked' : '') +' />';
},
width: '10%',
}, {
title: '操作',
toolbar: '#action',
unresize: 'false',
align : 'right'
}]
],
});
/**
* 监听工具栏操作
*/
table.tool(function (obj) {
var data = obj.data;
switch (obj.event) {
case 'manager': //管理
location.hash = ns.hash("shop/adv/lists?ap_id=" + data.ap_id);
break;
case 'edit': //编辑
location.hash = ns.hash("shop/adv/editPosition?ap_id=" + data.ap_id);
break;
case 'delete': //删除
deletePosition(data.ap_id);
break;
}
});
/**
* 批量操作
*/
table.toolbar(function (obj) {
if (obj.data.length < 1) {
layer.msg('请选择要操作的数据');
return;
}
switch (obj.event) {
case "del":
var id_array = new Array();
for (i in obj.data) id_array.push(obj.data[i].ap_id);
deletePosition(id_array.toString());
break;
}
});
table.bottomToolbar(function (obj) {
if (obj.data.length < 1) {
layer.msg('请选择要操作的数据');
return;
}
switch (obj.event) {
case "del":
var id_array = new Array();
for (i in obj.data) id_array.push(obj.data[i].ap_id);
deletePosition(id_array.toString());
break;
}
});
/**
* 删除
*/
function deletePosition(ap_ids) {
if (repeat_flag) return false;
repeat_flag = true;
layer.confirm('删除将会影响广告位的使用,确定要删除吗?', function (index) {
layer.close(index);
$.ajax({
url: ns.url("shop/adv/deletePosition"),
data: {'ap_ids': ap_ids},
dataType: 'JSON',
type: 'POST',
success: function (res) {
layer.msg(res.message);
repeat_flag = false;
if (res.code == 0) {
table.reload();
}
}
});
}, function () {
layer.close();
repeat_flag = false;
});
}
/**
* 监听搜索
*/
form.on('submit(search)', function (data) {
table.reload({
page: {
curr: 1
},
where: data.field
});
});
});
// 监听单元格编辑--编辑宽度
function editPosition(id, type, event) {
var value = $(event).val();
let reg = ns.getRegexp('>0num');
if (!reg.test(value)) {
layer.msg("广告位宽高必须为大于0的整数");
return;
}
$.ajax({
type: 'POST',
url: ns.url("shop/adv/editPositionField"),
data: {
'type': type,
'value': value,
'ap_id': id
},
dataType: 'JSON',
success: function (res) {
layer.msg(res.message);
if (res.code == 0) {
table.reload();
}
}
});
}
function add() {
location.hash = ns.hash("shop/adv/addPosition");
}
</script>

292
app/shop/view/adv/lists.html Executable file
View File

@@ -0,0 +1,292 @@
<div>
<button class="layui-btn" onclick="add()">添加广告</button>
<div class="layui-form" style="display:none;">
<div class="layui-input-inline">
<select name="ap_id">
<option value="">所属广告位</option>
{notempty name="adv_position"}
{foreach name="adv_position" item="vo"}
<option value="{$vo.ap_id}" {if $ap_id == $vo.ap_id}selected{/if}>{$vo.ap_name}</option>
{/foreach}
{/notempty}
</select>
</div>
<div class="layui-input-inline len-mid">
<input type="text" name="search_text" placeholder="请输入广告名称" class="layui-input">
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
<i class="layui-icon">&#xe615;</i>
</button>
</div>
</div>
<input type="hidden" name="ap_id" value="{$ap_id}" />
</div>
<!-- 列表 -->
<table id="adv_list" lay-filter="adv_list"></table>
<!-- 广告图片 -->
<script type="text/html" id="adv_image">
<div class="img-box">
<img layer-src src="{{ns.img(d.adv_image)}}" />
</div>
</script>
<!-- 排序 -->
<script type="text/html" id="slide_sort">
<input name="slide_sort" type="number" onchange="editSort({{d.adv_id}},'slide_sort', this)" value="{{d.slide_sort}}" class="layui-input sort-len">
</script>
<!-- 广告链接 -->
<script type="text/html" id="adv_url">
<a href="{{d.adv_url}}">{{d.adv_url}}</a>
</script>
<!-- 操作 -->
<script type="text/html" id="action">
<div class="table-btn">
<a class="layui-btn" lay-event="edit">编辑</a>
<a class="layui-btn" lay-event="delete">删除</a>
</div>
</script>
<!-- 批量删除 -->
<script type="text/html" id="toolbarOperation">
<button class="layui-btn layui-btn-primary" lay-event="del">批量删除</button>
</script>
<!-- 批量删除 -->
<script type="text/html" id="batchOperation">
<button class="layui-btn layui-btn-primary" lay-event="del">批量删除</button>
</script>
<script>
var ap_id = '{$ap_id}';
layui.use('form', function () {
var table,
form = layui.form,
repeat_flag = false; //防重复标识
form.render();
form.on('switch(state)', function(data){
let state = data.elem.checked ? 1 : 0;
let adv_id = $(data.elem).attr('data-adv-id');
if(repeat_flag) return;
repeat_flag = true;
$.ajax({
url: ns.url("shop/adv/alterAdvState"),
data: {
adv_id : adv_id,
state : state,
},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
}
});
})
table = new Table({
elem: '#adv_list',
url: ns.url("shop/adv/lists"),
where: {
'ap_id': '{$ap_id}'
},
cols: [
[{
width: '3%',
type: 'checkbox',
unresize: 'false',
}, {
field: 'adv_title',
title: '广告名称',
unresize: 'false',
width: '15%'
}, {
title: '广告链接',
unresize: 'false',
width: '15%',
templet: function(data) {
var adv_url = data.adv_url;
if(adv_url){
adv_url = JSON.parse(data.adv_url);
return adv_url.title ? adv_url.title : '';
}else{
return '';
}
}
}, {
field: 'ap_name',
title: '所属广告位',
unresize: 'false',
templet:'#ap_posi',
width: '15%'
}, {
title: '广告图片',
unresize: 'false',
templet: '#adv_image',
width: '15%'
}, {
field: 'slide_sort',
title: '排序',
templet: '#slide_sort',
align: 'center',
sort : true,
width: '12%'
},{
title: '是否启用',
unresize: 'false',
templet: function(data) {
return '<input type="checkbox" name="state" value="1" lay-skin="switch" lay-filter="state" data-adv-id="'+ data.adv_id +'" '+ (data.state == 1 ? 'checked' : '') +' />';
},
width: '10%',
}, {
title: '操作',
toolbar: '#action',
unresize: 'false',
align:'right'
}]
],
bottomToolbar: "#batchOperation",
toolbar: "#toolbarOperation"
});
/**
* 监听工具栏操作
*/
table.tool(function(obj) {
var data = obj.data;
switch (obj.event) {
case 'edit': //编辑
location.hash = ns.hash("shop/adv/editadv",{"adv_id":data.adv_id, ap_id:ap_id});
break;
case 'delete': //删除
deleteAdv(data.adv_id);
break;
}
});
/**
* 批量操作
*/
table.bottomToolbar(function(obj) {
if (obj.data.length < 1) {
layer.msg('请选择要操作的数据');
return;
}
switch (obj.event) {
case "del":
var id_array = new Array();
for (i in obj.data) id_array.push(obj.data[i].adv_id);
deleteAdv(id_array.toString());
break;
}
});
table.on("sort",function (obj) {
table.reload({
page: {
curr: 1
},
where: {
order:obj.field,
sort:obj.type
}
});
});
/**
* 批量操作
*/
table.toolbar(function(obj) {
if (obj.data.length < 1) {
layer.msg('请选择要操作的数据');
return;
}
switch (obj.event) {
case "del":
var id_array = new Array();
for (i in obj.data) id_array.push(obj.data[i].adv_id);
deleteAdv(id_array.toString());
break;
}
});
/**
* 删除
*/
function deleteAdv(adv_ids) {
if (repeat_flag) return false;
repeat_flag = true;
layer.confirm('确定要删除该广告吗?', function(index) {
layer.close(index);
$.ajax({
url: ns.url("shop/adv/deleteAdv"),
data: {'adv_ids': adv_ids},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
if (res.code == 0) {
table.reload();
}
}
});
}, function () {
layer.close();
repeat_flag = false;
});
}
/**
* 监听搜索
*/
form.on('submit(search)', function(data){
ap_id = $("select[name='ap_id']").val();
table.reload({
page: {
curr: 1
},
where: data.field
});
});
});
// 监听单元格编辑
function editSort(adv_id, type, event){
var value = $(event).val();
let reg = ns.getRegexp('>=0num');
if (!reg.test(value)) {
layer.msg("排序号必须是大于或等于0的整数");
return;
}
$.ajax({
type: 'POST',
url: ns.url("shop/adv/editAdvField"),
data: {'type': type, 'value': value, 'adv_id': adv_id},
dataType: 'JSON',
success: function(res) {
layer.msg(res.message);
if(res.code==0){
table.reload();
}
}
});
}
function add() {
location.hash = ns.hash("shop/adv/addAdv", {ap_id : ap_id});
}
</script>