初始上传

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

View File

@@ -0,0 +1,209 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace addon\groupbuy\shop\controller;
use app\model\goods\Goods as GoodsModel;
use app\shop\controller\BaseShop;
use addon\groupbuy\model\Groupbuy as GroupbuyModel;
/**
* 团购控制器
*/
class Groupbuy extends BaseShop
{
/*
* 团购活动列表
*/
public function lists()
{
$model = new GroupbuyModel();
//获取续签信息
if (request()->isJson()) {
$condition = [
[ 'pg.site_id', '=', $this->site_id ],
[ 'g.goods_state', '=', 1 ],
[ 'g.is_delete', '=', 0 ]
];
$goods_name = input('goods_name', '');
$status = input('status', '');//团购状态
if ($status) {
$condition[] = [ 'pg.status', '=', $status ];
}
if (!empty($goods_name)) {
$condition[] = [ 'g.goods_name', 'like', '%' . $goods_name . '%' ];
}
$start_time = input('start_time', '');
$end_time = input('end_time', '');
if ($start_time && !$end_time) {
$condition[] = [ 'pg.end_time', '>=', date_to_time($start_time) ];
} elseif (!$start_time && $end_time) {
$condition[] = [ 'pg.start_time', '<=', date_to_time($end_time) ];
} elseif ($start_time && $end_time) {
$start_timestamp = date_to_time($start_time);
$end_timestamp = date_to_time($end_time);
$sql = "pg.start_time between {$start_timestamp} and {$end_timestamp}";
$sql .= " or pg.end_time between {$start_timestamp} and {$end_timestamp}";
$sql .= " or (pg.start_time <= {$start_timestamp} and pg.end_time >= {$end_timestamp})";
$condition[] = [ '', 'exp', \think\facade\Db::raw($sql) ];
}
//排序
$order = input('order', 'create_time');
$sort = input('sort', 'desc');
if ($order == 'create_time') {
$order_by = 'pg.' . $order . ' ' . $sort;
} else {
$order_by = 'pg.' . $order . ' ' . $sort . ',pg.create_time desc';
}
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$list = $model->getGroupbuyPageList($condition, $page, $page_size, $order_by);
return $list;
} else {
return $this->fetch('groupbuy/lists');
}
}
/**
* 添加活动
*/
public function add()
{
if (request()->isJson()) {
//获取商品信息
$groupbuy_data = [
'site_id' => $this->site_id,
'start_time' => strtotime(input('start_time', '')),
'end_time' => strtotime(input('end_time', '')),
'rule' => input('rule', '')
];
$goods_list = input('goods_list', '');
$goods_ids = input('goods_ids', '');
$groupbuy_model = new GroupbuyModel();
return $groupbuy_model->addGroupbuy($groupbuy_data, $goods_list, $goods_ids);
} else {
return $this->fetch('groupbuy/add');
}
}
/**
* 编辑活动
*/
public function edit()
{
$groupbuy_id = input('groupbuy_id', '');
$groupbuy_model = new GroupbuyModel();
if (request()->isJson()) {
//获取商品信息
$goods_id = input('goods_id', '');
$goods_model = new GoodsModel();
$goods = $goods_model->getGoodsInfo([ [ 'goods_id', '=', $goods_id ] ], 'goods_name,goods_image,price');
$goods_info = $goods[ 'data' ];
$groupbuy_data = [
'goods_id' => $goods_id,
'goods_name' => $goods_info[ 'goods_name' ],
'goods_image' => $goods_info[ 'goods_image' ],
'goods_price' => $goods_info[ 'price' ],
'sku_id' => input('sku_id', ''),
'groupbuy_price' => input('groupbuy_price', ''),
'buy_num' => input('buy_num', ''),
'start_time' => strtotime(input('start_time', '')),
'end_time' => strtotime(input('end_time', '')),
'rule' => input('rule', '')
];
return $groupbuy_model->editGroupbuy($groupbuy_id, $this->site_id, $groupbuy_data);
} else {
//获取团购信息
$condition = [
[ 'pg.groupbuy_id', '=', $groupbuy_id ],
[ 'pg.site_id', '=', $this->site_id ],
[ 'g.goods_state', '=', 1 ],
[ 'g.is_delete', '=', 0 ]
];
$groupbuy_info = $groupbuy_model->getGroupbuyInfo($condition)[ 'data' ];
if (empty($groupbuy_info)) $this->error('未获取到活动数据', href_url('groupbuy://shop/groupbuy/lists'));
$this->assign('groupbuy_info', $groupbuy_info);
return $this->fetch('groupbuy/edit');
}
}
/*
* 删除团购活动
*/
public function delete()
{
$groupbuy_id = input('groupbuy_id', '');
$groupbuy_model = new GroupbuyModel();
return $groupbuy_model->deleteGroupbuy($groupbuy_id, $this->site_id);
}
/*
* 结束团购活动
*/
public function finish()
{
$groupbuy_id = input('groupbuy_id', '');
$groupbuy_model = new GroupbuyModel();
return $groupbuy_model->finishGroupbuy($groupbuy_id, $this->site_id);
}
/*
* 删除团购活动(批量)
*/
public function deleteAll()
{
if (request()->isJson()) {
$groupbuy_id = input('groupbuy_id', '');
$groupbuy_model = new GroupbuyModel();
foreach ($groupbuy_id as $k => $v){
$res = $groupbuy_model->deleteGroupbuy($v, $this->site_id);
}
return $res;
}
}
/*
* 结束团购活动(批量)
*/
public function finishAll()
{
if (request()->isJson()) {
$groupbuy_id = input('groupbuy_id', '');
$groupbuy_model = new GroupbuyModel();
foreach ($groupbuy_id as $k => $v){
$res = $groupbuy_model->finishGroupbuy($v, $this->site_id);
}
return $res;
}
}
/**
* 团购推广
*/
public function groupbuyUrl()
{
$groupbuy_id = input('groupbuy_id', '');
$app_type = input('app_type', 'all');
$groupbuy_model = new GroupbuyModel();
$res = $groupbuy_model->urlQrcode('/pages_promotion/groupbuy/detail', [ 'id' => $groupbuy_id ], 'groupbuy', $app_type, $this->site_id);
return $res;
}
}

