Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
jiedao-app-operator-master
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
lanbaoming
jiedao-app-operator-master
Commits
4b10e7d5
Commit
4b10e7d5
authored
Mar 28, 2025
by
Smile
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
需求160 后台-批量费用申请
parent
20b47d3f
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
154 additions
and
53 deletions
+154
-53
cons.js
src/api/ecw/cons.js
+8
-0
consFee.js
src/api/ecw/consFee.js
+8
-0
detail.vue
src/views/bpm/processInstance/detail.vue
+6
-0
BatchFeeApplicationCons.vue
src/views/ecw/cons/components/BatchFeeApplicationCons.vue
+28
-50
BatchUpdateFeeApproval.vue
src/views/ecw/cons/components/BatchUpdateFeeApproval.vue
+83
-0
index.vue
src/views/ecw/cons/index.vue
+21
-3
No files found.
src/api/ecw/cons.js
View file @
4b10e7d5
...
...
@@ -103,6 +103,14 @@ export function getConsPage(query) {
params
:
query
})
}
// 获得集运包裹列表
export
function
getConsList
(
query
)
{
return
request
({
url
:
"
/ecw/cons/list
"
,
method
:
"
get
"
,
params
:
query
})
}
// 导出集运包裹主 Excel
export
function
exportConsExcel
(
query
)
{
...
...
src/api/ecw/consFee.js
View file @
4b10e7d5
...
...
@@ -51,6 +51,14 @@ export function createFeeBatchApplication(data) {
data
:
data
})
}
// 批量申请批量费用
export
function
createBatchFeeApplication
(
data
)
{
return
request
({
url
:
"
/ecw/cons-fee/batch/create
"
,
method
:
"
post
"
,
data
:
data
})
}
// 导出包裹费用 Excel
export
function
exportConsFeeExcel
(
query
)
{
...
...
src/views/bpm/processInstance/detail.vue
View file @
4b10e7d5
...
...
@@ -129,6 +129,7 @@ import MergeDetail from "@/views/ecw/order/components/MergeDetail"
import
CargoControlDetail
from
"
@/views/ecw/order/components/CargoControlDetail
"
import
BoxSplitDetail
from
"
@/views/ecw/order/components/BoxSplitDetail
"
import
UpdateFeeApproval
from
"
@/views/ecw/cons/components/UpdateFeeApproval
"
import
BatchUpdateFeeApproval
from
"
@/views/ecw/cons/components/BatchUpdateFeeApproval
"
import
retiredWarehouseApproval
from
"
@/views/ecw/cons/retiredWarehouseApproval
"
import
consExitApproval
from
"
@/views/ecw/cons/consExitApproval
"
...
...
@@ -144,6 +145,7 @@ export default {
MergeDetail
,
CargoControlDetail
,
UpdateFeeApproval
,
BatchUpdateFeeApproval
,
retiredWarehouseApproval
,
consExitApproval
,
BoxSplitDetail
...
...
@@ -499,6 +501,10 @@ export default {
component
:
"
updateFeeApproval
"
,
id
:
this
.
processInstance
.
id
},
ecw_batch_cons_fee_apply
:
{
component
:
"
batchUpdateFeeApproval
"
,
id
:
this
.
processInstance
.
id
},
ecw_cons_retired_warehouse
:
{
component
:
"
retiredWarehouseApproval
"
,
id
:
this
.
processInstance
.
id
...
...
src/views/ecw/cons/components/BatchFeeApplicationCons.vue
View file @
4b10e7d5
...
...
@@ -9,17 +9,17 @@
"
>
<div
class=
"fee-application"
>
<h1>
{{
$t
(
"
费用申请
"
)
}}
-
{{
consDetails
.
consNum
}}
</h1>
<h1>
{{
$t
(
"
批量费用申请
"
)
}}
</h1>
<el-divider></el-divider>
<el-form
label-width=
"100px"
inline
>
<el-form-item
:label=
"$t('发货人') + ':'"
>
<div
class=
"content"
>
{{
consDetails
.
consignorVO
?
consDetails
.
consignorVO
.
name
:
""
}}
<h3>
{{
$t
(
'
包裹信息
'
)
}}
</h3>
<el-form-item>
<div
v-for=
"item in consDetails"
class=
"content"
>
{{
item
.
expressNo
}}
-
{{
item
.
consNum
}}
-
{{
item
.
customerNumber
}}{{
item
.
customerName
?
'
-
'
+
item
.
customerName
:
''
}}
</div>
</el-form-item>
<el-form-item>
<el-button
:disabled=
"!!processInstanceId "
@
click=
"addCost"
>
{{
$t
(
"
添加申请
"
)
}}
</el-button>
...
...
@@ -103,20 +103,20 @@
<!--el-button type="text" v-if="scope.row.status == 1" @click="examineFn">
{{
$t
(
'
审核中
'
)
}}
</el-button-->
<el-button
type=
"text"
v-if=
"scope.row.id
&& modifable(scope.row)
"
v-if=
"scope.row.id"
@
click=
"modify(scope.row)"
>
{{
$t
(
"
修改
"
)
}}
</el-button
>
<el-button
type=
"text"
v-if=
"scope.row.editMode
&& !processInstanceId
"
v-if=
"scope.row.editMode"
@
click=
"del(scope.$index)"
>
删除
</el-button>
<el-button
type=
"text"
v-if=
"scope.row.status === 0
&& !processInstanceId
"
v-if=
"scope.row.status === 0"
@
click=
"del(scope.$index)"
>
删除
</el-button>
...
...
@@ -124,34 +124,17 @@
</el-table-column>
</el-table>
<div
style=
"padding: 20px"
>
<work-flow
xmlkey=
"
fr
ee_apply"
v-model=
"selectedUsers"
/>
<work-flow
xmlkey=
"
ecw_batch_cons_f
ee_apply"
v-model=
"selectedUsers"
/>
</div>
<div
style=
"text-align: center; margin-top: 20px"
>
<el-button
type=
"primary"
v-if=
"!processInstanceId"
style=
"margin-right: 30px"
:disabled=
"!feeList.length && !editMode"
@
click=
"submit"
>
{{ $t("提交") }}
</el-button
>
<el-button
type=
"primary"
v-if=
"processInstanceId"
style=
"margin-right: 30px"
@
click=
"goProcessDetail"
>
{{ $t("审核中") }}
</el-button
>
<el-button
type=
"primary"
v-if=
"processInstanceId"
style=
"margin-right: 30px"
@
click=
"cancel"
>
{{ $t("取消审核") }}
</el-button
>
<el-button
@
click=
"$emit('update:dialogVisible', false)"
>
{{
$t("返回")
}}
...
...
@@ -170,15 +153,21 @@ import {
}
from
"
@/api/ecw/order
"
import
{
getDictDatas
,
DICT_TYPE
}
from
"
@/utils/dict
"
import
workFlow
from
"
@/components/WorkFlow
"
import
{
getCons
}
from
"
@/api/ecw/cons
"
import
{
createFeeBatchApplication
,
getConsFeeList
}
from
"
@/api/ecw/consFee
"
import
{
getCons
,
getConsList
}
from
"
@/api/ecw/cons
"
import
{
createBatchFeeApplication
,
createFeeBatchApplication
,
getConsFeeList
}
from
"
@/api/ecw/consFee
"
import
{
getConsApprovalList
}
from
"
@/api/ecw/consApproval
"
import
{
getCostList
}
from
"
@/api/ecw/box
"
;
export
default
{
name
:
"
batchFeeApplication
"
,
components
:
{
workFlow
},
props
:
{
consId
:
[
Number
,
String
],
consIds
:
{
type
:
Array
,
default
()
{
return
[]
}
},
dialogVisible
:
{
type
:
Boolean
,
default
:
false
...
...
@@ -190,6 +179,7 @@ export default {
consDetails
:
{},
// 费用列表
list
:
[],
historyList
:[],
// 审核ID,没有则表示不在审核中
processInstanceId
:
null
,
DICT_TYPE
,
...
...
@@ -214,37 +204,25 @@ export default {
editMode
()
{
return
!!
this
.
currentItem
},
modifable
()
{
return
(
item
)
=>
{
// 审核中不允许修改
if
(
this
.
processInstanceId
)
return
false
// 有未提交的不允许修改
// if (this.feeList.length) return false;
// 修改中的不允许修改
if
(
item
.
editMode
)
return
false
return
true
}
}
},
created
()
{
this
.
getDictDatas
(
this
.
DICT_TYPE
.
AUDIT_STATUS
).
forEach
((
e
)
=>
{
this
.
STATUS
[
e
.
value
]
=
e
.
label
})
getCons
(
this
.
consId
).
then
((
res
)
=>
{
getCons
List
({
ids
:
this
.
consIds
.
join
(
'
,
'
)}
).
then
((
res
)
=>
{
this
.
consDetails
=
res
.
data
})
// 查询是否有审核中的费用申请
getConsApprovalList
({
consId
:
this
.
consId
,
approvalType
:
6
,
status
:
1
}).
then
((
res
)
=>
{
getConsApprovalList
({
consId
s
:
this
.
consIds
.
join
(
'
,
'
)
,
approvalType
:
6
,
status
:
1
}).
then
((
res
)
=>
{
if
(
res
.
data
.
length
!=
0
)
{
this
.
processInstanceId
=
res
.
data
[
0
].
formId
this
.
list
=
JSON
.
parse
(
res
.
data
[
0
].
approvalDetail
)
this
.
historyList
=
JSON
.
parse
(
res
.
data
[
0
].
approvalDetail
)
}
else
{
// 查询历史申请
getConsFeeList
({
consId
:
this
.
consId
}).
then
((
res
)
=>
{
console
.
log
(
"
历史申请
"
,
res
.
data
)
this
.
l
ist
=
res
.
data
this
.
historyL
ist
=
res
.
data
})
}
})
...
...
@@ -263,7 +241,7 @@ export default {
addCost
()
{
console
.
log
(
"
添加费用
"
,
this
.
list
)
this
.
list
.
push
({
consId
:
this
.
consId
,
consId
s
:
this
.
consIds
,
feeType
:
undefined
,
//费用申请类型
fee
:
undefined
,
//金额
feeCurrency
:
undefined
,
// 费用申请货币类型
...
...
@@ -311,10 +289,10 @@ export default {
// });
// }
create
FeeBatch
Application
({
consFee
UpdateReqLists
:
this
.
feeList
,
create
BatchFee
Application
({
consFee
ForBatchUpdateReqList
:
this
.
feeList
,
copyUserId
:
this
.
selectedUsers
,
consId
:
this
.
consId
consId
s
:
this
.
consIds
}).
then
((
r
)
=>
{
if
(
r
.
code
===
0
)
{
this
.
$emit
(
"
update:dialogVisible
"
,
false
)
...
...
@@ -377,7 +355,7 @@ export default {
}
.content
{
width
:
2
0
0px
;
width
:
2
5
0px
;
}
}
...
...
src/views/ecw/cons/components/BatchUpdateFeeApproval.vue
0 → 100644
View file @
4b10e7d5
<
template
>
<div>
<div
class=
"title-font"
>
<label>
【
{{
$t
(
"
包裹信息
"
)
}}
】
</label>
</div>
<div
v-for=
"item in consDetails"
class=
"content"
>
{{
item
.
expressNo
}}
-
{{
item
.
consNum
}}
-
{{
item
.
customerNumber
}}{{
item
.
customerName
?
'
-
'
+
item
.
customerName
:
''
}}
</div>
<div
class=
"title-font"
>
<label>
【
{{
$t
(
"
申请理由
"
)
}}
】
</label>
</div>
<div
v-for=
"(item, index) in list"
:key=
"item.id"
style=
"font-size: 14px;"
>
{{
index
+
1
}}
、【
<dict-tag
:type=
"DICT_TYPE.FEE_TYPE"
:value=
"item.feeType"
/>
】,
<dict-tag
:type=
"DICT_TYPE.PAYMENT_TYPE"
:value=
"item.payType"
/>
,
{{
item
.
fee
}}{{
currencyList
.
filter
(
a
=>
a
.
id
==
item
.
feeCurrency
)[
0
].
titleZh
}}
,
{{
$t
(
"
备注
"
)
}}
:
{{
item
.
remarks
}}
</div>
</div>
</
template
>
<
script
>
import
{
getConsApprovalList
}
from
"
@/api/ecw/consApproval
"
import
{
getCurrencyList
}
from
"
@/api/ecw/currency
"
import
{
getCons
,
getConsList
}
from
"
@/api/ecw/cons
"
import
{
getWarehouseList
}
from
"
@/api/ecw/warehouse
"
export
default
{
name
:
"
batchUpdateFeeApproval
"
,
props
:
{
id
:
[
String
]
},
data
()
{
return
{
list
:
[],
consIds
:[],
currencyList
:
[],
consDetails
:[],
warehouseList
:[],
}
},
created
()
{
getWarehouseList
().
then
((
r
)
=>
{
this
.
warehouseList
=
r
.
data
;
});
getCurrencyList
().
then
((
res
)
=>
(
this
.
currencyList
=
res
.
data
))
if
(
this
.
id
)
{
getConsApprovalList
({
formId
:
this
.
id
}).
then
((
res
)
=>
{
if
(
res
.
data
.
length
!=
0
)
{
this
.
list
=
JSON
.
parse
(
res
.
data
[
0
].
approvalDetail
).
consFeeUpdateReqLists
this
.
consIds
=
JSON
.
parse
(
res
.
data
[
0
].
approvalDetail
).
consIds
getConsList
({
ids
:
this
.
consIds
.
join
(
'
,
'
)}).
then
(
res
=>
{
this
.
consDetails
=
res
.
data
})
}
})
}
}
}
</
script
>
<
style
scoped
lang=
"scss"
>
.title
{
padding
:
10px
0
;
span
{
font-size
:
14px
;
font-weight
:
bold
;
}
}
.bold
{
font-weight
:
bold
;
}
.title-font
{
font-size
:
16px
;
font-weight
:
600
;
margin-top
:
10px
;
margin-bottom
:
10px
;
}
</
style
>
src/views/ecw/cons/index.vue
View file @
4b10e7d5
...
...
@@ -139,7 +139,7 @@
<el-button
type=
"success"
plain
icon=
"el-icon-plus"
size=
"mini"
@
click=
"handleTransfer"
>
转运
</el-button>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
type=
"success"
plain
icon=
"el-icon-plus"
size=
"mini"
>
批量申请费用
</el-button>
<el-button
type=
"success"
plain
icon=
"el-icon-plus"
@
click=
"handleBatchApplyCost"
size=
"mini"
>
批量申请费用
</el-button>
</el-col>
<right-toolbar
:showSearch.sync=
"showSearch"
@
queryTable=
"getList"
></right-toolbar>
</el-row>
...
...
@@ -560,8 +560,8 @@
:consId=
"id"
></SpecialNeedsConsLook>
<fee-application-cons
v-if=
"feeApplicationBol"
:consId=
"id"
:currencys=
"JSON.stringify(currencyList)"
:dialog-visible.sync=
"feeApplicationBol "
@
refresh=
"getList"
></fee-application-cons>
<batch-fee-application-cons
v-if=
"
feeApplicationBol"
:consId=
"id
"
:currencys=
"JSON.stringify(currencyList)"
:dialog-visible.sync=
"
f
eeApplicationBol "
@
refresh=
"getList"
></batch-fee-application-cons>
<batch-fee-application-cons
v-if=
"
batchFeeApplicationBol"
:consIds=
"consIds
"
:currencys=
"JSON.stringify(currencyList)"
:dialog-visible.sync=
"
batchF
eeApplicationBol "
@
refresh=
"getList"
></batch-fee-application-cons>
<ConsFollowupEdit
:showConsFollowupEdit.sync=
"showConsFollowupEdit"
:consId=
"id"
@
determine=
"getList"
></ConsFollowupEdit>
<batch-sign-off
:showConsBatchSignOff.sync=
"showConsBatchSignOff"
@
determine=
"getList"
...
...
@@ -720,6 +720,7 @@ export default {
currencyList
:
[],
consNum
:
null
,
feeApplicationBol
:
false
,
batchFeeApplicationBol
:
false
,
mvShow
:
false
,
mediaUrl
:
null
};
...
...
@@ -1011,6 +1012,23 @@ export default {
this
.
showConsBatchEdit
=
true
;
},
handleBatchApplyCost
(){
if
(
!
this
.
consIds
.
length
)
{
return
this
.
$message
.
error
(
this
.
$t
(
'
最少选择一个包裹
'
))
}
// 查找第一个不符合条件的包裹
const
invalidItem
=
this
.
consList
.
find
(
item
=>
// 条件逻辑:允许转运的条件(取反后检测非法项)
!
(
item
.
status
===
1
&&
!
item
.
hasReturnStatus
&&
!
item
.
hasExitApproval
&&
!
item
.
hasAddApproval
)
);
if
(
invalidItem
)
{
return
this
.
$message
.
error
(
this
.
$t
(
'
{consNum}不允许申请,请检查!
'
,
{
consNum
:
invalidItem
.
consNum
})
);
}
this
.
batchFeeApplicationBol
=
true
;
},
handleTransfer
()
{
if
(
!
this
.
consIds
.
length
)
{
return
this
.
$message
.
error
(
this
.
$t
(
'
最少选择一个包裹
'
))
...
...
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