10
10
<el-row >
11
11
<el-col :span =" 12" >
12
12
<el-form-item label =" 回款编号" prop =" no" >
13
- <el-input v-model =" formData.no" placeholder =" 请输入回款编号 " />
13
+ <el-input disabled v-model =" formData.no" placeholder =" 保存时自动生成 " />
14
14
</el-form-item >
15
15
</el-col >
16
+ <el-col :span =" 12" >
17
+ <el-form-item label =" 负责人" prop =" ownerUserId" >
18
+ <el-select
19
+ v-model =" formData.ownerUserId"
20
+ :disabled =" formType !== 'create'"
21
+ class =" w-1/1"
22
+ >
23
+ <el-option
24
+ v-for =" item in userOptions"
25
+ :key =" item.id"
26
+ :label =" item.nickname"
27
+ :value =" item.id"
28
+ />
29
+ </el-select >
30
+ </el-form-item >
31
+ </el-col >
32
+ </el-row >
33
+ <el-row >
16
34
<el-col :span =" 12" >
17
35
<el-form-item label =" 客户名称" prop =" customerId" >
18
- <el-select v-model =" formData.customerId" class =" w-1/1" placeholder =" 请选择客户" >
36
+ <el-select
37
+ v-model =" formData.customerId"
38
+ :disabled =" formType !== 'create'"
39
+ class =" w-1/1"
40
+ filterable
41
+ @change =" handleCustomerChange"
42
+ placeholder =" 请选择客户"
43
+ >
19
44
<el-option
20
45
v-for =" item in customerList"
21
46
:key =" item.id"
29
54
<el-form-item label =" 合同名称" prop =" contractId" >
30
55
<el-select
31
56
v-model =" formData.contractId"
32
- :disabled =" !formData.customerId"
33
- class =" !w-100%"
57
+ :disabled =" formType !== 'create' || !formData.customerId"
58
+ class =" w-1/1"
59
+ filterable
60
+ @change =" handleContractChange"
34
61
placeholder =" 请选择合同"
35
62
>
36
63
<el-option
37
64
v-for =" data in contractList"
38
65
:key =" data.id"
39
66
:label =" data.name"
40
67
:value =" data.id!"
68
+ :disabled =" data.auditStatus !== 20"
41
69
/>
42
70
</el-select >
43
71
</el-form-item >
44
72
</el-col >
73
+ </el-row >
74
+ <el-row >
45
75
<el-col :span =" 12" >
46
76
<el-form-item label =" 回款期数" prop =" planId" >
47
77
<el-select
48
78
v-model =" formData.planId"
49
- :disabled =" !formData.contractId"
50
- class =" !w-100%"
79
+ :disabled =" formType !== 'create' || !formData.contractId"
80
+ class =" !w-1/1"
81
+ @change =" handleReceivablePlanChange"
51
82
placeholder =" 请选择回款期数"
52
83
>
53
84
<el-option
54
85
v-for =" data in receivablePlanList"
55
86
:key =" data.id"
56
- :label =" data.period + '期'"
87
+ :label =" '第 ' + data.period + ' 期'"
57
88
:value =" data.id!"
58
- />
59
- </el-select >
60
- </el-form-item >
61
- </el-col >
62
- <el-col :span =" 12" >
63
- <el-form-item label =" 负责人" prop =" ownerUserId" >
64
- <el-select v-model =" formData.ownerUserId" clearable placeholder =" 请输入负责人" >
65
- <el-option
66
- v-for =" item in userList"
67
- :key =" item.id"
68
- :label =" item.nickname"
69
- :value =" item.id"
89
+ :disabled =" data.receivableId"
70
90
/>
71
91
</el-select >
72
92
</el-form-item >
73
93
</el-col >
74
94
<el-col :span =" 12" >
75
95
<el-form-item label =" 回款方式" prop =" returnType" >
76
- <el-select v-model =" formData.returnType" placeholder =" 请选择回款方式" >
96
+ <el-select v-model =" formData.returnType" class = " w-1/1 " placeholder =" 请选择回款方式" >
77
97
<el-option
78
98
v-for =" dict in getIntDictOptions(DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE)"
79
99
:key =" dict.value"
83
103
</el-select >
84
104
</el-form-item >
85
105
</el-col >
106
+ </el-row >
107
+ <el-row >
86
108
<el-col :span =" 12" >
87
109
<el-form-item label =" 回款金额" prop =" price" >
88
110
<el-input-number
89
111
v-model =" formData.price"
90
112
class =" !w-100%"
91
113
controls-position =" right"
92
114
placeholder =" 请输入回款金额"
115
+ :min =" 0.01"
116
+ :precision =" 2"
93
117
/>
94
118
</el-form-item >
95
119
</el-col >
103
127
/>
104
128
</el-form-item >
105
129
</el-col >
130
+ </el-row >
131
+ <el-row >
106
132
<el-col :span =" 24" >
107
133
<el-form-item label =" 备注" prop =" remark" >
108
- <el-input
109
- v-model =" formData.remark"
110
- :rows =" 3"
111
- placeholder =" 请输入备注"
112
- type =" textarea"
113
- />
134
+ <el-input v-model =" formData.remark" placeholder =" 请输入备注" type =" textarea" />
114
135
</el-form-item >
115
136
</el-col >
116
137
</el-row >
@@ -129,29 +150,33 @@ import * as CustomerApi from '@/api/crm/customer'
129
150
import * as ContractApi from ' @/api/crm/contract'
130
151
import { useUserStore } from ' @/store/modules/user'
131
152
import { DICT_TYPE , getIntDictOptions } from ' @/utils/dict'
153
+ import form from ' @/components/Form/src/Form.vue'
132
154
133
155
const { t } = useI18n () // 国际化
134
156
const message = useMessage () // 消息弹窗
135
- const userList = ref <UserApi .UserVO []>([]) // 用户列表
157
+ const userOptions = ref <UserApi .UserVO []>([]) // 用户列表
136
158
const dialogVisible = ref (false ) // 弹窗的是否展示
137
159
const dialogTitle = ref (' ' ) // 弹窗的标题
138
160
const formLoading = ref (false ) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
139
161
const formType = ref (' ' ) // 表单的类型:create - 新增;update - 修改
140
162
const formData = ref <ReceivableApi .ReceivableVO >({} as ReceivableApi .ReceivableVO )
141
163
const formRules = reactive ({
142
- no: [{ required: true , message: ' 回款编号不能为空' , trigger: ' blur' }],
143
164
customerId: [{ required: true , message: ' 客户不能为空' , trigger: ' blur' }],
144
165
contractId: [{ required: true , message: ' 合同不能为空' , trigger: ' blur' }],
145
- auditStatus: [{ required: true , message: ' 审批状态不能为空' , trigger: ' blur' }],
146
166
returnTime: [{ required: true , message: ' 回款日期不能为空' , trigger: ' blur' }],
147
167
price: [{ required: true , message: ' 回款金额不能为空' , trigger: ' blur' }]
148
168
})
149
169
const formRef = ref () // 表单 Ref
150
170
const customerList = ref <CustomerApi .CustomerVO []>([]) // 客户列表
151
171
const contractList = ref <ContractApi .ContractVO []>([]) // 合同列表
152
172
const receivablePlanList = ref <ReceivablePlanApi .ReceivablePlanVO []>([]) // 回款计划列表
173
+
153
174
/** 打开弹窗 */
154
- const open = async (type : string , id ? : number , planData ? : ReceivablePlanApi .ReceivablePlanVO ) => {
175
+ const open = async (
176
+ type : string ,
177
+ id ? : number ,
178
+ receivablePlan ? : ReceivablePlanApi .ReceivablePlanVO
179
+ ) => {
155
180
dialogVisible .value = true
156
181
dialogTitle .value = t (' action.' + type )
157
182
formType .value = type
@@ -166,18 +191,20 @@ const open = async (type: string, id?: number, planData?: ReceivablePlanApi.Rece
166
191
}
167
192
}
168
193
// 获得用户列表
169
- userList .value = await UserApi .getSimpleUserList ()
194
+ userOptions .value = await UserApi .getSimpleUserList ()
170
195
// 获得客户列表
171
196
customerList .value = await CustomerApi .getCustomerSimpleList ()
172
197
// 默认新建时选中自己
173
198
if (formType .value === ' create' ) {
174
199
formData .value .ownerUserId = useUserStore ().getUser .id
175
200
}
176
201
// 从回款计划创建回款
177
- if (planData ) {
178
- formData .value .customerId = planData .customerId
179
- formData .value .contractId = planData .contractId
180
- formData .value .planId = planData .id
202
+ if (receivablePlan ) {
203
+ formData .value .customerId = receivablePlan .customerId
204
+ formData .value .contractId = receivablePlan .contractId
205
+ formData .value .planId = receivablePlan .id
206
+ formData .value .price = receivablePlan .price
207
+ formData .value .returnType = receivablePlan .returnType
181
208
}
182
209
}
183
210
defineExpose ({ open }) // 提供 open 方法,用于打开弹窗
@@ -214,53 +241,47 @@ const resetForm = () => {
214
241
formRef .value ?.resetFields ()
215
242
}
216
243
217
- const getContractList = async (customerId : number ) => {
218
- contractList .value = await ContractApi .getContractSimpleList (customerId )
219
- }
220
- const getReceivablePlanList = async (contractId : number ) => {
221
- receivablePlanList .value = await ReceivablePlanApi .getReceivablePlanListByContractId (
222
- formData .value .customerId ,
223
- contractId
224
- )
244
+ /** 处理切换客户 */
245
+ const handleCustomerChange = async (customerId : number ) => {
246
+ // 重置合同编号
247
+ formData .value .contractId = undefined
248
+ // 获得合同列表
249
+ if (customerId ) {
250
+ contractList .value = []
251
+ contractList .value = await ContractApi .getContractSimpleList (customerId )
252
+ }
225
253
}
226
- watch (
227
- () => formData .value .customerId ,
228
- (newVal ) => {
229
- if (! newVal ) {
230
- return
254
+
255
+ /** 处理切换合同 */
256
+ const handleContractChange = async (contractId : number ) => {
257
+ // 重置回款计划编号
258
+ formData .value .planId = undefined
259
+ if (contractId ) {
260
+ // 获得回款计划列表
261
+ receivablePlanList .value = []
262
+ receivablePlanList .value = await ReceivablePlanApi .getReceivablePlanSimpleList (
263
+ formData .value .customerId ,
264
+ contractId
265
+ )
266
+ // 设置金额
267
+ const contract = contractList .value .find ((item ) => item .id === contractId )
268
+ if (contract ) {
269
+ // TODO @芋艿:后续可以改成未还款金额
270
+ formData .value .price = contract .totalPrice
231
271
}
232
- getContractList (newVal )
233
- },
234
- {
235
- immediate: true
236
272
}
237
- )
238
- watch (
239
- () => formData .value .contractId ,
240
- (newVal ) => {
241
- if (! newVal ) {
242
- return
243
- }
244
- getReceivablePlanList (newVal )
245
- },
246
- {
247
- immediate: true
273
+ }
274
+
275
+ /** 处理切换回款计划 */
276
+ const handleReceivablePlanChange = (planId : number ) => {
277
+ if (! planId ) {
278
+ return
248
279
}
249
- )
250
- watch (
251
- () => formData .value .planId ,
252
- (newVal ) => {
253
- if (! newVal ) {
254
- return
255
- }
256
- const receivablePlan = receivablePlanList .value .find ((item ) => item .id === newVal )
257
- if (! receivablePlan ) {
258
- return
259
- }
260
- // 只有没有金额的时候才设置
261
- if (! formData .value .price || formData .value .price === 0 ) {
262
- formData .value .price = receivablePlan .price
263
- }
280
+ const receivablePlan = receivablePlanList .value .find ((item ) => item .id === planId )
281
+ if (! receivablePlan ) {
282
+ return
264
283
}
265
- )
284
+ formData .value .price = receivablePlan .price
285
+ formData .value .returnType = receivablePlan .returnType
286
+ }
266
287
</script >
0 commit comments