Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录
切换导航
S
shop-new
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
王天霸
shop-new
Commits
67d5f266
提交
67d5f266
authored
9月 10, 2021
作者:
PC-20210205TDZC\Administrator
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'dev_hxz' of
http://120.27.146.32:8888/wangfulong/shop-new
into dev_zwn
上级
b0565e46
37efc899
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
2623 行增加
和
1021 行删除
+2623
-1021
order.js
src/api/module/order.js
+55
-9
retreat.js
src/api/module/retreat.js
+44
-15
index.js
src/router/index.js
+6
-6
orderDetail.vue
src/views/system/order/components/orderDetail.vue
+368
-180
index.vue
src/views/system/order/index.vue
+351
-124
edit.vue
src/views/system/retreat/edit.vue
+771
-0
index.vue
src/views/system/retreat/retreat/index.vue
+247
-687
index0907.vue
src/views/system/retreat/retreat/index0907.vue
+781
-0
没有找到文件。
src/api/module/order.js
浏览文件 @
67d5f266
import
request
from
'@/utils/request'
// 查询 订单 四种状态和总数量
export
function
getOrderTabData
(
query
)
{
return
request
({
url
:
'/system/order/statusCount'
,
method
:
'get'
,
params
:
query
})
}
// 查询order列表
export
function
listOrder
(
query
)
{
return
request
({
url
:
'/system/order/getOrderList'
,
url
:
'/system/order/getOrder
Seller
List'
,
method
:
'get'
,
params
:
query
})
...
...
@@ -12,25 +21,25 @@ export function listOrder(query) {
// 查询order详细
export
function
orderInfo
(
query
)
{
return
request
({
url
:
'/system/order/getOrderInfo'
,
url
:
'/system/order/getOrder
SellerList
Info'
,
method
:
'get'
,
params
:
query
})
}
// order发货
export
function
sendOrder
(
data
)
{
/*
export function sendOrder(data) {
return request({
url: '/system/order/sendOrde',
method: 'post',
data: data
})
}
}
*/
//查看物流
export
function
expressInfoNew
(
params
){
return
request
({
url
:
'/system/order/get
ExpressInfoNew
'
,
url
:
'/system/order/get
OrderInfoDeliver
'
,
method
:
'get'
,
params
})
...
...
@@ -39,7 +48,7 @@ export function expressInfoNew(params){
// 修改订单收货信息
export
function
orderInfoEdit
(
data
){
return
request
({
url
:
'/system/order/order
InfoEdit
'
,
url
:
'/system/order/order
UpdateAddress
'
,
method
:
'post'
,
data
:
data
})
...
...
@@ -48,7 +57,7 @@ export function orderInfoEdit(data){
//订单备注
export
function
remarkOrder
(
data
){
return
request
({
url
:
'/system/order/
remarkOrder
'
,
url
:
'/system/order/
orderListRemark
'
,
method
:
'post'
,
data
:
data
})
...
...
@@ -90,14 +99,22 @@ export function delOrder(ids) {
})
}
// 订单导出
// 订单导出
-按搜索条件,全部导出
export
function
exportOrder
(
query
)
{
return
request
({
url
:
'/system/order/
batchDeliveryGoodsOu
t'
,
url
:
'/system/order/
unSendOrderGoodsExpor
t'
,
method
:
'get'
,
params
:
query
})
}
// old
// export function exportOrder(query) {
// return request({
// url: '/system/order/getOrderListExport',
// method: 'get',
// params: query
// })
// }
// 批量发货
export
function
deliveryOrder
(
data
)
{
...
...
@@ -107,3 +124,32 @@ export function deliveryOrder(data) {
data
:
data
})
}
// 订单 右上角的 批量发货接口 /system/order/batchDeliveryGoodsOut 老接口
// 批量 去发货
export
function
deliveryOrderOne
(
data
)
{
return
request
({
url
:
'/system/order/orderListSend'
,
method
:
'post'
,
data
:
data
})
}
// 批量 补单发货
export
function
deliveryOrderTwo
(
data
)
{
return
request
({
url
:
'/system/order/orderListAllSend'
,
method
:
'post'
,
data
:
data
})
}
//
// // 单商品订单 补单发货
// export function toReissueOrderData(data) {
// return request({
// url: '/system/order/orderListAgainSend',
// method: 'post',
// data: data
// })
// }
src/api/module/retreat.js
浏览文件 @
67d5f266
...
...
@@ -20,21 +20,6 @@ export function refundReject(data) {
}
// 查询retreat列表
export
function
listRetreat
(
query
)
{
return
request
({
...
...
@@ -88,3 +73,47 @@ export function getSearchParams(query) {
// })
// }
// 列表
export
function
getRetreatList
(
query
)
{
return
request
({
url
:
'/system/retreat/list'
,
method
:
'get'
,
params
:
query
})
}
// 详情
export
function
getASOrderDetail
(
query
)
{
return
request
({
url
:
'/system/retreat/edit'
,
method
:
'get'
,
params
:
query
})
}
// 售后 同意类操作
export
function
agreeRefundData
(
data
)
{
return
request
({
url
:
'/system/retreat/refundAgree'
,
method
:
'post'
,
data
:
data
})
}
// 售后 拒绝类 操作
export
function
refuseRefundData
(
data
)
{
return
request
({
url
:
'/system/retreat/refundReject'
,
method
:
'post'
,
data
:
data
})
}
// 退货退款 地址
export
function
getASAdressData
(
query
)
{
return
request
({
url
:
'/local/AfterSalesAddress/list'
,
method
:
'get'
,
params
:
query
})
}
src/router/index.js
浏览文件 @
67d5f266
...
...
@@ -216,12 +216,12 @@ export const constantRoutes = [
name
:
'modelFields'
,
meta
:
{
title
:
'商品导入'
}
},
{
path
:
'management'
,
component
:
(
resolve
)
=>
require
([
'@/views/system/goodsimport/goodsgement.vue'
],
resolve
),
name
:
'goodsgement'
,
meta
:
{
title
:
'商品管理'
}
}
//
{
//
path: 'management',
//
component: (resolve) => require(['@/views/system/goodsimport/goodsgement.vue'], resolve),
//
name: 'goodsgement',
//
meta: { title: '商品管理' }
//
}
]
}
/* 正式上线需要 注释 */
...
...
src/views/system/order/components/orderDetail.vue
浏览文件 @
67d5f266
...
...
@@ -17,23 +17,23 @@
<div>
<el-row
class=
"row-title"
>
<el-col
:span=
"3"
class=
"text-r"
>
订单编号
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
orderDetail
?
orderDetail
.
parent_order_sn
:
''
}}
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
orderDetail
?
orderDetail
.
parent_order_sn
:
''
}}
</el-col>
</el-row>
<el-row
class=
"row-title"
>
<el-col
:span=
"3"
class=
"text-r"
>
下单时间
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
orderDetail
?
formatter
(
orderDetail
.
addtime
)
:
''
}}
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
orderDetail
?
formatter
(
orderDetail
.
created_time
)
:
''
}}
</el-col>
</el-row>
<el-row
class=
"row-title"
>
<el-col
:span=
"3"
class=
"text-r"
>
商品数量
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
goodsNum
}}
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
orderDetail
?
orderDetail
.
goods_total
:
''
}}
</el-col>
</el-row>
<el-row
class=
"row-title"
>
<el-col
:span=
"3"
class=
"text-r"
>
商品总价
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
goodsPrice
}}
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
orderDetail
?
orderDetail
.
goods_price
/
100
:
''
}}
</el-col>
</el-row>
<el-row
class=
"row-title"
>
<el-col
:span=
"3"
class=
"text-r"
>
运费
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
goodsFreight
}}
元
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
orderDetail
?
orderDetail
.
dispatch_price
/
100
:
''
}}
</el-col>
</el-row>
</div>
</div>
...
...
@@ -43,18 +43,18 @@
<img
class=
"icon"
src=
"@/assets/image/order/icon2.png"
alt=
""
>
<span>
买家信息
</span>
</div>
<el-button
size=
"mini"
type=
"primary"
@
click=
"modifyinfo"
:disabled=
"orderDetail && orderDetail.status >
2"
>
修改收货
信息
</el-button>
<el-button
size=
"mini"
type=
"primary"
@
click=
"modifyinfo"
:disabled=
"orderDetail && orderDetail.status >
1"
>
修改买家
信息
</el-button>
</div>
<div>
<el-row
class=
"row-title"
>
<el-col
:span=
"3"
class=
"text-r"
>
收货人姓名
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
orderDetail
?
orderDetail
.
shipping_name
:
''
}}
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
orderDetail
?
orderDetail
.
real_name
:
''
}}
</el-col>
<el-col
:span=
"3"
class=
"text-r"
>
联系电话
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
orderDetail
?
orderDetail
.
phone
:
''
}}
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
orderDetail
?
orderDetail
.
mobile
:
''
}}
</el-col>
</el-row>
<el-row
class=
"row-title"
>
<el-col
:span=
"3"
class=
"text-r"
>
收货地址
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
orderDetail
?
orderDetail
.
provi
nce
+
orderDetail
.
city
+
orderDetail
.
county
+
orderDetail
.
town
+
orderDetail
.
address
:
''
}}
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
orderDetail
?
orderDetail
.
provi
ce
+
orderDetail
.
city
+
orderDetail
.
district
+
orderDetail
.
street
+
orderDetail
.
address
:
''
}}
</el-col>
<el-col
:span=
"3"
class=
"text-r"
></el-col>
<el-col
:span=
"6"
class=
"text-l"
></el-col>
</el-row>
...
...
@@ -67,52 +67,52 @@
<span>
商品信息
</span>
</div>
<div>
<el-button
size=
"mini"
type=
"primary"
@
click=
"goShipping(1)"
:disabled=
"orderDetail && orderDetail.status > 1"
>
去发货
</el-button>
<el-button
size=
"mini"
@
click=
"goShipping(2)"
:disabled=
"orderDetail && orderDetail.status != 2"
>
补单发货
</el-button>
<el-button
size=
"mini"
type=
"primary"
@
click=
"goShipping(1)"
>
去发货
</el-button>
<el-button
size=
"mini"
type=
"primary"
@
click=
"goShipping(2)"
>
补单发货
</el-button>
</div>
</div>
<el-table
:data=
"orderDetail ? orderDetail.item : []"
style=
"border: 1px solid #eee;"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"55"
/>
<el-table-column
label=
"订单号"
prop=
"order_sn"
/>
<el-table-column
label=
"商品名称"
>
<el-table
:data=
"orderGoodsDetail"
style=
"border: 1px solid #eee;"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"55"
align=
"center"
></el-table-column>
<el-table-column
label=
"订单号"
prop=
"goods_order_sn"
align=
"center"
></el-table-column>
<el-table-column
label=
"商品名称"
prop=
"title"
align=
"center"
></el-table-column>
<el-table-column
label=
"下单时间"
prop=
"created_time"
align=
"center"
>
<template
slot-scope=
"scope"
>
{{
scope
.
row
.
goods_list
[
0
].
title
}}
{{
scope
.
row
.
created_time
?
formatter
(
scope
.
row
.
created_time
)
:
''
}}
</
template
>
</el-table-column>
<el-table-column
label=
"
商品规格
"
>
<el-table-column
label=
"
规格/数量/单价"
align=
"center
"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
goods_list
[
0
].
goods_option_title
}}
{{
scope
.
row
.
goods_option_title
}}
<br/>
{{
scope
.
row
.
total
}}
<br/>
{{
scope
.
row
.
goods_price
/
100
}}
</
template
>
</el-table-column>
<el-table-column
label=
"
单价
"
>
<el-table-column
label=
"
商品订单状态"
align=
"center
"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
goods_list
[
0
].
price
}}
{{
goodsStatusFormatter
(
scope
.
row
.
goods_status
)
}}
</
template
>
</el-table-column>
<el-table-column
label=
"
数量
"
>
<el-table-column
label=
"
快递公司"
prop=
"express_company_name"
align=
"center
"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
goods_list
[
0
].
num
}}
{{
scope
.
row
.
express_company_name
?
scope
.
row
.
express_company_name
:
'—'
}}
</
template
>
</el-table-column>
<el-table-column
label=
"
商品状态
"
>
<el-table-column
label=
"
快递单号"
prop=
"express_sn"
align=
"center
"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
goods_list
[
0
].
goods_status
==
0
?
'未发货'
:
'已发货'
}}
{{
scope
.
row
.
express_sn
?
scope
.
row
.
express_sn
:
'—'
}}
</
template
>
</el-table-column>
<el-table-column
label=
"
快递公司
"
>
<el-table-column
label=
"
发货时间"
prop=
"send_time"
align=
"center
"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
goods_list
[
0
].
deliver_Name
}}
{{
scope
.
row
.
send_time
?
scope
.
row
.
send_time
:
'—'
}}
</
template
>
</el-table-column>
<el-table-column
label=
"
快递单号"
prop=
"Tel
"
>
<el-table-column
label=
"
操作"
class-name=
"small-padding fixed-width"
align=
"center
"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
goods_list
[
0
].
deliver_no
}}
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
class-name=
"small-padding fixed-width"
>
<
template
slot-scope=
"scope"
>
<el-button
size=
"mini"
type=
"text"
@
click=
"goShipping(3, scope.row.goods_list[0].goods_id)"
:disabled=
"scope.row.goods_list[0].goods_status > 0"
>
{{
getStatus
(
scope
.
row
.
goods_list
[
0
].
goods_status
,
scope
.
row
.
goods_list
[
0
].
is_reissue
)
}}
</el-button>
<el-button
v-if=
"scope.row.goods_list[0].goods_status > 0"
size=
"mini"
type=
"text"
@
click=
"getExpressInfoNew(scope.row.order_sn, scope.row.goods_list[0].goods_id, scope.row.goods_list[0].sku_id)"
>
查看物流
</el-button>
<span
style=
"font-size:12px;padding: 0 15px 0 0;"
v-if=
"deliveryTypeText(scope.row.goods_status,scope.row.is_reissue) == '已补单'"
>
已补单
</span>
<el-button
size=
"mini"
type=
"text"
v-if=
"deliveryTypeText(scope.row.goods_status,scope.row.is_reissue) == '去补单'"
@
click=
"goShipping(4,scope.row.id)"
>
去补单
</el-button>
<el-button
size=
"mini"
type=
"text"
v-if=
"deliveryTypeText(scope.row.goods_status,scope.row.is_reissue) == '去发货'"
@
click=
"goShipping(3,scope.row.id)"
>
去发货
</el-button>
<el-button
size=
"mini"
type=
"text"
@
click=
"getExpressInfoNew(scope.row)"
>
查看物流
</el-button>
</
template
>
</el-table-column>
</el-table>
...
...
@@ -136,30 +136,54 @@
</div>
<el-button
size=
"mini"
type=
"primary"
@
click=
"addRemark"
>
添加备注
</el-button>
</div>
<div
style=
"width: 75%; min-height: 100px; border: 1px solid #eee; padding: 10px;"
>
{{orderDetail ? orderDetail.remark : ''}}
</div>
<div
style=
"width: 75%; min-height: 100px; border: 1px solid #eee; padding: 10px;"
>
<!-- <el-timeline-item-->
<!-- v-for="(remarkItem, index) in orderDetail.remark"-->
<!-- :key="index"-->
<!-- color="#0bbd87"-->
<!-- :timestamp="formatter(remarkItem.date_time)">-->
<!-- {{remarkItem.content}}-->
<!-- </el-timeline-item>-->
<!-- </el-timeline>-->
<!-- <div ">暂无留言备注</div>-->
<p
v-if=
"orderDetail.remark.length == 0"
style=
"color:#999;"
>
暂无备注
</p>
<div
v-for=
"(remarkItem, index) in orderDetail.remark"
:key=
"index"
class=
"remark-con"
>
<span
class=
"remark-time"
>
{{ formatter(remarkItem.date_time) }}
</span>
<span
class=
"remark-text"
>
{{ remarkItem.content }}
</span>
</div>
</div>
</div>
</div>
</el-card>
<!-- 修改买家信息 -->
<el-dialog
title=
"修改买家信息"
:visible
.
sync=
"modifyinfoDialog"
width=
"
25
%"
width=
"
30
%"
:modal-append-to-body=
"false"
:close-on-click-modal=
"false"
:append-to-body=
"true"
center
>
<div
style=
"margin: 0
10%
"
>
<div
style=
"margin: 0
20px;
"
>
<el-form
ref=
"addressForm"
:model=
"addressForm"
label-width=
"100px"
>
<el-form-item
label=
"收货人姓名:"
>
<el-input
size=
"mini"
v-model=
"addressForm.name"
placeholder=
"请输入收货人姓名"
></el-input>
<el-input
size=
"mini"
v-model=
"addressForm.
shipping_
name"
placeholder=
"请输入收货人姓名"
></el-input>
</el-form-item>
<el-form-item
label=
"联系电话:"
>
<el-input
size=
"mini"
v-model=
"addressForm.
mobile
"
placeholder=
"请输入联系电话"
></el-input>
<el-input
size=
"mini"
v-model=
"addressForm.
tel
"
placeholder=
"请输入联系电话"
></el-input>
</el-form-item>
<el-form-item
label=
"收货地址:"
>
<el-cascader
v-model=
"addressForm.areaList"
:props=
'props'
placeholder=
"请选择具体的省市区"
style=
"width:100%"
></el-cascader>
<el-input
size=
"mini"
v-model=
"addressForm.street_name"
placeholder=
"请输入街道"
></el-input>
<el-input
size=
"mini"
v-model=
"addressForm.address"
placeholder=
"请输入收货地址"
></el-input>
<el-cascader
v-model=
"addressForm.areaList"
:props=
'props'
ref=
"ssqCascader"
placeholder=
"请选择具体的省市区"
style=
"width:100%"
></el-cascader>
</el-form-item>
<el-form-item
label=
"街道:"
>
<el-input
size=
"mini"
v-model=
"addressForm.street"
placeholder=
"请输入街道"
></el-input>
</el-form-item>
<el-form-item
label=
"详细地址:"
>
<el-input
size=
"mini"
v-model=
"addressForm.address"
placeholder=
"请输入详细地址"
></el-input>
</el-form-item>
</el-form>
</div>
...
...
@@ -168,6 +192,7 @@
<el-button
size=
"mini"
type=
"primary"
@
click=
"handleModifyInfo"
>
确 定
</el-button>
</span>
</el-dialog>
<!-- 发货 -->
<el-dialog
:title=
"titleInfo"
:visible
.
sync=
"goShippingDialog"
...
...
@@ -245,14 +270,19 @@
</template>
<
script
>
import
{
orderInfo
,
sendOrder
,
expressInfoNew
,
remarkOrder
,
orderInfoEdit
}
from
'@/api/module/order'
import
{
orderInfo
,
sendOrder
,
expressInfoNew
,
remarkOrder
,
orderInfoEdit
,
deliveryOrderOne
,
deliveryOrderTwo
,
toReissueOrderData
}
from
'@/api/module/order'
import
{
dateFormat
}
from
'@/utils'
import
{
getAreaList
}
from
'@/api/module/retreat/address'
export
default
{
props
:
{
// 订单信息
orderDetail
:
{
type
:
Object
},
// 商品订单 信息
orderGoodsDetail
:
{
type
:
Array
,
},
expressLists
:
{
type
:
Array
}
...
...
@@ -268,10 +298,10 @@ export default {
dialogCheck
:
false
,
titleInfo
:
''
,
addressForm
:
{
name
:
''
,
mobile
:
''
,
shipping_
name
:
''
,
tel
:
''
,
address
:
''
,
street
_name
:
''
,
street
:
''
,
areaList
:
[]
// 省市区
},
activities
:
[],
...
...
@@ -284,113 +314,290 @@ export default {
label
:
'name'
,
leaf
:
'leaf'
},
goShippingNum
:
0
,
goods_ids
:
null
goShippingNum
:
0
,
// 发货类型
goods_ids
:
null
,
// 发货的商品订单 id
}
},
computed
:
{
goodsFreight
()
{
let
freight
=
0
if
(
this
.
orderDetail
)
{
this
.
orderDetail
.
item
.
map
(
item
=>
{
freight
+=
item
.
freight
})
}
return
freight
},
goodsPrice
()
{
let
price
=
0
if
(
this
.
orderDetail
)
{
this
.
orderDetail
.
item
.
map
(
item
=>
{
price
+=
item
.
goods_list
[
0
].
price
})
watch
:
{},
created
()
{},
mounted
()
{},
methods
:
{
/** 商品 发货状态 */
goodsStatusFormatter
(
status
)
{
let
res
=
'—'
;
if
(
status
==
0
)
{
res
=
'未发货'
}
else
if
(
status
==
1
)
{
res
=
'已发货'
}
else
if
(
status
==
2
)
{
res
=
'已收货'
}
else
if
(
status
==
3
)
{
res
=
'配货中'
}
else
if
(
status
==
4
)
{
res
=
'拒收'
}
return
price
return
res
},
goodsNum
()
{
let
goodsNum
=
0
if
(
this
.
orderDetail
)
{
this
.
orderDetail
.
item
.
map
(
item
=>
{
goodsNum
+=
item
.
goods_list
[
0
].
num
})
}
return
goodsNum
}
},
methods
:
{
getStatus
(
status
,
is_reissue
)
{
return
status
==
0
?
'去发货'
:
status
==
1
&&
is_reissue
==
1
?
'已补单'
:
status
==
1
&&
is_reissue
==
0
?
'已发货'
:
'已完成'
/**
* 商品订单 操作类型
* gs:goods_status ir:is_reissue
* 返回值有三种情况:去发货,补单,已补单(不可点击)
* */
deliveryTypeText
(
gs
,
ir
)
{
return
gs
==
0
?
'去发货'
:
ir
==
0
?
'去补单'
:
'已补单'
},
/**
* 时间戳转换为日期格式
* 项目中,后台一般均返回10位数的时间戳,在公用的封装方法dateFormat中,第一个入参,需要*1000 ,具体参考 new Date(时间戳) 方法
* */
formatter
(
time
)
{
return
dateFormat
(
time
,
'Y-m-d H:i:s'
)
return
dateFormat
(
time
*
1000
,
'Y-m-d H:i:s'
)
},
/**
* 发货
* val 发货类型:1-商品的批量发货;2-批量补单发货;3-单商品发货;4-单格个商品订单 补单发货
* */
// 发货,补单,补单发货
goShipping
(
val
,
id
)
{
//console.log(361,this.multipleSelection);
this
.
goShippingNum
=
val
this
.
goods_ids
=
id
this
.
goods_ids
=
[]
this
.
expressNum
=
''
this
.
express_sn
=
''
let
isContinue
=
true
;
// 批量发货
if
(
this
.
goShippingNum
===
1
)
{
if
(
this
.
multipleSelection
.
length
===
0
)
{
this
.
$message
({
type
:
'warning'
,
message
:
'请先选择需要发货的商品'
});
return
}
for
(
let
i
=
0
;
i
<
this
.
multipleSelection
.
length
;
i
++
)
{
// 批量发货 goods_status 0:未发货,1:已发货,2:已收货,3:配货中,4:拒收
if
(
this
.
multipleSelection
[
i
].
goods_status
>
0
)
{
this
.
$message
({
type
:
'warning'
,
message
:
'所选商品中部分已发货,请重新选择'
});
isContinue
=
false
break
;
}
else
{
let
idNum
=
Number
(
this
.
multipleSelection
[
i
].
id
);
this
.
goods_ids
.
push
(
idNum
);
}
}
if
(
!
isContinue
)
{
// 批量发货时候,goods_ids 为数组 [3,4,5]
this
.
goods_ids
=
[]
return
;
}
this
.
titleInfo
=
'去发货'
this
.
goShippingDialog
=
true
}
// 批量补单
if
(
this
.
goShippingNum
===
2
)
{
if
(
this
.
multipleSelection
.
length
===
0
)
{
this
.
$message
({
type
:
'warning'
,
message
:
'请先选择需要补单发货的商品'
});
return
}
for
(
let
i
=
0
;
i
<
this
.
multipleSelection
.
length
;
i
++
)
{
// 批量补单 is_reissue 1-已补发;2-未补发
// 首先,先发货了,才能补单
if
(
this
.
multipleSelection
[
i
].
goods_status
>
0
)
{
if
(
this
.
multipleSelection
[
i
].
is_reissue
)
{
this
.
$message
({
type
:
'warning'
,
message
:
'所选商品中部分已补单,请重新选择'
});
isContinue
=
false
;
break
;
}
else
{
let
idObj
=
{
id
:
Number
(
this
.
multipleSelection
[
i
].
id
)};
this
.
goods_ids
.
push
(
idObj
);
}
}
else
{
isContinue
=
false
;
this
.
$message
({
type
:
'warning'
,
message
:
'所选商品中部分未发货,不能进行补单操作,请重新选择'
});
break
}
}
if
(
!
isContinue
)
{
this
.
goods_ids
=
[]
return
;
}
this
.
titleInfo
=
'补单发货'
this
.
goShippingDialog
=
true
}
// 单商品订单 发货
if
(
this
.
goShippingNum
===
3
)
{
this
.
goods_ids
=
id
;
this
.
titleInfo
=
'去发货'
this
.
goShippingDialog
=
true
}
if
(
this
.
multipleSelection
.
length
==
0
&&
val
!=
3
)
{
// 单格个商品订单 补单发货
if
(
this
.
goShippingNum
===
4
)
{
this
.
goods_ids
=
id
;
this
.
titleInfo
=
'去补单'
this
.
goShippingDialog
=
true
}
//console.log(5555555,this.goods_ids);
},
/** ReissueOrder*/
/** 批量发货,批量补单发货,单个发货,单个补单发货 */
handleGoShipping
()
{
if
(
!
this
.
expressNum
)
{
this
.
$message
({
type
:
'warning'
,
message
:
'请选择快递公司'
})
return
}
if
(
!
this
.
express_sn
)
{
this
.
$message
({
type
:
'warning'
,
message
:
'请
选择需要发货的商品
'
message
:
'请
输入快递单号
'
})
return
}
switch
(
val
)
{
case
1
:
this
.
titleInfo
=
'去发货'
this
.
goShippingDialog
=
true
break
case
2
:
this
.
titleInfo
=
'补单发货'
this
.
goShippingDialog
=
true
break
case
3
:
this
.
titleInfo
=
'去发货'
this
.
goShippingDialog
=
true
break
default
:
break
// 物流公司,名称
let
expressName
=
''
this
.
expressLists
.
map
((
item
)
=>
{
if
(
item
.
value
==
this
.
expressNum
)
{
expressName
=
item
.
label
}
})
// 批量 去发货
if
(
this
.
goShippingNum
===
1
)
{
let
paramsObj
=
{
order_goods_ids
:
this
.
goods_ids
,
express_company_name
:
expressName
,
// 快递公司 名称
express_sn
:
this
.
express_sn
,
// 快递单号
//express_code: ''
}
//console.log(11111,paramsObj);
deliveryOrderOne
(
paramsObj
).
then
(
res
=>
{
if
(
res
.
code
==
1
)
{
this
.
$message
({
type
:
'success'
,
message
:
'发货成功'
});
this
.
goShippingDialog
=
false
this
.
handleInfo
()
}
else
{
this
.
$message
({
type
:
'error'
,
message
:
res
.
message
?
res
.
message
:
'发货失败'
});
}
});
}
// 批量 补单发货
if
(
this
.
goShippingNum
===
2
)
{
let
listObj
=
{
list
:
[]
}
this
.
goods_ids
.
forEach
((
item
,
index
)
=>
{
item
[
'express_name'
]
=
expressName
;
item
[
'express_sn'
]
=
this
.
express_sn
})
listObj
.
list
=
this
.
goods_ids
;
//console.log("批量补单发货",listObj);
deliveryOrderTwo
(
listObj
).
then
(
res
=>
{
if
(
res
.
code
==
1
)
{
this
.
$message
({
type
:
'success'
,
message
:
'补单发货成功'
});
this
.
goShippingDialog
=
false
this
.
handleInfo
()
}
else
{
this
.
$message
({
type
:
'error'
,
message
:
res
.
message
?
res
.
message
:
'补单发货失败'
});
}
});
}
// 单商品订单 发货
if
(
this
.
goShippingNum
===
3
)
{
let
paramsObj
=
{
order_goods_ids
:
[],
//this.goods_ids,
express_company_name
:
expressName
,
// 快递公司 名称
express_sn
:
this
.
express_sn
,
// 快递单号
//express_code: ''
}
paramsObj
.
order_goods_ids
.
push
(
this
.
goods_ids
);
//console.log(11111,paramsObj);
deliveryOrderOne
(
paramsObj
).
then
(
res
=>
{
if
(
res
.
code
==
1
)
{
this
.
$message
({
type
:
'success'
,
message
:
'发货成功'
});
this
.
goShippingDialog
=
false
this
.
handleInfo
()
}
else
{
this
.
$message
({
type
:
'error'
,
message
:
res
.
message
?
res
.
message
:
'发货失败'
});
}
});
}
// 单个商品订单 补单发货
if
(
this
.
goShippingNum
===
4
)
{
let
singleOrderObj
=
{
list
:
[]};
let
orderObj
=
{
id
:
0
,
express_name
:
''
,
express_sn
:
''
}
orderObj
.
id
=
this
.
goods_ids
;
orderObj
.
express_name
=
expressName
;
orderObj
.
express_sn
=
this
.
express_sn
;
singleOrderObj
.
list
.
push
(
orderObj
);
deliveryOrderTwo
(
singleOrderObj
).
then
(
res
=>
{
if
(
res
.
code
==
1
)
{
this
.
$message
({
type
:
'success'
,
message
:
'补单发货成功'
});
this
.
goShippingDialog
=
false
this
.
handleInfo
()
}
else
{
this
.
$message
({
type
:
'error'
,
message
:
res
.
message
?
res
.
message
:
'补单发货失败'
});
}
});
}
// sendOrder(params).then(res => {})
},
// 订单详情
handleInfo
()
{
this
.
detailDialog
=
true
// let order_sn = '20200318e095e2d09354'
let
order_sn
=
this
.
orderDetail
.
parent_order_sn
orderInfo
({
order_sn
:
order_sn
}).
then
(
res
=>
{
if
(
res
.
code
==
1
)
{
this
.
orderDetail
=
res
.
data
}
})
let
id
=
this
.
orderDetail
.
id
this
.
$emit
(
'updateOrder'
,
id
);
},
// 选中的表格
handleSelectionChange
(
val
)
{
this
.
multipleSelection
=
val
;
},
/** 修改 买家信息 */
modifyinfo
()
{
this
.
addressForm
=
{
name
:
''
,
mobile
:
''
,
shipping_
name
:
''
,
tel
:
''
,
address
:
''
,
street
_name
:
''
street
:
''
}
this
.
modifyinfoDialog
=
true
},
/
/ 修改买家信息
/
** 保存 买家信息 */
handleModifyInfo
()
{
if
(
!
this
.
addressForm
.
name
)
{
// console.log(555,this.addressForm.areaList);
// let ssqLabelList = this.$refs['ssqCascader'].getCheckedNodes()[0].pathLabels;
// console.log(444,ssqLabelList)
if
(
!
this
.
addressForm
.
shipping_name
)
{
this
.
$message
({
type
:
'warning'
,
message
:
'请输入收货人姓名'
})
return
}
if
(
!
this
.
addressForm
.
mobile
)
{
if
(
!
this
.
addressForm
.
tel
)
{
this
.
$message
({
type
:
'warning'
,
message
:
'请输入联系电话'
...
...
@@ -399,7 +606,7 @@ export default {
}
// 手机号码格式校验
const
reg
=
/^1
[
3456789
]\d{9}
$/
;
if
(
!
reg
.
test
(
this
.
addressForm
.
mobile
))
{
if
(
!
reg
.
test
(
this
.
addressForm
.
tel
))
{
this
.
$message
({
type
:
'warning'
,
message
:
'手机号码格式有误'
...
...
@@ -413,7 +620,7 @@ export default {
})
return
}
if
(
!
this
.
addressForm
.
street
_name
)
{
if
(
!
this
.
addressForm
.
street
)
{
this
.
$message
({
type
:
'warning'
,
message
:
'请输入街道'
...
...
@@ -428,16 +635,23 @@ export default {
return
}
// 省市区 转化
let
ssqLabelList
=
[];
if
(
this
.
addressForm
.
areaList
&&
this
.
addressForm
.
areaList
.
length
>
1
)
{
ssqLabelList
=
this
.
$refs
[
'ssqCascader'
].
getCheckedNodes
()[
0
].
pathLabels
;
}
let
params
=
{
id
:
this
.
orderDetail
.
parent_order_sn
,
shipping_name
:
this
.
addressForm
.
name
,
mobile
:
this
.
addressForm
.
mobile
,
street_name
:
this
.
addressForm
.
street_name
,
order_sn
:
this
.
orderDetail
.
order_sn
,
shipping_name
:
this
.
addressForm
.
shipping_name
,
province_name
:
ssqLabelList
[
0
]
?
ssqLabelList
[
0
]
:
''
,
city_name
:
ssqLabelList
[
1
]
?
ssqLabelList
[
1
]
:
''
,
district_name
:
ssqLabelList
[
2
]
?
ssqLabelList
[
2
]
:
''
,
street_name
:
this
.
addressForm
.
street
,
address
:
this
.
addressForm
.
address
,
province_name
:
this
.
addressForm
.
areaList
[
0
],
city_name
:
this
.
addressForm
.
areaList
[
1
],
district_name
:
this
.
addressForm
.
areaList
[
2
]
tel
:
this
.
addressForm
.
tel
,
}
orderInfoEdit
(
params
).
then
(
res
=>
{
if
(
res
.
code
==
1
)
{
this
.
$message
({
...
...
@@ -449,76 +663,31 @@ export default {
}
})
},
// 去发货
handleGoShipping
()
{
if
(
!
this
.
expressNum
)
{
this
.
$message
({
type
:
'warning'
,
message
:
'请选择快递公司'
})
return
}
if
(
!
this
.
express_sn
)
{
this
.
$message
({
type
:
'warning'
,
message
:
'请输入快递单号'
})
/** 查看 商品订单 物流信息 */
getExpressInfoNew
(
row
)
{
// 如果 商品订单没有发货,则不用请求了
if
(
row
.
goods_status
==
0
)
{
this
.
$message
({
type
:
'warning'
,
message
:
'您还未发货,暂无物流信息'
});
return
}
let
expressName
=
''
this
.
expressLists
.
map
((
item
,
index
)
=>
{
if
(
item
.
value
==
this
.
expressNum
)
{
expressName
=
item
.
label
}
})
let
goods_ids
=
[]
if
(
this
.
goShippingNum
!=
3
)
{
this
.
multipleSelection
.
map
(
item
=>
{
goods_ids
.
push
(
item
.
goods_list
[
0
].
goods_id
)
})
}
else
{
goods_ids
=
[
this
.
goods_ids
]
}
let
params
=
{
order_goods_ids
:
goods_ids
,
express_company_name
:
expressName
,
express_sn
:
this
.
express_sn
,
express_code
:
this
.
expressNum
}
sendOrder
(
params
).
then
(
res
=>
{
if
(
res
.
code
==
1
)
{
this
.
$message
({
type
:
'success'
,
message
:
'商品已发货'
})
this
.
goShippingDialog
=
false
this
.
handleInfo
()
}
})
},
// 查看物流
getExpressInfoNew
(
sn
,
goodsId
,
skuId
)
{
this
.
dialogCheck
=
true
let
params
=
{
order_sn
:
sn
,
goods_id
:
goodsId
,
sku_id
:
skuId
goods_order_sn
:
row
.
goods_order_sn
,
sku_id
:
row
.
goods_option_id
}
expressInfoNew
(
params
).
then
(
res
=>
{
if
(
res
.
code
==
1
)
{
this
.
activities
=
res
.
data
.
order
Track
if
(
res
.
code
==
1
&&
res
.
data
)
{
this
.
activities
=
res
.
data
.
order
_track
?
res
.
data
.
order_track
:
[];
}
})
},
/** 添加备注 */
addRemark
()
{
this
.
remark
=
''
this
.
addRemarkDialog
=
true
},
/
/ 订单备注
/
** 订单备注 */
getRemarkOrder
()
{
if
(
!
this
.
remark
)
{
this
.
$message
({
...
...
@@ -529,7 +698,7 @@ export default {
}
let
params
=
{
order_
id
:
this
.
orderDetail
.
item
[
0
]
.
order_sn
,
order_
sn
:
this
.
orderDetail
.
order_sn
,
remark
:
this
.
remark
}
remarkOrder
(
params
).
then
(
res
=>
{
...
...
@@ -623,7 +792,7 @@ export default {
/
deep
/
.el-input--medium
.el-input__inner
{
height
:
28px
;
}
.orderDetail
{
height
:
660px
;
overflow-y
:
auto
;
...
...
@@ -662,4 +831,23 @@ export default {
height
:
600px
;
overflow-y
:
auto
;
}
</
style
>
\ No newline at end of file
/* 留言框样式 */
.remark-con
{
line-height
:
28px
;
color
:
#333
;
box-shadow
:
0
2px
10px
0
rgba
(
0
,
0
,
0
,
0.05
);
margin
:
10px
;
padding
:
10px
;
}
.remark-con
>
p
{
margin
:
0
;
padding
:
10px
;
}
.remark-con
.remark-time
{
padding
:
0
20px
;
}
.remark-con
.remark-text
{
}
</
style
>
src/views/system/order/index.vue
浏览文件 @
67d5f266
<
template
>
<div
class=
"app-container"
>
<el-card
class=
"box-card"
>
<div
style=
"position: relative;"
>
<el-card
class=
"box-card
box-cardone
"
>
<div
style=
"position: relative;"
class=
"clearfixall"
>
<el-tabs
v-model=
"activeName"
@
tab-click=
"handleClick"
>
<el-tab-pane
name=
"first"
>
<div
slot=
"label"
>
待发货
{{
activeName
==
'first'
?
'('
+
total1
+
')'
:
''
}}
</div>
<!--
<div
slot=
"label"
>
待发货
{{
activeName
==
'first'
?
'('
+
total1
+
')'
:
'(0)'
}}
</div>
-->
<div
slot=
"label"
>
待发货
{{
'('
+
total1
+
')'
}}
</div>
</el-tab-pane>
<el-tab-pane
name=
"second"
>
<div
slot=
"label"
>
已发货
{{
activeName
==
'second'
?
'('
+
total2
+
')'
:
''
}}
</div>
<div
slot=
"label"
>
已发货
{{
'('
+
total2
+
')'
}}
</div>
</el-tab-pane>
<el-tab-pane
label=
"已完成"
name=
"third"
></el-tab-pane>
<el-tab-pane
label=
"全部订单"
name=
"fourth"
></el-tab-pane>
</el-tabs>
<div
style=
"position: absolute; top: -5px; right: 0;"
>
<div
v-show=
"this.activeName == 'first' "
style=
"position: absolute; top: -5px; right: 0;"
>
<el-button
size=
"mini"
type=
"primary"
icon=
"el-icon-download"
@
click=
"handleExport"
>
导出订单
</el-button>
<el-button
size=
"mini"
icon=
"el-icon-position"
@
click=
"isDeliveryOpen = true"
>
批量发货
</el-button>
</div>
</div>
<div
class=
"scollbox"
>
<div
class=
"form-box"
>
<el-form
ref=
"form"
:model=
"form"
label-width=
"85px"
>
<el-form
class=
"form-params"
ref=
"form"
:model=
"form"
label-width=
"85px"
>
<el-row
type=
"flex"
class=
"row-bg"
justify=
"space-around"
>
<el-col
:span=
"6"
>
<el-form-item
label=
"订单号:"
>
<el-input
size=
"mini"
v-model=
"form.order_sn"
placeholder=
"请输入订单号"
/>
<el-input
size=
"mini"
v-model=
"form.order_sn"
placeholder=
"请输入订单号"
/>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"商品名称:"
>
<el-input
size=
"mini"
v-model=
"form.GoodsName"
placeholder=
"请输入商品名称"
/>
<el-input
size=
"mini"
v-model=
"form.GoodsName"
placeholder=
"请输入商品名称"
/>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"收货人:"
>
<el-input
size=
"mini"
v-model=
"form.shipname"
placeholder=
"请输入收货人"
/>
<el-input
size=
"mini"
v-model=
"form.shipname"
placeholder=
"请输入收货人"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
type=
"flex"
class=
"row-bg"
justify=
"space-around"
>
<el-col
:span=
"6"
>
<el-form-item
label=
"联系电话:"
>
<el-input
size=
"mini"
v-model=
"form.Tel"
placeholder=
"请输入联系电话"
/>
<el-input
size=
"mini"
v-model=
"form.Tel"
placeholder=
"请输入联系电话"
/>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
...
...
@@ -51,7 +51,7 @@
v-model=
"form.dateTime"
type=
"daterange"
align=
"left"
un
l
ink-panels
un
aL
ink-panels
range-separator=
"至"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
...
...
@@ -59,42 +59,77 @@
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-button
size=
"mini"
type=
"primary"
icon=
"el-icon-search"
style=
"margin-left: 20px;"
@
click=
"getListOrder"
>
搜索
</el-button>
<el-button
size=
"mini"
type=
"primary"
icon=
"el-icon-search"
style=
"margin-left: 20px;"
@
click=
"getListOrder"
>
搜索
</el-button>
<el-button
size=
"mini"
icon=
"el-icon-refresh"
@
click=
"resetBtn(true)"
>
重置
</el-button>
</el-col>
</el-row>
</el-form>
</div>
<el-table
:data=
"tableData"
max-height=
"1080"
>
<el-table-column
type=
"selection"
width=
"55"
/>
<el-table-column
label=
"订单号"
align=
"center"
prop=
"order_sn"
width=
"255"
/>
<el-table-column
label=
"下单时间"
align=
"center"
prop=
"Updatetime"
width=
"155"
>
<template
slot-scope=
"scope"
>
{{
formatter
(
scope
.
row
.
Updatetime
)
}}
</
template
>
</el-table-column>
<el-table-column
label=
"数量"
align=
"center"
prop=
"goods_total"
/>
<el-table-column
label=
"订单金额"
align=
"center"
prop=
"goods_price"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
goods_price
/
100
}}
</
template
>
</el-table-column>
<el-table-column
label=
"收货人"
align=
"center"
prop=
"real_name"
/>
<el-table-column
label=
"联系电话"
align=
"center"
prop=
"mobile"
/>
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
>
<
template
slot-scope=
"scope"
>
<el-button
size=
"mini"
type=
"text"
@
click=
"handleInfo(scope.row)"
>
详情
</el-button>
</
template
>
</el-table-column>
</el-table>
<!-- 表头 -->
<div
class=
"table-header-spe"
>
<el-table
class=
"title_table hxz-el-table"
align=
"center"
>
<el-table-column
align=
"center"
width=
"55"
>
<template
slot=
"header"
slot-scope=
"scope"
>
<el-checkbox
v-model=
"allTablesChecked"
></el-checkbox>
</
template
>
</el-table-column>
<el-table-column
label=
"订单号"
align=
"center"
width=
"180"
></el-table-column>
<el-table-column
label=
"商品名称"
align=
"center"
></el-table-column>
<el-table-column
label=
"规格/数量/金额"
align=
"center"
width=
"180"
></el-table-column>
<el-table-column
label=
"下单时间"
align=
"center"
width=
"180"
></el-table-column>
<el-table-column
label=
"收货人"
align=
"center"
width=
"180"
></el-table-column>
<el-table-column
label=
"联系电话"
align=
"center"
width=
"180"
></el-table-column>
<el-table-column
label=
"操作"
align=
"center"
width=
"140"
></el-table-column>
</el-table>
<div
class=
"hxz-el-table-check"
></div>
</div>
<div
class=
"table-all-con box-card"
>
<el-card
v-for=
"(item, index) in tableDataList"
:key=
"index"
class=
"card1 text item"
>
<div
slot=
"header"
class=
"el-card-header-spe"
>
<div><span>
订单状态:
</span><span>
{{ orderStatusFormatter(item.order.status) }}
</span></div>
</div>
<div
class=
"item-table"
>
<el-table
border
:show-header=
"false"
:span-method=
"arraySpanMethod"
:data=
"item.order_goods"
>
<el-table-column
type=
"selection"
width=
"55"
align=
"center"
></el-table-column>
<el-table-column
prop=
"goods_order_sn"
label=
"订单号"
width=
"180"
align=
"center"
></el-table-column>
<el-table-column
prop=
"goods_option_title"
label=
"商品名称"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<img
style=
"width:60px;height:60px;"
:src=
"scope.row.thumb"
/>
<div>
{{
scope
.
row
.
goods_option_title
}}
</div>
</
template
>
</el-table-column>
<el-table-column
label=
"规格/数量/金额"
width=
"180"
align=
"center"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
goods_option_title
}}
<br/>
{{
scope
.
row
.
total
}}
<br/>
{{
scope
.
row
.
goods_price
/
100
}}
<br/>
</
template
>
</el-table-column>
<el-table-column
prop=
"created_time"
label=
"下单时间"
width=
"180"
align=
"center"
>
<
template
slot-scope=
"scope"
>
{{
formatter
(
scope
.
row
.
created_time
)
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"phone"
width=
"180"
label=
"收货人"
align=
"center"
></el-table-column>
<el-table-column
prop=
"real_name"
label=
"联系电话"
width=
"180"
align=
"center"
></el-table-column>
<el-table-column
label=
"操作"
width=
"140"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"text"
@
click=
"handleInfo(scope.row)"
>
详情
</el-button>
</
template
>
</el-table-column>
</el-table>
</div>
</el-card>
</div>
<!-- 分页 -->
<div
class=
"footer_pagination"
>
<el-pagination
background
...
...
@@ -108,9 +143,10 @@
</el-pagination>
</div>
</el-card>
<el-dialog
title=
"订单详情"
width=
"85%"
:close-on-click-modal=
"false"
:destroy-on-close=
"true"
:visible
.
sync=
"detailDialog"
center
:before-close=
"handleClose"
>
<el-dialog
title=
"订单详情"
width=
"85%"
:close-on-click-modal=
"false"
:destroy-on-close=
"true"
:visible
.
sync=
"detailDialog"
center
:before-close=
"handleClose"
>
<div
style=
"height:100%;"
>
<order-detail
:order-detail=
"order_detail"
:
express-lists=
"expressLists
"
/>
<order-detail
:order-detail=
"order_detail"
:
order-goods-detail=
"order_goods_detail"
:express-lists=
"expressLists"
@
updateOrder=
"updateOrder
"
/>
</div>
</el-dialog>
<!-- 批量发货 -->
...
...
@@ -137,12 +173,13 @@
action=
""
class=
"upload-demo"
:auto-upload=
"false"
:limit
=
"1"
:limit
=
"1"
accept=
"*/*"
:on-change=
"importExcel"
:on-remove=
"removeDevExcel"
ref=
"upload"
><el-button
size=
"small"
type=
"primary"
>
上传批量发货Excel表单
</el-button>
>
<el-button
size=
"small"
type=
"primary"
>
上传批量发货Excel表单
</el-button>
</el-upload>
</div>
<div
class=
"delivery-tips-con"
>
...
...
@@ -164,21 +201,24 @@
</template>
<
script
>
import
{
listOrder
,
exportOrder
,
orderInfo
,
deliveryOrder
,
expressList
}
from
'@/api/module/order'
import
{
listOrder
,
exportOrder
,
orderInfo
,
deliveryOrder
,
expressList
,
getOrderTabData
}
from
'@/api/module/order'
import
{
dateFormat
}
from
'@/utils'
import
OrderDetail
from
'./components/orderDetail.vue'
import
XLSX
from
"xlsx"
import
{
isArray
}
from
"../../../utils/validate"
;
export
default
{
components
:
{
OrderDetail
},
data
()
{
return
{
sellerId
:
0
,
currentPage
:
1
,
pageSize
:
20
,
total
:
0
,
total1
:
''
,
//待发货
total2
:
''
,
//已发货
total1
:
''
,
//待发货
total2
:
''
,
//已发货
activeName
:
'first'
,
form
:
{
order_sn
:
''
,
...
...
@@ -188,21 +228,92 @@
dateTime
:
[],
},
goodsStatus
:
1
,
tableData
:
[],
tableData
List
:
[],
// 后台返回所有数据
detailDialog
:
false
,
isDeliveryOpen
:
false
,
excelList
:
[],
order_detail
:
null
,
expressLists
:
[]
order_detail
:
{
remark
:
[]
},
// 订单信息
order_goods_detail
:
[],
// 订单商品信息
expressLists
:
[],
fullHeight
:
''
,
tableHeight
:
null
,
allTablesChecked
:
false
,
// 订单导出 入参
exportParams
:
{
order_sn
:
''
,
goods_name
:
''
,
real_name
:
''
,
tel
:
0
,
created_start_time
:
0
,
created_end_time
:
0
,
}
}
},
watch
:
{
// fullHeight(val, oldval) {
// const contheight = document.getElementsByClassName('box-cardone')[0].clientHeight
// this.tableHeight = contheight - val - 250;
// // const heights = contheight
// // document.getElementsByClassName('cardHeight')[0].style.height = heights + 'px'
// }
},
created
()
{
// this.$nextTick(() => {
// this.fullHeight = document.getElementsByClassName('clearfixall')[0].clientHeight
// })
},
mounted
()
{
/** 获取 seller_id*/
this
.
sellerId
=
this
.
$store
.
state
.
user
.
sellerid
;
// 获取 订单 状态对应数量
//this.getOrderTab()
// 订单列表 搜索
this
.
getListOrder
()
//
this
.
getExpressList
()
},
methods
:
{
checkSelectable
(
row
,
index
)
{
},
// 表格合并 列单元格
arraySpanMethod
({
row
,
column
,
rowIndex
,
columnIndex
})
{
if
(
columnIndex
>
5
)
{
// 用于设置要合并开始的列号
if
(
rowIndex
===
0
)
{
// 用于设置合并开始的行号
return
{
rowspan
:
100
,
// 合并的行数
colspan
:
1
// 合并的列数,设为0则直接不显示
}
}
else
{
return
{
rowspan
:
0
,
colspan
:
0
}
}
}
},
formatter
(
time
)
{
return
dateFormat
(
time
,
'Y-m-d H:i:s'
)
return
dateFormat
(
time
*
1000
,
'Y-m-d H:i:s'
)
},
/** 订单状态 */
orderStatusFormatter
(
status
)
{
if
(
status
===
-
1
)
{
return
'订单取消'
}
else
if
(
status
===
0
)
{
return
'待付款'
}
else
if
(
status
===
1
)
{
return
'待发货'
}
else
if
(
status
===
2
)
{
return
'待收货'
}
else
if
(
status
===
3
)
{
return
'已完成'
}
else
if
(
status
===
4
)
{
return
'已结算'
}
else
{
return
''
// 保险,返回空
}
},
// 重置
resetBtn
(
iscall
)
{
...
...
@@ -223,7 +334,7 @@
handleClick
(
tab
,
event
)
{
this
.
total
=
0
switch
(
this
.
activeName
)
{
switch
(
this
.
activeName
)
{
case
'first'
:
this
.
goodsStatus
=
1
break
...
...
@@ -247,13 +358,29 @@
this
.
detailDialog
=
false
this
.
getListOrder
()
},
/** 获取 订单 状态对应数量 */
getOrderTab
()
{
// getOrderTabData().then(res => {
// //console.log("获取订单状态和对应订单数量",res);
// if (res.code === 1 && res.data.length > 0) {
// // 1 表示 代发货;2 表示 已发货
// for (let i = 0; i
<
res
.
data
.
length
;
i
++
)
{
// if (res.data[i].Status === 1) {
// this.total1 = res.data[i].Count > 999 ? '999+' : res.data[i].Count;
// } else if (res.data[i].Status === 2) {
// this.total2 = res.data[i].Count > 999 ? '999+' : res.data[i].Count;
// }
// }
// }
// });
},
// 获取订单列表
getListOrder
()
{
this
.
tableData
=
[]
this
.
tableDataList
=
[]
let
params
=
{
page
:
this
.
currentPage
,
limit
:
this
.
pageSize
,
seller_id
:
this
.
sellerId
,
status
:
this
.
goodsStatus
,
start_time
:
new
Date
(
this
.
form
.
dateTime
[
0
]).
getTime
()
/
1000
||
''
,
end_time
:
new
Date
(
this
.
form
.
dateTime
[
1
]).
getTime
()
/
1000
||
''
,
...
...
@@ -264,29 +391,59 @@
}
listOrder
(
params
).
then
(
res
=>
{
if
(
res
.
code
==
1
)
{
// 每次订单 查询成功,保存查询参数,供商品导出接口使用(入参)
this
.
exportParams
.
order_sn
=
params
.
order_sn
;
this
.
exportParams
.
goods_name
=
params
.
goods_name
;
this
.
exportParams
.
real_name
=
params
.
real_name
;
this
.
exportParams
.
tel
=
params
.
tel
;
this
.
exportParams
.
created_start_time
=
params
.
created_start_time
;
this
.
exportParams
.
created_end_time
=
params
.
created_end_time
;
this
.
total
=
res
.
data
.
count
||
0
if
(
this
.
goodsStatus
==
1
){
this
.
total1
=
res
.
data
.
count
||
0
}
if
(
this
.
goodsStatus
==
2
){
this
.
total2
=
res
.
data
.
count
||
0
this
.
tableDataList
=
res
.
data
.
data
if
(
this
.
goodsStatus
==
1
)
{
this
.
taotal1
=
res
.
data
.
count
;
}
else
if
(
this
.
goodsStatus
==
2
)
{
this
.
taotal2
=
res
.
data
.
count
;
}
this
.
tableData
=
res
.
data
.
data
}
})
},
// 合并数据
// listSpanMethod() {
//
// },
// row 当前行 column 当前列 rowIndex 当前行号, columnIndex 当前列号
listSpanMethod
({
row
,
column
,
rowIndex
,
columnIndex
})
{
if
(
columnIndex
===
1
)
{
if
(
rowIndex
%
2
===
0
)
{
return
{
rowspan
:
2
,
colspan
:
1
};
}
else
{
return
{
rowspan
:
0
,
colspan
:
0
};
}
}
},
// 订单导出
handleExport
(
row
)
{
let
query
=
{
page
:
1
,
limit
:
100
}
exportOrder
(
query
).
then
(
res
=>
{
if
(
res
.
code
===
1
)
{
const
link
=
document
.
createElement
(
'a'
);
link
.
href
=
res
.
data
;
//link.download = '订单.xls'; //下载的文件名
link
.
style
.
display
=
'none'
;
document
.
body
.
appendChild
(
link
);
link
.
click
();
document
.
body
.
removeChild
(
link
);
handleExport
()
{
exportOrder
(
this
.
exportParams
).
then
(
res
=>
{
if
(
res
.
code
===
1
)
{
const
aLink
=
document
.
createElement
(
'a'
);
aLink
.
href
=
res
.
data
.
file_url
;
//aLink.download = '订单.xls'; //下载的文件名
aLink
.
style
.
display
=
'none'
;
document
.
body
.
appendChild
(
aLink
);
aLink
.
click
();
document
.
body
.
removeChild
(
aLink
);
}
else
{
this
.
$message
({
type
:
'error'
,
message
:
res
.
message
?
res
.
message
:
'导出失败'
});
}
});
},
...
...
@@ -299,7 +456,7 @@
// xlsxJson就是解析出来的json数据,数据格式如下
// [{sheetName: sheet1, sheet: sheetData }]
if
(
item
[
0
]
&&
item
[
0
].
sheet
&&
item
[
0
].
sheet
.
length
)
{
//_this.tableData = item[0].sheet //把数据塞到表格预览
//_this.tableData
List
= item[0].sheet //把数据塞到表格预览
// this.excelList = item[0].sheet
item
[
0
].
sheet
.
map
((
item
,
index
)
=>
{
this
.
excelList
.
push
({
...
...
@@ -317,9 +474,9 @@
* @param {Object} file
*/
file2Xce
(
file
)
{
return
new
Promise
(
function
(
resolve
,
reject
)
{
return
new
Promise
(
function
(
resolve
,
reject
)
{
const
reader
=
new
FileReader
();
reader
.
onload
=
function
(
e
)
{
reader
.
onload
=
function
(
e
)
{
const
data
=
e
.
target
.
result
;
this
.
wb
=
XLSX
.
read
(
data
,
{
type
:
"binary"
...
...
@@ -341,37 +498,65 @@
},
// 提交导入数据
subDelivery
()
{
if
(
this
.
excelList
.
length
===
0
)
{
this
.
$message
({
type
:
'warning'
,
message
:
'请先上传填写好的表格数据'
});
if
(
this
.
excelList
.
length
===
0
)
{
this
.
$message
({
type
:
'warning'
,
message
:
'请先上传填写好的表格数据'
});
return
}
if
(
this
.
excelList
.
length
>
0
&&
this
.
excelList
[
0
].
id
&&
this
.
excelList
[
0
].
express_name
&&
this
.
excelList
[
0
].
express_sn
)
{
deliveryOrder
(
this
.
excelList
).
then
(
res
=>
{
if
(
res
.
code
===
1
)
{
if
(
this
.
excelList
.
length
>
0
&&
this
.
excelList
[
0
].
id
&&
this
.
excelList
[
0
].
express_name
&&
this
.
excelList
[
0
].
express_sn
)
{
deliveryOrder
(
this
.
excelList
).
then
(
res
=>
{
if
(
res
.
code
===
1
)
{
this
.
isDeliveryOpen
=
false
;
this
.
$message
({
type
:
'success'
,
message
:
'批量发货成功'
});
this
.
$message
({
type
:
'success'
,
message
:
'批量发货成功'
});
this
.
getList
();
}
else
{
}
else
{
let
msg
=
res
.
message
||
'批量发货失败'
this
.
$message
({
type
:
'error'
,
message
:
msg
});
this
.
$message
({
type
:
'error'
,
message
:
msg
});
}
});
}
else
{
this
.
$message
({
type
:
'error'
,
message
:
'导入表格数据有误'
});
}
else
{
this
.
$message
({
type
:
'error'
,
message
:
'导入表格数据有误'
});
}
},
// 订单详情
handleInfo
(
row
)
{
this
.
detailDialog
=
true
// let order_sn = '20200318e095e2d09354'
let
order_sn
=
row
.
parent_order_sn
let
order_id
=
row
.
order_id
orderInfo
({
order_id
:
order_id
}).
then
(
res
=>
{
if
(
res
.
code
==
1
&&
res
.
data
)
{
// 留言备注,需要单独处理
let
remarkList
=
[]
// res.data.order.remark 返回数据格式比较多,不判断了
try
{
remarkList
=
JSON
.
parse
(
res
.
data
.
order
.
remark
)
}
catch
(
e
)
{
remarkList
=
[]
console
.
log
(
99
,
e
);
}
orderInfo
({
order_sn
:
order_sn
}).
then
(
res
=>
{
if
(
res
.
code
==
1
)
{
this
.
order_detail
=
res
.
data
res
.
data
.
order
.
remark
=
remarkList
this
.
order_detail
=
res
.
data
.
order
;
// let isArray = Array.isArray(remarkList)
//
// if(isArray) {
// res.data.order.remark = remarkList
// this.order_detail = res.data.order;
// }else {
//
// }
this
.
order_goods_detail
=
res
.
data
.
order_goods_detail
?
res
.
data
.
order_goods_detail
:
[];
//console.log('备注留言返回原始数据',res.data.order.remark);
// this.$router.push({path: '/system/goods/management'});
}
})
},
/** 更新 订单备注 */
updateOrder
(
id
)
{
let
row
=
{
order_id
:
id
}
this
.
handleInfo
(
row
);
},
// 获取物流信息
getExpressList
()
{
expressList
().
then
(
res
=>
{
...
...
@@ -393,35 +578,77 @@
</
script
>
<
style
scoped
>
/
deep
/
.el-range-editor.el-input__inner
{
width
:
100%
;
}
/
deep
/
.el-card__body
{
height
:
calc
(
100%
-
50px
);
}
.scollbox
{
height
:
calc
(
100%
-
50px
);
overflow-y
:
scroll
;
}
.form-box
{
background-color
:
#F7F8FA
;
margin-bottom
:
20px
;
padding-top
:
22px
;
}
.footer_pagination
{
text-align
:
right
;
margin-top
:
15px
;
}
.delivery-tips-con
,
.delivery-data-con
{
width
:
80%
;
margin
:
5px
auto
;
font-weight
:
bold
;
}
.delivery-data-con
{
height
:
100px
;
margin
:
20px
auto
;
}
.upload-demo
{
text-align
:
center
;
}
</
style
>
\ No newline at end of file
/
deep
/
.el-range-editor.el-input__inner
{
width
:
100%
;
}
/
deep
/
.el-card__body
{
height
:
calc
(
100%
-
50px
);
}
.scollbox
{
height
:
calc
(
100%
-
50px
);
overflow-y
:
hidden
;
}
.form-box
{
background-color
:
#F7F8FA
;
/*margin-bottom: 20px;*/
padding-top
:
20px
;
}
.form-params
{
}
.footer_pagination
{
text-align
:
center
;
margin-top
:
15px
;
}
.delivery-tips-con
,
.delivery-data-con
{
width
:
80%
;
margin
:
5px
auto
;
font-weight
:
bold
;
}
.delivery-data-con
{
height
:
100px
;
margin
:
20px
auto
;
}
.upload-demo
{
text-align
:
center
;
}
/* 订单卡片 样式 */
.card1
{
margin-bottom
:
20px
;
}
.table-header-spe
{
background-color
:
#F7F8FA
;
margin
:
10px
0
10px
;
}
/
deep
/
.title_table
{
width
:
calc
(
100%
-
94px
)
!important
;
margin
:
0
40px
;
}
/
deep
/
.title_table
.el-table__body-wrapper
{
display
:
none
!important
;
height
:
0
!important
;
}
/
deep
/
.title_table
tr
th
{
border-bottom
:
0
!important
;
}
/
deep
/
.title_table
::before
{
height
:
0
;
}
.table-all-con
{
height
:
calc
(
100%
-
250px
);
overflow-y
:
auto
;
padding
:
0
20px
;
}
</
style
>
src/views/system/retreat/edit.vue
0 → 100644
浏览文件 @
67d5f266
<
template
>
<div
class=
"app-container after-sale-detail"
>
<el-card>
<!--
<p
class=
"as-detail-title"
>
售后详情
</p>
-->
<!-- 仅退款 -->
<div
v-if=
"asOrderType == 1"
class=
"as-step-info"
>
<el-steps
:active=
"step"
align-center
>
<el-step
title=
"买家提出售后申请"
></el-step>
<el-step
:title=
"onlyStep2"
></el-step>
<el-step
:title=
"onlyStep3"
></el-step>
</el-steps>
</div>
<!-- 退货退款 -->
<div
v-if=
"asOrderType == 2"
class=
"as-step-info"
>
<el-steps
:active=
"step"
align-center
>
<el-step
title=
"买家提出售后申请"
></el-step>
<el-step
:title=
"refundStep2"
></el-step>
<el-step
:title=
"refundStep3"
></el-step>
<el-step
:title=
"refundStep4"
v-if=
"has45 === 4"
></el-step>
<el-step
:title=
"refundStep5"
v-if=
"has45 > 4"
></el-step>
</el-steps>
</div>
</el-card>
<el-card
class=
"as-order-details"
>
<!-- 倒计时 提示 -->
<p
class=
"count-down-con"
v-if=
"asOrderType == 1"
>
剩余处理时间: 25小时46分 请在72小时内处理,逾期不处理,系统将自动退款到买家账户
</p>
<p
class=
"count-down-con"
v-if=
"asOrderType == 2"
>
222剩余处理时间: 25小时46分 请在72小时内处理,逾期不处理,系统将自动退款到买家账户222
</p>
<!-- 售后信息 -->
<div>
<p>
售后信息
</p>
<div>
<el-row
class=
"row-title"
>
<el-col
:span=
"3"
class=
"text-r"
>
售后类型
</el-col>
<el-col
:span=
"9"
class=
"text-l"
>
{{
refundTypeFormatter
(
asOrderDetail
.
refund_type
)
}}
</el-col>
</el-row>
<el-row
class=
"row-title"
>
<el-col
:span=
"3"
class=
"text-r"
>
申请金额
</el-col>
<el-col
:span=
"9"
class=
"text-l"
>
{{
asOrderDetail
.
apply_price
}}
</el-col>
</el-row>
<el-row
class=
"row-title"
>
<el-col
:span=
"3"
class=
"text-r"
>
申请原因
</el-col>
<el-col
:span=
"9"
class=
"text-l"
>
{{
reasonFormatter
(
asOrderDetail
.
reason
)
}}
</el-col>
</el-row>
<el-row
class=
"row-title"
>
<el-col
:span=
"3"
class=
"text-r"
>
申请说明
</el-col>
<el-col
:span=
"9"
class=
"text-l"
>
{{
asOrderDetail
.
content
}}
</el-col>
</el-row>
<el-row
class=
"row-title-pic"
>
<el-col
:span=
"3"
class=
"text-r"
>
申请图片
</el-col>
<el-col
:span=
"9"
class=
"text-l"
>
<!--
{{
asOrderDetail
.
images
}}
-->
<div
v-if=
"asSrcList.length > 0"
>
<el-image
style=
"width: 70px; height: 70px;border:1px solid #eee;"
v-for=
"(itemSrc,index) in asSrcList"
:src=
"itemSrc"
:preview-src-list=
"asSrcList"
>
</el-image>
</div>
<p
v-else
style=
"color:#666"
>
暂无图片
</p>
</el-col>
</el-row>
</div>
</div>
<!-- 订单信息 -->
<div>
<p>
订单信息
</p>
<div>
<el-row
class=
"row-title"
>
<el-col
:span=
"3"
class=
"text-r"
>
订单状态
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
GDSFormatter
(
goodsOrderDetail
.
goods_status
)
}}
</el-col>
<el-col
:span=
"3"
class=
"text-r"
>
商品名称
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
goodsOrderDetail
.
title
}}
</el-col>
</el-row>
<el-row
class=
"row-title"
>
<el-col
:span=
"3"
class=
"text-r"
>
订单编号
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
goodsOrderDetail
.
goods_order_sn
}}
</el-col>
<el-col
:span=
"3"
class=
"text-r"
>
商品规格
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
goodsOrderDetail
.
goods_option_title
}}
</el-col>
</el-row>
<el-row
class=
"row-title"
>
<el-col
:span=
"3"
class=
"text-r"
>
商品金额
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
goodsOrderDetail
.
price
}}
</el-col>
<el-col
:span=
"3"
class=
"text-r"
>
商品数量
</el-col>
<el-col
:span=
"6"
class=
"text-l"
>
{{
goodsOrderDetail
.
total
}}
</el-col>
</el-row>
</div>
</div>
<!-- 历史售后申请 -->
<div>
<p>
历史售后申请
</p>
<el-table
:data=
"asApplyList"
>
<el-table-column
label=
"申请时间"
align=
"center"
prop=
"tabapply_time"
>
<template
slot-scope=
"scope"
>
{{
formatter
(
scope
.
row
.
tabapply_time
)
}}
</
template
>
</el-table-column>
<el-table-column
label=
"退换货类型"
align=
"center"
width=
"180"
prop=
"refund_type"
>
<
template
slot-scope=
"scope"
>
{{
refundTypeFormatter
(
scope
.
row
.
refund_type
)
}}
</
template
>
</el-table-column>
<el-table-column
label=
"申请金额"
align=
"center"
prop=
"apply_price"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
apply_price
/
100
}}
</
template
>
</el-table-column>
<el-table-column
label=
"申请原因"
align=
"center"
prop=
"reason"
>
<
template
slot-scope=
"scope"
>
{{
reasonFormatter
(
scope
.
row
.
reason
)
}}
</
template
>
</el-table-column>
<el-table-column
label=
"申请说明"
align=
"center"
prop=
"content"
></el-table-column>
<el-table-column
label=
"处理结果"
align=
"center"
>
<
template
slot-scope=
"scope"
>
{{
ASResult
(
scope
.
row
)
}}
</
template
>
</el-table-column>
<el-table-column
label=
"申请图片"
align=
"center"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
apply_price
/
100
}}
</
template
>
</el-table-column>
</el-table>
</div>
<!-- 售后 操作按钮 -->
<div
class=
"as-handle-btn"
v-if=
"onlyOrRefundBtnType == 1"
>
<el-button
class=
"as-btn"
type=
"primary"
@
click=
"agreeHandle(1)"
>
同意退款
</el-button>
<el-button
class=
"as-btn"
type=
"primary"
@
click=
"refuseHandle(2)"
>
拒绝退款
</el-button>
</div>
<div
class=
"as-handle-btn"
v-if=
"onlyOrRefundBtnType == 2"
>
<el-button
class=
"as-btn"
type=
"primary"
@
click=
"agreeHandle(3)"
>
同意退货退款
</el-button>
<el-button
class=
"as-btn"
type=
"primary"
@
click=
"refuseHandle(4)"
>
拒绝退货退款
</el-button>
</div>
<div
class=
"as-handle-btn"
v-if=
"onlyOrRefundBtnType == 3"
>
<el-button
class=
"as-btn"
type=
"primary"
@
click=
"refuseHandle(4)"
>
拒收包裹
</el-button>
<el-button
class=
"as-btn"
type=
"primary"
@
click=
"agreeHandle(1)"
>
确定退款
</el-button>
</div>
</el-card>
<!-- [仅退款 同意/拒绝] [退货退款 确定退款/拒收包裹] 对话框 -->
<el-dialog
:title=
"dialogASTypeTitle"
:visible
.
sync=
"isASTypeDialog"
width=
"50%"
center
>
<div
v-if=
"onlyIsAgree == 1"
class=
"only-refund-agree"
>
<p>
同意退款,该订单将关闭,请您仔细核实商品发货状态以及退款金额,若因此导致的损失将由您自己承担!
</p>
<p>
确定同意同款吗?
</p>
<p>
确定同意退款后,将关闭该订单
</p>
</div>
<div
v-if=
"onlyIsAgree == 2"
class=
"only-refund-refuse"
>
<p>
拒绝原因:
</p>
<p
style=
"width:80%"
>
<el-input
type=
"textarea"
v-model=
"onlyRefuseReason"
:rows=
"4"
></el-input>
</p>
</div>
<div
v-if=
"onlyIsAgree == 3"
class=
"refund-agree"
>
<div
class=
"refund-agree-1"
>
<p>
同意退货退款,买家回填退货商品的物流单号,收到货后,请您仔细核实商品,核实无误后,点击【确定退款】按钮进行退款!若因此导致的损失将由您自己承担!
</p>
<p>
确定同意退货退款吗?
</p>
<p>
确定同意退货退款后,等待买家退回商品
</p>
</div>
<div
class=
"refund-agree-2"
>
<p>
选择发送退换货地址:
</p>
<p
style=
"width:80%"
>
<el-select
v-model=
"order_refund_address"
placeholder=
"退货地址"
style=
"width: 80%;"
>
<el-option
v-for=
"(item,index) in asAddressOptions"
:key=
"item.id"
:label=
"item.info"
:value=
"item.id"
></el-option>
</el-select>
</p>
</div>
</div>
<div
v-if=
"onlyIsAgree == 4"
class=
"onlyIsAgree-4"
>
<div
class=
"onlyIsAgree-4-1"
>
<p>
拒绝原因:
</p>
<p
style=
"width:80%"
>
<el-input
type=
"textarea"
v-model=
"refuseReason"
:rows=
"4"
></el-input>
</p>
</div>
<p>
请详细说明您拒绝的原因,拒绝后售后不会结束,买家可再次申请
</p>
</div>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"submitAfterSale(onlyIsAgree)"
size=
"small"
>
确 定
</el-button>
<el-button
@
click=
"cancelAfterSale(onlyIsAgree)"
size=
"small"
>
取 消
</el-button>
</span>
</el-dialog>
</div>
</template>
<
script
>
import
{
getASOrderDetail
,
agreeRefundData
,
refuseRefundData
,
getASAdressData
}
from
'@/api/module/retreat'
import
{
dateFormat
}
from
'@/utils'
//getASOrderDetail
export
default
{
name
:
"Edit"
,
data
()
{
return
{
// Refund only 仅退款
// Return refund 退货退款
asGoodId
:
0
,
// 当前 售后订单的 id
asOrderType
:
1
,
// 售后类型 1-仅退款; 2-退货退款
// 仅退款 流程,每个步骤文字提示
step
:
1
,
// 激活 当前步骤
onlyStep2
:
'卖家处理中'
,
onlyStep3
:
'售后结束'
,
// 退货退款 流程 每个步骤文字提示
has45
:
3
,
// 此值,控制步骤数量,是 3 步,4 步,还是 5 步
refundStep2
:
'卖家处理中'
,
refundStep3
:
'售后完成'
,
refundStep4
:
''
,
refundStep5
:
''
,
// 售后订单 信息
asOrderDetail
:
{
status
:
0
,
// 退款状态
refund_type
:
1
,
// 退换货类型
apply_price
:
0
,
// 申请金额
reason
:
0
,
// 申请原因
content
:
''
,
// 申请说明
images
:
''
,
// 申请图片
},
// 商品订单信息
goodsOrderDetail
:
{
goods_status
:
0
,
// 订单状态
goods_order_sn
:
''
,
// 订单编号
price
:
''
,
// 商品金额
title
:
''
,
// 商品名称
goods_option_title
:
''
,
// 商品规格
total
:
''
,
// 商品数量
},
// 售后申请 图片 list
asSrcList
:
[],
asApplyList
:
[
{
data1
:
1256332213
,
data2
:
1
,
data3
:
3
,
data4
:
4
,
data5
:
5
,
data6
:
6
,
data7
:
7
}
],
// 0-全部隐藏-默认状态; 1-显示 仅退款 按钮;2-显示 退货退款中(同意/拒绝 退货退款)按钮; 3-显示 退货退款中 (拒收包裹 / 确定退款) 按钮
onlyOrRefundBtnType
:
0
,
// 1-仅退款 同意退款; 2-仅退款 拒绝退款; 3-退货退款 同意退款退款; 4-; 5-
onlyIsAgree
:
0
,
dialogASTypeTitle
:
''
,
isASTypeDialog
:
false
,
onlyRefuseReason
:
''
,
refuseReason
:
''
,
sellerId
:
0
,
asAddressOptions
:
[],
order_refund_address
:
''
}
// return end
},
watch
:
{},
created
()
{
this
.
sellerId
=
this
.
$store
.
state
.
user
.
sellerid
;
/** 获取 当前售后 订单的id */
this
.
asGoodId
=
this
.
$route
.
query
.
refund_sn
;
/** 查询 售后订单详情 */
this
.
getDetail
();
/** 获取 退货退款的发送 地址 */
this
.
getASAdress
();
},
mounted
()
{},
methods
:
{
/** Only 代表 仅退款
* 售后步骤和对应文案提示,
* 在售后订单详情 查询时,需要同步调用
* */
returnOnlyStatus
(
status
,
close_status
)
{
// 步骤和步骤文字提示的初始化
this
.
step
=
1
;
this
.
onlyStep2
=
'卖家处理中'
this
.
onlyStep3
=
'售后完成'
// 卖家超时未处理,和卖家主动同意退款
if
(
status
===
5
){
this
.
step
=
3
this
.
onlyStep2
=
'卖家同意退款'
this
.
onlyStep3
=
'退款完成,售后完成'
}
else
if
(
status
===
-
1
)
{
// 1、卖家拒绝退款;2、买家取消售后
if
(
close_status
===
1
)
{
this
.
step
=
3
this
.
onlyStep2
=
'卖家拒绝退款'
this
.
onlyStep3
=
'卖家拒绝,售后关闭'
}
else
if
(
close_status
===
6
)
{
this
.
step
=
3
this
.
onlyStep2
=
'买家取消售后申请'
this
.
onlyStep3
=
'买家取消,售后关闭'
}
}
},
/** Refund 代表 退货退款
* 售后步骤和对应文案提示,
* 在售后订单详情 查询时,需要同步调用
* */
returnRefundStatus
(
status
,
close_status
)
{
// 步骤和步骤文字提示的初始化
this
.
has45
=
3
;
// 当前售后流程有 3/4/5 步
this
.
step
=
1
;
// 当前激活是第 几 步
this
.
refundStep2
=
'卖家处理中'
// 第2步 对应提示
this
.
refundStep3
=
'售后完成'
// 第3步 对应提示
this
.
refundStep4
=
''
// 第4步 对应提示
this
.
refundStep5
=
''
// 第5步 对应提示
if
(
status
===
2
)
{
this
.
has45
=
5
;
this
.
refundStep2
=
'卖家同意退货退款'
this
.
refundStep3
=
'买家回填物流单号'
this
.
refundStep4
=
'卖家收货,确定退款'
this
.
refundStep5
=
'退款完成,售后完成'
this
.
step
=
2
}
else
if
(
status
===
3
)
{
this
.
has45
=
5
;
this
.
refundStep2
=
'卖家同意退货退款'
this
.
refundStep3
=
'买家回填物流单号'
this
.
refundStep4
=
'卖家收货,确定退款'
this
.
refundStep5
=
'退款完成,售后完成'
this
.
step
=
3
}
else
if
(
status
===
4
)
{
this
.
has45
=
5
;
this
.
refundStep2
=
'卖家同意退货退款'
this
.
refundStep3
=
'买家回填物流单号'
this
.
refundStep4
=
'卖家收货,确定退款'
this
.
refundStep5
=
'退款完成,售后完成'
this
.
step
=
4
}
else
if
(
status
===
5
)
{
this
.
has45
=
5
;
this
.
refundStep2
=
'卖家同意退货退款'
this
.
refundStep3
=
'买家回填物流单号'
this
.
refundStep4
=
'卖家收货,确定退款'
this
.
refundStep5
=
'退款完成,售后完成'
this
.
step
=
5
}
else
if
(
status
===
-
1
)
{
if
(
close_status
===
1
)
{
this
.
has45
=
3
;
this
.
refundStep2
=
'卖家拒绝退货退款'
this
.
refundStep3
=
'卖家拒绝,售后关闭'
this
.
refundStep4
=
''
this
.
refundStep5
=
''
this
.
step
=
3
}
else
if
(
close_status
===
2
)
{
this
.
has45
=
5
;
this
.
refundStep2
=
'卖家同意退货退款'
this
.
refundStep3
=
'买家回填物流单号'
this
.
refundStep4
=
'卖家拒绝,包裹退回'
this
.
refundStep5
=
'卖家拒绝,售后关闭'
this
.
step
=
5
}
else
if
(
close_status
===
3
)
{
this
.
has45
=
4
this
.
refundStep2
=
'卖家同意退货退款'
this
.
refundStep3
=
'买家超时未退货'
this
.
refundStep4
=
'买家未退货,售后关闭'
this
.
refundStep5
=
''
this
.
step
=
5
}
else
if
(
close_status
===
6
)
{
this
.
has45
=
3
this
.
refundStep2
=
'买家取消售后申请'
this
.
refundStep3
=
'买家取消,售后关闭'
this
.
refundStep4
=
''
this
.
refundStep5
=
''
this
.
step
=
3
}
}
// return step
},
/** 查询订单详情*/
getDetail
()
{
//console.log("售后单号",this.asGoodId);
getASOrderDetail
({
order_refund_sn
:
this
.
asGoodId
}).
then
(
res
=>
{
//console.log("296",res);
if
(
res
.
code
===
1
&&
res
.
data
)
{
// 售后订单详情
if
(
res
.
data
.
order_refund
)
{
this
.
asOrderDetail
=
res
.
data
.
order_refund
;
//------------ 测试数据
// this.asOrderDetail.refund_type = 2;
// this.asOrderDetail.status = 2;
// this.asOrderDetail.close_reason = 2;
//--------------
// 先确定 售后类型
this
.
asOrderType
=
this
.
asOrderDetail
.
refund_type
// 根据售后订单信息,判断 订单状态,显示对应按钮操作
this
.
asHandleBtnType
(
this
.
asOrderDetail
)
// 金额处理
this
.
asOrderDetail
.
apply_price
=
this
.
asOrderDetail
.
apply_price
/
100
this
.
asOrderDetail
.
price
=
this
.
asOrderDetail
.
price
/
100
// 售后图片 处理
this
.
asSrcList
=
[]
if
(
this
.
asOrderDetail
.
images
)
{
this
.
asSrcList
=
this
.
asOrderDetail
.
images
.
split
(
','
)
}
// 更新 售后订单 流程和状态
// 仅退款
if
(
this
.
asOrderDetail
.
refund_type
==
1
)
{
this
.
returnOnlyStatus
(
this
.
asOrderDetail
.
status
,
this
.
asOrderDetail
.
close_reason
);
}
// 退货退款
if
(
this
.
asOrderDetail
.
refund_type
==
2
)
{
this
.
returnRefundStatus
(
this
.
asOrderDetail
.
status
,
this
.
asOrderDetail
.
close_reason
);
}
}
// 订单 详情
if
(
res
.
data
.
order_goods
)
{
this
.
goodsOrderDetail
=
res
.
data
.
order_goods
;
}
// 售后历史
if
(
res
.
data
.
order_refund_history
)
{
this
.
asApplyList
=
res
.
data
.
order_refund_history
}
}
});
},
/** 仅退款
* 操作按钮 类型
* onlyOrRefundBtnType:// 1-显示 仅退款 按钮; 2-显示 退货退款中(同意/拒绝 退货退款)按钮; 3-显示 退货退款中 (拒收包裹 / 确定退款) 按钮
* disabledOnlyBtn: true-售后结束-不能点击;false-可以点击
* 每次 订单详情更新,被调用
* */
asHandleBtnType
(
row
)
{
// row.refund_type 1-仅退款 ; 2-退货退款
// row.status 退款状态-1关闭1待审核2待退货3待收货4待打款5已完成
// row.close_reason 售后关闭原因: 1卖家拒绝退款、退货退款 2卖家拒收拒绝退款 3买家超时未退货自动关闭 6买家取消
if
(
row
)
{
if
(
row
.
refund_type
==
1
)
{
this
.
onlyOrRefundBtnType
=
1
}
else
if
(
row
.
refund_type
==
2
)
{
this
.
onlyOrRefundBtnType
=
(
row
.
status
==
1
)
?
2
:
3
}
else
{
this
.
onlyOrRefundBtnType
=
0
;
}
}
},
/** 同意 */
agreeHandle
(
type
)
{
if
(
type
==
1
)
{
this
.
onlyIsAgree
=
type
// 仅退款 同意退款
this
.
dialogASTypeTitle
=
"提示"
;
this
.
isASTypeDialog
=
true
;
}
if
(
type
==
3
)
{
this
.
onlyIsAgree
=
type
// 退货退款 同意退货退款
this
.
dialogASTypeTitle
=
"提示"
;
this
.
isASTypeDialog
=
true
;
}
},
/** 拒绝 */
refuseHandle
(
type
)
{
if
(
type
==
2
)
{
this
.
onlyIsAgree
=
type
// 仅退款的 拒绝退款
this
.
dialogASTypeTitle
=
"拒绝原因"
;
this
.
onlyRefuseReason
=
''
;
this
.
isASTypeDialog
=
true
;
}
if
(
type
==
4
)
{
this
.
onlyIsAgree
=
type
// 4 拒绝退货退款
this
.
dialogASTypeTitle
=
"拒绝原因"
;
this
.
refuseReason
=
''
;
this
.
isASTypeDialog
=
true
;
}
},
/** 提交 退款 处理信息
*
* */
submitAfterSale
(
type
)
{
console
.
log
(
"确定的类型"
,
type
);
let
params
=
{
order_refund_sn
:
0
};
// type为1,则为,仅退款的 同意退款 操作
if
(
this
.
onlyIsAgree
==
1
)
{
params
.
order_refund_sn
=
this
.
asGoodId
// 1、为了更好提示,2、预防后期接口解耦
agreeRefundData
(
params
).
then
(
res
=>
{
let
msg
=
''
if
(
res
.
code
==
1
)
{
this
.
$message
({
type
:
'success'
,
message
:
'操作成功'
});
}
else
{
msg
=
res
.
message
?
res
.
message
:
'操作失败'
this
.
$message
({
type
:
'error'
,
message
:
msg
});
}
this
.
isASTypeDialog
=
false
;
// 更新订单
this
.
getDetail
();
});
}
// type为2,则为,仅退款的 拒绝退款 操作
if
(
this
.
onlyIsAgree
==
2
)
{
if
(
this
.
onlyRefuseReason
==
''
)
{
this
.
$message
({
type
:
'warning'
,
message
:
'请输入拒绝退款的原因'
});
return
}
params
[
'reason'
]
=
this
.
onlyRefuseReason
;
refuseRefundData
(
params
).
then
(
res
=>
{
let
msg
=
''
if
(
res
.
code
==
1
)
{
this
.
$message
({
type
:
'success'
,
message
:
'操作成功'
});
}
else
{
msg
=
res
.
message
?
res
.
message
:
'操作失败'
this
.
$message
({
type
:
'error'
,
message
:
msg
});
}
this
.
isASTypeDialog
=
false
;
// 更新订单
this
.
getDetail
();
});
}
// type 2 end
// type 为3,则为,退货退款的 同意退货退款,发送地址
if
(
this
.
onlyIsAgree
==
3
)
{
// console.log('地址信息:',this.order_refund_address);
if
(
this
.
order_refund_address
==
''
)
{
this
.
$message
({
type
:
'warning'
,
message
:
'请选择地址信息'
});
return
}
params
[
'order_refund_address'
]
=
this
.
order_refund_address
;
agreeRefundData
(
params
).
then
(
res
=>
{
let
msg
=
''
if
(
res
.
code
==
1
)
{
this
.
$message
({
type
:
'success'
,
message
:
'操作成功'
});
}
else
{
msg
=
res
.
message
?
res
.
message
:
'操作失败'
this
.
$message
({
type
:
'error'
,
message
:
msg
});
}
this
.
isASTypeDialog
=
false
;
// 更新订单
this
.
getDetail
();
});
}
// type 3 end
// type 为4,则为 退货退款的 拒绝
if
(
this
.
onlyIsAgree
==
4
)
{
if
(
this
.
refuseReason
==
''
)
{
this
.
$message
({
type
:
'warning'
,
message
:
'请输入拒绝的原因'
});
return
}
params
[
'reason'
]
=
this
.
refuseReason
;
refuseRefundData
(
params
).
then
(
res
=>
{
let
msg
=
''
if
(
res
.
code
==
1
)
{
this
.
$message
({
type
:
'success'
,
message
:
'操作成功'
});
}
else
{
msg
=
res
.
message
?
res
.
message
:
'操作失败'
this
.
$message
({
type
:
'error'
,
message
:
msg
});
}
this
.
isASTypeDialog
=
false
;
// 更新订单
this
.
getDetail
();
});
}
// type 4 end
//
},
/** */
/** 取消 售后对话框 */
cancelAfterSale
(
type
)
{
//console.log("拒绝类型",type);
this
.
isASTypeDialog
=
false
;
},
/** 售后 退货退款 地址 */
getASAdress
()
{
let
params
=
{
page
:
1
,
limit
:
100
,
seller_id
:
this
.
sellerId
}
getASAdressData
(
params
).
then
(
res
=>
{
if
(
res
.
code
==
1
)
{
this
.
asAddressOptions
=
res
.
data
.
list
;
}
else
{
let
msg
=
res
.
message
?
res
.
message
:
'获取售后地址失败'
this
.
$message
({
type
:
'error'
,
message
:
msg
});
}
});
},
/** 订单发货状态 goodsDeliveryStatus Formatter*/
GDSFormatter
(
status
)
{
let
statusText
=
''
if
(
status
==
0
)
{
statusText
=
'未发货'
;
}
else
if
(
status
==
1
)
{
statusText
=
'已发货'
;
}
else
if
(
status
==
2
)
{
statusText
=
'已收货'
;
}
else
if
(
status
==
3
)
{
statusText
=
'配货中'
;
}
else
if
(
status
==
4
)
{
statusText
=
'拒收'
;
}
return
statusText
},
/** 售后结果 */
ASResult
(
row
)
{
let
result
=
''
if
(
row
.
status
==
5
)
{
result
=
'退款完成,售后完成'
}
else
if
(
row
.
status
==
-
1
)
{
if
(
row
.
close_reason
==
1
||
row
.
close_reason
==
2
)
{
result
=
'卖家拒绝,售后关闭'
}
else
if
(
row
.
close_reason
==
3
)
{
result
=
'买家未退货,售后关闭'
}
else
if
(
row
.
close_reason
==
4
)
{
}
}
return
result
},
/** 售后 申请原因 */
reasonFormatter
(
type
)
{
let
reasonText
=
''
if
(
type
==
1
)
{
reasonText
=
'其他'
}
else
if
(
type
==
2
)
{
reasonText
=
'漏发'
}
else
if
(
type
==
3
)
{
reasonText
=
'协商一致'
}
else
if
(
type
==
4
)
{
reasonText
=
'质量不符'
}
return
reasonText
},
/** 售后类型 */
refundTypeFormatter
(
type
)
{
let
typeText
=
''
if
(
type
==
1
)
{
typeText
=
'仅退款'
}
else
if
(
type
==
2
)
{
typeText
=
'退货退款'
}
return
typeText
},
/** 时间戳转化 格式化 */
formatter
(
time
)
{
return
dateFormat
(
time
*
1000
,
'Y-m-d H:i:s'
)
},
}
}
</
script
>
<
style
scoped
>
.after-sale-detail
{
overflow
:
auto
;
}
.as-detail-title
{
text-align
:
center
;
margin
:
10px
0
20px
;
padding
:
0
0
20px
;
font-size
:
18px
;
border-bottom
:
1px
solid
#eee
;
}
.as-order-details
{
margin-top
:
20px
;
}
/* 售后信息 表格 样式 */
/
deep
/
.el-col
{
/*border: 1px solid #eee;*/
/*padding: 0 10px;*/
/*height: 38px;*/
/*display: flex;*/
/*align-items: center;*/
}
.row-title
,
.row-title-pic
{
font-size
:
14px
;
color
:
#333
;
}
.row-title
.text-r
,
.row-title
.text-l
{
border
:
1px
solid
#eee
;
padding
:
0
10px
;
height
:
38px
;
display
:
flex
;
align-items
:
center
;
}
.row-title-pic
.text-r
,
.row-title-pic
.text-l
{
border
:
1px
solid
#eee
;
padding
:
0
10px
;
height
:
98px
;
display
:
flex
;
align-items
:
center
;
}
.text-r
{
justify-content
:
flex-end
;
background
:
#F7F8FA
;
}
.text-l
{
text-align
:
left
;
}
.as-handle-btn
{
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
}
.only-refund-agree
{
margin
:
0
50px
;
}
.only-refund-agree
>
p
{
text-align
:
center
;
line-height
:
30px
;
}
.only-refund-refuse
{
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
flex-direction
:
row
;
}
.refund-agree
.refund-agree-1
>
p
{
text-align
:
center
;
line-height
:
30px
;
}
.refund-agree
>
.refund-agree-2
{
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
flex-direction
:
row
;
}
.onlyIsAgree-4
>
.onlyIsAgree-4-1
{
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
flex-direction
:
row
;
}
.onlyIsAgree-4
>
p
{
text-align
:
center
;
line-height
:
30px
;
}
.as-btn
{
margin
:
40px
20px
20px
;
}
.no-bd-t
{
border-top
:
0
!important
;
}
.no-bd-r
{
border-right
:
0
!important
;
}
.no-bd-b
{
border-bottom
:
0
!important
;
}
.no-bd-l
{
border-left
:
0
!important
;
}
</
style
>
src/views/system/retreat/retreat/index.vue
浏览文件 @
67d5f266
<
template
>
<div
class=
"app-container"
>
<el-card
class=
"box-card"
>
<div
slot=
"header"
class=
"clearfix"
>
<el-form
:model=
"queryParams"
ref=
"queryForm"
:inline=
"true"
v-show=
"showSearch"
label-width=
"82px"
class=
"queryFormInline"
>
<el-form-item
label=
"申请时间"
prop=
"applyTime"
>
<el-date-picker
size=
"small"
v-model=
"queryParams.applyTime"
type=
"daterange"
align=
"left"
unlink-panels
range-separator=
"至"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
:picker-options=
"pickerOptions"
>
</el-date-picker>
</el-form-item>
<el-form-item
label=
"商品ID"
prop=
"goodsId"
>
<el-input
v-model=
"queryParams.goodsId"
placeholder=
"请输入商品id"
clearable
size=
"small"
@
keyup
.
enter
.
native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"商品名称"
prop=
"goodsName"
>
<el-input
v-model=
"queryParams.goodsName"
placeholder=
"请输入商品名称"
clearable
size=
"small"
@
keyup
.
enter
.
native=
"handleQuery"
/>
</el-form-item>
<!-- 状态页签 -->
<el-tabs
v-model=
"activeName"
@
tab-click=
"handleClick"
class=
"after-sale-tabs"
>
<el-tab-pane
label=
"未处理"
name=
"first"
></el-tab-pane>
<el-tab-pane
label=
"处理中"
name=
"second"
></el-tab-pane>
<el-tab-pane
label=
"已完成"
name=
"third"
></el-tab-pane>
</el-tabs>
<!-- 搜索条件 -->
<el-form
class=
"form-params"
:model=
"queryParams"
label-width=
"auto"
:inline=
"true"
size=
"small"
>
<el-form-item
label=
"申请时间"
prop=
"applyTime"
>
<el-date-picker
v-model=
"queryParams.applyTime"
type=
"daterange"
align=
"left"
unlink-panels
range-separator=
"至"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
@
change=
"applyTimeChange"
:picker-options=
"pickerOptions"
>
</el-date-picker>
</el-form-item>
<el-form-item
label=
"退换货类型"
prop=
"userNeed"
>
<el-select
v-model=
"queryParams.userNeed"
placeholder=
"全部原因"
size=
"small"
clearable
>
<el-option
v-for=
"item in userNeedOptions"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"商品ID"
prop=
"goods_id"
>
<el-input
v-model=
"queryParams.goods_id"
placeholder=
"请输入商品id"
clearable
@
keyup
.
enter
.
native=
"handleQuery"
/></el-form-item>
<el-form-item
label=
"退换货原因"
prop=
"needMsg"
>
<el-select
v-model=
"queryParams.needMsg"
placeholder=
"全部类型"
size=
"small"
clearable
>
<el-option
v-for=
"item in needMsgOptions"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"商品名称"
prop=
"goods_title"
>
<el-input
v-model=
"queryParams.goods_title"
placeholder=
"请输入商品名称"
clearable
@
keyup
.
enter
.
native=
"handleQuery"
/></el-form-item>
<el-form-item
label=
"处理状态"
prop=
"processDes
"
>
<el-select
v-model=
"queryParams.processDes"
placeholder=
"全部状态"
size=
"small"
clearable
>
<el-option
v-for=
"item in processDes
Options"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"退换货类型"
prop=
"refund_type
"
>
<el-select
v-model=
"queryParams.refund_type"
placeholder=
"全部类型"
clearable
>
<el-option
v-for=
"item in userNeed
Options"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
icon=
"el-icon-search"
size=
"mini"
@
click=
"handleQuery"
>
搜索
</el-button>
<el-button
icon=
"el-icon-refresh"
size=
"mini"
@
click=
"resetQuery"
>
重置
</el-button>
</el-form-item>
</el-form>
</div>
<el-table
v-loading=
"loading"
:data=
"retreatList"
:height=
"tableHeight"
>
<el-table-column
label=
"序号"
align=
"center"
prop=
"id"
/>
<el-table-column
label=
"商品名称"
align=
"center"
prop=
"goods_title"
/>
<el-table-column
label=
"订单号"
align=
"center"
prop=
"refund_sn"
/>
<el-table-column
label=
"订单手机号"
align=
"center"
prop=
"UPhone"
/>
<el-table-column
label=
"退换货原因"
align=
"center"
prop=
"reason"
>
<template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.reason==1"
>
协商一致退款
</span>
<span
v-if=
"scope.row.reason==2"
>
质量问题
</span>
<span
v-if=
"scope.row.reason==3"
>
物流问题
</span>
<span
v-if=
"scope.row.reason==4"
>
假冒品牌
</span>
<span
v-if=
"scope.row.reason==5"
>
少件/漏发/破损/污渍
</span>
<span
v-if=
"scope.row.reason==6"
>
7天无理由
</span>
<span
v-if=
"scope.row.reason==7"
>
拍错/多拍/不想要
</span>
<span
v-if=
"scope.row.reason==8"
>
其他
</span>
<el-form-item
label=
"订单号"
prop=
"goods_order_sn"
>
<el-input
v-model=
"queryParams.goods_order_sn"
placeholder=
"请输入订单号"
clearable
@
keyup
.
enter
.
native=
"handleQuery"
/></el-form-item>
<el-form-item
label=
"退换货原因"
prop=
"reason"
>
<el-select
v-model=
"queryParams.reason"
placeholder=
"全部类型"
size=
"small"
clearable
>
<el-option
v-for=
"item in needMsgOptions"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
icon=
"el-icon-search"
size=
"mini"
@
click=
"getList"
>
搜索
</el-button>
<el-button
icon=
"el-icon-refresh"
size=
"mini"
@
click=
"resetQuery"
>
重置
</el-button>
</el-form-item>
</el-form>
<!-- 列表 -->
<el-table
class=
"after-sale-table"
:data=
"afterSaleList"
:height=
"afterSaleHeight"
>
<el-table-column
label=
"商品ID"
align=
"center"
width=
"150"
prop=
"goodsId"
></el-table-column>
<el-table-column
label=
"商品名称"
align=
"center"
width=
"180"
prop=
"title"
></el-table-column>
<el-table-column
label=
"订单号"
align=
"center"
width=
"240"
prop=
"goods_order_sn"
></el-table-column>
<el-table-column
label=
"退换货类型"
align=
"center"
width=
"180"
>
<template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.refund_type == 1"
>
仅退款
</span>
<span
v-if=
"scope.row.refund_type == 2"
>
退货退款
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"退换货
类型"
align=
"center"
prop=
"refund_type
"
>
<el-table-column
label=
"退换货
原因"
align=
"center"
prop=
"reason
"
>
<
template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.re
fund_type==1"
>
退款
</span>
<span
v-if=
"scope.row.refund_type==2"
>
退货
</span>
<span
v-if=
"scope.row.refund_type==3"
>
换货
</span>
<span
v-if=
"scope.row.re
ason==1"
>
其他
</span>
<span
v-if=
"scope.row.reason==2"
>
漏发
</span>
<span
v-if=
"scope.row.reason==3"
>
协商一致
</span>
<span
v-if=
"scope.row.reason==4"
>
质量不符
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"处理状态"
align=
"center"
prop=
"status"
>
<
template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.reason==-1"
>
关闭
</span>
<span
v-if=
"scope.row.reason==1"
>
用户取消
</span>
<span
v-if=
"scope.row.reason==2"
>
待审核
</span>
<span
v-if=
"scope.row.reason==3"
>
驳回
</span>
<span
v-if=
"scope.row.reason==4"
>
待退货
</span>
<span
v-if=
"scope.row.reason==5"
>
待收货
</span>
<span
v-if=
"scope.row.reason==6"
>
重新发货
</span>
<span
v-if=
"scope.row.reason==7"
>
重新收货
</span>
<span
v-if=
"scope.row.reason==8"
>
待打款
</span>
<span
v-if=
"scope.row.reason==9"
>
已完成
</span>
</
template
>
</el-table-column>
<!-- <el-table-column label="到期时间" align="center" prop="TaskEndtime"/> -->
<el-table-column
label=
"申请时间"
align=
"center"
prop=
"created_time"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
{{
formatter
(
scope
.
row
.
created_time
)
}}
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
>
<el-table-column
label=
"到期时间"
align=
"center"
prop=
"deadline"
>
<
template
slot-scope=
"scope"
>
{{
formatter
(
scope
.
row
.
deadline
)
}}
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"140"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<el-button
size=
"mini"
type=
"text"
@
click=
"handleInfo(scope.row)"
>
详情
</el-button>
<el-button
size=
"small"
type=
"text"
@
click=
"handleInfo(scope.row)"
>
详情
</el-button>
</
template
>
</el-table-column>
</el-table>
<pagination
v-show=
"total>0"
:total=
"total"
:page
.
sync=
"queryParams.page"
:limit
.
sync=
"queryParams.limit"
@
pagination=
"getList"
/>
<!-- 售后申请信息对话框 -->
<el-dialog
:title=
"title"
:visible
.
sync=
"open"
width=
"80%"
class=
"after-sales-details"
:modal-append-to-body=
"false"
:close-on-click-modal=
'false'
>
<el-col
:span=
"24"
class=
"card-box"
>
<el-card>
<div
slot=
"header"
>
<span>
订单信息
</span>
</div>
<div
class=
"el-table el-table--enable-row-hover el-table--medium"
>
<el-row>
<el-col
:span=
"12"
><div
class=
"cells"
>
订单编号: {{form.order.order_sn}}
</div></el-col>
<el-col
:span=
"12"
><div
class=
"cells"
>
下单时间: {{form.order.order_create_time}}
</div></el-col>
<el-col
:span=
"12"
><div
class=
"cells"
>
订单金额: {{form.order.order_money/100}} 元
</div></el-col>
<el-col
:span=
"12"
><div
class=
"cells"
>
运费: {{form.order.dispatch_price/100}}元
</div></el-col>
<el-col
:span=
"12"
><div
class=
"cells"
>
数量: x {{form.order.order_goods_total}}
</div></el-col>
<el-col
:span=
"12"
><div
class=
"cells"
>
订单来源: xxxxxxxx
</div></el-col>
<el-col
:span=
"12"
><div
class=
"cells"
>
支付时间: {{form.order.order_pay_time}}
</div></el-col>
<el-col
:span=
"12"
><div
class=
"cells"
>
支付方式: xxxxxx
</div></el-col>
<el-col
:span=
"24"
><div
class=
"cells"
>
订单状态: {{goodsStatus(form.order.order_status)}}
</div></el-col>
</el-row>
</div>
</el-card>
</el-col>
<el-col
:span=
"24"
class=
"card-box"
>
<el-card>
<div
slot=
"header"
>
<span>
商品信息
</span>
</div>
<div
class=
"el-table el-table--enable-row-hover el-table--medium"
>
<el-row>
<el-col
:span=
"24"
><div
class=
"cells"
>
商品名称: {{form.order.goods_title}}
</div></el-col>
<el-col
:span=
"24"
><div
class=
"cells"
>
商品ID: {{form.order.goods_id}}
</div></el-col>
<el-col
:span=
"24"
><div
class=
"cells"
>
商品数量: x {{form.order.goods_total}}
</div></el-col>
<el-col
:span=
"24"
><div
class=
"cells"
>
商品规格: {{form.order.goods_option_title}}
</div></el-col>
</el-row>
</div>
</el-card>
</el-col>
<el-col
:span=
"24"
class=
"card-box"
>
<el-card>
<div
slot=
"header"
>
<span>
退换货信息
</span>
</div>
<div
class=
"el-table el-table--enable-row-hover el-table--medium"
>
<el-row>
<el-col
:span=
"24"
><div
class=
"cells"
>
退换货类型: {{userNeed(form.order.refund_type)}}
</div></el-col>
<el-col
:span=
"24"
><div
class=
"cells"
>
退货数量: {{form.order.refund_goods_total}}
</div></el-col>
<el-col
:span=
"24"
><div
class=
"cells"
>
联系电话: {{form.order.receiver_phone}}
</div></el-col>
<el-col
:span=
"24"
><div
class=
"cells"
>
申请原因: {{userMsg(form.order.reason)}}
</div></el-col>
<el-col
:span=
"24"
><div
class=
"cells"
>
问题描述: {{form.order.content}}
</div></el-col>
<el-col
:span=
"24"
><div
class=
"cells"
>
申请金额: {{form.order.goods_option_title}}
</div></el-col>
<el-col
:span=
"24"
><div
class=
"cells"
>
退款金额: {{form.order.goods_option_title}}
</div></el-col>
</el-row>
</div>
</el-card>
</el-col>
<!-- 退款 同意,拒绝 -->
<!-- 退货退换 同意,拒绝 -->
<!-- 同意 确认收货 退款 -->
<!-- 同意 拒绝收货 拒绝 -->
<el-row>
<!-- refundtype//退款类型 1退款2退货3换货-->
<!-- refundstatus//退款状态 退款状态-1关闭1用户取消2待审核3驳回4待退货5待收货6重新发货7重新收货8待打款9已完成 -->
<el-button
type=
"primary"
v-if=
'refundstatus==2'
@
click=
refundagree()
>
同意申请
</el-button>
<el-button
type=
"warning"
v-if=
'refundstatus==2'
>
拒绝申请
</el-button>
<el-button
type=
"info"
v-if=
'refundstatus==3'
disabled
>
拒绝申请
</el-button>
<el-button
type=
"warning"
disabled
v-if=
'refundstatus==8'
>
退款
</el-button>
</el-row>
<el-col
:span=
"24"
class=
"card-box"
v-if=
"reject"
>
<el-card>
<div
slot=
"header"
>
<span>
拒绝信息
</span>
</div>
<div
class=
"el-table el-table--enable-row-hover el-table--medium"
>
<el-form
:model=
"submitParam"
ref=
"queryForm"
label-width=
"68px"
>
<el-form-item
label=
"拒绝原因"
>
<el-select
v-model=
"submitParam.act_cause"
placeholder=
"拒绝原因"
>
<el-option
v-for=
"item in actCause"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"详细说明"
prop=
"goods_name"
>
<el-input
v-model=
"submitParam.des"
placeholder=
"请输入商品名称"
clearable
size=
"small"
/>
</el-form-item>
<el-form-item>
<el-button
type=
"cyan"
size=
"mini"
@
click=
"handleReject"
>
确定提交
</el-button>
<el-button
size=
"mini"
@
click=
"handleRejectCancel"
>
取消
</el-button>
</el-form-item>
</el-form>
</div>
</el-card>
</el-col>
<el-col
:span=
"24"
class=
"card-box"
v-if=
"reback"
>
<el-card>
<div
slot=
"header"
>
<span>
退货地址
</span>
</div>
<div
class=
"el-table el-table--enable-row-hover el-table--medium"
>
<el-form
:model=
"submitParam"
ref=
"queryForm"
label-width=
"68px"
>
<el-form-item
label=
"退货地址"
>
<el-select
v-model=
"submitParam.address"
placeholder=
"退货地址"
style=
"width:500px;"
>
<el-option
v-for=
"(item,index) in form.address"
:key=
"item.value"
:label=
"item.label"
v-if=
"item != '' "
:value=
"item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"退货说明"
prop=
"des"
>
<el-input
v-model=
"submitParam.des"
placeholder=
"可以详细说明原因"
clearable
size=
"small"
/>
</el-form-item>
</el-form>
</div>
</el-card>
</el-col>
</el-form>
<!-- 退货退款弹窗 -->
<el-dialog
title=
"退货退款"
width=
"500px"
center
:visible
.
sync=
"dialogTableVisible"
:modal-append-to-body=
"false"
:append-to-body=
"true"
:close-on-click-modal=
'false'
>
<el-form
style=
'width:400px; margin:0 auto;'
>
<el-form-item>
确定同意买家的退货退款申请吗?请确认您已收到买家寄回的商品后,再同意退款!
</el-form-item>
<el-form-item
label=
"选择售后收货地址"
>
<el-select
v-model=
"restaddress"
placeholder=
"售后收货地址"
style=
"width:260px;"
>
<el-option
v-for=
"(item,index) in address"
:key=
"index"
:label=
"item.address"
:value=
"item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"digrefundagree"
>
确定
</el-button>
<el-button
@
click=
"dialogTableVisible = false"
>
取消
</el-button>
</el-form-item>
</el-form>
</el-dialog>
<!-- 拒绝申请弹窗 -->
<el-dialog
title=
"拒绝申请"
width=
"500px"
center
:visible
.
sync=
"dialogTableVisible"
:modal-append-to-body=
"false"
:append-to-body=
"true"
:close-on-click-modal=
'false'
>
<el-form
style=
'width:400px; margin:0 auto;'
>
<el-form-item>
确定同意买家的退货退款申请吗?请确认您已收到买家寄回的商品后,再同意退款!
</el-form-item>
<el-form-item
label=
"拒绝原因"
>
<el-select
v-model=
"restaddress"
placeholder=
"拒绝原因"
style=
"width:260px;"
>
<el-option
v-for=
"(item,index) in address"
:key=
"index"
:label=
"item.address"
:value=
"item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"digrefundagree"
>
确定
</el-button>
<el-button
@
click=
"dialogTableVisible = false"
>
取消
</el-button>
</el-form-item>
</el-form>
</el-dialog>
</el-dialog>
<!-- 分页 -->
<div
class=
"pagination-con"
>
<el-pagination
@
size-change=
"handleSizeChange"
@
current-change=
"handleCurrentChange"
:current-page=
"currentPage"
:page-sizes=
"[20, 40, 60, 80, 100]"
:page-size=
"pageSize"
layout=
"total, sizes, prev, pager, next, jumper"
:total=
"total"
>
</el-pagination>
</div>
</el-card>
</div>
</template>
<
script
>
import
{
listRetreat
,
getRetreat
,
refundagreeat
,
refundReject
,
getSearchParams
}
from
'@/api/module/retreat'
import
{
getAddressList
}
from
'@/api/module/retreat/address'
import
{
dateFormat
}
from
'@/utils'
import
{
getRetreatList
}
from
'@/api/module/retreat'
import
{
dateFormat
}
from
'@/utils'
export
default
{
name
:
"
retreat
"
,
name
:
"
Index
"
,
data
()
{
return
{
// 遮罩层
loading
:
false
,
fullHeight
:
0
,
tableHeight
:
0
,
//退货地址
address
:
[],
//提交信息
submitParam
:
{
event_id
:
0
,
act
:
""
,
act_cause
:
0
,
des
:
""
,
address
:
""
,
imgObj
:
[]
},
//拒绝原因 1:,2:,3:,4:,5,6:,7:,8:,9:,10:,11:,12:,13:,14:
actCause
:
[
{
label
:
'请选择拒绝原因'
,
value
:
0
},
{
label
:
"买家要求退款金额过高"
,
value
:
1
},
{
label
:
"买家举证无效,商品没问题"
,
value
:
2
},
{
label
:
"买家未举证,商品没问题"
,
value
:
3
},
{
label
:
"商品已超售后服务时限"
,
value
:
4
},
{
label
:
"退回商品后才能退款"
,
value
:
5
},
{
label
:
"过期未操作"
,
value
:
6
},
{
label
:
"退回的商品影响2次销售"
,
value
:
7
},
{
label
:
"已经协商好换货或维修"
,
value
:
8
},
{
label
:
"买家家退回的商品不是我店铺的"
,
value
:
9
},
{
label
:
"买家填写的退货单号无记录"
,
value
:
10
},
{
label
:
"没收到退货,快递还在途中"
,
value
:
11
},
{
label
:
"买家擅自使用到货付款"
,
value
:
12
},
{
label
:
"买家退回的商品不全"
,
value
:
13
},
{
label
:
"其他"
,
value
:
14
},
],
// 售后类型/退换货类型
userNeedOptions
:
[
{
value
:
-
1
,
label
:
'全部类型'
},
{
value
:
1
,
label
:
'仅退款'
},
{
value
:
2
,
label
:
'退货退款'
},
{
value
:
3
,
label
:
'客服仲裁'
}
],
// 退换货原因
needMsgOptions
:
[
{
value
:
-
1
,
label
:
'全部原因'
},
{
value
:
1
,
label
:
'协商一致退款'
},
{
value
:
2
,
label
:
'质量问题'
},
{
value
:
3
,
label
:
'物流问题'
},
{
value
:
4
,
label
:
'假冒品牌'
},
{
value
:
5
,
label
:
'少件/漏发/破损/污渍'
},
{
value
:
6
,
label
:
'7天无理由'
},
{
value
:
7
,
label
:
'拍错/多拍/不想要'
},
{
value
:
8
,
label
:
'其他'
},
],
// 处理状态
processDesOptions
:
[
{
value
:
-
1
,
label
:
'全部状态'
},
{
value
:
1
,
label
:
'未处理'
},
{
value
:
2
,
label
:
'处理中'
},
{
value
:
3
,
label
:
'已处理'
},
{
value
:
4
,
label
:
'客服介入'
},
],
//状态
orderInfo
:
true
,
//拒绝框
reject
:
false
,
//退货地址
reback
:
false
,
// 选中数组
ids
:
[],
// 非单个禁用
single
:
true
,
// 非多个禁用
multiple
:
true
,
// 显示搜索条件
showSearch
:
true
,
// 总条数
total
:
0
,
// 售后申请信息表格数据
retreatList
:
[],
// 弹出层标题
title
:
""
,
// 是否显示弹出层
open
:
false
,
// 查询参数
goodsStatus
:
1
,
activeName
:
'first'
,
queryParams
:
{
page
:
1
,
limit
:
10
,
applyTime
:
[],
beginTime
:
''
,
endTime
:
''
,
goodsId
:
null
,
goodsName
:
null
,
userNeed
:
null
,
needMsg
:
null
,
processDes
:
null
},
data
:
{},
// 表单参数
form
:
{
retreat
:
{
info
:
{
needMsg
:
0
}},
order
:
{},
goods_id
:
''
,
goods_title
:
''
,
refund_type
:
''
,
goods_order_sn
:
''
,
reason
:
''
,
},
orderrefundid
:
''
,
//订单号
refundtype
:
''
,
//退款类型
refundstatus
:
''
,
//退款状态
dialogTableVisible
:
false
,
//退货退款弹窗
restaddress
:
''
,
//退货地址id
pickerOptions
:
{
shortcuts
:
[{
text
:
'最近一周'
,
...
...
@@ -445,338 +161,182 @@ import {dateFormat} from '@/utils'
}
}]
},
};
// 退换货类型
userNeedOptions
:
[
{
value
:
-
1
,
label
:
'全部类型'
},
{
value
:
1
,
label
:
'仅退款'
},
{
value
:
2
,
label
:
'退货退款'
},
],
// 退换货原因
needMsgOptions
:
[
{
value
:
-
1
,
label
:
'全部原因'
},
{
value
:
3
,
label
:
'协商一致退款'
},
{
value
:
1
,
label
:
'其他'
},
{
value
:
2
,
label
:
'漏发'
},
{
value
:
4
,
label
:
'质量不符'
},
],
fullHeight
:
0
,
afterSaleHeight
:
200
,
currentPage
:
1
,
pageSize
:
10
,
total
:
0
,
// 售后列表
afterSaleList
:
[],
}
},
// data end
watch
:
{
fullHeight
(
val
)
{
let
formHeight
=
document
.
getElementsByClassName
(
'form-params'
)[
0
].
clientHeight
;
let
tabsHeight
=
document
.
getElementsByClassName
(
'after-sale-tabs'
)[
0
].
clientHeight
;
this
.
afterSaleHeight
=
val
-
formHeight
-
tabsHeight
-
40
-
40
}
},
created
()
{
this
.
getParams
();
this
.
getList
();
this
.
getgetAddressList
()
this
.
$nextTick
(()
=>
{
this
.
fullHeight
=
document
.
getElementsByClassName
(
'box-card'
)[
0
].
clientHeight
})
},
watch
:
{
fullHeight
(
val
)
{
let
formHeight
=
document
.
getElementsByClassName
(
'clearfix'
)[
0
].
clientHeight
this
.
tableHeight
=
val
-
formHeight
-
120
},
'queryParams.applyTime'
()
{
// select组件,clear的时候,将addTimeInterval的值,初始化为null,判断当其值为null时,赋值为数组
if
(
!
this
.
queryParams
.
applyTime
&&
typeof
(
this
.
queryParams
.
applyTime
)
!==
"undefined"
)
{
this
.
queryParams
.
applyTime
=
[];
this
.
queryParams
.
beginTime
=
''
;
this
.
queryParams
.
endTime
=
''
;
}
}
mounted
()
{
},
methods
:
{
// 获取售后地址
getgetAddressList
(){
let
data
=
{
limit
:
10
,
page
:
1
}
getAddressList
(
data
).
then
(
res
=>
{
if
(
res
.
code
==
1
){
this
.
address
=
res
.
data
.
data
}
})
},
/** 查看售后详情 */
handleInfo
(
row
)
{
const
id
=
row
.
refund_sn
getRetreat
(
id
).
then
(
response
=>
{
this
.
loading
=
false
;
this
.
form
.
order
=
response
.
data
;
this
.
orderrefundid
=
response
.
data
.
order_refund_sn
// this.refundtype= response.data.refund_type//退款类型
// this.refundstatus= response.data.status//退款状态
this
.
refundtype
=
2
//退款类型
this
.
refundstatus
=
2
//退款状态
this
.
open
=
true
;
this
.
title
=
"售后申请信息详情"
;
});
},
// 售后star
// refundtype//退款类型 1退款2退货3换货
// refundstatus//退款状态 退款状态-1关闭1用户取消2待审核3驳回4待退货5待收货6重新发货7重新收货8待打款9已完成
refundagree
(){
if
(
this
.
refundtype
==
1
){
//退款
this
.
$msgbox
({
title
:
'确认同意买家的仅退款申请吗?'
,
message
:
'如果您同意,将直接退款给买家,买家不用寄回商品!'
,
center
:
true
,
showCancelButton
:
true
,
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
beforeClose
:
(
action
,
instance
,
done
)
=>
{
if
(
action
===
'confirm'
)
{
done
();
let
data
=
{
order_refund_id
:
this
.
orderrefundid
}
refundagreeat
(
data
).
then
(
res
=>
{
if
(
res
.
code
==
1
){
done
();
this
.
$message
({
type
:
'success'
,
message
:
'操作成功!'
});
}
else
{
done
();
this
.
$message
({
type
:
'warning'
,
message
:
res
.
message
});
}
})
}
else
{
done
();
}
}
}).
then
(
action
=>
{
});
}
else
if
(
this
.
refundtype
==
2
){
//退货
this
.
dialogTableVisible
=
true
}
},
digrefundagree
(){
let
data
=
{
order_refund_id
:
this
.
orderrefundid
,
order_refund_address
:
this
.
restaddress
}
refundagreeat
(
data
).
then
(
res
=>
{
if
(
res
.
code
==
1
){
this
.
dialogTableVisible
=
false
this
.
$message
({
type
:
'success'
,
message
:
'操作成功!'
});
}
else
{
this
.
$message
({
type
:
'warning'
,
message
:
res
.
message
});
}
})
},
// 售后over
formatter
(
time
)
{
return
dateFormat
(
time
,
'Y-m-d H:i:s'
)
},
getParams
()
{
getSearchParams
().
then
(
res
=>
{
if
(
res
.
userNeed
&&
res
.
userNeed
.
length
>
0
)
{
this
.
userNeedOptions
=
res
.
userNeed
;
}
if
(
res
.
needMsg
&&
res
.
needMsg
.
length
>
0
)
{
this
.
needMsgOptions
=
res
.
needMsg
;
}
if
(
res
.
processDes
&&
res
.
processDes
.
length
>
0
)
{
this
.
processDesOptions
=
res
.
processDes
;
}
});
},
//原因 卖家拒绝(1:买家要求退款金额过高2:买家举证无效,商品没问题3:买家未举证,商品没问题4:商品已超售后服务时限5:退回商品后才能退款6:过期未操作,7:其他)
actCauses
(
actCause
)
{
if
(
actCause
==
1
)
{
return
"买家要求退款金额过高"
}
else
if
(
actCause
==
2
)
{
return
"买家举证无效,商品没问题"
}
else
if
(
actCause
==
3
)
{
return
"买家未举证,商品没问题"
}
else
if
(
actCause
==
4
)
{
return
"商品已超售后服务时限"
}
else
if
(
actCause
==
5
)
{
return
"退回商品后才能退款"
}
else
if
(
actCause
==
6
)
{
return
"过期未操作"
}
else
if
(
actCause
==
7
)
{
return
"其他"
}
else
{
return
"未知"
/** 顶部 状态页签切换
* 1-未处理;2-处理中;3-已完成
* */
handleClick
()
{
switch
(
this
.
activeName
)
{
case
'first'
:
this
.
goodsStatus
=
1
break
case
'second'
:
this
.
goodsStatus
=
2
break
case
'third'
:
this
.
goodsStatus
=
3
break
default
:
break
}
// 搜索条件初始化
this
.
resetSearchParams
();
// 列表 查询
this
.
getList
();
},
//行为1:同意:2拒绝3:客服介入4:撤销 5:发送收货地址 6:同意收货 7:买家上传物流信息
act
(
act
)
{
if
(
act
==
1
)
{
return
"同意"
}
else
if
(
act
==
2
)
{
return
"拒绝"
}
else
if
(
act
==
3
)
{
return
"客服介入"
}
else
if
(
act
==
4
)
{
return
"撤销"
}
else
if
(
act
==
5
)
{
return
"发送收货地址"
}
else
if
(
act
==
6
)
{
return
"同意收货"
}
else
if
(
act
==
7
)
{
return
"买家上传物流信息"
}
else
{
return
"未知"
/** 时间格式处理 */
applyTimeChange
()
{
if
(
!
Array
.
isArray
(
this
.
queryParams
.
applyTime
)
)
{
this
.
queryParams
.
applyTime
=
[];
}
},
//角色 1:2:3:客服 4:系统
role
(
id
)
{
if
(
id
==
1
)
{
return
"商家操作"
}
else
if
(
id
==
2
)
{
return
"用户操作"
}
else
if
(
id
==
3
)
{
return
"客服操作"
}
else
if
(
id
==
4
)
{
return
"系统操作"
}
else
{
return
"未知"
/** 列表查询 */
getList
()
{
let
params
=
{
page
:
this
.
currentPage
,
limit
:
this
.
pageSize
,
status
:
this
.
goodsStatus
,
apply_start_time
:
''
,
apply_end_time
:
''
,
goods_id
:
this
.
queryParams
.
goods_id
,
goods_title
:
this
.
queryParams
.
goods_title
,
refund_type
:
''
,
goods_order_sn
:
''
,
reason
:
''
}
},
// //获取地址后缀id
// getIndex(index) {
// index = index.slice(14);
// return index
// },
//商品状态 0:,1:,2:,3
goodsStatus
(
status
)
{
if
(
status
==
0
)
{
return
"待付款"
}
else
if
(
status
==
1
)
{
return
"待发货"
}
else
if
(
status
==
2
)
{
return
"待收货"
}
else
if
(
status
==
3
)
{
return
"已完成"
}
else
if
(
status
==
4
){
return
"已结算"
}
else
if
(
status
==
-
1
){
return
"订单取消"
// console.log('queryParams:',this.queryParams);
//console.log('传向后台的参数:',params);
if
(
this
.
queryParams
.
applyTime
.
length
===
2
)
{
params
.
apply_start_time
=
new
Date
(
this
.
queryParams
.
applyTime
[
0
]).
getTime
()
/
1000
params
.
apply_end_time
=
new
Date
(
this
.
queryParams
.
applyTime
[
1
]).
getTime
()
/
1000
}
else
{
params
.
apply_start_time
=
''
params
.
apply_end_time
=
''
}
},
userNeed
(
ids
)
{
//1::2:3:
if
(
ids
==
1
)
{
return
"仅退款"
}
else
if
(
ids
==
2
)
{
return
"退款退货"
}
else
if
(
ids
==
3
)
{
return
"换货"
}
else
{
return
"未知"
if
(
this
.
queryParams
.
refund_type
===
-
1
)
{
params
.
refund_type
=
''
}
else
{
params
.
refund_type
=
this
.
queryParams
.
refund_type
;
}
},
userMsg
(
typs
)
{
if
(
typs
==
1
)
{
return
"协商一致退款"
}
else
if
(
typs
==
2
)
{
return
"质量问题"
}
else
if
(
typs
==
3
)
{
return
"物流问题"
}
else
if
(
typs
==
4
)
{
return
"假冒品牌"
}
else
if
(
typs
==
5
)
{
return
"少件/漏发/破损/污渍"
}
else
if
(
typs
==
6
)
{
return
"7天无理由"
}
else
if
(
typs
==
7
)
{
return
"拍错/多拍/不想要"
}
else
{
return
"其他"
if
(
this
.
queryParams
.
reason
===
-
1
)
{
params
.
reason
=
''
}
else
{
params
.
reason
=
this
.
queryParams
.
reason
;
}
},
/** 查询售后申请信息列表 */
getList
()
{
listRetreat
(
this
.
queryParams
).
then
(
res
=>
{
if
(
res
.
data
)
{
this
.
retreatList
=
res
.
data
.
data
;
getRetreatList
(
params
).
then
(
res
=>
{
if
(
res
.
code
===
1
)
{
this
.
afterSaleList
=
res
.
data
.
data
;
this
.
total
=
res
.
data
.
count
;
}
});
},
// 取消按钮
cancel
()
{
this
.
open
=
false
;
this
.
reset
();
},
// 表单重置
reset
()
{
this
.
form
=
{
"order"
:
[],
"retreat"
:
[]
};
this
.
resetForm
(
"form"
);
},
/** 搜索按钮操作 */
handleQuery
()
{
if
(
this
.
queryParams
.
applyTime
.
length
===
2
)
{
this
.
queryParams
.
beginTime
=
new
Date
(
this
.
queryParams
.
applyTime
[
0
]).
getTime
()
/
1000
;
this
.
queryParams
.
endTime
=
new
Date
(
this
.
queryParams
.
applyTime
[
1
]).
getTime
()
/
1000
;
}
this
.
queryParams
.
page
=
1
;
this
.
getList
();
},
/** 重置
按钮
操作 */
/** 重置
操作 */
resetQuery
()
{
this
.
resetForm
(
"queryForm"
);
this
.
queryParams
.
beginTime
=
''
;
this
.
queryParams
.
endTime
=
''
;
this
.
handleQuery
();
},
//同意申请并发货
handleAddress
()
{
this
.
orderInfo
=
false
this
.
reject
=
false
this
.
reback
=
true
this
.
resetSearchParams
();
this
.
getList
();
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
ids
=
selection
.
map
(
item
=>
item
.
id
)
this
.
single
=
selection
.
length
!==
1
this
.
multiple
=
!
selection
.
length
/** 售后 订单 详情 */
handleInfo
(
row
)
{
let
id
=
row
.
refund_sn
?
row
.
refund_sn
:
0
;
this
.
$router
.
push
({
path
:
'/system/repeat/edit'
,
query
:
{
refund_sn
:
id
}
});
},
handleRejectCancel
()
{
this
.
orderInfo
=
true
this
.
reject
=
false
/** 调整 列表当前页面 最大展示条数 */
handleSizeChange
(
val
)
{
this
.
pageSize
=
val
;
// this.getList();
},
handleRejectPre
()
{
this
.
orderInfo
=
false
this
.
reject
=
true
/** 列表 跳转到 第 几 页 */
handleCurrentChange
(
val
)
{
this
.
currentPage
=
val
// this.getList();
},
handleRebackCancel
()
{
this
.
reject
=
false
this
.
reback
=
false
this
.
orderInfo
=
true
/** 搜索条件初始化 */
resetSearchParams
()
{
this
.
pageSize
=
10
;
this
.
currentPage
=
1
;
// this.goodsStatus = 1;
this
.
queryParams
=
{
applyTime
:
[],
goods_id
:
''
,
goods_title
:
''
,
refund_type
:
''
,
goods_order_sn
:
''
,
reason
:
''
,
}
},
/** 搜索条件 键盘enter */
handleQuery
()
{
},
//methods结束
};
/** 时间戳转化 格式化 */
formatter
(
time
)
{
return
dateFormat
(
time
*
1000
,
'Y-m-d H:i:s'
)
},
}
// methods end
}
</
script
>
<
style
scoped
lang=
"scss"
type=
"text/stylus"
>
/
deep
/
.queryFormInline
{
.el-form-item
{
margin-bottom
:
5px
;
}
<
style
scoped
>
/
deep
/
.el-dialog__body
{
height
:
100%
;
overflow
:
hidden
;
}
/
deep
/
.after-sales-details
.el-dialog
{
height
:
80%
;
overflow
:
hidden
;
/
deep
/
.after-sale-tabs
.el-tabs__item
{
line-height
:
30px
;
}
/
deep
/
.el-dialog__body
{
height
:calc
(
100
%
-
50px
)
;
overflow-y
:
scroll
;
/
deep
/
.el-form--inline
.el-form-item
{
margin-right
:
15px
;
}
.cells
{
line-height
:
32px
;
.pagination-con
{
text-align
:
center
;
margin-top
:
15px
;
}
</
style
>
src/views/system/retreat/retreat/index0907.vue
0 → 100644
浏览文件 @
67d5f266
<
template
>
<div
class=
"app-container"
>
<el-card
class=
"box-card"
>
<div
slot=
"header"
class=
"clearfix"
>
<el-form
:model=
"queryParams"
ref=
"queryForm"
:inline=
"true"
v-show=
"showSearch"
label-width=
"82px"
class=
"queryFormInline"
>
<el-form-item
label=
"申请时间"
prop=
"applyTime"
>
<el-date-picker
size=
"small"
v-model=
"queryParams.applyTime"
type=
"daterange"
align=
"left"
unlink-panels
range-separator=
"至"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
:picker-options=
"pickerOptions"
>
</el-date-picker>
</el-form-item>
<el-form-item
label=
"商品ID"
prop=
"goodsId"
>
<el-input
v-model=
"queryParams.goodsId"
placeholder=
"请输入商品id"
clearable
size=
"small"
@
keyup
.
enter
.
native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"商品名称"
prop=
"goodsName"
>
<el-input
v-model=
"queryParams.goodsName"
placeholder=
"请输入商品名称"
clearable
size=
"small"
@
keyup
.
enter
.
native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"退换货类型"
prop=
"userNeed"
>
<el-select
v-model=
"queryParams.userNeed"
placeholder=
"全部原因"
size=
"small"
clearable
>
<el-option
v-for=
"item in userNeedOptions"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"退换货原因"
prop=
"needMsg"
>
<el-select
v-model=
"queryParams.needMsg"
placeholder=
"全部类型"
size=
"small"
clearable
>
<el-option
v-for=
"item in needMsgOptions"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"处理状态"
prop=
"processDes"
>
<el-select
v-model=
"queryParams.processDes"
placeholder=
"全部状态"
size=
"small"
clearable
>
<el-option
v-for=
"item in processDesOptions"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
icon=
"el-icon-search"
size=
"mini"
@
click=
"handleQuery"
>
搜索
</el-button>
<el-button
icon=
"el-icon-refresh"
size=
"mini"
@
click=
"resetQuery"
>
重置
</el-button>
</el-form-item>
</el-form>
</div>
<el-table
v-loading=
"loading"
:data=
"retreatList"
:height=
"tableHeight"
>
<el-table-column
label=
"序号"
align=
"center"
prop=
"id"
/>
<el-table-column
label=
"商品名称"
align=
"center"
prop=
"goods_title"
/>
<el-table-column
label=
"订单号"
align=
"center"
prop=
"refund_sn"
/>
<el-table-column
label=
"订单手机号"
align=
"center"
prop=
"UPhone"
/>
<el-table-column
label=
"退换货原因"
align=
"center"
prop=
"reason"
>
<template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.reason==1"
>
协商一致退款
</span>
<span
v-if=
"scope.row.reason==2"
>
质量问题
</span>
<span
v-if=
"scope.row.reason==3"
>
物流问题
</span>
<span
v-if=
"scope.row.reason==4"
>
假冒品牌
</span>
<span
v-if=
"scope.row.reason==5"
>
少件/漏发/破损/污渍
</span>
<span
v-if=
"scope.row.reason==6"
>
7天无理由
</span>
<span
v-if=
"scope.row.reason==7"
>
拍错/多拍/不想要
</span>
<span
v-if=
"scope.row.reason==8"
>
其他
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"退换货类型"
align=
"center"
prop=
"refund_type"
>
<
template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.refund_type==1"
>
退款
</span>
<span
v-if=
"scope.row.refund_type==2"
>
退货
</span>
<span
v-if=
"scope.row.refund_type==3"
>
换货
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"处理状态"
align=
"center"
prop=
"status"
>
<
template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.reason==-1"
>
关闭
</span>
<span
v-if=
"scope.row.reason==1"
>
用户取消
</span>
<span
v-if=
"scope.row.reason==2"
>
待审核
</span>
<span
v-if=
"scope.row.reason==3"
>
驳回
</span>
<span
v-if=
"scope.row.reason==4"
>
待退货
</span>
<span
v-if=
"scope.row.reason==5"
>
待收货
</span>
<span
v-if=
"scope.row.reason==6"
>
重新发货
</span>
<span
v-if=
"scope.row.reason==7"
>
重新收货
</span>
<span
v-if=
"scope.row.reason==8"
>
待打款
</span>
<span
v-if=
"scope.row.reason==9"
>
已完成
</span>
</
template
>
</el-table-column>
<!-- <el-table-column label="到期时间" align="center" prop="TaskEndtime"/> -->
<el-table-column
label=
"申请时间"
align=
"center"
prop=
"created_time"
>
<
template
slot-scope=
"scope"
>
{{
formatter
(
scope
.
row
.
created_time
)
}}
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
>
<
template
slot-scope=
"scope"
>
<el-button
size=
"mini"
type=
"text"
@
click=
"handleInfo(scope.row)"
>
详情
</el-button>
</
template
>
</el-table-column>
</el-table>
<pagination
v-show=
"total>0"
:total=
"total"
:page
.
sync=
"queryParams.page"
:limit
.
sync=
"queryParams.limit"
@
pagination=
"getList"
/>
<!-- 售后申请信息对话框 -->
<el-dialog
:title=
"title"
:visible
.
sync=
"open"
width=
"80%"
class=
"after-sales-details"
:modal-append-to-body=
"false"
:close-on-click-modal=
'false'
>
<el-col
:span=
"24"
class=
"card-box"
>
<el-card>
<div
slot=
"header"
>
<span>
订单信息
</span>
</div>
<div
class=
"el-table el-table--enable-row-hover el-table--medium"
>
<el-row>
<el-col
:span=
"12"
><div
class=
"cells"
>
订单编号: {{form.order.order_sn}}
</div></el-col>
<el-col
:span=
"12"
><div
class=
"cells"
>
下单时间: {{form.order.order_create_time}}
</div></el-col>
<el-col
:span=
"12"
><div
class=
"cells"
>
订单金额: {{form.order.order_money/100}} 元
</div></el-col>
<el-col
:span=
"12"
><div
class=
"cells"
>
运费: {{form.order.dispatch_price/100}}元
</div></el-col>
<el-col
:span=
"12"
><div
class=
"cells"
>
数量: x {{form.order.order_goods_total}}
</div></el-col>
<el-col
:span=
"12"
><div
class=
"cells"
>
订单来源: xxxxxxxx
</div></el-col>
<el-col
:span=
"12"
><div
class=
"cells"
>
支付时间: {{form.order.order_pay_time}}
</div></el-col>
<el-col
:span=
"12"
><div
class=
"cells"
>
支付方式: xxxxxx
</div></el-col>
<el-col
:span=
"24"
><div
class=
"cells"
>
订单状态: {{goodsStatus(form.order.order_status)}}
</div></el-col>
</el-row>
</div>
</el-card>
</el-col>
<el-col
:span=
"24"
class=
"card-box"
>
<el-card>
<div
slot=
"header"
>
<span>
商品信息
</span>
</div>
<div
class=
"el-table el-table--enable-row-hover el-table--medium"
>
<el-row>
<el-col
:span=
"24"
><div
class=
"cells"
>
商品名称: {{form.order.goods_title}}
</div></el-col>
<el-col
:span=
"24"
><div
class=
"cells"
>
商品ID: {{form.order.goods_id}}
</div></el-col>
<el-col
:span=
"24"
><div
class=
"cells"
>
商品数量: x {{form.order.goods_total}}
</div></el-col>
<el-col
:span=
"24"
><div
class=
"cells"
>
商品规格: {{form.order.goods_option_title}}
</div></el-col>
</el-row>
</div>
</el-card>
</el-col>
<el-col
:span=
"24"
class=
"card-box"
>
<el-card>
<div
slot=
"header"
>
<span>
退换货信息
</span>
</div>
<div
class=
"el-table el-table--enable-row-hover el-table--medium"
>
<el-row>
<el-col
:span=
"24"
><div
class=
"cells"
>
退换货类型: {{userNeed(form.order.refund_type)}}
</div></el-col>
<el-col
:span=
"24"
><div
class=
"cells"
>
退货数量: {{form.order.refund_goods_total}}
</div></el-col>
<el-col
:span=
"24"
><div
class=
"cells"
>
联系电话: {{form.order.receiver_phone}}
</div></el-col>
<el-col
:span=
"24"
><div
class=
"cells"
>
申请原因: {{userMsg(form.order.reason)}}
</div></el-col>
<el-col
:span=
"24"
><div
class=
"cells"
>
问题描述: {{form.order.content}}
</div></el-col>
<el-col
:span=
"24"
><div
class=
"cells"
>
申请金额: {{form.order.goods_option_title}}
</div></el-col>
<el-col
:span=
"24"
><div
class=
"cells"
>
退款金额: {{form.order.goods_option_title}}
</div></el-col>
</el-row>
</div>
</el-card>
</el-col>
<!-- 退款 同意,拒绝 -->
<!-- 退货退换 同意,拒绝 -->
<!-- 同意 确认收货 退款 -->
<!-- 同意 拒绝收货 拒绝 -->
<el-row>
<!-- refundtype//退款类型 1退款2退货3换货-->
<!-- refundstatus//退款状态 退款状态-1关闭1用户取消2待审核3驳回4待退货5待收货6重新发货7重新收货8待打款9已完成 -->
<el-button
type=
"primary"
v-if=
'refundstatus==2'
@
click=
refundagree()
>
同意申请
</el-button>
<el-button
type=
"warning"
v-if=
'refundstatus==2'
>
拒绝申请
</el-button>
<el-button
type=
"info"
v-if=
'refundstatus==3'
disabled
>
拒绝申请
</el-button>
<el-button
type=
"warning"
disabled
v-if=
'refundstatus==8'
>
退款
</el-button>
</el-row>
<el-col
:span=
"24"
class=
"card-box"
v-if=
"reject"
>
<el-card>
<div
slot=
"header"
>
<span>
拒绝信息
</span>
</div>
<div
class=
"el-table el-table--enable-row-hover el-table--medium"
>
<el-form
:model=
"submitParam"
ref=
"queryForm"
label-width=
"68px"
>
<el-form-item
label=
"拒绝原因"
>
<el-select
v-model=
"submitParam.act_cause"
placeholder=
"拒绝原因"
>
<el-option
v-for=
"item in actCause"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"详细说明"
prop=
"goods_name"
>
<el-input
v-model=
"submitParam.des"
placeholder=
"请输入商品名称"
clearable
size=
"small"
/>
</el-form-item>
<el-form-item>
<el-button
type=
"cyan"
size=
"mini"
@
click=
"handleReject"
>
确定提交
</el-button>
<el-button
size=
"mini"
@
click=
"handleRejectCancel"
>
取消
</el-button>
</el-form-item>
</el-form>
</div>
</el-card>
</el-col>
<el-col
:span=
"24"
class=
"card-box"
v-if=
"reback"
>
<el-card>
<div
slot=
"header"
>
<span>
退货地址
</span>
</div>
<div
class=
"el-table el-table--enable-row-hover el-table--medium"
>
<el-form
:model=
"submitParam"
ref=
"queryForm"
label-width=
"68px"
>
<el-form-item
label=
"退货地址"
>
<el-select
v-model=
"submitParam.address"
placeholder=
"退货地址"
style=
"width:500px;"
>
<el-option
v-for=
"(item,index) in form.address"
:key=
"item.value"
:label=
"item.label"
v-if=
"item != '' "
:value=
"item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"退货说明"
prop=
"des"
>
<el-input
v-model=
"submitParam.des"
placeholder=
"可以详细说明原因"
clearable
size=
"small"
/>
</el-form-item>
</el-form>
</div>
</el-card>
</el-col>
</el-form>
<!-- 退货退款弹窗 -->
<el-dialog
title=
"退货退款"
width=
"500px"
center
:visible
.
sync=
"dialogTableVisible"
:modal-append-to-body=
"false"
:append-to-body=
"true"
:close-on-click-modal=
'false'
>
<el-form
style=
'width:400px; margin:0 auto;'
>
<el-form-item>
确定同意买家的退货退款申请吗?请确认您已收到买家寄回的商品后,再同意退款!
</el-form-item>
<el-form-item
label=
"选择售后收货地址"
>
<el-select
v-model=
"restaddress"
placeholder=
"售后收货地址"
style=
"width:260px;"
>
<el-option
v-for=
"(item,index) in address"
:key=
"index"
:label=
"item.address"
:value=
"item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"digrefundagree"
>
确定
</el-button>
<el-button
@
click=
"dialogTableVisible = false"
>
取消
</el-button>
</el-form-item>
</el-form>
</el-dialog>
<!-- 拒绝申请弹窗 -->
<el-dialog
title=
"拒绝申请"
width=
"500px"
center
:visible
.
sync=
"dialogTableVisible"
:modal-append-to-body=
"false"
:append-to-body=
"true"
:close-on-click-modal=
'false'
>
<el-form
style=
'width:400px; margin:0 auto;'
>
<el-form-item>
确定同意买家的退货退款申请吗?请确认您已收到买家寄回的商品后,再同意退款!
</el-form-item>
<el-form-item
label=
"拒绝原因"
>
<el-select
v-model=
"restaddress"
placeholder=
"拒绝原因"
style=
"width:260px;"
>
<el-option
v-for=
"(item,index) in address"
:key=
"index"
:label=
"item.address"
:value=
"item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"digrefundagree"
>
确定
</el-button>
<el-button
@
click=
"dialogTableVisible = false"
>
取消
</el-button>
</el-form-item>
</el-form>
</el-dialog>
</el-dialog>
</el-card>
</div>
</template>
<
script
>
import
{
listRetreat
,
getRetreat
,
refundagreeat
,
refundReject
,
getSearchParams
}
from
'@/api/module/retreat'
import
{
getAddressList
}
from
'@/api/module/retreat/address'
import
{
dateFormat
}
from
'@/utils'
export
default
{
name
:
"retreat"
,
data
()
{
return
{
// 遮罩层
loading
:
false
,
fullHeight
:
0
,
tableHeight
:
0
,
//退货地址
address
:
[],
//提交信息
submitParam
:
{
event_id
:
0
,
act
:
""
,
act_cause
:
0
,
des
:
""
,
address
:
""
,
imgObj
:
[]
},
//拒绝原因 1:,2:,3:,4:,5,6:,7:,8:,9:,10:,11:,12:,13:,14:
actCause
:
[
{
label
:
'请选择拒绝原因'
,
value
:
0
},
{
label
:
"买家要求退款金额过高"
,
value
:
1
},
{
label
:
"买家举证无效,商品没问题"
,
value
:
2
},
{
label
:
"买家未举证,商品没问题"
,
value
:
3
},
{
label
:
"商品已超售后服务时限"
,
value
:
4
},
{
label
:
"退回商品后才能退款"
,
value
:
5
},
{
label
:
"过期未操作"
,
value
:
6
},
{
label
:
"退回的商品影响2次销售"
,
value
:
7
},
{
label
:
"已经协商好换货或维修"
,
value
:
8
},
{
label
:
"买家家退回的商品不是我店铺的"
,
value
:
9
},
{
label
:
"买家填写的退货单号无记录"
,
value
:
10
},
{
label
:
"没收到退货,快递还在途中"
,
value
:
11
},
{
label
:
"买家擅自使用到货付款"
,
value
:
12
},
{
label
:
"买家退回的商品不全"
,
value
:
13
},
{
label
:
"其他"
,
value
:
14
},
],
// 售后类型/退换货类型
userNeedOptions
:
[
{
value
:
-
1
,
label
:
'全部类型'
},
{
value
:
1
,
label
:
'仅退款'
},
{
value
:
2
,
label
:
'退货退款'
},
{
value
:
3
,
label
:
'客服仲裁'
}
],
// 退换货原因
needMsgOptions
:
[
{
value
:
-
1
,
label
:
'全部原因'
},
{
value
:
1
,
label
:
'协商一致退款'
},
{
value
:
2
,
label
:
'质量问题'
},
{
value
:
3
,
label
:
'物流问题'
},
{
value
:
4
,
label
:
'假冒品牌'
},
{
value
:
5
,
label
:
'少件/漏发/破损/污渍'
},
{
value
:
6
,
label
:
'7天无理由'
},
{
value
:
7
,
label
:
'拍错/多拍/不想要'
},
{
value
:
8
,
label
:
'其他'
},
],
// 处理状态
processDesOptions
:
[
{
value
:
-
1
,
label
:
'全部状态'
},
{
value
:
1
,
label
:
'未处理'
},
{
value
:
2
,
label
:
'处理中'
},
{
value
:
3
,
label
:
'已处理'
},
{
value
:
4
,
label
:
'客服介入'
},
],
//状态
orderInfo
:
true
,
//拒绝框
reject
:
false
,
//退货地址
reback
:
false
,
// 选中数组
ids
:
[],
// 非单个禁用
single
:
true
,
// 非多个禁用
multiple
:
true
,
// 显示搜索条件
showSearch
:
true
,
// 总条数
total
:
0
,
// 售后申请信息表格数据
retreatList
:
[],
// 弹出层标题
title
:
""
,
// 是否显示弹出层
open
:
false
,
// 查询参数
queryParams
:
{
page
:
1
,
limit
:
10
,
applyTime
:
[],
beginTime
:
''
,
endTime
:
''
,
goodsId
:
null
,
goodsName
:
null
,
userNeed
:
null
,
needMsg
:
null
,
processDes
:
null
},
data
:
{},
// 表单参数
form
:
{
retreat
:
{
info
:
{
needMsg
:
0
}},
order
:
{},
},
orderrefundid
:
''
,
//订单号
refundtype
:
''
,
//退款类型
refundstatus
:
''
,
//退款状态
dialogTableVisible
:
false
,
//退货退款弹窗
restaddress
:
''
,
//退货地址id
pickerOptions
:
{
shortcuts
:
[{
text
:
'最近一周'
,
onClick
(
picker
)
{
const
end
=
new
Date
();
const
start
=
new
Date
();
start
.
setTime
(
start
.
getTime
()
-
3600
*
1000
*
24
*
7
);
picker
.
$emit
(
'pick'
,
[
start
,
end
]);
}
},
{
text
:
'最近一个月'
,
onClick
(
picker
)
{
const
end
=
new
Date
();
const
start
=
new
Date
();
start
.
setTime
(
start
.
getTime
()
-
3600
*
1000
*
24
*
30
);
picker
.
$emit
(
'pick'
,
[
start
,
end
]);
}
},
{
text
:
'最近三个月'
,
onClick
(
picker
)
{
const
end
=
new
Date
();
const
start
=
new
Date
();
start
.
setTime
(
start
.
getTime
()
-
3600
*
1000
*
24
*
90
);
picker
.
$emit
(
'pick'
,
[
start
,
end
]);
}
}]
},
};
},
created
()
{
this
.
getParams
();
this
.
getList
();
this
.
getgetAddressList
()
this
.
$nextTick
(()
=>
{
this
.
fullHeight
=
document
.
getElementsByClassName
(
'box-card'
)[
0
].
clientHeight
})
},
watch
:
{
fullHeight
(
val
)
{
let
formHeight
=
document
.
getElementsByClassName
(
'clearfix'
)[
0
].
clientHeight
this
.
tableHeight
=
val
-
formHeight
-
120
},
'queryParams.applyTime'
()
{
// select组件,clear的时候,将addTimeInterval的值,初始化为null,判断当其值为null时,赋值为数组
if
(
!
this
.
queryParams
.
applyTime
&&
typeof
(
this
.
queryParams
.
applyTime
)
!==
"undefined"
)
{
this
.
queryParams
.
applyTime
=
[];
this
.
queryParams
.
beginTime
=
''
;
this
.
queryParams
.
endTime
=
''
;
}
}
},
methods
:
{
// 获取售后地址
getgetAddressList
(){
let
data
=
{
limit
:
10
,
page
:
1
}
getAddressList
(
data
).
then
(
res
=>
{
if
(
res
.
code
==
1
){
this
.
address
=
res
.
data
.
data
}
})
},
/** 查看售后详情 */
handleInfo
(
row
)
{
const
id
=
row
.
refund_sn
getRetreat
(
id
).
then
(
response
=>
{
this
.
loading
=
false
;
this
.
form
.
order
=
response
.
data
;
this
.
orderrefundid
=
response
.
data
.
order_refund_sn
// this.refundtype= response.data.refund_type//退款类型
// this.refundstatus= response.data.status//退款状态
this
.
refundtype
=
2
//退款类型
this
.
refundstatus
=
2
//退款状态
this
.
open
=
true
;
this
.
title
=
"售后申请信息详情"
;
});
},
// 售后star
// refundtype//退款类型 1退款2退货3换货
// refundstatus//退款状态 退款状态-1关闭1用户取消2待审核3驳回4待退货5待收货6重新发货7重新收货8待打款9已完成
refundagree
(){
if
(
this
.
refundtype
==
1
){
//退款
this
.
$msgbox
({
title
:
'确认同意买家的仅退款申请吗?'
,
message
:
'如果您同意,将直接退款给买家,买家不用寄回商品!'
,
center
:
true
,
showCancelButton
:
true
,
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
beforeClose
:
(
action
,
instance
,
done
)
=>
{
if
(
action
===
'confirm'
)
{
done
();
let
data
=
{
order_refund_id
:
this
.
orderrefundid
}
refundagreeat
(
data
).
then
(
res
=>
{
if
(
res
.
code
==
1
){
done
();
this
.
$message
({
type
:
'success'
,
message
:
'操作成功!'
});
}
else
{
done
();
this
.
$message
({
type
:
'warning'
,
message
:
res
.
message
});
}
})
}
else
{
done
();
}
}
}).
then
(
action
=>
{
});
}
else
if
(
this
.
refundtype
==
2
){
//退货
this
.
dialogTableVisible
=
true
}
},
digrefundagree
(){
let
data
=
{
order_refund_id
:
this
.
orderrefundid
,
order_refund_address
:
this
.
restaddress
}
refundagreeat
(
data
).
then
(
res
=>
{
if
(
res
.
code
==
1
){
this
.
dialogTableVisible
=
false
this
.
$message
({
type
:
'success'
,
message
:
'操作成功!'
});
}
else
{
this
.
$message
({
type
:
'warning'
,
message
:
res
.
message
});
}
})
},
// 售后over
formatter
(
time
)
{
return
dateFormat
(
time
,
'Y-m-d H:i:s'
)
},
getParams
()
{
getSearchParams
().
then
(
res
=>
{
if
(
res
.
userNeed
&&
res
.
userNeed
.
length
>
0
)
{
this
.
userNeedOptions
=
res
.
userNeed
;
}
if
(
res
.
needMsg
&&
res
.
needMsg
.
length
>
0
)
{
this
.
needMsgOptions
=
res
.
needMsg
;
}
if
(
res
.
processDes
&&
res
.
processDes
.
length
>
0
)
{
this
.
processDesOptions
=
res
.
processDes
;
}
});
},
//原因 卖家拒绝(1:买家要求退款金额过高2:买家举证无效,商品没问题3:买家未举证,商品没问题4:商品已超售后服务时限5:退回商品后才能退款6:过期未操作,7:其他)
actCauses
(
actCause
)
{
if
(
actCause
==
1
)
{
return
"买家要求退款金额过高"
}
else
if
(
actCause
==
2
)
{
return
"买家举证无效,商品没问题"
}
else
if
(
actCause
==
3
)
{
return
"买家未举证,商品没问题"
}
else
if
(
actCause
==
4
)
{
return
"商品已超售后服务时限"
}
else
if
(
actCause
==
5
)
{
return
"退回商品后才能退款"
}
else
if
(
actCause
==
6
)
{
return
"过期未操作"
}
else
if
(
actCause
==
7
)
{
return
"其他"
}
else
{
return
"未知"
}
},
//行为1:同意:2拒绝3:客服介入4:撤销 5:发送收货地址 6:同意收货 7:买家上传物流信息
act
(
act
)
{
if
(
act
==
1
)
{
return
"同意"
}
else
if
(
act
==
2
)
{
return
"拒绝"
}
else
if
(
act
==
3
)
{
return
"客服介入"
}
else
if
(
act
==
4
)
{
return
"撤销"
}
else
if
(
act
==
5
)
{
return
"发送收货地址"
}
else
if
(
act
==
6
)
{
return
"同意收货"
}
else
if
(
act
==
7
)
{
return
"买家上传物流信息"
}
else
{
return
"未知"
}
},
//角色 1:2:3:客服 4:系统
role
(
id
)
{
if
(
id
==
1
)
{
return
"商家操作"
}
else
if
(
id
==
2
)
{
return
"用户操作"
}
else
if
(
id
==
3
)
{
return
"客服操作"
}
else
if
(
id
==
4
)
{
return
"系统操作"
}
else
{
return
"未知"
}
},
// //获取地址后缀id
// getIndex(index) {
// index = index.slice(14);
// return index
// },
//商品状态 0:,1:,2:,3
goodsStatus
(
status
)
{
if
(
status
==
0
)
{
return
"待付款"
}
else
if
(
status
==
1
)
{
return
"待发货"
}
else
if
(
status
==
2
)
{
return
"待收货"
}
else
if
(
status
==
3
)
{
return
"已完成"
}
else
if
(
status
==
4
){
return
"已结算"
}
else
if
(
status
==
-
1
){
return
"订单取消"
}
},
userNeed
(
ids
)
{
//1::2:3:
if
(
ids
==
1
)
{
return
"仅退款"
}
else
if
(
ids
==
2
)
{
return
"退款退货"
}
else
if
(
ids
==
3
)
{
return
"换货"
}
else
{
return
"未知"
}
},
userMsg
(
typs
)
{
if
(
typs
==
1
)
{
return
"协商一致退款"
}
else
if
(
typs
==
2
)
{
return
"质量问题"
}
else
if
(
typs
==
3
)
{
return
"物流问题"
}
else
if
(
typs
==
4
)
{
return
"假冒品牌"
}
else
if
(
typs
==
5
)
{
return
"少件/漏发/破损/污渍"
}
else
if
(
typs
==
6
)
{
return
"7天无理由"
}
else
if
(
typs
==
7
)
{
return
"拍错/多拍/不想要"
}
else
{
return
"其他"
}
},
/** 查询售后申请信息列表 */
getList
()
{
listRetreat
(
this
.
queryParams
).
then
(
res
=>
{
if
(
res
.
data
)
{
this
.
retreatList
=
res
.
data
.
data
;
this
.
total
=
res
.
data
.
count
;
}
});
},
// 取消按钮
cancel
()
{
this
.
open
=
false
;
this
.
reset
();
},
// 表单重置
reset
()
{
this
.
form
=
{
"order"
:
[],
"retreat"
:
[]
};
this
.
resetForm
(
"form"
);
},
/** 搜索按钮操作 */
handleQuery
()
{
if
(
this
.
queryParams
.
applyTime
.
length
===
2
)
{
this
.
queryParams
.
beginTime
=
new
Date
(
this
.
queryParams
.
applyTime
[
0
]).
getTime
()
/
1000
;
this
.
queryParams
.
endTime
=
new
Date
(
this
.
queryParams
.
applyTime
[
1
]).
getTime
()
/
1000
;
}
this
.
queryParams
.
page
=
1
;
this
.
getList
();
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
resetForm
(
"queryForm"
);
this
.
queryParams
.
beginTime
=
''
;
this
.
queryParams
.
endTime
=
''
;
this
.
handleQuery
();
},
//同意申请并发货
handleAddress
()
{
this
.
orderInfo
=
false
this
.
reject
=
false
this
.
reback
=
true
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
ids
=
selection
.
map
(
item
=>
item
.
id
)
this
.
single
=
selection
.
length
!==
1
this
.
multiple
=
!
selection
.
length
},
handleRejectCancel
()
{
this
.
orderInfo
=
true
this
.
reject
=
false
},
handleRejectPre
()
{
this
.
orderInfo
=
false
this
.
reject
=
true
},
handleRebackCancel
()
{
this
.
reject
=
false
this
.
reback
=
false
this
.
orderInfo
=
true
},
},
//methods结束
};
</
script
>
<
style
scoped
lang=
"scss"
type=
"text/stylus"
>
/
deep
/
.queryFormInline
{
.el-form-item
{
margin-bottom
:
5px
;
}
}
/
deep
/
.after-sales-details
.el-dialog
{
height
:
80%
;
overflow
:
hidden
;
}
/
deep
/
.el-dialog__body
{
height
:calc
(
100
%
-
50px
)
;
overflow-y
:
scroll
;
}
.cells
{
line-height
:
32px
;
}
</
style
>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论