Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
admin
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
d7427bf4
authored
Feb 14, 2024
by
YunaiV
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
✨
ERP:付款单 50%(详情)
parent
aa964e17
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
422 additions
and
3 deletions
+422
-3
src/views/erp/finance/payment/FinancePaymentForm.vue
+279
-0
src/views/erp/finance/payment/components/FinancePaymentItemForm.vue
+140
-0
src/views/erp/finance/payment/index.vue
+3
-3
No files found.
src/views/erp/finance/payment/FinancePaymentForm.vue
0 → 100644
View file @
d7427bf4
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisible"
width=
"1080"
>
<el-form
ref=
"formRef"
:model=
"formData"
:rules=
"formRules"
label-width=
"100px"
v-loading=
"formLoading"
:disabled=
"disabled"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"8"
>
<el-form-item
label=
"付款单号"
prop=
"no"
>
<el-input
disabled
v-model=
"formData.no"
placeholder=
"保存时自动生成"
/>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"付款时间"
prop=
"paymentTime"
>
<el-date-picker
v-model=
"formData.paymentTime"
type=
"date"
value-format=
"x"
placeholder=
"选择付款时间"
class=
"!w-1/1"
/>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"供应商"
prop=
"supplierId"
>
<el-select
v-model=
"formData.supplierId"
clearable
filterable
placeholder=
"请选择供应商"
class=
"!w-1/1"
>
<el-option
v-for=
"item in supplierList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"财务人员"
prop=
"financeUserId"
>
<el-select
v-model=
"formData.financeUserId"
clearable
filterable
placeholder=
"请选择财务人员"
class=
"!w-1/1"
>
<el-option
v-for=
"item in userList"
:key=
"item.id"
:label=
"item.nickname"
:value=
"item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"16"
>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
type=
"textarea"
v-model=
"formData.remark"
:rows=
"1"
placeholder=
"请输入备注"
/>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"附件"
prop=
"fileUrl"
>
<UploadFile
:is-show-tip=
"false"
v-model=
"formData.fileUrl"
:limit=
"1"
/>
</el-form-item>
</el-col>
</el-row>
<!-- 子表的表单 -->
<ContentWrap>
<el-tabs
v-model=
"subTabsName"
class=
"-mt-15px -mb-10px"
>
<el-tab-pane
label=
"采购入库、退货单"
name=
"item"
>
<FinancePaymentItemForm
ref=
"itemFormRef"
:items=
"formData.items"
:disabled=
"disabled"
/>
</el-tab-pane>
</el-tabs>
</ContentWrap>
<el-row
:gutter=
"20"
>
<el-col
:span=
"8"
>
<el-form-item
label=
"付款账户"
prop=
"accountId"
>
<el-select
v-model=
"formData.accountId"
clearable
filterable
placeholder=
"请选择结算账户"
class=
"!w-1/1"
>
<el-option
v-for=
"item in accountList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"合计付款"
prop=
"totalPrice"
>
<el-input
disabled
v-model=
"formData.totalPrice"
:formatter=
"erpPriceInputFormatter"
/>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"优惠金额"
prop=
"discountPrice"
>
<el-input-number
v-model=
"formData.discountPrice"
controls-position=
"right"
:precision=
"2"
placeholder=
"请输入优惠金额"
class=
"!w-1/1"
/>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"实际付款"
>
<el-input
disabled
v-model=
"formData.paymentPrice"
:formatter=
"erpPriceInputFormatter"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading"
v-if=
"!disabled"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
import
{
FinancePaymentApi
,
FinancePaymentVO
}
from
'@/api/erp/finance/payment'
import
FinancePaymentItemForm
from
'./components/FinancePaymentItemForm.vue'
import
{
SupplierApi
,
SupplierVO
}
from
'@/api/erp/purchase/supplier'
import
{
erpPriceInputFormatter
,
erpPriceMultiply
}
from
'@/utils'
import
*
as
UserApi
from
'@/api/system/user'
import
{
AccountApi
,
AccountVO
}
from
'@/api/erp/finance/account'
/** ERP 付款单表单 */
defineOptions
({
name
:
'FinancePaymentForm'
})
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
const
dialogVisible
=
ref
(
false
)
// 弹窗的是否展示
const
dialogTitle
=
ref
(
''
)
// 弹窗的标题
const
formLoading
=
ref
(
false
)
// 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
const
formType
=
ref
(
''
)
// 表单的类型:create - 新增;update - 修改;detail - 详情
const
formData
=
ref
({
id
:
undefined
,
supplierId
:
undefined
,
accountId
:
undefined
,
financeUserId
:
undefined
,
paymentTime
:
undefined
,
remark
:
undefined
,
fileUrl
:
''
,
totalPrice
:
0
,
discountPrice
:
0
,
paymentPrice
:
0
,
items
:
[],
no
:
undefined
// 订单单号,后端返回
})
const
formRules
=
reactive
({
supplierId
:
[{
required
:
true
,
message
:
'供应商不能为空'
,
trigger
:
'blur'
}],
paymentTime
:
[{
required
:
true
,
message
:
'订单时间不能为空'
,
trigger
:
'blur'
}]
})
const
disabled
=
computed
(()
=>
formType
.
value
===
'detail'
)
const
formRef
=
ref
()
// 表单 Ref
const
supplierList
=
ref
<
SupplierVO
[]
>
([])
// 供应商列表
const
accountList
=
ref
<
AccountVO
[]
>
([])
// 账户列表
const
userList
=
ref
<
UserApi
.
UserVO
[]
>
([])
// 用户列表
/** 子表的表单 */
const
subTabsName
=
ref
(
'item'
)
const
itemFormRef
=
ref
()
/** 计算 discountPrice、totalPrice 价格 */
watch
(
()
=>
formData
.
value
,
(
val
)
=>
{
if
(
!
val
)
{
return
}
const
totalPrice
=
val
.
items
.
reduce
((
prev
,
curr
)
=>
prev
+
curr
.
totalPrice
,
0
)
const
discountPrice
=
val
.
discountPercent
!=
null
?
erpPriceMultiply
(
totalPrice
,
val
.
discountPercent
/
100.0
)
:
0
formData
.
value
.
discountPrice
=
discountPrice
formData
.
value
.
totalPrice
=
totalPrice
-
discountPrice
},
{
deep
:
true
}
)
/** 打开弹窗 */
const
open
=
async
(
type
:
string
,
id
?:
number
)
=>
{
dialogVisible
.
value
=
true
dialogTitle
.
value
=
t
(
'action.'
+
type
)
formType
.
value
=
type
resetForm
()
// 修改时,设置数据
if
(
id
)
{
formLoading
.
value
=
true
try
{
formData
.
value
=
await
FinancePaymentApi
.
getFinancePayment
(
id
)
}
finally
{
formLoading
.
value
=
false
}
}
// 加载供应商列表
supplierList
.
value
=
await
SupplierApi
.
getSupplierSimpleList
()
// 加载用户列表
userList
.
value
=
await
UserApi
.
getSimpleUserList
()
// 加载账户列表
accountList
.
value
=
await
AccountApi
.
getAccountSimpleList
()
const
defaultAccount
=
accountList
.
value
.
find
((
item
)
=>
item
.
defaultStatus
)
if
(
defaultAccount
)
{
formData
.
value
.
accountId
=
defaultAccount
.
id
}
}
defineExpose
({
open
})
// 提供 open 方法,用于打开弹窗
/** 提交表单 */
const
emit
=
defineEmits
([
'success'
])
// 定义 success 事件,用于操作成功后的回调
const
submitForm
=
async
()
=>
{
// 校验表单
await
formRef
.
value
.
validate
()
await
itemFormRef
.
value
.
validate
()
// 提交请求
formLoading
.
value
=
true
try
{
const
data
=
formData
.
value
as
unknown
as
FinancePaymentVO
if
(
formType
.
value
===
'create'
)
{
await
FinancePaymentApi
.
createFinancePayment
(
data
)
message
.
success
(
t
(
'common.createSuccess'
))
}
else
{
await
FinancePaymentApi
.
updateFinancePayment
(
data
)
message
.
success
(
t
(
'common.updateSuccess'
))
}
dialogVisible
.
value
=
false
// 发送操作成功的事件
emit
(
'success'
)
}
finally
{
formLoading
.
value
=
false
}
}
/** 重置表单 */
const
resetForm
=
()
=>
{
formData
.
value
=
{
id
:
undefined
,
supplierId
:
undefined
,
accountId
:
undefined
,
financeUserId
:
undefined
,
paymentTime
:
undefined
,
remark
:
undefined
,
fileUrl
:
undefined
,
totalPrice
:
0
,
discountPrice
:
0
,
paymentPrice
:
0
,
items
:
[],
no
:
undefined
}
formRef
.
value
?.
resetFields
()
}
</
script
>
src/views/erp/finance/payment/components/FinancePaymentItemForm.vue
0 → 100644
View file @
d7427bf4
<
template
>
<el-form
ref=
"formRef"
:model=
"formData"
:rules=
"formRules"
v-loading=
"formLoading"
label-width=
"0px"
:inline-message=
"true"
:disabled=
"disabled"
>
<el-table
:data=
"formData"
show-summary
:summary-method=
"getSummaries"
class=
"-mt-10px"
>
<el-table-column
label=
"序号"
type=
"index"
align=
"center"
width=
"60"
/>
<el-table-column
label=
"采购单据编号"
min-width=
"200"
>
<template
#
default=
"
{ row }">
<el-form-item
class=
"mb-0px!"
>
<el-input
disabled
v-model=
"row.bizNo"
/>
</el-form-item>
</
template
>
</el-table-column>
<el-table-column
label=
"应付金额"
prop=
"totalPrice"
fixed=
"right"
min-width=
"100"
>
<
template
#
default=
"{ row }"
>
<el-form-item
class=
"mb-0px!"
>
<el-input
disabled
v-model=
"row.totalPrice"
:formatter=
"erpPriceInputFormatter"
/>
</el-form-item>
</
template
>
</el-table-column>
<el-table-column
label=
"已付金额"
prop=
"paidPrice"
fixed=
"right"
min-width=
"100"
>
<
template
#
default=
"{ row }"
>
<el-form-item
class=
"mb-0px!"
>
<el-input
disabled
v-model=
"row.paidPrice"
:formatter=
"erpPriceInputFormatter"
/>
</el-form-item>
</
template
>
</el-table-column>
<el-table-column
label=
"本次付款"
prop=
"paymentPrice"
fixed=
"right"
min-width=
"115"
>
<
template
#
default=
"{ row, $index }"
>
<el-form-item
:prop=
"`$
{$index}.paymentPrice`" class="mb-0px!">
<el-input-number
v-model=
"row.paymentPrice"
controls-position=
"right"
:min=
"0"
:precision=
"2"
class=
"!w-100%"
/>
</el-form-item>
</
template
>
</el-table-column>
<el-table-column
label=
"备注"
min-width=
"150"
>
<
template
#
default=
"{ row, $index }"
>
<el-form-item
:prop=
"`$
{$index}.remark`" class="mb-0px!">
<el-input
v-model=
"row.remark"
placeholder=
"请输入备注"
/>
</el-form-item>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
fixed=
"right"
label=
"操作"
width=
"60"
>
<
template
#
default=
"{ $index }"
>
<el-button
@
click=
"handleDelete($index)"
link
>
—
</el-button>
</
template
>
</el-table-column>
</el-table>
</el-form>
<el-row
justify=
"center"
class=
"mt-3"
v-if=
"!disabled"
>
<el-button
@
click=
"handleAdd"
round
>
+ 添加采购入库单
</el-button>
<el-button
@
click=
"handleAdd"
round
>
+ 添加采购退货单
</el-button>
</el-row>
</template>
<
script
setup
lang=
"ts"
>
import
{
ProductApi
,
ProductVO
}
from
'@/api/erp/product/product'
import
{
StockApi
}
from
'@/api/erp/stock/stock'
import
{
erpCountInputFormatter
,
erpPriceInputFormatter
,
erpPriceMultiply
,
getSumValue
}
from
'@/utils'
const
props
=
defineProps
<
{
items
:
undefined
disabled
:
false
}
>
()
const
formLoading
=
ref
(
false
)
// 表单的加载中
const
formData
=
ref
([])
const
formRules
=
reactive
({
paymentPrice
:
[{
required
:
true
,
message
:
'本次付款不能为空'
,
trigger
:
'blur'
}]
})
const
formRef
=
ref
([])
// 表单 Ref
const
productList
=
ref
<
ProductVO
[]
>
([])
// 产品列表
/** 初始化设置入库项 */
watch
(
()
=>
props
.
items
,
async
(
val
)
=>
{
formData
.
value
=
val
},
{
immediate
:
true
}
)
/** 合计 */
const
getSummaries
=
(
param
:
SummaryMethodProps
)
=>
{
const
{
columns
,
data
}
=
param
const
sums
:
string
[]
=
[]
columns
.
forEach
((
column
,
index
:
number
)
=>
{
if
(
index
===
0
)
{
sums
[
index
]
=
'合计'
return
}
if
([
'totalPrice'
,
'paidPrice'
,
'paymentPrice'
].
includes
(
column
.
property
))
{
const
sum
=
getSumValue
(
data
.
map
((
item
)
=>
Number
(
item
[
column
.
property
])))
sums
[
index
]
=
erpPriceInputFormatter
(
sum
)
}
else
{
sums
[
index
]
=
''
}
})
return
sums
}
/** 新增按钮操作 */
const
handleAdd
=
()
=>
{
const
row
=
{
id
:
undefined
,
totalPrice
:
undefined
,
paidPrice
:
undefined
,
paymentPrice
:
undefined
,
totalPrice
:
undefined
,
remark
:
undefined
}
formData
.
value
.
push
(
row
)
}
/** 删除按钮操作 */
const
handleDelete
=
(
index
:
number
)
=>
{
formData
.
value
.
splice
(
index
,
1
)
}
/** 表单校验 */
const
validate
=
()
=>
{
return
formRef
.
value
.
validate
()
}
defineExpose
({
validate
})
</
script
>
src/views/erp/finance/payment/index.vue
View file @
d7427bf4
...
...
@@ -255,7 +255,7 @@
</ContentWrap>
<!-- 表单弹窗:添加/修改 -->
<
!-- <PurchaseOrderForm ref="formRef" @success="getList" />--
>
<
FinancePaymentForm
ref=
"formRef"
@
success=
"getList"
/
>
</template>
<
script
setup
lang=
"ts"
>
...
...
@@ -263,10 +263,10 @@ import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import
{
dateFormatter2
}
from
'@/utils/formatTime'
import
download
from
'@/utils/download'
import
{
FinancePaymentApi
,
FinancePaymentVO
}
from
'@/api/erp/finance/payment'
// import PurchaseOrderForm from './PurchaseOrder
Form.vue'
import
FinancePaymentForm
from
'./FinancePayment
Form.vue'
import
{
UserVO
}
from
'@/api/system/user'
import
*
as
UserApi
from
'@/api/system/user'
import
{
erp
CountTableColumnFormatter
,
erp
PriceTableColumnFormatter
}
from
'@/utils'
import
{
erpPriceTableColumnFormatter
}
from
'@/utils'
import
{
SupplierApi
,
SupplierVO
}
from
'@/api/erp/purchase/supplier'
import
{
AccountApi
,
AccountVO
}
from
'@/api/erp/finance/account'
...
...
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