Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
admin
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
345c09ee
authored
Aug 21, 2023
by
puhui999
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
订单列表:列表重构 ② and 完善订单详情
parent
161feab2
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
236 additions
and
166 deletions
+236
-166
src/api/mall/trade/order/index.ts
+50
-50
src/router/modules/remaining.ts
+17
-1
src/utils/dict.ts
+1
-1
src/views/mall/trade/order/detail/index.vue
+84
-62
src/views/mall/trade/order/index.vue
+59
-29
src/views/mall/trade/order/testData.ts
+25
-23
No files found.
src/api/mall/trade/order/index.ts
View file @
345c09ee
import
request
from
'@/config/axios'
import
request
from
'@/config/axios'
export
interface
OrderVO
{
export
interface
OrderVO
{
id
?:
number
// 订单编号
id
?:
number
|
null
// 订单编号
no
?:
string
// 订单流水号
no
?:
string
// 订单流水号
createTime
?:
Date
// 下单时间
createTime
?:
Date
|
null
// 下单时间
type
?:
number
// 订单类型
type
?:
number
|
null
// 订单类型
terminal
?:
number
// 订单来源
terminal
?:
number
|
null
// 订单来源
userId
?:
number
// 用户编号
userId
?:
number
|
null
// 用户编号
userIp
?:
string
// 用户 IP
userIp
?:
string
// 用户 IP
userRemark
?:
string
// 用户备注
userRemark
?:
string
// 用户备注
status
?:
number
// 订单状态
status
?:
number
|
null
// 订单状态
productCount
?:
number
// 购买的商品数量
productCount
?:
number
|
null
// 购买的商品数量
finishTime
?:
Date
// 订单完成时间
finishTime
?:
Date
|
null
// 订单完成时间
cancelTime
?:
Date
// 订单取消时间
cancelTime
?:
Date
|
null
// 订单取消时间
cancelType
?:
number
// 取消类型
cancelType
?:
number
|
null
// 取消类型
remark
?:
string
// 商家备注
remark
?:
string
// 商家备注
payOrderId
:
number
// 支付订单编号
payOrderId
:
number
|
null
// 支付订单编号
payed
?:
boolean
// 是否已支付
payed
?:
boolean
// 是否已支付
payTime
?:
Date
// 付款时间
payTime
?:
Date
|
null
// 付款时间
payChannelCode
?:
string
// 支付渠道
payChannelCode
?:
string
// 支付渠道
originalPrice
?:
number
// 商品原价(总)
originalPrice
?:
number
|
null
// 商品原价(总)
orderPrice
?:
number
// 订单原价(总)
orderPrice
?:
number
|
null
// 订单原价(总)
discountPrice
?:
number
// 订单优惠(总)
discountPrice
?:
number
|
null
// 订单优惠(总)
deliveryPrice
?:
number
// 运费金额
deliveryPrice
?:
number
|
null
// 运费金额
adjustPrice
?:
number
// 订单调价(总)
adjustPrice
?:
number
|
null
// 订单调价(总)
payPrice
?:
number
// 应付金额(总)
payPrice
?:
number
|
null
// 应付金额(总)
deliveryType
?:
number
// 发货方式
deliveryType
?:
number
|
null
// 发货方式
deliveryTemplateId
?:
number
// 配送模板编号
deliveryTemplateId
?:
number
|
null
// 配送模板编号
logisticsId
?:
number
// 发货物流公司编号
logisticsId
?:
number
|
null
|
null
// 发货物流公司编号
logisticsNo
?:
string
// 发货物流单号
logisticsNo
?:
string
// 发货物流单号
deliveryStatus
?:
number
// 发货状态
deliveryStatus
?:
number
|
null
// 发货状态
deliveryTime
?:
Date
// 发货时间
deliveryTime
?:
Date
|
null
// 发货时间
receiveTime
?:
Date
// 收货时间
receiveTime
?:
Date
|
null
// 收货时间
receiverName
?:
string
// 收件人名称
receiverName
?:
string
// 收件人名称
receiverMobile
?:
string
// 收件人手机
receiverMobile
?:
string
// 收件人手机
receiverAreaId
?:
number
// 收件人地区编号
receiverAreaId
?:
number
|
null
// 收件人地区编号
receiverPostCode
?:
number
// 收件人邮编
receiverPostCode
?:
number
|
null
// 收件人邮编
receiverDetailAddress
?:
string
// 收件人详细地址
receiverDetailAddress
?:
string
// 收件人详细地址
afterSaleStatus
?:
number
// 售后状态
afterSaleStatus
?:
number
|
null
// 售后状态
refundPrice
?:
number
// 退款金额
refundPrice
?:
number
|
null
// 退款金额
couponId
?:
number
// 优惠劵编号
couponId
?:
number
|
null
// 优惠劵编号
couponPrice
?:
number
// 优惠劵减免金额
couponPrice
?:
number
|
null
// 优惠劵减免金额
pointPrice
?:
number
// 积分抵扣的金额
pointPrice
?:
number
|
null
// 积分抵扣的金额
receiverAreaName
?:
string
//收件人地区名字
receiverAreaName
?:
string
//收件人地区名字
items
?:
OrderItemRespVO
[]
// 订单项列表
items
?:
OrderItemRespVO
[]
// 订单项列表
//用户信息
//用户信息
user
?:
{
user
?:
{
id
?:
number
id
?:
number
|
null
nickname
?:
string
nickname
?:
string
avatar
?:
string
avatar
?:
string
}
}
...
@@ -54,33 +54,33 @@ export interface OrderVO {
...
@@ -54,33 +54,33 @@ export interface OrderVO {
export
interface
OrderItemRespVO
{
export
interface
OrderItemRespVO
{
// ========== 订单项基本信息 ==========
// ========== 订单项基本信息 ==========
id
?:
number
// 编号
id
?:
number
|
null
// 编号
userId
?:
number
// 用户编号
userId
?:
number
|
null
// 用户编号
orderId
?:
number
// 订单编号
orderId
?:
number
|
null
// 订单编号
// ========== 商品基本信息 ==========
// ========== 商品基本信息 ==========
spuId
?:
number
// 商品 SPU 编号
spuId
?:
number
|
null
// 商品 SPU 编号
spuName
?:
string
//商品 SPU 名称
spuName
?:
string
//商品 SPU 名称
skuId
?:
number
// 商品 SKU 编号
skuId
?:
number
|
null
// 商品 SKU 编号
picUrl
?:
string
//商品图片
picUrl
?:
string
//商品图片
count
?:
number
//购买数量
count
?:
number
|
null
//购买数量
// ========== 价格 + 支付基本信息 ==========
// ========== 价格 + 支付基本信息 ==========
originalPrice
?:
number
//商品原价(总)
originalPrice
?:
number
|
null
//商品原价(总)
originalUnitPrice
?:
number
//商品原价(单)
originalUnitPrice
?:
number
|
null
//商品原价(单)
discountPrice
?:
number
//商品优惠(总)
discountPrice
?:
number
|
null
//商品优惠(总)
payPrice
?:
number
//商品实付金额(总)
payPrice
?:
number
|
null
//商品实付金额(总)
orderPartPrice
?:
number
//子订单分摊金额(总)
orderPartPrice
?:
number
|
null
//子订单分摊金额(总)
orderDividePrice
?:
number
//分摊后子订单实付金额(总)
orderDividePrice
?:
number
|
null
//分摊后子订单实付金额(总)
// ========== 营销基本信息 ==========
// ========== 营销基本信息 ==========
// TODO 芋艿:在捉摸一下
// TODO 芋艿:在捉摸一下
// ========== 售后基本信息 ==========
// ========== 售后基本信息 ==========
afterSaleStatus
?:
number
// 售后状态
afterSaleStatus
?:
number
|
null
// 售后状态
properties
?:
ProductPropertiesVO
[]
//属性数组
properties
?:
ProductPropertiesVO
[]
//属性数组
}
}
export
interface
ProductPropertiesVO
{
export
interface
ProductPropertiesVO
{
propertyId
?:
number
// 属性的编号
propertyId
?:
number
|
null
// 属性的编号
propertyName
?:
string
// 属性的名称
propertyName
?:
string
// 属性的名称
valueId
?:
number
//属性值的编号
valueId
?:
number
|
null
//属性值的编号
valueName
?:
string
// 属性值的名称
valueName
?:
string
// 属性值的名称
}
}
...
@@ -90,8 +90,8 @@ export const getOrderPage = async (params) => {
...
@@ -90,8 +90,8 @@ export const getOrderPage = async (params) => {
}
}
// 查询交易订单详情
// 查询交易订单详情
export
const
getOrder
=
async
(
id
:
number
)
=>
{
export
const
getOrder
=
async
(
id
:
number
|
null
)
=>
{
return
await
request
.
get
({
url
:
`/trade/order/get?id=`
+
id
})
return
await
request
.
get
({
url
:
`/trade/order/get
-detail
?id=`
+
id
})
}
}
// 新增交易订单
// 新增交易订单
...
@@ -105,6 +105,6 @@ export const updateOrder = async (data: OrderVO) => {
...
@@ -105,6 +105,6 @@ export const updateOrder = async (data: OrderVO) => {
}
}
// 删除交易订单
// 删除交易订单
export
const
deleteOrder
=
async
(
id
:
number
)
=>
{
export
const
deleteOrder
=
async
(
id
:
number
|
null
)
=>
{
return
await
request
.
delete
({
url
:
`/trade/order/delete?id=`
+
id
})
return
await
request
.
delete
({
url
:
`/trade/order/delete?id=`
+
id
})
}
}
src/router/modules/remaining.ts
View file @
345c09ee
...
@@ -349,7 +349,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
...
@@ -349,7 +349,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
{
{
path
:
'/property'
,
path
:
'/property'
,
component
:
Layout
,
component
:
Layout
,
name
:
'
p
roperty'
,
name
:
'
P
roperty'
,
meta
:
{
meta
:
{
hidden
:
true
hidden
:
true
},
},
...
@@ -412,6 +412,22 @@ const remainingRouter: AppRouteRecordRaw[] = [
...
@@ -412,6 +412,22 @@ const remainingRouter: AppRouteRecordRaw[] = [
]
]
},
},
{
{
path
:
'/trade/order'
,
component
:
Layout
,
name
:
'Detail'
,
meta
:
{
hidden
:
true
},
children
:
[
{
path
:
'detail/:orderId(\\d+)'
,
component
:
()
=>
import
(
'@/views/mall/trade/order/detail/index.vue'
),
name
:
'TradeOrderDetailForm'
,
meta
:
{
title
:
'订单详情'
,
icon
:
''
,
activeMenu
:
'/trade/trade/order'
}
}
]
},
{
path
:
'/pay'
,
path
:
'/pay'
,
component
:
Layout
,
component
:
Layout
,
name
:
'pay'
,
name
:
'pay'
,
...
...
src/utils/dict.ts
View file @
345c09ee
...
@@ -130,7 +130,7 @@ export enum DICT_TYPE {
...
@@ -130,7 +130,7 @@ export enum DICT_TYPE {
BPM_OA_LEAVE_TYPE
=
'bpm_oa_leave_type'
,
BPM_OA_LEAVE_TYPE
=
'bpm_oa_leave_type'
,
// ========== PAY 模块 ==========
// ========== PAY 模块 ==========
PAY_CHANNEL_CODE
=
'pay_channel_cod
e'
,
// 支付渠道编码类型
PAY_CHANNEL_CODE
_TYPE
=
'pay_channel_code_typ
e'
,
// 支付渠道编码类型
PAY_ORDER_STATUS
=
'pay_order_status'
,
// 商户支付订单状态
PAY_ORDER_STATUS
=
'pay_order_status'
,
// 商户支付订单状态
PAY_REFUND_STATUS
=
'pay_refund_status'
,
// 退款订单状态
PAY_REFUND_STATUS
=
'pay_refund_status'
,
// 退款订单状态
PAY_NOTIFY_STATUS
=
'pay_notify_status'
,
// 商户支付回调状态
PAY_NOTIFY_STATUS
=
'pay_notify_status'
,
// 商户支付回调状态
...
...
src/views/mall/trade/order/detail/index.vue
View file @
345c09ee
<
template
>
<
template
>
<Dialog
v-model=
"dialogVisible"
:scroll=
"true"
:title=
"dialogTitle"
width=
"65%"
>
<ContentWrap>
<ContentWrap>
<!-- 订单信息 -->
<!-- 订单信息 -->
<el-descriptions
title=
"订单信息"
>
<el-descriptions
title=
"订单信息"
>
<el-descriptions-item
label=
"订单号: "
>
{{
order
.
no
}}
</el-descriptions-item>
<el-descriptions-item
label=
"订单号: "
>
{{
orderInfo
.
no
}}
</el-descriptions-item>
<el-descriptions-item
label=
"配送方式: "
>
物流配送
</el-descriptions-item>
<el-descriptions-item
label=
"配送方式: "
>
物流配送
</el-descriptions-item>
<!-- TODO 芋艿:待实现 -->
<!-- TODO 芋艿:待实现 -->
<el-descriptions-item
label=
"营销活动: "
>
物流配送
</el-descriptions-item>
<el-descriptions-item
label=
"营销活动: "
>
物流配送
</el-descriptions-item>
<!-- TODO 芋艿:待实现 -->
<!-- TODO 芋艿:待实现 -->
<el-descriptions-item
label=
"订单类型: "
>
<el-descriptions-item
label=
"订单类型: "
>
<dict-tag
:type=
"DICT_TYPE.TRADE_ORDER_TYPE"
:value=
"order
.type"
/>
<dict-tag
:type=
"DICT_TYPE.TRADE_ORDER_TYPE"
:value=
"orderInfo
.type"
/>
</el-descriptions-item>
</el-descriptions-item>
<el-descriptions-item
label=
"收货人: "
>
{{
order
.
receiverName
}}
</el-descriptions-item>
<el-descriptions-item
label=
"收货人: "
>
{{
orderInfo
.
receiverName
}}
</el-descriptions-item>
<el-descriptions-item
label=
"买家留言: "
>
{{
order
.
userRemark
}}
</el-descriptions-item>
<el-descriptions-item
label=
"买家留言: "
>
{{
orderInfo
.
userRemark
}}
</el-descriptions-item>
<el-descriptions-item
label=
"订单来源: "
>
<el-descriptions-item
label=
"订单来源: "
>
<dict-tag
:type=
"DICT_TYPE.TERMINAL"
:value=
"order
.terminal"
/>
<dict-tag
:type=
"DICT_TYPE.TERMINAL"
:value=
"orderInfo
.terminal"
/>
</el-descriptions-item>
</el-descriptions-item>
<el-descriptions-item
label=
"联系电话: "
>
{{
order
.
receiverMobile
}}
</el-descriptions-item>
<el-descriptions-item
label=
"联系电话: "
>
{{
orderInfo
.
receiverMobile
}}
</el-descriptions-item>
<el-descriptions-item
label=
"商家备注: "
>
{{
order
.
remark
}}
</el-descriptions-item>
<el-descriptions-item
label=
"商家备注: "
>
{{
orderInfo
.
remark
}}
</el-descriptions-item>
<el-descriptions-item
label=
"支付单号: "
>
{{
order
.
payOrderId
}}
</el-descriptions-item>
<el-descriptions-item
label=
"支付单号: "
>
{{
orderInfo
.
payOrderId
}}
</el-descriptions-item>
<el-descriptions-item
label=
"付款方式: "
>
<el-descriptions-item
label=
"付款方式: "
>
<dict-tag
:type=
"DICT_TYPE.PAY_CHANNEL_CODE_TYPE"
:value=
"order
.payChannelCode"
/>
<dict-tag
:type=
"DICT_TYPE.PAY_CHANNEL_CODE_TYPE"
:value=
"orderInfo
.payChannelCode"
/>
</el-descriptions-item>
</el-descriptions-item>
<!--
<el-descriptions-item
label=
"买家: "
>
{{
order
.
user
.
nickname
}}
</el-descriptions-item>
-->
<!--
<el-descriptions-item
label=
"买家: "
>
{{
orderInfo
.
user
.
nickname
}}
</el-descriptions-item>
-->
<!-- TODO 芋艿:待实现:跳转会员 -->
<!-- TODO 芋艿:待实现:跳转会员 -->
<el-descriptions-item
label=
"收货地址: "
>
<el-descriptions-item
label=
"收货地址: "
>
{{
order
.
receiverAreaName
}}
{{
order
.
receiverDetailAddress
}}
{{
orderInfo
.
receiverAreaName
}}
{{
orderInfo
.
receiverDetailAddress
}}
<el-link
<el-link
v-clipboard:copy=
"order.receiverAreaName + ' ' + order
.receiverDetailAddress"
v-clipboard:copy=
"orderInfo.receiverAreaName + ' ' + orderInfo
.receiverDetailAddress"
v-clipboard:success=
"clipboardSuccess"
v-clipboard:success=
"clipboardSuccess"
icon=
"ep:document-copy"
icon=
"ep:document-copy"
type=
"primary"
type=
"primary"
...
@@ -40,9 +39,9 @@
...
@@ -40,9 +39,9 @@
<el-descriptions-item
label=
"订单状态: "
>
<el-descriptions-item
label=
"订单状态: "
>
<!-- TODO xiaobai:status 一定有值哈,不用判断 -->
<!-- TODO xiaobai:status 一定有值哈,不用判断 -->
<dict-tag
<dict-tag
v-if=
"order
.status !== ''"
v-if=
"orderInfo
.status !== ''"
:type=
"DICT_TYPE.TRADE_ORDER_STATUS"
:type=
"DICT_TYPE.TRADE_ORDER_STATUS"
:value=
"order
.status"
:value=
"orderInfo
.status"
/>
/>
</el-descriptions-item>
</el-descriptions-item>
<el-descriptions-item
label-class-name=
"no-colon"
>
<el-descriptions-item
label-class-name=
"no-colon"
>
...
@@ -52,14 +51,8 @@
...
@@ -52,14 +51,8 @@
<!-- TODO 芋艿:待实现 -->
<!-- TODO 芋艿:待实现 -->
<el-button
size=
"small"
type=
"primary"
>
发货
</el-button>
<el-button
size=
"small"
type=
"primary"
>
发货
</el-button>
<!-- TODO 芋艿:待实现 -->
<!-- TODO 芋艿:待实现 -->
<el-button
size=
"small"
type=
"primary"
>
关闭订单
</el-button>
<!-- TODO 芋艿:待实现 -->
<el-button
size=
"small"
type=
"primary"
>
修改地址
</el-button>
<el-button
size=
"small"
type=
"primary"
>
修改地址
</el-button>
<!-- TODO 芋艿:待实现 -->
<!-- TODO 芋艿:待实现 -->
<el-button
size=
"small"
type=
"primary"
>
打印电子面单
</el-button>
<!-- TODO 芋艿:待实现 -->
<el-button
size=
"small"
type=
"primary"
>
打印发货单
</el-button>
<!-- TODO 芋艿:待实现 -->
<el-button
size=
"small"
type=
"primary"
>
确认收货
</el-button>
<el-button
size=
"small"
type=
"primary"
>
确认收货
</el-button>
<!-- TODO 芋艿:待实现 -->
<!-- TODO 芋艿:待实现 -->
</el-descriptions-item>
</el-descriptions-item>
...
@@ -78,7 +71,7 @@
...
@@ -78,7 +71,7 @@
<el-descriptions-item
labelClassName=
"no-colon"
>
<el-descriptions-item
labelClassName=
"no-colon"
>
<el-row
:gutter=
"20"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"15"
>
<el-col
:span=
"15"
>
<el-table
:data=
"order
.items"
border
>
<el-table
:data=
"orderInfo
.items"
border
>
<el-table-column
label=
"商品"
prop=
"spuName"
width=
"auto"
>
<el-table-column
label=
"商品"
prop=
"spuName"
width=
"auto"
>
<
template
#
default=
"{ row }"
>
<
template
#
default=
"{ row }"
>
{{
row
.
spuName
}}
{{
row
.
spuName
}}
...
@@ -110,35 +103,35 @@
...
@@ -110,35 +103,35 @@
<!-- 占位 -->
<!-- 占位 -->
<!-- <el-descriptions-item v-for="item in 5" label-class-name="no-colon" :key="item" /> -->
<!-- <el-descriptions-item v-for="item in 5" label-class-name="no-colon" :key="item" /> -->
</el-descriptions>
</el-descriptions>
<el-descriptions
column=
"6"
>
<el-descriptions
:
column=
"6"
>
<el-descriptions-item
label=
"商品总额: "
>
<el-descriptions-item
label=
"商品总额: "
>
{{ formatToFraction(order
.totalPrice) }}元
{{ formatToFraction(orderInfo
.totalPrice) }}元
</el-descriptions-item>
</el-descriptions-item>
<el-descriptions-item
label=
"运费金额: "
>
<el-descriptions-item
label=
"运费金额: "
>
{{ formatToFraction(order
.deliveryPrice) }}元
{{ formatToFraction(orderInfo
.deliveryPrice) }}元
</el-descriptions-item>
</el-descriptions-item>
<el-descriptions-item
label=
"订单调价: "
>
<el-descriptions-item
label=
"订单调价: "
>
{{ formatToFraction(order
.adjustPrice) }}元
{{ formatToFraction(orderInfo
.adjustPrice) }}元
</el-descriptions-item>
</el-descriptions-item>
<el-descriptions-item>
<el-descriptions-item>
<
template
#
label
><span
style=
"color: red"
>
商品优惠:
</span></
template
>
<
template
#
label
><span
style=
"color: red"
>
商品优惠:
</span></
template
>
<!-- 没理解TODO order.totalPrice - order
.totalPrice -->
<!-- 没理解TODO orderInfo.totalPrice - orderInfo
.totalPrice -->
{{ formatToFraction(order.totalPrice - order
.totalPrice) }}元
{{ formatToFraction(orderInfo.totalPrice - orderInfo
.totalPrice) }}元
</el-descriptions-item>
</el-descriptions-item>
<el-descriptions-item>
<el-descriptions-item>
<
template
#
label
><span
style=
"color: red"
>
订单优惠:
</span></
template
>
<
template
#
label
><span
style=
"color: red"
>
订单优惠:
</span></
template
>
{{ formatToFraction(order
.discountPrice) }}元
{{ formatToFraction(orderInfo
.discountPrice) }}元
</el-descriptions-item>
</el-descriptions-item>
<el-descriptions-item>
<el-descriptions-item>
<
template
#
label
><span
style=
"color: red"
>
积分抵扣:
</span></
template
>
<
template
#
label
><span
style=
"color: red"
>
积分抵扣:
</span></
template
>
{{ formatToFraction(order
.pointPrice) }}元
{{ formatToFraction(orderInfo
.pointPrice) }}元
</el-descriptions-item>
</el-descriptions-item>
<el-descriptions-item
v-for=
"item in 5"
:key=
"item"
label-class-name=
"no-colon"
/>
<el-descriptions-item
v-for=
"item in 5"
:key=
"item"
label-class-name=
"no-colon"
/>
<!-- 占位 -->
<!-- 占位 -->
<el-descriptions-item
label=
"应付金额: "
>
<el-descriptions-item
label=
"应付金额: "
>
{{ formatToFraction(order
.payPrice) }}元
{{ formatToFraction(orderInfo
.payPrice) }}元
</el-descriptions-item>
</el-descriptions-item>
</el-descriptions>
</el-descriptions>
...
@@ -219,33 +212,60 @@
...
@@ -219,33 +212,60 @@
</el-descriptions>
</el-descriptions>
</div>
</div>
</ContentWrap>
</ContentWrap>
</Dialog>
</template>
</template>
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
*
as
TradeOrderApi
from
'@/api/mall/trade/order'
import
{
formatToFraction
}
from
'@/utils'
import
{
formatToFraction
}
from
'@/utils'
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
{
DICT_TYPE
}
from
'@/utils/dict'
defineOptions
({
name
:
'TradeOrderDetailForm'
})
defineOptions
({
name
:
'TradeOrderDetailForm'
})
const
message
=
useMessage
()
// 消息弹窗
const
message
=
useMessage
()
// 消息弹窗
const
dialogVisible
=
ref
(
false
)
// 弹窗的是否展示
const
{
params
}
=
useRoute
()
// 查询参数
const
dialogTitle
=
ref
(
'订单详情'
)
// 弹窗的标题
// const loading = ref(false)
const
orderInfo
=
ref
<
TradeOrderApi
.
OrderVO
>
({
const
open
=
()
=>
{
no
:
''
,
dialogVisible
.
value
=
true
createTime
:
null
,
}
type
:
null
,
defineExpose
({
open
})
terminal
:
null
,
userId
:
null
,
const
{
query
}
=
useRoute
()
userIp
:
''
,
const
queryParams
=
reactive
({
userRemark
:
''
,
id
:
query
.
id
status
:
null
,
})
productCount
:
null
,
finishTime
:
null
,
const
loading
=
ref
(
false
)
cancelTime
:
null
,
const
order
=
ref
<
any
>
({
cancelType
:
null
,
remark
:
''
,
payOrderId
:
null
,
payed
:
false
,
payTime
:
null
,
payChannelCode
:
''
,
originalPrice
:
null
,
orderPrice
:
null
,
discountPrice
:
null
,
deliveryPrice
:
null
,
adjustPrice
:
null
,
payPrice
:
null
,
deliveryTemplateId
:
null
,
logisticsId
:
null
,
logisticsNo
:
''
,
deliveryStatus
:
null
,
deliveryTime
:
null
,
receiveTime
:
null
,
receiverName
:
''
,
receiverMobile
:
''
,
receiverAreaId
:
null
,
receiverPostCode
:
null
,
receiverDetailAddress
:
''
,
afterSaleStatus
:
null
,
refundPrice
:
null
,
couponPrice
:
null
,
pointPrice
:
null
,
receiverAreaName
:
''
,
items
:
[],
items
:
[],
user
:
{}
user
:
{}
})
// 详情数据
})
const
detailGroups
=
ref
([
const
detailGroups
=
ref
([
{
{
...
@@ -311,23 +331,25 @@ const detailInfo = ref({
...
@@ -311,23 +331,25 @@ const detailInfo = ref({
],
],
goodsInfo
:
[]
// 商品详情tableData
goodsInfo
:
[]
// 商品详情tableData
})
})
// 暂考虑一次性加载详情页面所有数据 TODO
const
getlist
=
async
()
=>
{
/** 获得详情 */
// dialogVisible.value = true
const
getDetail
=
async
()
=>
{
// loading.value = true
const
id
=
params
.
orderId
as
unknown
as
number
// try
{
if
(
id
)
{
// const res = await TradeOrderApi.getOrderDetail(queryParams.id as unknown as number)
const
res
=
(
await
TradeOrderApi
.
getOrder
(
id
))
as
TradeOrderApi
.
OrderVO
// order.value = res
// TODO 测试使用
// console.log(order)
res
.
user
=
{
// } catch {
id
:
247
,
// message.error('获取详情数据失败')
nickname
:
'小妮子'
// } finally {
}
// loading.value = false
orderInfo
.
value
=
res
//
}
}
}
}
onMounted
(
async
()
=>
{
onMounted
(
async
()
=>
{
await
get
list
()
await
get
Detail
()
})
})
const
clipboardSuccess
=
()
=>
{
const
clipboardSuccess
=
()
=>
{
message
.
success
(
'复制成功'
)
message
.
success
(
'复制成功'
)
}
}
...
...
src/views/mall/trade/order/index.vue
View file @
345c09ee
...
@@ -111,20 +111,31 @@
...
@@ -111,20 +111,31 @@
<el-table-column
fixed=
"left"
type=
"expand"
>
<el-table-column
fixed=
"left"
type=
"expand"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-table
:data=
"scope.row.items"
:span-method=
"spanMethod"
border
style=
"width: 100%"
>
<el-table
:data=
"scope.row.items"
:span-method=
"spanMethod"
border
style=
"width: 100%"
>
<el-table-column
label=
"商品"
prop=
"spuName"
>
<el-table-column
label=
"商品
信息"
min-width=
"300
"
prop=
"spuName"
>
<template
#
default=
"
{ row }">
<template
#
default=
"
{ row }">
{{
row
.
spuName
}}
<div
class=
"flex items-center"
>
<el-tag
v-for=
"property in row.properties"
:key=
"property.propertyId"
>
<el-image
:src=
"row.picUrl"
class=
"w-30px h-30px mr-10px"
@
click=
"imagePreview(row.picUrl)"
/>
<span
class=
"mr-10px"
>
{{
row
.
spuName
}}
</span>
<el-tag
v-for=
"property in row.properties"
:key=
"property.propertyId"
class=
"mr-10px"
>
{{
property
.
propertyName
}}
:
{{
property
.
valueName
}}
{{
property
.
propertyName
}}
:
{{
property
.
valueName
}}
</el-tag>
</el-tag>
</div>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"商品原价
(元)
"
prop=
"price"
width=
"150"
>
<el-table-column
label=
"商品原价"
prop=
"price"
width=
"150"
>
<
template
#
default=
"{ row }"
>
{{
formatToFraction
(
row
.
price
)
}}
</
template
>
<
template
#
default=
"{ row }"
>
{{
formatToFraction
(
row
.
price
)
}}
元
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"数量"
prop=
"count"
width=
"100"
/>
<el-table-column
label=
"数量"
prop=
"count"
width=
"100"
/>
<el-table-column
label=
"合计
(元)
"
prop=
"payPrice"
width=
"150"
>
<el-table-column
label=
"合计"
prop=
"payPrice"
width=
"150"
>
<
template
#
default=
"{ row }"
>
{{
formatToFraction
(
row
.
payPrice
)
}}
</
template
>
<
template
#
default=
"{ row }"
>
{{
formatToFraction
(
row
.
payPrice
)
}}
元
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"售后状态"
prop=
"afterSaleStatus"
width=
"120"
>
<el-table-column
label=
"售后状态"
prop=
"afterSaleStatus"
width=
"120"
>
<
template
#
default=
"{ row }"
>
<
template
#
default=
"{ row }"
>
...
@@ -134,22 +145,33 @@
...
@@ -134,22 +145,33 @@
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
align=
"center"
label=
"实际支付
(元)
"
min-width=
"120"
prop=
"payPrice"
>
<el-table-column
align=
"center"
label=
"实际支付"
min-width=
"120"
prop=
"payPrice"
>
<
template
#
default
>
<
template
#
default
>
{{
formatToFraction
(
scope
.
row
.
payPrice
)
+
'元'
}}
{{
formatToFraction
(
scope
.
row
.
payPrice
)
+
'元'
}}
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"买家/收货人"
min-width=
"120"
>
<
template
#
default
>
<div
class=
"flex flex-col"
>
<span>
买家:
{{
scope
.
row
.
user
.
nickname
}}
</span>
<span>
收货人:
{{
scope
.
row
.
receiverName
}}
{{
scope
.
row
.
receiverMobile
}}
{{
scope
.
row
.
receiverAreaName
}}
{{
scope
.
row
.
receiverDetailAddress
}}
</span>
</div>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"配送方式"
prop=
"deliveryType"
width=
"120"
>
<el-table-column
align=
"center"
label=
"配送方式"
prop=
"deliveryType"
width=
"120"
>
<
template
#
default
>
快递
</
template
>
<
template
#
default
>
快递
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
align=
"center"
fixed=
"right"
label=
"操作"
width=
"160"
>
<el-table-column
align=
"center"
fixed=
"right"
label=
"操作"
width=
"160"
>
<
template
#
default
=
"{ row }"
>
<
template
#
default
>
<div
class=
"flex justify-center items-center"
>
<div
class=
"flex justify-center items-center"
>
<el-button
link
type=
"primary"
@
click=
"openForm"
>
<el-button
link
type=
"primary"
@
click=
"openForm
(scope.row.id)
"
>
<Icon
icon=
"ep:notification"
/>
<Icon
icon=
"ep:notification"
/>
详情
详情
</el-button>
</el-button>
<el-dropdown
@
command=
"(command) => handleCommand(command, row)"
>
<el-dropdown
@
command=
"(command) => handleCommand(command,
scope.
row)"
>
<el-button
link
type=
"primary"
>
<el-button
link
type=
"primary"
>
<Icon
icon=
"ep:d-arrow-right"
/>
<Icon
icon=
"ep:d-arrow-right"
/>
更多
更多
...
@@ -187,13 +209,6 @@
...
@@ -187,13 +209,6 @@
<dict-tag
:type=
"DICT_TYPE.TRADE_ORDER_TYPE"
:value=
"row.type"
/>
<dict-tag
:type=
"DICT_TYPE.TRADE_ORDER_TYPE"
:value=
"row.type"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
align=
"center"
label=
"用户信息"
min-width=
"100"
>
<
template
#
default=
"{ row }"
>
<el-button
link
type=
"primary"
>
{{
row
.
userId
}}{{
'['
+
row
.
user
.
nickname
+
']'
}}
</el-button>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"订单来源"
min-width=
"145"
>
<el-table-column
align=
"center"
label=
"订单来源"
min-width=
"145"
>
<
template
#
default=
"{ row }"
>
<
template
#
default=
"{ row }"
>
<dict-tag
v-if=
"row.terminal"
:type=
"DICT_TYPE.TERMINAL"
:value=
"row.terminal"
/>
<dict-tag
v-if=
"row.terminal"
:type=
"DICT_TYPE.TERMINAL"
:value=
"row.terminal"
/>
...
@@ -242,28 +257,26 @@
...
@@ -242,28 +257,26 @@
@
pagination=
"getList"
@
pagination=
"getList"
/>
/>
</ContentWrap>
</ContentWrap>
<TradeOrderDetailForm
ref=
"tradeOrderDetailFormRef"
/>
</template>
</template>
<
script
lang=
"ts"
name=
"Order"
setup
>
<
script
lang=
"ts"
name=
"Order"
setup
>
import
TradeOrderDetailForm
from
'./detail/index.vue'
import
type
{
FormInstance
,
TableColumnCtx
}
from
'element-plus'
import
type
{
FormInstance
,
TableColumnCtx
}
from
'element-plus'
import
{
dateFormatter
}
from
'@/utils/formatTime'
import
{
dateFormatter
}
from
'@/utils/formatTime'
import
*
as
TradeOrderApi
from
'@/api/mall/trade/order'
import
{
OrderItemRespVO
,
OrderVO
}
from
'@/api/mall/trade/order'
import
{
OrderItemRespVO
,
OrderVO
}
from
'@/api/mall/trade/order'
import
{
DICT_TYPE
,
getStrDictOptions
}
from
'@/utils/dict'
import
{
DICT_TYPE
,
getStrDictOptions
}
from
'@/utils/dict'
import
{
formatToFraction
}
from
'@/utils'
import
{
formatToFraction
}
from
'@/utils'
import
{
testData
}
from
'./testData'
import
{
createImageViewer
}
from
'@/components/ImageViewer'
import
{
createImageViewer
}
from
'@/components/ImageViewer'
// const message = useMessage() // 消息弹窗
// const message = useMessage() // 消息弹窗
// const { t } = useI18n() // 国际化
// const { t } = useI18n() // 国际化
const
{
currentRoute
,
push
}
=
useRouter
()
// 路由跳转
const
loading
=
ref
(
true
)
// 列表的加载中
const
loading
=
ref
(
true
)
// 列表的加载中
const
total
=
ref
(
2
)
// 列表的总页数
const
total
=
ref
(
2
)
// 列表的总页数
const
list
=
ref
<
OrderVO
[]
>
([])
// 列表的数据
const
list
=
ref
<
OrderVO
[]
>
([])
// 列表的数据
const
tradeOrderDetailFormRef
=
ref
<
InstanceType
<
typeof
TradeOrderDetailForm
>>
()
const
openForm
=
(
id
)
=>
{
const
openForm
=
()
=>
{
push
(
'/trade/order/detail/'
+
id
)
tradeOrderDetailFormRef
.
value
?.
open
()
}
}
/** 商品图预览 */
/** 商品图预览 */
const
imagePreview
=
(
imgUrl
:
string
)
=>
{
const
imagePreview
=
(
imgUrl
:
string
)
=>
{
...
@@ -280,7 +293,7 @@ interface SpanMethodProps {
...
@@ -280,7 +293,7 @@ interface SpanMethodProps {
}
}
const
spanMethod
=
({
rowIndex
,
columnIndex
}:
SpanMethodProps
)
=>
{
const
spanMethod
=
({
rowIndex
,
columnIndex
}:
SpanMethodProps
)
=>
{
const
colIndex
=
[
5
,
6
,
7
]
const
colIndex
=
[
5
,
6
,
7
,
8
]
// 处理列
// 处理列
if
(
colIndex
.
includes
(
columnIndex
))
{
if
(
colIndex
.
includes
(
columnIndex
))
{
// 处理被合并的行
// 处理被合并的行
...
@@ -348,9 +361,18 @@ const searchList = ref([
...
@@ -348,9 +361,18 @@ const searchList = ref([
const
getList
=
async
()
=>
{
const
getList
=
async
()
=>
{
loading
.
value
=
true
loading
.
value
=
true
try
{
try
{
// const data = await TradeOrderApi.getOrderPage(queryParams)
const
data
=
await
TradeOrderApi
.
getOrderPage
(
queryParams
)
// list.value = data.list
const
list_
=
data
.
list
as
OrderVO
[]
// total.value = data.total
// TODO 测试使用
list_
.
forEach
((
item
)
=>
{
item
.
user
=
{
id
:
247
,
nickname
:
'小妮子'
}
})
list
.
value
=
list_
total
.
value
=
data
.
total
}
finally
{
}
finally
{
loading
.
value
=
false
loading
.
value
=
false
}
}
...
@@ -368,9 +390,17 @@ const resetQuery = () => {
...
@@ -368,9 +390,17 @@ const resetQuery = () => {
handleQuery
()
handleQuery
()
}
}
// 监听路由变化更新列表,解决商品保存后,列表不刷新的问题。
watch
(
()
=>
currentRoute
.
value
,
()
=>
{
getList
()
}
)
/** 初始化 **/
/** 初始化 **/
onMounted
(()
=>
{
onMounted
(()
=>
{
list
.
value
=
testData
//
list.value = testData
getList
()
getList
()
})
})
</
script
>
</
script
>
src/views/mall/trade/order/testData.ts
View file @
345c09ee
...
@@ -18,7 +18,7 @@ export const testData: OrderVO = [
...
@@ -18,7 +18,7 @@ export const testData: OrderVO = [
remark
:
''
,
remark
:
''
,
payOrderId
:
10002
,
payOrderId
:
10002
,
payed
:
false
,
payed
:
false
,
payTime
:
n
ull
,
payTime
:
n
ew
Date
(
'2023-08-17T12:30:00'
)
,
payChannelCode
:
'wx_app'
,
payChannelCode
:
'wx_app'
,
originalPrice
:
80
,
originalPrice
:
80
,
orderPrice
:
80
,
orderPrice
:
80
,
...
@@ -32,26 +32,27 @@ export const testData: OrderVO = [
...
@@ -32,26 +32,27 @@ export const testData: OrderVO = [
deliveryStatus
:
0
,
deliveryStatus
:
0
,
deliveryTime
:
null
,
deliveryTime
:
null
,
receiveTime
:
null
,
receiveTime
:
null
,
receiverName
:
'
Jane Smith
'
,
receiverName
:
'
李四
'
,
receiverMobile
:
'
987-654-3210
'
,
receiverMobile
:
'
19855568989
'
,
receiverAreaId
:
4002
,
receiverAreaId
:
4002
,
receiverPostCode
:
54321
,
receiverPostCode
:
54321
,
receiverDetailAddress
:
'
456 Elm St, Apt 2C
'
,
receiverDetailAddress
:
'
翻斗花园
'
,
afterSaleStatus
:
0
,
afterSaleStatus
:
0
,
refundPrice
:
0
,
refundPrice
:
0
,
couponId
:
null
,
couponId
:
null
,
couponPrice
:
0
,
couponPrice
:
0
,
pointPrice
:
0
,
pointPrice
:
0
,
receiverAreaName
:
'
Townsville
'
,
receiverAreaName
:
'
北京市朝阳区
'
,
items
:
[
items
:
[
{
{
id
:
103
,
id
:
103
,
userId
:
1002
,
userId
:
1002
,
orderId
:
2
,
orderId
:
2
,
spuId
:
5003
,
spuId
:
5003
,
spuName
:
'
Widget C
'
,
spuName
:
'
毛绒鸭子
'
,
skuId
:
6003
,
skuId
:
6003
,
picUrl
:
'https://example.com/images/widget_c.jpg'
,
picUrl
:
'http://127.0.0.1:48080/admin-api/infra/file/5/get/20220723041544165856414464011_BIG.jpg'
,
count
:
1
,
count
:
1
,
originalPrice
:
40
,
originalPrice
:
40
,
originalUnitPrice
:
40
,
originalUnitPrice
:
40
,
...
@@ -61,8 +62,8 @@ export const testData: OrderVO = [
...
@@ -61,8 +62,8 @@ export const testData: OrderVO = [
orderDividePrice
:
40
,
orderDividePrice
:
40
,
afterSaleStatus
:
0
,
afterSaleStatus
:
0
,
properties
:
[
properties
:
[
{
propertyId
:
7001
,
propertyName
:
'
Color'
,
valueId
:
8004
,
valueName
:
'Green
'
},
{
propertyId
:
7001
,
propertyName
:
'
颜色'
,
valueId
:
8004
,
valueName
:
'黄色
'
},
{
propertyId
:
7002
,
propertyName
:
'
Size'
,
valueId
:
8002
,
valueName
:
'Medium
'
}
{
propertyId
:
7002
,
propertyName
:
'
尺寸'
,
valueId
:
8002
,
valueName
:
'小鸭子
'
}
]
]
},
},
{
{
...
@@ -70,9 +71,10 @@ export const testData: OrderVO = [
...
@@ -70,9 +71,10 @@ export const testData: OrderVO = [
userId
:
1002
,
userId
:
1002
,
orderId
:
2
,
orderId
:
2
,
spuId
:
5004
,
spuId
:
5004
,
spuName
:
'
Widget D
'
,
spuName
:
'
毛绒鸭子
'
,
skuId
:
6004
,
skuId
:
6004
,
picUrl
:
'https://example.com/images/widget_d.jpg'
,
picUrl
:
'http://127.0.0.1:48080/admin-api/infra/file/5/get/20220723041544165856414464011_BIG.jpg'
,
count
:
1
,
count
:
1
,
originalPrice
:
40
,
originalPrice
:
40
,
originalUnitPrice
:
40
,
originalUnitPrice
:
40
,
...
@@ -82,14 +84,14 @@ export const testData: OrderVO = [
...
@@ -82,14 +84,14 @@ export const testData: OrderVO = [
orderDividePrice
:
40
,
orderDividePrice
:
40
,
afterSaleStatus
:
0
,
afterSaleStatus
:
0
,
properties
:
[
properties
:
[
{
propertyId
:
700
3
,
propertyName
:
'Color'
,
valueId
:
8005
,
valueName
:
'Yellow
'
},
{
propertyId
:
700
1
,
propertyName
:
'颜色'
,
valueId
:
8004
,
valueName
:
'黄色
'
},
{
propertyId
:
7002
,
propertyName
:
'
Size'
,
valueId
:
8002
,
valueName
:
'Medium
'
}
{
propertyId
:
7002
,
propertyName
:
'
尺寸'
,
valueId
:
8002
,
valueName
:
'大鸭子
'
}
]
]
}
}
],
],
user
:
{
user
:
{
id
:
1002
,
id
:
1002
,
nickname
:
'
janesmith
'
,
nickname
:
'
小妮子
'
,
avatar
:
'https://example.com/images/avatar.jpg'
avatar
:
'https://example.com/images/avatar.jpg'
}
}
},
},
...
@@ -124,26 +126,26 @@ export const testData: OrderVO = [
...
@@ -124,26 +126,26 @@ export const testData: OrderVO = [
deliveryStatus
:
2
,
deliveryStatus
:
2
,
deliveryTime
:
new
Date
(
'2023-08-18T10:30:00'
),
deliveryTime
:
new
Date
(
'2023-08-18T10:30:00'
),
receiveTime
:
new
Date
(
'2023-08-19T11:30:00'
),
receiveTime
:
new
Date
(
'2023-08-19T11:30:00'
),
receiverName
:
'
Sarah Johnson
'
,
receiverName
:
'
张三
'
,
receiverMobile
:
'
555-123-4567
'
,
receiverMobile
:
'
13988886656
'
,
receiverAreaId
:
4003
,
receiverAreaId
:
4003
,
receiverPostCode
:
67890
,
receiverPostCode
:
67890
,
receiverDetailAddress
:
'
789 Oak Ave
'
,
receiverDetailAddress
:
'
成华大道
'
,
afterSaleStatus
:
0
,
afterSaleStatus
:
0
,
refundPrice
:
0
,
refundPrice
:
0
,
couponId
:
2001
,
couponId
:
2001
,
couponPrice
:
5
,
couponPrice
:
5
,
pointPrice
:
0
,
pointPrice
:
0
,
receiverAreaName
:
'
Villageville
'
,
receiverAreaName
:
'
四川省成都市
'
,
items
:
[
items
:
[
{
{
id
:
105
,
id
:
105
,
userId
:
1003
,
userId
:
1003
,
orderId
:
3
,
orderId
:
3
,
spuId
:
5005
,
spuId
:
5005
,
spuName
:
'
Widget E
'
,
spuName
:
'
华为
'
,
skuId
:
6005
,
skuId
:
6005
,
picUrl
:
'http
s://example.com/images/widget_e
.jpg'
,
picUrl
:
'http
://127.0.0.1:48080/admin-api/infra/file/5/get/sj
.jpg'
,
count
:
1
,
count
:
1
,
originalPrice
:
20
,
originalPrice
:
20
,
originalUnitPrice
:
20
,
originalUnitPrice
:
20
,
...
@@ -153,14 +155,14 @@ export const testData: OrderVO = [
...
@@ -153,14 +155,14 @@ export const testData: OrderVO = [
orderDividePrice
:
15
,
orderDividePrice
:
15
,
afterSaleStatus
:
0
,
afterSaleStatus
:
0
,
properties
:
[
properties
:
[
{
propertyId
:
7001
,
propertyName
:
'
Color'
,
valueId
:
8006
,
valueName
:
'Black
'
},
{
propertyId
:
7001
,
propertyName
:
'
颜色'
,
valueId
:
8006
,
valueName
:
'紫色
'
},
{
propertyId
:
7002
,
propertyName
:
'
Size'
,
valueId
:
8002
,
valueName
:
'Medium
'
}
{
propertyId
:
7002
,
propertyName
:
'
选配'
,
valueId
:
8002
,
valueName
:
'标配
'
}
]
]
}
}
],
],
user
:
{
user
:
{
id
:
1003
,
id
:
1003
,
nickname
:
'
sarahjohnson
'
,
nickname
:
'
无敌最俊朗
'
,
avatar
:
'https://example.com/images/avatar.jpg'
avatar
:
'https://example.com/images/avatar.jpg'
}
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment