2023-10-24 14:54:18 +08:00

852 lines
38 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
use app\models\Store;
/**
* @author Any
* @description KISS
* @date 2021年6月30日
* @version 1.0.0
*
* _____LOG_____
*
*/
use app\assets\UeditorAsset;
use app\components\SiteHelper;
use app\widgets\PickFile;
UeditorAsset::register($this);
$this->title = '活动列表';
$this->params['breadcrumbs'][] = $this->title;
$status = \Yii::$app->request->get('type');
?>
<style type="text/css">
.layui-table-cell {
height: auto;
}
.layui-input-block {
margin-left: 150px;
}
.layui-form-label {
width: 120px;
}
</style>
<div class="layui-fluid">
<div class="layui-card">
<div class="layui-card-header">
<?= $this->title ?>
</div>
<!--<div class="layui-card-header layuiadmin-card-header-auto">
<div class="layui-form-item">
<div class="layui-inline layui-float-right layui-form">
<div class="layui-inline layui-form-item">
<div class="layui-input-inline">
<select class="layui-select" name="type">
<option value="" <?/*=$status === null ? 'selected' : ''*/?>>全部类型</option>
<option value="0" <?/*=$status == '0' && $status != null ? 'selected' : ''*/?>>体验券</option>
<option value="1" <?/*=$status == '1' && $status != null ? 'selected' : ''*/?>>立减券</option>
</select>
</div>
</div>
<div class="layui-inline layui-form-item">
<div class="layui-input-inline">
<input type="text" name="keywords" placeholder="搜索卡券标题" autocomplete="off" class="layui-input" value="<?/*=\Yii::$app->request->get("keywords")*/?>">
</div>
</div>
<div class="layui-inline">
<button class="layui-btn layuiadmin-btn-useradmin" lay-submit lay-filter="dtable-search">
<i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>
</button>
</div>
</div>
</div>
</div>-->
<div class="layui-card-body">
<table id="dtable" lay-filter="dtable"></table>
</div>
</div>
</div>
<!--工具栏模板-->
<script type="text/html" id="toolBarTpl">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-sm" lay-event="create_activity">创建活动</button>
</div>
</script>
<!--行操作列模板-->
<script type="text/html" id="rowBarTpl">
<button class="layui-btn layui-btn-xs" lay-event="showdata">查看参与</button>
<button class="layui-btn layui-btn-xs" lay-event="edit">修改</button>
<button class="layui-btn layui-btn-xs layui-btn-danger" lay-event="delete">删除</button>
</script>
<script type="text/html" id="typeTpl">
{{# if(d.type == '0'){ }}
<span class="layui-badge layui-bg-green">体验券</span>
{{# } else{ }}
<span class="layui-badge layui-bg-blue">立减券</span>
{{# } }}
</script>
<script>
<?php $this->beginBlock('js_script_wrap') ?>
layui.config({
base: '/statics/layuiadmin/' //静态资源所在路径
}).extend({
index: 'lib/index' //主入口模块
}).use(['index', 'user', 'table','form','laydate','upload'], function () {
var $ = layui.$
, form = layui.form
, table = layui.table
, admin = layui.admin
,upload = layui.upload;
var laydate = layui.laydate;
form.render();
//search
form.on('submit(dtable-search)', function (obj) {
var field = obj.field;
reload_table_data(field);
});
//重新加载表格数据
function reload_table_data(conf){
table.reload('dtable', {
url:'<?=\Yii::$app->urlManager->createUrl(['admin/activity/index'])?>'
,page: true
,where: conf
});
};
//执行渲染
table.render({
//指定原始表格元素选择器推荐id选择器
elem: '#dtable'
//容器高度
//,height: 315
//容器宽度
//,width: 720
//设置表头
,cols: [[
{checkbox: true}
, {field: 'id', title: 'ID', width: 80}
, {field: 'name', title: '活动名称'}
, {field: 'count_user', title: '参与人数'}
, {field: 'count_user_price', title: '已领取(人数)'}
, {field: 'count_user_price_all', title: '已领取(次数)'}
, {field: 'start_date', title: '开始时间'}
, {field: 'end_date', title: '结束时间'}
, {field: 'created_at_cn', title: '创建时间', width: 150}
, {title: '操作',fixed: 'right', toolbar: '#rowBarTpl', width:220}
]
]
, url:'<?=\Yii::$app->urlManager->createUrl(['admin/activity/index'])?>'
, page:true
//指向自定义工具栏模板选择器
, toolbar:'#toolBarTpl'
//头部工具栏右侧的图标按钮
, defaultToolbar:['filter', 'print', 'exports']
, limit: 20
, limits:[10,20,30,40,50,60,70,80,90,100]
, title:'<?=$this->title?>'
, data:[]
, done: function(res, curr, count){
setTimeout(function(){
$(".layui-table-main tr").each(function (index ,val) {
$(".layui-table-fixed").each(function () {
$($(this).find(".layui-table-body tbody tr")[index]).height($(val).height());
});
});
$(".layui-table-header tr").each(function (index ,val) {
$(".layui-table-fixed").each(function () {
$($(this).find(".layui-table-header thead tr")[index]).height($(val).height());
});
});
},500);
}
});
//监听工具条
table.on('tool(dtable)', function(obj){
var row_data = obj.data;
var lay_event = obj.event;
var id = row_data.id;
var confirm_url = null;
var confirm_tip = null;
var ids = [];
ids.push(id);
if(lay_event == "delete"){
confirm_url = "<?=\Yii::$app->urlManager->createUrl(['admin/activity/delete'])?>";
confirm_tip = "确定删除吗";
}
if(lay_event == 'edit'){
var data = (row_data.res)
return activity(data)
}
if(lay_event == 'showdata'){
return activityShow(id,row_data.name)
}
if(confirm_url != null){
layer.confirm(confirm_tip, {
btn: ['确定','取消']
}, function(){
$.ajax(confirm_url,{
type:"POST",
dataType:"json",
data:{
id:id,
_csrf:_csrf
},
success:function(res){
if(res.code == 0){
layer.msg(res.msg, {
offset: '15px'
,icon: 1
,time: 1000
}, function(){
location.reload();
});
} else {
layer.msg(res.msg, {
offset: '15px'
,icon: 2
,time: 1000
}, function(){
});
}
},
error:function(xhr,type,err){
layer.msg(xhr.responseText, {
offset: '15px'
,icon: 2
,time: 1000
}, function(){
});
}
})
}, function(){
});
}
});
// 查看参与
function activityShow(id,title){
layer.open({
type: 1,
title: title+"活动参与详情",
closeBtn: 1,
area:['70%','70%'],
content: '<table class="layui-hide" id="prize_table"></table>',
success:function(){
table.render({
elem: '#prize_table'
,url: '<?=\Yii::$app->urlManager->createUrl(['admin/activity/join-user'])?>?id='+id
,cellMinWidth: 80 //全局定义常规单元格的最小宽度layui 2.2.1 新增
,cols: [[
{field: 'id', title: 'ID', width: 80}
, {field: 'nickname', title: '用户名称'}
, {field: 'mobile_phone', title: '用户手机号'}
, {field: 'all_rate', title: '目标进度'}
, {field: 'rate', title: '当前进度'}
, {field: 'count_user_price_all', title: '领奖次数'}
]],page:true,
done:function (){
$('.add_btn').click(function(){
console.log(data)
if(!data.data){
data.data = {}
}
if(!data.data.prize_arr){
data.data.prize_arr = []
}
var json_de = JSON.parse($(this).attr('data'))
layer.prompt({title:"填写数量"},function(val1, index){
var key = null
$.each(data.data.prize_arr,function(key1,val){
if(!val || !val.id){
return true
}
if(val.id == json_de.id){
key = key1
}
})
if(key == null){
// 追加
data.data.prize_arr.push({
id:json_de.id,
title:json_de.title,
num:val1
})
}else{
// 更新
data.data.prize_arr[key] = ({
id:json_de.id,
title:json_de.title,
num:val1
})
}
updata()
console.log(data)
layer.close(index);
layer.close(yhq_layer);
});
})
}
});
}
});
}
// 创建或编辑活动
function activity(data={}){
var btn_str = "添加";
if(data.data){
btn_str = "修改";
}
var html = `
<div class="layui-row layui-col-space15">
<div class="layui-col-md6">
<div class="layui-card">
<div class="layui-card-header">参数</div>
<div class="layui-card-body">
<div class="layui-form-item">
<label class="layui-form-label">活动名称</label>
<div class="layui-input-block">
<input type="text" name="title" lay-verify="title" id='name' autocomplete="off" placeholder="请输入活动名称" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">活动开始结束时间</label>
<div class="layui-input-block">
<input type="text" name="title" lay-verify="title" id='start_time' autocomplete="off" placeholder="" class="layui-input" readonly>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">海报按钮名称</label>
<div class="layui-input-block">
<input type="text" name="title" lay-verify="title" id='poster_btn_name' autocomplete="off" placeholder="" class="layui-input">
<p style='font-size:8px;color:#1E88E5'>‘首页弹窗展示按钮’不填写则不展示按钮</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">海报按钮跳转地址</label>
<div class="layui-input-block">
<input type="text" name="title" lay-verify="title" id='poster_btn_url' value="/subpages/activityDetail" autocomplete="off" placeholder="" class="layui-input">
<p style='font-size:8px;color:#1E88E5'>默认为活动详情页,如有需要跳转其他地址,可与开发沟通</p>
</div>
</div>
<!--<div class="layui-form-item">
<label class="layui-form-label">内容按钮名称</label>
<div class="layui-input-block">
<input type="text" name="title" lay-verify="title" id='content_btn_name' autocomplete="off" placeholder="" class="layui-input">
<p style='font-size:8px;color:#1E88E5'>‘活动详情页展示按钮’不填写则不展示按钮</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">内容按钮跳转地址</label>
<div class="layui-input-block">
<input type="text" name="title" lay-verify="title" id='content_btn_url' autocomplete="off" placeholder="" class="layui-input">
<p style='font-size:8px;color:#1E88E5'>如有需要跳转地址,可与开发沟通</p>
</div>
</div>-->
<div class="layui-form-item">
<label class="layui-form-label">内容</label>
<div class="layui-input-block">
<textarea id="editor" style="width: 100%"
name="content" rows="30" ></textarea>
</div>
<div class="layui-form-mid layui-word-aux"></div>
</div>
</div>
</div>
</div>
<div class="layui-col-md6">
<div class="layui-card">
<div class="layui-card-body">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-header">首页海报弹窗</div>
<div class="layui-card-body">
<div class="layui-upload">
<p style='font-size:8px;color:#1E88E5'>(如果未上传图片,则不展示首页弹窗)</p>
<button type="button" class="layui-btn" id="test1">上传图片</button>
<button type="button" class="layui-btn" id="delete_img">删除图片</button>
<div class="layui-upload-list">
<img class="layui-upload-img" style='max-height: 300px' id="demo1">
</div>
</div>
</div>
</div>
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-header">
其他设置
</div>
<div class="layui-card-body">
<div class="layui-form-item">
<label class="layui-form-label">支付订单满足数量</label>
<div class="layui-input-block">
<input type="text" name="title" lay-verify="title" autocomplete="off" id='order_pay_num' placeholder="订单大于几单可领取奖励" class="layui-input" >
<p style='font-size:8px;color:#1E88E5'>满足领取条件的总进度如需要购买5单则填5</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">每个支付订单金额</label>
<div class="layui-input-block">
<input type="text" name="title" lay-verify="title" autocomplete="off" id='order_min_money' placeholder="订单金额大于多少" class="layui-input" >
<p style='font-size:8px;color:#1E88E5'>订单支付金额大于{}算一个进度如填写10则需要满足10元真实支付才算1单</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">每个用户领取次数</label>
<div class="layui-input-block">
<input type="text" name="title" lay-verify="title" autocomplete="off" id='max_number' placeholder="每个用户最多可领取次数" class="layui-input" >
<p style='font-size:8px;color:#1E88E5'>用户最大可领取数量</p>
</div>
</div>
</div>
</div>
</div>
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-header">
<button type="button" class="layui-btn" id="add_prize">添加奖品</button>
</div>
<div class="layui-card-body">
<table class="layui-table">
<thead>
<tr>
<th>名称</th>
<th>数量</th>
<th>操作</th>
</tr>
</thead>
<tbody id='prize_html'>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
`
layer.open({
type: 1,
title: "活动",
closeBtn: 1,
area:['80%','80%'],
content: html,
btn:[btn_str,'取消'],
yes:function(){
data.name = $('#name').val();
data.poster_btn_name = $('#poster_btn_name').val();
data.poster_btn_url = $('#poster_btn_url').val();
data.content_btn_name = $('#content_btn_name').val();
data.content_btn_url = $('#content_btn_url').val();
var start_time = $('#start_time').val();
if(start_time == ''){
return layer.msg('请选择活动时间')
}
if(data.name == ''){
return layer.msg('请填写活动名称')
}
data.start_time = start_time.split(' - ')[0];
data.end_time = start_time.split(' - ')[1];
if(!data.data){
data.data = {}
}
data.data.user_max = $('#max_number').val();
var pay_num = $('#order_pay_num').val()
data.data.pz = {
type:1,
data: pay_num,
order_min_money:$('#order_min_money').val()?$('#order_min_money').val():0
};
if(data.data.pz.data == ''){
return layer.msg('请填写下单数量')
}
if(data.data.user_max == ''){
return layer.msg('请填写每个用户领取次数')
}
data.content = UE.getEditor('editor').getContent();
data.data = JSON.stringify(data.data)
if(!data.poster_img_arr){
data.poster_img_arr = [];
}
data.poster_img_arr = JSON.stringify(data.poster_img_arr)
var url = '<?= \Yii::$app->urlManager->createUrl(["admin/activity/edit"]) ?>';
data._csrf = _csrf;
$.ajax(url, {
type: "POST",
dataType: "json",
data: data,
timeout: 10000,
success: function (res) {
if (res.code == 0) {
layer.msg(btn_str+"成功", {
offset: '15px'
, icon: 1
, time: 1000
}, function () {
location.reload();
});
} else {
layer.msg(res.msg, {
offset: '15px'
, icon: 2
, time: 1000
}, function () {
});
}
},
error: function (xhr, type, err) {
},
complete: function () {
submitLock = false;
}
})
},
success:function(){
console.log(data)
if(data.data){
// 添加默认数据
$.each(data,function(key,val){
$('#'+key).val(val);
});
$('#start_time').val(data.start_date+" - "+data.end_date);
$('#demo1').attr('src',data.poster_img_arr);
$('#order_pay_num').val(data.data.pz.data);
$('#max_number').val(data.data.user_max);
$('#order_min_money').val(data.data.pz.order_min_money);
updata()
if(data.content !=''){
UE.getEditor('editor').ready(function() {
UE.getEditor('editor').setContent(data.content);
});
}
}
laydate.render({
elem: '#start_time'
,type: 'datetime'
,range: true
});
$('#delete_img').click(function(){
data.poster_img_arr = [];
$('#demo1').attr('src','');
})
function updata(){ // 更新数据
if(!data.data){
data.data = {}
}
if(!data.data.prize_arr){
data.data.prize_arr = []
}
var html = ''
$.each(data.data.prize_arr,function(key,val){
console.log(val)
if(!val || !val.id){
return true
}
html += `<tr>
<td>`+val.title+`</td>
<td>`+val.num+`</td>
<td><button class='layui-btn layui-btn-xs layui-btn-danger delete_table' data='`+val.id+`'>删除</button></td>
</tr>`
})
$('#prize_html').html(html);
$('.delete_table').click(function(){
var id = $(this).attr('data')
var key2 = null
$.each(data.data.prize_arr,function(key1,v){
if(!v || !v.id){
return true
}
if(v.id == id){
key2 = key1
}
})
if(key2 !== null){
delete data.data.prize_arr[key2]
var t = []
$.each(data.data.prize_arr,function(key1,v){
if(!v || !v.id){
return true
}
t.push(v)
})
data.data.prize_arr = t
}
updata()
})
}
$('#add_prize').click(function(){
var yhq_layer = layer.open({
type: 1,
title: "选择优惠券",
closeBtn: 1,
area:['70%','70%'],
content: '<table class="layui-hide" id="prize_table"></table>',
success:function(){
table.render({
elem: '#prize_table'
,url: '<?=\Yii::$app->urlManager->createUrl(['admin/coupon/index'])?>'
,cellMinWidth: 80 //全局定义常规单元格的最小宽度layui 2.2.1 新增
,cols: [[
{field: 'id', title: 'ID', width: 80}
, {field: 'title', title: '卡券名称'}
, {field: 'price', title: '金额'}
, {field: 'num', title: '发放数量'}
, {field: 'get_num', title: '已领取数量'}
, {field: 'user_get_num', title: '用户可领取数量'}
, {field: 'get_business', title: '领取日期'}
, {field: 'business', title: '使用日期'}
, {field: 'store_name_list', title: '可使用场地'}
, {field: 'type', title: '类型', templet:'#typeTpl', width: 80}
, {title: '操作', width: 150,align:'center',templet: function(d){
return "<button class='layui-btn layui-btn-xs add_btn' data='"+JSON.stringify(d)+"'>添加</button>";
}}
]],page:true,
done:function (){
$('.add_btn').click(function(){
console.log(data)
if(!data.data){
data.data = {}
}
if(!data.data.prize_arr){
data.data.prize_arr = []
}
var json_de = JSON.parse($(this).attr('data'))
layer.prompt({title:"填写数量"},function(val1, index){
var key = null
$.each(data.data.prize_arr,function(key1,val){
if(!val || !val.id){
return true
}
if(val.id == json_de.id){
key = key1
}
})
if(key == null){
// 追加
data.data.prize_arr.push({
id:json_de.id,
title:json_de.title,
num:val1
})
}else{
// 更新
data.data.prize_arr[key] = ({
id:json_de.id,
title:json_de.title,
num:val1
})
}
updata()
console.log(data)
layer.close(index);
layer.close(yhq_layer);
});
})
}
});
}
});
})
//常规使用 - 普通图片上传
var uploadInst = upload.render({
elem: '#test1'
,url: "<?= \Yii::$app->urlManager->createUrl(['file/upload']) ?>?action=uploadimage" //此处用的是第三方的 http 请求演示,实际使用时改成您自己的上传接口即可。
,before: function(obj){
//预读本地文件示例不支持ie8
obj.preview(function(index, file, result){
$('#demo1').attr('src', result); //图片链接base64
});
layer.msg('上传中', {icon: 16, time: 0});
}
,done: function(res){
//如果上传失败
layer.closeAll('dialog')
if(!res.url){
return layer.msg('上传失败')
}
data.poster_img_arr = [res.url];
//上传成功的一些操作
//……
$('#demoText').html(''); //置空上传失败的状态
}
,error: function(){
//演示失败状态,并实现重传
var demoText = $('#demoText');
demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
demoText.find('.demo-reload').on('click', function(){
uploadInst.upload();
});
}
});
var ue = UE.getEditor('editor', {
serverUrl: "<?= \Yii::$app->urlManager->createUrl(['file/upload']) ?>",
toolbars: [
[
'undo', //撤销
'redo', //重做
'bold', //加粗
'indent', //首行缩进
'italic', //斜体
'underline', //下划线
'strikethrough', //删除线
'subscript', //下标
'fontborder', //字符边框
'superscript', //上标
'formatmatch', //格式刷
'source', //源代码
'blockquote', //引用
'pasteplain', //纯文本粘贴模式
'selectall', //全选
'preview', //预览
'horizontal', //分隔线
'removeformat', //清除格式
'time', //时间
'date', //日期
'unlink', //取消链接
'cleardoc', //清空文档
'insertcode', //代码语言
'fontfamily', //字体
'fontsize', //字号
'paragraph', //段落格式
'simpleupload', //单图上传
'insertimage', //多图上传
'link', //超链接
'emotion', //表情
'spechars', //特殊字符
'justifyleft', //居左对齐
'justifyright', //居右对齐
'justifycenter', //居中对齐
'justifyjustify', //两端对齐
'forecolor', //字体颜色
'insertorderedlist', //有序列表
'insertunorderedlist', //无序列表
'fullscreen', //全屏
'rowspacingtop', //段前距
'rowspacingbottom', //段后距
'autotypeset', //自动排版
'drafts', // 从草稿箱加载
]
]
});
},
end:function(){
window.location.reload()
}
});
}
//监听工具栏
table.on('toolbar(dtable)', function(obj){
var lay_event = obj.event;
var confirm_url = null;
var confirm_tip = null;
if(lay_event == 'create_activity'){
return activity()
confirm_url = "<?=\Yii::$app->urlManager->createUrl(['admin/coupon/delete'])?>";
confirm_tip = "确定将选中卡券删除吗";
}
if(confirm_url != null){
layer.confirm(confirm_tip, {
btn: ['确定','取消']
}, function(){
$.ajax(confirm_url,{
type:"POST",
dataType:"json",
data:{
ids:ids,
_csrf:_csrf
},
success:function(res){
if(res.code == 0){
layer.msg(res.msg, {
offset: '15px'
,icon: 1
,time: 1000
}, function(){
location.reload();
});
} else {
layer.msg(res.msg, {
offset: '15px'
,icon: 2
,time: 1000
}, function(){
});
}
},
error:function(xhr,type,err){
layer.msg(xhr.responseText, {
offset: '15px'
,icon: 2
,time: 1000
}, function(){
});
}
})
}, function(){
});
}
});
});
function previewImg(obj) {
var img = new Image();
img.src = obj.src;
var imgw = img.width;
var imgh = img.height;
var img_th = imgh / imgw * 500;
var imgHtml = "<img src='" + obj.src + "' width='500px' height='"+img_th+"px'/>";
//弹出层
layer.open({
type: 1,
shade: 0.8,
offset: 'auto',
area: [500 + 'px',(img_th+50)+'px'],
shadeClose:true,
scrollbar: false,
title: "图片预览", //不显示标题
content: imgHtml, //捕获的元素注意最好该指定的元素要存放在body最外层否则可能被其它的相对元素所影响
cancel: function () {
//layer.msg('捕获就是从页面已经存在的元素上包裹layer的结构', { time: 5000, icon: 6 });
}
});
}
<?php $this->endBlock(); ?>
</script>
<?php $this->registerJs($this->blocks['js_script_wrap'], \yii\web\View::POS_END); ?>