Browse Source

!350 crm联系人商机review修改
Merge pull request !350 from zyna/dev

芋道源码 1 year ago
parent
commit
45521c139c

+ 12 - 0
src/api/crm/business/index.ts

@@ -1,3 +1,10 @@
+/*
+ * @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 })
+}

+ 15 - 1
src/api/crm/contact/index.ts

@@ -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 })
+}

+ 0 - 47
src/api/crm/contactbusinesslink/index.ts

@@ -1,47 +0,0 @@
-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:根据后端,调整下请求

+ 2 - 1
src/views/crm/business/BusinessForm.vue

@@ -242,7 +242,8 @@ const queryParams = reactive({
   mobile: null,
   industryId: null,
   level: null,
-  source: null
+  source: null,
+  pool:false
 })
 // 选择客户
 const showCustomer = ref(false)

+ 21 - 27
src/views/crm/contactBusinessLink/components/BusinessLinkContactList.vue → src/views/crm/business/components/BusinessForContactLink.vue

@@ -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: undefined
+  name: undefined,
+  customerId: props.customerId
 })
 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.getBusinessPageByCustomer(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')
 }
 
 /** 打开联系人详情 */

+ 4 - 0
src/views/crm/business/components/BusinessList.vue

@@ -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
   }

+ 16 - 18
src/views/crm/contactBusinessLink/components/BusinessListByContact.vue → src/views/crm/business/components/BusinessListByContact.vue

@@ -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 ContactBusinessLinkApi.deleteContactBusinessLink(postData.value)
+    await ContactApi.deleteContactBusinessLink(postData)
     handleQuery()
   }
 }

+ 1 - 11
src/views/crm/contact/detail/ContactDetailsHeader.vue

@@ -1,14 +1,5 @@
-<!--
- * @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) => {

+ 2 - 2
src/views/crm/contact/detail/index.vue

@@ -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'