【增加】秒杀配置

【增加】秒杀列表接口
This commit is contained in:
liqianjin 2023-02-27 14:37:52 +08:00
parent d6520a1fd0
commit 0aa1f234ef
4 changed files with 375 additions and 6 deletions

View File

@ -6,21 +6,127 @@ use addon\futures\model\Futures as FuturesModel;
class Futures extends BaseApi{
/**
* 列表
* 售卖列表
* @return false|string
*/
public function list()
{
return $this->response();
$token = $this->checkToken();
if ($token['code'] < 0) return $this->response($token);
$fenxiao = model('fenxiao')->getInfo([['member_id', '=', $this->member_id]]);
// $is_read = FALSE;
// if(empty($fenxiao) || $fenxiao['diamond'] < 0){
// $is_read =
// }//TODO 判断当前时间是否在秒杀开启时间,并区分有无钻石用户
$status = input('status', 'miaosha');
$condition = [
['a.site_id','=',$this->site_id]
];
switch($status){
case 'miaosha':
$condition[] = ['status', '=', '2'];
break;
case 'jianlou':
$condition[] = ['status', '=', '7'];
break;
default:
$condition[] = ['status', '=', '2'];
break;
}
// 获取内容
$field = [
'seller.username as seller_username',
'seller.nickname as seller_nickname',
'seller.headimg as seller_headimg',
'g.goods_name',
'g.goods_image',
'a.id',
'a.total',
'a.unit_price',
'a.price',
'a.status',
'a.release_time',
'a.sell_time',
'a.created_time',
'a.take_time',
];
// 表关联
$join = [
['member seller', 'seller.member_id = a.seller_uid', 'left'],// 获取卖家信息
['goods g', 'g.goods_id = a.goods_id', 'left'],// 获取商品信息
];
$futuresModel = new FuturesModel;
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$list = $futuresModel->getPageList($condition, $page, $page_size, 'a.created_time desc,a.id desc', $field, 'a', $join);
return $this->response($list);
}
/**
* 列表
* 个人中心列表
* @return false|string
*/
public function myList()
{
return $this->response();
$token = $this->checkToken();
if ($token['code'] < 0) return $this->response($token);
$status = input('status', 'all');
$condition = [
['a.seller_uid', '=', $this->member_id],
['a.site_id','=',$this->site_id]
];
switch($status){
case 'stock':
$condition[] = ['a.status', '=', '1'];
break;
case 'release':
$condition[] = ['a.status', 'in', [2, 6, 7]];
break;
case 'sold':
$condition[] = ['a.status', '=', '3'];
break;
default:
break;
}
// 获取内容
$field = [
'seller.username as seller_username',
'seller.nickname as seller_nickname',
'seller.headimg as seller_headimg',
'g.goods_name',
'g.goods_image',
'a.id',
'a.total',
'a.unit_price',
'a.price',
'a.status',
'a.release_time',
'a.sell_time',
'a.created_time',
'a.take_time',
];
// 表关联
$join = [
['member seller', 'seller.member_id = a.seller_uid', 'left'],// 获取卖家信息
['goods g', 'g.goods_id = a.goods_id', 'left'],// 获取商品信息
];
$futuresModel = new FuturesModel;
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$list = $futuresModel->getPageList($condition, $page, $page_size, 'a.created_time desc,a.id desc', $field, 'a', $join);
return $this->response($list);
}
/**
@ -29,10 +135,21 @@ class Futures extends BaseApi{
*/
public function release()
{
//TODO 身份验证,拆单
$token = $this->checkToken();
if ($token['code'] < 0) return $this->response($token);
$id = input('id', 0);
$price = input('price', 0);
$date = model('futures')->getInfo([['id', '=', $id],['seller_uid' => $this->member_id]]);
if(empty($date)){
return $this->response($this->error('','发布失败'));
}
if($price <= $date['unit_price'] * (1 + 0 / 100) || $price >= $date['unit_price'] * (1 + 8 / 100)){//TODO 后台配置范围
return $this->response($this->error('','发布失败'));
}
//TODO 拆单
$futuresModel = new FuturesModel;
return $this->response($futuresModel->release($id, $price));
}
@ -42,11 +159,20 @@ class Futures extends BaseApi{
* @return false|string
*/
public function stock(){
//TODO 身份验证
$token = $this->checkToken();
if ($token['code'] < 0) return $this->response($token);
$id = input('id', 0);
$date = model('futures')->getInfo([['id', '=', $id],['seller_uid' => $this->member_id]]);
if(empty($date)){
return $this->response($this->error('','下架失败'));
}
$futuresModel = new FuturesModel;
return $this->response($futuresModel->stock($id));
}
//TODO 提货
}

View File

@ -1,6 +1,7 @@
<?php
namespace addon\futures\model;
use app\model\system\Config as ConfigModel;
use app\model\BaseModel;
use think\facade\Cache;
@ -128,4 +129,28 @@ class Futures extends BaseModel{
Cache::store('redis_concurrent')->set('addon_futures_'.$id,'1');
return $this->success();
}
/**
* 写入基本设置
* @param $data
* @param $is_use
* @param $site_id
* @return array
*/
public function setBasicsConfig($data, $is_use, $site_id)
{
$config = new ConfigModel();
return $config->setConfig($data, '秒杀基本配置', $is_use, [['site_id', '=', $site_id], ['app_module', '=', 'shop'], ['config_key', '=', 'MIAOSHA_BASICS_CONFIG']]);
}
/**
* 读取基本设置
* @param $site_id
* @return array
*/
public function getBasicsConfig($site_id)
{
$config = new ConfigModel();
return $config->getConfig([['site_id', '=', $site_id], ['app_module', '=', 'shop'], ['config_key', '=', 'MIAOSHA_BASICS_CONFIG']]);
}
}

