Browse Source

tijiao

branch0222
douzhuo 1 year ago
parent
commit
4111fa5277
6 changed files with 344 additions and 195 deletions
  1. +287
    -154
      pages/center/consumer/consumerDetail.vue
  2. +1
    -1
      pages/center/consumer/consumerSearch.vue
  3. +21
    -21
      pages/center/consumer/index.vue
  4. +27
    -16
      pages/index/index.vue
  5. +2
    -0
      pages/mine/equipmentLog.vue
  6. +6
    -3
      pages/mine/reception/addreception.vue

+ 287
- 154
pages/center/consumer/consumerDetail.vue View File

@@ -42,7 +42,9 @@
</view>
</view>
<view class="content-sec-lab">
<view class="content-sec-lab1">客户意向率:{{ `${customerInfo.levelFraction||'0'}%` }}</view>
<view class="content-sec-lab1" @click.stop="showIntentionRate = true">
客户意向率:{{ `${customerInfo.levelFraction||'0'}%` }} <text style="margin-left: 20rpx;color: #0066CC;">查看</text>
</view>
</view>
<view class="content-sec-lab">
<view class="content-sec-lab1">上次到访:{{ customerInfo.createTime || "--" }}</view>
@@ -87,53 +89,53 @@
</view>
<view v-if="Thevisitingrecords.length!=0" class="content-tips"
v-for="(item,index) in Thevisitingrecords" :key="index" @click="tapThevisiting(item)">
<view class="content-first">
<view class="left">
<view class="name">{{item.agentName}}</view>
<view class="status" v-if="item.replaceReception==1">代接待</view>
<view class="normal-status">{{item.receptionStatusName || ''}}
</view>
</view>
<view class="right" v-if="item.recording!=0">
<view style="margin-right: 6rpx;">{{item.validInvalidName||''}}</view>
<view v-if="methodsisshow">
<text style="color: red;" v-if="item.taboo==1">违禁接待</text>
<text v-if="item.taboo==1"> |</text>
</view>
<view v-if="item.markAdvisor==0" class="">未标记</view>
<view v-if="item.markAdvisor==1" class="">已标记</view>

<view class="content-first">
<view class="left">
<view class="name">{{item.agentName}}</view>
<view class="status" v-if="item.replaceReception==1">代接待</view>
<view class="normal-status">{{item.receptionStatusName || ''}}
</view>
<view class="right" v-else>
<view class="">无录音</view>
</view>
<view class="right" v-if="item.recording!=0">
<view style="margin-right: 6rpx;">{{item.validInvalidName||''}}</view>
<view v-if="methodsisshow">
<text style="color: red;" v-if="item.taboo==1">违禁接待</text>
<text v-if="item.taboo==1"> |</text>
</view>
<view v-if="item.markAdvisor==0" class="">未标记</view>
<view v-if="item.markAdvisor==1" class="">已标记</view>
</view>
<view class="content-time">
{{item.createTime}} | {{item.mm || '0'}}min
<view class="right" v-else>
<view class="">无录音</view>
</view>
<view class="content-sec">
<view class="left">客户:{{item.name || '--'}}</view>
<view class="right">销讲业务:{{ item.marketingBusinessName || '--' }}</view>
</view>
<view class="content-time">
{{item.createTime}} | {{item.mm || '0'}}min
</view>
<view class="content-sec">
<view class="left">客户:{{item.name || '--'}}</view>
<view class="right">销讲业务:{{ item.marketingBusinessName || '--' }}</view>
</view>
<view class="content-last">
<view class="cont-item">
<view class="count">{{item.visitRecord|| 0}}</view>
<view class="text">访问次数</view>
</view>
<view class="content-last">
<view class="cont-item">
<view class="count">{{item.visitRecord|| 0}}</view>
<view class="text">访问次数</view>
</view>
<view class="cont-item">
<view class="count">{{item.wordFraction||0}}%</view>
<view class="text">挖掘执行</view>
</view>
<view class="cont-item">
<view class="count">{{item.wordFinishFraction|| 0}}%</view>
<view class="text">挖掘成功</view>
</view>
<view class="cont-item">
<view class="count" style="color: #2671E2;font-weight:600">{{item.fraction|| 0}}%</view>
<view class="text">销讲执行率</view>
</view>
<view class="cont-item">
<view class="count">{{item.wordFraction||0}}%</view>
<view class="text">挖掘执行</view>
</view>
<view class="cont-item">
<view class="count">{{item.wordFinishFraction|| 0}}%</view>
<view class="text">挖掘成功</view>
</view>
<view class="cont-item">
<view class="count" style="color: #2671E2;font-weight:600">{{item.fraction|| 0}}%</view>
<view class="text">销讲执行率</view>
</view>
</view>

