|
@@ -1,7 +1,7 @@
|
|
|
<template>
|
|
<template>
|
|
|
<div class="message_overview">
|
|
<div class="message_overview">
|
|
|
<!-- 左侧:产品概览与最新状态 -->
|
|
<!-- 左侧:产品概览与最新状态 -->
|
|
|
- <div class="left_panel hide_scrollbar">
|
|
|
|
|
|
|
+ <div class="left_panel ">
|
|
|
<div class="product_summary">
|
|
<div class="product_summary">
|
|
|
<div class="summary_title">跟进产品总数 {{ followUpProductSummary.total }}</div>
|
|
<div class="summary_title">跟进产品总数 {{ followUpProductSummary.total }}</div>
|
|
|
<div class="summary_tags">
|
|
<div class="summary_tags">
|
|
@@ -9,7 +9,7 @@
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
- <div class="product_list" v-if="productsFollowStatistic?.length > 0">
|
|
|
|
|
|
|
+ <div class="product_list hide_scrollbar" v-if="productsFollowStatistic?.length > 0">
|
|
|
<template v-for="(item,index) in productsFollowStatistic" :key="item.productId" >
|
|
<template v-for="(item,index) in productsFollowStatistic" :key="item.productId" >
|
|
|
<div class="list_item">
|
|
<div class="list_item">
|
|
|
<div class="item_title">{{item.productName}}</div>
|
|
<div class="item_title">{{item.productName}}</div>
|
|
@@ -26,21 +26,11 @@
|
|
|
<!-- 中间:搜索与 我的跟进 -->
|
|
<!-- 中间:搜索与 我的跟进 -->
|
|
|
<div class="center_panel">
|
|
<div class="center_panel">
|
|
|
<div class="page_content hide_scrollbar">
|
|
<div class="page_content hide_scrollbar">
|
|
|
- <SearchBlock :searchList="ongoingFollowSearchList" @searchChange="HandleSearchChange">
|
|
|
|
|
- <template #rowItem-time>
|
|
|
|
|
- <el-date-picker
|
|
|
|
|
- v-if="searchParams.time=='custom'"
|
|
|
|
|
- style="flex-grow: 0;height: 28px;"
|
|
|
|
|
- v-model="searchParams.startAndEndTime"
|
|
|
|
|
- @change="(val)=>HandleSearchChange({startAndEndTime:val},'startAndEndTime')"
|
|
|
|
|
- start-placeholder="开始时间"
|
|
|
|
|
- end-placeholder="结束时间"
|
|
|
|
|
- type="datetimerange"
|
|
|
|
|
- range-separator="至"
|
|
|
|
|
- size="default"
|
|
|
|
|
- />
|
|
|
|
|
- </template>
|
|
|
|
|
- </SearchBlock>
|
|
|
|
|
|
|
+ <!-- 滚动头部筛选展示 -->
|
|
|
|
|
+ <SelectSearch @searchChange="HandleSearchChange"></SelectSearch>
|
|
|
|
|
+ <!-- 正常筛选展示 -->
|
|
|
|
|
+ <BlockSearch @searchChange="HandleSearchChange"></BlockSearch>
|
|
|
|
|
+
|
|
|
<FollowCard v-if="finalRenderData?.length > 0" style="margin-top: 16px;" :cardList="finalRenderData">
|
|
<FollowCard v-if="finalRenderData?.length > 0" style="margin-top: 16px;" :cardList="finalRenderData">
|
|
|
<template #operation="{row}">
|
|
<template #operation="{row}">
|
|
|
<div style="" class="table_row_option">
|
|
<div style="" class="table_row_option">
|
|
@@ -192,8 +182,17 @@ import { ref, onMounted,watch } from 'vue';
|
|
|
import {useRoute} from 'vue-router'
|
|
import {useRoute} from 'vue-router'
|
|
|
import { ElMessage } from 'element-plus'
|
|
import { ElMessage } from 'element-plus'
|
|
|
|
|
|
|
|
|
|
+import BlockSearch from '@/components/MyCustomerHeaderSearch/BlockSearch/index.vue'
|
|
|
|
|
+import {ongoingFollowSearchList} from '@/components/MyCustomerHeaderSearch/BlockSearch/searchBlock'
|
|
|
|
|
+import {searchParams} from '@/components/MyCustomerHeaderSearch/commonVar'
|
|
|
|
|
+
|
|
|
|
|
+import SelectSearch from '@/components/MyCustomerHeaderSearch/SelectSearch/index.vue'
|
|
|
|
|
+import {myFollowSearchSelectList} from '@/components/MyCustomerHeaderSearch/SelectSearch/formSearchGroup'
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
import SearchBlock from '@/baseComponents/SearchBlock.vue';
|
|
import SearchBlock from '@/baseComponents/SearchBlock.vue';
|
|
|
-import { ongoingFollowSearchList,historyFollowSearchList } from './searchBlock';
|
|
|
|
|
|
|
+import { historyFollowSearchList } from './searchBlock';
|
|
|
import FollowCard from '@/components/FollowCard.vue';
|
|
import FollowCard from '@/components/FollowCard.vue';
|
|
|
import Pagination from '@/baseComponents/Pagination.vue';
|
|
import Pagination from '@/baseComponents/Pagination.vue';
|
|
|
import FollowFormDialog from '@/components/FollowFormDialog/index.vue'
|
|
import FollowFormDialog from '@/components/FollowFormDialog/index.vue'
|
|
@@ -216,7 +215,6 @@ import {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
interface ProductFollowRecord {
|
|
interface ProductFollowRecord {
|
|
|
productId: string; // 产品ID
|
|
productId: string; // 产品ID
|
|
|
productName: string; // 产品名称
|
|
productName: string; // 产品名称
|
|
@@ -419,16 +417,39 @@ const GetOverviewDetail = async ()=>{
|
|
|
}
|
|
}
|
|
|
return item
|
|
return item
|
|
|
})
|
|
})
|
|
|
|
|
+
|
|
|
|
|
+ myFollowSearchSelectList.value = myFollowSearchSelectList.value.map(item=>{
|
|
|
|
|
+ switch(item.key){
|
|
|
|
|
+ case 'product':
|
|
|
|
|
+ item.options = [
|
|
|
|
|
+ { label: '全部产品', value: 'all' },
|
|
|
|
|
+ ...productOption,
|
|
|
|
|
+ ]
|
|
|
|
|
+ item.defaultValue = searchParams.value.product
|
|
|
|
|
+ break
|
|
|
|
|
+ case 'followStatus':
|
|
|
|
|
+ item.options = [
|
|
|
|
|
+ { label: '全部状态', value: 'all' },
|
|
|
|
|
+ ...followStatusOption,
|
|
|
|
|
+ ]
|
|
|
|
|
+ item.defaultValue = searchParams.value.followStatus
|
|
|
|
|
+ break
|
|
|
|
|
+ case 'position':
|
|
|
|
|
+ item.options = [
|
|
|
|
|
+ { label: '全部职务', value: 'all' },
|
|
|
|
|
+ ...positionOption
|
|
|
|
|
+ ]
|
|
|
|
|
+ item.defaultValue = searchParams.value.position
|
|
|
|
|
+ break
|
|
|
|
|
+ default:
|
|
|
|
|
+ item.defaultValue = searchParams.value[item.key]
|
|
|
|
|
+ break
|
|
|
|
|
+ }
|
|
|
|
|
+ return item
|
|
|
|
|
+ })
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-// 筛选条件
|
|
|
|
|
-const searchParams = ref({
|
|
|
|
|
- time:'all',
|
|
|
|
|
- product:'all',
|
|
|
|
|
- followStatus:'all',
|
|
|
|
|
- position:'all',
|
|
|
|
|
- startAndEndTime:[],
|
|
|
|
|
-})
|
|
|
|
|
|
|
+
|
|
|
const HandleSearchChange = async (params,key)=>{
|
|
const HandleSearchChange = async (params,key)=>{
|
|
|
searchParams.value = {
|
|
searchParams.value = {
|
|
|
...searchParams.value,
|
|
...searchParams.value,
|
|
@@ -440,7 +461,6 @@ const HandleSearchChange = async (params,key)=>{
|
|
|
await GetOverviewDetail()
|
|
await GetOverviewDetail()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
/**
|
|
/**
|
|
|
* 3. 右侧数据展示
|
|
* 3. 右侧数据展示
|
|
|
*/
|
|
*/
|
|
@@ -719,6 +739,7 @@ onMounted( async ()=>{
|
|
|
flex-direction: column;
|
|
flex-direction: column;
|
|
|
gap: 16px;
|
|
gap: 16px;
|
|
|
|
|
|
|
|
|
|
+ overflow: auto;
|
|
|
padding:12px;
|
|
padding:12px;
|
|
|
background: #F8FAFE;
|
|
background: #F8FAFE;
|
|
|
border-radius: 10px;
|
|
border-radius: 10px;
|