Skip to content

Commit 56d92e5

Browse files
committed
✨ CRM:完善回款 plan 新增/修改
1 parent fee444d commit 56d92e5

File tree

4 files changed

+72
-54
lines changed

4 files changed

+72
-54
lines changed

src/api/crm/contract/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ export const getContract = async (id: number) => {
6666
}
6767

6868
// 查询 CRM 合同下拉列表
69-
export const getCrmContractSimpleListByCustomerId = async (customerId: number) => {
69+
export const getContractSimpleList = async (customerId: number) => {
7070
return await request.get({
71-
url: `/crm/contract/list-all-simple-by-customer?customerId=${customerId}`
71+
url: `/crm/contract/simple-list?customerId=${customerId}`
7272
})
7373
}
7474

src/api/crm/receivable/plan/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ export interface ReceivablePlanVO {
55
period: number
66
receivableId: number
77
finishStatus: number
8-
processInstanceId: number
98
price: number
109
returnTime: Date
1110
remindDays: number
11+
returnType: number
1212
remindTime: Date
1313
customerId: number
1414
customerName?: string
@@ -43,6 +43,7 @@ export const getReceivablePlan = async (id: number) => {
4343
}
4444

4545
// 查询回款计划下拉数据
46+
// TODO @芋艿:再看看这里
4647
export const getReceivablePlanListByContractId = async (customerId: number, contractId: number) => {
4748
return await request.get({
4849
url: `/crm/receivable-plan/list-all-simple-by-customer?customerId=${customerId}&contractId=${contractId}`

src/views/crm/receivable/ReceivableForm.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
<el-form-item label="回款方式" prop="returnType">
7676
<el-select v-model="formData.returnType" placeholder="请选择回款方式">
7777
<el-option
78-
v-for="dict in getStrDictOptions(DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE)"
78+
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE)"
7979
:key="dict.value"
8080
:label="dict.label"
8181
:value="dict.value"
@@ -128,7 +128,7 @@ import * as UserApi from '@/api/system/user'
128128
import * as CustomerApi from '@/api/crm/customer'
129129
import * as ContractApi from '@/api/crm/contract'
130130
import { useUserStore } from '@/store/modules/user'
131-
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
131+
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
132132
133133
const { t } = useI18n() // 国际化
134134
const message = useMessage() // 消息弹窗
@@ -215,7 +215,7 @@ const resetForm = () => {
215215
}
216216
217217
const getContractList = async (customerId: number) => {
218-
contractList.value = await ContractApi.getCrmContractSimpleListByCustomerId(customerId)
218+
contractList.value = await ContractApi.getContractSimpleList(customerId)
219219
}
220220
const getReceivablePlanList = async (contractId: number) => {
221221
receivablePlanList.value = await ReceivablePlanApi.getReceivablePlanListByContractId(

src/views/crm/receivable/plan/ReceivablePlanForm.vue

Lines changed: 65 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,40 @@
77
:rules="formRules"
88
label-width="110px"
99
>
10+
<el-row>
11+
<el-col :span="12">
12+
<el-form-item label="还款期数" prop="period">
13+
<el-input disabled v-model="formData.period" placeholder="保存时自动生成" />
14+
</el-form-item>
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>
1033
<el-row>
1134
<el-col :span="12">
1235
<el-form-item label="客户名称" prop="customerId">
13-
<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+
>
1444
<el-option
1545
v-for="item in customerList"
1646
:key="item.id"
@@ -24,8 +54,9 @@
2454
<el-form-item label="合同名称" prop="contractId">
2555
<el-select
2656
v-model="formData.contractId"
27-
:disabled="!formData.customerId"
28-
class="!w-100%"
57+
:disabled="formType !== 'create' || !formData.customerId"
58+
class="w-1/1"
59+
filterable
2960
placeholder="请选择合同"
3061
>
3162
<el-option
@@ -37,25 +68,17 @@
3768
</el-select>
3869
</el-form-item>
3970
</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>
71+
</el-row>
72+
<el-row>
5273
<el-col :span="12">
5374
<el-form-item label="计划回款金额" prop="price">
5475
<el-input-number
5576
v-model="formData.price"
5677
class="!w-100%"
5778
controls-position="right"
5879
placeholder="请输入计划回款金额"
80+
:min="0.01"
81+
:precision="2"
5982
/>
6083
</el-form-item>
6184
</el-col>
@@ -69,6 +92,8 @@
6992
/>
7093
</el-form-item>
7194
</el-col>
95+
</el-row>
96+
<el-row>
7297
<el-col :span="12">
7398
<el-form-item label="提前几天提醒" prop="remindDays">
7499
<el-input-number
@@ -80,23 +105,20 @@
80105
</el-form-item>
81106
</el-col>
82107
<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-
/>
108+
<el-form-item label="回款方式" prop="returnType">
109+
<el-select v-model="formData.returnType" class="w-1/1" placeholder="请选择回款方式">
110+
<el-option
111+
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE)"
112+
:key="dict.value"
113+
:label="dict.label"
114+
:value="dict.value"
115+
/>
116+
</el-select>
90117
</el-form-item>
91118
</el-col>
92119
<el-col :span="24">
93120
<el-form-item label="备注" prop="remark">
94-
<el-input
95-
v-model="formData.remark"
96-
:rows="3"
97-
placeholder="请输入备注"
98-
type="textarea"
99-
/>
121+
<el-input v-model="formData.remark" placeholder="请输入备注" type="textarea" />
100122
</el-form-item>
101123
</el-col>
102124
</el-row>
@@ -113,10 +135,11 @@ import * as UserApi from '@/api/system/user'
113135
import * as CustomerApi from '@/api/crm/customer'
114136
import * as ContractApi from '@/api/crm/contract'
115137
import { useUserStore } from '@/store/modules/user'
138+
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
116139
117140
const { t } = useI18n() // 国际化
118141
const message = useMessage() // 消息弹窗
119-
const userList = ref<UserApi.UserVO[]>([]) // 用户列表
142+
const userOptions = ref<UserApi.UserVO[]>([]) // 用户列表
120143
const dialogVisible = ref(false) // 弹窗的是否展示
121144
const dialogTitle = ref('') // 弹窗的标题
122145
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
@@ -125,14 +148,14 @@ const formData = ref<ReceivablePlanApi.ReceivablePlanVO>({} as ReceivablePlanApi
125148
const formRules = reactive({
126149
price: [{ required: true, message: '计划回款金额不能为空', trigger: 'blur' }],
127150
returnTime: [{ required: true, message: '计划回款日期不能为空', trigger: 'blur' }],
128-
remindTime: [{ required: true, message: '提醒日期不能为空', trigger: 'blur' }],
129151
customerId: [{ required: true, message: '客户编号不能为空', trigger: 'blur' }],
130152
contractId: [{ required: true, message: '合同编号不能为空', trigger: 'blur' }],
131153
ownerUserId: [{ required: true, message: '负责人不能为空', trigger: 'blur' }]
132154
})
133155
const formRef = ref() // 表单 Ref
134156
const customerList = ref<CustomerApi.CustomerVO[]>([]) // 客户列表
135157
const contractList = ref<ContractApi.ContractVO[]>([]) // 合同列表
158+
136159
/** 打开弹窗 */
137160
const open = async (type: string, id?: number) => {
138161
dialogVisible.value = true
@@ -148,9 +171,8 @@ const open = async (type: string, id?: number) => {
148171
formLoading.value = false
149172
}
150173
}
151-
152174
// 获得用户列表
153-
userList.value = await UserApi.getSimpleUserList()
175+
userOptions.value = await UserApi.getSimpleUserList()
154176
// 获得客户列表
155177
customerList.value = await CustomerApi.getCustomerSimpleList()
156178
// 默认新建时选中自己
@@ -160,22 +182,6 @@ const open = async (type: string, id?: number) => {
160182
}
161183
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
162184
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-
179185
/** 提交表单 */
180186
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
181187
const submitForm = async () => {
@@ -207,4 +213,15 @@ const resetForm = () => {
207213
formData.value = {} as ReceivablePlanApi.ReceivablePlanVO
208214
formRef.value?.resetFields()
209215
}
216+
217+
/** 处理切换客户 */
218+
const handleCustomerChange = async (customerId: number) => {
219+
// 重置合同编号
220+
formData.value.contractId = undefined
221+
// 获得合同列表
222+
if (customerId) {
223+
contractList.value = []
224+
contractList.value = await ContractApi.getContractSimpleList(customerId)
225+
}
226+
}
210227
</script>

0 commit comments

Comments
 (0)