Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
薪
薪瑞通-前端
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
许珑标
薪瑞通-前端
Commits
b85e5e87
Commit
b85e5e87
authored
Feb 14, 2025
by
许珑标
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
批量支付功能(不含重新支付版)
parent
eca2e0c3
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
961 additions
and
18 deletions
+961
-18
public/收款人明细模板.xlsx
public/收款人明细模板.xlsx
+0
-0
src/api/business/payDetail.js
src/api/business/payDetail.js
+53
-0
src/api/business/payOrder.js
src/api/business/payOrder.js
+62
-0
src/views/business/accInfo/index.vue
src/views/business/accInfo/index.vue
+4
-4
src/views/business/outPersonal/index.vue
src/views/business/outPersonal/index.vue
+0
-3
src/views/business/payDetail/index.vue
src/views/business/payDetail/index.vue
+223
-0
src/views/business/payOrder/batchToBank.vue
src/views/business/payOrder/batchToBank.vue
+387
-0
src/views/business/payOrder/index.vue
src/views/business/payOrder/index.vue
+221
-0
src/views/business/payOutDetail/index.vue
src/views/business/payOutDetail/index.vue
+5
-5
src/views/business/payOutDetail/list.vue
src/views/business/payOutDetail/list.vue
+5
-5
src/views/business/payOutRecord/index.vue
src/views/business/payOutRecord/index.vue
+1
-1
No files found.
public/收款人明细模板.xlsx
0 → 100644
View file @
b85e5e87
File added
src/api/business/payDetail.js
0 → 100644
View file @
b85e5e87
import
request
from
'
@/utils/request
'
// 查询 批量支付明细列表
export
function
listPayDetail
(
query
)
{
return
request
({
url
:
'
/business/payOrder/detail/list
'
,
method
:
'
get
'
,
params
:
query
})
}
// 查询 批量支付明细所有列表
export
function
listAllPayDetail
(
query
)
{
return
request
({
url
:
'
/business/payDetail/listAll
'
,
method
:
'
get
'
,
params
:
query
})
}
// 查询 批量支付明细详细
export
function
getPayDetail
(
id
)
{
return
request
({
url
:
'
/business/payDetail/getInfo/
'
+
id
,
method
:
'
get
'
})
}
// 新增 批量支付明细
export
function
addPayDetail
(
data
)
{
return
request
({
url
:
'
/business/payDetail/add
'
,
method
:
'
post
'
,
data
:
data
})
}
// 修改 批量支付明细
export
function
updatePayDetail
(
data
)
{
return
request
({
url
:
'
/business/payDetail/edit
'
,
method
:
'
post
'
,
data
:
data
})
}
// 删除 批量支付明细
export
function
delPayDetail
(
id
)
{
return
request
({
url
:
'
/business/payDetail/remove/
'
+
id
,
method
:
'
get
'
})
}
src/api/business/payOrder.js
0 → 100644
View file @
b85e5e87
import
request
from
'
@/utils/request
'
// 查询批量支付列表
export
function
listPayOrder
(
query
)
{
return
request
({
url
:
'
/business/payOrder/list
'
,
method
:
'
get
'
,
params
:
query
})
}
// 查询批量支付所有列表
export
function
listAllPayOrder
(
query
)
{
return
request
({
url
:
'
/business/payOrder/listAll
'
,
method
:
'
get
'
,
params
:
query
})
}
// 查询批量支付详细
export
function
getPayOrder
(
id
)
{
return
request
({
url
:
'
/business/payOrder/getInfo/
'
+
id
,
method
:
'
get
'
})
}
// 新增批量支付
export
function
addPayOrder
(
data
)
{
return
request
({
url
:
'
/business/payOrder/add
'
,
method
:
'
post
'
,
data
:
data
})
}
// 修改批量支付
export
function
updatePayOrder
(
data
)
{
return
request
({
url
:
'
/business/payOrder/edit
'
,
method
:
'
post
'
,
data
:
data
})
}
// 删除批量支付
export
function
delPayOrder
(
id
)
{
return
request
({
url
:
'
/business/payOrder/remove/
'
+
id
,
method
:
'
get
'
})
}
// 查看支付明细凭证
export
function
detailVoucherView
(
id
)
{
return
request
({
url
:
'
/business/payOrder/detail/voucher/view/
'
+
id
,
method
:
'
get
'
})
}
src/views/business/accInfo/index.vue
View file @
b85e5e87
...
...
@@ -70,10 +70,10 @@
<el-option
v-for=
"item in payerCompanyArr"
:key=
"item.id"
:value=
"item.id"
:label=
"item.companyName"
/>
</el-select>
</el-form-item>
<!-- <el-form-item label="归属客户" prop="deptId">--
>
<!-- <el-cascader :props="cascaderProps" v-model="form.deptId" :options="deptOptions">--
>
<!-- </el-cascader>--
>
<!-- </el-form-item>--
>
<el-form-item
label=
"归属客户"
prop=
"deptId"
>
<el-cascader
:props=
"cascaderProps"
v-model=
"form.deptId"
:options=
"deptOptions"
>
</el-cascader
>
</el-form-item
>
<el-form-item
label=
"发薪账户"
prop=
"payAccNo"
>
<el-input
v-model=
"form.payAccNo"
placeholder=
"请输入发薪账户"
/>
</el-form-item>
...
...
src/views/business/outPersonal/index.vue
View file @
b85e5e87
...
...
@@ -156,11 +156,8 @@ export default {
upload
:
{
// 是否显示弹出层(用户导入)
open
:
false
,
// 弹出层标题(用户导入)
title
:
""
,
// 是否禁用上传
isUploading
:
false
,
// 是否更新已经存在的用户数据
uploadRadio
:
1
,
// 设置上传的请求头部
headers
:
{
Authorization
:
"
Bearer
"
+
getToken
()
},
...
...
src/views/business/payDetail/index.vue
0 → 100644
View file @
b85e5e87
<
template
>
<div
class=
"app-container"
>
<el-form
:model=
"queryParams"
ref=
"queryForm"
size=
"small"
:inline=
"true"
v-show=
"showSearch"
label-width=
"120px"
>
<el-form-item
label=
"明细流水号"
prop=
"bizNo"
>
<el-input
v-model=
"queryParams.bizNo"
placeholder=
"请输入明细流水号"
clearable
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"支付类型"
prop=
"payTitle"
>
<el-select
v-model=
"queryParams.payTitle"
placeholder=
"请选择支付类型"
@
change=
"handleQuery"
clearable
>
<el-option
v-for=
"dict in dict.type.pay_type_title"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"支付备注"
prop=
"payRemark"
>
<el-input
v-model=
"queryParams.payRemark"
placeholder=
"请输入支付备注"
clearable
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"收款账户名"
prop=
"payeeAccName"
>
<el-input
v-model=
"queryParams.payeeAccName"
placeholder=
"请输入收款账户名"
clearable
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"收款账号"
prop=
"payeeAccNo"
>
<el-input
v-model=
"queryParams.payeeAccNo"
placeholder=
"请输入收款账号"
clearable
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
icon=
"el-icon-search"
size=
"mini"
@
click=
"handleQuery"
>
搜索
</el-button>
<el-button
icon=
"el-icon-refresh"
size=
"mini"
@
click=
"resetQuery"
>
重置
</el-button>
</el-form-item>
</el-form>
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-col
:span=
"1.5"
>
<el-button
type=
"warning"
icon=
"el-icon-download"
size=
"mini"
@
click=
"handleExport"
v-hasPermi=
"['business:payDetail:export']"
>
导出
</el-button>
</el-col>
<right-toolbar
:showSearch.sync=
"showSearch"
@
queryTable=
"getList"
></right-toolbar>
</el-row>
<el-table
v-loading=
"loading"
:data=
"payDetailList"
>
<el-table-column
type=
"selection"
width=
"55"
align=
"center"
/>
<el-table-column
label=
"明细流水号"
align=
"center"
prop=
"bizNo"
/>
<el-table-column
label=
"支付类型"
align=
"center"
prop=
"payTitle"
/>
<el-table-column
label=
"收款账户"
align=
"center"
>
<el-table-column
label=
"户名"
align=
"center"
prop=
"payeeAccName"
/>
<el-table-column
label=
"账户"
align=
"center"
prop=
"payeeAccNo"
/>
<el-table-column
label=
"类型"
align=
"center"
prop=
"payeeAccType"
>
<template
slot-scope=
"scope"
>
<el-row>
<el-col
:span=
"12"
>
<dict-tag
:options=
"dict.type.payee_acc_type"
:value=
"scope.row.payeeAccType"
/>
</el-col>
<el-col
:span=
"12"
>
<el-tag
v-if=
"scope.row.isPrivateAcc && scope.row.isPrivateAcc === 1"
>
对私账户
</el-tag>
<el-tag
v-if=
"scope.row.isPrivateAcc && scope.row.isPrivateAcc === 2"
>
对公账户
</el-tag>
</el-col>
</el-row>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"交易金额"
align=
"center"
prop=
"amount"
/>
<el-table-column
label=
"手续费"
align=
"center"
prop=
"transFee"
/>
<el-table-column
label=
"支付状态"
align=
"center"
prop=
"payStatus"
>
<
template
slot-scope=
"scope"
>
<dict-tag
:options=
"dict.type.pay_status"
:value=
"scope.row.payStatus"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"交易完成时间"
align=
"center"
prop=
"transactionTime"
width=
"180"
>
<
template
slot-scope=
"scope"
>
<span>
{{
parseTime
(
scope
.
row
.
transactionTime
)
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"备注"
align=
"center"
prop=
"payRemark"
/>
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
>
<
template
slot-scope=
"scope"
>
<el-button
v-if=
"scope.row.payStatus && 3 === scope.row.payStatus"
size=
"mini"
type=
"text"
icon=
"el-icon-s-check"
@
click=
"voucherView(scope.row)"
>
查看凭证
</el-button>
<el-button
v-if=
"scope.row.payStatus && 4 === scope.row.payStatus && scope.row.failReason"
size=
"mini"
type=
"text"
icon=
"el-icon-s-check"
@
click=
"failReasonView(scope.row)"
>
失败原因
</el-button>
</
template
>
</el-table-column>
</el-table>
<pagination
v-show=
"total>0"
:total=
"total"
:page.sync=
"queryParams.pageNum"
:limit.sync=
"queryParams.pageSize"
@
pagination=
"getList"
/>
</div>
</template>
<
script
>
import
{
listPayDetail
}
from
"
@/api/business/payDetail
"
;
import
{
detailVoucherView
}
from
'
@/api/business/payOrder
'
export
default
{
name
:
"
PayDetail
"
,
dicts
:
[
'
pay_status
'
,
'
pay_type_title
'
,
'
payee_acc_type
'
],
data
()
{
return
{
// 根路径
baseURL
:
process
.
env
.
VUE_APP_BASE_API
,
// 遮罩层
loading
:
true
,
// 选中数组
ids
:
[],
// 非单个禁用
single
:
true
,
// 非多个禁用
multiple
:
true
,
// 显示搜索条件
showSearch
:
true
,
// 总条数
total
:
0
,
// 批量支付明细表格数据
payDetailList
:
[],
// 弹出层标题
title
:
""
,
// 是否显示弹出层
open
:
false
,
// 查询参数
queryParams
:
{
pageNum
:
1
,
pageSize
:
10
,
bizNo
:
null
,
outBizNo
:
null
,
payTitle
:
null
,
payRemark
:
null
,
payeeAccName
:
null
,
payeeAccNo
:
null
,
payeeAccType
:
null
,
isPrivateAcc
:
null
,
transactionTime
:
null
,
amount
:
null
,
transFee
:
null
,
payStatus
:
null
,
failReason
:
null
,
voucher
:
null
,
deptId
:
null
,
},
};
},
created
()
{
},
mounted
()
{
if
(
this
.
$route
.
query
.
orderId
)
{
this
.
queryParams
.
orderId
=
this
.
$route
.
query
.
orderId
}
this
.
getList
();
},
methods
:
{
/** 查询 批量支付明细列表 */
getList
()
{
this
.
loading
=
true
;
listPayDetail
(
this
.
queryParams
).
then
(
response
=>
{
this
.
payDetailList
=
response
.
rows
;
this
.
total
=
response
.
total
;
this
.
loading
=
false
;
});
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
();
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
resetForm
(
"
queryForm
"
);
this
.
handleQuery
();
},
/** 导出按钮操作 */
handleExport
()
{
this
.
download
(
'
business/payDetail/export
'
,
{
...
this
.
queryParams
},
`payDetail_
${
new
Date
().
getTime
()}
.xlsx`
)
},
voucherView
(
row
)
{
this
.
$modal
.
loading
(
"
正在处理...
"
)
detailVoucherView
(
row
.
id
).
then
(
resp
=>
{
if
(
200
===
resp
.
code
)
{
window
.
open
(
resp
.
data
)
}
}).
finally
(()
=>
{
this
.
$modal
.
closeLoading
()
})
},
failReasonView
(
row
)
{
this
.
$alert
(
row
.
failReason
,
'
交易失败原因
'
,
{
confirmButtonText
:
'
确定
'
,
});
}
}
};
</
script
>
src/views/business/payOrder/batchToBank.vue
0 → 100644
View file @
b85e5e87
<
template
>
<div
class=
"app-container"
>
<div
style=
"padding:20px 10px 10px 10px;box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04)"
>
<el-form
ref=
"batchForm"
:model=
"batchForm"
:rules=
"batchRules"
label-width=
"120px"
>
<el-row
:gutter=
"10"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"支付名称"
prop=
"batchPayName"
>
<el-input
v-model=
"batchForm.batchPayName"
placeholder=
"请输入支付名称"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"支付类型"
prop=
"payTitle"
>
<el-select
v-model=
"batchForm.payTitle"
placeholder=
"请选择支付类型"
>
<el-option
v-for=
"dict in dict.type.pay_type_title"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"付款账号"
prop=
"payerAccNo"
>
<el-select
v-model=
"batchForm.payerAccNo"
placeholder=
"请选择付款账号"
>
<el-option
v-for=
"item in payAccList"
:key=
"item.id"
:label=
"item.payAccNo + ' -- ' + item.companyName"
:value=
"item.payAccNo"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"备注"
prop=
"payRemark"
>
<el-input
v-model=
"batchForm.payRemark"
placeholder=
"请输入支付备注"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div
style=
"padding:10px;margin-top:20px;box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04)"
>
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-col
:span=
"1.5"
>
<el-button
type=
"primary"
icon=
"el-icon-plus"
size=
"mini"
@
click=
"handleAdd"
>
新增
</el-button>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
type=
"danger"
icon=
"el-icon-delete"
size=
"mini"
:disabled=
"multiple"
@
click=
"handleDelete"
>
删除
</el-button>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
type=
"info"
icon=
"el-icon-upload2"
@
click=
"importClick"
v-hasPermi=
"['business:outPersonal:add']"
>
导入
</el-button>
</el-col>
</el-row>
<el-table
v-loading=
"loading"
:data=
"transList"
@
selection-change=
"handleSelectionChange"
:height=
"640"
:summary-method=
"getSummaries"
:key=
"formTableKey"
:highlight-current-row=
"true"
show-summary
:highlight-selection-row=
"true"
:stripe=
"true"
>
<el-table-column
type=
"selection"
width=
"55"
align=
"center"
/>
<el-table-column
label=
"收款账户"
align=
"center"
>
<el-table-column
label=
"户名"
align=
"center"
prop=
"payeeAccName"
/>
<el-table-column
label=
"账户"
align=
"center"
prop=
"payeeAccNo"
/>
<el-table-column
label=
"类型"
align=
"center"
prop=
"payeeAccType"
>
<template
slot-scope=
"scope"
>
<el-row>
<el-col
:span=
"12"
>
<dict-tag
:options=
"dict.type.payee_acc_type"
:value=
"scope.row.payeeAccType"
/>
</el-col>
<el-col
:span=
"12"
>
<el-tag
v-if=
"scope.row.isPrivateAcc && scope.row.isPrivateAcc === 1"
>
对私账户
</el-tag>
<el-tag
v-if=
"scope.row.isPrivateAcc && scope.row.isPrivateAcc === 2"
>
对公账户
</el-tag>
</el-col>
</el-row>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"支付金额"
align=
"center"
prop=
"amount"
/>
<el-table-column
label=
"支付类型"
align=
"center"
prop=
"payTitle"
/>
<el-table-column
label=
"备注"
align=
"center"
prop=
"payRemark"
/>
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
>
<
template
slot-scope=
"scope"
>
<el-button
size=
"mini"
type=
"text"
icon=
"el-icon-delete"
@
click=
"handleDelete(scope.$index, 'delRow')"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
<el-row
:gutter=
"10"
class=
"mb8"
style=
"margin-top: 15px"
>
<el-col
:span=
"1.5"
style=
"float: right"
>
<span
v-if=
"this.transList"
>
明细条数: {{ this.transList.length }} 条
</span>
<el-button
style=
"margin-left: 100px"
type=
"primary"
icon=
"el-icon-s-promotion"
size=
"mini"
@
click=
"confirmPay"
>
确认支付
</el-button>
</el-col>
</el-row>
</div>
<!-- 添加或修改 批量支付明细对话框 -->
<el-dialog
title=
"新增收款人"
:visible.sync=
"addPanelOpen"
width=
"600px"
append-to-body
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"120px"
>
<el-form-item
label=
"支付类型"
prop=
"payTitle"
>
<el-select
v-model=
"form.payTitle"
placeholder=
"请选择支付类型"
>
<el-option
v-for=
"dict in dict.type.pay_type_title"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"收款人户名"
prop=
"payeeAccName"
>
<el-input
v-model=
"form.payeeAccName"
placeholder=
"请输入收款人户名"
/>
</el-form-item>
<el-form-item
label=
"收款人账户"
prop=
"payeeAccNo"
>
<el-input
v-model=
"form.payeeAccNo"
placeholder=
"请输入收款人账户"
/>
</el-form-item>
<el-form-item
label=
"收款账户类型"
prop=
"payeeAccType"
>
<el-select
v-model=
"form.payeeAccType"
placeholder=
"请选择收款账户类型"
disabled
>
<el-option
v-for=
"dict in dict.type.payee_acc_type"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value * 1"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"公户/私户"
prop=
"isPrivateAcc"
>
<el-select
v-model=
"form.isPrivateAcc"
placeholder=
"请选择收款账户类型"
disabled
>
<el-option
label=
"对私账户"
:value=
"1"
/>
<el-option
label=
"对公账户"
:value=
"2"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"金额"
prop=
"amount"
>
<el-input-number
style=
"width: 100%"
v-model=
"form.amount"
:precision=
"2"
:step=
"0.1"
placeholder=
"请输入支付金额"
/>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"payRemark"
>
<el-input
v-model=
"form.payRemark"
placeholder=
"请输入支付备注"
/>
</el-form-item>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"addDetail"
>
确 定
</el-button>
<el-button
@
click=
"addPanelOpen = false"
>
取 消
</el-button>
</div>
</el-dialog>
<!-- 导入对话框 -->
<el-dialog
title=
"导入人员信息"
:visible.sync=
"upload.open"
width=
"400px"
append-to-body
>
<el-upload
ref=
"upload"
:limit=
"1"
accept=
".xlsx, .xls"
:headers=
"upload.headers"
:action=
"upload.url + '?templateType=' + upload.uploadRadio"
:disabled=
"upload.isUploading"
:on-progress=
"handleFileUploadProgress"
:on-success=
"handleFileSuccess"
:auto-upload=
"false"
drag
>
<i
class=
"el-icon-upload"
></i>
<div
class=
"el-upload__text"
>
将文件拖到此处,或
<em>
点击上传
</em></div>
<div
class=
"el-upload__tip text-center"
slot=
"tip"
>
<!-- <div class="el-upload__tip" slot="tip">-->
<!-- <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据 -->
<!-- </div>-->
<span>
仅允许导入xls、xlsx格式文件。
</span>
<a
style=
"color:#1890ff;margin:0px;line-height:14px"
class=
"download"
download=
"收款人明细模板"
href=
"/收款人明细模板.xlsx"
target=
"_blank"
>
下载模板
</a>
</div>
</el-upload>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"importByExcel"
>
确 定
</el-button>
<el-button
@
click=
"upload.open = false"
>
取 消
</el-button>
</div>
</el-dialog>
</div>
</template>
<
script
>
import
{
listAllAccInfo
}
from
'
@/api/business/accInfo
'
import
{
getToken
}
from
'
@/utils/auth
'
import
{
addPayOrder
}
from
'
@/api/business/payOrder
'
export
default
{
name
:
"
batchToBank
"
,
dicts
:
[
'
pay_type_title
'
,
'
payee_acc_type
'
],
data
()
{
return
{
formTableKey
:
1
,
upload
:
{
// 是否显示弹出层(用户导入)
open
:
false
,
// 是否禁用上传
isUploading
:
false
,
// 设置上传的请求头部
headers
:
{
Authorization
:
"
Bearer
"
+
getToken
()
},
// 上传的地址
url
:
process
.
env
.
VUE_APP_BASE_API
+
"
/business/payOrder/detail/importByExcel
"
},
indexList
:
[],
payAccList
:
[],
batchForm
:
{},
batchRules
:
{
payTitle
:
[
{
required
:
true
,
message
:
"
支付类型不能为空
"
,
trigger
:
"
blur
"
}
],
batchPayName
:
[
{
required
:
true
,
message
:
"
支付名称不能为空
"
,
trigger
:
"
blur
"
}
],
payerAccNo
:
[
{
required
:
true
,
message
:
"
请选择付款账号
"
,
trigger
:
"
blur
"
}
],
},
addPanelOpen
:
false
,
// 非多个禁用
multiple
:
true
,
loading
:
false
,
transList
:
[],
form
:
{
},
rules
:
{
payTitle
:
[
{
required
:
true
,
message
:
"
支付类型不能为空
"
,
trigger
:
"
blur
"
}
],
payeeAccName
:
[
{
required
:
true
,
message
:
"
收款人户名不能为空
"
,
trigger
:
"
blur
"
}
],
payeeAccNo
:
[
{
required
:
true
,
message
:
"
收款人账户不能为空
"
,
trigger
:
"
blur
"
}
],
payeeAccType
:
[
{
required
:
true
,
message
:
"
请选择收款账户类型
"
,
trigger
:
"
blur
"
}
],
amount
:
[
{
required
:
true
,
message
:
"
转账金额不能为空
"
,
trigger
:
"
blur
"
},
{
validator
:
(
rule
,
value
,
callback
)
=>
{
if
(
value
<
0.01
)
{
callback
(
new
Error
(
'
转账金额必须大于0
'
));
}
else
{
callback
();
}
},
trigger
:
'
blur
'
}
],
}
};
},
created
()
{
},
mounted
()
{
this
.
getPayAccList
()
},
methods
:
{
getPayAccList
()
{
listAllAccInfo
().
then
(
resp
=>
{
if
(
resp
.
code
==
200
)
{
this
.
payAccList
=
resp
.
data
}
})
},
// 新增明细
handleAdd
()
{
this
.
addPanelOpen
=
true
this
.
form
=
{
amount
:
0
,
payeeAccType
:
1
,
isPrivateAcc
:
1
}
if
(
this
.
batchForm
.
payTitle
)
{
this
.
form
.
payTitle
=
this
.
batchForm
.
payTitle
}
},
// 删除明细
handleDelete
(
index
,
pStr
)
{
this
.
$confirm
(
'
确定执行删除操作吗?
'
,
'
提示
'
,
{
confirmButtonText
:
'
确定
'
,
cancelButtonText
:
'
取消
'
,
type
:
'
warning
'
}).
then
(()
=>
{
if
(
pStr
&&
pStr
===
'
delRow
'
)
{
this
.
transList
.
splice
(
index
,
1
)
}
else
if
(
this
.
indexList
&&
this
.
indexList
.
length
>
0
)
{
let
transMap
=
new
Map
();
this
.
transList
.
forEach
((
item
,
_index
)
=>
{
transMap
.
set
(
_index
,
item
)
})
this
.
indexList
.
forEach
(
item
=>
{
transMap
.
delete
(
item
)
})
this
.
transList
=
[...
transMap
.
values
()]
this
.
indexList
=
[];
}
this
.
formTableKey
+=
1
}).
catch
(()
=>
{});
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
indexList
=
[]
selection
.
map
(
item
=>
{
this
.
indexList
.
push
(
this
.
transList
.
findIndex
(
dataItem
=>
dataItem
===
item
))
});
this
.
single
=
selection
.
length
!==
1
this
.
multiple
=
!
selection
.
length
},
addDetail
()
{
this
.
$refs
[
"
form
"
].
validate
(
valid
=>
{
if
(
valid
)
{
this
.
transList
.
push
(
this
.
form
)
this
.
addPanelOpen
=
false
}
this
.
formTableKey
+=
1
});
},
importClick
()
{
this
.
$refs
[
"
batchForm
"
].
validate
(
valid
=>
{
if
(
valid
)
{
this
.
upload
.
open
=
true
}
});
},
handleFileUploadProgress
(
event
,
file
,
fileList
)
{
this
.
upload
.
isUploading
=
true
;
},
// 文件上传成功处理
handleFileSuccess
(
response
,
file
,
fileList
)
{
this
.
upload
.
open
=
false
;
this
.
upload
.
isUploading
=
false
;
this
.
$refs
.
upload
.
clearFiles
();
this
.
$alert
(
"
<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>
"
+
response
.
msg
+
"
</div>
"
,
"
导入结果
"
,
{
dangerouslyUseHTMLString
:
true
});
if
(
response
.
data
&&
response
.
data
.
length
>
0
)
{
response
.
data
.
forEach
((
item
,
index
)
=>
{
this
.
transList
.
push
({
payTitle
:
this
.
batchForm
.
payTitle
,
payeeAccName
:
item
.
payeeAccName
,
payeeAccNo
:
item
.
payeeAccNo
,
payeeAccType
:
1
,
isPrivateAcc
:
1
,
amount
:
item
.
amount
,
payRemark
:
item
.
payRemark
})
})
}
this
.
formTableKey
+=
1
},
importByExcel
()
{
this
.
$refs
.
upload
.
submit
();
},
getSummaries
(
param
)
{
const
{
columns
,
data
}
=
param
;
const
sums
=
[];
columns
.
forEach
((
column
,
index
)
=>
{
if
(
index
===
0
)
{
sums
[
index
]
=
'
合计
'
;
return
;
}
else
if
(
index
===
4
)
{
const
values
=
data
.
map
(
item
=>
Number
(
item
[
column
.
property
]));
if
(
!
values
.
every
(
value
=>
isNaN
(
value
)))
{
sums
[
index
]
=
values
.
reduce
((
prev
,
curr
)
=>
{
const
value
=
Number
(
curr
);
if
(
!
isNaN
(
value
))
{
return
prev
+
curr
;
}
else
{
return
prev
;
}
},
0
);
sums
[
index
]
+=
'
元
'
;
}
else
{
sums
[
index
]
=
'
N/A
'
;
}
}
});
return
sums
;
},
confirmPay
()
{
if
(
!
this
.
transList
)
{
return
this
.
$modal
.
msgWarning
(
"
支付明细列表不能为空!
"
);
}
this
.
$refs
[
"
batchForm
"
].
validate
(
valid
=>
{
if
(
valid
)
{
this
.
$confirm
(
'
确定提交支付吗?
'
,
'
提示
'
,
{
confirmButtonText
:
'
确定
'
,
cancelButtonText
:
'
取消
'
,
type
:
'
warning
'
}).
then
(()
=>
{
this
.
batchForm
.
details
=
this
.
transList
;
addPayOrder
(
this
.
batchForm
).
then
(
resp
=>
{
if
(
200
===
resp
.
code
)
{
this
.
$modal
.
msgSuccess
(
"
操作成功
"
);
this
.
$router
.
push
({
path
:
"
/transfer/record
"
});
}
})
}).
catch
(()
=>
{});
}
});
}
}
};
</
script
>
src/views/business/payOrder/index.vue
0 → 100644
View file @
b85e5e87
<
template
>
<div
class=
"app-container"
>
<el-form
:model=
"queryParams"
ref=
"queryForm"
size=
"small"
:inline=
"true"
v-show=
"showSearch"
label-width=
"100px"
>
<el-form-item
label=
"支付名称"
prop=
"batchPayName"
>
<el-input
v-model=
"queryParams.batchPayName"
placeholder=
"请输入支付名称"
clearable
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"付款账户名"
prop=
"payerAccName"
>
<el-input
v-model=
"queryParams.payerAccName"
placeholder=
"请输入付款账户名"
clearable
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"付款账号"
prop=
"payerAccNo"
>
<el-input
v-model=
"queryParams.payerAccNo"
placeholder=
"请输入付款账号"
clearable
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"流水号"
prop=
"batchNo"
>
<el-input
v-model=
"queryParams.batchNo"
placeholder=
"流水号"
clearable
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"支付类型"
prop=
"payTitle"
>
<el-select
v-model=
"queryParams.payTitle"
placeholder=
"请选择支付类型"
@
change=
"handleQuery"
clearable
>
<el-option
v-for=
"dict in dict.type.pay_type_title"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"支付状态"
prop=
"payTitle"
>
<el-select
v-model=
"queryParams.payTitle"
placeholder=
"请选择支付状态"
@
change=
"handleQuery"
clearable
>
<el-option
v-for=
"dict in dict.type.pay_status"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"支付备注"
prop=
"payRemark"
>
<el-input
v-model=
"queryParams.payRemark"
placeholder=
"请输入支付备注"
clearable
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
icon=
"el-icon-search"
size=
"mini"
@
click=
"handleQuery"
>
搜索
</el-button>
<el-button
icon=
"el-icon-refresh"
size=
"mini"
@
click=
"resetQuery"
>
重置
</el-button>
</el-form-item>
</el-form>
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-col
:span=
"1.5"
>
<el-button
type=
"warning"
icon=
"el-icon-download"
size=
"mini"
@
click=
"handleExport"
v-hasPermi=
"['business:payOrder:export']"
>
导出
</el-button>
</el-col>
<right-toolbar
:showSearch.sync=
"showSearch"
@
queryTable=
"getList"
></right-toolbar>
</el-row>
<el-table
v-loading=
"loading"
:data=
"payOrderList"
height=
"700px"
>
<el-table-column
type=
"selection"
width=
"55"
align=
"center"
/>
<el-table-column
label=
"支付名称"
align=
"center"
prop=
"batchPayName"
/>
<el-table-column
label=
"付款账户"
align=
"center"
>
<template
slot-scope=
"scope"
>
{{
scope
.
row
.
payerAccName
}}
<div>
{{
scope
.
row
.
payerAccNo
}}
</div>
</
template
>
</el-table-column>
<el-table-column
label=
"流水号"
align=
"center"
prop=
"batchNo"
/>
<el-table-column
label=
"支付标题"
align=
"center"
prop=
"payTitle"
/>
<el-table-column
label=
"详情预览"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<p
style=
"margin: 0px;padding: 0px;"
>
批次总笔数:
{{
scope
.
row
.
totalCount
}}
</p>
<p
style=
"margin: 0px;padding: 0px;"
>
批次总金额:
{{
scope
.
row
.
totalAmount
}}
</p>
<p
style=
"margin: 0px;padding: 0px;"
>
打款中笔数:
{{
scope
.
row
.
dealingCount
}}
</p>
<p
style=
"margin: 0px;padding: 0px;"
>
成功笔数:
{{
scope
.
row
.
successCount
}}
</p>
<p
style=
"margin: 0px;padding: 0px;"
>
成功金额:
{{
scope
.
row
.
successAmount
}}
</p>
<p
style=
"margin: 0px;padding: 0px;"
>
失败笔数:
{{
scope
.
row
.
failCount
}}
</p>
<p
style=
"margin: 0px;padding: 0px;"
>
失败金额:
{{
scope
.
row
.
failAmount
}}
</p>
<p
style=
"margin: 0px;padding: 0px;"
>
服务费:
{{
scope
.
row
.
transFee
}}
</p>
</
template
>
</el-table-column>
<el-table-column
label=
"支付状态"
align=
"center"
prop=
"payStatus"
>
<
template
slot-scope=
"scope"
>
<dict-tag
:options=
"dict.type.pay_status"
:value=
"scope.row.payStatus"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"完成时间"
align=
"center"
prop=
"transactionTime"
width=
"180"
>
<
template
slot-scope=
"scope"
>
<span>
{{
parseTime
(
scope
.
row
.
transactionTime
)
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"备注"
align=
"center"
prop=
"payRemark"
/>
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
>
<
template
slot-scope=
"scope"
>
<el-button
size=
"mini"
type=
"text"
icon=
"el-icon-s-order"
@
click=
"viewDetail(scope.row)"
>
查看明细
</el-button>
</
template
>
</el-table-column>
</el-table>
<pagination
v-show=
"total>0"
:total=
"total"
:page.sync=
"queryParams.pageNum"
:limit.sync=
"queryParams.pageSize"
@
pagination=
"getList"
/>
</div>
</template>
<
script
>
import
{
listPayOrder
}
from
"
@/api/business/payOrder
"
;
export
default
{
name
:
"
PayOrder
"
,
dicts
:
[
'
pay_status
'
,
'
pay_type_title
'
],
data
()
{
return
{
// 根路径
baseURL
:
process
.
env
.
VUE_APP_BASE_API
,
// 遮罩层
loading
:
true
,
// 选中数组
ids
:
[],
// 非单个禁用
single
:
true
,
// 非多个禁用
multiple
:
true
,
// 显示搜索条件
showSearch
:
true
,
// 总条数
total
:
0
,
// 批量支付表格数据
payOrderList
:
[],
// 弹出层标题
title
:
""
,
// 是否显示弹出层
open
:
false
,
// 查询参数
queryParams
:
{
pageNum
:
1
,
pageSize
:
10
,
batchPayName
:
null
,
payerCompanyId
:
null
,
payerAccName
:
null
,
payerAccNo
:
null
,
batchNo
:
null
,
outBatchNo
:
null
,
payTitle
:
null
,
payRemark
:
null
,
transactionTime
:
null
,
totalCount
:
null
,
totalAmount
:
null
,
successCount
:
null
,
failCount
:
null
,
successAmount
:
null
,
failAmount
:
null
,
transFee
:
null
,
payStatus
:
null
,
voucher
:
null
,
upateTime
:
null
,
deptId
:
null
,
},
};
},
created
()
{
this
.
getList
();
},
methods
:
{
/** 查询批量支付列表 */
getList
()
{
this
.
loading
=
true
;
listPayOrder
(
this
.
queryParams
).
then
(
response
=>
{
this
.
payOrderList
=
response
.
rows
;
this
.
total
=
response
.
total
;
this
.
loading
=
false
;
});
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
();
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
resetForm
(
"
queryForm
"
);
this
.
handleQuery
();
},
/** 导出按钮操作 */
handleExport
()
{
this
.
download
(
'
business/payOrder/export
'
,
{
...
this
.
queryParams
},
`payOrder_
${
new
Date
().
getTime
()}
.xlsx`
)
},
viewDetail
(
row
)
{
this
.
$router
.
push
({
path
:
"
/business/payDetails
"
,
query
:
{
orderId
:
row
.
id
}
});
}
}
};
</
script
>
src/views/business/payOutDetail/index.vue
View file @
b85e5e87
...
...
@@ -60,7 +60,7 @@
<
el
-
table
-
column
label
=
"
用工单位
"
align
=
"
center
"
prop
=
"
companyName
"
>
<
template
slot
-
scope
=
"
scope
"
>
{{
scope
.
row
.
companyName
}}
<
el
-
tag
>
{{
scope
.
row
.
companyCode
}}
<
/el-tag
>
<
el
-
tag
v
-
if
=
"
scope.row.companyCode
"
>
{{
scope
.
row
.
companyCode
}}
<
/el-tag
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
label
=
"
性别
"
align
=
"
center
"
prop
=
"
gender
"
/>
...
...
@@ -148,10 +148,10 @@
<
/el-table-column
>
<
el
-
table
-
column
label
=
"
操作
"
align
=
"
center
"
fixed
=
"
right
"
width
=
"
110
"
class
-
name
=
"
small-padding fixed-width
"
>
<
template
slot
-
scope
=
"
scope
"
>
<
el
-
button
v
-
if
=
"
scope.row.payStatus && 3 != scope.row.payStatus && 2 != scope.row.payStatus
"
size
=
"
mini
"
type
=
"
text
"
icon
=
"
el-icon-edit
"
@
click
=
"
handleUpdate(scope.row)
"
v
-
hasPermi
=
"
['business:payOutDetail:edit']
"
>
修改
<
/el-button
>
<!--
<
el
-
button
v
-
if
=
"
scope.row.payStatus && 3 != scope.row.payStatus && 2 != scope.row.payStatus
"
size
=
"
mini
"
-->
<!--
type
=
"
text
"
icon
=
"
el-icon-edit
"
@
click
=
"
handleUpdate(scope.row)
"
-->
<!--
v
-
hasPermi
=
"
['business:payOutDetail:edit']
"
>
修改
-->
<!--
<
/el-button>--
>
<
el
-
button
v
-
if
=
"
scope.row.payStatus && 1 == scope.row.payStatus
"
size
=
"
mini
"
type
=
"
text
"
icon
=
"
el-icon-edit
"
@
click
=
"
checkWork(scope.row)
"
v
-
hasPermi
=
"
['business:payOutDetail:edit']
"
>
调整薪资
<
/el-button
>
...
...
src/views/business/payOutDetail/list.vue
View file @
b85e5e87
...
...
@@ -56,7 +56,7 @@
<
el
-
table
-
column
label
=
"
用工单位
"
align
=
"
center
"
prop
=
"
companyName
"
>
<
template
slot
-
scope
=
"
scope
"
>
{{
scope
.
row
.
companyName
}}
<
el
-
tag
>
{{
scope
.
row
.
companyCode
}}
<
/el-tag
>
<
el
-
tag
v
-
if
=
"
scope.row.companyCode
"
>
{{
scope
.
row
.
companyCode
}}
<
/el-tag
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
label
=
"
性别
"
align
=
"
center
"
prop
=
"
gender
"
/>
...
...
@@ -140,10 +140,10 @@
<
/el-table-column
>
<
el
-
table
-
column
label
=
"
操作
"
align
=
"
center
"
width
=
"
110
"
fixed
=
"
right
"
class
-
name
=
"
small-padding fixed-width
"
>
<
template
slot
-
scope
=
"
scope
"
>
<
el
-
button
v
-
if
=
"
scope.row.payStatus && 3 != scope.row.payStatus && 2 != scope.row.payStatus
"
size
=
"
mini
"
type
=
"
text
"
icon
=
"
el-icon-edit
"
@
click
=
"
handleUpdate(scope.row)
"
v
-
hasPermi
=
"
['business:payOutDetail:edit']
"
>
修改
<
/el-button
>
<!--
<
el
-
button
v
-
if
=
"
scope.row.payStatus && 3 != scope.row.payStatus && 2 != scope.row.payStatus
"
size
=
"
mini
"
-->
<!--
type
=
"
text
"
icon
=
"
el-icon-edit
"
@
click
=
"
handleUpdate(scope.row)
"
-->
<!--
v
-
hasPermi
=
"
['business:payOutDetail:edit']
"
>
修改
-->
<!--
<
/el-button>--
>
<
el
-
button
v
-
if
=
"
scope.row.payStatus && 1 == scope.row.payStatus
"
size
=
"
mini
"
type
=
"
text
"
icon
=
"
el-icon-edit
"
@
click
=
"
checkWork(scope.row)
"
v
-
hasPermi
=
"
['business:payOutDetail:edit']
"
>
调整薪资
<
/el-button
>
...
...
src/views/business/payOutRecord/index.vue
View file @
b85e5e87
...
...
@@ -164,7 +164,7 @@
</el-form-item>
<el-form-item
label=
"付款账号"
prop=
"payAccNo"
>
<el-select
v-model=
"payForm.payAccNo"
placeholder=
"请选择"
>
<el-option
v-for=
"item in payAccList"
:key=
"item.id"
:label=
"item.payAccNo"
:value=
"item.payAccNo"
>
<el-option
v-for=
"item in payAccList"
:key=
"item.id"
:label=
"item.payAccNo
+ ' -- ' + item.companyName
"
:value=
"item.payAccNo"
>
</el-option>
</el-select>
</el-form-item>
...
...
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