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
- label-width =" 100px"
8
- v-loading =" formLoading"
8
+ label-width =" 110px"
9
9
>
10
- <el-form-item label =" 客户名称" prop =" customerId" >
11
- <el-input v-model =" formData.customerId" placeholder =" 请输入客户名称" />
12
- </el-form-item >
13
- <el-form-item label =" 合同名称" prop =" contractId" >
14
- <el-input v-model =" formData.contractId" placeholder =" 请输入合同名称" />
15
- </el-form-item >
16
- <el-form-item label =" 负责人" prop =" ownerUserId" >
17
- <el-select v-model =" formData.ownerUserId" clearable placeholder =" 请输入负责人" >
18
- <el-option
19
- v-for =" item in userList"
20
- :key =" item.id"
21
- :label =" item.nickname"
22
- :value =" item.id"
23
- />
24
- </el-select >
25
- </el-form-item >
26
- <el-form-item label =" 期数" prop =" period" >
27
- <el-input-number v-model =" formData.period" placeholder =" 请输入期数" />
28
- </el-form-item >
29
- <!-- <el-form-item label="回款ID" prop="receivableId">
30
- <el-input v-model="formData.receivableId" placeholder="请输入回款ID" />
31
- </el-form-item>
32
- <el-form-item label="完成状态" prop="status">
33
- <el-select v-model="formData.status" placeholder="请选择完成状态">
34
- <el-option
35
- v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
36
- :key="dict.value"
37
- :label="dict.label"
38
- :value="dict.value"
39
- />
40
- </el-select>
41
- </el-form-item>
42
- <el-form-item label="审批状态" prop="checkStatus">
43
- <el-select v-model="formData.checkStatus" placeholder="请选择审批状态">
44
- <el-option
45
- v-for="dict in getStrDictOptions(DICT_TYPE.CRM_RECEIVABLE_CHECK_STATUS)"
46
- :key="dict.value"
47
- :label="dict.label"
48
- :value="dict.value"
49
- />
50
- </el-select>
51
- </el-form-item>
52
- <el-form-item label="工作流编号" prop="processInstanceId">
53
- <el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" />
54
- </el-form-item>-->
55
- <el-form-item label =" 计划回款金额" prop =" price" >
56
- <el-input-number v-model =" formData.price" placeholder =" 请输入计划回款金额" />
57
- </el-form-item >
58
- <el-form-item label =" 计划回款日期" prop =" returnTime" >
59
- <el-date-picker
60
- v-model =" formData.returnTime"
61
- type =" date"
62
- value-format =" x"
63
- placeholder =" 选择计划回款日期"
64
- />
65
- </el-form-item >
66
- <el-form-item label =" 提前几天提醒" prop =" remindDays" >
67
- <el-input-number v-model =" formData.remindDays" placeholder =" 请输入提前几天提醒" />
68
- </el-form-item >
69
- <el-form-item label =" 提醒日期" prop =" remindTime" >
70
- <el-date-picker
71
- v-model =" formData.remindTime"
72
- type =" date"
73
- value-format =" x"
74
- placeholder =" 选择提醒日期"
75
- />
76
- </el-form-item >
77
- <el-form-item label =" 显示排序" prop =" sort" >
78
- <el-input-number v-model =" formData.sort" :min =" 0" controls-position =" right" />
79
- </el-form-item >
80
- <el-form-item label =" 备注" prop =" remark" >
81
- <el-input type =" textarea" :rows =" 3" v-model =" formData.remark" placeholder =" 请输入备注" />
82
- </el-form-item >
10
+ <el-row >
11
+ <el-col :span =" 12" >
12
+ <el-form-item label =" 客户名称" prop =" customerId" >
13
+ <el-select v-model =" formData.customerId" class =" w-1/1" placeholder =" 请选择客户" >
14
+ <el-option
15
+ v-for =" item in customerList"
16
+ :key =" item.id"
17
+ :label =" item.name"
18
+ :value =" item.id"
19
+ />
20
+ </el-select >
21
+ </el-form-item >
22
+ </el-col >
23
+ <el-col :span =" 12" >
24
+ <el-form-item label =" 合同名称" prop =" contractId" >
25
+ <el-select
26
+ v-model =" formData.contractId"
27
+ :disabled =" !formData.customerId"
28
+ class =" !w-100%"
29
+ placeholder =" 请选择合同"
30
+ >
31
+ <el-option
32
+ v-for =" data in contractList"
33
+ :key =" data.id"
34
+ :label =" data.name"
35
+ :value =" data.id!"
36
+ />
37
+ </el-select >
38
+ </el-form-item >
39
+ </el-col >
40
+ <el-col :span =" 12" >
41
+ <el-form-item label =" 负责人" prop =" ownerUserId" >
42
+ <el-select v-model =" formData.ownerUserId" clearable placeholder =" 请输入负责人" >
43
+ <el-option
44
+ v-for =" item in userList"
45
+ :key =" item.id"
46
+ :label =" item.nickname"
47
+ :value =" item.id"
48
+ />
49
+ </el-select >
50
+ </el-form-item >
51
+ </el-col >
52
+ <el-col :span =" 12" >
53
+ <el-form-item label =" 计划回款金额" prop =" price" >
54
+ <el-input-number
55
+ v-model =" formData.price"
56
+ class =" !w-100%"
57
+ controls-position =" right"
58
+ placeholder =" 请输入计划回款金额"
59
+ />
60
+ </el-form-item >
61
+ </el-col >
62
+ <el-col :span =" 12" >
63
+ <el-form-item label =" 计划回款日期" prop =" returnTime" >
64
+ <el-date-picker
65
+ v-model =" formData.returnTime"
66
+ placeholder =" 选择计划回款日期"
67
+ type =" date"
68
+ value-format =" x"
69
+ />
70
+ </el-form-item >
71
+ </el-col >
72
+ <el-col :span =" 12" >
73
+ <el-form-item label =" 提前几天提醒" prop =" remindDays" >
74
+ <el-input-number
75
+ v-model =" formData.remindDays"
76
+ class =" !w-100%"
77
+ controls-position =" right"
78
+ placeholder =" 请输入提前几天提醒"
79
+ />
80
+ </el-form-item >
81
+ </el-col >
82
+ <el-col :span =" 12" >
83
+ <el-form-item label =" 提醒日期" prop =" remindTime" >
84
+ <el-date-picker
85
+ v-model =" formData.remindTime"
86
+ placeholder =" 选择提醒日期"
87
+ type =" date"
88
+ value-format =" x"
89
+ />
90
+ </el-form-item >
91
+ </el-col >
92
+ <el-col :span =" 24" >
93
+ <el-form-item label =" 备注" prop =" remark" >
94
+ <el-input
95
+ v-model =" formData.remark"
96
+ :rows =" 3"
97
+ placeholder =" 请输入备注"
98
+ type =" textarea"
99
+ />
100
+ </el-form-item >
101
+ </el-col >
102
+ </el-row >
83
103
</el-form >
84
104
<template #footer >
85
- <el-button @click = " submitForm " type =" primary" :disabled = " formLoading " >确 定</el-button >
105
+ <el-button :disabled = " formLoading " type =" primary" @click = " submitForm " >确 定</el-button >
86
106
<el-button @click =" dialogVisible = false" >取 消</el-button >
87
107
</template >
88
108
</Dialog >
89
109
</template >
90
- <script setup lang="ts">
110
+ <script lang="ts" setup >
91
111
import * as ReceivablePlanApi from ' @/api/crm/receivable/plan'
92
112
import * as UserApi from ' @/api/system/user'
113
+ import * as CustomerApi from ' @/api/crm/customer'
114
+ import * as ContractApi from ' @/api/crm/contract'
115
+ import { useUserStore } from ' @/store/modules/user'
116
+
93
117
const { t } = useI18n () // 国际化
94
118
const message = useMessage () // 消息弹窗
95
119
const userList = ref <UserApi .UserVO []>([]) // 用户列表
96
120
const dialogVisible = ref (false ) // 弹窗的是否展示
97
121
const dialogTitle = ref (' ' ) // 弹窗的标题
98
122
const formLoading = ref (false ) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
99
123
const formType = ref (' ' ) // 表单的类型:create - 新增;update - 修改
100
- const formData = ref ({
101
- id: undefined ,
102
- period: undefined ,
103
- receivableId: undefined ,
104
- status: undefined ,
105
- checkStatus: undefined ,
106
- processInstanceId: undefined ,
107
- price: undefined ,
108
- returnTime: undefined ,
109
- remindDays: undefined ,
110
- remindTime: undefined ,
111
- customerId: undefined ,
112
- contractId: undefined ,
113
- ownerUserId: undefined ,
114
- sort: undefined ,
115
- remark: undefined
116
- })
124
+ const formData = ref <ReceivablePlanApi .ReceivablePlanVO >({} as ReceivablePlanApi .ReceivablePlanVO )
117
125
const formRules = reactive ({
118
- status: [{ required: true , message: ' 完成状态不能为空' , trigger: ' change' }]
126
+ price: [{ required: true , message: ' 计划回款金额不能为空' , trigger: ' blur' }],
127
+ returnTime: [{ required: true , message: ' 计划回款日期不能为空' , trigger: ' blur' }],
128
+ remindTime: [{ required: true , message: ' 提醒日期不能为空' , trigger: ' blur' }],
129
+ customerId: [{ required: true , message: ' 客户编号不能为空' , trigger: ' blur' }],
130
+ contractId: [{ required: true , message: ' 合同编号不能为空' , trigger: ' blur' }],
131
+ ownerUserId: [{ required: true , message: ' 负责人不能为空' , trigger: ' blur' }]
119
132
})
120
133
const formRef = ref () // 表单 Ref
121
-
134
+ const customerList = ref <CustomerApi .CustomerVO []>([]) // 客户列表
135
+ const contractList = ref <ContractApi .ContractVO []>([]) // 合同列表
122
136
/** 打开弹窗 */
123
137
const open = async (type : string , id ? : number ) => {
124
138
dialogVisible .value = true
@@ -137,9 +151,31 @@ const open = async (type: string, id?: number) => {
137
151
138
152
// 获得用户列表
139
153
userList .value = await UserApi .getSimpleUserList ()
154
+ // 获得客户列表
155
+ customerList .value = await CustomerApi .getCustomerSimpleList ()
156
+ // 默认新建时选中自己
157
+ if (formType .value === ' create' ) {
158
+ formData .value .ownerUserId = useUserStore ().getUser .id
159
+ }
140
160
}
141
161
defineExpose ({ open }) // 提供 open 方法,用于打开弹窗
142
162
163
+ const getContractList = async (customerId : number ) => {
164
+ contractList .value = await ContractApi .getCrmContractSimpleListByCustomerId (customerId )
165
+ }
166
+ watch (
167
+ () => formData .value .customerId ,
168
+ (newVal ) => {
169
+ if (! newVal ) {
170
+ return
171
+ }
172
+ getContractList (newVal )
173
+ },
174
+ {
175
+ immediate: true
176
+ }
177
+ )
178
+
143
179
/** 提交表单 */
144
180
const emit = defineEmits ([' success' ]) // 定义 success 事件,用于操作成功后的回调
145
181
const submitForm = async () => {
@@ -168,23 +204,7 @@ const submitForm = async () => {
168
204
169
205
/** 重置表单 */
170
206
const resetForm = () => {
171
- formData .value = {
172
- id: undefined ,
173
- period: undefined ,
174
- receivableId: undefined ,
175
- status: undefined ,
176
- checkStatus: undefined ,
177
- processInstanceId: undefined ,
178
- price: undefined ,
179
- returnTime: undefined ,
180
- remindDays: undefined ,
181
- remindTime: undefined ,
182
- customerId: undefined ,
183
- contractId: undefined ,
184
- ownerUserId: undefined ,
185
- sort: undefined ,
186
- remark: undefined
187
- }
207
+ formData .value = {} as ReceivablePlanApi .ReceivablePlanVO
188
208
formRef .value ?.resetFields ()
189
209
}
190
210
</script >
0 commit comments