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
bedbfc7e
Commit
bedbfc7e
authored
Jul 02, 2026
by
qinjianhui
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev' into 'master'
Dev See merge request
!249
parents
836bb7d8
e5ce782f
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
133 additions
and
17 deletions
+133
-17
src/api/axios.ts
+20
-8
src/api/podUsOrder.ts
+1
-0
src/types/axios.d.ts
+11
-0
src/views/order/factoryOrderNew/hooks/useOrderListAndDetail.ts
+48
-5
src/views/order/factoryOrderNew/index.vue
+23
-3
src/views/order/factoryOrderNew/utils/listSearchQueryFilter.ts
+10
-1
src/views/order/podUs/PodMakeOrder.vue
+20
-0
No files found.
src/api/axios.ts
View file @
bedbfc7e
...
@@ -37,7 +37,7 @@ axios.interceptors.request.use(
...
@@ -37,7 +37,7 @@ axios.interceptors.request.use(
url
:
config
.
url
||
''
,
url
:
config
.
url
||
''
,
method
:
config
.
method
||
''
,
method
:
config
.
method
||
''
,
startTime
:
dayjs
(
new
Date
()).
format
(
'YYYY-MM-DD HH:mm:ss.SSS'
),
startTime
:
dayjs
(
new
Date
()).
format
(
'YYYY-MM-DD HH:mm:ss.SSS'
),
uuid
:
config
.
headers
.
uuid
uuid
:
config
.
headers
.
uuid
,
})
})
return
config
return
config
},
},
...
@@ -51,31 +51,39 @@ axios.interceptors.response.use(
...
@@ -51,31 +51,39 @@ axios.interceptors.response.use(
const
data
=
response
.
data
const
data
=
response
.
data
const
uuid
=
response
.
config
?.
headers
?.
uuid
const
uuid
=
response
.
config
?.
headers
?.
uuid
const
item
=
findRequestItemByUUID
(
uuid
)
const
item
=
findRequestItemByUUID
(
uuid
)
if
(
response
.
config
.
url
)
{
if
(
response
.
config
.
url
)
{
if
(
response
.
config
.
url
.
startsWith
(
'/'
))
{
if
(
response
.
config
.
url
.
startsWith
(
'/'
))
{
item
.
url
=
`
${
import
.
meta
.
env
.
VITE_API_BASE
}${
response
.
config
.
url
}
`
item
.
url
=
`
${
import
.
meta
.
env
.
VITE_API_BASE
}${
response
.
config
.
url
}
`
}
else
{
}
else
{
item
.
url
=
`
${
import
.
meta
.
env
.
VITE_API_BASE
}${
`/
${
response
.
config
.
url
}
`
}
`
item
.
url
=
`
${
import
.
meta
.
env
.
VITE_API_BASE
}${
`/
${
response
.
config
.
url
}
`
}
`
}
}
}
}
const
fm
=
new
FormData
()
const
fm
=
new
FormData
()
const
processTime
=
response
.
headers
[
'processtime'
]
const
processTime
=
response
.
headers
[
'processtime'
]
const
endTime
=
dayjs
(
new
Date
()).
format
(
'YYYY-MM-DD HH:mm:ss.SSS'
)
const
endTime
=
dayjs
(
new
Date
()).
format
(
'YYYY-MM-DD HH:mm:ss.SSS'
)
const
clientResponseTime
=
getTimeDifferenceInMilliseconds
(
item
.
startTime
,
endTime
)
const
clientResponseTime
=
getTimeDifferenceInMilliseconds
(
item
.
startTime
,
endTime
,
)
console
.
log
(
item
)
console
.
log
(
item
)
if
((
clientResponseTime
as
number
)
>=
3000
)
{
if
((
clientResponseTime
as
number
)
>=
3000
)
{
const
user
=
localStorage
.
getItem
(
'user'
)
const
user
=
localStorage
.
getItem
(
'user'
)
if
(
user
)
{
if
(
user
)
{
const
userJson
:
UserJson
=
JSON
.
parse
(
user
)
const
userJson
:
UserJson
=
JSON
.
parse
(
user
)
fm
.
append
(
'factoryCode'
,
userJson
?.
factoryCode
)
fm
.
append
(
'factoryCode'
,
userJson
?.
factoryCode
)
}
}
fm
.
append
(
'processTime'
,
processTime
)
fm
.
append
(
'processTime'
,
processTime
)
fm
.
append
(
'url'
,
item
.
url
)
fm
.
append
(
'url'
,
item
.
url
)
fm
.
append
(
'method'
,
item
.
method
)
fm
.
append
(
'method'
,
item
.
method
)
fm
.
append
(
'requestId'
,
response
.
data
.
requestId
)
fm
.
append
(
'requestId'
,
response
.
data
.
requestId
)
fm
.
append
(
'clientResponseTime'
,
String
(
clientResponseTime
)
+
'ms'
)
fm
.
append
(
'clientResponseTime'
,
String
(
clientResponseTime
)
+
'ms'
)
navigator
.
sendBeacon
(
`
${
import
.
meta
.
env
.
VITE_API_BASE
}
/factory/ops/report-data`
,
fm
)
navigator
.
sendBeacon
(
`
${
import
.
meta
.
env
.
VITE_API_BASE
}
/factory/ops/report-data`
,
fm
,
)
}
}
deleteRequestByUUID
(
uuid
)
deleteRequestByUUID
(
uuid
)
if
(
data
&&
typeof
data
===
'object'
&&
typeof
data
.
code
===
'number'
)
{
if
(
data
&&
typeof
data
===
'object'
&&
typeof
data
.
code
===
'number'
)
{
...
@@ -85,14 +93,18 @@ axios.interceptors.response.use(
...
@@ -85,14 +93,18 @@ axios.interceptors.response.use(
return
Promise
.
reject
(
data
)
return
Promise
.
reject
(
data
)
}
}
if
(
data
.
code
!==
200
)
{
if
(
data
.
code
!==
200
)
{
if
(
!
response
.
config
.
skipGlobalError
)
{
showError
(
data
.
message
)
showError
(
data
.
message
)
}
return
Promise
.
reject
(
data
)
return
Promise
.
reject
(
data
)
}
}
}
}
return
data
return
data
},
},
(
error
)
=>
{
(
error
)
=>
{
if
(
!
error
.
config
?.
skipGlobalError
)
{
showError
(
error
.
message
)
showError
(
error
.
message
)
}
return
Promise
.
reject
(
error
)
return
Promise
.
reject
(
error
)
},
},
)
)
...
...
src/api/podUsOrder.ts
View file @
bedbfc7e
...
@@ -274,6 +274,7 @@ export function getPackingDataApi(
...
@@ -274,6 +274,7 @@ export function getPackingDataApi(
)
{
)
{
return
axios
.
get
<
never
,
BaseRespData
<
PodMakeOrderData
>>
(
url
,
{
return
axios
.
get
<
never
,
BaseRespData
<
PodMakeOrderData
>>
(
url
,
{
params
,
params
,
skipGlobalError
:
true
,
})
})
}
}
export
function
getPodBoxListApi
(
export
function
getPodBoxListApi
(
...
...
src/types/axios.d.ts
0 → 100644
View file @
bedbfc7e
import
'axios'
declare
module
'axios'
{
export
interface
AxiosRequestConfig
{
/** 为 true 时跳过全局响应拦截器的默认错误提示,由调用方自行处理 */
skipGlobalError
?:
boolean
}
export
interface
InternalAxiosRequestConfig
{
skipGlobalError
?:
boolean
}
}
src/views/order/factoryOrderNew/hooks/useOrderListAndDetail.ts
View file @
bedbfc7e
...
@@ -15,6 +15,39 @@ import type {
...
@@ -15,6 +15,39 @@ import type {
operateOrderListData
,
operateOrderListData
,
}
from
'@/types/api/order/factoryOrderNew'
}
from
'@/types/api/order/factoryOrderNew'
const
CREATE_TIME_LIST_SORT_PROP
=
'po.create_time'
/** 创建时间升序 */
const
CREATE_TIME_SORT_ASC_STATUSES
=
new
Set
([
'PENDING_RECEIVE'
,
'PENDING_CREATE_LOGISTICS'
,
'PENDING_SCHEDULE'
,
'PENDING_DELIVERY'
,
'SUSPEND'
,
])
/** 创建时间降序 */
const
CREATE_TIME_SORT_DESC_STATUSES
=
new
Set
([
'ALL'
,
'PICKING'
,
'COMPLETED'
,
'CANCELLED'
,
'ARCHIVE'
,
])
// 构建默认时间排序参数
export
function
getDefaultCreateTimeSortParams
(
treeStatus
:
string
,
):
{
prop
:
string
;
order
:
'asc'
|
'desc'
}
|
null
{
if
(
CREATE_TIME_SORT_ASC_STATUSES
.
has
(
treeStatus
))
{
return
{
prop
:
CREATE_TIME_LIST_SORT_PROP
,
order
:
'asc'
}
}
if
(
CREATE_TIME_SORT_DESC_STATUSES
.
has
(
treeStatus
))
{
return
{
prop
:
CREATE_TIME_LIST_SORT_PROP
,
order
:
'desc'
}
}
return
null
}
interface
UseOrderListAndDetailOptions
{
interface
UseOrderListAndDetailOptions
{
status
:
Ref
<
string
>
status
:
Ref
<
string
>
// 查询的状态树,与左侧状态树参数不同,用于挂起状态下suspendReason参数的修改
// 查询的状态树,与左侧状态树参数不同,用于挂起状态下suspendReason参数的修改
...
@@ -53,6 +86,18 @@ export function useOrderListAndDetail(options: UseOrderListAndDetailOptions) {
...
@@ -53,6 +86,18 @@ export function useOrderListAndDetail(options: UseOrderListAndDetailOptions) {
const
listSortProp
=
ref
<
string
|
null
>
(
null
)
const
listSortProp
=
ref
<
string
|
null
>
(
null
)
const
listSortOrder
=
ref
<
'asc'
|
'desc'
|
null
>
(
null
)
const
listSortOrder
=
ref
<
'asc'
|
'desc'
|
null
>
(
null
)
// 默认排序参数
const
applyDefaultListSort
=
()
=>
{
const
defaultSort
=
getDefaultCreateTimeSortParams
(
treeStatus
.
value
)
if
(
defaultSort
)
{
listSortProp
.
value
=
defaultSort
.
prop
listSortOrder
.
value
=
defaultSort
.
order
}
else
{
listSortProp
.
value
=
null
listSortOrder
.
value
=
null
}
}
const
buildListQueryBody
=
():
SearchForm
=>
{
const
buildListQueryBody
=
():
SearchForm
=>
{
const
base
=
{
...
getQueryPayload
()
}
as
SearchForm
const
base
=
{
...
getQueryPayload
()
}
as
SearchForm
if
(
listSortProp
.
value
&&
listSortOrder
.
value
)
{
if
(
listSortProp
.
value
&&
listSortOrder
.
value
)
{
...
@@ -110,8 +155,7 @@ export function useOrderListAndDetail(options: UseOrderListAndDetailOptions) {
...
@@ -110,8 +155,7 @@ export function useOrderListAndDetail(options: UseOrderListAndDetailOptions) {
operationOrderList
.
value
=
[]
operationOrderList
.
value
=
[]
logList
.
value
=
[]
logList
.
value
=
[]
currentRow
.
value
=
null
currentRow
.
value
=
null
listSortProp
.
value
=
null
applyDefaultListSort
()
listSortOrder
.
value
=
null
}
}
const
SORTABLE_COLUMN_PROPS
=
[
const
SORTABLE_COLUMN_PROPS
=
[
...
@@ -125,7 +169,7 @@ export function useOrderListAndDetail(options: UseOrderListAndDetailOptions) {
...
@@ -125,7 +169,7 @@ export function useOrderListAndDetail(options: UseOrderListAndDetailOptions) {
(
typeof
SORTABLE_COLUMN_PROPS
)[
number
],
(
typeof
SORTABLE_COLUMN_PROPS
)[
number
],
string
string
>
=
{
>
=
{
createTime
:
'po.create_time'
,
createTime
:
CREATE_TIME_LIST_SORT_PROP
,
startStockingTime
:
'po.start_stocking_time'
,
startStockingTime
:
'po.start_stocking_time'
,
finishTime
:
'po.finish_time'
,
finishTime
:
'po.finish_time'
,
}
}
...
@@ -152,8 +196,7 @@ export function useOrderListAndDetail(options: UseOrderListAndDetailOptions) {
...
@@ -152,8 +196,7 @@ export function useOrderListAndDetail(options: UseOrderListAndDetailOptions) {
listSortProp
.
value
=
sortProp
listSortProp
.
value
=
sortProp
listSortOrder
.
value
=
'desc'
listSortOrder
.
value
=
'desc'
}
else
{
}
else
{
listSortProp
.
value
=
null
applyDefaultListSort
()
listSortOrder
.
value
=
null
}
}
refreshTableList
()
refreshTableList
()
}
}
...
...
src/views/order/factoryOrderNew/index.vue
View file @
bedbfc7e
...
@@ -147,7 +147,17 @@
...
@@ -147,7 +147,17 @@
<
/ElFormItem
>
<
/ElFormItem
>
<
ElFormItem
<
ElFormItem
v
-
if
=
"cardLayoutStatuses.includes(status)"
v
-
if
=
"
cardLayoutStatuses.includes(status) ||
[
'ALL',
'PICKING',
'PENDING_DELIVERY',
'COMPLETED',
'SUSPEND',
'CANCELLED',
].includes(status)
"
label
=
"操作单号"
label
=
"操作单号"
>
>
<
ElInput
<
ElInput
...
@@ -698,7 +708,8 @@
...
@@ -698,7 +708,8 @@
status === 'IN_PRODUCTION' ||
status === 'IN_PRODUCTION' ||
status === 'PENDING_DELIVERY' ||
status === 'PENDING_DELIVERY' ||
status === 'SUSPEND' ||
status === 'SUSPEND' ||
status === 'PENDING_PICK'
status === 'PENDING_PICK' ||
status === 'PENDING_PACKING'
"
"
class
=
"item"
class
=
"item"
>
>
...
@@ -1313,7 +1324,10 @@ import type { StatusTreeNode } from '@/types/api/order/factoryOrderNew'
...
@@ -1313,7 +1324,10 @@ import type { StatusTreeNode } from '@/types/api/order/factoryOrderNew'
import
{
useOrderDictionaries
}
from
'./hooks/useOrderDictionaries'
import
{
useOrderDictionaries
}
from
'./hooks/useOrderDictionaries'
import
{
useOrderSearchForm
}
from
'./hooks/useOrderSearchForm'
import
{
useOrderSearchForm
}
from
'./hooks/useOrderSearchForm'
import
{
useOrderStatusTree
}
from
'./hooks/useOrderStatusTree'
import
{
useOrderStatusTree
}
from
'./hooks/useOrderStatusTree'
import
{
useOrderListAndDetail
}
from
'./hooks/useOrderListAndDetail'
import
{
getDefaultCreateTimeSortParams
,
useOrderListAndDetail
,
}
from
'./hooks/useOrderListAndDetail'
import
{
useOrderBatchActions
}
from
'./hooks/useOrderBatchActions'
import
{
useOrderBatchActions
}
from
'./hooks/useOrderBatchActions'
import
{
ElButton
,
ElTag
}
from
'element-plus'
import
{
ElButton
,
ElTag
}
from
'element-plus'
import
OrderInventoryDetailDialog
from
'./component/OrderInventoryDialog.vue'
import
OrderInventoryDetailDialog
from
'./component/OrderInventoryDialog.vue'
...
@@ -1454,6 +1468,12 @@ const getListQueryPayload = () => {
...
@@ -1454,6 +1468,12 @@ const getListQueryPayload = () => {
}
else
{
}
else
{
delete
payload
.
status
delete
payload
.
status
}
}
// 添加默认时间排序参数
const
defaultSort
=
getDefaultCreateTimeSortParams
(
status
.
value
)
if
(
defaultSort
)
{
payload
.
prop
=
defaultSort
.
prop
payload
.
order
=
defaultSort
.
order
}
return
payload
return
payload
}
}
...
...
src/views/order/factoryOrderNew/utils/listSearchQueryFilter.ts
View file @
bedbfc7e
...
@@ -5,7 +5,16 @@ export const FACTORY_ORDER_LIST_SEARCH_FIELD_RULES: Record<
...
@@ -5,7 +5,16 @@ export const FACTORY_ORDER_LIST_SEARCH_FIELD_RULES: Record<
(
ctx
:
FactoryOrderSearchQueryVisibilityContext
)
=>
boolean
(
ctx
:
FactoryOrderSearchQueryVisibilityContext
)
=>
boolean
>
=
{
>
=
{
batchArrangeNumber
:
(
c
)
=>
c
.
isCardLayout
,
batchArrangeNumber
:
(
c
)
=>
c
.
isCardLayout
,
operationNo
:
(
c
)
=>
c
.
isCardLayout
,
operationNo
:
(
c
)
=>
c
.
isCardLayout
||
[
'ALL'
,
'PICKING'
,
'PENDING_DELIVERY'
,
'COMPLETED'
,
'SUSPEND'
,
'CANCELLED'
,
].
includes
(
c
.
status
),
receiverCountry
:
(
c
)
=>
!
c
.
isCardLayout
,
receiverCountry
:
(
c
)
=>
!
c
.
isCardLayout
,
logisticsWayId
:
(
c
)
=>
c
.
status
===
'ALL'
,
logisticsWayId
:
(
c
)
=>
c
.
status
===
'ALL'
,
customerNo
:
(
c
)
=>
c
.
status
===
'ALL'
,
customerNo
:
(
c
)
=>
c
.
status
===
'ALL'
,
...
...
src/views/order/podUs/PodMakeOrder.vue
View file @
bedbfc7e
...
@@ -342,6 +342,7 @@ import { filePath } from '@/api/axios.ts'
...
@@ -342,6 +342,7 @@ import { filePath } from '@/api/axios.ts'
import
{
ElButton
,
ElIcon
,
ElTag
}
from
'element-plus'
import
{
ElButton
,
ElIcon
,
ElTag
}
from
'element-plus'
import
{
BaseRespData
}
from
'@/types/api'
import
{
BaseRespData
}
from
'@/types/api'
import
type
{
SortingList
}
from
'@/types/api/order'
import
type
{
SortingList
}
from
'@/types/api/order'
import
{
showError
}
from
'@/utils/ui.ts'
const
{
getCLodop
}
=
useLodop
()
const
{
getCLodop
}
=
useLodop
()
...
@@ -988,7 +989,24 @@ const getPackingData = async (code: string) => {
...
@@ -988,7 +989,24 @@ const getPackingData = async (code: string) => {
producingQuantity
:
number
producingQuantity
:
number
availableInventory
:
number
availableInventory
:
number
thirdSkuCode
?:
string
thirdSkuCode
?:
string
packingId
?:
number
box
?:
number
}
>
}
>
if
(
err
.
code
===
208
)
{
loading
.
close
()
const
{
packingId
,
box
}
=
err
.
data
const
area
=
sortingAreaList
.
value
.
find
((
item
)
=>
item
.
id
===
packingId
)
await
ElMessageBox
.
alert
(
`重复扫码!该操作单已在仓库:
${
area
?.
warehouseName
}
,
<
br
/>
配货区:
$
{
area
?.
areaName
}
,箱子:
$
{
box
}
中存在!
`,
'提示',
{
confirmButtonText: '确定',
dangerouslyUseHTMLString: true,
},
)
return
}
if (props.wallType !== 'us' && err?.code === 301) {
if (props.wallType !== 'us' && err?.code === 301) {
loading.close()
loading.close()
await ElMessageBox.alert(
await ElMessageBox.alert(
...
@@ -1000,7 +1018,9 @@ const getPackingData = async (code: string) => {
...
@@ -1000,7 +1018,9 @@ const getPackingData = async (code: string) => {
dangerouslyUseHTMLString
:
true
,
dangerouslyUseHTMLString
:
true
,
},
},
)
)
return
}
}
showError
(
err
.
message
)
}
finally
{
}
finally
{
isLock
.
value
=
false
isLock
.
value
=
false
productionOrder
.
value
=
''
productionOrder
.
value
=
''
...
...
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