View File

@@ -0,0 +1,430 @@
<style>
.layui-form-item .layui-input-inline.end-time{float: none;}
.layui-table-body{max-height: 480px !important;}
.goods-title{display: flex;align-items: center;}
.goods-title .goods-img{display: flex;align-items: center;justify-content: center;width: 55px;height: 55px;margin-right: 5px;}
.goods-title .goods-img img{max-height: 100%;max-width: 100%;}
.goods-title .goods-name{flex: 1;line-height: 1.6;}
.form-wrap {position: relative;}
.goods_num {padding-left: 20px;}
</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-inline">
<div class="layui-input-inline">
<input type="text" id="start_time" name="start_time" lay-verify="required" class="layui-input len-mid" autocomplete="off" readonly>
<i class=" iconrili iconfont calendar"></i>
</div>
<span class="layui-form-mid">-</span>
<div class="layui-input-inline end-time">
<input type="text" id="end_time" name="end_time" lay-verify="required|time" class="layui-input len-mid" autocomplete="off" readonly>
<i class=" iconrili iconfont calendar"></i>
</div>
</div>
</div>
<div class="layui-form-item goods_list">
<label class="layui-form-label">活动商品:</label>
<div class="layui-input-block">
<table id="selected_goods_list" lay-filter="selected_goods_list"></table>
<button class="layui-btn" onclick="selectGoods()">选择商品</button>
<span class="goods_num">已选商品(<span id="goods_num" class="text-color">0</span></span>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">活动规则说明:</label>
<div class="layui-input-inline">
<textarea name="rule" class="layui-textarea len-long" maxlength="300"></textarea>
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<button class="layui-btn layui-btn-primary" onclick="backGroupbuyList()">返回</button>
</div>
<input type="hidden" name="goods_ids" value="" />
</div>
<script type="text/html" id="toolbarOperation">
<button class="layui-btn layui-btn-primary" lay-event="group-price">团购价</button>
<button class="layui-btn layui-btn-primary" lay-event="purchase-num">最低购买数量</button>
</script>
<script>
var goodsId = [], selectedGoodsId = '', goods_list = [];
layui.use(['form', 'laydate','carousel'], function() {
var form = layui.form,
laydate = layui.laydate,
carousel = layui.carousel,
repeat_flag = false,
currentDate = new Date(),
minDate = "";
currentDate.setDate(currentDate.getDate() + 30);
carousel.render({
elem: '#carousel',
width: '100%',
arrow: 'always',
interval: 3500
});
form.render();
renderTable(goods_list); // 初始化表格
//开始时间
laydate.render({
elem: '#start_time', //指定元素
type: 'datetime',
value: new Date(),
done: function(value) {
minDate = value;
reRender();
}
});
//结束时间
laydate.render({
elem: '#end_time', //指定元素
type: 'datetime',
value: new Date(currentDate)
});
/**
* 重新渲染结束时间
* */
function reRender() {
$("#end_time").remove();
$(".end-time").html('<input type="text" id="end_time" name="end_time" placeholder="请输入结束时间" lay-verify="required|time" class="layui-input len-mid" autocomplete="off" readonly> ');
laydate.render({
elem: '#end_time',
type: 'datetime',
min: minDate
});
}
/**
* 表单验证
*/
form.verify({
time: function(value) {
var now_time = (new Date()).getTime();
var start_time = (new Date($("#start_time").val())).getTime();
var end_time = (new Date(value)).getTime();
if (now_time > end_time) {
return '结束时间不能小于当前时间!'
}
if (start_time > end_time) {
return '结束时间不能小于开始时间!';
}
},
flnum: function(value) {
var arrMen = value.split(".");
var val = 0;
if (arrMen.length == 2) {
val = arrMen[1];
}
if (val.length > 2) {
return '保留小数点后两位!'
}
if (Number(value) < 0){
return '价格不能小于0';
}
},
buy_num: function(value,item) {
var stock = $(item).parents("tr").find(".stock").text();
if (Number(value) < 2) {
return '最低购买数量不能小于2'
}
if (Number(value) > stock) {
return '购买数量不能大于库存数!'
}
},
groupbuy_price: function(value, item) {
var price = $(item).parents("tr").find(".goods-price").text();
if (parseFloat(value) > parseFloat(price)) {
return '团购价格不能大于商品价格';
}
if (value.trim() == "") {
return '团购价格不能为空';
}
if (parseFloat(value) <= 0) {
return '团购价格必须大于0';
}
var arrMen = value.split(".");
var val = 0;
if (arrMen.length == 2) {
val = arrMen[1];
}
if (val.length > 2) {
return '团购价格最多保留两位小数';
}
},
});
/**
* 表单提交
*/
form.on('submit(save)', function(data){
if (!goodsId.length) {
layer.msg("请选择活动商品!", {icon: 5, anim: 6});
return;
}
data.field.goods_ids = goodsId;
var goodsListArr = [];
goods_list.forEach(function(item,index) {
var goods_detail = {};
goods_detail.sku_id = item.sku_id;
goods_detail.goods_id = item.goods_id;
goods_detail.groupbuy_price = item.groupbuy_price || 0;
goods_detail.buy_num = item.buy_num || 0;
goodsListArr.push(goods_detail);
});
data.field.goods_list = goodsListArr;
if(repeat_flag) return;
repeat_flag = true;
$.ajax({
type: 'POST',
dataType: 'JSON',
url: ns.url("groupbuy://shop/groupbuy/add"),
data: data.field,
async: false,
success: function(res){
repeat_flag = false;
if (res.code == 0) {
layer.confirm('添加成功', {
title:'操作提示',
btn: ['返回列表', '继续添加'],
closeBtn: 0,
yes: function(index, layero) {
location.hash = ns.hash("groupbuy://shop/groupbuy/lists");
layer.close(index);
},
btn2: function(index, layero) {
listenerHash(); // 刷新页面
layer.close(index);
}
});
}else{
layer.msg(res.message);
}
}
})
});
});
// 表格渲染
function renderTable(goods_list) {
//展示已知数据
table = new Table({
elem: '#selected_goods_list',
page: false,
limit: Number.MAX_VALUE,
cols: [
[{
width: "3%",
type: 'checkbox',
unresize: 'false'
},{
title: '商品名称',
width: '26%',
unresize: 'false',
templet: function(data) {
var html = '';
html += `
<div class="goods-title">
<div class="goods-img">
<img layer-src src="${data.goods_image ? ns.img(data.goods_image.split(",")[0],'small') : ''}" alt="">
</div>
<p class="multi-line-hiding goods-name" data-goods_id="${data.goods_id}" title="${data.goods_name}">${data.goods_name}</p>
</div>
`;
return html;
}
}, {
field: 'price',
title: '商品价格',
unresize: 'false',
align: 'right',
width: '15%',
templet: function(data) {
return '<p class="line-hiding" title="'+ data.price +'">¥<span class="goods-price">' + data.price +'</span></p>';
}
}, {
field: 'goods_stock',
title: '库存',
unresize: 'false',
width: '10%',
templet: function(data) {
return '<p class="stock">' + data.goods_stock +'</p>';
}
}, {
title: '团购价(元)',
unresize: 'false',
width: '13%',
templet: '#groupbuy_price'
}, {
title: '最低购买数量',
unresize: 'false',
width: '13%',
templet: '#buy_num'
}, {
title: '操作',
toolbar: '#operation',
unresize: 'false',
align:'right'
}]
],
data: goods_list,
toolbar: '#toolbarOperation'
});
/**
* 批量操作
*/
table.toolbar(function(obj) {
if (obj.data.length < 1) {
layer.msg('请选择要操作的数据');
return;
}
switch (obj.event) {
case "group-price":
editInput(0,obj);
break;
case "purchase-num":
editInput(1,obj);
break;
}
});
}
function editInput(textIndex=0,data) {
var text = [{
name: '团购价',
value: 'groupbuy_price'
},{
name: '最低购买数量',
value: 'buy_num'
}];
layer.open({
type: 1,
title:"修改"+text[textIndex].name,
area:['600px'],
btn:["保存","返回"],
content: `
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>${text[textIndex].name}</label>
<div class="layui-input-block">
<input type="text" name="bargain_edit_input" lay-verify="required" autocomplete="off" class="layui-input len-mid" placeholder="请输入${text[textIndex].name}">
</div>
</div>
`,
yes: function(index, layero){
var val = $("input[name='bargain_edit_input']").val();
if (!val){
layer.msg("请输入" + text[textIndex].name);
return false;
}
data.data.forEach(function (item,index) {
goods_list.forEach(function (skuItem,skuIndex) {
if (item.goods_id == skuItem.goods_id){
goods_list[skuIndex][text[textIndex].value] = val;
}
})
});
renderTable(goods_list);
layer.closeAll();
}
});
}
/**
* 添加商品
*/
function selectGoods(){
goodsSelect(function (data) {
goodsId = [];
goods_list = [];
selectedGoodsId = selectedGoodsId.split(',');
for (var key in data) {
//赋值
let exist = selectedGoodsId.indexOf(data[key].goods_id.toString()) > -1;
//购买数量
if(exist){
data[key].buy_num = $("#buy_num_"+data[key].goods_id).val();
}else{
data[key].buy_num = 2;
}
//团购价
if(exist){
data[key].groupbuy_price = $("#groupbuy_price_"+data[key].goods_id).val();
}else{
data[key].groupbuy_price = '';
}
goodsId.push(data[key].goods_id);
goods_list.push(data[key]);
}
renderTable(goods_list);
$("input[name='goods_ids']").val(JSON.stringify(goodsId));
$("#goods_num").html(goodsId.length);
selectedGoodsId = goodsId.toString();
}, selectedGoodsId);
}
function delRow(obj,id) {
for (var i = 0; i < goods_list.length; i++){
if (goods_list[i].goods_id == parseInt(id)){
goods_list.splice(i,1);
}
}
if(goodsId.indexOf(id) != -1) goodsId.splice(goodsId.indexOf(id),1);
$("#goods_num").html(goodsId.length);
selectedGoodsId = goodsId.toString();
$(obj).parents("tr").remove();
}
function groupbuyPrice(index,event) {
for (var i = 0; i < goods_list.length; i++){
if (goods_list[i].goods_id == index)
goods_list[i].groupbuy_price = event.srcElement.value;
}
}
function groupbuyBuyNum(index,event) {
for (var i = 0; i < goods_list.length; i++){
if (goods_list[i].goods_id == index)
goods_list[i].buy_num = event.srcElement.value;
}
}
function backGroupbuyList() {
location.hash = ns.hash("groupbuy://shop/groupbuy/lists");
}
</script>
<script type="text/html" id="groupbuy_price">
<input type="number" class="layui-input len-input groupbuy-price" id="groupbuy_price_{{d.goods_id}}" value="{{d.groupbuy_price}}" lay-verify="groupbuy_price" min="0.00" oninput="groupbuyPrice({{ d.goods_id }},event)" onporpertychange="groupbuyPrice({{ d.goods_id }},event)"/>
</script>
<script type="text/html" id="buy_num">
<input type="number" class="layui-input len-input buy-num" id="buy_num_{{d.goods_id}}" value="{{d.buy_num}}" lay-verify="buy_num" min="0.00" oninput="groupbuyBuyNum({{ d.goods_id }},event)" onporpertychange="groupbuyBuyNum({{ d.goods_id }},event)"/>
</script>
<script type="text/html" id="operation">
<div class="table-btn">
<a class="layui-btn" onclick="delRow(this,{{d.goods_id}})">删除</a>
</div>
</script>

View File

@@ -0,0 +1,261 @@
<style>
.good-name, .good-price {
line-height: 34px;
}
.layui-form-item .layui-input-inline.end-time{
float: none;
}
.form-wrap {position: relative; height: 650px;}
</style>
<div class="layui-form form-wrap">
<div class="layui-form-item">
<label class="layui-form-label">商品图:</label>
<div class="layui-input-inline img-upload">
<div class="upload-img-block icon square">
<div class="upload-img-box">
{if condition="$groupbuy_info.goods_image"}
<img layer-src src="{:img(explode(',', $groupbuy_info.goods_image)[0])}" alt="">
{else/}
<img src="" alt="">
{/if}
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">商品名称:</label>
<div class="layui-input-inline good-name">{$groupbuy_info.goods_name}</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">商品原价:</label>
<div class="layui-input-inline good-price">
<span>{$groupbuy_info.price}</span>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>团购价:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="number" name="groupbuy_price" lay-verify="required|group_price" autocomplete="off" class="layui-input len-short" value="{$groupbuy_info.groupbuy_price}" min="0.00">
</div>
<div class="layui-form-mid"></div>
</div>
<div class="word-aux">
<p>如商品存在多规格,则所有规格均是此价售卖,请谨慎设置</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>最低购买数量:</label>
<div class="layui-input-block">
<input type="number" name="buy_num" lay-verify="required|buy_num" autocomplete="off" class="layui-input len-short primary_price" value="{$groupbuy_info.buy_num}">
</div>
<div class="word-aux">
<p>最低购买数量不能小于2</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>活动时间:</label>
<div class="layui-inline">
<div class="layui-input-inline">
<input type="text" id="start_time" name="start_time" value="{:date('Y-m-d H:i:s', $groupbuy_info.start_time)}" lay-verify="required" class="layui-input len-mid" autocomplete="off" readonly>
<i class=" iconrili iconfont calendar"></i>
</div>
<span class="layui-form-mid">-</span>
<div class="layui-input-inline end-time">
<input type="text" id="end_time" name="end_time" value="{:date('Y-m-d H:i:s', $groupbuy_info.end_time)}" lay-verify="required|time" class="layui-input len-mid" autocomplete="off" readonly>
<input type="hidden" id="old_end_time" value="{$groupbuy_info.end_time}">
<i class=" iconrili iconfont calendar"></i>
</div>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">活动规则说明:</label>
<div class="layui-input-inline">
<textarea name="rule" class="layui-textarea len-long" maxlength="300">{$groupbuy_info.rule ?? ''}</textarea>
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<button class="layui-btn layui-btn-primary" onclick="backGroupbuyList()">返回</button>
</div>
<input type="hidden" name="goods_id" value="{$groupbuy_info.goods_id}" />
<input type="hidden" name="groupbuy_id" value="{$groupbuy_info.groupbuy_id}" />
<input type="hidden" class="start-time-hide" value="{$groupbuy_info.start_time}" />
<input type="hidden" class="end-time-hide" value="{$groupbuy_info.end_time}" />
</div>
<script>
var goods_id = $("input[name=goods_id]").val();
layui.use(['form', 'laydate'], function() {
var form = layui.form,
laydate = layui.laydate,
repeat_flag = false,
minDate = "";
form.render();
var goodsImgstr = "{$groupbuy_info.goods_image}";
if(goodsImgstr){
var goodsImgArr = goodsImgstr.split(",");
$("#goodImg").html(`<img src="${ns.img(goodsImgArr[0])}" />`);
}
var now_time = ((new Date()).getTime())/1000;
var start_time = ((new Date($("#start_time").val())).getTime())/1000;
var old_end_time = ((new Date($("#end_time").val())).getTime())/1000;
if(now_time <= start_time){
//开始时间
laydate.render({
elem: '#start_time', //指定元素
type: 'datetime',
value: ns.time_to_date($(".start-time-hide").val()),
done: function(value) {
minDate = value;
reRender();
}
});
}
if(now_time <= old_end_time){
//结束时间
laydate.render({
elem: '#end_time', //指定元素
type: 'datetime',
value: ns.time_to_date($(".end-time-hide").val())
});
}
/**
* 重新渲染结束时间
* */
function reRender() {
$("#end_time").remove();
$(".end-time").html('<input type="text" id="end_time" name="end_time" placeholder="请输入结束时间" lay-verify="required|time" class = "layui-input len-mid" autocomplete="off" readonly> ');
laydate.render({
elem: '#end_time',
type: 'datetime',
min: minDate
});
}
/**
* 表单验证
*/
form.verify({
time: function(value) {
var now_time = ((new Date()).getTime())/1000;
var start_time = ((new Date($("#start_time").val())).getTime())/1000;
var end_time = ((new Date(value)).getTime())/1000;
var old_end_time = $("#old_end_time").val();
if(old_end_time > end_time){
return '结束时间不能小于之前设置的结束时间!'
}
if (now_time > end_time) {
return '结束时间不能小于当前时间!'
}
if (start_time > end_time) {
return '结束时间不能小于开始时间!';
}
},
flnum: function(value) {
var arrMen = value.split(".");
var val = 0;
if (arrMen.length == 2) {
val = arrMen[1];
}
if (val.length > 2) {
return '保留小数点后两位!'
}
if (Number(value) < 0){
return '价格不能小于0';
}
},
buy_num: function(value,item) {
var stock = {$groupbuy_info.goods_stock};
if (Number(value) < 2) {
return '最低购买数量不能小于2'
}
if (Number(value) > Number(stock)) {
return '最低购买数量不能大于库存数!'
}
},
group_price: function(value, item) {
var price = {$groupbuy_info.price};
if (parseFloat(value) > parseFloat(price)) {
return '团购价格不能大于商品价格';
}
if (value.trim() == "") {
return '团购价格不能为空';
}
if (parseFloat(value) <= 0) {
return '团购价格必须大于0';
}
var arrMen = value.split(".");
var val = 0;
if (arrMen.length == 2) {
val = arrMen[1];
}
if (val.length > 2) {
return '团购价格最多保留两位小数';
}
},
});
/**
* 表单提交
*/
form.on('submit(save)', function(data){
if (goods_id.length == 0) {
layer.msg('请选择参与活动的商品!', {icon: 5, anim: 6});
return;
}
var groupbuy_price = $(".groupbuy_price").val();
var primary_price = $(".good-price span").text();
if (primary_price < groupbuy_price) {
layer.msg('团购价不能大于原价!', {icon: 5, anim: 6});
}
if(repeat_flag) return;
repeat_flag = true;
$.ajax({
type: 'POST',
dataType: 'JSON',
url: ns.url("groupbuy://shop/groupbuy/edit"),
data: data.field,
async: false,
success: function(res){
repeat_flag = false;
if (res.code == 0) {
layer.confirm('编辑成功', {
title:'操作提示',
btn: ['返回列表', '继续编辑'],
yes: function(index, layero) {
location.hash = ns.hash("groupbuy://shop/groupbuy/lists");
layer.close(index);
},
btn2: function(index, layero) {
layer.close(index);
}
});
}else{
layer.msg(res.message);
}
}
})
});
});
function backGroupbuyList() {
location.hash = ns.hash("groupbuy://shop/groupbuy/lists");
}
</script>

View File

@@ -0,0 +1,417 @@
<style>
.single-filter-box button {margin-bottom: 20px;}
.layui-layout-admin .body-content{padding-top: 15px !important;}
.layui-layout-admin .single-filter-box button{margin-bottom: 0;}
.layui-layout-admin .layui-form-item .layui-input-inline{background-color: #fff;}
.layui-layout-admin .table-tab .layui-tab-title{margin-bottom: 15px;}
</style>
<div class="single-filter-box">
<button class="layui-btn" onclick="add()">添加团购</button>
</div>
<!-- 搜索框 -->
<div class="screen layui-collapse" lay-filter="selection_panel">
<div class="layui-colla-item">
<form class="layui-colla-content layui-form layui-show">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">商品名称:</label>
<div class="layui-input-inline">
<input type="text" name="goods_name" placeholder="请输入商品名称" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">活动时间:</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="start_time" placeholder="开始时间" id="start_time" readonly>
<i class=" iconrili iconfont calendar"></i>
</div>
<div class="layui-form-mid">-</div>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="end_time" placeholder="结束时间" id="end_time" readonly>
<i class=" iconrili iconfont calendar"></i>
</div>
</div>
</div>
<div class="form-row">
<button type="button" class="layui-btn" lay-filter="search" lay-submit>筛选</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
</div>
</div>
<div class="layui-tab table-tab" lay-filter="groupbuy_tab">
<ul class="layui-tab-title">
<li class="layui-this" data-status="">全部</li>
<li data-status="1">未开始</li>
<li data-status="2">进行中</li>
<li data-status="3">已结束</li>
</ul>
<div class="layui-tab-content">
<!-- 列表 -->
<table id="groupbuy_list" lay-filter="groupbuy_list"></table>
</div>
</div>
<!-- 商品 -->
<script type="text/html" id="goods">
<div class="table-title">
<div class="title-pic">
{{# if(d.goods_image){ }}
<img layer-src="{{ns.img(d.goods_image.split(',')[0],'big')}}" src="{{ns.img(d.goods_image.split(',')[0],'small')}}"/>
{{# } }}
</div>
<div class="title-content">
<a href="javascript:;" class="multi-line-hiding text-color-sub" title="{{d.goods_name}}">{{d.goods_name}}</a>
</div>
</div>
</script>
<!-- 时间 -->
<script id="time" type="text/html">
<div class="layui-elip">开始{{ns.time_to_date(d.start_time)}}</div>
<div class="layui-elip">结束{{ns.time_to_date(d.end_time)}}</div>
</script>
<!-- 状态 -->
<script type="text/html" id="status">
{{# if(d.status == 1){ }}
未开始
{{# }else if(d.status == 2){ }}
进行中
{{# }else if(d.status == 3){ }}
已结束
{{# } }}
</script>
<!-- 推广 -->
{include file="app/shop/view/component/promote_show.html"}
<!-- 批量操作 -->
<script type="text/html" id="toolbarAction">
<button class="layui-btn layui-btn-primary" lay-event="delete">批量删除</button>
<button class="layui-btn layui-btn-primary" lay-event="close">批量关闭</button>
</script>
<!-- 操作 -->
<script type="text/html" id="operation">
<div class="operation-wrap" data-groupbuy-id="{{d.groupbuy_id}}">
<div class="popup-qrcode-wrap" style="display: none"><img class="popup-qrcode-loadimg" src="__STATIC__/loading/loading.gif"/></div>
<div class="table-btn">
{{# if(d.status == 2){ }}
<a class="layui-btn text-color" lay-event="select">推广</a>
{{# } }}
<a class="layui-btn" lay-event="edit">编辑</a>
{{# if(d.status == 1){ }}
<a class="layui-btn" lay-event="del">删除</a>
{{# }else if(d.status == 2){ }}
<a class="layui-btn" lay-event="close">结束</a>
{{# }else if(d.status == 3){ }}
<a class="layui-btn" lay-event="del">删除</a>
{{# } }}
</div>
</div>
</script>
<script>
var laytpl;
layui.use(['form', 'element', 'laydate','laytpl'], function() {
var table,
form = layui.form,
element = layui.element,
laydate = layui.laydate,
repeat_flag = false; //防重复标识
laytpl = layui.laytpl,
form.render();
//开始时间
laydate.render({
elem: '#start_time', //指定元素
type: 'datetime'
});
//结束时间
laydate.render({
elem: '#end_time', //指定元素
type: 'datetime'
});
element.on('tab(groupbuy_tab)', function() {
table.reload({
page: {
curr: 1
},
where: {
'status': this.getAttribute('data-status')
}
});
});
table = new Table({
elem: '#groupbuy_list',
url: ns.url("groupbuy://shop/groupbuy/lists"),
cols: [
[{
type: 'checkbox',
width: '3%',
},{
title: '商品信息',
unresize: 'false',
width: '20%',
templet: '#goods'
}, {
title: '商品原价',
unresize: 'false',
width: '12%',
align: 'right',
templet: function(data) {
return '¥'+ data.price;
}
}, {
field: 'groupbuy_price',
title: '团购价格',
unresize: 'false',
width: '10%',
sort:true,
templet: function(data) {
return '¥'+ data.groupbuy_price;
}
}, {
field: 'buy_num',
title: '起购量',
unresize: 'false',
width: '8%'
}, {
field: 'sell_num',
title: '销量',
unresize: 'false',
sort:true,
width: '8%'
}, {
title: '活动时间',
unresize: 'false',
width: '15%',
templet: '#time'
}, {
title: '状态',
unresize: 'false',
width: '10%',
templet: '#status'
}, {
title: '操作',
toolbar: '#operation',
unresize: 'false',
align : 'right'
}]
],
toolbar: '#toolbarAction'
});
table.on("sort",function (obj) {
table.reload({
page: {
curr: 1
},
where: {
order:obj.field,
sort:obj.type
}
});
});
/**
* 搜索功能
*/
form.on('submit(search)', function(data) {
table.reload({
page: {
curr: 1
},
where: data.field
});
});
//监听Tab切换
element.on('tab(status)', function(data) {
var status = $(this).attr("data-status");
table.reload({
page: {
curr: 1
},
where: {
'status': status
}
});
});
// 监听工具栏操作
table.toolbar(function (obj) {
var data = obj.data;
if(data.length <= 0) return;
var groupbuyIdAll = [];
for (var i in data){
groupbuyIdAll.push(data[i].groupbuy_id);
}
switch (obj.event) {
case 'delete':
deleteGroupbuyAll(groupbuyIdAll)
break;
case 'close':
closeGroupbuyAll(groupbuyIdAll)
break;
}
})
function deleteGroupbuyAll(data){
layer.confirm('确定要删除团购活动吗?', function(index) {
if (repeat_flag) return;
repeat_flag = true;
layer.close(index);
$.ajax({
url: ns.url("groupbuy://shop/groupbuy/deleteAll"),
data: {
groupbuy_id: data
},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
table.reload({
page: {
curr: 1
},
});
}
});
}, function() {
layer.close();
repeat_flag = false;
});
}
function closeGroupbuyAll(data){
layer.confirm('确定要结束团购活动吗?', function(index) {
if (repeat_flag) return;
repeat_flag = true;
layer.close(index);
$.ajax({
url: ns.url("groupbuy://shop/groupbuy/finishAll"),
data: {
groupbuy_id: data
},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
table.reload();
}
});
}, function() {
layer.close();
repeat_flag = false;
});
}
/**
* 监听工具栏操作
*/
table.tool(function(obj) {
var data = obj.data;
switch (obj.event) {
case 'edit': //编辑
location.hash = ns.hash("groupbuy://shop/groupbuy/edit", {"groupbuy_id": data.groupbuy_id});
break;
case 'del': //删除
deleteGroupbuy(data.groupbuy_id);
break;
case 'select': //推广
groupbuyUrl(data);
break;
case 'close': // 结束
closeGroupbuy(data.groupbuy_id);
break;
}
});
/**
* 删除
*/
function deleteGroupbuy(groupbuy_id) {
layer.confirm('确定要删除该团购活动吗?', function(index) {
if (repeat_flag) return;
repeat_flag = true;
layer.close(index);
$.ajax({
url: ns.url("groupbuy://shop/groupbuy/delete"),
data: {
groupbuy_id: groupbuy_id
},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
if (res.code == 0) {
table.reload({
page: {
curr: 1
},
});
}
}
});
}, function() {
layer.close();
repeat_flag = false;
});
}
// 结束
function closeGroupbuy(groupbuy_id) {
layer.confirm('确定要结束该团购活动吗?', function(index) {
if (repeat_flag) return;
repeat_flag = true;
layer.close(index);
$.ajax({
url: ns.url("groupbuy://shop/groupbuy/finish"),
data: {
groupbuy_id: groupbuy_id
},
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;
});
}
function groupbuyUrl(data){
new PromoteShow({
url:ns.url("groupbuy://shop/groupbuy/groupbuyUrl"),
param:{groupbuy_id:data.groupbuy_id},
})
}
});
function add() {
location.hash = ns.hash("groupbuy://shop/groupbuy/add");
}
</script>

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB