初始上传
This commit is contained in:
353
addon/bargain/shop/controller/Bargain.php
Executable file
353
addon/bargain/shop/controller/Bargain.php
Executable file
@@ -0,0 +1,353 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\bargain\shop\controller;
|
||||
|
||||
use addon\bargain\model\Bargain as BargainModel;
|
||||
|
||||
class Bargain extends BaseController
|
||||
{
|
||||
|
||||
/*
|
||||
* 砍价商品列表
|
||||
*/
|
||||
public function lists()
|
||||
{
|
||||
|
||||
$model = new BargainModel();
|
||||
|
||||
$condition = [
|
||||
[ 'pb.site_id', '=', $this->site_id ],
|
||||
[ 'g.goods_state', '=', 1 ],
|
||||
[ 'g.is_delete', '=', 0 ]
|
||||
];
|
||||
|
||||
//获取续签信息
|
||||
if (request()->isJson()) {
|
||||
$page = input('page', 1);
|
||||
$page_size = input('page_size', PAGE_LIST_ROWS);
|
||||
|
||||
$status = input('status', '');//砍价状态
|
||||
|
||||
if ($status !== '') {
|
||||
$condition[] = [ 'pb.status', '=', $status ];
|
||||
}
|
||||
//商品名称
|
||||
$goods_name = input('goods_name', '');
|
||||
if ($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[] = [ 'pb.end_time', '>=', date_to_time($start_time) ];
|
||||
} elseif (!$start_time && $end_time) {
|
||||
$condition[] = [ 'pb.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 = "pb.start_time between {$start_timestamp} and {$end_timestamp}";
|
||||
$sql .= " or pb.end_time between {$start_timestamp} and {$end_timestamp}";
|
||||
$sql .= " or (pb.start_time <= {$start_timestamp} and pb.end_time >= {$end_timestamp})";
|
||||
$condition[] = [ '', 'exp', \think\facade\Db::raw($sql) ];
|
||||
}
|
||||
|
||||
//排序
|
||||
$order = input('order', 'create_time');
|
||||
$sort = input('sort', 'desc');
|
||||
if (!empty($sort)) {
|
||||
$order_by = 'pb.' . $order . ' ' . $sort;
|
||||
} else {
|
||||
$order_by = 'pb.create_time desc';
|
||||
}
|
||||
$list = $model->getBargainPageList($condition, $page, $page_size, $order_by);
|
||||
return $list;
|
||||
} else {
|
||||
$bargain_status = $model->getBargainStatus();
|
||||
$this->assign('bargain_status', $bargain_status[ 'data' ]);
|
||||
|
||||
return $this->fetch('bargain/lists');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加活动
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
|
||||
$common_data = [
|
||||
'site_id' => $this->site_id,
|
||||
'bargain_name' => input('bargain_name', ''),
|
||||
'is_fenxiao' => input('is_fenxiao', ''),
|
||||
'buy_type' => input('buy_type', ''),
|
||||
'bargain_type' => input('bargain_type', ''),
|
||||
'bargain_num' => input('bargain_num', ''),
|
||||
'bargain_time' => input('bargain_time', ''),
|
||||
'remark' => input('remark', ''),
|
||||
'is_own' => input('is_own', ''),
|
||||
'start_time' => strtotime(input('start_time', '')),
|
||||
'end_time' => strtotime(input('end_time', '')),
|
||||
'is_differ_new_user' => input('is_differ_new_user', 0),
|
||||
'distinguish' => input('distinguish', 1),
|
||||
'new_low' => input('new_low', ''),
|
||||
'aged_tall' => input('aged_tall'),
|
||||
'aged_fixation' => input('aged_fixation'),
|
||||
'bargain_max_num' => input('bargain_max_num', 0),
|
||||
'help_bargain_num' => input('help_bargain_num', 0),
|
||||
];
|
||||
|
||||
$goods = [
|
||||
'goods_ids' => input('goods_ids', ''),
|
||||
'sku_ids' => input('sku_ids', ''),
|
||||
];
|
||||
$sku_list = input('sku_list', '');
|
||||
$bargain_model = new BargainModel();
|
||||
return $bargain_model->addBargain($common_data, $goods, $sku_list);
|
||||
} else {
|
||||
$bargain_name = '砍价 ' . date('Y-m-d');
|
||||
$this->assign('bargain_name', $bargain_name);
|
||||
return $this->fetch('bargain/add');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑活动
|
||||
*/
|
||||
public function edit()
|
||||
{
|
||||
$bargain_model = new BargainModel();
|
||||
|
||||
$bargain_id = input('bargain_id', '');
|
||||
if (request()->isJson()) {
|
||||
|
||||
$common_data = [
|
||||
'bargain_id' => $bargain_id,
|
||||
'site_id' => $this->site_id,
|
||||
'bargain_name' => input('bargain_name', ''),
|
||||
'is_fenxiao' => input('is_fenxiao', ''),
|
||||
'buy_type' => input('buy_type', ''),
|
||||
'bargain_type' => input('bargain_type', ''),
|
||||
'bargain_num' => input('bargain_num', ''),
|
||||
'bargain_time' => input('bargain_time', ''),
|
||||
'remark' => input('remark', ''),
|
||||
'is_own' => input('is_own', ''),
|
||||
'start_time' => strtotime(input('start_time', '')),
|
||||
'end_time' => strtotime(input('end_time', '')),
|
||||
'is_differ_new_user' => input('is_differ_new_user', 0),
|
||||
'distinguish' => input('distinguish', 1),
|
||||
'new_low' => input('new_low', ''),
|
||||
'aged_tall' => input('aged_tall'),
|
||||
'aged_fixation' => input('aged_fixation'),
|
||||
'bargain_max_num' => input('bargain_max_num', 0),
|
||||
'help_bargain_num' => input('help_bargain_num', 0),
|
||||
];
|
||||
$sku_list = input('sku_list', '');
|
||||
$goods = [
|
||||
'goods_id' => input('goods_id', ''),
|
||||
'sku_ids' => input('sku_ids', ''),
|
||||
];
|
||||
return $bargain_model->editBargain($common_data, $goods, $sku_list);
|
||||
} else {
|
||||
|
||||
//获取砍价信息
|
||||
$condition = [
|
||||
[ 'pb.bargain_id', '=', $bargain_id ],
|
||||
[ 'pb.site_id', '=', $this->site_id ],
|
||||
[ 'g.goods_state', '=', 1 ],
|
||||
[ 'g.is_delete', '=', 0 ]
|
||||
];
|
||||
$bargain_info = $bargain_model->getBargainInfo($condition);
|
||||
if (empty($bargain_info[ 'data' ])) $this->error('未获取到活动数据', href_url('bargain://shop/bargain/lists'));
|
||||
$this->assign('bargain_info', $bargain_info[ 'data' ]);
|
||||
return $this->fetch('bargain/edit');
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 砍价详情
|
||||
*/
|
||||
public function detail()
|
||||
{
|
||||
$bargain_model = new BargainModel();
|
||||
|
||||
$bargain_id = input('bargain_id', '');
|
||||
//获取砍价信息
|
||||
$condition = [
|
||||
[ 'pb.bargain_id', '=', $bargain_id ],
|
||||
[ 'pb.site_id', '=', $this->site_id ],
|
||||
[ 'g.goods_state', '=', 1 ],
|
||||
[ 'g.is_delete', '=', 0 ]
|
||||
];
|
||||
$bargain_info = $bargain_model->getBargainJoinGoodsList($condition);
|
||||
|
||||
if (empty($bargain_info[ 'data' ])) $this->error('未获取到活动数据', href_url('bargain://shop/bargain/lists'));
|
||||
|
||||
$this->assign('bargain_info', $bargain_info[ 'data' ]);
|
||||
return $this->fetch('bargain/detail');
|
||||
}
|
||||
|
||||
/*
|
||||
* 删除砍价活动
|
||||
*/
|
||||
public function delete()
|
||||
{
|
||||
$bargain_id = input('bargain_id', '');
|
||||
$bargain_model = new BargainModel();
|
||||
return $bargain_model->deleteBargain($bargain_id, $this->site_id);
|
||||
}
|
||||
|
||||
/*
|
||||
* 结束砍价活动
|
||||
*/
|
||||
public function finish()
|
||||
{
|
||||
$bargain_id = input('bargain_id', '');
|
||||
$bargain_model = new BargainModel();
|
||||
return $bargain_model->finishBargain($bargain_id, $this->site_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品列表
|
||||
* @return array
|
||||
*/
|
||||
public function getSkuList()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
$bargain_model = new BargainModel();
|
||||
$bargain_id = input('bargain_id', '');
|
||||
$bargain_info = $bargain_model->getBargainGoodsList($bargain_id, $this->site_id);
|
||||
return $bargain_info;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 砍价列表
|
||||
*/
|
||||
public function launchList()
|
||||
{
|
||||
$bargain_id = input('bargain_id', '');
|
||||
if (request()->isJson()) {
|
||||
$goods_name = input('goods_name', '');
|
||||
$nickname = input('nickname', '');
|
||||
$start_time = input('start_time', '');
|
||||
$end_time = input('end_time', '');
|
||||
$status = input('status', '');//砍价状态
|
||||
$page = input('page', 1);
|
||||
$page_size = input('page_size', PAGE_LIST_ROWS);
|
||||
|
||||
$bargain_model = new BargainModel();
|
||||
|
||||
$condition = [
|
||||
[ 'site_id', '=', $this->site_id ]
|
||||
];
|
||||
if ($bargain_id) {
|
||||
$condition[] = [ 'bargain_id', '=', $bargain_id ];
|
||||
}
|
||||
if ($status !== '') {
|
||||
$condition[] = [ 'status', '=', $status ];
|
||||
}
|
||||
if ($goods_name) {
|
||||
$condition[] = [ 'sku_name', 'like', '%' . $goods_name . '%' ];
|
||||
}
|
||||
if ($nickname) {
|
||||
$condition[] = [ 'nickname', 'like', '%' . $nickname . '%' ];
|
||||
}
|
||||
if ($start_time && !$end_time) {
|
||||
$condition[] = [ 'start_time', '>=', date_to_time($start_time) ];
|
||||
} elseif (!$start_time && $end_time) {
|
||||
$condition[] = [ 'start_time', '<=', date_to_time($end_time) ];
|
||||
} elseif ($start_time && $end_time) {
|
||||
$condition[] = [ 'start_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
|
||||
}
|
||||
|
||||
$list = $bargain_model->getBargainLaunchPageListInAdmin($condition, '', 'launch_id desc', $page, $page_size);
|
||||
return $list;
|
||||
} else {
|
||||
|
||||
$this->assign('bargain_id', $bargain_id);
|
||||
|
||||
return $this->fetch('bargain/launch_list');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 帮砍记录
|
||||
* @return mixed
|
||||
*/
|
||||
public function launchDetail()
|
||||
{
|
||||
$launch_id = input('launch_id', '');
|
||||
$bargain_model = new BargainModel();
|
||||
if (request()->isJson()) {
|
||||
|
||||
$page = input('page', 1);
|
||||
$page_size = input('page_size', PAGE_LIST_ROWS);
|
||||
|
||||
$condition = [ [ 'launch_id', '=', $launch_id ] ];
|
||||
$list = $bargain_model->getBargainRecordPageList($condition, '', 'id desc', $page, $page_size);
|
||||
return $list;
|
||||
} else {
|
||||
|
||||
$this->assign('launch_id', $launch_id);
|
||||
//获取发起人信息
|
||||
$info = $bargain_model->getBargainLaunchDetail([ [ 'launch_id', '=', $launch_id ], [ 'site_id', '=', $this->site_id ] ]);
|
||||
|
||||
if (empty($info[ 'data' ])) $this->error('未获取到活动数据', href_url('bargain://shop/bargain/launchlist'));
|
||||
|
||||
$this->assign('info', $info[ 'data' ]);
|
||||
|
||||
return $this->fetch('bargain/launch_detail');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 砍价推广
|
||||
*/
|
||||
public function bargainUrl()
|
||||
{
|
||||
$bargain_id = input('bargain_id', '');
|
||||
$app_type = input('app_type', 'all');
|
||||
$bargain_model = new BargainModel();
|
||||
$res = $bargain_model->urlQrcode('/pages_promotion/bargain/detail', [ 'b_id' => $bargain_id ], 'bargain', $app_type, $this->site_id);
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
* @return array
|
||||
*/
|
||||
public function deleteAll()
|
||||
{
|
||||
$bargain_id = input('bargain_id', '');
|
||||
$bargain_model = new BargainModel();
|
||||
foreach ($bargain_id as $k => $v){
|
||||
$res = $bargain_model->deleteBargain($v, $this->site_id);
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量关闭
|
||||
* @return array
|
||||
*/
|
||||
public function finishAll()
|
||||
{
|
||||
$bargain_id = input('bargain_id', '');
|
||||
$bargain_model = new BargainModel();
|
||||
foreach ($bargain_id as $k => $v){
|
||||
$res = $bargain_model->finishBargain($v, $this->site_id);
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
}
|
||||
30
addon/bargain/shop/controller/BaseController.php
Executable file
30
addon/bargain/shop/controller/BaseController.php
Executable file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\bargain\shop\controller;
|
||||
|
||||
use app\shop\controller\BaseShop;
|
||||
use think\App;
|
||||
|
||||
class BaseController extends BaseShop
|
||||
{
|
||||
public function __construct(App $app = null)
|
||||
{
|
||||
$this->replace = [
|
||||
'SHOP_ADDON_CSS' => __ROOT__ . '/addon/bargain/shop/view/public/css',
|
||||
'SHOP_ADDON_IMG' => __ROOT__ . '/addon/bargain/shop/view/public/img',
|
||||
'SHOP_ADDON_JS' => __ROOT__ . '/addon/bargain/shop/view/public/js',
|
||||
];
|
||||
|
||||
//执行父类构造函数
|
||||
parent::__construct($app);
|
||||
}
|
||||
|
||||
}
|
||||
729
addon/bargain/shop/view/bargain/add.html
Executable file
729
addon/bargain/shop/view/bargain/add.html
Executable file
@@ -0,0 +1,729 @@
|
||||
<style>
|
||||
.len-input {width: 100%;max-width: 120px;}
|
||||
.layui-form-item .layui-input-inline.end-time{float: none;}
|
||||
.desc{margin-bottom: 15px;border:1px dashed #ff8143;padding: 5px 10px;background: #fff0e9;color: #ff8143;width: 65%;}
|
||||
.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;}
|
||||
.layui-carousel { position: absolute; top: 90px; left: 1350px; background: #fff;}
|
||||
.goods_num {padding-left: 20px;}
|
||||
</style>
|
||||
|
||||
<div class="layui-form form-wrap">
|
||||
<div class="desc">
|
||||
请自觉遵守微信关于规范外部链接内容管理的规范,防止由于微信封号导致不必要的损失。<a href="http://weixin.qq.com/cgi-bin/readtemplate?t=weixin_external_links_content_management_specification" target="_blank">点击查看详情</a>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>活动名称:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="bargain_name" value="{$bargain_name}" lay-verify="required" autocomplete="off" class="layui-input len-long" maxlength="40">
|
||||
</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 len-mid">
|
||||
<input type="text" id="start_time" name="start_time" lay-verify="required" class="layui-input" autocomplete="off" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
<span class="layui-form-mid">-</span>
|
||||
<div class="layui-input-inline len-mid end-time">
|
||||
<input type="text" id="end_time" name="end_time" lay-verify="required|time" class="layui-input" autocomplete="off" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
</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 len-short">
|
||||
<input type="number" name="bargain_time" value="" lay-verify="required|int" data-min="4" data-max="48" data-unit="小时" placeholder="4-48小时" autocomplete="off" class="layui-input len-short">
|
||||
</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">是否参与分销:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="is_fenxiao" value="0" title="不参与" checked>
|
||||
<input type="radio" name="is_fenxiao" value="1" title="参与">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">购买方式:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="buy_type" value="0" title="任意金额可购买" checked>
|
||||
<input type="radio" name="buy_type" value="1" title="砍到指定价格才可购买">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">帮砍金额:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="bargain_type" lay-filter='bargain_type' value="1" title="随机金额" checked >
|
||||
<input type="radio" name="bargain_type" lay-filter='bargain_type' value="0" title="固定金额" >
|
||||
</div>
|
||||
<div class="word-aux">
|
||||
<p>设置每位帮砍用户的砍价金额规则</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">是否允许自己砍价:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" name="is_own" lay-filter="" value="1" lay-skin="switch" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item bargain_num">
|
||||
<label class="layui-form-label"><span class="required">*</span>最少帮砍人数:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="bargain_num" value="" lay-verify="required|int" data-min="2" data-max="100" data-unit="人" placeholder="2-100人" autocomplete="off" class="layui-input len-short">
|
||||
</div>
|
||||
<div class="word-aux">
|
||||
<p>最少帮砍人数为该砍价订单最少人数</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item bargain_max_num">
|
||||
<label class="layui-form-label"><span class="required">*</span>砍成人数:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="bargain_max_num" value="0" lay-verify="bargain_max_num" data-min="2" data-max="100" data-unit="人" placeholder="" autocomplete="off" class="layui-input len-short">
|
||||
</div>
|
||||
<div class="word-aux">
|
||||
<p>由于帮砍金额为随机金额,实际砍成人数可能小于设置的砍成人数,但是达到砍成人数时砍价必然成功</p>
|
||||
<p>若砍成人数设置为0,表示不限制砍成人数,累计帮砍金额达到最低砍价金额时砍价成功</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="help_bargain_num" value="0" lay-verify="help_bargain_num" data-unit="人" placeholder="" autocomplete="off" class="layui-input len-short">
|
||||
</div>
|
||||
<div class="word-aux">
|
||||
<p>每个会员针对当前活动商品最多帮砍次数,0为不限制</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item" style="display: none">
|
||||
<label class="layui-form-label">是否区分新老用户:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" lay-filter="is_differ_new_user" name="is_differ_new_user" value="1" title="是" >
|
||||
<input type="radio" lay-filter="is_differ_new_user" name="is_differ_new_user" value="0" title="否" checked>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div name="distinguish" style="display: none">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>新用户区分标准:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="distinguish" value="1" lay-verify="required|int" data-min="1" data-max="100" data-unit="人" placeholder="1-100天" autocomplete="off" class="layui-input len-short" min="1">
|
||||
<span class="layui-form-label label-time">天内新注册且未砍过价的</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div name='random' style="display: none">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">新用户最低随机金额:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="new_low" lay-verify="flo" autocomplete="off" class="layui-input combined-price len-short" value="0.00" step="1" min="0.00">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">老用户最高随机金额:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="aged_tall" autocomplete="off" class="layui-input combined-price len-short" value="0.00" step="1" min="0.00">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div name='fixed' class="layui-form-item layui-hide" style="display: none">
|
||||
<label class="layui-form-label">老用户固定砍价:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="aged_fixation" autocomplete="off" class="layui-input combined-price len-short" value="0.00" step="1" min="0.00">
|
||||
</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>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" onclick="addGoods()">选择商品</button> <span class="goods_num">已选商品(<span id="goods_num" class="text-color">0</span>)</span>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="sku_ids">
|
||||
|
||||
<div class="layui-form-item layui-form-text">
|
||||
<label class="layui-form-label">活动规则说明:</label>
|
||||
<div class="layui-input-inline">
|
||||
<textarea name="remark" class="layui-textarea len-long" maxlength="300"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- <div class="layui-carousel" >
|
||||
<img src="__STATIC__/img/bargain.png" >
|
||||
</div>-->
|
||||
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="backBargainList()">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script type="text/html" id="toolbarOperation">
|
||||
<button class="layui-btn layui-btn-primary" lay-event="money">首刀金额</button>
|
||||
<button class="layui-btn layui-btn-primary" lay-event="bargain-stock">砍价库存</button>
|
||||
<button class="layui-btn layui-btn-primary" lay-event="floor-price">底价</button>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="bargainFirst">
|
||||
<input type="number" class="layui-input len-input bargain-first" value="{{d.first_bargain_price ? d.first_bargain_price : ''}}" lay-verify="bargain_first" min="0.00" oninput="bargainFirst({{ d.sku_id }},event)" onporpertychange="bargainFirst({{ d.sku_id }},event)" />
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="bargainStock">
|
||||
<input type="number" class="layui-input len-input bargain-stock" value="{{d.bargain_stock ? d.bargain_stock : d.stock }}" lay-verify="bargain_stock" min="0" oninput="bargainStock({{ d.sku_id }},event)" onporpertychange="bargainStock({{ d.sku_id }},event)"/>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="minPrice">
|
||||
<input type="number" class="layui-input len-input min-price" lay-verify="min_price" min="0.00" value="{{d.floor_price ? d.floor_price : 0.00}}" oninput="bargainMinPrice({{ d.sku_id }},event)" onporpertychange="bargainMinPrice({{ d.sku_id }},event)"/>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" onclick="delRow(this,{{d.sku_id}})">删除</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var goodsId = {}, selectedGoodsId = [], sku_list = [],
|
||||
form,laydate,repeat_flag,currentDate,minDate,
|
||||
is_differ_new_user = 1,bargain_type = 1;
|
||||
layui.use(['form', 'laydate'], function() {
|
||||
form = layui.form;
|
||||
laydate = layui.laydate;
|
||||
repeat_flag = false;
|
||||
currentDate = new Date();
|
||||
minDate = "";
|
||||
currentDate.setDate(currentDate.getDate() + 30);
|
||||
form.render();
|
||||
|
||||
/**
|
||||
* 新老客户单选框选择
|
||||
*/
|
||||
|
||||
form.on("radio(is_differ_new_user)", function(data){
|
||||
is_differ_new_user = data.value;
|
||||
if(data.value == '1'){
|
||||
$("div[name='distinguish']").removeClass('layui-hide')
|
||||
}else{
|
||||
$("div[name='distinguish']").addClass('layui-hide')
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 帮砍金额单选框选择
|
||||
*/
|
||||
form.on("radio(bargain_type)",function(data){
|
||||
bargain_type = data.value;
|
||||
if(data.value == '1'){
|
||||
$("div[name='random']").removeClass('layui-hide');
|
||||
$("div[name='fixed']").addClass('layui-hide');
|
||||
$(".bargain_max_num").removeClass('layui-hide');
|
||||
$('.bargain_num .layui-form-label').html('<span class="required">*</span>最少帮砍人数:');
|
||||
$('.bargain_num .word-aux').html('<p>最少帮砍人数为该砍价订单最少人数</p>');
|
||||
}else{
|
||||
$("div[name='random']").addClass('layui-hide');
|
||||
$("div[name='fixed']").removeClass('layui-hide');
|
||||
$(".bargain_max_num").addClass('layui-hide');
|
||||
$('.bargain_num .layui-form-label').html('<span class="required">*</span>砍成人数:');
|
||||
$('.bargain_num .word-aux').html('');
|
||||
}
|
||||
});
|
||||
|
||||
renderTable(sku_list); // 初始化表格
|
||||
|
||||
for (var i = 0; i <= 30; i++) {
|
||||
if (i < 10) {
|
||||
var html = '<option value="' + i + '">0' + i + '</option>';
|
||||
} else {
|
||||
var html = '<option value="' + i + '">' + i + '</option>';
|
||||
}
|
||||
if (i == 1) {
|
||||
var html = '<option value="' + i + '" selected>0' + i + '</option>';
|
||||
}
|
||||
$(".bargain-day").append(html);
|
||||
}
|
||||
for (var i = 0; i <= 23; i++) {
|
||||
if (i < 10) {
|
||||
var html = '<option value="' + i + '">0' + i + '</option>';
|
||||
} else {
|
||||
var html = '<option value="' + i + '">' + i + '</option>';
|
||||
}
|
||||
$(".bargain-hour").append(html);
|
||||
}
|
||||
for (var i = 0; i <= 59; i++) {
|
||||
if (i < 10) {
|
||||
var html = '<option value="' + i + '">0' + i + '</option>';
|
||||
} else {
|
||||
var html = '<option value="' + i + '">' + i + '</option>';
|
||||
}
|
||||
$(".bargain-minute").append(html);
|
||||
}
|
||||
form.render('select');
|
||||
|
||||
//开始时间
|
||||
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"> ');
|
||||
laydate.render({
|
||||
elem: '#end_time',
|
||||
type: 'datetime',
|
||||
min: minDate
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 表单验证
|
||||
*/
|
||||
form.verify({
|
||||
int: function(value, item) {
|
||||
var str = $(item).parents(".layui-form-item").find("label").text().split("*").join("");
|
||||
str = str.substring(0, str.length - 1);
|
||||
|
||||
var min = $(item).attr("data-min");
|
||||
var max = $(item).attr("data-max");
|
||||
var unit = $(item).attr("data-unit");
|
||||
|
||||
if (value < Number(min)) {
|
||||
return str + '不能小于' + min + unit;
|
||||
}
|
||||
if (value > Number(max)) {
|
||||
return str + '不能大于' + max + unit;
|
||||
}
|
||||
if (value % 1 != 0) {
|
||||
return str + '必须为整数';
|
||||
}
|
||||
},
|
||||
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 '结束时间不能小于开始时间!';
|
||||
}
|
||||
},
|
||||
num: function(value) {
|
||||
if (value < 1 || value % 1 != 0) {
|
||||
return '请输入大于0的正整数!';
|
||||
}
|
||||
},
|
||||
sum: function(value) {
|
||||
if (value < 2 || value % 1 != 0) {
|
||||
return '参团人数不能小于2,且必须是整数!';
|
||||
}
|
||||
},
|
||||
bargain_first: function(value, item) {
|
||||
var price = $(item).parents("tr").find(".bargain-price").text();
|
||||
var min_price = $(item).parents("tr").find("input[lay-verify='min_price']").val();
|
||||
|
||||
if (value == "" || value == 0) {
|
||||
return;
|
||||
}
|
||||
if (value < 0) {
|
||||
return '首刀金额不能小于0';
|
||||
}
|
||||
if (Number(value) >= Number(price)) {
|
||||
return '首刀金额必须小于商品价格';
|
||||
}
|
||||
if ((Number(value) + Number(min_price)) >= Number(price)) {
|
||||
return '首刀金额与底价之和必须小于商品价格';
|
||||
}
|
||||
|
||||
var arrMen = value.split(".");
|
||||
var val = 0;
|
||||
if (arrMen.length == 2) {
|
||||
val = arrMen[1];
|
||||
}
|
||||
if (val.length > 2) {
|
||||
return '首刀金额最多保留两位小数';
|
||||
}
|
||||
},
|
||||
bargain_stock: function(value, item) {
|
||||
var stock = $(item).parents("tr").find(".stock").text();
|
||||
if (value == "" || value == 0) {
|
||||
return;
|
||||
}
|
||||
if (Number(value) < 0) {
|
||||
return '砍价库存不能小于0';
|
||||
}
|
||||
if (Number(value) > Number(stock)) {
|
||||
return '砍价库存不能大于商品总库存';
|
||||
}
|
||||
if (value % 1 != 0) {
|
||||
return '砍价库存必须为整数';
|
||||
}
|
||||
},
|
||||
min_price: function(value, item) {
|
||||
var price = $(item).parents("tr").find(".bargain-price").text();
|
||||
|
||||
if (value == "" || value == 0) {
|
||||
return;
|
||||
}
|
||||
if (Number(value) < 0) {
|
||||
return '商品底价不能小于0';
|
||||
}
|
||||
if (Number(value) > Number(price)) {
|
||||
return '商品底价不能大于商品价格';
|
||||
}
|
||||
|
||||
var arrMen = value.split(".");
|
||||
var val = 0;
|
||||
if (arrMen.length == 2) {
|
||||
val = arrMen[1];
|
||||
}
|
||||
if (val.length > 2) {
|
||||
return '商品底价最多保留两位小数';
|
||||
}
|
||||
},
|
||||
bargain_max_num: function(value, item) {
|
||||
var bargain_type = $('input[name="bargain_type"]:checked').val();
|
||||
if(bargain_type == 1) {
|
||||
if (value == "" || value == 0) {
|
||||
return;
|
||||
}
|
||||
if (Number(value) < 0) {
|
||||
return '砍成人数不能小于0';
|
||||
}
|
||||
if (value % 1 != 0) {
|
||||
return '砍成人数必须为整数';
|
||||
}
|
||||
var bargain_num = $('input[name="bargain_num"]').val();
|
||||
|
||||
if (Number(value) <= Number(bargain_num)) {
|
||||
return '砍成人数不能小于最少帮砍人数';
|
||||
}
|
||||
}
|
||||
},
|
||||
help_bargain_num: function (value, item){
|
||||
if (value == "" || value == 0) {
|
||||
return;
|
||||
}
|
||||
if (Number(value) < 0) {
|
||||
return '最大帮砍次数不能小于0';
|
||||
}
|
||||
if (value % 1 != 0) {
|
||||
return '最大帮砍次数必须为整数';
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听提交
|
||||
*/
|
||||
form.on('submit(save)', function(data){
|
||||
|
||||
if (!Object.keys(goodsId).length) {
|
||||
layer.msg("请选择活动商品!", {icon: 5, anim: 6});
|
||||
return;
|
||||
}
|
||||
|
||||
data.field.goods_ids = selectedGoodsId.split(',');
|
||||
|
||||
var skuId = [];
|
||||
Object.values(goodsId).forEach(function (item,index) {
|
||||
Object.values(item.sku_id).forEach(function (skuItem,skuIndex) {
|
||||
skuId.push(skuItem.sku);
|
||||
});
|
||||
});
|
||||
data.field.sku_ids = skuId;
|
||||
|
||||
var skuLisArr = [];
|
||||
sku_list.forEach(function(item,index) {
|
||||
var sku_detail = {};
|
||||
sku_detail.sku_id = item.sku_id;
|
||||
sku_detail.goods_id = item.goods_id;
|
||||
sku_detail.first_bargain_price = item.first_bargain_price || 0.00;
|
||||
sku_detail.bargain_stock = item.bargain_stock || item.stock;
|
||||
sku_detail.floor_price = item.floor_price || 0.00;
|
||||
skuLisArr.push(sku_detail);
|
||||
});
|
||||
data.field.sku_list = skuLisArr;
|
||||
|
||||
if(repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("bargain://shop/bargain/add"),
|
||||
data: data.field,
|
||||
async: false,
|
||||
success: function(res){
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
location.hash = ns.hash("bargain://shop/bargain/lists");
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
// 表格渲染
|
||||
function renderTable(sku_list) {
|
||||
//展示已知数据
|
||||
table = new Table({
|
||||
elem: '#selected_goods_list',
|
||||
page: false,
|
||||
limit: Number.MAX_VALUE,
|
||||
cols: [
|
||||
[{
|
||||
width: "3%",
|
||||
type: 'checkbox',
|
||||
unresize: 'false'
|
||||
},{
|
||||
title: '商品名称',
|
||||
width: '23%',
|
||||
unresize: 'false',
|
||||
templet: function(data) {
|
||||
var html = '';
|
||||
html += `
|
||||
<div class="goods-title">
|
||||
<div class="goods-img">
|
||||
<img layer-src src="${data.sku_image ? ns.img(data.sku_image) : ''}" alt="">
|
||||
</div>
|
||||
<p class="multi-line-hiding goods-name" data-goods_id="${data.goods_id}" data-sku_id="${data.sku_id}" title="${data.sku_name}">${data.sku_name}</p>
|
||||
</div>
|
||||
`;
|
||||
return html;
|
||||
}
|
||||
}, {
|
||||
field: 'price',
|
||||
title: '商品价格',
|
||||
unresize: 'false',
|
||||
width: '12%',
|
||||
templet: function(data) {
|
||||
return '<p class="line-hiding" title="'+ data.price +'">¥<span class="bargain-price">' + data.price +'</span></p>';
|
||||
}
|
||||
}, {
|
||||
field: 'stock',
|
||||
title: '库存',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
templet: function(data) {
|
||||
return '<p class="stock">' + data.stock +'</p>';
|
||||
}
|
||||
}, {
|
||||
title: '<span title="首刀金额自定义">首刀金额自定义</span>',
|
||||
unresize: 'false',
|
||||
width: '16%',
|
||||
templet: '#bargainFirst'
|
||||
}, {
|
||||
title: '砍价库存',
|
||||
unresize: 'false',
|
||||
width: '13%',
|
||||
templet: '#bargainStock'
|
||||
}, {
|
||||
title: '底价',
|
||||
unresize: 'false',
|
||||
width: '13%',
|
||||
templet: '#minPrice'
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false'
|
||||
}]
|
||||
],
|
||||
data: sku_list,
|
||||
toolbar: '#toolbarOperation'
|
||||
});
|
||||
|
||||
/**
|
||||
* 批量操作
|
||||
*/
|
||||
table.toolbar(function(obj) {
|
||||
if (obj.data.length < 1) {
|
||||
layer.msg('请选择要操作的数据');
|
||||
return;
|
||||
}
|
||||
switch (obj.event) {
|
||||
case "money":
|
||||
editInput(0,obj);
|
||||
break;
|
||||
case "bargain-stock":
|
||||
editInput(1,obj);
|
||||
break;
|
||||
case "floor-price":
|
||||
editInput(2,obj);
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function editInput(textIndex=0,data) {
|
||||
var text = [{
|
||||
name: '首刀金额',
|
||||
value: 'first_bargain_price'
|
||||
}, {
|
||||
name: '砍价库存',
|
||||
value: 'bargain_stock'
|
||||
}, {
|
||||
name: '底价',
|
||||
value: 'floor_price'
|
||||
}];
|
||||
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) {
|
||||
sku_list.forEach(function (skuItem, skuIndex) {
|
||||
if (item.sku_id == skuItem.sku_id) {
|
||||
sku_list[skuIndex][text[textIndex].value] = val;
|
||||
}
|
||||
})
|
||||
});
|
||||
renderTable(sku_list);
|
||||
layer.closeAll();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加商品
|
||||
*/
|
||||
function addGoods() {
|
||||
goodsSelect(function (data) {
|
||||
|
||||
sku_list = [];
|
||||
goodsId = [];
|
||||
|
||||
for (var key in data) {
|
||||
|
||||
goodsId['goods_' + data[key].goods_id] = {};
|
||||
goodsId['goods_' + data[key].goods_id].sku_id = {};
|
||||
goodsId['goods_' + data[key].goods_id].spu_id = data[key].goods_id;
|
||||
|
||||
for (var sku in data[key].sku_list) {
|
||||
var item = data[key].sku_list[sku];
|
||||
goodsId['goods_' + data[key].goods_id].sku_id['sku_' + item.sku_id] = {};
|
||||
goodsId['goods_' + data[key].goods_id].sku_id['sku_' + item.sku_id].sku = item.sku_id;
|
||||
sku_list.push(item);
|
||||
}
|
||||
}
|
||||
|
||||
renderTable(sku_list);
|
||||
$("input[name='sku_ids']").val(JSON.stringify(goodsId));
|
||||
|
||||
var spuId = [];
|
||||
Object.values(goodsId).forEach(function (item, index) {
|
||||
spuId.push(item.spu_id);
|
||||
});
|
||||
selectedGoodsId = spuId.toString();
|
||||
$("#goods_num").html(sku_list.length)
|
||||
}, selectedGoodsId);
|
||||
}
|
||||
|
||||
function delRow(obj,id) {
|
||||
for (var i = 0; i < sku_list.length; i++){
|
||||
if (sku_list[i].sku_id == parseInt(id)){
|
||||
sku_list.splice(i,1);
|
||||
}
|
||||
}
|
||||
Object.values(goodsId).forEach(function (item,index) {
|
||||
delete item.sku_id['sku_'+id];
|
||||
if (!Object.keys(item.sku_id).length){
|
||||
delete goodsId['goods_'+item.spu_id];
|
||||
}
|
||||
});
|
||||
|
||||
var spuId = [];
|
||||
Object.values(goodsId).forEach(function (item,index) {
|
||||
spuId.push(item.spu_id);
|
||||
});
|
||||
selectedGoodsId = spuId.toString();
|
||||
$(obj).parents("tr").remove();
|
||||
$("#goods_num").html(sku_list.length)
|
||||
}
|
||||
|
||||
function bargainFirst(index,event) {
|
||||
for (var i = 0; i < sku_list.length; i++){
|
||||
if (sku_list[i].sku_id == index) sku_list[i].first_bargain_price = event.srcElement.value;
|
||||
}
|
||||
}
|
||||
|
||||
function bargainStock(index,event) {
|
||||
for (var i = 0; i < sku_list.length; i++){
|
||||
if (sku_list[i].sku_id == index) sku_list[i].bargain_stock = event.srcElement.value;
|
||||
}
|
||||
}
|
||||
|
||||
function bargainMinPrice(index,event) {
|
||||
for (var i = 0; i < sku_list.length; i++){
|
||||
if (sku_list[i].sku_id == index) sku_list[i].floor_price = event.srcElement.value;
|
||||
}
|
||||
}
|
||||
|
||||
function backBargainList() {
|
||||
location.hash = ns.hash("bargain://shop/bargain/lists");
|
||||
}
|
||||
|
||||
</script>
|
||||
117
addon/bargain/shop/view/bargain/detail.html
Executable file
117
addon/bargain/shop/view/bargain/detail.html
Executable file
@@ -0,0 +1,117 @@
|
||||
<link rel="stylesheet" href="STATIC_CSS/promotion_detail.css">
|
||||
|
||||
<div class="layui-card card-common card-brief">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">基本信息</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="promotion-view">
|
||||
<div class="promotion-view-item">
|
||||
<label>活动名称:</label>
|
||||
<span>{$bargain_info.bargain_name}</span>
|
||||
</div>
|
||||
<div class="promotion-view-item">
|
||||
<label>开始时间:</label>
|
||||
<span>{:date('Y-m-d H:i:s',$bargain_info.start_time)}</span>
|
||||
</div>
|
||||
<div class="promotion-view-item">
|
||||
<label>结束时间:</label>
|
||||
<span>{:date('Y-m-d H:i:s',$bargain_info.end_time)}</span>
|
||||
</div>
|
||||
<div class="promotion-view-item">
|
||||
<label>购买方式:</label>
|
||||
<span>{if $bargain_info.buy_type == 1} 砍到指定价格 {else/} 任意金额可购买 {/if}</span>
|
||||
</div>
|
||||
<div class="promotion-view-item">
|
||||
<label>帮砍金额:</label>
|
||||
<span>{if $bargain_info.bargain_type == 1} 随机金额 {else/} 固定金额 {/if}</span>
|
||||
</div>
|
||||
<div class="promotion-view-item">
|
||||
<label>帮砍人数:</label>
|
||||
<span>{$bargain_info.bargain_time} 小时</span>
|
||||
</div>
|
||||
<div class="promotion-view-item">
|
||||
<label>是否允许自己砍价:</label>
|
||||
<span>{if $bargain_info.is_own == 1} 是 {else/} 否 {/if}</span>
|
||||
</div>
|
||||
<div class="promotion-view-item">
|
||||
<label>是否参与分销:</label>
|
||||
<span>{if $bargain_info.is_fenxiao == 1} 参与 {else/} 不参与 {/if}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="promotion-view">
|
||||
<div class="promotion-view-item-line">
|
||||
<label>活动规则:</label>
|
||||
<span>{$bargain_info.remark}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-card card-common card-brief">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">活动商品</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class='promotion-view-list'>
|
||||
<table id="promotion_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type='text/html' id="promotion_list_item_box_html">
|
||||
<div class="promotion-list-item-title">
|
||||
<div class="promotion-list-item-title-icon">
|
||||
<img src="{{ ns.img(d.sku_image) }}" alt="">
|
||||
</div>
|
||||
<p class="promotion-list-item-title-name multi-line-hiding">{{ d.sku_name }}</p>
|
||||
</div>
|
||||
</script>
|
||||
<script>
|
||||
var list = {:json_encode($bargain_info.goods_list, JSON_UNESCAPED_UNICODE)};
|
||||
layui.use('table', function() {
|
||||
new Table({
|
||||
elem: '#promotion_list',
|
||||
cols: [
|
||||
[{
|
||||
field: 'sku_name',
|
||||
title: '商品名称',
|
||||
width: '26%',
|
||||
unresize: 'false',
|
||||
templet: "#promotion_list_item_box_html"
|
||||
}, {
|
||||
field: 'price',
|
||||
title: '商品价格',
|
||||
unresize: 'false',
|
||||
align: 'right',
|
||||
width: '20%',
|
||||
templet: function(data) {
|
||||
return '¥' + data.price;
|
||||
}
|
||||
}, {
|
||||
field: 'stock',
|
||||
title: '库存',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
templet: function(data) {
|
||||
return data.stock;
|
||||
}
|
||||
}, {
|
||||
field: 'first_bargain_price',
|
||||
title: '首刀金额',
|
||||
unresize: 'false'
|
||||
}, {
|
||||
field: 'bargain_stock',
|
||||
title: '砍价库存',
|
||||
unresize: 'false'
|
||||
}, {
|
||||
field: 'floor_price',
|
||||
title: '底价',
|
||||
unresize: 'false'
|
||||
}]
|
||||
],
|
||||
data: list
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
709
addon/bargain/shop/view/bargain/edit.html
Executable file
709
addon/bargain/shop/view/bargain/edit.html
Executable file
@@ -0,0 +1,709 @@
|
||||
<style>
|
||||
.len-input{width: 100%;max-width: 120px;}
|
||||
.layui-table-view{margin-top: 0;}
|
||||
.layui-form-item .layui-input-inline.end-time{float: none;}
|
||||
.desc{margin-bottom: 15px;border:1px dashed #ff8143;padding: 5px 10px;background: #fff0e9;color: #ff8143;width: 65%;}
|
||||
.forbidden{cursor:not-allowed;background-color: #eee;}
|
||||
.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;}
|
||||
.layui-carousel { position: absolute; top: 90px; left: 1350px; background: #fff;}
|
||||
#bargain_num{width: 60px !important;}
|
||||
.layui-form-item .layui-input-block .label-time{width: auto;margin-left: 10px;}
|
||||
</style>
|
||||
|
||||
<div class="layui-form form-wrap">
|
||||
<div class="desc">
|
||||
请自觉遵守微信关于规范外部链接内容管理的规范,防止由于微信封号导致不必要的损失。<a href="http://weixin.qq.com/cgi-bin/readtemplate?t=weixin_external_links_content_management_specification" target="_blank">点击查看详情</a>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>活动名称:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="bargain_name" lay-verify="required" value="{$bargain_info.bargain_name}" autocomplete="off" class="layui-input len-long" maxlength="40">
|
||||
</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-inline">
|
||||
<div class="layui-input-inline len-mid">
|
||||
<input type="text" id="start_time" name="start_time" value="{:date('Y-m-d H:i:s', $bargain_info.start_time)}" lay-verify="required" class="layui-input" autocomplete="off" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
<span class="layui-form-mid">-</span>
|
||||
<div class="layui-input-inline len-mid end-time">
|
||||
<input type="text" id="end_time" name="end_time" value="{:date('Y-m-d H:i:s', $bargain_info.end_time)}" lay-verify="required|time" class="layui-input" autocomplete="off" readonly>
|
||||
<input type="hidden" value="{$bargain_info.end_time}" id="old_end_time">
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
</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 len-short">
|
||||
<input type="number" name="bargain_time" value="{$bargain_info.bargain_time}" lay-verify="required|int" data-min="4" data-max="48" data-unit="小时" placeholder="4-48小时" autocomplete="off" class="layui-input len-short">
|
||||
</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">是否参与分销:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="is_fenxiao" value="0" title="不参与" {if condition="$bargain_info.is_fenxiao == 0"}checked{/if} >
|
||||
<input type="radio" name="is_fenxiao" value="1" title="参与" {if condition="$bargain_info.is_fenxiao == 1"}checked{/if} >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">购买方式:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="buy_type" value="0" title="任意金额可购买" {if condition="$bargain_info.buy_type == 0"}checked{/if} >
|
||||
<input type="radio" name="buy_type" value="1" title="砍到指定价格才可购买" {if condition="$bargain_info.buy_type == 1"}checked{/if} >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">帮砍金额:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="bargain_type" value="1" lay-filter='bargain_type' title="随机金额" {if condition="$bargain_info.bargain_type == 1"}checked{/if} >
|
||||
<input type="radio" name="bargain_type" value="0" lay-filter='bargain_type' title="固定金额" {if condition="$bargain_info.bargain_type == 0"}checked{/if} >
|
||||
</div>
|
||||
<div class="word-aux">
|
||||
<p>设置每位帮砍用户的砍价金额规则</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">是否允许自己砍价:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" name="is_own" lay-filter="" {if condition="$bargain_info.is_own == 1"}checked{/if} value="1" lay-skin="switch" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item bargain_num">
|
||||
<label class="layui-form-label"><span class="required">*</span>最少帮砍人数:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="bargain_num" value="{$bargain_info.bargain_num}" lay-verify="required|int" data-min="2" data-max="100" data-unit="人" placeholder="2-100人" autocomplete="off" class="layui-input len-short">
|
||||
</div>
|
||||
<div class="word-aux">
|
||||
<p>最少帮砍人数为该砍价订单最少人数</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item bargain_max_num">
|
||||
<label class="layui-form-label"><span class="required">*</span>砍成人数:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="bargain_max_num" value="{$bargain_info.bargain_max_num}" lay-verify="bargain_max_num" data-min="2" data-max="100" data-unit="人" placeholder="" autocomplete="off" class="layui-input len-short">
|
||||
</div>
|
||||
<div class="word-aux">
|
||||
<p>由于帮砍金额为随机金额,实际砍成人数可能小于设置的砍成人数,但是达到砍成人数时砍价必然成功</p>
|
||||
<p>若砍成人数设置为0,表示不限制砍成人数,累计帮砍金额达到最低砍价金额时砍价成功</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="help_bargain_num" value="{$bargain_info.help_bargain_num}" lay-verify="help_bargain_num" data-unit="人" placeholder="" autocomplete="off" class="layui-input len-short">
|
||||
</div>
|
||||
<div class="word-aux">
|
||||
<p>每个会员针对当前活动商品最多帮砍次数,0为不限制</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item" style="display: none">
|
||||
<label class="layui-form-label">是否区分新老用户:</label>
|
||||
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="is_differ_new_user" value="1" lay-filter='is_differ_new_user' title="是" {if condition="$bargain_info.is_differ_new_user == 1"}checked{/if} >
|
||||
<input type="radio" name="is_differ_new_user" value="0" lay-filter='is_differ_new_user' title="否" {if condition="$bargain_info.is_differ_new_user == 0"}checked{/if} >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div name="distinguish" style="display: none">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>新用户区分标准:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="distinguish" id="bargain_num" value="{$bargain_info.distinguish}" lay-verify="required|int" data-min="1" data-max="100" data-unit="人" placeholder="1-100天" autocomplete="off" class="layui-input len-short" min="1">
|
||||
<span class="layui-form-label label-time">天内新注册且未砍过价的</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div name='random' style="display: none">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">新用户最低随机金额:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="new_low" value="{$bargain_info.new_low}" autocomplete="off" class="layui-input combined-price len-short" step="1" min="0.00">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">老用户最高随机金额:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="aged_tall" value="{$bargain_info.aged_tall}" autocomplete="off" class="layui-input combined-price len-short" step="1" min="0.00">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div name='fixed' class="layui-form-item layui-hide" style="display: none">
|
||||
<label class="layui-form-label">老用户固定砍价:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="aged_fixation" value="{$bargain_info.aged_fixation}" autocomplete="off" class="layui-input combined-price len-short" step="1" min="0.00">
|
||||
</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>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-form-text">
|
||||
<label class="layui-form-label">活动规则说明:</label>
|
||||
<div class="layui-input-inline">
|
||||
<textarea name="remark" class="layui-textarea len-long" maxlength="300">{$bargain_info.remark}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- <div class="layui-carousel" style="display: none" >
|
||||
<img src="__STATIC__/img/bargain.png" >
|
||||
</div>-->
|
||||
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="backBargainList()">返回</button>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="bargain_id" value="{$bargain_info.bargain_id}" />
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarOperation">
|
||||
<button class="layui-btn layui-btn-primary" lay-event="money">首刀金额</button>
|
||||
<button class="layui-btn layui-btn-primary" lay-event="bargain-stock">砍价库存</button>
|
||||
<button class="layui-btn layui-btn-primary" lay-event="floor-price">底价</button>
|
||||
</script>
|
||||
<script>
|
||||
var sku_list = [],is_differ_new_user = 1,bargain_type = 1;
|
||||
sku_list = {:json_encode($bargain_info.goods_list, JSON_UNESCAPED_UNICODE)};
|
||||
sku_list.forEach(function (item,index) {
|
||||
item.is_delete = item.bargain_stock ? 1 : 2;
|
||||
});
|
||||
layui.use(['form', 'laydate'], function() {
|
||||
var form = layui.form,
|
||||
laydate = layui.laydate,
|
||||
repeat_flag = false,
|
||||
startDate = '{$bargain_info.start_time}',
|
||||
endDate = '{$bargain_info.end_time}',
|
||||
minDate = "";
|
||||
form.render();
|
||||
|
||||
/**
|
||||
* 新老客户单选框选择
|
||||
*/
|
||||
form.on("radio(is_differ_new_user)", function(data){
|
||||
is_differ_new_user = data.value;
|
||||
if(data.value == '1'){
|
||||
$("div[name='distinguish']").removeClass('layui-hide')
|
||||
}else{
|
||||
$("div[name='distinguish']").addClass('layui-hide')
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 帮砍金额单选框选择
|
||||
*/
|
||||
form.on("radio(bargain_type)",function(data){
|
||||
bargain_type = data.value;
|
||||
if(data.value == '1'){
|
||||
$("div[name='random']").removeClass('layui-hide');
|
||||
$("div[name='fixed']").addClass('layui-hide');
|
||||
$(".bargain_max_num").removeClass('layui-hide');
|
||||
$('.bargain_num .layui-form-label').html('<span class="required">*</span>最少帮砍人数:');
|
||||
$('.bargain_num .word-aux').html('<p>最少帮砍人数为该砍价订单最少人数</p>');
|
||||
}else{
|
||||
$("div[name='random']").addClass('layui-hide');
|
||||
$("div[name='fixed']").removeClass('layui-hide');
|
||||
$(".bargain_max_num").addClass('layui-hide');
|
||||
$('.bargain_num .layui-form-label').html('<span class="required">*</span>砍成人数:');
|
||||
$('.bargain_num .word-aux').html('');
|
||||
}
|
||||
});
|
||||
|
||||
var bargain_type = $('input[name="bargain_type"]:checked').val();
|
||||
|
||||
if(bargain_type == 1){
|
||||
$("div[name='random']").removeClass('layui-hide');
|
||||
$("div[name='fixed']").addClass('layui-hide');
|
||||
$(".bargain_max_num").removeClass('layui-hide');
|
||||
$('.bargain_num .layui-form-label').html('<span class="required">*</span>最少帮砍人数:');
|
||||
$('.bargain_num .word-aux').html('<p>最少帮砍人数为该砍价订单最少人数</p>');
|
||||
}else{
|
||||
$("div[name='random']").addClass('layui-hide');
|
||||
$("div[name='fixed']").removeClass('layui-hide');
|
||||
$(".bargain_max_num").addClass('layui-hide');
|
||||
$('.bargain_num .layui-form-label').html('<span class="required">*</span>砍成人数:');
|
||||
$('.bargain_num .word-aux').html('');
|
||||
}
|
||||
|
||||
renderTable(sku_list); // 初始化表格
|
||||
|
||||
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',
|
||||
done: function(value) {
|
||||
minDate = value;
|
||||
reRender();
|
||||
}
|
||||
});
|
||||
}
|
||||
if(now_time <= old_end_time){
|
||||
//结束时间
|
||||
laydate.render({
|
||||
elem: '#end_time', //指定元素
|
||||
type: 'datetime',
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 重新渲染结束时间
|
||||
* */
|
||||
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"> ');
|
||||
laydate.render({
|
||||
elem: '#end_time',
|
||||
type: 'datetime',
|
||||
min: minDate
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 表单验证
|
||||
*/
|
||||
form.verify({
|
||||
int: function(value, item) {
|
||||
var str = $(item).parents(".layui-form-item").find("label").text().split("*").join("");
|
||||
str = str.substring(0, str.length - 1);
|
||||
|
||||
var min = $(item).attr("data-min");
|
||||
var max = $(item).attr("data-max");
|
||||
var unit = $(item).attr("data-unit");
|
||||
|
||||
if (value < Number(min)) {
|
||||
return str + '不能小于' + min + unit;
|
||||
}
|
||||
if (value > Number(max)) {
|
||||
return str + '不能大于' + max + unit;
|
||||
}
|
||||
if (value % 1 != 0) {
|
||||
return str + '必须为整数';
|
||||
}
|
||||
},
|
||||
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 (now_time > end_time) {
|
||||
return '结束时间不能小于当前时间!'
|
||||
}
|
||||
if (end_time < old_end_time) {
|
||||
return '结束时间不能小于之前设置的结束时间!';
|
||||
}
|
||||
if (start_time > end_time) {
|
||||
return '结束时间不能小于开始时间!';
|
||||
}
|
||||
},
|
||||
num: function(value) {
|
||||
if (value < 1 || value % 1 != 0) {
|
||||
return '请输入大于0的正整数!';
|
||||
}
|
||||
},
|
||||
sum: function(value) {
|
||||
if (value < 2 || value % 1 != 0) {
|
||||
return '参团人数不能小于2,且必须是整数!';
|
||||
}
|
||||
},
|
||||
bargain_first: function(value, item) {
|
||||
var price = $(item).parents("tr").find(".bargain-price").text();
|
||||
var min_price = $(item).parents("tr").find("input[lay-verify='min_price']").val();
|
||||
|
||||
if (value == "" || value == 0) {
|
||||
return;
|
||||
}
|
||||
if (value < 0) {
|
||||
return '首刀金额不能小于0';
|
||||
}
|
||||
if (Number(value) >= Number(price)) {
|
||||
return '首刀金额必须小于商品价格';
|
||||
}
|
||||
if ((Number(value) + Number(min_price)) >= Number(price)) {
|
||||
return '首刀金额与底价之和必须小于商品价格';
|
||||
}
|
||||
|
||||
var arrMen = value.split(".");
|
||||
var val = 0;
|
||||
if (arrMen.length == 2) {
|
||||
val = arrMen[1];
|
||||
}
|
||||
if (val.length > 2) {
|
||||
return '首刀金额最多保留两位小数';
|
||||
}
|
||||
},
|
||||
bargain_stock: function(value, item) {
|
||||
var stock = $(item).parents("tr").find(".stock").text();
|
||||
if (value == "" || value == 0) {
|
||||
return;
|
||||
}
|
||||
if (Number(value) < 0) {
|
||||
return '砍价库存不能小于0';
|
||||
}
|
||||
if (Number(value) > Number(stock)) {
|
||||
return '砍价库存不能大于商品总库存';
|
||||
}
|
||||
if (value % 1 != 0) {
|
||||
return '砍价库存必须为整数';
|
||||
}
|
||||
},
|
||||
min_price: function(value, item) {
|
||||
var price = $(item).parents("tr").find(".bargain-price").text();
|
||||
|
||||
if (value == "" || value == 0) {
|
||||
return;
|
||||
}
|
||||
if (Number(value) < 0) {
|
||||
return '商品底价不能小于0';
|
||||
}
|
||||
if (Number(value) > Number(price)) {
|
||||
return '商品底价不能大于商品价格';
|
||||
}
|
||||
|
||||
var arrMen = value.split(".");
|
||||
var val = 0;
|
||||
if (arrMen.length == 2) {
|
||||
val = arrMen[1];
|
||||
}
|
||||
if (val.length > 2) {
|
||||
return '商品底价最多保留两位小数';
|
||||
}
|
||||
},
|
||||
bargain_max_num: function(value, item) {
|
||||
var bargain_type = $('input[name="bargain_type"]:checked').val();
|
||||
if(bargain_type == 1) {
|
||||
if (value == "" || value == 0) {
|
||||
return;
|
||||
}
|
||||
if (Number(value) < 0) {
|
||||
return '砍成人数不能小于0';
|
||||
}
|
||||
if (value % 1 != 0) {
|
||||
return '砍成人数必须为整数';
|
||||
}
|
||||
var bargain_num = $('input[name="bargain_num"]').val();
|
||||
|
||||
if (Number(value) <= Number(bargain_num)) {
|
||||
return '砍成人数不能小于最少帮砍人数';
|
||||
}
|
||||
}
|
||||
},
|
||||
help_bargain_num: function (value, item){
|
||||
if (value == "" || value == 0) {
|
||||
return;
|
||||
}
|
||||
if (Number(value) < 0) {
|
||||
return '最大帮砍次数不能小于0';
|
||||
}
|
||||
if (value % 1 != 0) {
|
||||
return '最大帮砍次数必须为整数';
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听提交
|
||||
*/
|
||||
form.on('submit(save)', function(data){
|
||||
|
||||
data.field.sku_ids = [];
|
||||
data.field.goods_id = sku_list[0].goods_id;
|
||||
sku_list.forEach(function (item,index) {
|
||||
if (item.is_delete == 2) return false;
|
||||
data.field.sku_ids.push(item.sku_id);
|
||||
});
|
||||
|
||||
if (data.field.sku_ids.length == 0) {
|
||||
layer.msg("请选择参与活动商品!", {icon: 5, anim: 6});
|
||||
return;
|
||||
}
|
||||
|
||||
var skuLisArr = [];
|
||||
sku_list.forEach(function(item,index) {
|
||||
var sku_detail = {};
|
||||
sku_detail.sku_id = item.sku_id;
|
||||
sku_detail.goods_id = item.goods_id;
|
||||
sku_detail.first_bargain_price = item.first_bargain_price || 0.00;
|
||||
sku_detail.bargain_stock = item.bargain_stock || item.stock;
|
||||
sku_detail.floor_price = item.floor_price || 0.00;
|
||||
sku_detail.is_delete = item.is_delete || 1;
|
||||
skuLisArr.push(sku_detail);
|
||||
});
|
||||
data.field.sku_list = skuLisArr;
|
||||
|
||||
if(repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("bargain://shop/bargain/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("bargain://shop/bargain/lists");
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
// 表格渲染
|
||||
function renderTable(sku_list) {
|
||||
//展示已知数据
|
||||
table = new Table({
|
||||
elem: '#selected_goods_list',
|
||||
page: false,
|
||||
limit: Number.MAX_VALUE,
|
||||
cols: [
|
||||
[{
|
||||
width: "3%",
|
||||
type: 'checkbox',
|
||||
unresize: 'false'
|
||||
},{
|
||||
title: '商品名称',
|
||||
width: '23%',
|
||||
unresize: 'false',
|
||||
templet: function(data) {
|
||||
var html = '';
|
||||
html += `
|
||||
<div class="goods-title">
|
||||
<div class="goods-img">
|
||||
<img layer-src src="${data.sku_image ? ns.img(data.sku_image) : ''}" alt="">
|
||||
</div>
|
||||
<p class="multi-line-hiding goods-name" data-goods_id="${data.goods_id}" data-sku_id="${data.sku_id}" title="${data.sku_name}">${data.sku_name}</p>
|
||||
</div>
|
||||
`;
|
||||
return html;
|
||||
}
|
||||
}, {
|
||||
field: 'price',
|
||||
title: '商品价格',
|
||||
unresize: 'false',
|
||||
width: '12%',
|
||||
templet: function(data) {
|
||||
return '<p class="line-hiding" title="'+ data.price +'">¥<span class="bargain-price">' + data.price +'</span></p>';
|
||||
}
|
||||
}, {
|
||||
field: 'stock',
|
||||
title: '库存',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
templet: function(data) {
|
||||
return '<p class="stock">' + data.stock +'</p>';
|
||||
}
|
||||
}, {
|
||||
title: '<span title="首刀金额自定义">首刀金额自定义</span>',
|
||||
unresize: 'false',
|
||||
width: '16%',
|
||||
templet: '#bargainFirst'
|
||||
}, {
|
||||
title: '砍价库存',
|
||||
unresize: 'false',
|
||||
width: '13%',
|
||||
templet: '#bargainStock'
|
||||
}, {
|
||||
title: '底价',
|
||||
unresize: 'false',
|
||||
width: '13%',
|
||||
templet: '#minPrice'
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align:'right'
|
||||
}]
|
||||
],
|
||||
data: sku_list,
|
||||
toolbar: '#toolbarOperation'
|
||||
});
|
||||
|
||||
/**
|
||||
* 批量操作
|
||||
*/
|
||||
table.toolbar(function(obj) {
|
||||
if (obj.data.length < 1) {
|
||||
layer.msg('请选择要操作的数据');
|
||||
return;
|
||||
}
|
||||
switch (obj.event) {
|
||||
case "money":
|
||||
editInput(0,obj);
|
||||
break;
|
||||
case "bargain-stock":
|
||||
editInput(1,obj);
|
||||
break;
|
||||
case "floor-price":
|
||||
editInput(2,obj);
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function editInput(textIndex=0,data) {
|
||||
var text = [{
|
||||
name: '首刀金额',
|
||||
value: 'first_bargain_price'
|
||||
},{
|
||||
name: '砍价库存',
|
||||
value: 'bargain_stock'
|
||||
},{
|
||||
name: '底价',
|
||||
value: 'floor_price'
|
||||
}];
|
||||
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) {
|
||||
sku_list.forEach(function (skuItem,skuIndex) {
|
||||
if (item.sku_id == skuItem.sku_id){
|
||||
sku_list[skuIndex][text[textIndex].value] = val;
|
||||
}
|
||||
})
|
||||
});
|
||||
renderTable(sku_list);
|
||||
layer.closeAll();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function bargainFirst(index,event) {
|
||||
sku_list[index-1].first_bargain_price = event.srcElement.value;
|
||||
}
|
||||
|
||||
function bargainStock(index,event) {
|
||||
sku_list[index-1].bargain_stock = event.srcElement.value;
|
||||
}
|
||||
|
||||
function bargainMinPrice(index,event) {
|
||||
sku_list[index-1].floor_price = event.srcElement.value;
|
||||
}
|
||||
function backBargainList() {
|
||||
location.hash = ns.hash("bargain://shop/bargain/lists");
|
||||
}
|
||||
$("body").off("click",".no-participation").on("click",".no-participation",function(){
|
||||
$(this).text("参与");
|
||||
$(this).parents("tr").find("input").each(function (index,item) {
|
||||
$(item).attr("readonly",true);
|
||||
$(item).attr("disabled",true);
|
||||
$(item).addClass("forbidden");
|
||||
});
|
||||
$(this).addClass("participation").removeClass("no-participation");
|
||||
sku_list[$(this).parents("tr").attr("data-index")].is_delete = 2;
|
||||
});
|
||||
|
||||
$("body").off("click",".participation").on("click",".participation",function(){
|
||||
$(this).text("不参与");
|
||||
$(this).parents("tr").find("input").each(function (index,item) {
|
||||
$(item).attr("readonly",false);
|
||||
$(item).attr("disabled",false);
|
||||
$(item).removeClass("forbidden");
|
||||
});
|
||||
$(this).removeClass("participation").addClass("no-participation");
|
||||
sku_list[$(this).parents("tr").attr("data-index")].is_delete = 1;
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="bargainFirst">
|
||||
{{# if(!d.bargain_stock){ }}
|
||||
<input type="number" class="layui-input len-input bargain-first forbidden" value="{{d.first_bargain_price}}" lay-verify="bargain_first" min="0.00" oninput="bargainFirst({{ d.LAY_INDEX }},event)" onporpertychange="bargainFirst({{ d.LAY_INDEX }},event)" readonly disabled/>
|
||||
{{# }else{ }}
|
||||
<input type="number" class="layui-input len-input bargain-first" value="{{d.first_bargain_price}}" lay-verify="bargain_first" min="0.00" oninput="bargainFirst({{ d.LAY_INDEX }},event)" onporpertychange="bargainFirst({{ d.LAY_INDEX }},event)"/>
|
||||
{{# } }}
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="bargainStock">
|
||||
{{# if(!d.bargain_stock){ }}
|
||||
<input type="number" class="layui-input len-input bargain-stock forbidden" value="{{d.bargain_stock}}" lay-verify="bargain_stock" min="0" oninput="bargainStock({{ d.LAY_INDEX }},event)" onporpertychange="bargainStock({{ d.LAY_INDEX }},event)" readonly disabled/>
|
||||
{{# }else{ }}
|
||||
<input type="number" class="layui-input len-input bargain-stock" value="{{d.bargain_stock}}" lay-verify="bargain_stock" min="0" oninput="bargainStock({{ d.LAY_INDEX }},event)" onporpertychange="bargainStock({{ d.LAY_INDEX }},event)"/>
|
||||
{{# } }}
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="minPrice">
|
||||
{{# if(!d.bargain_stock){ }}
|
||||
<input type="number" class="layui-input len-input min-price forbidden" value="{{d.floor_price}}" lay-verify="min_price" min="0.00" oninput="bargainMinPrice({{ d.LAY_INDEX }},event)" onporpertychange="bargainMinPrice({{ d.LAY_INDEX }},event)" readonly disabled/>
|
||||
{{# }else{ }}
|
||||
<input type="number" class="layui-input len-input min-price" value="{{d.floor_price}}" lay-verify="min_price" min="0.00" oninput="bargainMinPrice({{ d.LAY_INDEX }},event)" onporpertychange="bargainMinPrice({{ d.LAY_INDEX }},event)"/>
|
||||
{{# } }}
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
{{# if(!d.bargain_stock){ }}
|
||||
<a class="layui-btn participation">参与</a>
|
||||
{{# }else{ }}
|
||||
<a class="layui-btn no-participation">不参与</a>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
133
addon/bargain/shop/view/bargain/launch_detail.html
Executable file
133
addon/bargain/shop/view/bargain/launch_detail.html
Executable file
@@ -0,0 +1,133 @@
|
||||
<style>
|
||||
.layui-table[lay-skin=line] {margin-top: 15px; border-width: 0;}
|
||||
.title-pic{flex-shrink: 0;display: inline-block;width: 50px;height: 50px;text-align: center;line-height: 50px;margin-left: 5px;}
|
||||
.layui-layout-admin .layui-table-header{background-color: transparent;}
|
||||
.layui-layout-admin .layui-table-view .layui-table-body .layui-table[lay-skin=line]{margin-top: 0;}
|
||||
</style>
|
||||
|
||||
<div class="layui-form tips-wrap">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">发起人信息:</label>
|
||||
<div class="table-title layui-input-inline">
|
||||
<div class="title-pic">
|
||||
<img layer-src src="{:img($info['headimg'])}" onerror="this.src = '{:img('public/static/img/default_img/head.png')}' "/>
|
||||
</div>
|
||||
<div class="title-content">
|
||||
<a href="javascript:;" class="multi-line-hiding text-color" title="{$info['nickname']}">{$info['nickname']}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品信息:</label>
|
||||
<div class="table-title layui-input-inline">
|
||||
<div class="title-pic">
|
||||
<img layer-src src="{:img($info['sku_image'])}"/>
|
||||
</div>
|
||||
<div class="title-content">
|
||||
<a href="javascript:;" class="multi-line-hiding text-color" title="{$info['sku_name']}">{$info['sku_name']}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">发起砍价时间:</label>
|
||||
<div class="layui-input-inline">{:time_to_date($info.start_time)}</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">最少砍价数/已砍人数:</label>
|
||||
<div class="layui-input-inline">{$info.need_num} / {$info.curr_num}</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">底价:</label>
|
||||
<div class="layui-input-inline">¥{$info.floor_price}</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">结束时间:</label>
|
||||
<div class="layui-input-inline">{:time_to_date($info.end_time)}</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">砍价状态:</label>
|
||||
<div class="layui-input-inline">
|
||||
{if $info.status == 2}
|
||||
砍价失败
|
||||
{elseif $info.status == 0}
|
||||
砍价中
|
||||
{else/}
|
||||
砍价成功
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 列表 -->
|
||||
<table id="order_list" lay-filter="order_list"></table>
|
||||
|
||||
<!-- 参与人 -->
|
||||
<script type="text/html" id="member_info">
|
||||
<div class="table-title">
|
||||
<div class="title-pic">
|
||||
{{# if(d.headimg){ }}
|
||||
<img layer-src src="{{ns.img(d.headimg)}}" onerror="this.src = '{:img('public/static/img/default_img/head.png')}' "/>
|
||||
{{# } else{ }}
|
||||
<img layer-src src="{:img('public/static/img/default_img/head.png')}"/>
|
||||
{{# } }}
|
||||
</div>
|
||||
<div class="title-content">
|
||||
<a href="javascript:;" class="multi-line-hiding text-color" title="{{d.nickname}}">{{d.nickname}}</a>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var launch_id = "{$launch_id}";
|
||||
|
||||
layui.use(['form'], function() {
|
||||
var table,form = layui.form;
|
||||
form.render();
|
||||
|
||||
table = new Table({
|
||||
elem: '#order_list',
|
||||
url: ns.url("bargain://shop/bargain/launchdetail"),
|
||||
where: {
|
||||
"launch_id": launch_id
|
||||
},
|
||||
cols: [
|
||||
[{
|
||||
title: '帮砍人信息',
|
||||
unresize: 'false',
|
||||
templet:'#member_info'
|
||||
}, {
|
||||
title: '帮砍金额',
|
||||
unresize: 'false',
|
||||
templet:function(data){
|
||||
return '¥' + data.money;
|
||||
}
|
||||
}, {
|
||||
title: '帮砍时间',
|
||||
unresize: 'false',
|
||||
templet: function(data) {
|
||||
return ns.time_to_date(data.bargain_time);
|
||||
}
|
||||
}]
|
||||
],
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function(obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'check': //查看
|
||||
window.open(ns.href("shop/order/detail", {"order_id": data.order_id}));
|
||||
break;
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
263
addon/bargain/shop/view/bargain/launch_list.html
Executable file
263
addon/bargain/shop/view/bargain/launch_list.html
Executable file
@@ -0,0 +1,263 @@
|
||||
<style>
|
||||
.layui-layout-admin .screen{margin-bottom: 15px;}
|
||||
.layui-layout-admin .layui-form-item .layui-input-inline{background-color: #fff;}
|
||||
</style>
|
||||
|
||||
{if condition="$bargain_id"}
|
||||
<input type="hidden" class="bargain-id" value="{$bargain_id}" />
|
||||
{else/}
|
||||
<input type="hidden" class="bargain-id" value="" />
|
||||
{/if}
|
||||
|
||||
<div class="screen layui-collapse" lay-filter="selection_panel">
|
||||
<div class="layui-colla-item">
|
||||
<form class="layui-form layui-colla-content layui-form layui-show" lay-filter="order_list">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">商品名称</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" name="goods_name">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">会员昵称</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" name="nickname">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">砍价状态</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="status" lay-filter="status">
|
||||
<option value="">全部</option>
|
||||
<option value="1">砍价成功</option>
|
||||
<option value="0">砍价中</option>
|
||||
<option value="2">砍价失败</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<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>
|
||||
<button class="layui-btn layui-btn-primary date-picker-btn" onclick="datePick(7, this);return false;">近7天</button>
|
||||
<button class="layui-btn layui-btn-primary date-picker-btn" onclick="datePick(30, this);return false;">近30天</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="search">筛选</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<table id="team_list" lay-filter="team_list"></table>
|
||||
|
||||
<!-- 商品 -->
|
||||
<script type="text/html" id="goods">
|
||||
<div class="table-title">
|
||||
<div class="title-pic">
|
||||
{{# if(d.sku_image){ }}
|
||||
<img layer-src="{{ns.img(d.sku_image.split(',')[0],'big')}}" src="{{ns.img(d.sku_image.split(',')[0],'small')}}"/>
|
||||
{{# } }}
|
||||
</div>
|
||||
|
||||
<div class="title-content">
|
||||
<a href="javascript:;" class="multi-line-hiding text-color-sub" title="{{d.sku_name}}">{{d.sku_name}}</a>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 会员 -->
|
||||
<script type="text/html" id="member_info">
|
||||
<div class="table-title">
|
||||
<div class="title-pic">
|
||||
{{# if(d.headimg){ }}
|
||||
<img layer-src src="{{ns.img(d.headimg)}}"/>
|
||||
{{# }else if(d.headimg == ''){ }}
|
||||
<img layer-src src="{:img('public/static/img/default_img/head.png')}">
|
||||
{{# } }}
|
||||
</div>
|
||||
<!-- <div class='title-pic'>
|
||||
<img layer-src src="{{ns.img(d.sku_image.split(',')[0],'small')}}" onerror="this.src = '{:img('public/static/img/default_img/head.png')}' ">
|
||||
</div> -->
|
||||
<div class="title-content">
|
||||
<a href="javascript:;" class="multi-line-hiding text-color-sub" title="{{d.nickname}}">{{d.nickname}}</a>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 状态 -->
|
||||
<script type="text/html" id="status">
|
||||
{{# if(d.status == 0){ }}
|
||||
砍价中
|
||||
{{# }else if(d.status == 1){ }}
|
||||
砍价成功
|
||||
{{# }else if(d.status == 2){ }}
|
||||
砍价失败
|
||||
{{# } }}
|
||||
</script>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="record">帮砍记录</a>
|
||||
{{# if(d.status == 1 && d.order_id > 0){ }}
|
||||
<a class="layui-btn" lay-event="order">查看订单</a>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
layui.use(['form', 'element', 'laydate'], function() {
|
||||
var table,
|
||||
form = layui.form,
|
||||
laydate = layui.laydate;
|
||||
|
||||
form.render();
|
||||
|
||||
//渲染时间
|
||||
laydate.render({
|
||||
elem: '#start_time'
|
||||
,type: 'datetime'
|
||||
,change: function(value, date, endDate){
|
||||
$(".date-picker-btn").removeClass("selected");
|
||||
}
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#end_time'
|
||||
,type: 'datetime'
|
||||
,change: function(value, date, endDate){
|
||||
$(".date-picker-btn").removeClass("selected");
|
||||
}
|
||||
});
|
||||
|
||||
table = new Table({
|
||||
elem: '#team_list',
|
||||
url: ns.url("bargain://shop/bargain/launchlist"),
|
||||
where: {
|
||||
"bargain_id": $(".bargain-id").val()
|
||||
},
|
||||
cols: [
|
||||
[ {
|
||||
title: '会员信息',
|
||||
unresize: 'false',
|
||||
width: '12%',
|
||||
templet: '#member_info'
|
||||
},{
|
||||
title: '砍价商品',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
templet: '#goods'
|
||||
}, {
|
||||
title: '发起砍价时间',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
templet:function(data){
|
||||
return ns.time_to_date(data.start_time);
|
||||
}
|
||||
}, {
|
||||
title: '最少砍价数/已砍人数',
|
||||
unresize: 'false',
|
||||
align:'center',
|
||||
width: '12%',
|
||||
templet: function(data) {
|
||||
return data.need_num + ' / ' + data.curr_num;
|
||||
}
|
||||
}, {
|
||||
title: '底价',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
templet: function(data) {
|
||||
return '¥' + data.floor_price;
|
||||
}
|
||||
}, {
|
||||
title: '结束时间',
|
||||
unresize: 'false',
|
||||
width: '12%',
|
||||
templet: function(data) {
|
||||
return ns.time_to_date(data.end_time);
|
||||
}
|
||||
}, {
|
||||
title: '砍价状态',
|
||||
unresize: 'false',
|
||||
width: '8%',
|
||||
templet: '#status'
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align : 'right'
|
||||
}]
|
||||
],
|
||||
|
||||
});
|
||||
|
||||
//监听筛选事件
|
||||
form.on('submit(search)', function(data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function(obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'record': //帮砍记录
|
||||
location.hash = ns.hash("bargain://shop/bargain/launchdetail?launch_id="+ data.launch_id);
|
||||
break;
|
||||
case 'order': //订单
|
||||
window.open(ns.href("shop/order/detail", {"order_id": data.order_id}));
|
||||
break;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function datePick(date_num,event_obj){
|
||||
$(".date-picker-btn").removeClass("selected");
|
||||
$(event_obj).addClass('selected');
|
||||
|
||||
Date.prototype.Format = function (fmt,date_num) { //author: meizz
|
||||
this.setDate(this.getDate()-date_num);
|
||||
var o = {
|
||||
"M+": this.getMonth() + 1, //月份
|
||||
"d+": this.getDate(), //日
|
||||
"H+": this.getHours(), //小时
|
||||
"m+": this.getMinutes(), //分
|
||||
"s+": this.getSeconds(), //秒
|
||||
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
|
||||
"S": this.getMilliseconds() //毫秒
|
||||
};
|
||||
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
|
||||
for (var k in o)
|
||||
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
|
||||
return fmt;
|
||||
};
|
||||
var now_time = new Date().Format("yyyy-MM-dd 23:59:59",0);//当前日期
|
||||
var before_time = new Date().Format("yyyy-MM-dd 00:00:00",date_num-1);//前几天日期
|
||||
$("input[name=start_time]").val(before_time,0);
|
||||
$("input[name=end_time]").val(now_time,date_num-1);
|
||||
}
|
||||
</script>
|
||||
136
addon/bargain/shop/view/bargain/lists.html
Executable file
136
addon/bargain/shop/view/bargain/lists.html
Executable file
@@ -0,0 +1,136 @@
|
||||
<link rel="stylesheet" type="text/css" href="SHOP_ADDON_CSS/list.css" />
|
||||
|
||||
<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="bargain_tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this" data-status="">全部</li>
|
||||
{foreach $bargain_status as $k=>$v}
|
||||
<li data-status="{$k}">{$v}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
<div class="layui-tab-content">
|
||||
<!-- 列表 -->
|
||||
<table id="bargain_list" lay-filter="bargain_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 商品 -->
|
||||
<script type="text/html" id="goods_info">
|
||||
<div class="table-title">
|
||||
|
||||
<div class="contraction" data-id="{{d.bargain_id}}" data-open="0">
|
||||
<span>+</span>
|
||||
</div>
|
||||
|
||||
<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>
|
||||
|
||||
<!-- 推广 -->
|
||||
{include file="app/shop/view/component/promote_show.html"}
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="operation-wrap" data-bargain-id="{{d.bargain_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 == 1){ }}
|
||||
<a class="layui-btn text-color" lay-event="select">推广</a>
|
||||
{{# } }}
|
||||
<a class="layui-btn" lay-event="detail">详情</a>
|
||||
<a class="layui-btn" lay-event="edit">编辑</a>
|
||||
{{# if(d.status == 0){ }}
|
||||
<a class="layui-btn" lay-event="del">删除</a>
|
||||
{{# }else if(d.status == 1){ }}
|
||||
<a class="layui-btn" lay-event="launch">砍价列表</a>
|
||||
<a class="layui-btn" lay-event="close">结束</a>
|
||||
{{# }else{ }}
|
||||
<a class="layui-btn" lay-event="launch">砍价列表</a>
|
||||
<a class="layui-btn" lay-event="del">删除</a>
|
||||
{{# } }}
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 批量操作 -->
|
||||
<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="invalid">批量关闭</button>
|
||||
</script>
|
||||
|
||||
<!-- 商品sku -->
|
||||
<script type="text/html" id="skuList">
|
||||
<tr class="js-list-{{d.index}}" id="sku_img_{{d.index}}">
|
||||
<td colspan="10">
|
||||
<ul class="sku-list">
|
||||
{{# for(var i=0; i<d.list.length; i++){ }}
|
||||
<li>
|
||||
<div class="img-wrap">
|
||||
<img layer-src src="{{ns.img(d.list[i].sku_image)}}">
|
||||
</div>
|
||||
<div class="info-wrap">
|
||||
<span class="sku-name" title="{{d.list[i].sku_name}}">{{d.list[i].sku_name}}</span>
|
||||
<span class="price">商品价格:¥{{d.list[i].price}}</span>
|
||||
<span class="price">底价:¥{{d.list[i].floor_price}}</span>
|
||||
<span class="price">库存:¥{{d.list[i].bargain_stock}}</span>
|
||||
<span class="sale_num">销量:{{d.list[i].sale_num}}</span>
|
||||
<span class="sale_num">参与人数:{{d.list[i].join_num}}</span>
|
||||
</div>
|
||||
</li>
|
||||
{{# } }}
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</script>
|
||||
|
||||
<script type="text/javascript" src="SHOP_ADDON_JS/list.js?time=20240603" ></script>
|
||||
4
addon/bargain/shop/view/public/css/list.css
Executable file
4
addon/bargain/shop/view/public/css/list.css
Executable file
@@ -0,0 +1,4 @@
|
||||
.screen{margin-bottom: 15px;}
|
||||
.contraction span{cursor: pointer;display: inline-block;width: 17px;height: 17px;text-align: center;line-height: 14px;user-select: none;}
|
||||
.screen .layui-colla-content .goods-category-container .layui-input{width: 240px !important;}
|
||||
.layui-layout-admin .layui-form-item .layui-input-inline{background-color: #fff;}
|
||||
BIN
addon/bargain/shop/view/public/img/zone_preview.png
Executable file
BIN
addon/bargain/shop/view/public/img/zone_preview.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 120 KiB |
355
addon/bargain/shop/view/public/js/list.js
Executable file
355
addon/bargain/shop/view/public/js/list.js
Executable file
@@ -0,0 +1,355 @@
|
||||
var laytpl;
|
||||
$(function () {
|
||||
$("body").off("click", ".contraction").on("click", ".contraction", function () {
|
||||
var bargain_id = $(this).attr("data-id");
|
||||
var open = $(this).attr("data-open");
|
||||
var tr = $(this).parent().parent().parent().parent();
|
||||
var index = tr.attr("data-index");
|
||||
if (open == 1) {
|
||||
$(this).children("span").text("+");
|
||||
$(".js-list-" + index).remove();
|
||||
} else {
|
||||
$(this).children("span").text("-");
|
||||
$.ajax({
|
||||
url: ns.url("bargain://shop/bargain/getSkuList"),
|
||||
data: {bargain_id: bargain_id},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
async: false,
|
||||
success: function (res) {
|
||||
var sku_list = $("#skuList").html();
|
||||
var data = {
|
||||
list: res.data,
|
||||
index: index
|
||||
};
|
||||
laytpl(sku_list).render(data, function (html) {
|
||||
tr.after(html);
|
||||
});
|
||||
layer.photos({
|
||||
photos: '.img-wrap',
|
||||
anim: 5
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
$(this).attr("data-open", (open == 0 ? 1 : 0));
|
||||
});
|
||||
|
||||
layui.use(['form', 'element', 'laytpl', 'laydate'], function () {
|
||||
laytpl = layui.laytpl;
|
||||
var table,
|
||||
form = layui.form,
|
||||
element = layui.element,
|
||||
laydate = layui.laydate,
|
||||
repeat_flag = false; //防重复标识
|
||||
form.render();
|
||||
|
||||
element.on('tab(bargain_tab)', function () {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: {
|
||||
'status': this.getAttribute('data-status')
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//开始时间
|
||||
laydate.render({
|
||||
elem: '#start_time', //指定元素
|
||||
type: 'datetime'
|
||||
});
|
||||
//结束时间
|
||||
laydate.render({
|
||||
elem: '#end_time', //指定元素
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
table = new Table({
|
||||
elem: '#bargain_list',
|
||||
url: ns.url("bargain://shop/bargain/lists"),
|
||||
cols: [
|
||||
[{
|
||||
type: 'checkbox',
|
||||
width: '3%',
|
||||
},{
|
||||
title: '商品信息',
|
||||
unresize: 'false',
|
||||
width: '25%',
|
||||
templet: '#goods_info'
|
||||
}, {
|
||||
title: '商品价格',
|
||||
unresize: 'false',
|
||||
width: '8%',
|
||||
templet: function (data) {
|
||||
return '¥' + data.price;
|
||||
}
|
||||
}, {
|
||||
field: 'floor_price',
|
||||
title: '底价',
|
||||
unresize: 'false',
|
||||
width: '7%',
|
||||
sort : true,
|
||||
templet: function (data) {
|
||||
return '¥' + data.floor_price;
|
||||
}
|
||||
}, {
|
||||
field: 'join_num',
|
||||
title: '参与人数',
|
||||
unresize: 'false',
|
||||
width: '7%',
|
||||
sort : true
|
||||
}, {
|
||||
field: 'sale_num',
|
||||
title: '砍价成功人数',
|
||||
unresize: 'false',
|
||||
width: '8%',
|
||||
sort : true
|
||||
}, {
|
||||
field: 'bargain_stock',
|
||||
title: '砍价总库存',
|
||||
unresize: 'false',
|
||||
width: '7%'
|
||||
// }, {
|
||||
// title: '库存剩余',
|
||||
// unresize: 'false',
|
||||
// width: '8%',
|
||||
// templet: function (data) {
|
||||
// return data.bargain_stock - data.sale_num;
|
||||
// }
|
||||
}, {
|
||||
title: '活动时间',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
templet: '#time'
|
||||
}, {
|
||||
field: 'status_name',
|
||||
title: '状态',
|
||||
unresize: 'false',
|
||||
width: '8%'
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align:'right',
|
||||
}]
|
||||
],
|
||||
toolbar: '#toolbarAction'
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function (data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
});
|
||||
|
||||
table.on("sort",function (obj) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: {
|
||||
order:obj.field,
|
||||
sort:obj.type
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//监听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 bargainIdAll = [];
|
||||
for (var i in data){
|
||||
bargainIdAll.push(data[i].bargain_id);
|
||||
}
|
||||
|
||||
switch (obj.event) {
|
||||
case 'delete':
|
||||
deleteBargainAll(bargainIdAll)
|
||||
break;
|
||||
case 'invalid':
|
||||
closeBargainAll(bargainIdAll)
|
||||
break;
|
||||
}
|
||||
})
|
||||
|
||||
//批量删除
|
||||
function deleteBargainAll(data){
|
||||
layer.confirm('确定要删除砍价活动吗?', function (index) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
layer.close(index);
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("bargain://shop/bargain/deleteAll"),
|
||||
data: {
|
||||
bargain_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 closeBargainAll(data){
|
||||
layer.confirm('确定要结束砍价活动吗?', function (index) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
layer.close(index);
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("bargain://shop/bargain/finishAll"),
|
||||
data: {
|
||||
bargain_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 'detail': //详情
|
||||
location.hash = ns.hash("bargain://shop/bargain/detail", {"bargain_id": data.bargain_id});
|
||||
break;
|
||||
case 'edit': //编辑
|
||||
location.hash = ns.hash("bargain://shop/bargain/edit", {"bargain_id": data.bargain_id});
|
||||
break;
|
||||
case 'del': //删除
|
||||
deleteGroupbuy(data.bargain_id);
|
||||
break;
|
||||
case 'select': //推广
|
||||
bargainUrl(data);
|
||||
break;
|
||||
case 'close': // 结束
|
||||
closeGroupbuy(data.bargain_id);
|
||||
break;
|
||||
case 'launch': //砍价列表
|
||||
location.hash = ns.hash("bargain://shop/bargain/launchlist", {"bargain_id": data.bargain_id});
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
function deleteGroupbuy(bargain_id) {
|
||||
layer.confirm('确定要删除该砍价活动吗?', function (index) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
layer.close(index);
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("bargain://shop/bargain/delete"),
|
||||
data: {
|
||||
bargain_id: bargain_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(bargain_id) {
|
||||
|
||||
layer.confirm('确定要结束该砍价活动吗?', function (index) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
layer.close(index);
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("bargain://shop/bargain/finish"),
|
||||
data: {
|
||||
bargain_id: bargain_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 bargainUrl(data){
|
||||
new PromoteShow({
|
||||
url:ns.url("bargain://shop/bargain/bargainurl"),
|
||||
param:{bargain_id:data.bargain_id},
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
function add() {
|
||||
location.hash = ns.hash("bargain://shop/bargain/add");
|
||||
}
|
||||
Reference in New Issue
Block a user