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
ded1d9e8
Commit
ded1d9e8
authored
Feb 03, 2026
by
qinjianhui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: 备货订单数量填写优化
parent
f25d0809
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
158 additions
and
25 deletions
+158
-25
components.d.ts
+1
-0
src/views/supply/stockingOrder/AddStockingOrderDialog.vue
+13
-7
src/views/supply/stockingOrder/SupplierDispatchOrderDialog.vue
+49
-9
src/views/supply/stockingOrder/index.vue
+4
-4
src/views/warehouse/stockingApplicationOrder/SubmitWarehousingDialog.vue
+91
-5
No files found.
components.d.ts
View file @
ded1d9e8
...
...
@@ -54,6 +54,7 @@ declare module 'vue' {
ElTag
:
typeof
import
(
'element-plus/es'
)[
'ElTag'
]
ElTimeline
:
typeof
import
(
'element-plus/es'
)[
'ElTimeline'
]
ElTimelineItem
:
typeof
import
(
'element-plus/es'
)[
'ElTimelineItem'
]
ElTimePicker
:
typeof
import
(
'element-plus/es'
)[
'ElTimePicker'
]
ElTooltip
:
typeof
import
(
'element-plus/es'
)[
'ElTooltip'
]
ElTree
:
typeof
import
(
'element-plus/es'
)[
'ElTree'
]
ElUpload
:
typeof
import
(
'element-plus/es'
)[
'ElUpload'
]
...
...
src/views/supply/stockingOrder/AddStockingOrderDialog.vue
View file @
ded1d9e8
...
...
@@ -329,15 +329,21 @@ const validateField = (
if
(
!
strValue
)
{
if
(
field
===
'buyAmount'
)
row
.
_buyAmountError
=
'必填项'
else
row
.
_priceError
=
'必填项'
}
else
if
(
!
/^
\d
+
(\.\d
+
)?
$/
.
test
(
strValue
))
{
if
(
field
===
'buyAmount'
)
row
.
_buyAmountError
=
'请输入有效数字'
else
row
.
_priceError
=
'请输入有效数字'
}
else
if
(
field
===
'buyAmount'
)
{
// 备货数量只能输入正整数
if
(
!
/^
[
1-9
]\d
*$/
.
test
(
strValue
))
{
row
.
_buyAmountError
=
'请输入正整数'
}
else
{
row
.
_buyAmountError
=
''
}
}
else
if
(
field
===
'price'
)
{
if
(
!
/^
\d
+
(\.\d
+
)?
$/
.
test
(
strValue
))
{
row
.
_priceError
=
'请输入有效数字'
}
else
if
(
Number
(
strValue
)
===
0
)
{
if
(
field
===
'buyAmount'
)
row
.
_buyAmountError
=
`
${
fieldLabel
}
不能为0`
else
row
.
_priceError
=
`
${
fieldLabel
}
不能为0`
row
.
_priceError
=
`
${
fieldLabel
}
不能为0`
}
else
{
if
(
field
===
'buyAmount'
)
row
.
_buyAmount
Error
=
''
else
row
.
_priceError
=
''
row
.
_price
Error
=
''
}
}
}
const
validateDetailsList
=
():
boolean
=>
{
...
...
src/views/supply/stockingOrder/SupplierDispatchOrderDialog.vue
View file @
ded1d9e8
...
...
@@ -85,11 +85,12 @@
v-model=
"row.currentShipQuantity"
clearable
size=
"small"
type=
"number"
:min=
"0"
style=
"width: 100px"
@
wheel
.
prevent
@
blur=
"validateField(row, 'currentShipQuantity')"
/>
<div
v-if=
"row._currentShipQuantityError"
class=
"field-error"
>
{{
row
.
_currentShipQuantityError
}}
</div>
</
template
>
</TableView>
</div>
...
...
@@ -129,7 +130,7 @@ import {
import
TableView
from
'@/components/TableView.vue'
import
{
BigNumber
}
from
'bignumber.js'
defineProps
<
{
const
props
=
defineProps
<
{
warehouseList
:
WarehouseListData
[]
}
>
()
...
...
@@ -258,6 +259,21 @@ const handleDeleteSelected = () => {
)
selectedProducts
.
value
=
[]
}
const
validateDetailsList
=
():
boolean
=>
{
if
(
!
formData
.
value
.
detailsList
?.
length
)
{
return
true
}
let
isValid
=
true
formData
.
value
.
detailsList
.
forEach
((
row
)
=>
{
const
extendedRow
=
row
as
StockingOrderProductWithError
validateField
(
extendedRow
,
'currentShipQuantity'
)
if
(
extendedRow
.
_currentShipQuantityError
)
{
isValid
=
false
}
})
return
isValid
}
const
handleDispatch
=
async
()
=>
{
if
(
!
formRef
.
value
)
return
...
...
@@ -273,12 +289,10 @@ const handleDispatch = async () => {
return
}
for
(
const
item
of
formData
.
value
.
detailsList
||
[])
{
if
(
!
item
.
currentShipQuantity
)
{
ElMessage
.
warning
(
'请填写本次发货数量'
)
if
(
!
validateDetailsList
())
{
ElMessage
.
warning
(
'请检查本次发货数量是否正确填写'
)
return
}
}
const
overQuantitySkus
=
(
formData
.
value
.
detailsList
||
[])
.
filter
(
...
...
@@ -314,11 +328,13 @@ const handleDispatch = async () => {
const
{
stockingUpManageNo
,
warehouseId
,
warehouseName
,
expectDeliveryTime
,
currencyCode
,
detailsList
,
}
=
formData
.
value
const
warehouseName
=
props
.
warehouseList
.
find
(
(
item
)
=>
item
.
id
===
warehouseId
,
)?.
name
try
{
const
res
=
await
supplierDispatchApi
({
manageId
:
currentRow
.
value
?.
id
as
number
,
...
...
@@ -389,6 +405,30 @@ const open = async (row: TableData) => {
loading
.
close
()
}
}
type
StockingOrderProductWithError
=
StockingOrderProduct
&
{
_currentShipQuantityError
?:
string
}
const
validateField
=
(
row
:
StockingOrderProductWithError
,
field
:
'currentShipQuantity'
,
)
=>
{
const
value
=
row
[
field
]
const
strValue
=
value
===
0
||
value
===
'0'
?
'0'
:
String
(
value
??
''
)
const
fieldLabel
=
'本次发货数量'
if
(
!
strValue
)
{
if
(
field
===
'currentShipQuantity'
)
row
.
_currentShipQuantityError
=
'必填项'
}
else
if
(
!
/^
\d
+$/
.
test
(
strValue
))
{
if
(
field
===
'currentShipQuantity'
)
row
.
_currentShipQuantityError
=
'只能输入正整数'
}
else
if
(
Number
(
strValue
)
===
0
)
{
if
(
field
===
'currentShipQuantity'
)
row
.
_currentShipQuantityError
=
`
${
fieldLabel
}
不能为0`
}
else
{
if
(
field
===
'currentShipQuantity'
)
row
.
_currentShipQuantityError
=
''
}
}
defineExpose
({
open
})
</
script
>
...
...
src/views/supply/stockingOrder/index.vue
View file @
ded1d9e8
...
...
@@ -163,7 +163,7 @@
>
<
/span
>
<
span
class
=
"item"
>
<
span
v
-
if
=
"status !== 'COMPLETED' && status !== 'CANCELLED'"
class
=
"item"
>
<
ElButton
type
=
"success"
@
click
=
"addInternalTag"
>
添加内部便签
<
/ElButto
n
>
...
...
@@ -321,7 +321,7 @@ const tableColumns = computed(() => {
return
<
ElTag
type
=
"success"
>
备货中
<
/ElTag
>
}
if
(
row
.
status
===
'COMPLETED'
)
{
return
<
ElTag
type
=
"success"
>
已
完成
<
/ElTag
>
return
<
ElTag
type
=
"success"
>
备货
完成
<
/ElTag
>
}
if
(
row
.
status
===
'CANCELLED'
)
{
return
<
ElTag
type
=
"danger"
>
已取消
<
/ElTag
>
...
...
@@ -664,7 +664,7 @@ const handleSubmitAudit = async () => {
return
ElMessage
.
warning
(
'请选择要操作的数据'
)
}
try
{
await
ElMessageBox
.
confirm
(
'确定
要提交审核吗
?'
,
'提示'
,
{
await
ElMessageBox
.
confirm
(
'确定
将选中的订单提交至审核
?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
,
...
...
@@ -689,7 +689,7 @@ const handleDeleteOrder = async () => {
return
ElMessage
.
warning
(
'请选择一条数据'
)
}
try
{
await
ElMessageBox
.
confirm
(
'确定
要删除选中的数据吗
?'
,
'提示'
,
{
await
ElMessageBox
.
confirm
(
'确定
删除选中的订单?
?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
,
...
...
src/views/warehouse/stockingApplicationOrder/SubmitWarehousingDialog.vue
View file @
ded1d9e8
...
...
@@ -64,7 +64,11 @@
clearable
size=
"small"
style=
"width: 70px"
@
blur=
"validateField(row, 'buyStored')"
/>
<div
v-if=
"row._buyStoredError"
class=
"field-error"
>
{{
row
.
_buyStoredError
}}
</div>
</
template
>
<
template
#
rejectsAmount=
"{ row }"
>
<ElInput
...
...
@@ -72,7 +76,11 @@
clearable
size=
"small"
style=
"width: 70px"
@
blur=
"validateField(row, 'rejectsAmount')"
/>
<div
v-if=
"row._rejectsAmountError"
class=
"field-error"
>
{{
row
.
_rejectsAmountError
}}
</div>
</
template
>
<
template
#
locationName=
"{ row }"
>
<ElSelect
...
...
@@ -144,6 +152,10 @@ const formData = ref<StockingApplyOrderDetailData>({
checkerUserId
:
undefined
,
remark
:
''
,
})
type
StockingApplyOrderDetailListWithError
=
StockingApplyOrderDetailList
&
{
_buyStoredError
?:
string
_rejectsAmountError
?:
string
}
const
tableColumns
=
ref
([
{
label
:
'SKU图片'
,
...
...
@@ -349,6 +361,45 @@ const batchSetBuyStored = () => {
})
}
const
validateField
=
(
row
:
StockingApplyOrderDetailListWithError
,
field
:
'buyStored'
|
'rejectsAmount'
,
)
=>
{
const
value
=
row
[
field
]
const
strValue
=
value
===
0
||
value
===
'0'
?
'0'
:
String
(
value
??
''
)
const
fieldLabel
=
field
===
'buyStored'
?
'入库数量'
:
'不良品数'
if
(
!
strValue
)
{
if
(
field
===
'buyStored'
)
row
.
_buyStoredError
=
'必填项'
}
else
if
(
!
/^
\d
+$/
.
test
(
strValue
))
{
if
(
field
===
'buyStored'
)
row
.
_buyStoredError
=
'只能输入正整数'
else
if
(
field
===
'rejectsAmount'
)
row
.
_rejectsAmountError
=
'只能输入正整数'
}
else
if
(
Number
(
strValue
)
===
0
)
{
if
(
field
===
'buyStored'
)
row
.
_buyStoredError
=
`
${
fieldLabel
}
不能为0`
else
if
(
field
===
'rejectsAmount'
)
row
.
_rejectsAmountError
=
''
}
else
{
if
(
field
===
'buyStored'
)
row
.
_buyStoredError
=
''
else
row
.
_rejectsAmountError
=
''
}
}
const
validateDetailsList
=
():
boolean
=>
{
if
(
!
formData
.
value
.
detailsList
?.
length
)
{
return
true
}
let
isValid
=
true
formData
.
value
.
detailsList
.
forEach
((
row
)
=>
{
const
extendedRow
=
row
as
StockingApplyOrderDetailListWithError
validateField
(
extendedRow
,
'buyStored'
)
validateField
(
extendedRow
,
'rejectsAmount'
)
if
(
extendedRow
.
_buyStoredError
||
extendedRow
.
_rejectsAmountError
)
{
isValid
=
false
}
})
return
isValid
}
const
handleSubmit
=
async
()
=>
{
if
(
!
formRef
.
value
)
return
try
{
...
...
@@ -356,14 +407,14 @@ const handleSubmit = async () => {
}
catch
{
return
}
for
(
const
item
of
formData
.
value
.
detailsList
)
{
if
(
!
item
.
buyStored
)
{
ElMessage
.
error
(
`库存SKU:
${
item
.
warehouseSku
}
入库数量不能为空`
)
if
(
!
validateDetailsList
())
{
ElMessage
.
warning
(
'请检查入库数量和不良品数是否正确填写'
)
return
}
const
overQuantitySkus
=
[]
for
(
const
item
of
formData
.
value
.
detailsList
)
{
if
(
Number
(
item
.
buyStored
)
>
Number
(
item
.
shipmentQuantity
))
{
ElMessage
.
error
(
`库存SKU:
${
item
.
warehouseSku
}
入库数量不能大于申请数量`
)
return
overQuantitySkus
.
push
(
item
.
warehouseSku
)
}
const
locationCode
=
allLocationList
.
value
.
find
(
(
location
:
loactionData
)
=>
location
.
id
===
Number
(
item
.
locationId
),
...
...
@@ -375,6 +426,21 @@ const handleSubmit = async () => {
.
plus
(
rejectsAmount
)
.
toNumber
()
}
if
(
overQuantitySkus
.
length
>
0
)
{
ElMessageBox
.
alert
(
`<div style="line-height: 1.6;"><span style="white-space: nowrap; flex-shrink: 0;">库存SKU:</span><span style="word-break: break-all; margin-left: 4px;">
${
overQuantitySkus
.
join
(
','
,
)}
</span><span style="margin-top: 12px;">入库数量不能大于申请数量</span></div>`
,
'提示'
,
{
confirmButtonText
:
'确定'
,
type
:
'warning'
,
customClass
:
'over-quantity-alert-box'
,
dangerouslyUseHTMLString
:
true
,
},
)
return
}
const
checkerName
=
userList
.
value
.
find
(
(
item
)
=>
item
.
id
===
formData
.
value
.
checkerUserId
,
)?.
account
...
...
@@ -396,6 +462,7 @@ const handleSubmit = async () => {
loading
.
close
()
}
}
defineExpose
({
open
})
</
script
>
...
...
@@ -439,4 +506,23 @@ defineExpose({ open })
.dialog-footer
{
text-align
:
center
;
}
.field-error
{
color
:
#f56c6c
;
font-size
:
12px
;
line-height
:
1
;
margin-top
:
2px
;
text-align
:
center
;
}
</
style
>
<
style
>
.over-quantity-alert-box
{
width
:
1000px
!important
;
max-width
:
90vw
!important
;
}
.over-quantity-alert-box
.el-message-box__message
{
word-break
:
break-all
;
line-height
:
1.6
;
padding
:
10px
0
;
}
</
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