</view>
</view>

@@ -169,7 +171,9 @@
<!-- 销讲执行率 -->
<view class="ratecenter" v-if="activeTotal==2">
<view class="boxtittabs">
<div class="items" @tap="showTemplate = true">销讲业务:{{ showBeText }}<u-icon name="arrow-down" size="24" style="padding-left: 12rpx"></u-icon></div>
<div class="items" @tap="showTemplate = true">销讲业务:{{ showBeText }}
<u-icon name="arrow-down" size="24" style="padding-left: 12rpx"></u-icon>
</div>
<div class="items">销讲执行:{{ totalRate||0 }}%</div>
</view>
<view
@@ -417,7 +421,29 @@
<u-select :mask-close-able="false" label-name="templateName" value-name="cusId" v-model="showTemplate"
mode="single-column" :list="templateList" @cancel="templateCancel" @confirm="templateConfirm"></u-select>


<u-popup v-model="showIntentionRate" mode="center" mask-close-able width="560rpx" border-radius="14">
<!-- intentionRateList -->
<view class="intentionRateList-title">
客户意向{{ `${customerInfo.levelFraction||'0'}%` }}
<view class="close" @click="showIntentionRate = false">x</view>
</view>
<scroll-view scroll-y="true" style="height: 50vh;">
<view class="intentionRateList">
<block v-for="(item, index) in intentionRateList" :key="index">
<view class="first-title">
{{ item.name }}
</view>
<view class="second">
<block v-for="(second, secondIndex) in item.children" :key="secondIndex">
<view class="second-item">
{{ second.name }}
</view>
</block>
</view>
</block>
</view>
</scroll-view>
</u-popup>

<!-- 加载组件 -->
<loading v-model="LOADING"></loading>
@@ -453,6 +479,9 @@
showBeText: '全部业务', //
templateList: [], // 销讲业务
showTemplate: false, // 展示选择销讲业务弹窗

showIntentionRate: false, // 客户意向率命中词弹窗
intentionRateList: [], // 客户意向率列表
}
},
computed: {
@@ -477,10 +506,57 @@
this.getCustomerInfo()
this.tabtimetap(0)
this.getMarketingBusiness()
this.getListByType()
},

