Browse Source

refactor(market): 重构市场线索页面

- 移除顶部筛选栏,改为通过 segmented 控件切换
- 重新组织数据结构,分离"我的客户"和"资源分配"的筛选条件和列表数据
- 优化列表加载逻辑,支持分别加载两个标签页的数据
- 添加资源共享接口
- 更新 API 地址配置
master
liutong 11 months ago
parent
commit
9c48a0c7d7
  1. 1
      .gitignore
  2. 9
      api/apiRoute.js
  3. 197
      pages/market/clue/index.vue

1
.gitignore

@ -1,2 +1,3 @@
.hbuilderx
unpackage
/.idea

9
api/apiRoute.js

@ -132,13 +132,20 @@ export default {
return res;
})
},
//销售端
//销售端-客户资源-添加
xs_addCustomerResources(data = {}) {
let url = '/customerResources/add'
return http.post(url, data).then(res => {
return res;
})
},
//销售端-资源共享-列表
xs_resourceSharingIndex(data = {}) {
let url = '/resourceSharing/index'
return http.get(url, data).then(res => {
return res;
})
},

197
pages/market/clue/index.vue

@ -2,18 +2,7 @@
<view class="assemble">
<fui-segmented-control :values="values" type="text" activeColor="#29d3b4" color="#fff"
@click="segmented"></fui-segmented-control>
<view class="search">
<view :class="{'selected': select_type == 1, 'not-selected': select_type != 1}" @click="setSelect(1)">全部({{countArr.type_0}})
</view>
<view :class="{'selected': select_type == 2, 'not-selected': select_type != 2}" @click="setSelect(2)">待跟进({{countArr.type_1}})
</view>
<view :class="{'selected': select_type == 3, 'not-selected': select_type != 3}" @click="setSelect(3)">
7天未跟进({{countArr.type_2}})
</view>
<view :class="{'selected': select_type == 4, 'not-selected': select_type != 4}" @click="setSelect(4)">
30天未成交({{countArr.type_3}})
</view>
</view>
<!--我的客户-->
<scroll-view
v-if="segmented_type == 1"
@ -22,7 +11,7 @@
@scrolltolower="loadMoreData"
style="height: 100vh;"
>
<view class="card" v-for="(v,k) in tableList" :key="k">
<view class="card" v-for="(v,k) in tableList_1" :key="k">
<view style="width: 70%;" @click="clue_info(v)">
<view style="display: flex;align-items: center;padding: 20rpx;">
<view>
@ -79,10 +68,7 @@
@scrolltolower="loadMoreData"
style="height: 100vh;"
>
<view style="color: #999999;padding: 20rpx 30rpx;">
今日待领{{countArr.lq_count}}/{{countArr.max_count}}
</view>
<view class="card" v-for="(v,k) in tableList" :key="k">
<view class="card" v-for="(v,k) in tableList_2" :key="k">
<view style="width: 70%;">
<view style="display: flex;align-items: center;padding: 20rpx;">
<view>
@ -158,17 +144,10 @@ export default {
is_gh: '2',//1=,2=
},
countArr:{
type_0:0,
type_1:0,
type_2:0,
type_3:0,
max_count:0,
lq_count:0,
},//
tableList:[],//
//Tab
values: [
{
id: 1,
@ -180,9 +159,28 @@ export default {
// }
],
select_type: 1,//|1,2,3,4
segmented_type: 1,//1=,2=
segmented_type: 1,//Tab|1=,2=
userInfo:{},//
//
//
filteredData_1:{
page:1,//
limit:10,//
total:10,//
},
//
tableList_1:[],//
//
//
filteredData_2:{
page:1,//
limit:10,//
total:10,//
},
//
tableList_2:[],//
}
},
@ -193,8 +191,17 @@ export default {
//
async onPullDownRefresh() {
//
await this.resetFilteredData()
await this.getList()
if(this.segmented_type == 1){
//
await this.resetFilteredData_1()
await this.getList_1()
}else{
//
await this.resetFilteredData_2()
await this.getList_2()
}
},
methods: {
//
@ -239,10 +246,9 @@ export default {
console.log('用户',this.userInfo)
},
//-
//()
loadMoreData() {
loadMoreData_1() {
//
if (!this.isReachedBottom) {
this.isReachedBottom = true;//
@ -250,21 +256,21 @@ export default {
}
},
//
async resetFilteredData() {
async resetFilteredData_1() {
this.isReachedBottom = false; // 便
this.filteredData.page = 1//
this.filteredData.limit = 10//
this.filteredData.total = 10//
this.filteredData_1.page = 1//
this.filteredData_1.limit = 10//
this.filteredData_1.total = 10//
},
//
async getList(){
//-
async getList_1(){
this.loading = true
let data = {...this.filteredData}
let data = {...this.filteredData_1}
//
if(this.filteredData.page * this.filteredData.limit > this.filteredData.total){
if(this.filteredData_1.page * this.filteredData_1.limit > this.filteredData_1.total){
this.loading = false
uni.showToast({
title: '暂无更多',
@ -274,7 +280,7 @@ export default {
}
if(data.page == 1){
this.tableList = []
this.tableList_1 = []
}
let res = await marketApi.myClient(data)
@ -288,71 +294,88 @@ export default {
return
}
this.tableList = this.tableList.concat(res.data.list.data); // 使 concat
this.tableList_1 = this.tableList_1.concat(res.data.list.data); // 使 concat
console.log('列表',this.tableList_1)
this.filteredData_1.total = res.data.list.total
this.filteredData_1.page++
console.log('列表',this.tableList)
this.filteredData.total = res.data.list.total
this.filteredData.page++
this.countArr = {
type_0:res.data.count[0],
type_1:res.data.count[1],
type_2:res.data.count[2],
type_3:res.data.count[3],
max_count:res.data.gh.max_count,
lq_count:res.data.gh.lq_count,
}
},
//
async setSelect(type) {
this.select_type = type
//
await this.resetFilteredData()
//-
//()
loadMoreData_2() {
//
if (!this.isReachedBottom) {
this.isReachedBottom = true;//
this.getList();
}
},
//
async resetFilteredData_2() {
this.isReachedBottom = false; // 便
this.filteredData_2.page = 1//
this.filteredData_2.limit = 10//
this.filteredData_2.total = 10//
},
//-
async getList_2(){
this.loading = true
if(this.segmented_type == 1){
this.filteredData.is_gh = '2'//2=
}else{
this.filteredData.is_gh = '1'//1=
let data = {...this.filteredData_2}
//
if(this.filteredData_2.page * this.filteredData_2.limit > this.filteredData_2.total){
this.loading = false
uni.showToast({
title: '暂无更多',
icon: 'none'
})
return
}
switch (type) {
//
case 1:
this.filteredData.type = '0'
break
//
case 2:
this.filteredData.type = '1'
break
//7
case 3:
this.filteredData.type = '2'
break
//30
case 4:
this.filteredData.type = '3'
break
if(data.page == 1){
this.tableList_2 = []
}
await this.getList()
let res = await marketApi.myClient(data)
this.loading = false
this.isReachedBottom = false;
if (res.code != 1){
uni.showToast({
title: res.msg,
icon: 'none'
})
return
}
this.tableList_2 = this.tableList_2.concat(res.data.list.data); // 使 concat
console.log('列表',this.tableList_2)
this.filteredData_2.total = res.data.list.total
this.filteredData_2.page++
},
//tag
async segmented(index) {
this.select_type = 1
this.segmented_type = index.id//1=,2=
//
await this.resetFilteredData()
if(this.segmented_type == 1){
this.filteredData.is_gh = '2'//2=
//
//
await this.resetFilteredData_1()
await this.getList_1()
}else{
this.filteredData.is_gh = '1'//1=
//
//
await this.resetFilteredData_2()
await this.getList_2()
}
this.filteredData.type = '0'
await this.getList()
},
//-

Loading…
Cancel
Save