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
Unverified
Commit
45521c13
authored
Dec 30, 2023
by
芋道源码
Committed by
Gitee
Dec 30, 2023
Browse files
Options
Browse Files
Download
Plain Diff
!350 crm联系人商机review修改
Merge pull request !350 from zyna/dev
parents
0338caee
2cfe006d
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
74 additions
and
107 deletions
+74
-107
src/api/crm/business/index.ts
+12
-0
src/api/crm/contact/index.ts
+16
-1
src/api/crm/contactbusinesslink/index.ts
+0
-47
src/views/crm/business/BusinessForm.vue
+2
-1
src/views/crm/business/components/BusinessForContactLink.vue
+21
-27
src/views/crm/business/components/BusinessList.vue
+4
-0
src/views/crm/business/components/BusinessListByContact.vue
+16
-18
src/views/crm/contact/detail/ContactDetailsHeader.vue
+1
-11
src/views/crm/contact/detail/index.vue
+2
-2
No files found.
src/api/crm/business/index.ts
View file @
45521c13
/*
* @Author: zyna
* @Date: 2023-12-02 13:08:56
* @LastEditTime: 2023-12-17 16:28:20
* @FilePath: \yudao-ui-admin-vue3\src\api\crm\business\index.ts
* @Description:
*/
import
request
from
'@/config/axios'
export
interface
BusinessVO
{
...
...
@@ -55,3 +62,8 @@ export const deleteBusiness = async (id: number) => {
export
const
exportBusiness
=
async
(
params
)
=>
{
return
await
request
.
download
({
url
:
`/crm/business/export-excel`
,
params
})
}
//联系人关联商机列表
export
const
getBusinessPageByContact
=
async
(
params
)
=>
{
return
await
request
.
get
({
url
:
`/crm/business/page-by-contact`
,
params
})
}
src/api/crm/contact/index.ts
View file @
45521c13
...
...
@@ -25,7 +25,11 @@ export interface ContactVO {
areaName
:
string
ownerUserName
:
string
}
export
interface
ContactBusinessLinkVO
{
id
:
number
contactId
:
number
businessId
:
number
}
// 查询 CRM 联系人列表
export
const
getContactPage
=
async
(
params
)
=>
{
return
await
request
.
get
({
url
:
`/crm/contact/page`
,
params
})
...
...
@@ -65,3 +69,13 @@ export const exportContact = async (params) => {
export
const
getSimpleContactList
=
async
()
=>
{
return
await
request
.
get
({
url
:
`/crm/contact/simple-all-list`
})
}
//批量新增联系人商机关联
export
const
createContactBusinessLinkBatch
=
async
(
data
:
ContactBusinessLinkVO
[])
=>
{
return
await
request
.
post
({
url
:
`/crm/contact/create-batch-business`
,
data
})
}
//解除联系人商机关联
export
const
deleteContactBusinessLink
=
async
(
data
:
ContactBusinessLinkVO
)
=>
{
return
await
request
.
delete
({
url
:
`/crm/contact/delete-batch-business`
,
data
})
}
\ No newline at end of file
src/api/crm/contactbusinesslink/index.ts
deleted
100644 → 0
View file @
0338caee
import
request
from
'@/config/axios'
export
interface
ContactBusinessLinkVO
{
id
:
number
contactId
:
number
businessId
:
number
}
// 查询联系人商机关联分页
export
const
getContactBusinessLinkPage
=
async
(
params
)
=>
{
return
await
request
.
get
({
url
:
`/crm/contact-business-link/page`
,
params
})
}
// 查询联系人商机关联详情
export
const
getContactBusinessLink
=
async
(
id
:
number
)
=>
{
return
await
request
.
get
({
url
:
`/crm/contact-business-link/get?id=`
+
id
})
}
// 新增联系人商机关联
export
const
createContactBusinessLink
=
async
(
data
:
ContactBusinessLinkVO
)
=>
{
return
await
request
.
post
({
url
:
`/crm/contact-business-link/create`
,
data
})
}
// 修改联系人商机关联
export
const
updateContactBusinessLink
=
async
(
data
:
ContactBusinessLinkVO
)
=>
{
return
await
request
.
put
({
url
:
`/crm/contact-business-link/update`
,
data
})
}
// 删除联系人商机关联
export
const
deleteContactBusinessLink
=
async
(
data
:
ContactBusinessLinkVO
)
=>
{
return
await
request
.
delete
({
url
:
`/crm/contact-business-link/delete-batch`
,
data
})
}
// 导出联系人商机关联 Excel
export
const
exportContactBusinessLink
=
async
(
params
)
=>
{
return
await
request
.
download
({
url
:
`/crm/contact-business-link/export-excel`
,
params
})
}
//批量新增联系人商机关联
export
const
createContactBusinessLinkBatch
=
async
(
data
:
ContactBusinessLinkVO
[])
=>
{
return
await
request
.
post
({
url
:
`/crm/contact-business-link/create-batch`
,
data
})
}
// 查询联系人关联商机列表
export
const
getBusinessByContactPage
=
async
(
params
)
=>
{
return
await
request
.
get
({
url
:
`/crm/contact-business-link/page-by-contact`
,
params
})
}
// TODO @zyna:根据后端,调整下请求
src/views/crm/business/BusinessForm.vue
View file @
45521c13
...
...
@@ -242,7 +242,8 @@ const queryParams = reactive({
mobile
:
null
,
industryId
:
null
,
level
:
null
,
source
:
null
source
:
null
,
pool
:
false
})
// 选择客户
const
showCustomer
=
ref
(
false
)
...
...
src/views/crm/
contactBusinessLink/components/BusinessLinkContactList
.vue
→
src/views/crm/
business/components/BusinessForContactLink
.vue
View file @
45521c13
...
...
@@ -29,7 +29,6 @@
</ContentWrap>
<!-- 列表 -->
<!-- TODO @zyna:字段按照他们对齐下 -->
<ContentWrap
class=
"mt-10px"
>
<el-table
v-loading=
"loading"
...
...
@@ -75,12 +74,14 @@
</template>
<
script
setup
lang=
"ts"
>
import
*
as
BusinessApi
from
'@/api/crm/business'
import
BusinessForm
from
'../
../business/
BusinessForm.vue'
import
BusinessForm
from
'../BusinessForm.vue'
import
{
fenToYuanFormat
}
from
'@/utils/formatter'
// TODO @zyna:下面这个拼接,要注意大小写哈
import
*
as
ContactbusinesslinkApi
from
'@/api/crm/contactbusinesslink'
const
message
=
useMessage
()
// 消息弹窗
import
*
as
ContactApi
from
'@/api/crm/contact'
const
message
=
useMessage
()
// 消息弹窗
const
props
=
defineProps
<
{
customerId
:
number
}
>
()
defineOptions
({
name
:
'CrmBusinessLinkContactList'
})
const
dialogVisible
=
ref
(
false
)
// 弹窗的是否展示
...
...
@@ -93,8 +94,8 @@ const formLoading = ref(false) // 表单的加载中:1)修改时的数据加
const
queryParams
=
reactive
({
pageNo
:
1
,
pageSize
:
10
,
// TODO @zyna:是不是要根据 customerId 筛选?
name
:
undefine
d
name
:
undefined
,
customerId
:
props
.
customerI
d
})
const
contactIdProp
=
ref
(
0
)
// 联系人编号
...
...
@@ -102,8 +103,7 @@ const contactIdProp = ref(0) // 联系人编号
const
open
=
async
(
contactId
:
number
)
=>
{
dialogVisible
.
value
=
true
contactIdProp
.
value
=
contactId
// TODO @zyna:下面要 await 下;一般 idea 如果有黄色警告,最好都看看哈
getList
()
await
getList
()
}
defineExpose
({
open
})
// 提供 open 方法,用于打开弹窗
...
...
@@ -111,7 +111,7 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗
const
getList
=
async
()
=>
{
loading
.
value
=
true
try
{
const
data
=
await
BusinessApi
.
getBusinessPage
(
queryParams
)
const
data
=
await
BusinessApi
.
getBusinessPage
ByCustomer
(
queryParams
)
list
.
value
=
data
.
list
total
.
value
=
data
.
total
}
finally
{
...
...
@@ -141,25 +141,19 @@ const openForm = () => {
const
emit
=
defineEmits
([
'success'
])
// 定义 success 事件,用于操作成功后的回调
const
businessRef
=
ref
()
const
submitForm
=
async
()
=>
{
// TODO @zyna:可以 if return,这样括号层级简单一点
if
(
businessRef
.
value
.
getSelectionRows
().
length
===
0
)
{
message
.
success
(
'未选择商机'
)
}
else
{
// TODO @zyna:这里 postData 应该不用 ref,搞个 数组就好了?
const
postData
=
ref
<
ContactbusinesslinkApi
.
ContactBusinessLinkVO
[]
>
([])
businessRef
.
value
.
getSelectionRows
().
forEach
((
element
)
=>
{
// TODO @zyna:可以直接 push,不用声明 data
let
data
=
{
id
:
undefined
,
businessId
:
element
.
id
,
contactId
:
contactIdProp
.
value
}
postData
.
value
.
push
(
data
)
})
await
ContactbusinesslinkApi
.
createContactBusinessLinkBatch
(
postData
.
value
)
dialogVisible
.
value
=
false
emit
(
'success'
)
return
message
.
success
(
'未选择商机'
)
}
const
postData
=
[]
businessRef
.
value
.
getSelectionRows
().
forEach
((
element
)
=>
{
postData
.
push
({
businessId
:
element
.
id
,
contactId
:
contactIdProp
.
value
})
})
await
ContactApi
.
createContactBusinessLinkBatch
(
postData
)
dialogVisible
.
value
=
false
emit
(
'success'
)
}
/** 打开联系人详情 */
...
...
src/views/crm/business/components/BusinessList.vue
View file @
45521c13
...
...
@@ -39,6 +39,7 @@ import * as BusinessApi from '@/api/crm/business'
import
BusinessForm
from
'./../BusinessForm.vue'
import
{
BizTypeEnum
}
from
'@/api/crm/permission'
import
{
fenToYuanFormat
}
from
'@/utils/formatter'
import
*
as
ContactApi
from
'@/api/crm/contact'
defineOptions
({
name
:
'CrmBusinessList'
})
const
props
=
defineProps
<
{
...
...
@@ -67,12 +68,15 @@ const getList = async () => {
case
BizTypeEnum
.
CRM_CUSTOMER
:
queryParams
.
customerId
=
props
.
bizId
data
=
await
BusinessApi
.
getBusinessPageByCustomer
(
queryParams
)
console
.
log
(
data
)
break
default
:
return
}
list
.
value
=
data
.
list
total
.
value
=
data
.
total
console
.
log
(
list
.
value
)
}
finally
{
loading
.
value
=
false
}
...
...
src/views/crm/
contactBusinessLink
/components/BusinessListByContact.vue
→
src/views/crm/
business
/components/BusinessListByContact.vue
View file @
45521c13
...
...
@@ -5,8 +5,8 @@
<Icon
class=
"mr-5px"
icon=
"ep:opportunity"
/>
创建商机
</el-button>
<el-button
@
click=
"openBusinessLink"
>
关联
</el-button>
<el-button
@
click=
"deleteBusinessLink"
>
解除关联
</el-button>
<el-button
@
click=
"openBusinessLink"
>
<Icon
class=
"mr-5px"
icon=
"ep:circle-plus"
/>
关联
</el-button>
<el-button
@
click=
"deleteBusinessLink"
>
<Icon
class=
"mr-5px"
icon=
"ep:remove"
/>
解除关联
</el-button>
</el-row>
<!-- 列表 -->
...
...
@@ -41,22 +41,25 @@
</ContentWrap>
<!-- 表单弹窗:添加 -->
<BusinessForm
ref=
"formRef"
@
success=
"getList"
/>
<!---->
<BusinessLink
ref=
"businessLinkRef"
@
success=
"getList"
/>
<BusinessForm
ref=
"formRef"
@
success=
"getList"
/>
<!--
关联商机选择弹框
-->
<BusinessLink
ref=
"businessLinkRef"
@
success=
"getList"
:customer-id=
"props.customerId"
/>
</template>
<
script
setup
lang=
"ts"
>
import
*
as
ContactBusinessLinkApi
from
'@/api/crm/contactbusinesslink
'
import
BusinessForm
from
'../
../business/
BusinessForm.vue'
import
*
as
BusinessApi
from
'@/api/crm/business
'
import
BusinessForm
from
'../BusinessForm.vue'
import
{
BizTypeEnum
}
from
'@/api/crm/permission'
import
{
fenToYuanFormat
}
from
'@/utils/formatter'
import
BusinessLink
from
'./BusinessLinkContactList.vue'
import
BusinessLink
from
'./BusinessForContactLink.vue'
import
*
as
ContactApi
from
'@/api/crm/contact'
import
{
el
}
from
'element-plus/es/locale'
const
message
=
useMessage
()
// 消息弹窗
// TODO @zyna:这个组件,可以服用 BusinessList,然后根据传入的编号类型,做一些判断?
defineOptions
({
name
:
'CrmBusinessContactList'
})
const
props
=
defineProps
<
{
bizType
:
number
// 业务类型
bizId
:
number
// 业务编号
customerId
:
number
}
>
()
const
loading
=
ref
(
true
)
// 列表的加载中
...
...
@@ -79,7 +82,7 @@ const getList = async () => {
switch
(
props
.
bizType
)
{
case
BizTypeEnum
.
CRM_CONTACT
:
queryParams
.
contactId
=
props
.
bizId
data
=
await
ContactBusinessLinkApi
.
getBusinessByContactPage
(
queryParams
)
data
=
await
BusinessApi
.
getBusinessPageByContact
(
queryParams
)
break
default
:
return
...
...
@@ -113,16 +116,11 @@ const deleteBusinessLink = async () => {
if
(
businessRef
.
value
.
getSelectionRows
().
length
===
0
)
{
message
.
success
(
'未选择商机'
)
}
else
{
const
postData
=
ref
<
ContactBusinessLinkApi
.
ContactBusinessLinkVO
[]
>
([])
const
postData
=
[]
businessRef
.
value
.
getSelectionRows
().
forEach
((
element
)
=>
{
let
data
=
{
id
:
undefined
,
businessId
:
element
.
id
,
contactId
:
props
.
bizId
}
postData
.
value
.
push
(
data
)
postData
.
push
(
element
.
businessContactId
)
})
await
Contact
BusinessLinkApi
.
deleteContactBusinessLink
(
postData
.
value
)
await
Contact
Api
.
deleteContactBusinessLink
(
postData
)
handleQuery
()
}
}
...
...
src/views/crm/contact/detail/ContactDetailsHeader.vue
View file @
45521c13
<!--
* @Author: zyna
* @Date: 2023-12-02 13:08:57
* @LastEditTime: 2023-12-03 13:47:16
* @FilePath: \yudao-ui-admin-vue3\src\views\crm\contact\detail\ContactDetailsHeader.vue
* @Description:
-->
<!-- TODO @zyna:上面这个不加哈 -->
<
template
>
<!-- TODO @zyna:loading 缺了 -->
<div
v-loading=
"loading"
>
<div>
<div
class=
"flex items-start justify-between"
>
<div>
<el-col>
...
...
@@ -48,7 +39,6 @@
import
*
as
ContactApi
from
'@/api/crm/contact'
import
ContactForm
from
'@/views/crm/contact/ContactForm.vue'
import
{
formatDate
}
from
'@/utils/formatTime'
//操作修改
const
formRef
=
ref
()
const
openForm
=
(
type
:
string
,
id
?:
number
)
=>
{
...
...
src/views/crm/contact/detail/index.vue
View file @
45521c13
...
...
@@ -10,7 +10,7 @@
<PermissionList
:biz-id=
"contact.id!"
:biz-type=
"BizTypeEnum.CRM_CONTACT"
/>
</el-tab-pane>
<el-tab-pane
label=
"商机"
lazy
>
<BusinessList
:biz-id=
"contact.id!"
:biz-type=
"BizTypeEnum.CRM_CONTACT"
/>
<BusinessList
:biz-id=
"contact.id!"
:biz-type=
"BizTypeEnum.CRM_CONTACT"
:customer-id=
"contact.customerId"
/>
</el-tab-pane>
</el-tabs>
</el-col>
...
...
@@ -21,7 +21,7 @@ import { useTagsViewStore } from '@/store/modules/tagsView'
import
*
as
ContactApi
from
'@/api/crm/contact'
import
ContactDetailsHeader
from
'@/views/crm/contact/detail/ContactDetailsHeader.vue'
import
ContactDetailsInfo
from
'@/views/crm/contact/detail/ContactDetailsInfo.vue'
import
BusinessList
from
'@/views/crm/
contactBusinessLink
/components/BusinessListByContact.vue'
// 商机列表
import
BusinessList
from
'@/views/crm/
business
/components/BusinessListByContact.vue'
// 商机列表
import
PermissionList
from
'@/views/crm/permission/components/PermissionList.vue'
// 团队成员列表(权限)
import
{
BizTypeEnum
}
from
'@/api/crm/permission'
...
...
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