Skip to content

Commit cac39ae

Browse files
committed
CRM:优化合同列的新增/修改界面
1 parent 6d0231d commit cac39ae

File tree

8 files changed

+111
-136
lines changed

8 files changed

+111
-136
lines changed

src/api/bpm/model/index.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,6 @@ export const getModel = async (id: number) => {
3333
return await request.get({ url: '/bpm/model/get?id=' + id })
3434
}
3535

36-
export const getModelByKey = async (key: string) => {
37-
return await request.get({ url: '/bpm/model/get-by-key?key=' + key })
38-
}
39-
4036
export const updateModel = async (data: ModelVO) => {
4137
return await request.put({ url: '/bpm/model/update', data: data })
4238
}

src/api/crm/contract/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ export const exportContract = async (params) => {
6868
}
6969

7070
// 提交审核
71-
export const handleApprove = async (id: number) => {
72-
return await request.put({ url: `/crm/contract/approve?id=${id}` })
71+
export const submitContract = async (id: number) => {
72+
return await request.put({ url: `/crm/contract/submit?id=${id}` })
7373
}
7474

7575
// 合同转移

src/views/crm/contract/ContractForm.vue

Lines changed: 59 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<Dialog v-model="dialogVisible" :title="dialogTitle" width="70%">
2+
<Dialog v-model="dialogVisible" :title="dialogTitle" width="820">
33
<el-form
44
ref="formRef"
55
v-loading="formLoading"
@@ -8,67 +8,28 @@
88
label-width="110px"
99
>
1010
<el-row :gutter="20">
11-
<el-col :span="24" class="mb-10px">
12-
<CardTitle title="基本信息" />
13-
</el-col>
14-
<el-col :span="12">
15-
<el-form-item label="合同名称" prop="name">
16-
<el-input v-model="formData.name" placeholder="请输入合同名称" />
17-
</el-form-item>
18-
</el-col>
1911
<el-col :span="12">
2012
<el-form-item label="合同编号" prop="no">
2113
<el-input v-model="formData.no" placeholder="请输入合同编号" />
2214
</el-form-item>
2315
</el-col>
2416
<el-col :span="12">
25-
<el-form-item label="客户" prop="customerId">
26-
<el-select v-model="formData.customerId">
27-
<el-option
28-
v-for="item in customerList"
29-
:key="item.id"
30-
:label="item.name"
31-
:value="item.id!"
32-
/>
33-
</el-select>
17+
<el-form-item label="合同名称" prop="name">
18+
<el-input v-model="formData.name" placeholder="请输入合同名称" />
3419
</el-form-item>
3520
</el-col>
3621
<el-col :span="12">
37-
<el-form-item label="客户签约人" prop="contactId">
38-
<el-select v-model="formData.contactId" :disabled="!formData.customerId">
22+
<el-form-item label="客户名称" prop="customerId">
23+
<el-select v-model="formData.customerId">
3924
<el-option
40-
v-for="item in getContactOptions"
25+
v-for="item in customerList"
4126
:key="item.id"
4227
:label="item.name"
4328
:value="item.id!"
4429
/>
4530
</el-select>
4631
</el-form-item>
4732
</el-col>
48-
<el-col :span="12">
49-
<el-form-item label="公司签约人" prop="signUserId">
50-
<el-select v-model="formData.signUserId">
51-
<el-option
52-
v-for="item in userList"
53-
:key="item.id"
54-
:label="item.nickname"
55-
:value="item.id!"
56-
/>
57-
</el-select>
58-
</el-form-item>
59-
</el-col>
60-
<el-col :span="12">
61-
<el-form-item label="负责人" prop="ownerUserId">
62-
<el-select v-model="formData.ownerUserId">
63-
<el-option
64-
v-for="item in userList"
65-
:key="item.id"
66-
:label="item.nickname"
67-
:value="item.id!"
68-
/>
69-
</el-select>
70-
</el-form-item>
71-
</el-col>
7233
<el-col :span="12">
7334
<el-form-item label="商机名称" prop="businessId">
7435
<el-select v-model="formData.businessId">
@@ -81,11 +42,6 @@
8142
</el-select>
8243
</el-form-item>
8344
</el-col>
84-
<el-col :span="12">
85-
<el-form-item label="合同金额(元)" prop="price">
86-
<el-input v-model="formData.price" placeholder="请输入合同金额" />
87-
</el-form-item>
88-
</el-col>
8945
<el-col :span="12">
9046
<el-form-item label="下单日期" prop="orderDate">
9147
<el-date-picker
@@ -96,6 +52,11 @@
9652
/>
9753
</el-form-item>
9854
</el-col>
55+
<el-col :span="12">
56+
<el-form-item label="合同金额" prop="price">
57+
<el-input v-model="formData.price" placeholder="请输入合同金额" />
58+
</el-form-item>
59+
</el-col>
9960
<el-col :span="12">
10061
<el-form-item label="开始时间" prop="startTime">
10162
<el-date-picker
@@ -116,6 +77,42 @@
11677
/>
11778
</el-form-item>
11879
</el-col>
80+
<el-col :span="12">
81+
<el-form-item label="公司签约人" prop="signUserId">
82+
<el-select v-model="formData.signUserId">
83+
<el-option
84+
v-for="item in userList"
85+
:key="item.id"
86+
:label="item.nickname"
87+
:value="item.id!"
88+
/>
89+
</el-select>
90+
</el-form-item>
91+
</el-col>
92+
<el-col :span="12">
93+
<el-form-item label="客户签约人" prop="contactId">
94+
<el-select v-model="formData.contactId" :disabled="!formData.customerId">
95+
<el-option
96+
v-for="item in getContactOptions"
97+
:key="item.id"
98+
:label="item.name"
99+
:value="item.id!"
100+
/>
101+
</el-select>
102+
</el-form-item>
103+
</el-col>
104+
<el-col :span="12">
105+
<el-form-item label="负责人" prop="ownerUserId">
106+
<el-select v-model="formData.ownerUserId">
107+
<el-option
108+
v-for="item in userList"
109+
:key="item.id"
110+
:label="item.nickname"
111+
:value="item.id!"
112+
/>
113+
</el-select>
114+
</el-form-item>
115+
</el-col>
119116
<el-col :span="24">
120117
<el-form-item label="备注" prop="remark">
121118
<el-input
@@ -126,43 +123,36 @@
126123
/>
127124
</el-form-item>
128125
</el-col>
126+
<!-- TODO @puhui999:productItems 改成 products 会更好点;因为它不是 item 哈 -->
129127
<el-col :span="24">
130128
<el-form-item label="产品列表" prop="productList">
131129
<ProductList v-model="formData.productItems" />
132130
</el-form-item>
133131
</el-col>
134132
<el-col :span="12">
135133
<el-form-item label="整单折扣(%)" prop="discountPercent">
136-
<el-input v-model="formData.discountPercent" placeholder="请输入整单折扣" />
134+
<el-input-number
135+
v-model="formData.discountPercent"
136+
:min="0"
137+
:max="100"
138+
:precision="0"
139+
placeholder="请输入整单折扣"
140+
class="!w-100%"
141+
/>
137142
</el-form-item>
138143
</el-col>
139144
<el-col :span="12">
140145
<el-form-item label="产品总金额(元)" prop="productPrice">
141-
{{ floatToFixed2(formData.productPrice) }}
146+
{{ fenToYuan(formData.productPrice) }}
142147
</el-form-item>
143148
</el-col>
144-
<el-col :span="24">
145-
<CardTitle class="mb-10px" title="审批信息" />
146-
</el-col>
147-
<!-- TODO 芋艿:需要后面在 review 下,目前看不到信息 -->
148-
<el-col :span="12">
149-
<el-button
150-
class="m-20px"
151-
link
152-
type="primary"
153-
@click="BPMLModelRef?.handleBpmnDetail('contract-approve')"
154-
>
155-
查看工作流
156-
</el-button>
157-
</el-col>
158149
</el-row>
159150
</el-form>
160151
<template #footer>
161152
<el-button :disabled="formLoading" type="primary" @click="submitForm">保存</el-button>
162153
<el-button @click="dialogVisible = false">取 消</el-button>
163154
</template>
164155
</Dialog>
165-
<BPMLModel ref="BPMLModelRef" />
166156
</template>
167157
<script lang="ts" setup>
168158
import * as CustomerApi from '@/api/crm/customer'
@@ -171,8 +161,7 @@ import * as UserApi from '@/api/system/user'
171161
import * as ContactApi from '@/api/crm/contact'
172162
import * as BusinessApi from '@/api/crm/business'
173163
import ProductList from './components/ProductList.vue'
174-
import BPMLModel from '@/views/crm/contract/components/BPMLModel.vue'
175-
import { floatToFixed2 } from '@/utils'
164+
import { fenToYuan } from '@/utils'
176165
177166
const { t } = useI18n() // 国际化
178167
const message = useMessage() // 消息弹窗
@@ -190,9 +179,8 @@ const formRules = reactive({
190179
no: [{ required: true, message: '合同编号不能为空', trigger: 'blur' }]
191180
})
192181
const formRef = ref() // 表单 Ref
193-
const BPMLModelRef = ref<InstanceType<typeof BPMLModel>>() // TODO @puhui999:这个变量不太对;另外,可以不做 bpm model 窗口,而是可以点击跳转到工作流详情里;
194182
195-
// 监听合同产品变化,计算合同产品总价
183+
/** 监听合同产品变化,计算合同产品总价 */
196184
watch(
197185
() => formData.value.productItems,
198186
(val) => {
@@ -227,7 +215,6 @@ const open = async (type: string, id?: number) => {
227215
}
228216
await getAllApi()
229217
}
230-
231218
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
232219
233220
/** 提交表单 */

src/views/crm/contract/components/BPMLModel.vue

Lines changed: 0 additions & 31 deletions
This file was deleted.

src/views/crm/contract/components/ProductList.vue

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,56 @@
44
<el-button plain type="primary" @click="openForm">添加产品</el-button>
55
</el-row>
66
<el-table :data="list" :show-overflow-tooltip="true" :stripe="true">
7-
<el-table-column align="center" label="产品名称" prop="name" width="160" />
8-
<el-table-column align="center" label="产品类型" prop="categoryName" width="160" />
9-
<el-table-column align="center" label="产品单位" prop="unit">
10-
<template #default="scope">
11-
<dict-tag :type="DICT_TYPE.CRM_PRODUCT_UNIT" :value="scope.row.unit" />
12-
</template>
13-
</el-table-column>
14-
<el-table-column align="center" label="产品编码" prop="no" />
7+
<el-table-column align="center" label="产品名称" prop="name" width="120" />
158
<el-table-column
169
:formatter="fenToYuanFormat"
1710
align="center"
18-
label="价格(元)"
11+
label="价格"
1912
prop="price"
2013
width="100"
2114
/>
22-
<el-table-column align="center" label="数量" prop="count" width="200">
15+
<el-table-column align="center" label="产品类型" prop="categoryName" width="100" />
16+
<el-table-column align="center" label="产品单位" prop="unit">
17+
<template #default="scope">
18+
<dict-tag :type="DICT_TYPE.CRM_PRODUCT_UNIT" :value="scope.row.unit" />
19+
</template>
20+
</el-table-column>
21+
<el-table-column align="center" label="产品编码" prop="no" />
22+
<el-table-column align="center" fixed="right" label="数量" prop="count" width="100">
2323
<template #default="{ row }: { row: ProductApi.ProductExpandVO }">
24-
<el-input-number v-model="row.count" class="!w-100%" />
24+
<el-input-number
25+
v-model="row.count"
26+
controls-position="right"
27+
:min="0"
28+
:precision="0"
29+
class="!w-100%"
30+
/>
2531
</template>
2632
</el-table-column>
27-
<el-table-column align="center" label="折扣(%)" prop="discountPercent" width="200">
33+
<el-table-column
34+
align="center"
35+
fixed="right"
36+
label="折扣(%)"
37+
prop="discountPercent"
38+
width="120"
39+
>
2840
<template #default="{ row }: { row: ProductApi.ProductExpandVO }">
29-
<el-input-number v-model="row.discountPercent" class="!w-100%" />
41+
<el-input-number
42+
v-model="row.discountPercent"
43+
controls-position="right"
44+
:min="0"
45+
:max="100"
46+
:precision="0"
47+
class="!w-100%"
48+
/>
3049
</template>
3150
</el-table-column>
32-
<el-table-column align="center" label="合计" prop="totalPrice" width="100">
51+
<el-table-column align="center" fixed="right" label="合计" prop="totalPrice" width="100">
3352
<template #default="{ row }: { row: ProductApi.ProductExpandVO }">
34-
{{ getTotalPrice(row) }}
53+
{{ fenToYuan(getTotalPrice(row)) }}
3554
</template>
3655
</el-table-column>
37-
<el-table-column align="center" fixed="right" label="操作" width="130">
56+
<el-table-column align="center" fixed="right" label="操作" width="60">
3857
<template #default="scope">
3958
<el-button link type="danger" @click="handleDelete(scope.row.id)"> 移除</el-button>
4059
</template>
@@ -66,7 +85,7 @@ import * as ProductApi from '@/api/crm/product'
6685
import { DICT_TYPE } from '@/utils/dict'
6786
import { fenToYuanFormat } from '@/utils/formatter'
6887
import { TableSelectForm } from '@/components/Table/index'
69-
import { floatToFixed2, yuanToFen } from '@/utils'
88+
import { fenToYuan, floatToFixed2, yuanToFen } from '@/utils'
7089
7190
defineOptions({ name: 'ProductList' })
7291
const props = withDefaults(defineProps<{ modelValue: ProductApi.ProductExpandVO[] }>(), {

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,16 @@
1010
</ContractDetailsHeader>
1111
<el-col>
1212
<el-tabs>
13-
<el-tab-pane label="详细资料">
13+
<!-- TODO @puhui999:跟进记录 -->
14+
<el-tab-pane label="基本信息">
1415
<ContractDetailsInfo :contract="contract" />
1516
</el-tab-pane>
17+
<!-- TODO @puhui999:products 更合适哈 -->
1618
<el-tab-pane label="产品">
1719
<ContractProductList v-model="contract.productItems" />
1820
</el-tab-pane>
19-
<el-tab-pane label="操作日志">
20-
<OperateLogV2 :log-list="logList" />
21-
</el-tab-pane>
21+
<!-- TODO @puhui999:回款信息 -->
22+
<!-- TODO @puhui999:这里是不是不用 isPool 哈 -->
2223
<el-tab-pane label="团队成员">
2324
<PermissionList
2425
ref="permissionListRef"
@@ -28,8 +29,12 @@
2829
@quit-team="close"
2930
/>
3031
</el-tab-pane>
32+
<el-tab-pane label="操作日志">
33+
<OperateLogV2 :log-list="logList" />
34+
</el-tab-pane>
3135
</el-tabs>
3236
</el-col>
37+
3338
<!-- 表单弹窗:添加/修改 -->
3439
<ContractForm ref="formRef" @success="getContractData" />
3540
<CrmTransferForm ref="transferFormRef" @success="close" />

0 commit comments

Comments
 (0)