Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
admin
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
ac9a77e6
authored
Feb 20, 2024
by
YunaiV
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
✨
CRM:优化客户的列表、编辑的样式
parent
04a42bc6
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
120 additions
and
167 deletions
+120
-167
src/api/crm/customer/index.ts
+25
-28
src/views/crm/backlog/components/ClueFollowList.vue
+2
-2
src/views/crm/clue/index.vue
+2
-2
src/views/crm/customer/CustomerForm.vue
+60
-68
src/views/crm/customer/index.vue
+31
-67
No files found.
src/api/crm/customer/index.ts
View file @
ac9a77e6
import
request
from
'@/config/axios'
import
request
from
'@/config/axios'
export
interface
CustomerVO
{
export
interface
CustomerVO
{
id
?:
number
id
:
number
// 编号
name
:
string
name
:
string
// 客户名称
industryId
:
number
followUpStatus
:
boolean
// 跟进状态
level
:
number
contactLastTime
:
Date
// 最后跟进时间
source
:
number
contactLastContent
:
string
// 最后跟进内容
followUpStatus
?:
boolean
contactNextTime
:
Date
// 下次联系时间
ownerUserId
:
number
// 负责人的用户编号
ownerUserName
?:
string
// 负责人的用户名称
ownerUserDept
?:
string
// 负责人的部门名称
lockStatus
?:
boolean
lockStatus
?:
boolean
dealStatus
?:
boolean
dealStatus
?:
boolean
mobile
:
string
mobile
:
string
// 手机号
telephone
:
string
telephone
:
string
// 电话
website
:
string
qq
:
string
// QQ
qq
:
string
wechat
:
string
// wechat
wechat
:
string
email
:
string
// email
email
:
string
areaId
:
number
// 所在地
description
:
string
areaName
?:
string
// 所在地名称
remark
:
string
detailAddress
:
string
// 详细地址
ownerUserId
?:
number
industryId
:
number
// 所属行业
ownerUserName
?:
string
level
:
number
// 客户等级
ownerUserDept
?:
string
source
:
number
// 客户来源
roUserIds
?:
string
remark
:
string
// 备注
rwUserIds
?:
string
creator
:
string
// 创建人
areaId
?:
number
creatorName
?:
string
// 创建人名称
areaName
?:
string
createTime
:
Date
// 创建时间
detailAddress
:
string
updateTime
:
Date
// 更新时间
contactLastTime
?:
Date
contactNextTime
:
Date
createTime
?:
Date
updateTime
?:
Date
creator
?:
string
creatorName
?:
string
}
}
// 查询客户列表
// 查询客户列表
...
...
src/views/crm/backlog/components/ClueFollowList.vue
View file @
ac9a77e6
...
@@ -29,7 +29,7 @@
...
@@ -29,7 +29,7 @@
<!-- 列表 -->
<!-- 列表 -->
<ContentWrap>
<ContentWrap>
<el-table
v-loading=
"loading"
:data=
"list"
:stripe=
"true"
:show-overflow-tooltip=
"true"
>
<el-table
v-loading=
"loading"
:data=
"list"
:stripe=
"true"
:show-overflow-tooltip=
"true"
>
<el-table-column
label=
"线索名称"
align=
"center"
prop=
"name"
fixed=
"left"
width=
"1
2
0"
>
<el-table-column
label=
"线索名称"
align=
"center"
prop=
"name"
fixed=
"left"
width=
"1
6
0"
>
<template
#
default=
"scope"
>
<template
#
default=
"scope"
>
<el-link
:underline=
"false"
type=
"primary"
@
click=
"openDetail(scope.row.id)"
>
<el-link
:underline=
"false"
type=
"primary"
@
click=
"openDetail(scope.row.id)"
>
{{
scope
.
row
.
name
}}
{{
scope
.
row
.
name
}}
...
@@ -41,7 +41,7 @@
...
@@ -41,7 +41,7 @@
<dict-tag
:type=
"DICT_TYPE.CRM_CUSTOMER_SOURCE"
:value=
"scope.row.source"
/>
<dict-tag
:type=
"DICT_TYPE.CRM_CUSTOMER_SOURCE"
:value=
"scope.row.source"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"手机
号
"
align=
"center"
prop=
"mobile"
width=
"120"
/>
<el-table-column
label=
"手机"
align=
"center"
prop=
"mobile"
width=
"120"
/>
<el-table-column
label=
"电话"
align=
"center"
prop=
"telephone"
width=
"130"
/>
<el-table-column
label=
"电话"
align=
"center"
prop=
"telephone"
width=
"130"
/>
<el-table-column
label=
"邮箱"
align=
"center"
prop=
"email"
width=
"180"
/>
<el-table-column
label=
"邮箱"
align=
"center"
prop=
"email"
width=
"180"
/>
<el-table-column
label=
"地址"
align=
"center"
prop=
"detailAddress"
width=
"180"
/>
<el-table-column
label=
"地址"
align=
"center"
prop=
"detailAddress"
width=
"180"
/>
...
...
src/views/crm/clue/index.vue
View file @
ac9a77e6
...
@@ -68,7 +68,7 @@
...
@@ -68,7 +68,7 @@
<el-tab-pane
label=
"下属负责的"
name=
"3"
/>
<el-tab-pane
label=
"下属负责的"
name=
"3"
/>
</el-tabs>
</el-tabs>
<el-table
v-loading=
"loading"
:data=
"list"
:stripe=
"true"
:show-overflow-tooltip=
"true"
>
<el-table
v-loading=
"loading"
:data=
"list"
:stripe=
"true"
:show-overflow-tooltip=
"true"
>
<el-table-column
label=
"线索名称"
align=
"center"
prop=
"name"
fixed=
"left"
width=
"1
2
0"
>
<el-table-column
label=
"线索名称"
align=
"center"
prop=
"name"
fixed=
"left"
width=
"1
6
0"
>
<template
#
default=
"scope"
>
<template
#
default=
"scope"
>
<el-link
:underline=
"false"
type=
"primary"
@
click=
"openDetail(scope.row.id)"
>
<el-link
:underline=
"false"
type=
"primary"
@
click=
"openDetail(scope.row.id)"
>
{{
scope
.
row
.
name
}}
{{
scope
.
row
.
name
}}
...
@@ -80,7 +80,7 @@
...
@@ -80,7 +80,7 @@
<dict-tag
:type=
"DICT_TYPE.CRM_CUSTOMER_SOURCE"
:value=
"scope.row.source"
/>
<dict-tag
:type=
"DICT_TYPE.CRM_CUSTOMER_SOURCE"
:value=
"scope.row.source"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"手机
号
"
align=
"center"
prop=
"mobile"
width=
"120"
/>
<el-table-column
label=
"手机"
align=
"center"
prop=
"mobile"
width=
"120"
/>
<el-table-column
label=
"电话"
align=
"center"
prop=
"telephone"
width=
"130"
/>
<el-table-column
label=
"电话"
align=
"center"
prop=
"telephone"
width=
"130"
/>
<el-table-column
label=
"邮箱"
align=
"center"
prop=
"email"
width=
"180"
/>
<el-table-column
label=
"邮箱"
align=
"center"
prop=
"email"
width=
"180"
/>
<el-table-column
label=
"地址"
align=
"center"
prop=
"detailAddress"
width=
"180"
/>
<el-table-column
label=
"地址"
align=
"center"
prop=
"detailAddress"
width=
"180"
/>
...
...
src/views/crm/customer/CustomerForm.vue
View file @
ac9a77e6
...
@@ -14,10 +14,10 @@
...
@@ -14,10 +14,10 @@
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"
所属行业"
prop=
"industryId
"
>
<el-form-item
label=
"
客户来源"
prop=
"source
"
>
<el-select
v-model=
"formData.
industryId"
placeholder=
"请选择所属行业
"
>
<el-select
v-model=
"formData.
source"
placeholder=
"请选择客户来源"
class=
"w-1/1
"
>
<el-option
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_
INDUSTRY
)"
v-for=
"dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_
SOURCE
)"
:key=
"dict.value"
:key=
"dict.value"
:label=
"dict.label"
:label=
"dict.label"
:value=
"dict.value"
:value=
"dict.value"
...
@@ -28,25 +28,22 @@
...
@@ -28,25 +28,22 @@
</el-row>
</el-row>
<el-row>
<el-row>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"客户来源"
prop=
"source"
>
<el-form-item
label=
"手机"
prop=
"mobile"
>
<el-select
v-model=
"formData.source"
placeholder=
"请选择客户来源"
>
<el-input
v-model=
"formData.mobile"
placeholder=
"请输入手机"
/>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_SOURCE)"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"客户级别"
prop=
"level"
>
<el-form-item
label=
"负责人"
prop=
"ownerUserId"
>
<el-select
v-model=
"formData.level"
placeholder=
"请选择客户级别"
>
<el-select
v-model=
"formData.ownerUserId"
:disabled=
"formType !== 'create'"
class=
"w-1/1"
>
<el-option
<el-option
v-for=
"
dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_LEVEL)
"
v-for=
"
item in userOptions
"
:key=
"
dict.value
"
:key=
"
item.id
"
:label=
"
dict.label
"
:label=
"
item.nickname
"
:value=
"
dict.value
"
:value=
"
item.id
"
/>
/>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
...
@@ -54,48 +51,63 @@
...
@@ -54,48 +51,63 @@
</el-row>
</el-row>
<el-row>
<el-row>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"
手机"
prop=
"mobil
e"
>
<el-form-item
label=
"
电话"
prop=
"telephon
e"
>
<el-input
v-model=
"formData.
mobile"
placeholder=
"请输入手机
"
/>
<el-input
v-model=
"formData.
telephone"
placeholder=
"请输入电话
"
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"
电话"
prop=
"telephone
"
>
<el-form-item
label=
"
邮箱"
prop=
"email
"
>
<el-input
v-model=
"formData.
telephone"
placeholder=
"请输入电话
"
/>
<el-input
v-model=
"formData.
email"
placeholder=
"请输入邮箱
"
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-row>
</el-row>
<el-row>
<el-row>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"
邮箱"
prop=
"email
"
>
<el-form-item
label=
"
微信"
prop=
"wechat
"
>
<el-input
v-model=
"formData.
email"
placeholder=
"请输入邮箱
"
/>
<el-input
v-model=
"formData.
wechat"
placeholder=
"请输入微信
"
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"QQ"
prop=
"qq"
>
<el-form-item
label=
"QQ"
prop=
"qq"
>
<el-input
v-model=
"formData.qq"
placeholder=
"请输入QQ"
/>
<el-input
v-model=
"formData.qq"
placeholder=
"请输入
QQ"
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-row>
</el-row>
<el-row>
<el-row>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"微信"
prop=
"wechat"
>
<el-form-item
label=
"客户行业"
prop=
"industryId"
>
<el-input
v-model=
"formData.wechat"
placeholder=
"请输入微信"
/>
<el-select
v-model=
"formData.industryId"
placeholder=
"请选择客户行业"
class=
"w-1/1"
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_INDUSTRY)"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"网址"
prop=
"website"
>
<el-form-item
label=
"客户级别"
prop=
"level"
>
<el-input
v-model=
"formData.website"
placeholder=
"请输入网址"
/>
<el-select
v-model=
"formData.level"
placeholder=
"请选择客户级别"
class=
"w-1/1"
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_LEVEL)"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-row>
</el-row>
<el-row>
<el-row>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"
所在地
"
prop=
"areaId"
>
<el-form-item
label=
"
地址
"
prop=
"areaId"
>
<el-tree-select
<el-tree-select
v-model=
"formData.areaId"
v-model=
"formData.areaId"
:data=
"areaList"
:data=
"areaList"
:props=
"defaultProps"
:props=
"defaultProps"
:render-after-expand=
"true"
:render-after-expand=
"true"
class=
"w-1/1"
/>
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
...
@@ -105,16 +117,7 @@
...
@@ -105,16 +117,7 @@
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-row>
</el-row>
<el-form-item
v-if=
"formType === 'create'"
label=
"负责人"
prop=
"userIds"
span=
"24"
>
<!-- TODO 芋艿:待整理 -->
<el-select
v-model=
"formData.ownerUserId"
>
<el-option
v-for=
"item in userOptions"
:key=
"parseInt(item.id)"
:label=
"item.nickname"
:value=
"parseInt(item.id)"
/>
</el-select>
</el-form-item>
<el-row>
<el-row>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"下次联系时间"
prop=
"contactNextTime"
>
<el-form-item
label=
"下次联系时间"
prop=
"contactNextTime"
>
...
@@ -126,17 +129,12 @@
...
@@ -126,17 +129,12 @@
/>
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-row>
<el-col
:span=
"12"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"客户描述"
prop=
"description"
>
<el-input
v-model=
"formData.description"
placeholder=
"请输入客户描述"
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
v-model=
"formData.remark"
placeholder=
"请输入备注"
/>
<el-input
type=
"textarea"
v-model=
"formData.remark"
placeholder=
"请输入备注"
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-row>
</el-form>
</el-form>
<template
#
footer
>
<template
#
footer
>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm"
>
确 定
</el-button>
...
@@ -150,7 +148,7 @@ import * as CustomerApi from '@/api/crm/customer'
...
@@ -150,7 +148,7 @@ import * as CustomerApi from '@/api/crm/customer'
import
*
as
AreaApi
from
'@/api/system/area'
import
*
as
AreaApi
from
'@/api/system/area'
import
{
defaultProps
}
from
'@/utils/tree'
import
{
defaultProps
}
from
'@/utils/tree'
import
*
as
UserApi
from
'@/api/system/user'
import
*
as
UserApi
from
'@/api/system/user'
import
{
CACHE_KEY
,
useCache
}
from
'@/hooks/web/useCache
'
import
{
useUserStore
}
from
'@/store/modules/user
'
const
{
t
}
=
useI18n
()
// 国际化
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
const
message
=
useMessage
()
// 消息弹窗
...
@@ -164,21 +162,19 @@ const userOptions = ref<UserApi.UserVO[]>([]) // 用户列表
...
@@ -164,21 +162,19 @@ const userOptions = ref<UserApi.UserVO[]>([]) // 用户列表
const
formData
=
ref
({
const
formData
=
ref
({
id
:
undefined
,
id
:
undefined
,
name
:
undefined
,
name
:
undefined
,
contactNextTime
:
undefined
,
ownerUserId
:
0
,
mobile
:
undefined
,
mobile
:
undefined
,
industryId
:
undefined
,
level
:
undefined
,
source
:
undefined
,
telephone
:
undefined
,
telephone
:
undefined
,
website
:
undefined
,
qq
:
undefined
,
qq
:
undefined
,
wechat
:
undefined
,
wechat
:
undefined
,
email
:
undefined
,
email
:
undefined
,
description
:
undefined
,
remark
:
undefined
,
areaId
:
undefined
,
areaId
:
undefined
,
detailAddress
:
undefined
,
detailAddress
:
undefined
,
contactNextTime
:
undefined
,
industryId
:
undefined
,
ownerUserId
:
undefined
level
:
undefined
,
source
:
undefined
,
remark
:
undefined
})
})
const
formRules
=
reactive
({
const
formRules
=
reactive
({
name
:
[{
required
:
true
,
message
:
'客户名称不能为空'
,
trigger
:
'blur'
}],
name
:
[{
required
:
true
,
message
:
'客户名称不能为空'
,
trigger
:
'blur'
}],
...
@@ -207,9 +203,7 @@ const open = async (type: string, id?: number) => {
...
@@ -207,9 +203,7 @@ const open = async (type: string, id?: number) => {
userOptions
.
value
=
await
UserApi
.
getSimpleUserList
()
userOptions
.
value
=
await
UserApi
.
getSimpleUserList
()
// 默认新建时选中自己
// 默认新建时选中自己
if
(
formType
.
value
===
'create'
)
{
if
(
formType
.
value
===
'create'
)
{
const
{
wsCache
}
=
useCache
()
formData
.
value
.
ownerUserId
=
useUserStore
().
getUser
.
id
const
user
=
wsCache
.
get
(
CACHE_KEY
.
USER
).
user
formData
.
value
.
ownerUserId
=
user
.
id
}
}
}
}
defineExpose
({
open
})
// 提供 open 方法,用于打开弹窗
defineExpose
({
open
})
// 提供 open 方法,用于打开弹窗
...
@@ -245,21 +239,19 @@ const resetForm = () => {
...
@@ -245,21 +239,19 @@ const resetForm = () => {
formData
.
value
=
{
formData
.
value
=
{
id
:
undefined
,
id
:
undefined
,
name
:
undefined
,
name
:
undefined
,
contactNextTime
:
undefined
,
ownerUserId
:
0
,
mobile
:
undefined
,
mobile
:
undefined
,
industryId
:
undefined
,
level
:
undefined
,
source
:
undefined
,
telephone
:
undefined
,
telephone
:
undefined
,
website
:
undefined
,
qq
:
undefined
,
qq
:
undefined
,
wechat
:
undefined
,
wechat
:
undefined
,
email
:
undefined
,
email
:
undefined
,
description
:
undefined
,
remark
:
undefined
,
areaId
:
undefined
,
areaId
:
undefined
,
detailAddress
:
undefined
,
detailAddress
:
undefined
,
contactNextTime
:
undefined
,
industryId
:
undefined
,
ownerUserId
:
undefined
level
:
undefined
,
source
:
undefined
,
remark
:
undefined
}
}
formRef
.
value
?.
resetFields
()
formRef
.
value
?.
resetFields
()
}
}
...
...
src/views/crm/customer/index.vue
View file @
ac9a77e6
...
@@ -104,13 +104,12 @@
...
@@ -104,13 +104,12 @@
<!-- 列表 -->
<!-- 列表 -->
<ContentWrap>
<ContentWrap>
<el-tabs
v-model=
"activeName"
@
tab-click=
"handleClick"
>
<el-tabs
v-model=
"activeName"
@
tab-click=
"handle
Tab
Click"
>
<el-tab-pane
label=
"我负责的"
name=
"1"
/>
<el-tab-pane
label=
"我负责的"
name=
"1"
/>
<el-tab-pane
label=
"我参与的"
name=
"2"
/>
<el-tab-pane
label=
"我参与的"
name=
"2"
/>
<el-tab-pane
label=
"下属负责的"
name=
"3"
/>
<el-tab-pane
label=
"下属负责的"
name=
"3"
/>
</el-tabs>
</el-tabs>
<el-table
v-loading=
"loading"
:data=
"list"
:show-overflow-tooltip=
"true"
:stripe=
"true"
>
<el-table
v-loading=
"loading"
:data=
"list"
:show-overflow-tooltip=
"true"
:stripe=
"true"
>
<el-table-column
align=
"center"
label=
"编号"
fixed=
"left"
prop=
"id"
/>
<el-table-column
align=
"center"
label=
"客户名称"
fixed=
"left"
prop=
"name"
width=
"160"
>
<el-table-column
align=
"center"
label=
"客户名称"
fixed=
"left"
prop=
"name"
width=
"160"
>
<template
#
default=
"scope"
>
<template
#
default=
"scope"
>
<el-link
:underline=
"false"
type=
"primary"
@
click=
"openDetail(scope.row.id)"
>
<el-link
:underline=
"false"
type=
"primary"
@
click=
"openDetail(scope.row.id)"
>
...
@@ -118,24 +117,24 @@
...
@@ -118,24 +117,24 @@
</el-link>
</el-link>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
align=
"center"
label=
"手机"
prop=
"mobile"
width=
"120"
/>
<el-table-column
align=
"center"
label=
"电话"
prop=
"telephone"
width=
"120"
/>
<el-table-column
align=
"center"
label=
"客户来源"
prop=
"source"
width=
"100"
>
<el-table-column
align=
"center"
label=
"客户来源"
prop=
"source"
width=
"100"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.CRM_CUSTOMER_SOURCE"
:value=
"scope.row.source"
/>
<dict-tag
:type=
"DICT_TYPE.CRM_CUSTOMER_SOURCE"
:value=
"scope.row.source"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
align=
"center"
label=
"所属行业"
prop=
"industryId"
width=
"120"
>
<el-table-column
label=
"手机"
align=
"center"
prop=
"mobile"
width=
"120"
/>
<el-table-column
label=
"电话"
align=
"center"
prop=
"telephone"
width=
"130"
/>
<el-table-column
label=
"邮箱"
align=
"center"
prop=
"email"
width=
"180"
/>
<el-table-column
align=
"center"
label=
"客户级别"
prop=
"level"
width=
"135"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.CRM_CUSTOMER_
INDUSTRY"
:value=
"scope.row.industryId
"
/>
<dict-tag
:type=
"DICT_TYPE.CRM_CUSTOMER_
LEVEL"
:value=
"scope.row.level
"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
align=
"center"
label=
"客户
级别"
prop=
"level"
width=
"13
0"
>
<el-table-column
align=
"center"
label=
"客户
行业"
prop=
"industryId"
width=
"10
0"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.CRM_CUSTOMER_
LEVEL"
:value=
"scope.row.level
"
/>
<dict-tag
:type=
"DICT_TYPE.CRM_CUSTOMER_
INDUSTRY"
:value=
"scope.row.industryId
"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
align=
"center"
label=
"网址"
prop=
"website"
width=
"200"
/>
<el-table-column
<el-table-column
:formatter=
"dateFormatter"
:formatter=
"dateFormatter"
align=
"center"
align=
"center"
...
@@ -144,14 +143,16 @@
...
@@ -144,14 +143,16 @@
width=
"180px"
width=
"180px"
/>
/>
<el-table-column
align=
"center"
label=
"备注"
prop=
"remark"
width=
"200"
/>
<el-table-column
align=
"center"
label=
"备注"
prop=
"remark"
width=
"200"
/>
<el-table-column
align=
"center"
label=
"锁定状态"
prop=
"lockStatus"
>
<
template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.INFRA_BOOLEAN_STRING"
:value=
"scope.row.lockStatus"
/>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"成交状态"
prop=
"dealStatus"
>
<el-table-column
align=
"center"
label=
"成交状态"
prop=
"dealStatus"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.INFRA_BOOLEAN_STRING"
:value=
"scope.row.dealStatus"
/>
<dict-tag
:type=
"DICT_TYPE.INFRA_BOOLEAN_STRING"
:value=
"scope.row.dealStatus"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
align=
"center"
label=
"距离进入公海"
prop=
"poolDay"
width=
"120"
>
<
template
#
default=
"scope"
>
{{
scope
.
row
.
poolDay
}}
天
</
template
>
</el-table-column>
<el-table-column
<el-table-column
:formatter=
"dateFormatter"
:formatter=
"dateFormatter"
align=
"center"
align=
"center"
...
@@ -159,10 +160,17 @@
...
@@ -159,10 +160,17 @@
prop=
"contactLastTime"
prop=
"contactLastTime"
width=
"180px"
width=
"180px"
/>
/>
<el-table-column
align=
"center"
label=
"最后跟进记录"
prop=
"contactLastContent"
width=
"200"
/>
<el-table-column
label=
"地址"
align=
"center"
prop=
"detailAddress"
width=
"180"
/>
<el-table-column
align=
"center"
label=
"距离进入公海天数"
prop=
"poolDay"
width=
"140"
>
<
template
#
default=
"scope"
>
{{
scope
.
row
.
poolDay
}}
天
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"负责人"
prop=
"ownerUserName"
width=
"100px"
/>
<el-table-column
align=
"center"
label=
"所属部门"
prop=
"ownerUserDeptName"
width=
"100px"
/>
<el-table-column
<el-table-column
:formatter=
"dateFormatter"
:formatter=
"dateFormatter"
align=
"center"
align=
"center"
label=
"
创建
时间"
label=
"
更新
时间"
prop=
"updateTime"
prop=
"updateTime"
width=
"180px"
width=
"180px"
/>
/>
...
@@ -173,8 +181,6 @@
...
@@ -173,8 +181,6 @@
prop=
"createTime"
prop=
"createTime"
width=
"180px"
width=
"180px"
/>
/>
<el-table-column
align=
"center"
label=
"负责人"
prop=
"ownerUserName"
width=
"100px"
/>
<el-table-column
align=
"center"
label=
"所属部门"
prop=
"ownerUserDeptName"
width=
"100px"
/>
<el-table-column
align=
"center"
label=
"创建人"
prop=
"creatorName"
width=
"100px"
/>
<el-table-column
align=
"center"
label=
"创建人"
prop=
"creatorName"
width=
"100px"
/>
<el-table-column
align=
"center"
fixed=
"right"
label=
"操作"
min-width=
"150"
>
<el-table-column
align=
"center"
fixed=
"right"
label=
"操作"
min-width=
"150"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
...
@@ -228,62 +234,32 @@ const { t } = useI18n() // 国际化
...
@@ -228,62 +234,32 @@ const { t } = useI18n() // 国际化
const
loading
=
ref
(
true
)
// 列表的加载中
const
loading
=
ref
(
true
)
// 列表的加载中
const
total
=
ref
(
0
)
// 列表的总页数
const
total
=
ref
(
0
)
// 列表的总页数
const
list
=
ref
([])
// 列表的数据
const
list
=
ref
([])
// 列表的数据
const
queryParams
=
ref
<
{
const
queryParams
=
reactive
({
pageNo
:
number
pageSize
:
number
name
:
string
mobile
:
string
industryId
:
number
|
undefined
level
:
number
|
undefined
source
:
number
|
undefined
sceneType
:
number
|
undefined
pool
:
boolean
|
undefined
}
>
({
pageNo
:
1
,
pageNo
:
1
,
pageSize
:
10
,
pageSize
:
10
,
sceneType
:
'1'
,
// 默认和 activeName 相等
name
:
''
,
name
:
''
,
mobile
:
''
,
mobile
:
''
,
industryId
:
undefined
,
industryId
:
undefined
,
level
:
undefined
,
level
:
undefined
,
source
:
undefined
,
source
:
undefined
,
sceneType
:
undefined
,
pool
:
undefined
pool
:
undefined
})
})
const
queryFormRef
=
ref
()
// 搜索的表单
const
queryFormRef
=
ref
()
// 搜索的表单
const
exportLoading
=
ref
(
false
)
// 导出的加载中
const
exportLoading
=
ref
(
false
)
// 导出的加载中
const
activeName
=
ref
(
'1'
)
// 列表 tab
const
activeName
=
ref
(
'1'
)
// 列表 tab
enum
CrmSceneTypeEnum
{
/** tab 切换 */
OWNER
=
1
,
const
handleTabClick
=
(
tab
:
TabsPaneContext
)
=>
{
INVOLVED
=
2
,
queryParams
.
sceneType
=
tab
.
paneName
SUBORDINATE
=
3
handleQuery
()
}
const
handleClick
=
(
tab
:
TabsPaneContext
)
=>
{
switch
(
tab
.
paneName
)
{
case
'1'
:
resetQuery
(()
=>
{
queryParams
.
value
.
sceneType
=
CrmSceneTypeEnum
.
OWNER
})
break
case
'2'
:
resetQuery
(()
=>
{
queryParams
.
value
.
sceneType
=
CrmSceneTypeEnum
.
INVOLVED
})
break
case
'3'
:
resetQuery
(()
=>
{
queryParams
.
value
.
sceneType
=
CrmSceneTypeEnum
.
SUBORDINATE
})
break
}
}
}
/** 查询列表 */
/** 查询列表 */
const
getList
=
async
()
=>
{
const
getList
=
async
()
=>
{
loading
.
value
=
true
loading
.
value
=
true
try
{
try
{
const
data
=
await
CustomerApi
.
getCustomerPage
(
queryParams
.
value
)
const
data
=
await
CustomerApi
.
getCustomerPage
(
queryParams
)
list
.
value
=
data
.
list
list
.
value
=
data
.
list
total
.
value
=
data
.
total
total
.
value
=
data
.
total
}
finally
{
}
finally
{
...
@@ -293,25 +269,13 @@ const getList = async () => {
...
@@ -293,25 +269,13 @@ const getList = async () => {
/** 搜索按钮操作 */
/** 搜索按钮操作 */
const
handleQuery
=
()
=>
{
const
handleQuery
=
()
=>
{
queryParams
.
value
.
pageNo
=
1
queryParams
.
pageNo
=
1
getList
()
getList
()
}
}
/** 重置按钮操作 */
/** 重置按钮操作 */
const
resetQuery
=
(
func
:
Function
|
undefined
=
undefined
)
=>
{
const
resetQuery
=
()
=>
{
queryFormRef
.
value
.
resetFields
()
queryFormRef
.
value
.
resetFields
()
queryParams
.
value
=
{
pageNo
:
1
,
pageSize
:
10
,
name
:
''
,
mobile
:
''
,
industryId
:
undefined
,
level
:
undefined
,
source
:
undefined
,
sceneType
:
undefined
,
pool
:
undefined
}
func
&&
func
()
handleQuery
()
handleQuery
()
}
}
...
@@ -353,7 +317,7 @@ const handleExport = async () => {
...
@@ -353,7 +317,7 @@ const handleExport = async () => {
await
message
.
exportConfirm
()
await
message
.
exportConfirm
()
// 发起导出
// 发起导出
exportLoading
.
value
=
true
exportLoading
.
value
=
true
const
data
=
await
CustomerApi
.
exportCustomer
(
queryParams
.
value
)
const
data
=
await
CustomerApi
.
exportCustomer
(
queryParams
)
download
.
excel
(
data
,
'客户.xls'
)
download
.
excel
(
data
,
'客户.xls'
)
}
catch
{
}
catch
{
}
finally
{
}
finally
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment