Skip to content

Commit f30f71b

Browse files
YunaiVgitee-org
authored andcommitted
!393 CRM:完善回款
Merge pull request !393 from puhui999/dev-crm
2 parents 12972cd + 174724d commit f30f71b

File tree

13 files changed

+729
-486
lines changed

13 files changed

+729
-486
lines changed

src/api/crm/contract/index.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,13 @@ export const getContract = async (id: number) => {
6565
return await request.get({ url: `/crm/contract/get?id=` + id })
6666
}
6767

68+
// 查询 CRM 合同下拉列表
69+
export const getCrmContractSimpleListByCustomerId = async (customerId: number) => {
70+
return await request.get({
71+
url: `/crm/contract/list-all-simple-by-customer?customerId=${customerId}`
72+
})
73+
}
74+
6875
// 新增 CRM 合同
6976
export const createContract = async (data: ContractVO) => {
7077
return await request.post({ url: `/crm/contract/create`, data })

src/api/crm/customer/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,11 @@ export const importCustomerTemplate = () => {
9090
return request.download({ url: '/crm/customer/get-import-template' })
9191
}
9292

93+
// 导入客户
94+
export const handleImport = async (formData) => {
95+
return await request.upload({ url: `/crm/customer/import`, data: formData })
96+
}
97+
9398
// 客户列表
9499
export const getCustomerSimpleList = async () => {
95100
return await request.get({ url: `/crm/customer/simple-list` })

src/api/crm/receivable/index.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ export interface ReceivableVO {
1212
returnType: string
1313
price: number
1414
ownerUserId: number
15-
sort: number
1615
remark: string
1716
}
1817

@@ -50,3 +49,8 @@ export const deleteReceivable = async (id: number) => {
5049
export const exportReceivable = async (params) => {
5150
return await request.download({ url: `/crm/receivable/export-excel`, params })
5251
}
52+
53+
// 提交审核
54+
export const submitReceivable = async (id: number) => {
55+
return await request.put({ url: `/crm/receivable/submit?id=${id}` })
56+
}

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ export interface ReceivablePlanVO {
44
id: number
55
period: number
66
receivableId: number
7-
status: number
8-
checkStatus: string
7+
finishStatus: number
98
processInstanceId: number
109
price: number
1110
returnTime: Date
@@ -14,7 +13,6 @@ export interface ReceivablePlanVO {
1413
customerId: number
1514
contractId: number
1615
ownerUserId: number
17-
sort: number
1816
remark: string
1917
}
2018

@@ -33,6 +31,13 @@ export const getReceivablePlan = async (id: number) => {
3331
return await request.get({ url: `/crm/receivable-plan/get?id=` + id })
3432
}
3533

34+
// 查询回款计划下拉数据
35+
export const getReceivablePlanListByContractId = async (customerId: number, contractId: number) => {
36+
return await request.get({
37+
url: `/crm/receivable-plan/list-all-simple-by-customer?customerId=${customerId}&contractId=${contractId}`
38+
})
39+
}
40+
3641
// 新增回款计划
3742
export const createReceivablePlan = async (data: ReceivablePlanVO) => {
3843
return await request.post({ url: `/crm/receivable-plan/create`, data })

src/views/crm/contract/detail/index.vue

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,18 @@
1919
<el-tab-pane label="产品">
2020
<ContractProductList :contract="contract" />
2121
</el-tab-pane>
22-
<!-- TODO @puhui999:回款信息 -->
23-
<el-tab-pane label="回款"> 123 </el-tab-pane>
22+
<el-tab-pane label="回款">
23+
<ReceivablePlanList
24+
:contract-id="contract.id!"
25+
:customer-id="contract.customerId"
26+
@crate-receivable="crateReceivable"
27+
/>
28+
<ReceivableList
29+
ref="receivableListRef"
30+
:contract-id="contract.id!"
31+
:customer-id="contract.customerId"
32+
/>
33+
</el-tab-pane>
2434
<el-tab-pane label="团队成员">
2535
<PermissionList
2636
ref="permissionListRef"
@@ -53,6 +63,8 @@ import ContractForm from '@/views/crm/contract/ContractForm.vue'
5363
import CrmTransferForm from '@/views/crm/permission/components/TransferForm.vue'
5464
import PermissionList from '@/views/crm/permission/components/PermissionList.vue'
5565
import FollowUpList from '@/views/crm/followup/index.vue'
66+
import ReceivableList from '@/views/crm/receivable/components/ReceivableList.vue'
67+
import ReceivablePlanList from '@/views/crm/receivable/plan/components/ReceivablePlanList.vue'
5668
5769
defineOptions({ name: 'CrmContractDetail' })
5870
const props = defineProps<{ id?: number }>()
@@ -94,8 +106,14 @@ const getOperateLog = async (contractId: number) => {
94106
logList.value = data.list
95107
}
96108
109+
/** 从回款计划创建回款 */
110+
const receivableListRef = ref<InstanceType<typeof ReceivableList>>() // 回款列表 Ref
111+
const crateReceivable = (planData: any) => {
112+
receivableListRef.value?.crateReceivable(planData)
113+
}
114+
97115
/** 转移 */
98-
// TODO @puhui999:这个组件,要不传递业务类型,然后组件里判断 title 和 api 能调用哪个;整体治理掉;
116+
// TODO @puhui999:这个组件,要不传递业务类型,然后组件里判断 title 和 api 能调用哪个;整体治理掉;好呢
99117
const transferFormRef = ref<InstanceType<typeof CrmTransferForm>>() // 合同转移表单 ref
100118
const transferContract = () => {
101119
transferFormRef.value?.open('合同转移', contract.value.id, ContractApi.transferContract)

src/views/crm/customer/CustomerImportForm.vue

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
<el-upload
55
ref="uploadRef"
66
v-model:file-list="fileList"
7-
:action="importUrl + '?updateSupport=' + updateSupport"
87
:auto-upload="false"
98
:disabled="formLoading"
109
:headers="uploadHeaders"
@@ -13,6 +12,7 @@
1312
:on-exceed="handleExceed"
1413
:on-success="submitFormSuccess"
1514
accept=".xlsx, .xls"
15+
action="none"
1616
drag
1717
>
1818
<Icon icon="ep:upload" />
@@ -45,6 +45,7 @@
4545
import * as CustomerApi from '@/api/crm/customer'
4646
import { getAccessToken, getTenantId } from '@/utils/auth'
4747
import download from '@/utils/download'
48+
import type { UploadUserFile } from 'element-plus'
4849
4950
defineOptions({ name: 'SystemUserImportForm' })
5051
@@ -53,11 +54,9 @@ const message = useMessage() // 消息弹窗
5354
const dialogVisible = ref(false) // 弹窗的是否展示
5455
const formLoading = ref(false) // 表单的加载中
5556
const uploadRef = ref()
56-
const importUrl =
57-
import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + '/crm/customer/import'
5857
const uploadHeaders = ref() // 上传 Header 头
59-
const fileList = ref([]) // 文件列表
60-
const updateSupport = ref(0) // 是否更新已经存在的客户数据
58+
const fileList = ref<UploadUserFile[]>([]) // 文件列表
59+
const updateSupport = ref(false) // 是否更新已经存在的客户数据
6160
6261
/** 打开弹窗 */
6362
const open = () => {
@@ -79,7 +78,10 @@ const submitForm = async () => {
7978
'tenant-id': getTenantId()
8079
}
8180
formLoading.value = true
82-
uploadRef.value!.submit()
81+
const formData = new FormData()
82+
formData.append('updateSupport', updateSupport.value)
83+
formData.append('file', fileList.value[0].raw)
84+
await CustomerApi.handleImport(formData)
8385
}
8486
8587
/** 文件上传成功 */

src/views/crm/customer/detail/index.vue

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
>
2727
锁定
2828
</el-button>
29-
<el-button v-if="!customer.ownerUserId" type="primary" @click="handleReceive"> 领取 </el-button>
29+
<el-button v-if="!customer.ownerUserId" type="primary" @click="handleReceive"> 领取</el-button>
3030
<el-button v-if="!customer.ownerUserId" type="primary" @click="handleDistributeForm">
3131
分配
3232
</el-button>
@@ -64,8 +64,8 @@
6464
<ContractList :biz-id="customer.id!" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
6565
</el-tab-pane>
6666
<el-tab-pane label="回款" lazy>
67-
<ReceivablePlanList :biz-id="customer.id!" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
68-
<ReceivableList :biz-id="customer.id!" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
67+
<ReceivablePlanList :customer-id="customer.id!" @crate-receivable="crateReceivable" />
68+
<ReceivableList ref="receivableListRef" :customer-id="customer.id!" />
6969
</el-tab-pane>
7070
<el-tab-pane label="操作日志">
7171
<OperateLogV2 :log-list="logList" />
@@ -197,6 +197,12 @@ const getOperateLog = async () => {
197197
logList.value = data.list
198198
}
199199
200+
/** 从回款计划创建回款 */
201+
const receivableListRef = ref<InstanceType<typeof ReceivableList>>() // 回款列表 Ref
202+
const crateReceivable = (planData: any) => {
203+
receivableListRef.value?.crateReceivable(planData)
204+
}
205+
200206
const close = () => {
201207
delView(unref(currentRoute))
202208
push({ name: 'CrmCustomer' })

0 commit comments

Comments
 (0)