添加: 交易市场

This commit is contained in:
wuhui_zzw 2023-02-23 18:06:53 +08:00
parent 08ed99effc
commit 11bd724941
7 changed files with 515 additions and 112 deletions

View File

@ -114,7 +114,7 @@ class User extends BaseModel{
for($i=0;$i<$info['order_num'];$i++){
$insert[] = [
'site_id' => $this->site_id,
'member_id' => $memberId,
'seller_uid' => $memberId,
'goods_id' => (int)$info['goods_id'],
'total' => (int)$info['goods_num'],
'unit_price' => sprintf("%.2f",$info['unit_price'] * $info['goods_num']),

View File

@ -12,21 +12,95 @@
*/
namespace addon\futures\shop\controller;
use app\shop\controller\BaseShop;
use addon\futures\model\Futures as futuresModel;
class Futures extends BaseShop{
// 进入首页
/**
* Common: 进入交易市场
* Author: wu-hui
* Time: 2023/02/23 14:38
* @return array|mixed
*/
public function index(){
if(request()->isAjax()){
// 参数获取
$page = input('page',1);
$pageSize = input('page_size',PAGE_LIST_ROWS);
$nickname = input('nickname','');
$status = (int)input('status',0);// 状态1=库存2=已上架3=已售出4=提货中5=提货完成6=待支付7=捡漏)
$timeType = (string)input('time_type','created');
$startTime = (int)input('start_time',0);
$endTime = (int)input('end_time',0);
// 获取内容
$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'],// 获取商品信息
];
// 条件生成
$condition = [
['a.site_id','=',$this->site_id]
];
if($nickname) $condition[] = ['seller.username|seller.nickname',"like","%{$nickname}%"];
if($status > 0) $condition[] = ['a.status',"=",$status];
$timeField = [
'created' => 'a.created_time',
'release' => 'a.release_time',
'sell' => 'a.sell_time',
'take' => 'a.take_time',
];
if($startTime > 0) $condition[] = [$timeField[$timeType],">=",$startTime];
if($endTime > 0) $condition[] = [$timeField[$timeType],"<=",$endTime];
return (new futuresModel())->getPageList($condition, $page, $pageSize, 'a.created_time desc,a.id desc', $field, 'a', $join);
}
$this->forthMenu();
return $this->fetch('futures/index');
}
/**
* Common: 查看交易详情
* Author: wu-hui
* Time: 2023/02/23 18:04
* @return mixed
*/
public function seeDetail(){
// 参数获取
$id = input('id',0);
// 获取交易信息
$field = "id,seller_uid,order_id,member_id,goods_id,total,unit_price,price,status,release_time,sell_time,created_time,take_time,old_futures_id";
$data['info'] = (array)model('futures')->getInfo(['id' => $id],$field);
// 获取卖家信息 买家信息
$memberField = "username,nickname,headimg";
$data['seller'] = (array)model('member')->getInfo(['member_id' => $data['info']['seller_uid']],$memberField);
$data['buyer'] = (array)model('member')->getInfo(['member_id' => $data['info']['member_id']],$memberField);
// 获取订单信息
$orderField = "order_no";
$data['order'] = (array)model('order')->getInfo(['order_id' => $data['info']['order_id']],$orderField);
// 商品信息
$goodsField = "goods_name,goods_image";
$data['goods'] = (array)model('goods')->getInfo(['goods_id' => $data['info']['goods_id']],$goodsField);
$data['goods']['goods_image'] = explode(',',$data['goods']['goods_image'])[0];
return $this->fetch('futures/see',$data);
}

View File

@ -38,9 +38,12 @@ class User extends BaseShop{
return (new userModel($this->site_id))->changeSpecial();
}
// 商品赠送
/**
* Common: 商品赠送
* Author: wu-hui
* Time: 2023/02/23 14:01
* @return array|mixed
*/
public function sendGoods(){
if(request()->isAjax()) return (new userModel($this->site_id))->sendGoods();

View File

@ -15,136 +15,217 @@
height:40px;
margin-right:20px;
}
.time_p{
height: 20px;
line-height: 20px;
font-size: 13px;
}
</style>
{/block}
{block name="main"}
<!-- 顶部操作内容 -->
<div class="single-filter-box top">
<div class="right">
<button class="layui-btn" onclick="addMember()">添加成员</button>
<button class="layui-btn" style="background-color: #009688;" onclick="synchronization(0)">同步开发者</button>
<button class="layui-btn" style="background-color: #FFB800;" onclick="synchronization(1)">同步体验者</button>
<!-- 筛选面板 -->
<div class="screen layui-collapse" lay-filter="selection_panel">
<div class="layui-colla-item">
<div class="layui-colla-content layui-form layui-show" lay-filter="search_form">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">用户昵称:</label>
<div class="layui-input-inline">
<input type="text" name="nickname" placeholder="用户昵称" autocomplete="off" class="layui-input"/>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">交易状态:</label>
<div class="layui-input-inline">
<select name="status" lay-filter="is_settlement">
<option value="">全部</option>
<option value="1">库存</option>
<option value="2">已上架</option>
<option value="3">已售出</option>
<option value="4">提货中</option>
<option value="5">提货完成</option>
<option value="6">待支付</option>
<option value="7">捡漏</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">
<select name="time_type" lay-filter="is_settlement">
<option value="created">购买时间</option>
<option value="release">上架时间</option>
<option value="sell">售卖时间</option>
<option value="take">取货时间</option>
</select>
</div>
<!--时间选择-->
<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 class="layui-btn" lay-submit lay-filter="search">筛选</button>
<button type="reset" lay-submit lay-filter="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</div>
</div>
<div class="left"></div>
</div>
<!-- 列表 -->
<table id="listContent" lay-filter="listContent"></table>
<!-- 操作 -->
<script type="text/html" id="operation">
<div class="table-btn">
<a class="layui-btn" lay-event="delete">删除</a>
<a class="layui-btn" lay-event="seeDetail">查看详情</a>
</div>
</script>
<!--会员信息-->
<script type="text/html" id="memberInfo">
<div class='table-title'>
<div class='title-pic'>
<img layer-src src="{{ns.img(d.seller_headimg)}}" onerror="this.src = '{:img(\'public/static/img/default_img/head.png\')}' ">
</div>
<div class='title-content'>
{{# if(d.seller_username){ }}
<p class="layui-elip">{{d.seller_username}}</p>
{{# } else { }}
<p class="layui-elip">{{d.seller_nickname}}</p>
{{# } }}
</div>
</div>
</script>
<!--商品信息-->
<script type="text/html" id="goodsInfo">
<div class='table-title' title="{{d.goods_name}}">
<div class='title-pic'>
<img layer-src src="{{ns.img(d.goods_image)}}" onerror="this.src = '{:img(\'public/static/img/default_img/head.png\')}' ">
</div>
<div class='title-content'>
<p class="layui-elip">{{d.goods_name}}</p>
</div>
</div>
</script>
{/block}
{block name="script"}
<script>
var table, form, editIframe, repeat_flag = false;//防重复标识;
layui.use(['form'], function() {
var table, form, editIframe,laydate, repeat_flag = false;//防重复标识;
layui.use(['form','laydate'], function() {
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: '#listContent',
url: ns.url("aliapp://shop/member/index"),
url: ns.url("futures://shop/futures/index"),
cols: [[
{align: 'center', field: 'id', title: 'ID', width: '5%', unresize: 'false'},
{align: 'center', field: 'user_id', title: '支付宝用户id', unresize: 'area'},
{align: 'center', field: 'nick_name', title: '昵称', unresize: 'area'},
{align: 'left', title: '买家信息', unresize: 'area',width: '15%', templet: '#memberInfo'},
{align: 'left', title: '商品信息', unresize: 'area',width: '15%', templet: '#goodsInfo'},
{align: 'center', title: '商品数量', field: 'total',width: '10%', unresize: 'area'},
{align: 'center', title: '购买价格', field: 'unit_price',width: '10%', unresize: 'area'},
{
align: 'center', templet: function (d) {
// 成员的状态VALID-有效UNCONFIRMED-未确认TIMEOUT-已经失效REFUSED-用户拒绝
align: 'center',width: '10%', templet: function (d) {
// 状态1=库存2=已上架3=已售出4=提货中5=提货完成6=待支付7=捡漏)
let statusText = '';
switch (d.status) {
case 'VALID': statusText = '有效'; break;
case 'UNCONFIRMED': statusText = '未确认'; break;
case 'TIMEOUT': statusText = '已经失效'; break;
case 'REFUSED': statusText = '用户拒绝'; break;
switch (parseInt(d.status)) {
case 1: statusText = '<p>库存</p>'; break;
case 2: statusText = '<p style="color: #07c160;">已上架</p>'; break;
case 3: statusText = '<p style="color: #1989fa;">已售出</p>'; break;
case 4: statusText = '<p style="color: #7232dd;">提货中</p>'; break;
case 5: statusText = '<p style="color: #ad0000;">提货完成</p>'; break;
case 6: statusText = '<p style="color: #ff976a;">待支付</p>'; break;
case 7: statusText = '<p style="color: #ee0a24;">捡漏</p>'; break;
}
return statusText;
}, title: '状态', unresize: 'false'
}, title: '交易状态', unresize: 'false'
},
{align: 'center', field: 'gmt_join', title: '加入时间', unresize: 'area'},
{align: 'center', field: 'logon_id', title: '支付宝账号', unresize: 'area'},
{align: 'center', field: 'gmt_invite', title: '邀请时间', unresize: 'area'},
{
align: 'center', templet: function (d) {
// 角色类型DEVELOPER-开发者EXPERIENCER-体验者
return d.role === 'DEVELOPER' ? '开发者' : '体验者';
}, title: '角色类型', unresize: 'false'
align: 'center',width: '15%', templet: function (d) {
let timeText = '';
if(d.release_time > 0) timeText += '<p class="time_p">上架时间:'+ns.time_to_date(d.release_time,'YYYY-MM-DD h:m')+'</p>';
if(d.sell_time > 0) timeText += '<p class="time_p">售卖时间:'+ns.time_to_date(d.sell_time,'YYYY-MM-DD h:m')+'</p>';
if(d.created_time > 0) timeText += '<p class="time_p">购买时间:'+ns.time_to_date(d.created_time,'YYYY-MM-DD h:m')+'</p>';
if(d.take_time > 0) timeText += '<p class="time_p">取货时间:'+ns.time_to_date(d.take_time,'YYYY-MM-DD h:m')+'</p>';
return timeText;
}, title: '交易时间', unresize: 'false'
},
{title: '操作', toolbar: '#operation', unresize: 'false', align: 'right'}
]],
});
// 监听工具栏操作
table.tool(function(obj) {
var data = obj.data;
switch (obj.event) {
case 'delete':
delMember(data.id);
break;//删除
}
});
});
// 成员同步
function synchronization(type){
let index = ns.loading('open','同步中,请等待......');
requestApi("aliapp://shop/Member/synchronization",{ type: type },function (res) {
// 点击搜索
form.on('submit(search)', function(data) {
table.reload({
page: {
curr: 1
},
where: data.field
});
layer.close(index);
})
}
// 添加成员
function addMember(){
editIframe = layer.open({
return false;
});
// 重置表单
form.on('submit(reset)', function(data) {
let field = {
"nickname": "",
"status": "",
"time_type": "created",
"start_time": "",
"end_time": "",
};
form.val("search_form", field);
layui.form.render();
// 刷新表格
table.reload({
page: {
curr: 1
},
where: field
});
});
// 监听工具栏操作
table.tool(function(obj) {
var data = obj.data;
eval(obj.event)(data)
});
});
// 点击查看详情
function seeDetail(data){
layer.open({
type: 2,
title: '添加名片',
title: '交易详情',
skin: 'layer-tips-class',
area: ['70%','90%'],
content: ns.url("aliapp://shop/Member/addMember", {}),
area: ['80%','90%'],
content: ns.url("futures://shop/futures/seeDetail", { id: data.id }),
end: function(){
table.reload({
page: {
curr: 1
},
});
}
});
}
// 删除成员
function delMember(id){
layer.confirm('确定删除成员吗!', {icon: 3, title:'提示'}, function(confirmIndex){
layer.close(confirmIndex);
let index = ns.loading('open','删除中,请等待......');
requestApi("aliapp://shop/Member/delMember",{ id: id },function (res) {
table.reload({
page: {
curr: 1
},
});
layer.close(index);
})
});
}
// 发起请求
function requestApi(api,data,fun){
if (repeat_flag) return false;
repeat_flag = true;
$.ajax({
url: ns.url(api),
data: data,
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
if(typeof fun === 'function') fun(res);
//table.reload();
}
});
}

View File

@ -0,0 +1,242 @@
{extend name="app/shop/view/base.html"/}
{block name="resources"}
<style>
.content{
padding: 15px;
}
.content .block .title{
color: #333333;
margin-bottom: 24px;
width: 100%;
height: 16px;
line-height: 16px;
padding-left: 10px;
border-left: 3px solid rgb(254,106,0);
box-sizing: border-box;
font-size: 15px;
font-weight: bold;
}
.content .block .list{
display: inline-flex;
flex-direction: row;
flex-wrap: wrap;
align-items: center;
align-content: center;
justify-content: flex-start;
width: 100%;
}
.content .block .list .list-block{
display: flex;
font-size: 14px;
color: #a4a4a4;
margin-bottom: 14px;
width: calc(100% / 3);
justify-content: center;
flex-direction: row;
flex-wrap: nowrap;
align-content: center;
align-items: center;
}
.content .block .list .list-block .list-block-title{
min-width: 85px;
text-align: right;
}
.content .block .list .list-block .list-block-value{
color: #333333;
margin-left: 16px;
text-align: left;
display: -webkit-box;
-webkit-line-clamp: 3;
overflow: hidden;
text-overflow: ellipsis;
-webkit-box-orient: vertical;
}
.content .block .list .list-block .list-block-value .image{
max-width: 80px;
max-height: 80px;
}
.content .block .list .list-block .list-block-value .text{
width: 100%;
text-align: center;
}
.content .block .user_list .list-block{
height: 150px;
display: flex;
justify-content: flex-start;
flex-direction: column;
flex-wrap: nowrap;
align-content: center;
align-items: center;
}
.content .block .user_list .list-block .list-block-title{
width: 100%;
text-align: center;
height: 30px;
line-height: 30px;
}
.content .block .user_list .list-block .list-block-value{
width: 100%;
display: inline-flex;
flex-direction: column;
flex-wrap: nowrap;
align-items: center;
align-content: center;
justify-content: center;
margin-left: 0!important;
height: 120px;
}
.content .block .layui-timeline{
padding-left: 80px;
}
</style>
{/block}
{block name="body"}
<div class="content">
<!-- 交易信息 -->
<div class="block">
<div class="title">交易信息</div>
<div class="list">
<div class="list-block">
<div class="list-block-title">订单号:</div>
<div class="list-block-value">{$order['order_no'] ?? '--'}</div>
</div>
<div class="list-block">
<div class="list-block-title">商品数量:</div>
<div class="list-block-value">{$info['total'] ?? '--'}</div>
</div>
<div class="list-block">
<div class="list-block-title">购入价格:</div>
<div class="list-block-value">{$info['unit_price'] ?? '--'}</div>
</div>
<div class="list-block">
<div class="list-block-title">售卖价格:</div>
<div class="list-block-value">{$info['price'] ?? '--'}</div>
</div>
<div class="list-block">
<div class="list-block-title">状态:</div>
<div class="list-block-value">
{if $info['status'] == 1}
<span>库存</span>
{elseif $info['status'] == 2}
<span style="color: #07c160;">已上架</span>
{elseif $info['status'] == 3}
<span style="color: #1989fa;">已售出</span>
{elseif $info['status'] == 4}
<span style="color: #7232dd;">提货中</span>
{elseif $info['status'] == 5}
<span style="color: #ad0000;">提货完成</span>
{elseif $info['status'] == 6}
<span style="color: #ff976a;">待支付</span>
{elseif $info['status'] == 7}
<span style="color: #ee0a24;">捡漏</span>
{else}
--
{/if}
</div>
</div>
<div class="list-block">
<div class="list-block-title">订单来源:</div>
<div class="list-block-value">{$info['old_futures_id'] > 0 ? '购买获得' : '后台配发'}</div>
</div>
</div>
</div>
<!-- 会员信息 -->
<div class="block">
<div class="title">会员信息</div>
<div class="list user_list">
<div class="list-block">
<div class="list-block-title">卖家信息</div>
<div class="list-block-value">
<img src="{:img($seller.headimg)}" class="image"/>
<div class="text">
{if $seller['nickname']} {$seller['nickname']} {else} {$seller['username']} {/if}
</div>
</div>
</div>
<div class="list-block">
<div class="list-block-title">商品信息</div>
<div class="list-block-value">
<img src="{:img($goods.goods_image)}" class="image"/>
<div class="text">
{$goods['goods_name']}
</div>
</div>
</div>
<div class="list-block">
<div class="list-block-title">买家信息</div>
<div class="list-block-value">
{if $buyer}
<img src="{:img($buyer.headimg)}" class="image"/>
<div class="text">
{if $buyer['nickname']} {$buyer['nickname']} {else} {$buyer['username']} {/if}
</div>
{else}
--
{/if}
</div>
</div>
</div>
</div>
<!-- 操作日志 -->
<div class="block">
<div class="title">交易操作日志</div>
<ul class="layui-timeline">
{if $info['take_time'] > 0}
<li class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">
<h3 class="layui-timeline-title">{:date("Y-m-d H:i",$info['take_time'])}</h3>
<p>【{if $seller['nickname']} {$seller['nickname']} {else} {$seller['username']} {/if}】取货</p>
</div>
</li>
{/if}
{if $info['sell_time'] > 0}
<li class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">
<h3 class="layui-timeline-title">{:date("Y-m-d H:i",$info['sell_time'])}</h3>
<p>【{if $buyer['nickname']} {$buyer['nickname']} {else} {$buyer['username']} {/if}】购入当前订单中所有商品</p>
</div>
</li>
{/if}
{if $info['release_time'] > 0}
<li class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">
<h3 class="layui-timeline-title">{:date("Y-m-d H:i",$info['release_time'])}</h3>
<p>【{if $seller['nickname']} {$seller['nickname']} {else} {$seller['username']} {/if}】将当前订单上架售卖</p>
</div>
</li>
{/if}
{if $info['created_time'] > 0}
<li class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">
<h3 class="layui-timeline-title">{:date("Y-m-d H:i",$info['created_time'])}</h3>
<p>【{if $seller['nickname']} {$seller['nickname']} {else} {$seller['username']} {/if}】购入</p>
</div>
</li>
{/if}
</ul>
</div>
</div>
{/block}
{block name="script"}
<script>
var _thisIndex,form,repeat_flag = false,goods_info = {};
$(function () {
// 基本参数
_thisIndex = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
// 表单内容
layui.use(['form'], function() {
form = layui.form;
form.render();
});
});
// 点击关闭弹框
function closeIframe() {
parent.layer.close(_thisIndex); //再执行关闭
}
</script>
{/block}

View File

@ -22,7 +22,7 @@
<!-- 筛选面板 -->
<div class="screen layui-collapse" lay-filter="selection_panel">
<div class="layui-colla-item">
<div class="layui-colla-content layui-form layui-show">
<div class="layui-colla-content layui-form layui-show" lay-filter="search_form">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">用户昵称:</label>
@ -43,7 +43,7 @@
</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>
<button type="reset" lay-submit lay-filter="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</div>
</div>
@ -58,7 +58,7 @@
{{# } }}
<a class="layui-btn" lay-event="delete">删除</a>
</div>
</script>
<!--会员信息-->
@ -147,6 +147,22 @@
});
return false;
});
// 重置表单
form.on('submit(reset)', function(data) {
let field = {
"nickname": "",
"status": "",
};
form.val("search_form", field);
layui.form.render();
// 刷新表格
table.reload({
page: {
curr: 1
},
where: field
});
});
// 监听工具栏操作
table.tool(function(obj) {
var data = obj.data;
@ -166,12 +182,5 @@
}
});
}
</script>
{/block}

View File

@ -152,12 +152,6 @@
})
});
});
});
});
// 点击关闭弹框