Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
W
weChatFlowApprove
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
刘川
weChatFlowApprove
Commits
c5b9da53
Commit
c5b9da53
authored
Nov 25, 2025
by
李驰骋
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
# Conflicts: # src/views/ship-approval/ShipApproval.vue
parents
d91b3f08
14700e8a
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
226 additions
and
207 deletions
+226
-207
ShipApproval.vue
src/views/ship-approval/ShipApproval.vue
+226
-207
No files found.
src/views/ship-approval/ShipApproval.vue
View file @
c5b9da53
...
@@ -28,7 +28,7 @@
...
@@ -28,7 +28,7 @@
<van-cell
title=
"本次要货件数"
:value=
"item.wantQuantity"
/>
<van-cell
title=
"本次要货件数"
:value=
"item.wantQuantity"
/>
<van-cell
title=
"年销售计划量"
:value=
"item.yearSalePlanQty"
/>
<van-cell
title=
"年销售计划量"
:value=
"item.yearSalePlanQty"
/>
<van-cell
title=
"月销售计划量"
:value=
"item.monthSalePlanQty"
/>
<van-cell
title=
"月销售计划量"
:value=
"item.monthSalePlanQty"
/>
<van-cell
title=
"当月
审批
量"
:value=
"item.monthAuditQty"
/>
<van-cell
title=
"当月
协助
量"
:value=
"item.monthAuditQty"
/>
<van-cell
title=
"库存量(发货申请时的实时库存)"
:value=
"item.stockQuantity"
/>
<van-cell
title=
"库存量(发货申请时的实时库存)"
:value=
"item.stockQuantity"
/>
<van-cell
title=
"在途量"
:value=
"item.roadQuantity"
/>
<van-cell
title=
"在途量"
:value=
"item.roadQuantity"
/>
<van-cell
title=
"已审在发运量"
:value=
"item.auditShipmentQuantity"
/>
<van-cell
title=
"已审在发运量"
:value=
"item.auditShipmentQuantity"
/>
...
@@ -49,14 +49,14 @@
...
@@ -49,14 +49,14 @@
v-if=
"isShowBase"
v-if=
"isShowBase"
v-model=
"form.baseAuditQuantity"
v-model=
"form.baseAuditQuantity"
:required=
"taskNode.subProcUnitId === 'base'"
:required=
"taskNode.subProcUnitId === 'base'"
label=
"基地审批
量"
label=
"基地协助
量"
placeholder=
""
placeholder=
""
:disabled=
"taskNode.subProcUnitId !== 'base'"
:disabled=
"taskNode.subProcUnitId !== 'base'"
/>
/>
<van-field
<van-field
v-if=
"isShowWarZone"
v-if=
"isShowWarZone"
v-model=
"form.warAuditQuantity"
v-model=
"form.warAuditQuantity"
label=
"战区审批
量"
label=
"战区协助
量"
:required=
"taskNode.subProcUnitId === 'warZone'"
:required=
"taskNode.subProcUnitId === 'warZone'"
placeholder=
""
placeholder=
""
error-message=
""
error-message=
""
...
@@ -66,7 +66,7 @@
...
@@ -66,7 +66,7 @@
v-if=
"isShowWork"
v-if=
"isShowWork"
v-model=
"form.salecenterAuditQuantity"
v-model=
"form.salecenterAuditQuantity"
:required=
"taskNode.subProcUnitId === 'work'"
:required=
"taskNode.subProcUnitId === 'work'"
label=
"内勤审批
量"
label=
"内勤协助
量"
placeholder=
""
placeholder=
""
error-message=
""
error-message=
""
:disabled=
"taskNode.subProcUnitId !== 'work'"
:disabled=
"taskNode.subProcUnitId !== 'work'"
...
@@ -365,14 +365,21 @@ export default {
...
@@ -365,14 +365,21 @@ export default {
isReadonly
()
{
isReadonly
()
{
return
false
return
false
},
},
// 查找第一个审批节点(排除发起人节点和分流审批节点)
firstApprovalNode
()
{
firstApprovalNode
()
{
var
node
=
this
.
findFirstApprovalNode
()
return
this
.
findFirstApprovalNode
()
return
node
;
},
},
// 判断当前是否是第一个审批节点
isFirstApprovalNode
()
{
isFirstApprovalNode
()
{
const
node
=
this
.
firstApprovalNode
const
node
=
this
.
firstApprovalNode
return
node
&&
(
node
.
statusId
===
'executing'
||
node
.
statusId
===
'ready'
)
const
currNode
=
this
.
findCurrApprovalNode
()
if
(
currNode
==
null
||
node
==
null
)
{
return
false
}
// 判断找到的节点是否为执行中状态
return
node
.
subProcUnitName
===
currNode
.
subProcUnitName
},
},
// 获取第一条审批节点的opinion数据
firstApprovalOpinion
()
{
firstApprovalOpinion
()
{
const
node
=
this
.
firstApprovalNode
const
node
=
this
.
firstApprovalNode
return
node
?
(
node
.
opinion
||
''
)
:
''
return
node
?
(
node
.
opinion
||
''
)
:
''
...
@@ -387,37 +394,51 @@ export default {
...
@@ -387,37 +394,51 @@ export default {
this
.
initDetail
()
this
.
initDetail
()
}
}
},
},
mounted
()
{
methods
:
{
// 强制刷新,解决企业微信缓存问题
/**
// 在mounted中执行,确保DOM已加载
* 查找第一个审批节点
this
.
$nextTick
(()
=>
{
* 排除规则:
if
(
typeof
window
!==
'undefined'
&&
window
.
location
)
{
* 1. 排除第一个节点(发起人节点,索引0)
try
{
* 2. 如果第二个节点的 subProcUnitId === 'shunt',也排除(分流审批)
const
searchParams
=
new
URLSearchParams
(
window
.
location
.
search
)
* @returns {Object|null} 第一个审批节点,如果不存在则返回 null
if
(
!
searchParams
.
has
(
'_t'
))
{
*/
searchParams
.
set
(
'_t'
,
Date
.
now
().
toString
())
findFirstApprovalNode
()
{
const
newUrl
=
window
.
location
.
pathname
+
'?'
+
searchParams
.
toString
()
+
(
window
.
location
.
hash
||
''
)
const
data
=
this
.
tablePathData
window
.
history
.
replaceState
({},
''
,
newUrl
)
if
(
!
data
||
data
.
length
===
0
)
{
// 强制重新加载页面资源(仅在企业微信环境下)
return
null
if
(
window
.
navigator
.
userAgent
.
indexOf
(
'wxwork'
)
!==
-
1
)
{
// 企业微信环境,尝试清除可能的缓存
const
links
=
document
.
querySelectorAll
(
'link[rel="stylesheet"]'
)
links
.
forEach
(
link
=>
{
if
(
link
.
href
)
{
const
href
=
new
URL
(
link
.
href
,
window
.
location
.
origin
)
href
.
searchParams
.
set
(
'_v'
,
Date
.
now
().
toString
())
link
.
href
=
href
.
toString
()
}
}
})
// 从索引1开始查找(排除第一个节点,发起人节点)
let
startIndex
=
1
// 如果第二个节点是分流审批(subProcUnitId === 'shunt'),也排除
if
(
data
.
length
>
1
&&
data
[
1
].
subProcUnitId
===
'shunt'
)
{
startIndex
=
2
}
}
// 从 startIndex 开始查找第一个审批节点
for
(
let
i
=
startIndex
;
i
<
data
.
length
;
i
++
)
{
const
node
=
data
[
i
]
// 返回找到的第一个节点
return
node
}
}
}
catch
(
e
)
{
console
.
warn
(
'缓存控制处理失败:'
,
e
)
return
null
},
// 查找当前审批节点
findCurrApprovalNode
()
{
const
data
=
this
.
tablePathData
if
(
!
Array
.
isArray
(
data
)
||
data
.
length
===
0
)
{
return
null
}
}
for
(
let
i
=
1
;
i
<
data
.
length
;
i
++
)
{
const
node
=
data
[
i
]
if
(
node
.
statusId
===
'executing'
||
node
.
statusId
===
'ready'
)
{
return
node
}
}
})
}
return
null
},
},
methods
:
{
handlePicker
()
{
handlePicker
()
{
this
.
showPicker
=
this
.
flag
this
.
showPicker
=
this
.
flag
},
},
...
@@ -439,7 +460,13 @@ export default {
...
@@ -439,7 +460,13 @@ export default {
initDetail
()
{
initDetail
()
{
apiWantgoodsFindById
(
this
.
conditions
).
then
(
res
=>
{
apiWantgoodsFindById
(
this
.
conditions
).
then
(
res
=>
{
res
.
data
.
pyear
+=
''
res
.
data
.
pyear
+=
''
// 保存 taskId,避免被 res.data 覆盖
const
savedTaskId
=
this
.
conditions
.
taskId
this
.
conditions
=
{
...
this
.
conditions
,
...
res
.
data
}
this
.
conditions
=
{
...
this
.
conditions
,
...
res
.
data
}
// 如果 res.data 中没有 taskId 或 taskId 为空,则恢复保存的值
if
(
!
this
.
conditions
.
taskId
&&
savedTaskId
)
{
this
.
conditions
.
taskId
=
savedTaskId
}
this
.
status
=
res
.
data
.
status
this
.
status
=
res
.
data
.
status
this
.
flowPath
()
this
.
flowPath
()
for
(
const
key
in
this
.
conditions
)
{
for
(
const
key
in
this
.
conditions
)
{
...
@@ -574,22 +601,22 @@ export default {
...
@@ -574,22 +601,22 @@ export default {
if
(
this
.
isShowBase
&&
this
.
taskNode
.
subProcUnitId
===
'base'
)
{
if
(
this
.
isShowBase
&&
this
.
taskNode
.
subProcUnitId
===
'base'
)
{
if
(
this
.
form
.
baseAuditQuantity
-
0
<=
0
||
!
Number
(
this
.
form
.
baseAuditQuantity
))
{
if
(
this
.
form
.
baseAuditQuantity
-
0
<=
0
||
!
Number
(
this
.
form
.
baseAuditQuantity
))
{
Toast
(
'请正确填写基地
审批
量'
)
Toast
(
'请正确填写基地
协助
量'
)
return
return
}
else
if
(
}
else
if
(
this
.
form
.
baseAuditQuantity
-
0
>
this
.
form
.
baseAuditQuantity
-
0
>
params
.
wantGoodsDetailList
[
0
].
wantQuantity
-
0
params
.
wantGoodsDetailList
[
0
].
wantQuantity
-
0
)
{
)
{
Toast
(
'基地
审批数
量不能大于本次要货数量'
)
Toast
(
'基地
协助
量不能大于本次要货数量'
)
return
return
}
}
}
}
if
(
this
.
isShowWarZone
&&
this
.
taskNode
.
subProcUnitId
===
'warZone'
)
{
if
(
this
.
isShowWarZone
&&
this
.
taskNode
.
subProcUnitId
===
'warZone'
)
{
if
(
this
.
form
.
warAuditQuantity
-
0
<=
0
||
!
Number
(
this
.
form
.
warAuditQuantity
))
{
if
(
this
.
form
.
warAuditQuantity
-
0
<=
0
||
!
Number
(
this
.
form
.
warAuditQuantity
))
{
Toast
(
'请正确填写战区
审批
量'
)
Toast
(
'请正确填写战区
协助
量'
)
return
return
}
else
if
(
this
.
form
.
warAuditQuantity
-
0
>
this
.
form
.
baseAuditQuantity
-
0
)
{
}
else
if
(
this
.
form
.
warAuditQuantity
-
0
>
this
.
form
.
baseAuditQuantity
-
0
)
{
Toast
(
'战区
审批数
量不能大于本次要货数量'
)
Toast
(
'战区
协助
量不能大于本次要货数量'
)
return
return
}
}
}
}
...
@@ -598,10 +625,10 @@ export default {
...
@@ -598,10 +625,10 @@ export default {
this
.
form
.
salecenterAuditQuantity
-
0
<=
0
||
this
.
form
.
salecenterAuditQuantity
-
0
<=
0
||
!
Number
(
this
.
form
.
salecenterAuditQuantity
)
!
Number
(
this
.
form
.
salecenterAuditQuantity
)
)
{
)
{
Toast
(
'请正确填写内勤
审批
量'
)
Toast
(
'请正确填写内勤
协助
量'
)
return
return
}
else
if
(
this
.
form
.
salecenterAuditQuantity
-
0
>
this
.
form
.
warAuditQuantity
-
0
)
{
}
else
if
(
this
.
form
.
salecenterAuditQuantity
-
0
>
this
.
form
.
warAuditQuantity
-
0
)
{
Toast
(
'销售内勤
审批数
量不能大于本次要货数量'
)
Toast
(
'销售内勤
协助
量不能大于本次要货数量'
)
return
return
}
}
}
}
...
@@ -679,23 +706,6 @@ export default {
...
@@ -679,23 +706,6 @@ export default {
1
:
'是'
1
:
'是'
}[
val
*
1
]
}[
val
*
1
]
},
},
findFirstApprovalNode
()
{
const
data
=
this
.
tablePathData
if
(
!
Array
.
isArray
(
data
)
||
data
.
length
===
0
)
{
return
null
}
let
startIndex
=
1
if
(
data
.
length
>
1
&&
data
[
1
].
subProcUnitId
===
'shunt'
)
{
startIndex
=
2
}
for
(
let
i
=
startIndex
;
i
<
data
.
length
;
i
++
)
{
const
node
=
data
[
i
]
if
(
node
)
{
return
node
}
}
return
null
},
onClickLeft
()
{
onClickLeft
()
{
window
.
opener
=
null
window
.
opener
=
null
window
.
open
(
''
,
'_self'
,
''
)
window
.
open
(
''
,
'_self'
,
''
)
...
@@ -916,6 +926,15 @@ export default {
...
@@ -916,6 +926,15 @@ export default {
line-height
:
22px
;
line-height
:
22px
;
color
:
#333
;
color
:
#333
;
}
}
:deep
(
.van-field
)
{
.van-cell__title
{
flex
:
0
0
140px
;
white-space
:
nowrap
;
}
.van-cell__value
{
flex
:
1
;
}
}
}
}
.approval-block
{
.approval-block
{
display
:
flex
;
display
:
flex
;
...
...
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