1
1
<template >
2
- <Dialog :title = " dialogTitle " v-model =" dialogVisible" >
2
+ <Dialog v-model =" dialogVisible" :title = " dialogTitle " >
3
3
<el-form
4
4
ref =" formRef"
5
+ v-loading =" formLoading"
5
6
:model =" formData"
6
7
:rules =" formRules"
7
8
label-width =" 100px"
8
- v-loading =" formLoading"
9
9
>
10
- <el-form-item label =" 回款编号" prop =" no" >
11
- <el-input v-model =" formData.no" placeholder =" 请输入回款编号" />
12
- </el-form-item >
13
- <el-form-item label =" 回款计划" prop =" planId" >
14
- <el-input v-model =" formData.planId" placeholder =" 请输入回款计划" />
15
- </el-form-item >
16
- <el-form-item label =" 客户名称" prop =" customerId" >
17
- <el-input v-model =" formData.customerId" placeholder =" 请输入客户名称" />
18
- </el-form-item >
19
- <el-form-item label =" 合同名称" prop =" contractId" >
20
- <el-input v-model =" formData.contractId" placeholder =" 请输入合同名称" />
21
- </el-form-item >
22
- <!-- <el-form-item label="审批状态" prop="checkStatus">
23
- <el-select v-model="formData.checkStatus" placeholder="请选择审批状态">
24
- <el-option
25
- v-for="dict in getIntDictOptions(DICT_TYPE.CRM_RECEIVABLE_CHECK_STATUS)"
26
- :key="dict.value"
27
- :label="dict.label"
28
- :value="dict.value"
29
- />
30
- </el-select>
31
- </el-form-item>-->
32
- <!-- <el-form-item label="工作流编号" prop="processInstanceId">
33
- <el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" />
34
- </el-form-item>-->
35
- <el-form-item label =" 回款日期" prop =" returnTime" >
36
- <el-date-picker
37
- v-model =" formData.returnTime"
38
- type =" date"
39
- value-format =" x"
40
- placeholder =" 选择回款日期"
41
- />
42
- </el-form-item >
43
- <el-form-item label =" 回款方式" prop =" returnType" >
44
- <el-select v-model =" formData.returnType" placeholder =" 请选择回款方式" >
45
- <el-option
46
- v-for =" dict in getStrDictOptions(DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE)"
47
- :key =" dict.value"
48
- :label =" dict.label"
49
- :value =" dict.value"
50
- />
51
- </el-select >
52
- </el-form-item >
53
- <el-form-item label =" 回款金额" prop =" price" >
54
- <el-input-number v-model =" formData.price" placeholder =" 请输入回款金额" />
55
- </el-form-item >
56
- <el-form-item label =" 负责人" prop =" ownerUserId" >
57
- <el-select v-model =" formData.ownerUserId" clearable placeholder =" 请输入负责人" >
58
- <el-option
59
- v-for =" item in userList"
60
- :key =" item.id"
61
- :label =" item.nickname"
62
- :value =" item.id"
63
- />
64
- </el-select >
65
- </el-form-item >
66
- <el-form-item label =" 批次" prop =" batchId" >
67
- <el-input-number v-model =" formData.batchId" placeholder =" 请输入批次" />
68
- </el-form-item >
69
- <el-form-item label =" 显示排序" prop =" sort" >
70
- <el-input-number v-model =" formData.sort" :min =" 0" controls-position =" right" />
71
- </el-form-item >
72
- <!-- <el-form-item label="状态" prop="status">
73
- <el-select v-model="formData.status" placeholder="请选择状态">
74
- <el-option
75
- v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
76
- :key="dict.value"
77
- :label="dict.label"
78
- :value="dict.value"
79
- />
80
- </el-select>
81
- </el-form-item>-->
82
- <el-form-item label =" 备注" prop =" remark" >
83
- <el-input type =" textarea" :rows =" 3" v-model =" formData.remark" placeholder =" 请输入备注" />
84
- </el-form-item >
10
+ <el-row >
11
+ <el-col :span =" 12" >
12
+ <el-form-item label =" 回款编号" prop =" no" >
13
+ <el-input v-model =" formData.no" placeholder =" 请输入回款编号" />
14
+ </el-form-item >
15
+ </el-col >
16
+ <el-col :span =" 12" >
17
+ <el-form-item label =" 客户名称" prop =" customerId" >
18
+ <el-select v-model =" formData.customerId" class =" w-1/1" placeholder =" 请选择客户" >
19
+ <el-option
20
+ v-for =" item in customerList"
21
+ :key =" item.id"
22
+ :label =" item.name"
23
+ :value =" item.id"
24
+ />
25
+ </el-select >
26
+ </el-form-item >
27
+ </el-col >
28
+ <el-col :span =" 12" >
29
+ <el-form-item label =" 合同名称" prop =" contractId" >
30
+ <el-select
31
+ v-model =" formData.contractId"
32
+ :disabled =" !formData.customerId"
33
+ class =" !w-100%"
34
+ placeholder =" 请选择合同"
35
+ >
36
+ <el-option
37
+ v-for =" data in contractList"
38
+ :key =" data.id"
39
+ :label =" data.name"
40
+ :value =" data.id!"
41
+ />
42
+ </el-select >
43
+ </el-form-item >
44
+ </el-col >
45
+ <el-col :span =" 12" >
46
+ <el-form-item label =" 回款期数" prop =" planId" >
47
+ <el-select
48
+ v-model =" formData.planId"
49
+ :disabled =" !formData.contractId"
50
+ class =" !w-100%"
51
+ placeholder =" 请选择回款期数"
52
+ >
53
+ <el-option
54
+ v-for =" data in receivablePlanList"
55
+ :key =" data.id"
56
+ :label =" data.period + '期'"
57
+ :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"
70
+ />
71
+ </el-select >
72
+ </el-form-item >
73
+ </el-col >
74
+ <el-col :span =" 12" >
75
+ <el-form-item label =" 回款方式" prop =" returnType" >
76
+ <el-select v-model =" formData.returnType" placeholder =" 请选择回款方式" >
77
+ <el-option
78
+ v-for =" dict in getStrDictOptions(DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE)"
79
+ :key =" dict.value"
80
+ :label =" dict.label"
81
+ :value =" dict.value"
82
+ />
83
+ </el-select >
84
+ </el-form-item >
85
+ </el-col >
86
+ <el-col :span =" 12" >
87
+ <el-form-item label =" 回款金额" prop =" price" >
88
+ <el-input-number
89
+ v-model =" formData.price"
90
+ class =" !w-100%"
91
+ controls-position =" right"
92
+ placeholder =" 请输入回款金额"
93
+ />
94
+ </el-form-item >
95
+ </el-col >
96
+ <el-col :span =" 12" >
97
+ <el-form-item label =" 回款日期" prop =" returnTime" >
98
+ <el-date-picker
99
+ v-model =" formData.returnTime"
100
+ placeholder =" 选择回款日期"
101
+ type =" date"
102
+ value-format =" x"
103
+ />
104
+ </el-form-item >
105
+ </el-col >
106
+ <el-col :span =" 24" >
107
+ <el-form-item label =" 备注" prop =" remark" >
108
+ <el-input
109
+ v-model =" formData.remark"
110
+ :rows =" 3"
111
+ placeholder =" 请输入备注"
112
+ type =" textarea"
113
+ />
114
+ </el-form-item >
115
+ </el-col >
116
+ </el-row >
85
117
</el-form >
86
118
<template #footer >
87
- <el-button @click = " submitForm " type =" primary" :disabled = " formLoading " >确 定</el-button >
119
+ <el-button :disabled = " formLoading " type =" primary" @click = " submitForm " >确 定</el-button >
88
120
<el-button @click =" dialogVisible = false" >取 消</el-button >
89
121
</template >
90
122
</Dialog >
91
123
</template >
92
- <script setup lang="ts">
93
- import { DICT_TYPE , getIntDictOptions , getStrDictOptions } from ' @/utils/dict '
124
+ <script lang="ts" setup >
125
+ import * as ReceivablePlanApi from ' @/api/crm/receivable/plan '
94
126
import * as ReceivableApi from ' @/api/crm/receivable'
95
127
import * as UserApi from ' @/api/system/user'
128
+ import * as CustomerApi from ' @/api/crm/customer'
129
+ import * as ContractApi from ' @/api/crm/contract'
130
+ import { useUserStore } from ' @/store/modules/user'
131
+ import { DICT_TYPE , getStrDictOptions } from ' @/utils/dict'
96
132
97
133
const { t } = useI18n () // 国际化
98
134
const message = useMessage () // 消息弹窗
@@ -101,29 +137,19 @@ const dialogVisible = ref(false) // 弹窗的是否展示
101
137
const dialogTitle = ref (' ' ) // 弹窗的标题
102
138
const formLoading = ref (false ) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
103
139
const formType = ref (' ' ) // 表单的类型:create - 新增;update - 修改
104
- const formData = ref ({
105
- id: undefined ,
106
- no: undefined ,
107
- planId: undefined ,
108
- customerId: undefined ,
109
- contractId: undefined ,
110
- checkStatus: undefined ,
111
- processInstanceId: undefined ,
112
- returnTime: undefined ,
113
- returnType: undefined ,
114
- price: undefined ,
115
- ownerUserId: undefined ,
116
- batchId: undefined ,
117
- sort: undefined ,
118
- dataScope: undefined ,
119
- dataScopeDeptIds: undefined ,
120
- status: undefined ,
121
- remark: undefined
140
+ const formData = ref <ReceivableApi .ReceivableVO >({} as ReceivableApi .ReceivableVO )
141
+ const formRules = reactive ({
142
+ no: [{ required: true , message: ' 回款编号不能为空' , trigger: ' blur' }],
143
+ customerId: [{ required: true , message: ' 客户不能为空' , trigger: ' blur' }],
144
+ contractId: [{ required: true , message: ' 合同不能为空' , trigger: ' blur' }],
145
+ auditStatus: [{ required: true , message: ' 审批状态不能为空' , trigger: ' blur' }],
146
+ returnTime: [{ required: true , message: ' 回款日期不能为空' , trigger: ' blur' }],
147
+ price: [{ required: true , message: ' 回款金额不能为空' , trigger: ' blur' }]
122
148
})
123
- // const formRules = reactive({
124
- // status: [{ required: true, message: '状态不能为空', trigger: 'change' }]
125
- // })
126
149
const formRef = ref () // 表单 Ref
150
+ const customerList = ref <CustomerApi .CustomerVO []>([]) // 客户列表
151
+ const contractList = ref <ContractApi .ContractVO []>([]) // 合同列表
152
+ const receivablePlanList = ref <ReceivablePlanApi .ReceivablePlanVO []>([]) // 回款计划列表
127
153
128
154
/** 打开弹窗 */
129
155
const open = async (type : string , id ? : number ) => {
@@ -142,6 +168,12 @@ const open = async (type: string, id?: number) => {
142
168
}
143
169
// 获得用户列表
144
170
userList .value = await UserApi .getSimpleUserList ()
171
+ // 获得客户列表
172
+ customerList .value = await CustomerApi .getCustomerSimpleList ()
173
+ // 默认新建时选中自己
174
+ if (formType .value === ' create' ) {
175
+ formData .value .ownerUserId = useUserStore ().getUser .id
176
+ }
145
177
}
146
178
defineExpose ({ open }) // 提供 open 方法,用于打开弹窗
147
179
@@ -173,25 +205,54 @@ const submitForm = async () => {
173
205
174
206
/** 重置表单 */
175
207
const resetForm = () => {
176
- formData .value = {
177
- id: undefined ,
178
- no: undefined ,
179
- planId: undefined ,
180
- customerId: undefined ,
181
- contractId: undefined ,
182
- checkStatus: undefined ,
183
- processInstanceId: undefined ,
184
- returnTime: undefined ,
185
- returnType: undefined ,
186
- price: undefined ,
187
- ownerUserId: undefined ,
188
- batchId: undefined ,
189
- sort: undefined ,
190
- dataScope: undefined ,
191
- dataScopeDeptIds: undefined ,
192
- status: undefined ,
193
- remark: undefined
194
- }
208
+ formData .value = {} as ReceivableApi .ReceivableVO
195
209
formRef .value ?.resetFields ()
196
210
}
211
+
212
+ const getContractList = async (customerId : number ) => {
213
+ contractList .value = await ContractApi .getCrmContractSimpleListByCustomerId (customerId )
214
+ }
215
+ const getReceivablePlanList = async (contractId : number ) => {
216
+ receivablePlanList .value = await ReceivablePlanApi .getReceivablePlanListByContractId (
217
+ formData .value .customerId ,
218
+ contractId
219
+ )
220
+ }
221
+ watch (
222
+ () => formData .value .customerId ,
223
+ (newVal ) => {
224
+ if (! newVal ) {
225
+ return
226
+ }
227
+ getContractList (newVal )
228
+ },
229
+ {
230
+ immediate: true
231
+ }
232
+ )
233
+ watch (
234
+ () => formData .value .contractId ,
235
+ (newVal ) => {
236
+ if (! newVal ) {
237
+ return
238
+ }
239
+ getReceivablePlanList (newVal )
240
+ },
241
+ {
242
+ immediate: true
243
+ }
244
+ )
245
+ watch (
246
+ () => formData .value .planId ,
247
+ (newVal ) => {
248
+ if (! newVal ) {
249
+ return
250
+ }
251
+ const receivablePlan = receivablePlanList .value .find ((item ) => item .id === newVal )
252
+ // 只有没有金额的时候才设置
253
+ if (! formData .value .price || formData .value .price === 0 ) {
254
+ formData .value .price = receivablePlan ! .price
255
+ }
256
+ }
257
+ )
197
258
</script >
0 commit comments