|
@@ -1,22 +1,27 @@
|
|
|
<template>
|
|
<template>
|
|
|
<div class="end_item">
|
|
<div class="end_item">
|
|
|
- <SearchBlock :searchList="blockSearchList" class="search_block">
|
|
|
|
|
|
|
+ <SearchBlock :searchList="blockSearchList"
|
|
|
|
|
+ class="search_block"
|
|
|
|
|
+ @searchChange="HandleSearchChange">
|
|
|
<template #position>
|
|
<template #position>
|
|
|
- <FormSearchGroup :searchList="formSearchList" />
|
|
|
|
|
|
|
+ <FormSearchGroup :searchList="formSearchList"
|
|
|
|
|
+ @searchChange="HandleSearchChange"/>
|
|
|
</template>
|
|
</template>
|
|
|
</SearchBlock>
|
|
</SearchBlock>
|
|
|
- <Table :currentPage="currentPage"
|
|
|
|
|
- :pageSize="pageSize" :totalNum="totalNum"
|
|
|
|
|
|
|
+ <Table :hidePagination="true"
|
|
|
:tableColumns="tableColumns"
|
|
:tableColumns="tableColumns"
|
|
|
:tableData="tableData">
|
|
:tableData="tableData">
|
|
|
<template #num="{currentIndex}">
|
|
<template #num="{currentIndex}">
|
|
|
- {{ (currentPage - 1) * pageSize + currentIndex }}
|
|
|
|
|
|
|
+ {{ currentIndex }}
|
|
|
|
|
+ </template>
|
|
|
|
|
+ <template #lastFollowDate="{row}">
|
|
|
|
|
+ {{ row.lastFollowDate ? row.lastFollowDate : '-' }}
|
|
|
</template>
|
|
</template>
|
|
|
<template #operation="{row}">
|
|
<template #operation="{row}">
|
|
|
<div class="table_row_option">
|
|
<div class="table_row_option">
|
|
|
<span class="option_button_editor" @click="OpenFollowlFormDialog(row)">写跟进</span>
|
|
<span class="option_button_editor" @click="OpenFollowlFormDialog(row)">写跟进</span>
|
|
|
<span class="option_button_editor" @click="OpenCactPeopleFormDialog(row)">编辑</span>
|
|
<span class="option_button_editor" @click="OpenCactPeopleFormDialog(row)">编辑</span>
|
|
|
- <span class="el_button_delete">删除</span>
|
|
|
|
|
|
|
+ <span class="el_button_delete" @click="OpenDeleteDialog(row)">删除</span>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
</Table>
|
|
</Table>
|
|
@@ -25,9 +30,12 @@
|
|
|
|
|
|
|
|
<!-- 修改联系人弹窗 -->
|
|
<!-- 修改联系人弹窗 -->
|
|
|
<ConcactPeopleFormDialog
|
|
<ConcactPeopleFormDialog
|
|
|
|
|
+ v-if="concactPeopleVisible"
|
|
|
title="修改联系人"
|
|
title="修改联系人"
|
|
|
v-model:visible="concactPeopleVisible"
|
|
v-model:visible="concactPeopleVisible"
|
|
|
- :defaultFormData="defaultConcactPeopleFormData">
|
|
|
|
|
|
|
+ v-model:submitLoading="concactPeopleSubmitLoading"
|
|
|
|
|
+ :defaultFormData="defaultConcactPeopleFormData"
|
|
|
|
|
+ @confirm="HandleCactPeopleFormDialogConfirm">
|
|
|
</ConcactPeopleFormDialog>
|
|
</ConcactPeopleFormDialog>
|
|
|
|
|
|
|
|
|
|
|
|
@@ -38,11 +46,21 @@
|
|
|
:defaultFormData="followDefaultFormData">
|
|
:defaultFormData="followDefaultFormData">
|
|
|
</FollowFormDialog>
|
|
</FollowFormDialog>
|
|
|
|
|
|
|
|
|
|
+ <!-- 删除联系人弹窗 -->
|
|
|
|
|
+ <Dialog :visible="deleteDialogVisible"
|
|
|
|
|
+ :submitLoading="deleteDialogSubmitLoading"
|
|
|
|
|
+ @close="CloseDeleteDialog"
|
|
|
|
|
+ @confirm="HandleDeleteDialogConfirm">
|
|
|
|
|
+ </Dialog>
|
|
|
|
|
+
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
|
-import { ref } from 'vue';
|
|
|
|
|
|
|
+import { onMounted, ref,watch } from 'vue';
|
|
|
|
|
+import { useRoute } from 'vue-router';
|
|
|
|
|
+import { useStore } from 'vuex';
|
|
|
|
|
+import { ElMessage } from 'element-plus';
|
|
|
|
|
|
|
|
import SearchBlock from '@/baseComponents/SearchBlock.vue';
|
|
import SearchBlock from '@/baseComponents/SearchBlock.vue';
|
|
|
import {blockSearchList} from'./searchBlock'
|
|
import {blockSearchList} from'./searchBlock'
|
|
@@ -55,70 +73,166 @@ import {tableColumns} from './table'
|
|
|
import ConcactPeopleFormDialog from '@/components/ConcactPeopleFormDialog/index.vue'
|
|
import ConcactPeopleFormDialog from '@/components/ConcactPeopleFormDialog/index.vue'
|
|
|
import FollowFormDialog from '../components/FollowFormDialog/index.vue'
|
|
import FollowFormDialog from '../components/FollowFormDialog/index.vue'
|
|
|
|
|
|
|
|
|
|
+import {getPrivateContactListApi, updatePrivateContactApi, deletePrivateContactApi} from '@/api/myCustomer'
|
|
|
|
|
+import Dialog from '@/baseComponents/Dialog.vue';
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+const props = defineProps({
|
|
|
|
|
+ contactReloadFlag:{
|
|
|
|
|
+ type:Number,
|
|
|
|
|
+ }
|
|
|
|
|
+})
|
|
|
|
|
+const route = useRoute()
|
|
|
|
|
+const store = useStore()
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 1. 获取联系人信息有关变量及操作
|
|
|
|
|
+ */
|
|
|
|
|
+const tableData = ref([]);
|
|
|
|
|
+const searchParams = ref({
|
|
|
|
|
+ position: 'all',
|
|
|
|
|
+ queryStr: '',
|
|
|
|
|
+})
|
|
|
|
|
+const HandleSearchChange = (params, key)=>{
|
|
|
|
|
+ searchParams.value = {
|
|
|
|
|
+ ...searchParams.value,
|
|
|
|
|
+ ...params
|
|
|
|
|
+ }
|
|
|
|
|
+ GetContactPeopleList()
|
|
|
|
|
+}
|
|
|
|
|
+const GetContactPeopleList = async ()=>{
|
|
|
|
|
+ let params = {
|
|
|
|
|
+ customerId: route.query.id,
|
|
|
|
|
+ queryStr: searchParams.value.queryStr,
|
|
|
|
|
+ positionId: searchParams.value.position == 'all' ? '' : JSON.parse(searchParams.value.position).value
|
|
|
|
|
+ }
|
|
|
|
|
+ let res = await getPrivateContactListApi(params)
|
|
|
|
|
+ if(res?.code == 200){
|
|
|
|
|
+ tableData.value = res?.data || []
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
-const currentPage = ref(1)
|
|
|
|
|
-const pageSize = ref(20)
|
|
|
|
|
-const totalNum = ref(0)
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-const tableData = ref([
|
|
|
|
|
- {
|
|
|
|
|
- id: '1',
|
|
|
|
|
- name: '严谨',
|
|
|
|
|
- position:'principal',
|
|
|
|
|
- positionName: '校长',
|
|
|
|
|
- mobilePhone: '172****9908',
|
|
|
|
|
- officePhone: '17287889908',
|
|
|
|
|
- remark: '备注文案',
|
|
|
|
|
- lastFollowUpTime: '26-08-19 19:00',
|
|
|
|
|
- creator: '李四',
|
|
|
|
|
- createTime: '26-08-19 17:00'
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: '2',
|
|
|
|
|
- name: '王诗雅',
|
|
|
|
|
- position:'principal',
|
|
|
|
|
- positionName: '校长',
|
|
|
|
|
- mobilePhone: '172****9908',
|
|
|
|
|
- officePhone: '-', // 图片中显示为横杠
|
|
|
|
|
- remark: '备注文案',
|
|
|
|
|
- lastFollowUpTime: '26-08-19 19:00',
|
|
|
|
|
- creator: '李四',
|
|
|
|
|
- createTime: '26-08-19 17:00'
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: '3',
|
|
|
|
|
- name: '赵子涵',
|
|
|
|
|
- position:'principal',
|
|
|
|
|
- positionName: '教学校长',
|
|
|
|
|
- mobilePhone: '172****9908',
|
|
|
|
|
- officePhone: '172****9908', // 图片中该号码也进行了脱敏处理
|
|
|
|
|
- remark: '备注文案',
|
|
|
|
|
- lastFollowUpTime: '26-08-19 19:00',
|
|
|
|
|
- creator: '李四',
|
|
|
|
|
- createTime: '26-08-19 17:00'
|
|
|
|
|
- }
|
|
|
|
|
-]);
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-/** 修改联系人弹窗 有关数据及操作 */
|
|
|
|
|
|
|
+/** 2. 修改联系人弹窗 有关数据及操作 */
|
|
|
const concactPeopleVisible = ref(false)
|
|
const concactPeopleVisible = ref(false)
|
|
|
|
|
+const concactPeopleSubmitLoading = ref(false)
|
|
|
const defaultConcactPeopleFormData = ref({})
|
|
const defaultConcactPeopleFormData = ref({})
|
|
|
const OpenCactPeopleFormDialog = (row)=>{
|
|
const OpenCactPeopleFormDialog = (row)=>{
|
|
|
concactPeopleVisible.value = true
|
|
concactPeopleVisible.value = true
|
|
|
- defaultConcactPeopleFormData.value = row
|
|
|
|
|
|
|
+ defaultConcactPeopleFormData.value = {
|
|
|
|
|
+ ...row,
|
|
|
|
|
+ position:JSON.stringify({
|
|
|
|
|
+ label:row.positionName,
|
|
|
|
|
+ value:row.positionId
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+const CloseCactPeopleFormDialog = ()=>{
|
|
|
|
|
+ concactPeopleVisible.value = false
|
|
|
|
|
+ concactPeopleSubmitLoading.value = false
|
|
|
|
|
+ defaultConcactPeopleFormData.value = {}
|
|
|
|
|
+}
|
|
|
|
|
+// 修改确认
|
|
|
|
|
+const HandleCactPeopleFormDialogConfirm = async (params)=>{
|
|
|
|
|
+ concactPeopleSubmitLoading.value = true
|
|
|
|
|
+ const {formData} = params
|
|
|
|
|
+ console.log('表单参数',formData)
|
|
|
|
|
+ let res = undefined
|
|
|
|
|
+ let finalParams = {
|
|
|
|
|
+ customerId: route.query.id,
|
|
|
|
|
+ id:formData.id,
|
|
|
|
|
+ name: formData.name,
|
|
|
|
|
+ positionId: JSON.parse(formData.position).value,
|
|
|
|
|
+ positionName: JSON.parse(formData.position).label,
|
|
|
|
|
+ phoneNo: formData.phoneNo,
|
|
|
|
|
+ officePhoneNo: formData.officePhoneNo,
|
|
|
|
|
+ remark: formData.remark,
|
|
|
|
|
+ }
|
|
|
|
|
+ console.log('传递的表单参数',finalParams)
|
|
|
|
|
+ try{
|
|
|
|
|
+ res = await updatePrivateContactApi(finalParams)
|
|
|
|
|
+ }catch{}
|
|
|
|
|
+ if(res?.code == 200){
|
|
|
|
|
+ CloseCactPeopleFormDialog()
|
|
|
|
|
+ GetContactPeopleList()
|
|
|
|
|
+ }else{
|
|
|
|
|
+ concactPeopleSubmitLoading.value = false
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 3. 删除联系人弹窗 有关数据及操作
|
|
|
|
|
+ */
|
|
|
|
|
+const deleteDialogVisible = ref(false)
|
|
|
|
|
+const deleteDialogSubmitLoading = ref(false)
|
|
|
|
|
+const currentDeleteRow = ref()
|
|
|
|
|
+const OpenDeleteDialog = (row)=>{
|
|
|
|
|
+ deleteDialogVisible.value = true
|
|
|
|
|
+ currentDeleteRow.value = row
|
|
|
|
|
+}
|
|
|
|
|
+const CloseDeleteDialog = ()=>{
|
|
|
|
|
+ deleteDialogVisible.value = false
|
|
|
|
|
+ deleteDialogSubmitLoading.value = false
|
|
|
|
|
+}
|
|
|
|
|
+// 删除确认
|
|
|
|
|
+const HandleDeleteDialogConfirm = async ()=>{
|
|
|
|
|
+ deleteDialogSubmitLoading.value = true
|
|
|
|
|
+ let res = undefined
|
|
|
|
|
+ try{
|
|
|
|
|
+ res = await deletePrivateContactApi(currentDeleteRow.value.id)
|
|
|
|
|
+ }catch{}
|
|
|
|
|
+ if(res?.code == 200){
|
|
|
|
|
+ CloseDeleteDialog()
|
|
|
|
|
+ GetContactPeopleList()
|
|
|
|
|
+ }else{
|
|
|
|
|
+ deleteDialogSubmitLoading.value = false
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
-/** 写跟进 弹窗有关数据 及操作 */
|
|
|
|
|
|
|
+/** 4. 写跟进 弹窗有关数据 及操作 */
|
|
|
|
|
+const customerBaseMsg = ref() //学校的基础信息
|
|
|
const followVisible = ref(false)
|
|
const followVisible = ref(false)
|
|
|
const followDefaultFormData = ref({})
|
|
const followDefaultFormData = ref({})
|
|
|
const OpenFollowlFormDialog = (row)=>{
|
|
const OpenFollowlFormDialog = (row)=>{
|
|
|
followVisible.value = true
|
|
followVisible.value = true
|
|
|
followDefaultFormData.value = {
|
|
followDefaultFormData.value = {
|
|
|
- // school:customerBaseMsg.value.schoolName,
|
|
|
|
|
|
|
+ school:customerBaseMsg.value.name,
|
|
|
|
|
+ contact:JSON.stringify({
|
|
|
|
|
+ id:row.id,
|
|
|
|
|
+ positionId:row.positionId,
|
|
|
|
|
+ positionName:row.positionName
|
|
|
|
|
+ }),
|
|
|
|
|
+ position:JSON.stringify({
|
|
|
|
|
+ label:row.positionName,
|
|
|
|
|
+ value:row.positionId,
|
|
|
|
|
+ })
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+watch(()=>props.contactReloadFlag,async (newVal)=>{
|
|
|
|
|
+ await GetContactPeopleList()
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
|
|
+onMounted( async ()=>{
|
|
|
|
|
+ // 获取学校的基础信息
|
|
|
|
|
+ customerBaseMsg.value = JSON.parse(sessionStorage.getItem('customerMsg') || '{}')
|
|
|
|
|
+
|
|
|
|
|
+ await store.dispatch('updatePositionList')
|
|
|
|
|
+ blockSearchList.value = blockSearchList.value.map(item=>{
|
|
|
|
|
+ if(item.key == 'position'){
|
|
|
|
|
+ item.options = [
|
|
|
|
|
+ {label:'全部', value:'all'},
|
|
|
|
|
+ ...store.state.positionList
|
|
|
|
|
+ ]
|
|
|
|
|
+ }
|
|
|
|
|
+ return item
|
|
|
|
|
+ })
|
|
|
|
|
+ await GetContactPeopleList()
|
|
|
|
|
+
|
|
|
|
|
+})
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|