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
8
label-width =" 100px"
8
- v-loading =" formLoading"
9
9
>
10
- <el-form-item label =" 线索名称" prop =" name" >
11
- <el-input v-model =" formData.name" placeholder =" 请输入线索名称" />
12
- </el-form-item >
13
- <el-form-item label =" 下次联系时间" prop =" contactNextTime" >
14
- <el-date-picker
15
- v-model =" formData.contactNextTime"
16
- type =" date"
17
- value-format =" x"
18
- placeholder =" 选择下次联系时间"
19
- />
20
- </el-form-item >
21
- <el-form-item label =" 电话" prop =" telephone" >
22
- <el-input v-model =" formData.telephone" placeholder =" 请输入电话" />
23
- </el-form-item >
24
- <el-form-item label =" 手机号" prop =" mobile" >
25
- <el-input v-model =" formData.mobile" placeholder =" 请输入手机号" />
26
- </el-form-item >
27
- <el-form-item label =" 地址" prop =" address" >
28
- <el-input v-model =" formData.address" placeholder =" 请输入地址" />
29
- </el-form-item >
30
- <el-form-item v-if =" formType === 'create'" label =" 负责人" prop =" userIds" span =" 24" >
31
- <el-select v-model =" formData.ownerUserId" >
32
- <el-option
33
- v-for =" item in userOptions"
34
- :key =" item.id"
35
- :label =" item.nickname"
36
- :value =" item.id"
37
- />
38
- </el-select >
39
- </el-form-item >
40
- <el-form-item label =" 备注" prop =" remark" >
41
- <el-input v-model =" formData.remark" placeholder =" 请输入备注" />
42
- </el-form-item >
10
+ <el-row >
11
+ <el-col :span =" 12" >
12
+ <el-form-item label =" 线索名称" prop =" name" >
13
+ <el-input v-model =" formData.name" placeholder =" 请输入线索名称" />
14
+ </el-form-item >
15
+ </el-col >
16
+ <el-col :span =" 12" >
17
+ <el-form-item label =" 客户来源" prop =" source" >
18
+ <el-select v-model =" formData.source" placeholder =" 请选择客户来源" class =" w-1/1" >
19
+ <el-option
20
+ v-for =" dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_SOURCE)"
21
+ :key =" dict.value"
22
+ :label =" dict.label"
23
+ :value =" dict.value"
24
+ />
25
+ </el-select >
26
+ </el-form-item >
27
+ </el-col >
28
+ </el-row >
29
+ <el-row >
30
+ <el-col :span =" 12" >
31
+ <el-form-item label =" 手机" prop =" mobile" >
32
+ <el-input v-model =" formData.mobile" placeholder =" 请输入手机" />
33
+ </el-form-item >
34
+ </el-col >
35
+ <el-col :span =" 12" >
36
+ <el-form-item label =" 负责人" prop =" ownerUserId" >
37
+ <el-select
38
+ v-model =" formData.ownerUserId"
39
+ :disabled =" formType !== 'create'"
40
+ class =" w-1/1"
41
+ >
42
+ <el-option
43
+ v-for =" item in userOptions"
44
+ :key =" item.id"
45
+ :label =" item.nickname"
46
+ :value =" item.id"
47
+ />
48
+ </el-select >
49
+ </el-form-item >
50
+ </el-col >
51
+ </el-row >
52
+ <el-row >
53
+ <el-col :span =" 12" >
54
+ <el-form-item label =" 电话" prop =" telephone" >
55
+ <el-input v-model =" formData.telephone" placeholder =" 请输入电话" />
56
+ </el-form-item >
57
+ </el-col >
58
+ <el-col :span =" 12" >
59
+ <el-form-item label =" 邮箱" prop =" email" >
60
+ <el-input v-model =" formData.email" placeholder =" 请输入邮箱" />
61
+ </el-form-item >
62
+ </el-col >
63
+ </el-row >
64
+ <el-row >
65
+ <el-col :span =" 12" >
66
+ <el-form-item label =" 微信" prop =" wechat" >
67
+ <el-input v-model =" formData.wechat" placeholder =" 请输入微信" />
68
+ </el-form-item >
69
+ </el-col >
70
+ <el-col :span =" 12" >
71
+ <el-form-item label =" QQ" prop =" qq" >
72
+ <el-input v-model =" formData.qq" placeholder =" 请输入 QQ" />
73
+ </el-form-item >
74
+ </el-col >
75
+ </el-row >
76
+ <el-row >
77
+ <el-col :span =" 12" >
78
+ <el-form-item label =" 客户行业" prop =" industryId" >
79
+ <el-select v-model =" formData.industryId" placeholder =" 请选择客户行业" class =" w-1/1" >
80
+ <el-option
81
+ v-for =" dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_INDUSTRY)"
82
+ :key =" dict.value"
83
+ :label =" dict.label"
84
+ :value =" dict.value"
85
+ />
86
+ </el-select >
87
+ </el-form-item >
88
+ </el-col >
89
+ <el-col :span =" 12" >
90
+ <el-form-item label =" 客户级别" prop =" level" >
91
+ <el-select v-model =" formData.level" placeholder =" 请选择客户级别" class =" w-1/1" >
92
+ <el-option
93
+ v-for =" dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_LEVEL)"
94
+ :key =" dict.value"
95
+ :label =" dict.label"
96
+ :value =" dict.value"
97
+ />
98
+ </el-select >
99
+ </el-form-item >
100
+ </el-col >
101
+ </el-row >
102
+ <el-row >
103
+ <el-col :span =" 12" >
104
+ <el-form-item label =" 地址" prop =" areaId" >
105
+ <el-tree-select
106
+ v-model =" formData.areaId"
107
+ :data =" areaList"
108
+ :props =" defaultProps"
109
+ :render-after-expand =" true"
110
+ class =" w-1/1"
111
+ />
112
+ </el-form-item >
113
+ </el-col >
114
+ <el-col :span =" 12" >
115
+ <el-form-item label =" 详细地址" prop =" detailAddress" >
116
+ <el-input v-model =" formData.detailAddress" placeholder =" 请输入详细地址" />
117
+ </el-form-item >
118
+ </el-col >
119
+ </el-row >
120
+ <el-row >
121
+ <el-col :span =" 12" >
122
+ <el-form-item label =" 下次联系时间" prop =" contactNextTime" >
123
+ <el-date-picker
124
+ v-model =" formData.contactNextTime"
125
+ placeholder =" 选择下次联系时间"
126
+ type =" datetime"
127
+ value-format =" x"
128
+ />
129
+ </el-form-item >
130
+ </el-col >
131
+ </el-row >
132
+ <el-col :span =" 24" >
133
+ <el-form-item label =" 备注" prop =" remark" >
134
+ <el-input v-model =" formData.remark" placeholder =" 请输入备注" />
135
+ </el-form-item >
136
+ </el-col >
43
137
</el-form >
44
138
<template #footer >
45
- <el-button @click = " submitForm " type =" primary" :disabled = " formLoading " >确 定</el-button >
139
+ <el-button :disabled = " formLoading " type =" primary" @click = " submitForm " >确 定</el-button >
46
140
<el-button @click =" dialogVisible = false" >取 消</el-button >
47
141
</template >
48
142
</Dialog >
49
143
</template >
50
- <script setup lang="ts">
144
+ <script lang="ts" setup>
145
+ import { DICT_TYPE , getIntDictOptions } from ' @/utils/dict'
51
146
import * as ClueApi from ' @/api/crm/clue'
52
- import {CACHE_KEY , useCache } from " @/hooks/web/useCache" ;
53
- import * as UserApi from " @/api/system/user" ;
147
+ import * as AreaApi from ' @/api/system/area'
148
+ import { defaultProps } from ' @/utils/tree'
149
+ import * as UserApi from ' @/api/system/user'
150
+ import { useUserStore } from ' @/store/modules/user'
54
151
55
152
const { t } = useI18n () // 国际化
56
153
const message = useMessage () // 消息弹窗
57
154
58
155
const dialogVisible = ref (false ) // 弹窗的是否展示
59
156
const dialogTitle = ref (' ' ) // 弹窗的标题
60
- const formLoading = ref (false ) // 表单加载中 :1)修改时的数据加载;2)提交的按钮禁用
157
+ const formLoading = ref (false ) // 表单的加载中 :1)修改时的数据加载;2)提交的按钮禁用
61
158
const formType = ref (' ' ) // 表单的类型:create - 新增;update - 修改
159
+ const areaList = ref ([]) // 地区列表
62
160
const userOptions = ref <UserApi .UserVO []>([]) // 用户列表
63
161
const formData = ref ({
64
162
id: undefined ,
65
163
name: undefined ,
66
164
contactNextTime: undefined ,
67
- telephone: undefined ,
165
+ ownerUserId: 0 ,
68
166
mobile: undefined ,
69
- address: undefined ,
70
- ownerUserId: undefined ,
71
- contactLastTime: undefined ,
167
+ telephone: undefined ,
168
+ qq: undefined ,
169
+ wechat: undefined ,
170
+ email: undefined ,
171
+ areaId: undefined ,
172
+ detailAddress: undefined ,
173
+ industryId: undefined ,
174
+ level: undefined ,
175
+ source: undefined ,
72
176
remark: undefined
73
177
})
74
178
const formRules = reactive ({
@@ -92,13 +196,13 @@ const open = async (type: string, id?: number) => {
92
196
formLoading .value = false
93
197
}
94
198
}
199
+ // 获得地区列表
200
+ areaList .value = await AreaApi .getAreaTree ()
95
201
// 获得用户列表
96
202
userOptions .value = await UserApi .getSimpleUserList ()
97
- // 新建时负责人默认为登录人
203
+ // 默认新建时选中自己
98
204
if (formType .value === ' create' ) {
99
- const { wsCache } = useCache ()
100
- const user = wsCache .get (CACHE_KEY .USER ).user
101
- formData .value .ownerUserId = user .id
205
+ formData .value .ownerUserId = useUserStore ().getUser .id
102
206
}
103
207
}
104
208
defineExpose ({ open }) // 提供 open 方法,用于打开弹窗
@@ -135,11 +239,17 @@ const resetForm = () => {
135
239
id: undefined ,
136
240
name: undefined ,
137
241
contactNextTime: undefined ,
138
- telephone: undefined ,
242
+ ownerUserId: 0 ,
139
243
mobile: undefined ,
140
- address: undefined ,
141
- ownerUserId: undefined ,
142
- contactLastTime: undefined ,
244
+ telephone: undefined ,
245
+ qq: undefined ,
246
+ wechat: undefined ,
247
+ email: undefined ,
248
+ areaId: undefined ,
249
+ detailAddress: undefined ,
250
+ industryId: undefined ,
251
+ level: undefined ,
252
+ source: undefined ,
143
253
remark: undefined
144
254
}
145
255
formRef .value ?.resetFields ()
0 commit comments