View File

@ -0,0 +1,28 @@
<?php
namespace addon\futures\shop\controller;
use addon\fenxiao\model\Config as ConfigModel;
use app\shop\controller\BaseShop;
class Config extends BaseShop{
/**
* 基础设置
*/
public function basics()
{
$model = new ConfigModel();
if (request()->isAjax()) {
$res = $model->setFenxiaoBasicsConfig($this->request->param(), 1, $this->site_id);
return $res;
} else {
$basics = $model->getFenxiaoBasicsConfig($this->site_id);
$this->assign("info", $basics[ 'data' ][ 'value' ]);
$this->forthMenu();
return $this->fetch('config/basics');
}
}
}

View File

@ -0,0 +1,190 @@
{extend name="app/shop/view/base.html"/}
{block name="resources"}
<style>
#container{ width: 650px; height: 500px; }
#container > div {z-index: 500!important}
.empty-address{ display: none; }
.address-content {display: inline-block;vertical-align: top;}
.form-wrap {margin-top: 0;}
</style>
{/block}
{block name="main"}
<div class="layui-form-item time-view">
<div class="layui-inline">
<label class="layui-form-label">秒杀日期:</label>
<div class="layui-input-inline">
<input type="radio" name="time_type" value="0" title="每天" lay-filter="time_type" {if !isset($info.time_type) || $info.time_type == 0}checked{/if}/>
<input type="radio" name="time_type" value="1" title="自定义" lay-filter="time_type" {if !isset($info.time_type) || $info.time_type == 1 }checked{/if}/>
</div>
</div>
</div>
<div class="time-view">
<div class="layui-form-item time-type-view" lay-verify="time_week">
<div class="layui-inline">
<label class="layui-form-label"></label>
<div class="layui-input-inline">
<input type="checkbox" value="1" class='time-week' name="time_week[]" title="周一" lay-skin="primary" {if !empty($info.time_week) && in_array(1,$info.time_week)} checked {/if}>
<input type="checkbox" value="2" class='time-week' name="time_week[]" title="周二" lay-skin="primary" {if !empty($info.time_week) && in_array(2,$info.time_week)} checked {/if}>
<input type="checkbox" value="3" class='time-week' name="time_week[]" title="周三" lay-skin="primary" {if !empty($info.time_week) && in_array(3,$info.time_week)} checked {/if}>
<input type="checkbox" value="4" class='time-week' name="time_week[]" title="周四" lay-skin="primary" {if !empty($info.time_week) && in_array(4,$info.time_week)} checked {/if}>
<input type="checkbox" value="5" class='time-week' name="time_week[]" title="周五" lay-skin="primary" {if !empty($info.time_week) && in_array(5,$info.time_week)} checked {/if}>
<input type="checkbox" value="6" class='time-week' name="time_week[]" title="周六" lay-skin="primary" {if !empty($info.time_week) && in_array(6,$info.time_week)} checked {/if}>
<input type="checkbox" value="0" class='time-week' name="time_week[]" title="周日" lay-skin="primary" {if !empty($info.time_week) && in_array(0,$info.time_week)} checked {/if}>
</div>
</div>
</div>
<div class="layui-form-item time-type-view-all" >
<label class="layui-form-label">秒杀时间:</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" id="startTime" lay-verify="start_time" placeholder="秒杀开始时间" value="" readonly >
<input type="hidden" class="layui-input" name="start_time" placeholder="秒杀开始时间" value="{$info.start_time}">
</div>
<div class="layui-form-mid layui-word-aux">~</div>
<div class="layui-input-inline">
<input type="text" class="layui-input" id="endTime" lay-verify="end_time" placeholder="自提结束时间" value="" readonly >
<input type="hidden" class="layui-input" name="end_time" placeholder="秒杀结束时间" value="{$info.end_time}">
</div>
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<!-- <button class="layui-btn layui-btn-primary" onclick="back()">返回</button>-->
<a id="storeImage"></a>
</div>
</div>
{/block}
{block name="script"}
<script>
var form, repeat_flag, map_class;
var saveData = null;
var totalUploadNum = 0;
var completeUploadNum = 0;
var upload;
layui.use(['form','laydate'], function() {
var laydate = layui.laydate;
form = layui.form;
repeat_flag = false;//防重复标识
form.render();
//时间选择器
laydate.render({
elem: '#startTime'
, type: 'time'
,value: "{:date('H:i:s', strtotime(date('Y-m-d')) + $info.start_time)}"
,done: function(value, date, endDate){
var time = date.hours * 3600 + date.minutes * 60 + date.seconds;
$("input[name=start_time]").val(time);
}
});
//时间选择器
laydate.render({
elem: '#endTime'
, type: 'time'
,value: "{:date('H:i:s', strtotime(date('Y-m-d')) + $info.end_time)}"
,done: function(value, date, endDate){
var time = date.hours * 3600 + date.minutes * 60 + date.seconds;
$("input[name=end_time]").val(time);
}
});
form.verify({
start_time: function(value, item){ //value表单的值、item表单的DOM对象
var end_time = $("input[name=end_time]").val();
var start_time = $("input[name=start_time]").val();
if(parseInt(start_time) > parseInt(end_time)){
return '营业开始时间不能大于自提结束时间';
}
},
end_time: function(value, item){ //value表单的值、item表单的DOM对象
var end_time = $("input[name=end_time]").val();
var start_time = $("input[name=start_time]").val();
if(parseInt(end_time) < parseInt(start_time)){
return '营业结束时间不能小于自提开始时间';
}
},
});
timeTypeChange($("input[name=time_type]:checked").val());
form.on('radio(time_type)', function(data){
timeTypeChange(data.value);
});
form.on('switch(pickup)', function(data){
if(data.elem.checked){
$('.time-view').removeClass('layui-hide')
}else{
$('.time-view').addClass('layui-hide')
}
});
/**
* 验证码
*/
form.verify({
required : function(value, item){
var msg = $(item).attr("placeholder") != undefined ? $(item).attr("placeholder") : '';
if(value == '') return msg;
},
time_week: function(){
if ($('[name="is_pickup"]').is(':checked') && $('[name="time_type"]:checked').val() == 1 && !$('.time-week:checked').length)
return '请选择可配送日期';
}
});
/**
* 监听提交
*/
form.on('submit(save)', function(data){
if(repeat_flag) return;
repeat_flag = true;
$.ajax({
type : "POST",
dataType: 'JSON',
url : ns.url("futures://shop/config/basics"),
async : true,
data : data.field,
success : function(res) {
repeat_flag = false;
if (res.code == 0) {
location.reload();
// layer.confirm('编辑成功', {
// title: '操作提示',
// btn: ['返回列表', '继续操作'],
// yes: function() {
// location.href = ns.url("store://shop/store/lists")
// },
// btn2: function() {
// location.reload();
// }
// });
} else {
layer.msg(res.message);
}
}
})
});
});
function back() {
location.href = ns.url("store://shop/store/lists");
}
function timeTypeChange(type){
if(type == 1){
$('.time-type-view').show();
}else{
$('.time-type-view').hide();
}
}
</script>
{/block}