Skip to content

Commit 9acd01e

Browse files
committed
✨ CRM:完善合同的跟进记录实现
1 parent 3bfdb2d commit 9acd01e

File tree

5 files changed

+94
-100
lines changed

5 files changed

+94
-100
lines changed

src/views/crm/business/detail/BusinessProductList.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
:formatter="erpPriceTableColumnFormatter"
2727
/>
2828
<el-table-column
29-
label="合同价格(元)"
29+
label="商机价格(元)"
3030
align="center"
3131
prop="businessPrice"
3232
min-width="140"

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,13 @@
2121
{{ contract.customerName }}
2222
</el-descriptions-item>
2323
<el-descriptions-item label="合同金额(元)">
24-
{{ floatToFixed2(contract.price) }}
24+
{{ erpPriceInputFormatter(contract.totalPrice) }}
2525
</el-descriptions-item>
2626
<el-descriptions-item label="下单时间">
2727
{{ contract.orderDate ? formatDate(contract.orderDate) : '空' }}
2828
</el-descriptions-item>
29-
<el-descriptions-item label="回款金额(元)">
30-
{{ floatToFixed2(contract.price) }}
31-
</el-descriptions-item>
29+
<!-- TODO 芋艿:回款金额 -->
30+
<el-descriptions-item label="回款金额(元)"> 待实现 </el-descriptions-item>
3231
<el-descriptions-item label="负责人">
3332
{{ contract.ownerUserName }}
3433
</el-descriptions-item>
@@ -38,7 +37,7 @@
3837
<script lang="ts" setup>
3938
import * as ContractApi from '@/api/crm/contract'
4039
import { formatDate } from '@/utils/formatTime'
41-
import { floatToFixed2 } from '@/utils'
40+
import { erpPriceInputFormatter, floatToFixed2 } from '@/utils'
4241
4342
defineOptions({ name: 'ContractDetailsHeader' })
4443
defineProps<{ contract: ContractApi.ContractVO }>()

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

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,33 +6,25 @@
66
<template #title>
77
<span class="text-base font-bold">基本信息</span>
88
</template>
9-
<el-descriptions :column="3">
10-
<el-descriptions-item label="合同编号">
11-
{{ contract.no }}
12-
</el-descriptions-item>
13-
<el-descriptions-item label="合同名称">
14-
{{ contract.name }}
15-
</el-descriptions-item>
16-
<el-descriptions-item label="客户名称">
17-
{{ contract.customerName }}
18-
</el-descriptions-item>
19-
<el-descriptions-item label="商机名称">
20-
{{ contract.businessName }}
21-
</el-descriptions-item>
9+
<el-descriptions :column="4">
10+
<el-descriptions-item label="合同编号">{{ contract.no }}</el-descriptions-item>
11+
<el-descriptions-item label="合同名称">{{ contract.name }}</el-descriptions-item>
12+
<el-descriptions-item label="客户名称">{{ contract.customerName }}</el-descriptions-item>
13+
<el-descriptions-item label="商机名称">{{ contract.businessName }}</el-descriptions-item>
2214
<el-descriptions-item label="合同金额(元)">
23-
{{ contract.price }}
15+
{{ erpPriceInputFormatter(contract.totalPrice) }}
2416
</el-descriptions-item>
2517
<el-descriptions-item label="下单时间">
2618
{{ formatDate(contract.orderDate) }}
2719
</el-descriptions-item>
28-
<el-descriptions-item label="开始时间">
20+
<el-descriptions-item label="合同开始时间">
2921
{{ formatDate(contract.startTime) }}
3022
</el-descriptions-item>
31-
<el-descriptions-item label="结束时间">
23+
<el-descriptions-item label="合同结束时间">
3224
{{ formatDate(contract.endTime) }}
3325
</el-descriptions-item>
3426
<el-descriptions-item label="客户签约人">
35-
{{ contract.contactName }}
27+
{{ contract.signContactName }}
3628
</el-descriptions-item>
3729
<el-descriptions-item label="公司签约人">
3830
{{ contract.signUserName }}
@@ -41,26 +33,27 @@
4133
{{ contract.remark }}
4234
</el-descriptions-item>
4335
<el-descriptions-item label="合同状态">
44-
{{ contract.auditStatus }}
36+
<dict-tag :type="DICT_TYPE.CRM_AUDIT_STATUS" :value="contract.auditStatus" />
4537
</el-descriptions-item>
4638
</el-descriptions>
4739
</el-collapse-item>
4840
<el-collapse-item name="systemInfo">
4941
<template #title>
5042
<span class="text-base font-bold">系统信息</span>
5143
</template>
52-
<el-descriptions :column="2">
53-
<el-descriptions-item label="负责人">
54-
{{ contract.ownerUserName }}
55-
</el-descriptions-item>
56-
<el-descriptions-item label="创建人">
57-
{{ contract.creatorName }}
58-
</el-descriptions-item>
44+
<el-descriptions :column="4">
45+
<el-descriptions-item label="负责人">{{ contract.ownerUserName }}</el-descriptions-item>
46+
<el-descriptions-item label="最后跟进时间">
47+
{{ formatDate(contract.contactLastTime) }}
48+
</el-descriptions-item>
49+
<el-descriptions-item label="">&nbsp;</el-descriptions-item>
50+
<el-descriptions-item label="">&nbsp;</el-descriptions-item>
51+
<el-descriptions-item label="创建人">{{ contract.creatorName }}</el-descriptions-item>
5952
<el-descriptions-item label="创建时间">
60-
{{ contract.createTime ? formatDate(contract.createTime) : '空' }}
53+
{{ formatDate(contract.createTime) }}
6154
</el-descriptions-item>
6255
<el-descriptions-item label="更新时间">
63-
{{ contract.updateTime ? formatDate(contract.updateTime) : '空' }}
56+
{{ formatDate(contract.updateTime) }}
6457
</el-descriptions-item>
6558
</el-descriptions>
6659
</el-collapse-item>
@@ -70,6 +63,8 @@
7063
<script lang="ts" setup>
7164
import * as ContractApi from '@/api/crm/contract'
7265
import { formatDate } from '@/utils/formatTime'
66+
import { DICT_TYPE } from '@/utils/dict'
67+
import { erpPriceInputFormatter } from '@/utils'
7368
7469
defineOptions({ name: 'ContractDetailsInfo' })
7570
defineProps<{
Lines changed: 61 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,66 @@
1-
<!-- 合同详情:产品列表 -->
21
<template>
3-
<el-table :data="list" :show-overflow-tooltip="true" :stripe="true">
4-
<el-table-column align="center" label="产品名称" prop="name" width="160" />
5-
<el-table-column align="center" label="产品类型" prop="categoryName" width="160" />
6-
<el-table-column align="center" label="产品单位" prop="unit">
7-
<template #default="scope">
8-
<dict-tag :type="DICT_TYPE.CRM_PRODUCT_UNIT" :value="scope.row.unit" />
9-
</template>
10-
</el-table-column>
11-
<el-table-column align="center" label="产品编码" prop="no" />
12-
<el-table-column
13-
:formatter="fenToYuanFormat"
14-
align="center"
15-
label="价格(元)"
16-
prop="price"
17-
width="100"
18-
/>
19-
<el-table-column align="center" label="数量" prop="count" width="200" />
20-
<el-table-column align="center" label="折扣(%)" prop="discountPercent" width="200" />
21-
<el-table-column align="center" label="合计" prop="totalPrice" width="100">
22-
<template #default="{ row }: { row: ProductApi.ProductExpandVO }">
23-
{{ getTotalPrice(row) }}
24-
</template>
25-
</el-table-column>
26-
</el-table>
2+
<ContentWrap>
3+
<el-table :data="contract.products" :stripe="true" :show-overflow-tooltip="true">
4+
<el-table-column
5+
align="center"
6+
label="产品名称"
7+
fixed="left"
8+
prop="productName"
9+
min-width="160"
10+
>
11+
<template #default="scope">
12+
{{ scope.row.productName }}
13+
</template>
14+
</el-table-column>
15+
<el-table-column label="产品条码" align="center" prop="productNo" min-width="120" />
16+
<el-table-column align="center" label="产品单位" prop="productUnit" min-width="160">
17+
<template #default="{ row }">
18+
<dict-tag :type="DICT_TYPE.CRM_PRODUCT_UNIT" :value="row.productUnit" />
19+
</template>
20+
</el-table-column>
21+
<el-table-column
22+
label="产品价格(元)"
23+
align="center"
24+
prop="productPrice"
25+
min-width="140"
26+
:formatter="erpPriceTableColumnFormatter"
27+
/>
28+
<el-table-column
29+
label="合同价格(元)"
30+
align="center"
31+
prop="contractPrice"
32+
min-width="140"
33+
:formatter="erpPriceTableColumnFormatter"
34+
/>
35+
<el-table-column
36+
align="center"
37+
label="数量"
38+
prop="count"
39+
min-width="100px"
40+
:formatter="erpPriceTableColumnFormatter"
41+
/>
42+
<el-table-column
43+
label="合计金额(元)"
44+
align="center"
45+
prop="totalPrice"
46+
min-width="140"
47+
:formatter="erpPriceTableColumnFormatter"
48+
/>
49+
</el-table>
50+
<el-row class="mt-10px" justify="end">
51+
<el-col :span="3"> 整单折扣:{{ erpPriceInputFormatter(contract.discountPercent) }}% </el-col>
52+
<el-col :span="4">
53+
产品总金额:{{ erpPriceInputFormatter(contract.totalProductPrice) }} 元
54+
</el-col>
55+
</el-row>
56+
</ContentWrap>
2757
</template>
28-
29-
<script lang="ts" setup>
58+
<script setup lang="ts">
59+
import * as ContractApi from '@/api/crm/contract'
60+
import { erpPriceInputFormatter, erpPriceTableColumnFormatter } from '@/utils'
3061
import { DICT_TYPE } from '@/utils/dict'
31-
import { fenToYuanFormat } from '@/utils/formatter'
32-
import * as ProductApi from '@/api/crm/product'
33-
import { floatToFixed2, yuanToFen } from '@/utils'
34-
35-
defineOptions({ name: 'ContractProductList' })
36-
const props = withDefaults(defineProps<{ modelValue: ProductApi.ProductExpandVO[] }>(), {
37-
modelValue: () => []
38-
})
39-
const list = ref<ProductApi.ProductExpandVO[]>([]) // 产品列表
40-
41-
/** 计算 totalPrice */
42-
const getTotalPrice = computed(() => (row: ProductApi.ProductExpandVO) => {
43-
const totalPrice =
44-
(Number(row.price) / 100) * Number(row.count) * (1 - Number(row.discountPercent) / 100)
45-
row.totalPrice = isNaN(totalPrice) ? 0 : yuanToFen(totalPrice)
46-
return isNaN(totalPrice) ? 0 : totalPrice.toFixed(2)
47-
})
4862
49-
/** 编辑时合同产品回显 */
50-
const isSetListValue = ref(false) // 判断是否已经给 list 赋值过,用于编辑表单产品回显
51-
watch(
52-
() => props.modelValue,
53-
(val) => {
54-
if (!val || val.length === 0 || isSetListValue.value) {
55-
return
56-
}
57-
list.value = [
58-
...props.modelValue.map((item) => {
59-
item.totalPrice = floatToFixed2(item.totalPrice) as unknown as number
60-
return item
61-
})
62-
]
63-
isSetListValue.value = true
64-
},
65-
{ immediate: true, deep: true }
66-
)
63+
const { contract } = defineProps<{
64+
contract: ContractApi.ContractVO
65+
}>()
6766
</script>

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,22 @@
1010
</ContractDetailsHeader>
1111
<el-col>
1212
<el-tabs>
13-
<!-- TODO @puhui999:跟进记录 -->
13+
<el-tab-pane label="跟进记录">
14+
<FollowUpList :biz-id="contract.id" :biz-type="BizTypeEnum.CRM_CONTRACT" />
15+
</el-tab-pane>
1416
<el-tab-pane label="基本信息">
1517
<ContractDetailsInfo :contract="contract" />
1618
</el-tab-pane>
17-
<!-- TODO @puhui999:products 更合适哈 -->
1819
<el-tab-pane label="产品">
19-
<ContractProductList v-model="contract.productItems" />
20+
<ContractProductList :contract="contract" />
2021
</el-tab-pane>
2122
<!-- TODO @puhui999:回款信息 -->
22-
<!-- TODO @puhui999:这里是不是不用 isPool 哈 -->
2323
<el-tab-pane label="团队成员">
2424
<PermissionList
2525
ref="permissionListRef"
2626
:biz-id="contract.id!"
2727
:biz-type="BizTypeEnum.CRM_CONTRACT"
28-
:show-action="!permissionListRef?.isPool || false"
28+
:show-action="false"
2929
@quit-team="close"
3030
/>
3131
</el-tab-pane>
@@ -51,6 +51,7 @@ import { getOperateLogPage } from '@/api/crm/operateLog'
5151
import ContractForm from '@/views/crm/contract/ContractForm.vue'
5252
import CrmTransferForm from '@/views/crm/permission/components/TransferForm.vue'
5353
import PermissionList from '@/views/crm/permission/components/PermissionList.vue'
54+
import FollowUpList from '@/views/crm/followup/index.vue'
5455
5556
defineOptions({ name: 'CrmContractDetail' })
5657

0 commit comments

Comments
 (0)