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
ef3eb9ab
Commit
ef3eb9ab
authored
Aug 22, 2025
by
zhuzhequan
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev' into dev
parents
da3010e2
51723d81
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
269 additions
and
21 deletions
+269
-21
src/api/podUsOrder.ts
+26
-0
src/router/menu.ts
+0
-5
src/types/api/podUsOrder.ts
+1
-0
src/views/order/podUs/index.vue
+242
-16
No files found.
src/api/podUsOrder.ts
View file @
ef3eb9ab
...
...
@@ -544,6 +544,25 @@ export function statusPushApi(params: (string | number)[]) {
)
}
// 转至已完成
export
function
changeToFinished
(
ids
:
string
)
{
return
axios
.
get
<
never
,
BaseRespData
<
never
>>
(
`factory/podJomallOrderUs/updateToComplete`
,
{
params
:
{
ids
}
},
)
}
// 转至已完成
export
function
updateTrackingNumberAndRegister
(
id
:
number
,
trackingNumber
:
string
,
)
{
return
axios
.
post
<
never
,
BaseRespData
<
never
>>
(
`factory/podJomallOrderUs/updateTrackingNumberAndRegister`
,
{
id
,
trackingNumber
},
)
}
// 完成发货
export
function
completeDeliveryApi
(
params
:
{
orderIdList
:
(
string
|
number
)[]
...
...
@@ -585,3 +604,10 @@ export function printProductionPdfByBatchNumberApi(params: {
},
)
}
// 待跟踪 注册列表统计接口
export
function
countTrackRegisterApi
()
{
return
axios
.
get
<
never
,
BaseRespData
<
never
>>
(
`factory/podJomallOrderUs/countTrackRegister`
,
)
}
src/router/menu.ts
View file @
ef3eb9ab
...
...
@@ -181,11 +181,6 @@ const menu: MenuItem[] = [
label
:
'下载生产客户端'
,
},
{
index
:
'/system/external-authorisation'
,
id
:
5
,
label
:
'外部授权'
,
},
{
index
:
'/system/customers'
,
id
:
6
,
label
:
'客户管理'
,
...
...
src/types/api/podUsOrder.ts
View file @
ef3eb9ab
...
...
@@ -35,6 +35,7 @@ export interface SearchForm {
craftCode
?:
string
thirdStockSku
?:
string
interceptStatus
?:
number
|
string
trackRegisterSelect
?:
string
|
number
}
export
interface
PodUsOrderListData
{
id
:
number
...
...
src/views/order/podUs/index.vue
View file @
ef3eb9ab
...
...
@@ -252,7 +252,7 @@
</ElFormItem>
<ElFormItem>
<span>
<ElButton
link
@
click=
"resetSearchForm"
style=
"font-size: 12px
"
<ElButton
link
style=
"font-size: 12px"
@
click=
"resetSearchForm
"
><span
title=
"重置查询条件"
>
重置
</span></ElButton
>
</span>
...
...
@@ -666,6 +666,12 @@
<ElButton
type=
"warning"
@
click=
"statusPush"
>
状态推送
</ElButton>
</span>
</ElFormItem>
<ElFormItem
v-if=
"['WAIT_TRACK'].includes(status)"
>
<span
class=
"item"
>
<ElButton
type=
"success"
@
click=
"setFinish"
>
转至已完成
</ElButton>
</span>
</ElFormItem>
<ElFormItem
v-if=
"status === 'COMPLETE'"
>
<span
class=
"item"
>
<ElButton
type=
"success"
@
click=
"exportData"
>
导出
</ElButton>
...
...
@@ -759,6 +765,58 @@
<span
class=
"sub-status-item-label"
>
待同步
</span>
</div>
</div>
<div
v-if=
"status === 'WAIT_TRACK'"
class=
"sub-status mb-10"
>
<div
class=
"sub-status-item"
:class=
"waitTrackStatus === 1 ? 'sub-active' : ''"
@
click=
"handleWaitTrackCommand(1)"
>
<span
class=
"sub-status-item-label"
>
注册失败
</span>
<span
class=
"tabs-node_count"
>
{{
trackRegisterCount[0]?.count || 0
}}
</span>
</div>
<div
class=
"sub-status-item"
:class=
"waitTrackStatus === 2 ? 'sub-active' : ''"
@
click=
"handleWaitTrackCommand(2)"
>
<span
class=
"sub-status-item-label"
>
未注册
</span>
<span
class=
"tabs-node_count blue"
>
{{
trackRegisterCount[1]?.count || 0
}}
</span>
</div>
<div
class=
"sub-status-item"
:class=
"waitTrackStatus === 3 ? 'sub-active' : ''"
@
click=
"handleWaitTrackCommand(3)"
>
<span
class=
"sub-status-item-label"
>
常规(
<
3天)
</span>
<span
class=
"tabs-node_count green"
>
{{
trackRegisterCount[2]?.count || 0
}}
</span>
</div>
<div
class=
"sub-status-item"
:class=
"waitTrackStatus === 4 ? 'sub-active' : ''"
@
click=
"handleWaitTrackCommand(4)"
>
<span
class=
"sub-status-item-label"
>
观察(2~3天)
</span>
<span
class=
"tabs-node_count yellow"
>
{{
trackRegisterCount[3]?.count || 0
}}
</span>
</div>
<div
class=
"sub-status-item"
:class=
"waitTrackStatus === 5 ? 'sub-active' : ''"
@
click=
"handleWaitTrackCommand(5)"
>
<span
class=
"sub-status-item-label"
>
重扫
&
补发(>3天)
</span>
<span
class=
"tabs-node_count red"
>
{{
trackRegisterCount[4]?.count || 0
}}
</span>
</div>
</div>
<div
v-if=
"status === 'INTERCEPTED'"
class=
"sub-status mb-10"
>
<div
class=
"sub-status-item"
...
...
@@ -870,7 +928,9 @@
"
placement=
"bottom"
>
<el-icon
color=
"#E6A23C"
><InfoFilled
/></el-icon>
<el-icon
color=
"#E6A23C"
>
<InfoFilled
/>
</el-icon>
</el-tooltip>
<span
class=
"serial-number"
>
{{
index
+
1
}}
</span>
</div>
...
...
@@ -1446,7 +1506,7 @@
<
/div
>
<
/template
>
<
template
#
failReason
=
"{ row
}
"
>
<
span
v
-
html
=
"row.failReason"
style
=
"white-space: pre-line
"
><
/span
>
<
span
style
=
"white-space: pre-line"
v
-
html
=
"row.failReason
"
><
/span
>
<
/template
>
<
template
#
operate
=
"{ row
}
"
>
<
div
...
...
@@ -1522,6 +1582,11 @@
<
/ElButton
>
<
/span
>
<
span
v
-
if
=
"['WAIT_TRACK'].includes(status)"
class
=
"operate-item"
>
<
ElButton
link
type
=
"warning"
@
click
=
"updateTrackingNumber(row)"
>
修改跟踪号
<
/ElButto
n
>
<
/span
>
<!--
<
span
v
-
if
=
"!row.expressSheet && row.status === 'TO_BE_CONFIRMED'"
class
=
"operate-item"
...
...
@@ -1592,6 +1657,11 @@
<
/span
>
<
/div
>
<
/template
>
<
template
#
trackRegisterFailContent
=
"{ row
}
"
>
<
div
style
=
"white-space: pre-line"
>
{{
JSON
.
parse
(
row
.
trackRegisterFailContent
)?.
error
||
''
}}
<
/div
>
<
/template
>
<
/TableView
>
<
/div
>
<
div
...
...
@@ -1630,7 +1700,9 @@
"
placement
=
"bottom"
>
<
el
-
icon
color
=
"#E6A23C"
><
InfoFilled
/><
/el-icon
>
<
el
-
icon
color
=
"#E6A23C"
>
<
InfoFilled
/>
<
/el-icon
>
<
/el-tooltip
>
<
/template
>
<
template
...
...
@@ -1668,8 +1740,8 @@
<
/div
>
<
Icon
name
=
"caozuorizhi"
@
click
=
"(e: MouseEvent) => operationLog(cardItem.podJomallOrderUsId, e)"
style
=
"width: 28px; height: 28px"
@
click
=
"(e: MouseEvent) => operationLog(cardItem.podJomallOrderUsId, e)"
>
<
template
#
title
>
<
title
>
操作日志
<
/title
>
...
...
@@ -1993,24 +2065,24 @@
link
style
=
"margin-left: 10px"
@
click
=
"changeChinaTime('Asia/Shanghai')"
>
北京时间
<
/el-butto
n
>
>
北京时间
<
/el-button
>
<
el
-
button
:
type
=
"timeType === 'America/New_York' ? 'primary' : ''"
size
=
"small"
link
style
=
"margin-left: 10px"
@
click
=
"changeChinaTime('America/New_York')"
>
新泽西时间
<
/el-butto
n
>
>
新泽西时间
<
/el-button
>
<
el
-
button
:
type
=
"timeType === 'America/Los_Angeles' ? 'primary' : ''"
size
=
"small"
link
style
=
"margin-left: 10px"
@
click
=
"changeChinaTime('America/Los_Angeles')"
>
洛杉矶时间
<
/el-butto
n
>
>
洛杉矶时间
<
/el-button
>
<
/div
>
<
/div
>
<
/template
>
...
...
@@ -2029,7 +2101,7 @@
:
print
-
order
=
"printOrder"
:
warehouse
-
list
=
"warehouseList"
@
set
-
printer
=
"handlePrinterChange"
@
set
-
warehouse
I
d
=
"handleWarehouseIdChange"
@
set
-
warehouse
-
i
d
=
"handleWarehouseIdChange"
@
refresh
=
"onFastRefresh"
/>
<
InspPackagOrder
...
...
@@ -2294,7 +2366,7 @@
<
el
-
dialog
v
-
model
=
"dialogVisible"
width
=
"35%"
>
<
img
:
src
=
"dialogImageUrl"
alt
=
"商品预览图片"
/>
<
/el-dialog
>
<
el
-
dialog
title
=
"物流轨迹"
v
-
model
=
"timeLineVisible
"
width
=
"1000px"
>
<
el
-
dialog
v
-
model
=
"timeLineVisible"
title
=
"物流轨迹
"
width
=
"1000px"
>
<
el
-
timeline
>
<
el
-
timeline
-
item
v
-
for
=
"(item, index) in timeLine"
...
...
@@ -2380,6 +2452,9 @@ import {
getAccountCodeByFactoryIdApi
,
printPickPdfByBatchNumberApi
,
printProductionPdfByBatchNumberApi
,
changeToFinished
,
updateTrackingNumberAndRegister
,
countTrackRegisterApi
,
}
from
'@/api/podUsOrder'
import
{
BaseRespData
}
from
'@/types/api'
...
...
@@ -2423,12 +2498,14 @@ import { isArray, isString } from '@/utils/validate'
import
platformJson
from
'../../../json/platform.json'
import
{
getToken
}
from
'@/api/axios'
import
usePermissionBtnStore
from
'@/store/permission'
const
permissionBtns
=
usePermissionBtnStore
()
import
{
useRouter
,
type
NavigationGuardNext
,
type
RouteLocationNormalized
,
}
from
'vue-router'
declare
global
{
interface
Window
{
ActiveXObject
:
{
...
...
@@ -2463,6 +2540,34 @@ const exportForm = ref({
resource
:
''
,
}
)
// 修改物流跟踪号
const
updateTrackingNumber
=
async
(
row
:
PodUsOrderListData
)
=>
{
const
{
value
}
=
await
ElMessageBox
.
prompt
(
'请输入物流跟踪号'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
inputPattern
:
/.+/
,
inputErrorMessage
:
'请输入物流跟踪号'
,
inputPlaceholder
:
'物流跟踪号'
,
inputValue
:
row
.
trackingNumber
,
}
)
const
loading
=
ElLoading
.
service
({
fullscreen
:
true
,
text
:
'操作中...'
,
background
:
'rgba(0, 0, 0, 0.3)'
,
}
)
try
{
const
res
=
await
updateTrackingNumberAndRegister
(
row
.
id
,
value
)
if
(
res
.
code
!==
200
)
return
ElMessage
.
success
(
'操作成功'
)
search
()
await
loadTabData
()
}
catch
(
e
)
{
console
.
error
(
e
)
}
finally
{
loading
.
close
()
}
}
const
exportData
=
()
=>
{
exportVisible
.
value
=
true
}
...
...
@@ -2566,6 +2671,14 @@ const [searchForm, resetSearchForm] = useValue<SearchForm>({
const
exceptionStatus
=
ref
(
1
)
const
interceptCurrent
=
ref
(
1
)
const
interceptStatus
=
ref
(
0
)
const
waitTrackStatus
=
ref
(
1
)
const
trackRegisterCount
=
ref
<
{
count
:
number
trackRegisterSelect
:
number
name
:
string
}
[]
>
([])
const
userMarkList
=
ref
<
string
[]
>
([])
const
selection
=
ref
<
PodUsOrderListData
[]
>
([])
const
currentItem
=
ref
<
PodUsOrderListData
|
null
>
(
null
)
...
...
@@ -2800,8 +2913,9 @@ const handleReComposingDesign = async (row: PodUsOrderListData) => {
}
}
const
tableColumns
=
computed
(()
=>
{
let
arr
=
[]
if
(
status
.
value
===
'BATCH_DOWNLOAD'
)
{
return
[
arr
=
[
{
label
:
'批次号'
,
prop
:
'batchArrangeNum'
,
...
...
@@ -2870,8 +2984,9 @@ const tableColumns = computed(() => {
prop
:
'operate'
,
}
,
]
return
arr
}
return
[
arr
=
[
{
label
:
'序号'
,
prop
:
'serialNumber'
,
...
...
@@ -2919,14 +3034,58 @@ const tableColumns = computed(() => {
align
:
'left'
,
}
,
{
label
:
'物流跟踪状态'
,
width
:
220
,
prop
:
'track17Status'
,
align
:
'left'
,
}
,
{
label
:
'注册失败信息'
,
width
:
220
,
prop
:
'trackRegisterFailContent'
,
slot
:
'trackRegisterFailContent'
,
align
:
'left'
,
}
,
{
label
:
'操作'
,
slot
:
'operate'
,
width
:
8
0
,
width
:
12
0
,
align
:
'center'
,
fixed
:
'right'
,
prop
:
'operate'
,
}
,
]
// 根据状态动态调整列显示
if
(
!
[
'WAIT_TRACK'
].
includes
(
status
.
value
))
{
const
trackRegisterIndex
=
arr
.
findIndex
(
(
item
)
=>
item
.
prop
===
'trackRegisterFailContent'
,
)
if
(
trackRegisterIndex
>=
0
)
{
arr
.
splice
(
trackRegisterIndex
,
1
)
}
const
track17Index
=
arr
.
findIndex
((
item
)
=>
item
.
prop
===
'track17Status'
)
if
(
track17Index
>=
0
)
{
arr
.
splice
(
track17Index
,
1
)
}
}
else
{
if
(
waitTrackStatus
.
value
!==
1
)
{
const
trackRegisterIndex
=
arr
.
findIndex
(
(
item
)
=>
item
.
prop
===
'trackRegisterFailContent'
,
)
if
(
trackRegisterIndex
>=
0
)
{
arr
.
splice
(
trackRegisterIndex
,
1
)
}
}
}
if
(
!
[
'WAIT_TRACK'
,
'IN_TRANSIT'
].
includes
(
status
.
value
))
{
const
index
=
arr
.
findIndex
((
item
)
=>
item
.
prop
===
'track17Status'
)
if
(
index
>=
0
)
{
arr
.
splice
(
index
,
1
)
}
}
return
arr
}
)
const
rightMenuRef
=
ref
()
const
rightClick
=
(
e
:
MouseEvent
)
=>
{
...
...
@@ -3018,6 +3177,10 @@ const loadTabData = async () => {
try
{
const
res
=
await
getOrderTabData
()
tabsNav
.
value
=
res
.
data
if
(
status
.
value
===
'WAIT_TRACK'
)
{
const
res
=
await
countTrackRegisterApi
()
trackRegisterCount
.
value
=
res
.
data
}
// 获取拦截数量
const
statusRes
=
await
getgetInterceptStateGroupList
()
...
...
@@ -3106,6 +3269,8 @@ const {
:
undefined
,
interceptStatus
:
status
.
value
===
'INTERCEPTED'
?
interceptStatus
.
value
:
''
,
trackRegisterSelect
:
status
.
value
===
'WAIT_TRACK'
?
waitTrackStatus
.
value
:
''
,
}
,
page
,
pageSize
,
...
...
@@ -3924,11 +4089,13 @@ const arrangeFinish = async () => {
loading
.
close
()
}
}
interface
timeLineType
{
time_iso
?:
string
time_utc
?:
string
description
?:
string
}
const
timeLineVisible
=
ref
(
false
)
const
timeLine
=
ref
<
timeLineType
[]
>
([])
const
logTrajectory
=
async
(
row
:
{
id
:
string
}
)
=>
{
...
...
@@ -4723,6 +4890,7 @@ const logisticsSubmit = () => {
}
)
}
// 异常单分页
const
handleExceptionCommand
=
(
command
:
number
)
=>
{
exceptionStatus
.
value
=
command
search
()
...
...
@@ -4735,6 +4903,13 @@ const handleInterceptionCommand = (current: number, command: number) => {
loadTabData
()
}
// 待跟踪分页
const
handleWaitTrackCommand
=
(
command
:
number
)
=>
{
waitTrackStatus
.
value
=
command
search
()
loadTabData
()
}
const
applyForReplenishment
=
async
(
row
:
ProductList
|
undefined
)
=>
{
if
(
!
row
)
{
if
(
cardSelection
.
value
.
length
===
0
)
{
...
...
@@ -4998,6 +5173,36 @@ const statusPush = async () => {
}
}
// 转至已完成
const
setFinish
=
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
changeToFinished
(
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
completeDelivery
=
async
()
=>
{
if
(
selection
.
value
.
length
===
0
)
{
...
...
@@ -5052,6 +5257,7 @@ const completeDelivery = async () => {
const
tempChinaLogs
=
ref
<
LogListData
[]
>
([])
const
timeType
=
ref
<
string
>
(
'Asia/Shanghai'
)
function
changeChinaTime
(
zone
:
string
)
{
timeType
.
value
=
zone
logList
.
value
=
tempChinaLogs
.
value
.
map
((
el
)
=>
{
...
...
@@ -5064,11 +5270,13 @@ function changeChinaTime(zone: string) {
}
const
token
=
getToken
()
as
string
async
function
getPermission
()
{
const
res
=
await
getAccountCodeByFactoryIdApi
({
token
}
)
permissionBtns
.
setBtn
(
res
.
data
)
console
.
log
(
res
)
}
getPermission
()
const
globalProperties
=
getCurrentInstance
()?.
appContext
.
config
.
globalProperties
// 获取全局挂载
...
...
@@ -5134,6 +5342,7 @@ useRouter().beforeEach((to, from, next) => {
// width: 100px;
// height: 65px;
position
:
relative
;
img
{
width
:
65
%
;
}
...
...
@@ -5205,6 +5414,15 @@ useRouter().beforeEach((to, from, next) => {
color
:
rgb
(
153
27
27
);
}
.
tabs
-
node_count
.
green
{
background
:
rgb
(
223
240
216
);
color
:
rgb
(
39
174
96
);
}
.
tabs
-
node_count
.
yellow
{
background
:
rgb
(
255
243
205
);
color
:
rgb
(
91
,
99
,
18
);
}
.
empty
{
height
:
100
%
;
display
:
flex
;
...
...
@@ -5240,6 +5458,7 @@ useRouter().beforeEach((to, from, next) => {
display
:
flex
;
overflow
:
hidden
;
width
:
100
%
;
.
grid
-
item
-
value
{
display
:
flex
;
flex
:
1
;
...
...
@@ -5367,6 +5586,7 @@ useRouter().beforeEach((to, from, next) => {
font
-
size
:
15
px
;
}
}
.
orderNumber
{
white
-
space
:
nowrap
;
overflow
:
hidden
;
...
...
@@ -5374,6 +5594,7 @@ useRouter().beforeEach((to, from, next) => {
flex
:
1
;
min
-
width
:
0
;
/* 关键属性 */
}
.
customizedQuantity
{
height
:
28
px
;
width
:
28
px
;
...
...
@@ -5387,6 +5608,7 @@ useRouter().beforeEach((to, from, next) => {
font
-
weight
:
700
;
box
-
sizing
:
border
-
box
;
}
.
triangle
-
box
{
position
:
absolute
;
top
:
0
;
...
...
@@ -5413,6 +5635,7 @@ useRouter().beforeEach((to, from, next) => {
flex
-
wrap
:
wrap
;
}
}
.
el
-
dropdown
-
link
{
cursor
:
pointer
;
color
:
var
(
--
el
-
color
-
success
);
...
...
@@ -5420,15 +5643,18 @@ useRouter().beforeEach((to, from, next) => {
align
-
items
:
center
;
outline
:
none
;
}
.
el
-
timeline
-
item__wrapper
{
padding
-
left
:
15
px
;
top
:
-
4
px
;
}
.
el
-
timeline
>
.
el
-
timeline
-
item
:
first
-
child
.
el
-
timeline
-
item__timestamp
.
is
-
top
{
color
:
#
409
eff
;
}
.
flex
-
between
{
display
:
flex
;
justify
-
content
:
space
-
between
;
...
...
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