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
54fb19a8
Commit
54fb19a8
authored
Jan 05, 2026
by
linjinhong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat:【工厂端】生产中发现缺货的订单支持打缺货标签,便于工厂人员快速识别优先补库存#1002026
parent
efb77b93
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
332 additions
and
97 deletions
+332
-97
src/api/podCnOrder.ts
+12
-1
src/api/podUsOrder.ts
+15
-1
src/types/api/podCnOrder.ts
+2
-0
src/types/api/podUsOrder.ts
+2
-0
src/views/order/podCN/index.vue
+131
-36
src/views/order/podUs/index.vue
+170
-59
No files found.
src/api/podCnOrder.ts
View file @
54fb19a8
...
@@ -770,7 +770,7 @@ export function updateCustomDeclarationInfoApi({
...
@@ -770,7 +770,7 @@ export function updateCustomDeclarationInfoApi({
formData
.
append
(
key
,
String
(
value
))
formData
.
append
(
key
,
String
(
value
))
}
}
})
})
return
axios
.
post
<
never
,
BaseRespData
<
never
>>
(
return
axios
.
post
<
never
,
BaseRespData
<
never
>>
(
'factory/podJomallOrderCn/batchUpdateCustomsClearanceInfo'
,
'factory/podJomallOrderCn/batchUpdateCustomsClearanceInfo'
,
formData
,
formData
,
...
@@ -779,3 +779,14 @@ export function updateCustomDeclarationInfoApi({
...
@@ -779,3 +779,14 @@ export function updateCustomDeclarationInfoApi({
},
},
)
)
}
}
// 标记缺货/移除缺货共用
export
function
updateProductOutOfStockApi
(
params
:
{
productIds
:
(
number
|
string
)[]
orderFrom
:
string
outOfStock
:
boolean
})
{
return
axios
.
post
<
never
,
BaseRespData
<
never
>>
(
`/factory/podJomallOrderProductCnUs/updateProductOutOfStock`
,
params
,
)
}
src/api/podUsOrder.ts
View file @
54fb19a8
...
@@ -286,7 +286,10 @@ export function clearBoxApi(
...
@@ -286,7 +286,10 @@ export function clearBoxApi(
},
},
)
)
}
}
export
function
clearAllBoxApi
(
warehouseId
:
string
|
number
,
factoryNo
:
string
|
number
|
undefined
)
{
export
function
clearAllBoxApi
(
warehouseId
:
string
|
number
,
factoryNo
:
string
|
number
|
undefined
,
)
{
return
axios
.
get
<
never
,
BaseRespData
<
never
>>
(
return
axios
.
get
<
never
,
BaseRespData
<
never
>>
(
'factory/podJomallOrderUs/delPodBoxOrderDetails'
,
'factory/podJomallOrderUs/delPodBoxOrderDetails'
,
{
{
...
@@ -685,3 +688,14 @@ export function printNormalPickPdfApi(ids: string) {
...
@@ -685,3 +688,14 @@ export function printNormalPickPdfApi(ids: string) {
{
params
:
{
ids
}
},
{
params
:
{
ids
}
},
)
)
}
}
// 标记缺货/移除缺货共用
export
function
updateProductOutOfStockApi
(
params
:
{
productIds
:
(
number
|
string
)[]
orderFrom
:
string
outOfStock
:
boolean
})
{
return
axios
.
post
<
never
,
BaseRespData
<
never
>>
(
`/factory/podJomallOrderProductCnUs/updateProductOutOfStock`
,
params
,
)
}
src/types/api/podCnOrder.ts
View file @
54fb19a8
...
@@ -54,6 +54,7 @@ export interface SearchForm {
...
@@ -54,6 +54,7 @@ export interface SearchForm {
automaticComposing
?:
number
automaticComposing
?:
number
employeeId
?:
number
employeeId
?:
number
blocking
?:
boolean
blocking
?:
boolean
outOfStock
?:
boolean
}
}
export
interface
PodCnOrderListData
{
export
interface
PodCnOrderListData
{
id
:
number
id
:
number
...
@@ -158,6 +159,7 @@ export interface ProductList {
...
@@ -158,6 +159,7 @@ export interface ProductList {
batchArrangeNumber
?:
string
|
null
batchArrangeNumber
?:
string
|
null
sizeType
?:
number
|
null
sizeType
?:
number
|
null
customTagList
?:
{
name
:
string
}[]
customTagList
?:
{
name
:
string
}[]
outOfStock
?:
boolean
}
}
export
interface
cardImages
{
export
interface
cardImages
{
title
:
string
title
:
string
...
...
src/types/api/podUsOrder.ts
View file @
54fb19a8
...
@@ -50,6 +50,7 @@ export interface SearchForm {
...
@@ -50,6 +50,7 @@ export interface SearchForm {
automaticComposing
?:
number
automaticComposing
?:
number
employeeId
?:
number
employeeId
?:
number
blocking
?:
boolean
blocking
?:
boolean
outOfStock
?:
boolean
}
}
export
interface
PodUsOrderListData
{
export
interface
PodUsOrderListData
{
id
:
number
id
:
number
...
@@ -157,6 +158,7 @@ export interface ProductList {
...
@@ -157,6 +158,7 @@ export interface ProductList {
sizeType
?:
number
|
null
sizeType
?:
number
|
null
productMark
?:
string
|
null
productMark
?:
string
|
null
customTagList
?:
{
name
:
string
}[]
customTagList
?:
{
name
:
string
}[]
outOfStock
?:
boolean
}
}
export
interface
cardImages
{
export
interface
cardImages
{
title
:
string
title
:
string
...
...
src/views/order/podCN/index.vue
View file @
54fb19a8
...
@@ -252,6 +252,25 @@
...
@@ -252,6 +252,25 @@
>
>
</el-radio-group>
</el-radio-group>
</ElFormItem>
</ElFormItem>
<ElFormItem
label=
"标签"
v-if=
"status == 'TO_BE_REPLENISHMENT' || status == 'PICKING'"
>
<ElSelect
v-model=
"searchForm.outOfStock"
clearable
filterable
placeholder=
"请输入标签"
style=
"width: 150px"
>
<el-option
v-for=
"item in labelList"
:key=
"item.value"
:label=
"item.name"
:value=
"item.value"
></el-option>
</ElSelect>
</ElFormItem>
<ElFormItem
v-if=
"status !== 'BATCH_DOWNLOAD'"
>
<ElFormItem
v-if=
"status !== 'BATCH_DOWNLOAD'"
>
<ElPopover
placement=
"bottom"
width=
"600"
trigger=
"click"
>
<ElPopover
placement=
"bottom"
width=
"600"
trigger=
"click"
>
<ElForm
<ElForm
...
@@ -416,10 +435,10 @@
...
@@ -416,10 +435,10 @@
></ElOption>
></ElOption>
</ElSelect>
</ElSelect>
</ElFormItem>
</ElFormItem>
<ElFormItem
label=
"标签"
>
<ElFormItem
label=
"
ERP
标签"
>
<ElSelect
<ElSelect
v-model=
"searchForm.tagsIdArr"
v-model=
"searchForm.tagsIdArr"
placeholder=
"请选择标签"
placeholder=
"请选择
ERP
标签"
clearable
clearable
filterable
filterable
multiple
multiple
...
@@ -676,9 +695,9 @@
...
@@ -676,9 +695,9 @@
拣胚完成
拣胚完成
</ElButton>
</ElButton>
</span>
</span>
<span
v-if=
"status === 'PICKING'"
class=
"item"
>
<
!-- <
span v-if="status === 'PICKING'" class="item">
<ElButton type="success" @click="toOutOfStock"> 转至缺货 </ElButton>
<ElButton type="success" @click="toOutOfStock"> 转至缺货 </ElButton>
</span>
</span>
-->
<span
v-if=
"status === 'TO_BE_CONFIRMED'"
class=
"item"
>
<span
v-if=
"status === 'TO_BE_CONFIRMED'"
class=
"item"
>
<ElButton
type=
"warning"
@
click=
"changeExceptionOrder"
>
<ElButton
type=
"warning"
@
click=
"changeExceptionOrder"
>
转为异常单
转为异常单
...
@@ -916,6 +935,35 @@
...
@@ -916,6 +935,35 @@
</ElDropdown>
</ElDropdown>
</span>
</span>
<span
<span
v-if=
"status === 'PICKING' || status === 'TO_BE_REPLENISHMENT'"
class=
"item"
>
<ElDropdown>
<el-button
type=
"warning"
>
标签管理
<el-icon
class=
"el-icon--right"
><ArrowDown
/></el-icon>
</el-button>
<
template
#
dropdown
>
<ElDropdownMenu>
<ElDropdownItem
:disabled=
"
selection.length === 0 && cardSelection.length === 0
"
@
click=
"labelFn(true)"
>
添加缺货标签
</ElDropdownItem
>
<ElDropdownItem
:disabled=
"
selection.length === 0 && cardSelection.length === 0
"
@
click=
"labelFn(false)"
>
移除缺货标签
</ElDropdownItem
>
</ElDropdownMenu>
</
template
>
</ElDropdown>
</span>
<span
v-if=
"['WAIT_TRACK', 'COMPLETE', 'IN_TRANSIT'].includes(status)"
v-if=
"['WAIT_TRACK', 'COMPLETE', 'IN_TRANSIT'].includes(status)"
class=
"item"
class=
"item"
>
>
...
@@ -1939,6 +1987,14 @@
...
@@ -1939,6 +1987,14 @@
>
>
<
template
#
top_left
>
<
template
#
top_left
>
<
el
-
tooltip
<
el
-
tooltip
v
-
if
=
"cardItem.outOfStock"
effect
=
"light"
content
=
"生产中缺货"
placement
=
"bottom"
>
<
el
-
icon
color
=
"#bd3124"
>
缺
<
/el-icon
>
<
/el-tooltip
>
<
el
-
tooltip
v
-
if
=
"
v
-
if
=
"
cardItem.interceptStatus == 0 ||
cardItem.interceptStatus == 0 ||
cardItem.interceptStatus == 2
cardItem.interceptStatus == 2
...
@@ -2786,7 +2842,7 @@ import {
...
@@ -2786,7 +2842,7 @@ import {
confirmProductApi
,
confirmProductApi
,
applyForReplenishmentApi
,
applyForReplenishmentApi
,
replenishmentSuccessApi
,
replenishmentSuccessApi
,
toOutOfStockApi
,
//
toOutOfStockApi,
arrangeFinishApi
,
arrangeFinishApi
,
getListCraftApi
,
getListCraftApi
,
batchDownloadApi
,
batchDownloadApi
,
...
@@ -2815,6 +2871,7 @@ import {
...
@@ -2815,6 +2871,7 @@ import {
changeLogisticsApi
,
changeLogisticsApi
,
getEmployeeListApi
,
getEmployeeListApi
,
allErpCodeListApi
,
allErpCodeListApi
,
updateProductOutOfStockApi
,
}
from
'@/api/podCnOrder'
}
from
'@/api/podCnOrder'
// import
{
logisticsCompanyAllCodelist
}
from
'@/api/logistics.ts'
// import
{
logisticsCompanyAllCodelist
}
from
'@/api/logistics.ts'
...
@@ -3140,6 +3197,11 @@ const sizeList = ref<{ name: string; value: number }[]>([
...
@@ -3140,6 +3197,11 @@ const sizeList = ref<{ name: string; value: number }[]>([
{
name
:
'正常码'
,
value
:
1
}
,
{
name
:
'正常码'
,
value
:
1
}
,
{
name
:
'大码'
,
value
:
2
}
,
{
name
:
'大码'
,
value
:
2
}
,
])
])
// 标签类型表
const
labelList
=
ref
<
{
name
:
string
;
value
:
boolean
}
[]
>
([
{
name
:
'生产中缺货'
,
value
:
true
}
,
{
name
:
'无标签'
,
value
:
false
}
,
])
const
handleRefreshAddress
=
async
(
row
:
PodCnOrderListData
)
=>
{
const
handleRefreshAddress
=
async
(
row
:
PodCnOrderListData
)
=>
{
try
{
try
{
...
@@ -4495,37 +4557,37 @@ const pickingComplete = async () => {
...
@@ -4495,37 +4557,37 @@ const pickingComplete = async () => {
loading
.
close
()
loading
.
close
()
}
}
}
}
const
toOutOfStock
=
async
()
=>
{
//
const toOutOfStock = async () =>
{
if
(
cardSelection
.
value
.
length
===
0
)
{
//
if (cardSelection.value.length === 0)
{
return
ElMessage
.
warning
(
'请选择数据'
)
//
return ElMessage.warning('请选择数据')
}
//
}
const
orderIds
=
cardSelection
.
value
.
map
((
item
)
=>
item
.
podJomallOrderCnId
)
//
const orderIds = cardSelection.value.map((item) => item.podJomallOrderCnId)
try
{
//
try
{
await
ElMessageBox
.
confirm
(
'确定转至缺货吗?'
,
'提示'
,
{
//
await ElMessageBox.confirm('确定转至缺货吗?', '提示',
{
cancelButtonText
:
'取消'
,
//
cancelButtonText: '取消',
confirmButtonText
:
'确认'
,
//
confirmButtonText: '确认',
type
:
'warning'
,
//
type: 'warning',
}
)
//
}
)
}
catch
{
//
}
catch
{
return
//
return
}
//
}
const
loading
=
ElLoading
.
service
({
//
const loading = ElLoading.service(
{
fullscreen
:
true
,
//
fullscreen: true,
text
:
'操作中...'
,
//
text: '操作中...',
background
:
'rgba(0, 0, 0, 0.3)'
,
//
background: 'rgba(0, 0, 0, 0.3)',
}
)
//
}
)
try
{
//
try
{
const
res
=
await
toOutOfStockApi
(
orderIds
)
//
const res = await toOutOfStockApi(orderIds)
if
(
res
.
code
!==
200
)
return
//
if (res.code !== 200) return
search
()
//
search()
loadTabData
()
//
loadTabData()
cardSelection
.
value
=
[]
//
cardSelection.value = []
}
catch
(
e
)
{
//
}
catch
(
e
)
{
console
.
error
(
e
)
//
console.error(e)
}
finally
{
//
}
finally
{
loading
.
close
()
//
loading.close()
}
//
}
}
//
}
const
inputBlur
=
()
=>
{
const
inputBlur
=
()
=>
{
if
(
!
pageSize
.
value
||
Number
(
pageSize
.
value
)
<=
0
)
{
if
(
!
pageSize
.
value
||
Number
(
pageSize
.
value
)
<=
0
)
{
pageSize
.
value
=
initPageSize
.
value
pageSize
.
value
=
initPageSize
.
value
...
@@ -5844,6 +5906,39 @@ const getNewImageFn = (img: string) => {
...
@@ -5844,6 +5906,39 @@ const getNewImageFn = (img: string) => {
}
}
}
}
const
labelFn
=
async
(
type
:
boolean
)
=>
{
try
{
await
ElMessageBox
.
confirm
(
'确定添加“生产中缺货”标签?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
,
}
)
}
catch
{
return
}
const
loading
=
ElLoading
.
service
({
fullscreen
:
true
,
text
:
'操作中...'
,
background
:
'rgba(0, 0, 0, 0.3)'
,
}
)
try
{
const
params
=
{
productIds
:
selection
.
value
.
map
((
item
)
=>
item
.
id
),
orderFrom
:
'CN'
,
outOfStock
:
type
,
}
await
updateProductOutOfStockApi
(
params
)
ElMessage
.
success
(
'操作成功'
)
search
()
loadTabData
()
}
catch
(
error
)
{
console
.
log
(
error
)
}
finally
{
loading
.
close
()
}
}
useRouter
().
beforeEach
((
to
,
from
,
next
)
=>
{
useRouter
().
beforeEach
((
to
,
from
,
next
)
=>
{
handleBeforeRouteLeave
(
to
,
from
,
next
)
handleBeforeRouteLeave
(
to
,
from
,
next
)
}
)
}
)
...
...
src/views/order/podUs/index.vue
View file @
54fb19a8
This diff is collapsed.
Click to expand it.
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