methods: {

// 字典表接口
getListByType() {
this.$u.get("/matchKeywords/findPersonalMatchData", {
customerId: this.customerId
})
.then(res => {
let arr = []
res.forEach(item1 => {
item1.children.map(item => {
if (item.isInterval == 0) {
item.label = item.name + item.unit + '-' + item.endName + item
.unit;
} else {
item.label = item.name
}
item.value = item.id;
if (item.selected == 0) {
arr.push({
name: item.label,
fName: item1.name
})
}
})
})

let arr1 = []
arr.map(item => {
let index = arr1.findIndex(items => items.name == item.fName)
if (index != -1) {
arr1[index].children.push({
name: item.name
})
} else {
arr1.push({
name: item.fName,
children: [{
name: item.name
}]
})
}
})
this.intentionRateList = arr1
console.log(arr, 'asdsaas', arr1)
})
},

// 销讲业务方法
templateCancel() {
this.showTemplate = false;
@@ -1397,145 +1473,145 @@
padding-bottom: 100rpx;


.content-tips {
background: #fff;
box-sizing: border-box;
overflow: hidden;
margin: 0 0 20rpx 0;
padding: 30rpx;

.content-first {
display: flex;
justify-content: space-between;
.content-tips {
background: #fff;
box-sizing: border-box;
overflow: hidden;
margin: 0 0 20rpx 0;
padding: 30rpx;

.left {
.content-first {
display: flex;
align-items: center;
justify-content: space-between;

.img {
width: 52rpx;
height: 52rpx;
background: #FFFFFF;
border: 1px solid #C9C9C9;
border-radius: 50%;
text-align: center;
line-height: 52rpx;
}
.left {
display: flex;
align-items: center;

.img {
width: 52rpx;
height: 52rpx;
background: #FFFFFF;
border: 1px solid #C9C9C9;
border-radius: 50%;
text-align: center;
line-height: 52rpx;
}

.name {
font-weight: 600;
color: #333333;
margin-right: 10rpx;
font-size: 30rpx;
}
.name {
font-weight: 600;
color: #333333;
margin-right: 10rpx;
font-size: 30rpx;
}

.status {
width: 110rpx;
height: 42rpx;
background: #FFF9F5;
border-radius: 4rpx;
font-size: 26rpx;
font-weight: 400;
color: #EC8D49;
line-height: 42rpx;
text-align: center;
margin: 0 10rpx;
}
.status {
width: 110rpx;
height: 42rpx;
background: #FFF9F5;
border-radius: 4rpx;
font-size: 26rpx;
font-weight: 400;
color: #EC8D49;
line-height: 42rpx;
text-align: center;
margin: 0 10rpx;
}

.normal-status {
color: red;
.normal-status {
color: red;
}
}
}

.right {
display: flex;
margin-top: 11rpx;
.right {
display: flex;
margin-top: 11rpx;

.point {
width: 12rpx;
height: 12rpx;
background: #2B6EFF;
border-radius: 50%;
margin-right: 9rpx;
margin-top: 16rpx;
.point {
width: 12rpx;
height: 12rpx;
background: #2B6EFF;
border-radius: 50%;
margin-right: 9rpx;
margin-top: 16rpx;

}
}
}
}

.content-sec {
display: flex;
justify-content: space-between;
margin: 24rpx 0;
.content-sec {
display: flex;
justify-content: space-between;
margin: 24rpx 0;

.left {
flex-grow: 1;
height: 40rpx;
font-size: 28rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #333333;
line-height: 40rpx;
.left {
flex-grow: 1;
height: 40rpx;
font-size: 28rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #333333;
line-height: 40rpx;
}

.right {
flex-shrink: 0;
width: 340rpx;
height: 40rpx;
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #333333;
line-height: 40rpx;
text-align: right;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}

.right {
flex-shrink: 0;
width: 340rpx;
height: 40rpx;
.content-time {
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #333333;
line-height: 40rpx;
text-align: right;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
padding: 20rpx 0 24rpx;
border-bottom: 1px solid #E0E0E0;
}
}

.content-time {
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #333333;
line-height: 40rpx;
padding: 20rpx 0 24rpx;
border-bottom: 1px solid #E0E0E0;
}

.content-last {
display: flex;
justify-content: space-around;

.cont-item {
.content-last {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
justify-content: space-around;

.count {
height: 42rpx;
font-size: 30rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #000000;
line-height: 42rpx;
margin-bottom: 16rpx;
}
.cont-item {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;

.text {
height: 32rpx;
font-size: 24rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #666666;
line-height: 32rpx;
.count {
height: 42rpx;
font-size: 30rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #000000;
line-height: 42rpx;
margin-bottom: 16rpx;
}

.text {
height: 32rpx;
font-size: 24rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #666666;
line-height: 32rpx;
}
}
}
}
}

}

.tabactive2 {
@@ -1674,4 +1750,61 @@
height: 100%;
}
}

.intentionRateList-title {
position: relative;
height: 90rpx;
background: #fff;
display: flex;
align-items: center;
justify-content: center;
.close {
position: absolute;
right: 10rpx;
top: 50%;
transform: translateY(-50%);
width: 45rpx;
height: 45rpx;
border: 1px solid #E0E0E0;
border-radius: 50%;
text-align: center;
line-height: 45rpx;
font-size: 26rpx;
font-weight: bold;
color: #E0E0E0;
}
}

.intentionRateList {
padding: 0 20rpx;
width: 100%;
display: flex;
flex-direction: column;

.first-title {
width: 100%;
height: 90rpx;
display: flex;
align-items: center;
}

.second {
width: 100%;
display: flex;
flex-wrap: wrap;

.second-item {
margin: 0 20rpx 25rpx 0;
padding: 0 10rpx;
height: 60rpx;
border: 1px solid #E0E0E0;
border-radius: 12rpx;
display: flex;
align-items: center;
justify-content: center;
}
}

}
</style>

+ 1
- 1
pages/center/consumer/consumerSearch.vue View File

@@ -24,7 +24,7 @@
<view class="content-sec-lab">
客户标签:
<text v-if="item.demand.cusSemanticWordsList.length==0">暂无</text>
<view v-else>
<view v-else style="display: flex;align-items: center;">
<view v-if="ind<3" class="content-sec-tips" v-for="(che,ind) in item.demand.cusSemanticWordsList" :key='ind'>{{che.name}}</view>
</view>
</view>


+ 21
- 21
pages/center/consumer/index.vue View File

@@ -93,20 +93,17 @@
<view class="content-sec-lab1">上次到访:{{ item.createTime || "--" }}</view>
</view>
</view>
<view class="content-last" v-if="item.isshow">
<view class="content-last-tab">
<!-- <image class="icon" src="https://static.quhouse.com/5daebdec0aad4f63a62d3720437034bc.png" mode="" />
添加提醒 -->
</view>
<view class="content-last-tab">
<!-- <image class="icon" src="https://static.quhouse.com/b867df5efc72480f8c1f3bc9399c7d6c.png" mode="" />
拨打电话 -->
</view>
<view class="content-last-tab" @click.stop="gotoFollowUp(item.id)">
<view class="content-last">
<view v-if="userInfo.dataCode == 6" class="content-last-tab" @click.stop="gotoFollowUp(item.id)">
<image class="icon" src="https://static.quhouse.com/3730fc3a185c4d65ae6a1821601038ab.png"
mode="" />
写跟进
</view>
<view class="content-last-tab" v-if="checkAuthority('客户编辑')" @click.stop="goedit(item)">
<image class="icon" src="https://static.quhouse.com/5daebdec0aad4f63a62d3720437034bc.png"
mode="" />
打标签
</view>
</view>
</view>
</view>
@@ -571,9 +568,9 @@
sortFilter: "排序",
arriveFilter: "到访时间",
receptionDuration: "所属顾问",
templateList: [], // 销讲业务
showTemplate: true, // 展示销讲业务
};
@@ -624,7 +621,12 @@
},

methods: {

// 跳转编辑
goedit(data) {
uni.navigateTo({
url: `/pages/center/consumer/edit?id=${data.id}&projectId=${data.projectId}`
})
},
// 获取销讲业务
getMarketingBusiness() {
this.$u.get('/customer/marketingBusiness', {
@@ -638,8 +640,8 @@
})
})
},
max100(num) {
if (num > 100) {
return 100
@@ -818,7 +820,7 @@
orderBy: this.screen.orderBy == '' ? '' : this.screen.orderBy, // 排序
},
};
let ars = []
this.templateList.forEach(item => {
if (item.isShow) {
@@ -826,7 +828,7 @@
}
})
parames.query.marketingBusiness = ars.join(',')
this.$u.post("/customer/customerManagement", parames)
.then((data) => {
this.LOADING = false;
@@ -1264,11 +1266,9 @@

.content-last {
display: flex;
height: 42rpx;
margin-top: 30rpx;

.content-last-tab {
width: 33.4%;
height: 78rpx;
text-align: center;
font-size: 30rpx;
font-weight: 400;


+ 27
- 16
pages/index/index.vue View File

@@ -124,14 +124,17 @@
<view class="realnum">{{realtimeobj.activeCustomer|| 0}}</view>
<view class="realtext">有效接待</view>
</view>
<view class="real" @click="switchJump">
<view class="realnum">{{realtimeobj.receivingCustomer || 0}}</view>
<view class="realtext">正在接待</view>
</view>
<view class="real" @click="tapjumpreception(checkParams('4'))">
<view class="realnum">{{realtimeobj.tagCustomer || 0}}</view>
<view class="realtext">未标顾问</view>
</view>
<view class="real">
<view @click="prohibitedtap(1)" v-if="methodsisshow==true" class="realnum" style="color: red;">
{{realtimeobj.prohibitedCustomer || 0}}
</view>
<view @click="prohibitedtap(1)" v-if="methodsisshow==true" class="realtext">违禁预警</view>
</view>
</view>
<view class="timebox">
<view class="real" @click="tapjumpreception(checkParams('auth'))">
@@ -147,10 +150,10 @@
<view class="realtext">平均挖掘率</view>
</view>
<view class="real">
<view @click="prohibitedtap(1)" v-if="methodsisshow==true" class="realnum" style="color: red;">
{{realtimeobj.prohibitedCustomer || 0}}
<view class="realnum" >
{{realtimeobj.sumLevelFraction || 0}}%
</view>
<view @click="prohibitedtap(1)" v-if="methodsisshow==true" class="realtext">违禁预警</view>
<view class="realtext">客户意向度</view>
</view>
</view>
</view>
@@ -176,9 +179,13 @@
<view class="realnum">{{Thisweekobj.activeCustomer|| 0}}</view>
<view class="realtext">有效接待</view>
</view>
<view class="real" @click="tapjumpreception(checkParams('333'))">
<view class="realnum">{{max100(Thisweekobj.fraction)}}%</view>
<view class="realtext">平均执行率</view>
<view class="real" @click="tapjumpreception(checkParams('4'))">
<view class="realnum">{{Thisweekobj.tagCustomer || 0}}</view>
<view class="realtext">未标顾问</view>
</view>
<view class="real" @click="prohibitedtap(2)" v-if="methodsisshow==true">
<view class="realnum" style="color: red;">{{Thisweekobj.prohibitedCustomer || 0}}</view>
<view class="realtext">违禁预警</view>
</view>
</view>
<view class="timebox">
@@ -190,13 +197,17 @@
<view class="realnum">{{max100(Thisweekobj.wordFinishFraction)}}%</view>
<view class="realtext">平均挖掘率</view>
</view>
<view class="real" @click="prohibitedtap(2)" v-if="methodsisshow==true">
<view class="realnum" style="color: red;">{{Thisweekobj.prohibitedCustomer || 0}}</view>
<view class="realtext">违禁预警</view>
<view class="real" @click="tapjumpreception(checkParams('333'))">
<view class="realnum">{{max100(Thisweekobj.fraction)}}%</view>
<view class="realtext">平均执行率</view>
</view>
<view class="real" v-else>
<view class="realnum"></view>
<view class="realtext"></view>
<view class="real">
<view class="realnum" >
{{Thisweekobj.sumLevelFraction || 0}}%
</view>
<view class="realtext">客户意向度</view>
</view>
</view>
</view>


+ 2
- 0
pages/mine/equipmentLog.vue View File

@@ -127,6 +127,8 @@
return "接待中";
case 1:
return "部分录音";
case 2:
return "无录音";
default:
return "完整录音";
}


+ 6
- 3
pages/mine/reception/addreception.vue View File

@@ -253,15 +253,18 @@

save() {
this.$u.get('/customer/findByAgentIdNotEnd', {
agentId: this.parames.agentId
agentId: this.parames.agentId,
houseId: this.parames.projectId
}).then(res => {
console.log(res, 'asdaskljdalksjdlksajdksl')
if (res > 0) {
this.beyondContent = `【${this.text}】正在接待客户,是否要结束现有的接待?`
if (res.num > 0) {
this.beyondContent = `【${this.text}】正在接待客户,是否要结束超过${res.endRecordInterval}分钟的接待?`
this.showBeyound = true
} else {
this.saveAddreception()
}
}).catch(() => {
this.saveAddreception()
})
},



Loading…
Cancel
Save