Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
factory_front
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
qinjianhui
factory_front
Commits
1b517a57
Commit
1b517a57
authored
Nov 27, 2025
by
zhuzhequan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat:podus订单补发逻辑优化
parent
9deae37e
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
237 additions
and
60 deletions
+237
-60
src/api/podUsOrder.ts
+8
-3
src/views/order/podUs/components/ReissueOrder.vue
+211
-0
src/views/order/podUs/index.vue
+18
-57
No files found.
src/api/podUsOrder.ts
View file @
1b517a57
...
...
@@ -573,10 +573,15 @@ export function changeToFinished(ids: string) {
)
}
export
function
reissueOrderApi
(
ids
:
string
)
{
return
axios
.
get
<
never
,
BaseRespData
<
never
>>
(
export
function
reissueOrderApi
(
data
:
{
ids
:
string
reissueType
:
number
trackingNumber
?:
string
expressSheet
:
string
})
{
return
axios
.
post
<
never
,
BaseRespData
<
never
>>
(
`factory/podJomallOrderUs/reissueOrder`
,
{
params
:
{
ids
}
}
,
data
,
)
}
export
function
OrderCnReceiverAddress
(
idList
:
number
[])
{
...
...
src/views/order/podUs/components/ReissueOrder.vue
0 → 100644
View file @
1b517a57
<
script
setup
lang=
"ts"
>
import
{
ref
}
from
'vue'
import
{
Plus
,
Close
}
from
'@element-plus/icons-vue'
import
{
reissueOrderApi
,
uploadExpressSheet
}
from
'@/api/podUsOrder.ts'
import
{
PodUsOrderListData
}
from
'@/types/api/podUsOrder.ts'
const
dialogShow
=
ref
(
false
)
const
formRef
=
ref
()
const
open
=
()
=>
{
form
.
value
=
{
reissueType
:
1
,
trackingNumber
:
''
,
expressSheet
:
''
,
file
:
null
,
}
dialogShow
.
value
=
true
}
const
emit
=
defineEmits
([
'success'
])
const
props
=
defineProps
({
selection
:
{
type
:
Array
,
default
:
()
=>
[],
},
})
const
formRules
=
{
reissueType
:
{
required
:
true
,
message
:
'请选择补发方式'
,
trigger
:
'change'
,
},
trackingNumber
:
{
required
:
true
,
message
:
'请输入跟踪号'
,
trigger
:
'blur'
,
},
file
:
{
required
:
true
,
message
:
'请上传物流面单'
,
trigger
:
'change'
,
},
}
interface
Iform
{
reissueType
:
number
trackingNumber
:
string
expressSheet
:
string
file
:
File
|
null
}
const
form
=
ref
<
Iform
>
({
reissueType
:
1
,
trackingNumber
:
''
,
expressSheet
:
''
,
file
:
null
,
})
defineExpose
({
open
})
const
submit
=
async
()
=>
{
await
formRef
.
value
.
validate
()
if
((
props
.
selection
as
PodUsOrderListData
[])[
0
].
shipmentType
===
0
&&
form
.
value
.
reissueType
!==
1
){
if
(
!
form
.
value
.
expressSheet
){
return
ElMessage
.
warning
(
'请上传物流面单'
)
}
}
await
reissueOrderApi
({
ids
:
(
props
.
selection
as
PodUsOrderListData
[]).
map
(
e
=>
e
.
id
).
join
(),
reissueType
:
form
.
value
.
reissueType
,
trackingNumber
:
form
.
value
.
trackingNumber
,
expressSheet
:
form
.
value
.
expressSheet
,
})
ElMessage
.
success
(
'操作成功'
)
dialogShow
.
value
=
false
emit
(
'success'
)
}
const
radioChange
=
()
=>
{
form
.
value
.
trackingNumber
=
''
form
.
value
.
expressSheet
=
''
form
.
value
.
file
=
null
}
const
clearFile
=
()
=>
{
form
.
value
.
file
=
null
form
.
value
.
expressSheet
=
''
}
const
createFormToUpload
=
()
=>
{
const
input
=
document
.
createElement
(
'input'
)
input
.
type
=
'file'
input
.
style
.
display
=
'none'
input
.
accept
=
'.pdf'
input
.
name
=
'file'
document
.
body
.
appendChild
(
input
)
input
.
click
()
input
.
onchange
=
async
function
()
{
console
.
log
(
input
.
files
)
if
(
input
.
files
?.
length
!==
1
)
{
return
ElMessage
.
warning
(
'请上传一个面单'
)
}
form
.
value
.
file
=
input
.
files
[
0
]
const
fm
=
new
FormData
()
fm
.
append
(
'file'
,
input
.
files
[
0
])
fm
.
append
(
'trackingNumber'
,
form
.
value
.
trackingNumber
)
const
res
=
await
uploadExpressSheet
(
fm
as
never
)
form
.
value
.
expressSheet
=
res
.
message
||
''
}
}
</
script
>
<
template
>
<el-dialog
v-model=
"dialogShow"
title=
"补发"
:close-on-click-modal=
"false"
>
<el-form
v-if=
"selection.length"
ref=
"formRef"
:rules=
"formRules"
:model=
"form"
>
<el-form-item
required
label=
"补发方式"
prop=
"reissueType"
>
<el-radio-group
v-model=
"form.reissueType"
style=
"display: flex;flex-direction: column;align-items: flex-start;"
@
change=
"radioChange"
>
<el-radio
:label=
"1"
>
原单补发
</el-radio>
<el-radio
:disabled=
"(selection as PodUsOrderListData[])[0].shipmentType===0 && selection.length>1"
:label=
"2"
>
换单补发,取消原单物流
</el-radio>
<el-radio
:disabled=
"(selection as PodUsOrderListData[])[0].shipmentType===0 && selection.length>1"
:label=
"3"
>
换单补发,不取消原单物流
</el-radio>
</el-radio-group>
</el-form-item>
<span
v-if=
"(selection as PodUsOrderListData[])[0].shipmentType===0 && selection.length>1"
class=
"tip"
>
自有物流选择选项2和选项3请单个操作,不支持批量操作;
</span>
<el-form-item
v-if=
"(selection as PodUsOrderListData[])[0].shipmentType===0 && form.reissueType!==1"
required
label=
"物流信息"
prop=
"trackingNumber"
>
<div
class=
"form-content"
>
<div
class=
"content-item"
>
<div
class=
"label"
>
跟踪号
</div>
<el-input
v-model=
"form.trackingNumber"
style=
"height: 40px"
placeholder=
"请输入跟踪号"
></el-input>
</div>
<div
v-if=
"form.trackingNumber"
class=
"content-item"
>
<div
class=
"label"
>
物流面单
</div>
<div
class=
"upload"
@
click=
"createFormToUpload"
>
<el-icon>
<Plus></Plus>
</el-icon>
</div>
<div
v-if=
"form.file"
class=
"file"
>
<div
class=
"name"
>
{{
form
.
file
.
name
}}
</div>
<div
class=
"close"
@
click=
"clearFile"
>
<el-icon>
<Close></Close>
</el-icon>
</div>
</div>
</div>
</div>
</el-form-item>
<el-form-item
v-if=
"(selection as PodUsOrderListData[])[0].shipmentType===0 && form.reissueType!==1"
>
<div
class=
"tip-2"
>
自有物流请联系客户提供新跟踪号和面单
</div>
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"dialogShow=false"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"submit"
>
确定
</el-button>
</
template
>
</el-dialog>
</template>
<
style
scoped
lang=
"scss"
>
.tip
{
color
:
red
;
position
:
relative
;
top
:
-14px
;
left
:
79px
;
}
.form-content
,
.content-item
{
display
:
flex
;
margin-right
:
25px
;
.upload
{
border
:
1px
darkgray
solid
;
width
:
50px
;
cursor
:
pointer
;
height
:
50px
;
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
border-radius
:
3px
;
}
.file
{
display
:
flex
;
margin-left
:
25px
;
align-items
:
center
;
gap
:
6px
;
.close
{
cursor
:
pointer
;
color
:
red
;
}
}
.label
{
width
:
70px
;
}
}
.tip-2
{
color
:
red
;
margin-left
:
13px
;
position
:
relative
;
top
:
-9px
;
}
</
style
>
src/views/order/podUs/index.vue
View file @
1b517a57
...
...
@@ -875,39 +875,6 @@
}}
</span
>
</div>
<!-- <div
v-if="item.status === 'EXCEPTION_ORDER'"
:key="item.status"
class="tabs-node"
>
<el-dropdown @command="handleExceptionCommand">
<div>
<span
class="tabs-node_label"
style="color: #000; font-weight: 500"
>
异常单
</span>
<span
class="tabs-node_count"
:class="{
blue: item.quantity && item.quantity > 0,
red: item.status === 'EXCEPTION_ORDER',
}"
>{{ item.quantity }}</span
>
<el-icon class="el-icon--right"><arrow-down /></el-icon>
</div>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item command="1">待分派</el-dropdown-item>
<el-dropdown-item command="2">待处理</el-dropdown-item>
<el-dropdown-item command="3">已处理</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div> -->
</div>
</div>
<div
class=
"order-content flex-1 flex-column overflow-hidden mt-10"
>
...
...
@@ -1575,13 +1542,14 @@
</div>
<div
class=
"order-detail-item"
>
<span
class=
"order-detail-item-label"
>
订单来源:
</span>
<span
class=
"order-detail-item-value"
>
<span
:class=
"
{'red-big':row.source==='factory-reissue'}"
class="order-detail-item-value">
{{
row
.
source
?
{
'jomall-erp'
:
'erp推送'
,
'third-party'
:
'第三方推送'
,
}
[
row
.
source
as
'jomall-erp'
|
'third-party'
]
'factory-reissue'
:
'补发订单'
,
}
[
row
.
source
as
'jomall-erp'
|
'third-party'
|
'factory-reissue'
]
:
''
}}
<
/span
>
...
...
@@ -2922,6 +2890,7 @@
<
ElButton
type
=
"primary"
@
click
=
"confirmReplenishment"
>
确定
<
/ElButton
>
<
/template
>
<
/ElDialog
>
<
ReissueOrderComponent
ref
=
"reissueOrderRef"
:
selection
=
"selection"
@
success
=
"handleSuccess"
><
/ReissueOrderComponent
>
<
/template
>
<
script
setup
lang
=
"ts"
>
import
LogisticsWaySelect
from
'../../logistics/components/LogisticsWaySelect.tsx'
...
...
@@ -3052,8 +3021,10 @@ import { isArray, isString } from '@/utils/validate'
import
platformJson
from
'../../../json/platform.json'
import
{
getToken
}
from
'@/api/axios'
import
usePermissionBtnStore
from
'@/store/permission'
import
ReissueOrderComponent
from
'./components/ReissueOrder.vue'
const
permissionBtns
=
usePermissionBtnStore
()
import
{
useRouter
,
type
NavigationGuardNext
,
...
...
@@ -3083,10 +3054,14 @@ const sourceList = [
{
name
:
'第三方推送'
,
id
:
'third-party'
,
}
,{
name
:
'补发订单'
,
id
:
'factory-reissue'
,
}
,
]
const
sizes
=
[
'FS'
,
'XS'
,
'S'
,
'M'
,
'L'
,
'XL'
,
'XXL'
,
'3XL'
,
'4XL'
,
'5XL'
]
const
tabsNav
=
ref
<
Tab
[]
>
()
const
reissueOrderRef
=
ref
()
const
isAuto
=
ref
(
true
)
const
countryList
=
ref
([])
const
logisticsWayList
=
ref
<
{
name
:
string
;
id
:
number
}
[]
>
([])
...
...
@@ -6351,29 +6326,11 @@ const reissueOrder = async () => {
if
(
selection
.
value
.
length
===
0
)
{
return
ElMessage
.
warning
(
'请选择数据'
)
}
await
ElMessageBox
.
confirm
(
'是否补发?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
,
}
)
const
loading
=
ElLoading
.
service
({
fullscreen
:
true
,
text
:
'操作中...'
,
background
:
'rgba(0, 0, 0, 0.3)'
,
}
)
try
{
const
res
=
await
reissueOrderApi
(
selection
.
value
.
map
((
item
)
=>
item
.
id
).
join
(
','
),
)
if
(
res
.
code
!==
200
)
return
ElMessage
.
success
(
'操作成功'
)
search
()
await
loadTabData
()
}
catch
(
e
)
{
console
.
error
(
e
)
}
finally
{
loading
.
close
()
const
isSameShipmentType
=
Array
.
from
(
new
Set
(
selection
.
value
.
map
(
s
=>
s
.
shipmentType
))).
length
===
1
if
(
!
isSameShipmentType
){
return
ElMessage
.
warning
(
'请选择相同物流类型的数据'
)
}
reissueOrderRef
.
value
.
open
()
}
// 完成发货
...
...
@@ -6964,4 +6921,8 @@ const printNormal = async () => {
text
-
overflow
:
ellipsis
;
white
-
space
:
nowrap
;
}
.
red
-
big
{
font
-
size
:
15
px
;
color
:
red
;
}
<
/style
>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment