@@ -484,6 +484,15 @@ | |||||
"enablePullDownRefresh": true | "enablePullDownRefresh": true | ||||
} | } | ||||
}, | }, | ||||
{ | |||||
"path": "Piabodata/requireminingAnalysis", | |||||
"style": { | |||||
"navigationBarTitleText": "需求挖掘分析", | |||||
"navigationBarBackgroundColor": "#FFFFFF", | |||||
"navigationBarTextStyle": "black", | |||||
"enablePullDownRefresh": true | |||||
} | |||||
}, | |||||
{ | { | ||||
"path": "records/index", | "path": "records/index", | ||||
@@ -629,4 +638,4 @@ | |||||
"query": "" //启动参数,在页面的onLoad函数里面得到 | "query": "" //启动参数,在页面的onLoad函数里面得到 | ||||
}] | }] | ||||
} | } | ||||
} | |||||
} |
@@ -602,18 +602,6 @@ | |||||
this.guwenshow = false; | this.guwenshow = false; | ||||
this.Selectlevel = false; | this.Selectlevel = false; | ||||
this.Selecttuandui = false; | this.Selecttuandui = false; | ||||
// this.tableDate = [] | |||||
// this.pamect.showStatus = 0; | |||||
// this.pamect.timeType = "4"; | |||||
// this.pamect.firstStartDate = ''; | |||||
// this.pamect.firstEndDate = ''; | |||||
// this.pamect.lastStartDate = ''; | |||||
// this.pamect.lastEndDate = ''; | |||||
// this.pamect.accountId = ''; | |||||
// this.pamect.marketingId = ''; | |||||
// this.pamect.deptId = "" | |||||
// this.activeTotal = 0; | |||||
// this.timepickpickisshow = false; | |||||
this.init() | this.init() | ||||
if (index == 1) { | if (index == 1) { | ||||
@@ -0,0 +1,697 @@ | |||||
<template> | |||||
<view class="box"> | |||||
<!-- 选择器 --> | |||||
<view class="boxtittab"> | |||||
<view class="tabbox" @click="timeshow=true"> | |||||
{{ time }} | |||||
<u-icon name="arrow-down" size="24" style="padding-left: 12rpx;"></u-icon> | |||||
</view> | |||||
<view class="tabbox" @click="deptshow=true"> | |||||
{{ dept}} | |||||
<u-icon name="arrow-down" size="24" style="padding-left: 12rpx;"></u-icon> | |||||
</view> | |||||
<view class="tabbox" @click="guwenshow=true"> | |||||
{{ guwen}} | |||||
<u-icon name="arrow-down" size="24" style="padding-left: 12rpx;"></u-icon> | |||||
</view> | |||||
<!-- <view class="tabbox" @click="taptimetuisshow"> | |||||
{{ huashu}} | |||||
<u-icon name="arrow-down" size="24" style="padding-left: 12rpx;"></u-icon> | |||||
</view> --> | |||||
<!-- <view class="tabbox" @click="screenshow"> | |||||
更多筛选<u-icon name="arrow-down" size="24" style="padding-left: 12rpx;"></u-icon> | |||||
</view> --> | |||||
</view> | |||||
<view style="width: 100%;height: 20rpx;background: #FAFAFA;"></view> | |||||
<view class="boxzonglan" style="min-height: 400rpx;"> | |||||
<view class="zonglantitle">简报 <text @click="showDesc=true">统计说明</text></view> | |||||
<view class="zonglanbox"> | |||||
<view class="grid" style="height: auto;" v-for="(item,index) in numlist" :key="index"> | |||||
<view class="audonum">{{item.name}}</view> | |||||
<view class="num">{{item.firstnum||0}}</view> | |||||
<view class="bottom"> | |||||
<view class="leftnum">对比:{{item.endnum||0}}</view> | |||||
<view class="rightnum" :class="item.duibinum>0?'red':'green'">{{item.duibinum||0}} | |||||
<image v-if="item.duibinum>0" src="https://static.quhouse.com/c4145f84cc3c49769ee2ec11465c085b.png" mode="" /> | |||||
<image v-else src="https://static.quhouse.com/c5dbf780e09a4da0b0bab2d7fa58accd.png" mode="" /> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<!-- 统计说明 --> | |||||
<view class="black-bg" v-if="showDesc" > | |||||
<view class="tongjiDesc"> | |||||
<view class="tongji-title">统计说明</view> | |||||
<view class="text"> | |||||
<view><text class="bold">平均需求挖掘率:</text>筛选时间内,有效接待中已标记顾问的需求挖掘执行率的平均值;</view> | |||||
<view><text class="bold">未标记:</text>筛选时间内,有效接待中未标记顾问的接待数;</view> | |||||
<view><text class="bold">有效接待:</text>筛选时间内,标记为有效的接待数,不包含待接单;</view> | |||||
<view><text class="bold">未挖掘需求数:</text>筛选时间内,需求挖掘平均执行率未0 的需求数;</view> | |||||
</view> | |||||
</view> | |||||
<view class="close" @click="showDesc=false">X</view> | |||||
</view> | |||||
<view style="width: 100%;height: 20rpx;background: #FAFAFA;"></view> | |||||
<view class="single"> | |||||
<view class="title"> | |||||
<view class="title1">平均需求挖掘率趋势</view> | |||||
</view> | |||||
<!-- <view class="uchaserbox"> | |||||
<qiun-data-charts type="line" :chartData="lineOptsect" :opts="lineOpts" background="none" | |||||
:ontouch="true" canvasId="wangxiaohuaerlingilingwuyiba1" :canvas2d="true" /> | |||||
</view> --> | |||||
</view> | |||||
<view style="width: 100%;height: 20rpx;background: #FAFAFA;"></view> | |||||
<view class="single"> | |||||
<view class="title"> | |||||
<view class="title1">平均需求挖掘分布</view> | |||||
</view> | |||||
<view class="uchaserbox"> | |||||
<qiun-data-charts | |||||
type="ring" | |||||
:chartData="ringChartData" | |||||
:canvas2d="true" | |||||
:canvasId="ChartBoxIdwangxiaohuaerlingilingwuyiba1" | |||||
:opts='opts' | |||||
background="none" /> | |||||
</view> | |||||
</view> | |||||
<view style="width: 100%;height: 20rpx;background: #FAFAFA;"></view> | |||||
<view class="single"> | |||||
<view class="title"> | |||||
<view class="title1">需求挖掘排名</view> | |||||
</view> | |||||
<view class="tabdada"> | |||||
<view class="tabth"> | |||||
<view>排名</view> | |||||
<view>需求类型/挖掘执行接待数</view> | |||||
<view>执行率</view> | |||||
<view>操作</view> | |||||
</view> | |||||
<view v-if="total==0" style="color: #999999;width: 100%;height: 500rpx;line-height: 500rpx;text-align: center;" >暂无数据</view> | |||||
<view class="tabtd" v-for="(item,i) in sortList" :key="i"> | |||||
<view> | |||||
<image v-if="i==0" class="ranking" src="../../../static/images/ranking1.png" mode=""></image> | |||||
<image v-else-if="i==1" class="ranking" src="../../../static/images/ranking2.png" mode=""></image> | |||||
<image v-else-if="i==2" class="ranking" src="../../../static/images/ranking3.png" mode=""></image> | |||||
<view class="ranking1" v-else>{{i+1}}</view> | |||||
</view> | |||||
<view class="u-line-1">{{item.name}}({{item.selected}})</view> | |||||
<view>{{item.fraction}}%</view> | |||||
<view @click="Toview(item,i)">查看</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<u-popup v-model="timeshow" mode="bottom"> | |||||
<view class="timeview" :style="{ color: activeTotal == 4 ? '#2B6EFF' : '#333333' }" | |||||
@click="tabtimetap(4, '近7天')"> | |||||
近7天</view> | |||||
<view class="timeview" :style="{ color: activeTotal == 5 ? '#2B6EFF' : '#333333' }" | |||||
@click="tabtimetap(5, '近15天')"> | |||||
近15天</view> | |||||
<view class="timeview" :style="{ color: activeTotal == 6 ? '#2B6EFF' : '#333333' }" | |||||
@click="tabtimetap(6, '近30天')"> | |||||
近30天</view> | |||||
<view class="timeview" :style="{ color: activeTotal == 3 ? '#2B6EFF' : '#333333' }" @click="tabtimetap(3,'自定义')"> | |||||
自定义</view> | |||||
</u-popup> | |||||
<u-calendar v-model="calendarShow" mode="range" @change="calendarTimeChange"></u-calendar> | |||||
<u-select v-model="guwenshow" :list="staffList" @confirm="staffSelectCallback($event,0)" | |||||
:default-value='selindex'></u-select> | |||||
<u-select v-model="deptshow" :list="teamList" @confirm="staffSelectCallback($event,1)" | |||||
:default-value='selindex'></u-select> | |||||
<!-- 加载组件 --> | |||||
<loading v-model="LOADING"></loading> | |||||
</view> | |||||
</template> | |||||
<script> | |||||
var app = getApp(); | |||||
var config = require("../../../config"); | |||||
import loading from "@/components/loading/index.vue" | |||||
export default { | |||||
components: { | |||||
loading | |||||
}, | |||||
data() { | |||||
return { | |||||
selindex: '', | |||||
guwenshow: false, | |||||
timeshow: false, | |||||
selectshow: false, | |||||
deptshow: false, | |||||
deptVal: '', | |||||
guwenVal: '', | |||||
// 筛选文字展示 | |||||
time: '近7天', | |||||
dept: '部门', | |||||
guwen: '顾问', | |||||
huashu: '话术', | |||||
showDesc: false, | |||||
sortList: [], | |||||
ringChartData: { | |||||
}, | |||||
// ring图 分布图 | |||||
opts: { | |||||
rotate: false, | |||||
rotateLock: false, | |||||
color: ["#1890FF","#91CB74","#FAC858","#EE6666"], | |||||
padding: [5,5,5,5], | |||||
dataLabel: true, | |||||
legend: { | |||||
show: true, | |||||
position: "right", | |||||
lineHeight: 25 | |||||
}, | |||||
title: { | |||||
name: "", | |||||
fontSize: 15, | |||||
color: "#666666" | |||||
}, | |||||
subtitle: { | |||||
name: "", | |||||
fontSize: 25, | |||||
color: "#7cb5ec" | |||||
}, | |||||
extra: { | |||||
ring: { | |||||
ringWidth: 60, | |||||
activeOpacity: 0.5, | |||||
activeRadius: 10, | |||||
offsetAngle: 0, | |||||
labelWidth: 15, | |||||
border: false, | |||||
borderWidth: 3, | |||||
borderColor: "#FFFFFF" | |||||
} | |||||
} | |||||
}, | |||||
activeTotal: 4, | |||||
houseId: '', | |||||
// 员工列表 | |||||
staffList: [], | |||||
// 团队列表 | |||||
teamList: [], | |||||
team: { | |||||
value: '', | |||||
label: '' | |||||
}, | |||||
startDate: '', | |||||
endDate: '', | |||||
calendarShow: false, | |||||
activeTab: 0, | |||||
numlist: [{ | |||||
name: '平均需求挖掘率', | |||||
firstnum: '', | |||||
endnum: '', | |||||
duibinum: '', | |||||
setName: 'wordFraction' | |||||
}, { | |||||
name: '未挖掘需求', | |||||
firstnum: '', | |||||
endnum: '', | |||||
duibinum: '', | |||||
setName: 'noFinishWord' | |||||
}, | |||||
{ | |||||
name: '有效接待', | |||||
firstnum: '', | |||||
endnum: '', | |||||
duibinum: '', | |||||
setName: 'activeCustomer' | |||||
}, | |||||
{ | |||||
name: '未标记', | |||||
firstnum: '', | |||||
endnum: '', | |||||
duibinum: '', | |||||
setName: 'markAdvisor' | |||||
}, | |||||
], | |||||
lineOptsect: { | |||||
"categories": [], | |||||
"series": [{ | |||||
"name": "第一段", | |||||
"data": [] | |||||
},{ | |||||
"name": "第二段", | |||||
"data": [] | |||||
} | |||||
] | |||||
}, | |||||
Theteamcomparedisshow: false, | |||||
Groupcontrastisshow: false, | |||||
allList: [], | |||||
lineOpts: { | |||||
yAxis: { | |||||
data: [{ | |||||
max: 100, | |||||
min: 0, | |||||
}] | |||||
} | |||||
}, | |||||
}; | |||||
}, | |||||
onShow() { | |||||
// this.LOADING = true | |||||
// 获取项目id | |||||
this.houseId = uni.getStorageSync('buildingID').id; | |||||
// 获取员工 | |||||
this.getStaffList() | |||||
// 获取团队 | |||||
this.getSectionList() | |||||
this.getdata() | |||||
}, | |||||
onReady: function(){ | |||||
// this.getRingData() | |||||
}, | |||||
onPullDownRefresh() { | |||||
}, | |||||
methods: { | |||||
getdata(){ | |||||
// 需求挖掘分析-简报 | |||||
this.wordMiningAnalyze() | |||||
// 挖掘趋势图 | |||||
// this.getwordMiningAnalyzePercentage() | |||||
// //需求挖掘排行 | |||||
// this.getwordMiningRank() | |||||
// // 需求挖掘f分布图 | |||||
// this.getRingData() | |||||
}, | |||||
// 需求挖掘排行 | |||||
getwordMiningRank(){ | |||||
this.$u.post('/cusLvStatistics/wordMiningRank', { | |||||
houseId: this.houseId, | |||||
deptId: this.deptVal, | |||||
createUser: this.guwenVal, | |||||
"dateType":this.activeTotal, | |||||
"firstStartDate":!this.activeTotal?this.startDate:'', | |||||
"firstEndDate":!this.activeTotal?this.endDate:'' | |||||
}) | |||||
.then(res => { | |||||
console.log(res) | |||||
if(res.length){ | |||||
this.sortList = res.map(item=>{ | |||||
return { | |||||
name: item.name, | |||||
id: item.id, | |||||
fraction: item.fraction, | |||||
selected: item.selected | |||||
} | |||||
}) | |||||
} | |||||
}) | |||||
}, | |||||
// 需求挖掘分布图 | |||||
getRingData(){ | |||||
this.$u.post('/cusLvStatistics/wordMiningAnalyzeFenbu', { | |||||
houseId: this.houseId, | |||||
deptId: this.deptVal, | |||||
createUser: this.guwenVal, | |||||
"firstStartDate":!this.activeTotal?this.startDate:'', | |||||
"firstEndDate":!this.activeTotal?this.endDate:'', | |||||
"dateType":this.activeTotal | |||||
}) | |||||
.then(res => { | |||||
console.log(res) | |||||
this.ringChartData = { series: [ | |||||
{ | |||||
data: [ | |||||
{"name":"30%以下","value":res.a}, | |||||
{"name":"30%~50%","value":res.b}, | |||||
{"name":"50%~70%","value":res.c}, | |||||
{"name":"70%以上","value":res.d}, | |||||
] | |||||
} | |||||
]} | |||||
}) | |||||
}, | |||||
Toview(){ | |||||
//跳转到接待记录 | |||||
uni.navigateTo({ | |||||
url: '/pages/center/records/index' | |||||
}); | |||||
}, | |||||
// 需求挖掘分析-简报 | |||||
wordMiningAnalyze() { | |||||
let params = { | |||||
"houseId":this.houseId, | |||||
deptId: this.deptVal, | |||||
createUser: this.guwenVal, | |||||
"dateType": this.activeTotal, | |||||
"firstStartDate":!this.activeTotal?this.startDate:'', | |||||
"firstEndDate":!this.activeTotal?this.endDate:'' | |||||
} | |||||
this.$u.post("/cusLvStatistics/wordMiningAnalyze",params).then(res => { | |||||
// console.log(res.contrast) | |||||
res.contrast.wordFraction = (res.contrast.fraction || 0) + '%' | |||||
this.numlist.forEach(item => { | |||||
item.duibinum = res.contrast[item.setName] | |||||
item.endnum = res.end[item.setName] | |||||
item.firstnum = res.first[item.setName] | |||||
}) | |||||
}) | |||||
}, | |||||
// 获取员工列表 | |||||
getStaffList() { | |||||
this.$u.post('/cusLvStatistics/selectAllAccountIdByHouseId', { | |||||
houseId: this.houseId | |||||
}) | |||||
.then(res => { | |||||
// console.log(res) | |||||
if(res.length){ | |||||
this.staffList = res.map(item => { | |||||
return { | |||||
label: item.name, | |||||
value: item.accountId | |||||
} | |||||
}) | |||||
} | |||||
}) | |||||
}, | |||||
// 需求挖掘率趋势图 | |||||
getwordMiningAnalyzePercentage() { | |||||
this.$u.post('/cusLvStatistics/wordMiningAnalyzePercentage', { | |||||
houseId: this.houseId, | |||||
deptId: this.deptVal, | |||||
createUser: this.guwenVal, | |||||
"dateType": this.activeTotal, | |||||
"firstStartDate":!this.activeTotal?this.startDate:'', | |||||
"firstEndDate":!this.activeTotal?this.endDate:'' | |||||
}) | |||||
.then(res => { | |||||
let categories1 = [] | |||||
let categories2 = [] | |||||
if(res.first&&res.first.length){ | |||||
categories1 = res.first.map(item=> item.statDate.substring(0,10)) | |||||
this.lineOptsect.series[0].data=res.first.map(item=> item.wordFraction) | |||||
}else{ | |||||
categories1= [] | |||||
this.lineOptsect.series[0] = [] | |||||
} | |||||
if(res.end&&res.end.length){ | |||||
this.lineOptsect.series[1].data=res.end.map(item=> item.wordFraction) | |||||
categories2 = res.end.map(item => item.statDate.substring(0,10)) | |||||
}else{ | |||||
categories2 = [] | |||||
} | |||||
let categories3 =[] | |||||
categories1.forEach(item1=>{ | |||||
categories2.forEach(item2=>{ | |||||
categories3.push(item1+ 'vs' + item2) | |||||
}) | |||||
}) | |||||
this.lineOptsect.categories = categories3 | |||||
console.log(this.lineOptsect.categories) | |||||
}) | |||||
}, | |||||
// 获取团队列表 | |||||
getSectionList() { | |||||
this.$u.post('/cusLvStatistics/findAllDeptIdByHouseId', { | |||||
houseId: this.houseId | |||||
}) | |||||
.then(res => { | |||||
this.teamList = [] | |||||
if(res.length){ | |||||
this.teamList = res.map(item=> { | |||||
return { | |||||
label: item.deptName, | |||||
value: item.deptId | |||||
} | |||||
}) | |||||
} | |||||
}) | |||||
}, | |||||
//时间切换 | |||||
tabtimetap(index, text) { | |||||
if (index == 3) { | |||||
this.calendarShow = true; | |||||
this.activeTotal = null | |||||
} else { | |||||
this.activeTotal = index; | |||||
this.endDate = '' | |||||
this.startDate = '' | |||||
this.time = text | |||||
this.getdata() | |||||
} | |||||
this.timeshow = false | |||||
}, | |||||
staffSelectCallback(e, idx) { | |||||
if (idx == 0) { | |||||
this.guwenVal = e[0].value | |||||
this.guwen = e[0].label | |||||
} else { // 部门 | |||||
this.dept = e[0].label | |||||
this.deptVal = e[0].value | |||||
} | |||||
this.getdata() | |||||
}, | |||||
//自定义时间 | |||||
calendarTimeChange(e) { | |||||
// console.log(e.startDate, e.endDate) | |||||
this.activeTotal = null; | |||||
this.endDate = e.endDate | |||||
this.startDate = e.startDate | |||||
this.time = '自定义' | |||||
this.getdata() | |||||
} | |||||
} | |||||
}; | |||||
</script> | |||||
<style lang="scss" scoped> | |||||
.box { | |||||
width: 100%; | |||||
height: 100%; | |||||
background: #FAFAFA; | |||||
} | |||||
//时间切换的样式 | |||||
.boxtittab { | |||||
position: sticky; | |||||
top: var(--window-top); | |||||
z-index: 999; | |||||
width: 100; | |||||
height: 92rpx; | |||||
background: #FFFFFF; | |||||
border: 1px solid #E0E0E0; | |||||
display: flex; | |||||
align-items: center; | |||||
.tabbox { | |||||
flex: 1; | |||||
height: 100%; | |||||
text-align: center; | |||||
line-height: 92rpx; | |||||
color: #666666; | |||||
font-size: 28rpx; | |||||
overflow: hidden; | |||||
text-overflow: ellipsis; | |||||
display: -webkit-box; | |||||
/* 将对象作为弹性伸缩盒子模型显示 */ | |||||
-webkit-line-clamp: 1; | |||||
/* 控制最多显示几行 */ | |||||
-webkit-box-orient: vertical; | |||||
/* 设置或检索伸缩盒对象的子元素的排列方式 */ | |||||
} | |||||
} | |||||
.timeview { | |||||
height: 80rpx; | |||||
line-height: 80rpx; | |||||
width: 100%; | |||||
text-align: center; | |||||
border-bottom: 1px solid #F8F8F8; | |||||
} | |||||
.black-bg{ | |||||
position: fixed; | |||||
background: rgba(0,0,0,0.6); | |||||
left: 0; | |||||
right: 0; | |||||
top: 0; | |||||
bottom: 0; | |||||
display: flex; | |||||
flex-direction: column; | |||||
justify-content: center; | |||||
align-items: center; | |||||
z-index: 9999; | |||||
.tongjiDesc{ | |||||
width: 80%; | |||||
background: #FFFFFF; | |||||
border-radius: 4rpx; | |||||
padding: 30rpx; | |||||
} | |||||
.close{ | |||||
background: #fff; | |||||
border-radius: 50%; | |||||
width: 80rpx; | |||||
height: 80rpx; | |||||
margin-top: 30rpx; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
} | |||||
.tongji-title{ | |||||
text-align: center; | |||||
font-size: 30rpx; | |||||
margin-bottom: 20rpx; | |||||
} | |||||
.text view{ | |||||
margin-bottom: 24rpx; | |||||
} | |||||
.bold{ | |||||
font-weight: bold; | |||||
} | |||||
} | |||||
.grid:nth-child(1) { | |||||
border-right: none; | |||||
border-bottom: none; | |||||
} | |||||
.grid:nth-child(2) { | |||||
border-bottom: none; | |||||
} | |||||
.grid:nth-child(3) { | |||||
border-right: none; | |||||
} | |||||
.grid .bottom{ | |||||
display: flex; | |||||
align-items: center; | |||||
padding-left: 20rpx; | |||||
margin: 10rpx 0 20rpx; | |||||
.leftnum{ | |||||
height: 36rpx; | |||||
font-size: 26rpx; | |||||
font-family: PingFangSC-Regular, PingFang SC; | |||||
font-weight: 400; | |||||
color: #666666; | |||||
line-height: 36rpx; | |||||
margin-right: 20rpx; | |||||
} | |||||
.rightnum{ | |||||
height: 36rpx; | |||||
font-size: 26rpx; | |||||
font-family: PingFangSC-Semibold, PingFang SC; | |||||
font-weight: 600; | |||||
color: #666; | |||||
line-height: 36rpx; | |||||
display: flex; | |||||
align-items: center; | |||||
&.red{ | |||||
color: #E6273A; | |||||
} | |||||
&.green{ | |||||
color: #43CD80; | |||||
} | |||||
image{ | |||||
width: 18rpx; | |||||
height: 14rpx; | |||||
margin-left: 6rpx; | |||||
} | |||||
} | |||||
} | |||||
.zonglantitle{ | |||||
display: flex; | |||||
justify-content: space-between; | |||||
align-items: center; | |||||
text{ | |||||
color: #666666; | |||||
} | |||||
} | |||||
.uchaserbox{ | |||||
width: 100%; | |||||
height: 500rpx; | |||||
} | |||||
.tabdada { | |||||
width: 100%; | |||||
height: 580rpx; | |||||
overflow-y: auto; | |||||
padding-bottom: 20rpx; | |||||
.tabth { | |||||
width: 100%; | |||||
height: 28rpx; | |||||
display: flex; | |||||
font-size: 28rpx; | |||||
line-height: 28rpx; | |||||
color: #666666; | |||||
margin-top: 28rpx; | |||||
} | |||||
.tabth>view:nth-of-type(1) { | |||||
width: 10%; | |||||
text-align: center; | |||||
} | |||||
.tabth>view:nth-of-type(2) { | |||||
width: 46%; | |||||
text-align: center; | |||||
} | |||||
.tabth>view:nth-of-type(3) { | |||||
width: 22%; | |||||
text-align: center; | |||||
} | |||||
.tabth>view:nth-of-type(4) { | |||||
width: 22%; | |||||
text-align: center; | |||||
} | |||||
.tabtd { | |||||
width: 100%; | |||||
height: 30rpx; | |||||
display: flex; | |||||
font-size: 26rpx; | |||||
line-height: 30rpx; | |||||
margin-top: 32rpx; | |||||
} | |||||
.tabtd>view:nth-of-type(1) { | |||||
width: 10%; | |||||
text-align: center; | |||||
line-height: 30rpx; | |||||
} | |||||
.tabtd>view:nth-of-type(2) { | |||||
width: 46%; | |||||
max-width: 400rpx; | |||||
text-align: center; | |||||
color: #333333; | |||||
} | |||||
.tabtd>view:nth-of-type(3) { | |||||
width: 22%; | |||||
text-align: center; | |||||
color: #333333; | |||||
} | |||||
.tabtd>view:nth-of-type(4) { | |||||
width: 22%; | |||||
text-align: center; | |||||
color: #2671E2; | |||||
} | |||||
.ranking { | |||||
width: 34rpx; | |||||
height: 34rpx; | |||||
} | |||||
.ranking1 { | |||||
width: 30rpx; | |||||
height: 30rpx; | |||||
background: #ECF1FF; | |||||
color: #424D64; | |||||
font-size: 18rpx; | |||||
text-align: center; | |||||
line-height: 30rpx; | |||||
border-radius: 50%; | |||||
margin: 0 auto; | |||||
} | |||||
.tabech { | |||||
width: 100%; | |||||
height: 600rpx; | |||||
} | |||||
} | |||||
</style> |
@@ -35,7 +35,10 @@ | |||||
</view> | </view> | ||||
</view> | </view> | ||||
<view class="content-sec-lab"> | <view class="content-sec-lab"> | ||||
顾问姓名:<view class="content-sec-lab1">{{customerInfo.ownerName}}</view> | |||||
顾问姓名:<view class="content-sec-lab1">{{customerInfo.ownerName||'--'}}</view> | |||||
</view> | |||||
<view class="content-sec-lab"> | |||||
需求挖掘:<view class="content-sec-lab1">{{customerInfo.wordFraction||0}}%</view> | |||||
</view> | </view> | ||||
<view class="content-sec-lab"> | <view class="content-sec-lab"> | ||||
添加时间:<view class="content-sec-lab1">{{customerInfo.createTime}}</view> | 添加时间:<view class="content-sec-lab1">{{customerInfo.createTime}}</view> | ||||
@@ -141,7 +144,12 @@ | |||||
<!-- 评分 --> | <!-- 评分 --> | ||||
<view class="ratecenter" v-if="activeTotal==2"> | <view class="ratecenter" v-if="activeTotal==2"> | ||||
<view class="ratetetle">执行总览</view> | |||||
<view class="my-tab"> | |||||
<view class="tab-item" :class="tabactive==0?'tabactive':''" @click="tabactive=0">销讲执行率</view> | |||||
<view class="tab-item" :class="tabactive==1?'tabactive':''" @click="tabactive=1">需求挖掘执行率</view> | |||||
</view> | |||||
<view class="xiaojiang" v-if="tabactive==0"> | |||||
<view class="ratetetle">执行总览</view> | |||||
<view class="rateyuanbox"> | <view class="rateyuanbox"> | ||||
<view class="rateyuanboxzuo"> | <view class="rateyuanboxzuo"> | ||||
<view class="boxzuoview cccccc">{{customerInfo.visitRecord || '--'}}次</view> | <view class="boxzuoview cccccc">{{customerInfo.visitRecord || '--'}}次</view> | ||||
@@ -193,7 +201,7 @@ | |||||
</view> | </view> | ||||
<view class="hhhbox" v-if="item.show" v-for="(subitem,i) in item.children" :key="i"> | <view class="hhhbox" v-if="item.show" v-for="(subitem,i) in item.children" :key="i"> | ||||
<view class="Level2che" @click="changeshow2(subitem,1)"> | <view class="Level2che" @click="changeshow2(subitem,1)"> | ||||
<view class="title1">{{subitem.name}}</view> | |||||
<view class="title1 u-line-1">{{subitem.name}}</view> | |||||
<view class="leve1-jindu"> | <view class="leve1-jindu"> | ||||
<view class="zhixing" v-if="!subitem.selected">已执行</view> | <view class="zhixing" v-if="!subitem.selected">已执行</view> | ||||
<view class="zhixing2" v-else>未执行</view> | <view class="zhixing2" v-else>未执行</view> | ||||
@@ -211,12 +219,113 @@ | |||||
<view class="jiantobox"> | <view class="jiantobox"> | ||||
<image v-if="che.selected==0" class="arrow" src="/static/images/rate-checked.png" | <image v-if="che.selected==0" class="arrow" src="/static/images/rate-checked.png" | ||||
mode="" /> | mode="" /> | ||||
<image v-if="che.selected==1" class="arrow" src="/static/images/rate-nocheck.png" | |||||
mode="" /> | |||||
</view> | </view> | ||||
</view> | </view> | ||||
<view v-if="subitem.show" style="width: 100%;height: 30rpx;"></view> | <view v-if="subitem.show" style="width: 100%;height: 30rpx;"></view> | ||||
</view> | </view> | ||||
</view> | </view> | ||||
</view> | |||||
<view class="xuqiu" v-if="tabactive==1"> | |||||
<view class="ratetetle">执行总览</view> | |||||
<view class="rateyuanbox"> | |||||
<view class="rateyuanboxzuo"> | |||||
<view class="boxzuoview cccccc">{{customerInfo.visitRecord || '--'}}次</view> | |||||
<view style="color: #333333;font-size: 28rpx;font-weight: 400;text-align: center;">到访次数</view> | |||||
</view> | |||||
<view class="rateyuanboxyou"> | |||||
<view class="boxzuoview" style="width: 100%;display: flex;justify-content: center;"> | |||||
<u-circle-progress active-color="#4FC78F" width='139' :percent="customerInfo.wordFraction||0"> | |||||
<view style="text-align: center;color: #4FC78F;">{{customerInfo.wordFraction||0}}%</view> | |||||
</u-circle-progress> | |||||
</view> | |||||
<view style="color: #333333;font-size: 28rpx;font-weight: 400;text-align: center;">需求挖掘执行率</view> | |||||
</view> | |||||
<view class="rateyuanboxzuo"> | |||||
<view class="boxzuoview cccccc">{{customerInfo.mm}}min</view> | |||||
<view style="color: #333333;font-size: 28rpx;font-weight: 400;text-align: center;">接待时长</view> | |||||
</view> | |||||
</view> | |||||
<view | |||||
style="width: 100%;height: 80rpx;border-bottom: 1rpx solid #E0E0E0;display: flex;align-items: center;"> | |||||
<view style="flex: 1;font-size: 28rpx;color: #333333;font-weight: 600;text-indent: 20rpx;">指标</view> | |||||
<view style="flex: 1;font-size: 28rpx;color: #333333;font-weight: 600;text-indent: 170rpx;">执行率 | |||||
</view> | |||||
</view> | |||||
<!-- 暂无数据 --> | |||||
<view v-if="KeyWordsfractionList.length==0" style="width: 100%;height: 100%;display: flex;align-items: center;"> | |||||
<view style="width: 100%;padding-top: 60rpx;"> | |||||
<view style="width: 100%;text-align: center;"> | |||||
<image style="width: 220rpx;height: 200rpx;" | |||||
src="https://static.quhouse.com/zhikong_xcx_img/nodatalist.png" mode=""></image> | |||||
</view> | |||||
<view style="text-align: center;width: 100%;margin-top: 20rpx;color: #999999;">暂无数据</view> | |||||
</view> | |||||
</view> | |||||
<!-- 挖掘执行话术展示 --> | |||||
<view class="Level-box" v-else v-for="(item,index) in KeyWordsfractionList" :key="index"> | |||||
<view class="Level1che" @click="changeshowlevel1(item,1)"> | |||||
<view class="title1">{{item.name}}</view> | |||||
<view class="leve1-jindu"> | |||||
<view class="jindutiao"> | |||||
<view class="huanxing" :style="{width: item.fraction||0 +'%'}"></view> | |||||
<view class="text">{{item.fraction||0}}%</view> | |||||
</view> | |||||
</view> | |||||
<view class="jiantobox"> | |||||
<image v-if="!item.show" class="arrow rotatearrow" src="/static/images/down.png" mode="" /> | |||||
<image v-else class="arrow" src="/static/images/up.png" mode="" /> | |||||
</view> | |||||
</view> | |||||
<!-- 话术在一级下 --> | |||||
<view v-if="item.showLevel==1"> | |||||
<view class="hhhbox" v-if="item.show" style="padding: 30rpx;"> | |||||
<view class="hsnrtest">话术内容</view> | |||||
<view class="Level3che" @tap="clickaudeopal(che)" | |||||
v-for="(che,inc) in item.questionList" :key='inc'> | |||||
<view class="title1">{{inc+1}}.{{che.question}}</view> | |||||
<view class="jiantobox"> | |||||
<image v-if="che.selected==0" class="arrow" src="/static/images/rate-checked.png" | |||||
mode="" /> | |||||
<image v-else class="arrow" src="/static/images/rate-nocheck.png" | |||||
mode="" /> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<!-- 话术在二级下 --> | |||||
<view v-if="item.showLevel==2"> | |||||
<view class="hhhbox" v-if="item.show" v-for="(subitem,i) in item.children" :key="i"> | |||||
<view class="Level2che" @click="changeshow2(subitem,1)"> | |||||
<view class="title1 u-line-1">{{subitem.name}}</view> | |||||
<view class="leve1-jindu"> | |||||
<view class="zhixing" v-if="!subitem.selected">已执行</view> | |||||
<view class="zhixing2" v-else>未执行</view> | |||||
</view> | |||||
<view class="jiantobox"> | |||||
<image v-if="!subitem.show" class="arrow rotatearrow" src="/static/images/down.png" | |||||
mode="" /> | |||||
<image v-else class="arrow" src="/static/images/up.png" mode="" /> | |||||
</view> | |||||
</view> | |||||
<view v-if="subitem.show" style="padding: 30rpx 0;"> | |||||
<view class="hsnrtest">话术内容</view> | |||||
<view class="Level3che" @tap="clickaudeopal(che)" | |||||
v-for="(che,inc) in subitem.questionList" :key='inc'> | |||||
<view class="title1">{{inc+1}}.{{che.question}}</view> | |||||
<view class="jiantobox"> | |||||
<image v-if="che.selected==0" class="arrow" src="/static/images/rate-checked.png" | |||||
mode="" /> | |||||
<image v-else class="arrow" src="/static/images/rate-nocheck.png" | |||||
mode="" /> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | </view> | ||||
</view> | </view> | ||||
@@ -249,6 +358,7 @@ | |||||
}, | }, | ||||
data() { | data() { | ||||
return { | return { | ||||
tabactive: 0, | |||||
activeTotal: 0, | activeTotal: 0, | ||||
customerId: '', | customerId: '', | ||||
tipshow: false, | tipshow: false, | ||||
@@ -261,6 +371,7 @@ | |||||
totalRate: [], | totalRate: [], | ||||
ratelist: [], | ratelist: [], | ||||
fllowList: [], | fllowList: [], | ||||
KeyWordsfractionList: [],//需求挖掘话术list | |||||
userInfo: {}, | userInfo: {}, | ||||
buttonisshow: false | buttonisshow: false | ||||
} | } | ||||
@@ -288,6 +399,37 @@ | |||||
this.tabtimetap(0) | this.tabtimetap(0) | ||||
}, | }, | ||||
methods: { | methods: { | ||||
changeshowlevel1(item,type){ | |||||
console.log(item) | |||||
item.show = !item.show | |||||
}, | |||||
// 客户详情需求挖掘话术 | |||||
getfindKeyWordsBycusId() { | |||||
this.$u.get("/cusLvStatistics/findKeyWordsBycusId?cusId=" + this.customerId).then(res => { | |||||
console.log(res) | |||||
if(res.length){ | |||||
res.forEach(item=>{ | |||||
item.show = false | |||||
item.children.forEach(obj=>{ | |||||
obj.show = false | |||||
if(obj.questionList.length){ | |||||
obj.questionList.forEach(subobj=>{ | |||||
subobj.show =false | |||||
}) | |||||
} | |||||
}) | |||||
if(item.questionList.length){ | |||||
item.questionList.forEach(obj=>{ | |||||
obj.show =false | |||||
}) | |||||
} | |||||
}) | |||||
this.KeyWordsfractionList = res | |||||
}else{ | |||||
this.KeyWordsfractionList = [] | |||||
} | |||||
}) | |||||
}, | |||||
// 获取到访记录 | // 获取到访记录 | ||||
getVisitList() { | getVisitList() { | ||||
this.$u.get("/customer/findByPhoneAndProject?id=" + this.customerId, ).then(res => { | this.$u.get("/customer/findByPhoneAndProject?id=" + this.customerId, ).then(res => { | ||||
@@ -328,10 +470,10 @@ | |||||
this.getFollowList() | this.getFollowList() | ||||
} else { | } else { | ||||
this.getRatelist() | this.getRatelist() | ||||
this.getfindKeyWordsBycusId() | |||||
} | } | ||||
}, | }, | ||||
tapThevisiting(item) { | tapThevisiting(item) { | ||||
console.log("11111111111111") | |||||
uni.showLoading({ | uni.showLoading({ | ||||
title: '加载中', | title: '加载中', | ||||
mask: true | mask: true | ||||
@@ -678,7 +820,7 @@ | |||||
align-items: center; | align-items: center; | ||||
.title1 { | .title1 { | ||||
flex: 2; | |||||
flex: 3; | |||||
font-size: 28rpx; | font-size: 28rpx; | ||||
color: #333333; | color: #333333; | ||||
font-weight: 400; | font-weight: 400; | ||||
@@ -798,6 +940,32 @@ | |||||
background-color: #FFFFFF; | background-color: #FFFFFF; | ||||
padding-bottom: 30rpx; | padding-bottom: 30rpx; | ||||
width: 100%; | width: 100%; | ||||
.my-tab{ | |||||
padding: 20rpx 0; | |||||
display: flex; | |||||
justify-content: space-around; | |||||
align-items: center; | |||||
border-bottom: 1px solid #E0E0E0; | |||||
.tab-item{ | |||||
padding: 0 30rpx; | |||||
height: 56rpx; | |||||
font-size: 28rpx; | |||||
font-family: PingFangSC-Regular, PingFang SC; | |||||
font-weight: 400; | |||||
color: #666666; | |||||
line-height: 56rpx; | |||||
text-shadow: 0px 1px 0px #E0E0E0; | |||||
} | |||||
.tabactive{ | |||||
height: 56rpx; | |||||
background: rgba(38, 113, 226, 0.1); | |||||
box-shadow: 0px 1px 0px 0px #E0E0E0; | |||||
border-radius: 28rpx; | |||||
font-weight: 600; | |||||
color: #2671E2; | |||||
} | |||||
} | |||||
.ratetetle { | .ratetetle { | ||||
padding: 30rpx; | padding: 30rpx; | ||||
@@ -841,7 +1009,7 @@ | |||||
.tab { | .tab { | ||||
height: 88rpx; | height: 88rpx; | ||||
border-bottom: 1px solid #E0E0E0; | |||||
// border-bottom: 1px solid #E0E0E0; | |||||
background: #FFFFFF; | background: #FFFFFF; | ||||
display: flex; | display: flex; | ||||
align-items: center; | align-items: center; | ||||
@@ -941,7 +1109,6 @@ | |||||
.content-sec { | .content-sec { | ||||
border-top: 1px solid #E0E0E0; | border-top: 1px solid #E0E0E0; | ||||
padding: 0 30rpx; | padding: 0 30rpx; | ||||
height: 270rpx; | |||||
position: relative; | position: relative; | ||||
.content-sec-lab { | .content-sec-lab { | ||||
@@ -984,7 +1151,7 @@ | |||||
font-weight: 400; | font-weight: 400; | ||||
color: #2671E2; | color: #2671E2; | ||||
line-height: 45rpx; | line-height: 45rpx; | ||||
bottom: 15rpx; | |||||
bottom: 100rpx; | |||||
right: 30rpx; | right: 30rpx; | ||||
text-align: center; | text-align: center; | ||||
} | } | ||||
@@ -72,14 +72,17 @@ | |||||
</view> | </view> | ||||
<view class="content-sec-lab"> | <view class="content-sec-lab"> | ||||
顾问姓名:<view class="content-sec-lab1">{{item.agentName}}</view> | |||||
顾问姓名:<view class="content-sec-lab1">{{item.agentName||'--'}}</view> | |||||
</view> | |||||
<view class="content-sec-lab"> | |||||
需求挖掘:<view class="content-sec-lab1">{{item.wordFraction||0}}%</view> | |||||
</view> | </view> | ||||
<view class="content-sec-lab"> | <view class="content-sec-lab"> | ||||
添加时间:<view class="content-sec-lab1">{{item.createTime}}</view> | 添加时间:<view class="content-sec-lab1">{{item.createTime}}</view> | ||||
</view> | </view> | ||||
<view class="content-sec-num"> | <view class="content-sec-num"> | ||||
<view class="">{{item.visitRecord || '--'}}次到访</view> | <view class="">{{item.visitRecord || '--'}}次到访</view> | ||||
<view class="">{{item.fraction || '0'}}% | {{item.mm || '0'}}<text | |||||
<view class="">{{item.fraction || 0}}% | {{item.mm || 0}}<text | |||||
style="font-size: 24rpx;">min</text></view> | style="font-size: 24rpx;">min</text></view> | ||||
</view> | </view> | ||||
</view> | </view> | ||||
@@ -78,10 +78,12 @@ | |||||
<view class="arriveNum">第{{item.visitRecord || "--"}}次接待</view> | <view class="arriveNum">第{{item.visitRecord || "--"}}次接待</view> | ||||
</view> | </view> | ||||
<view class="right"> | <view class="right"> | ||||
<!-- {{item.fraction || '0'}}% | {{item.fraction || '0'}}分 --> | |||||
{{item.fraction || '0'}}% | {{item.fraction || '0'}}% | ||||
</view> | </view> | ||||
</view> | </view> | ||||
<view class="content-last"> | |||||
需求挖掘:{{item.wordFraction|| 0}}% | |||||
</view> | |||||
<view class="content-last"> | <view class="content-last"> | ||||
{{item.createTime}} | {{item.mm || '0'}} min | {{item.createTime}} | {{item.mm || '0'}} min | ||||
</view> | </view> | ||||
@@ -433,6 +435,7 @@ | |||||
this.$u.post("/customer/lifeTrackDefineList", { | this.$u.post("/customer/lifeTrackDefineList", { | ||||
houseId: this.buildingID | houseId: this.buildingID | ||||
}).then(res => { | }).then(res => { | ||||
this.LOADING = false | |||||
let tempArr = [] | let tempArr = [] | ||||
res.forEach(item => { | res.forEach(item => { | ||||
let tempObj = {} | let tempObj = {} | ||||
@@ -119,31 +119,25 @@ | |||||
<view class="realnum">{{realtimeobj.fraction || 0}}%</view> | <view class="realnum">{{realtimeobj.fraction || 0}}%</view> | ||||
<view class="realtext">平均执行率</view> | <view class="realtext">平均执行率</view> | ||||
</view> | </view> | ||||
<view class="real" @click="towajue"> | |||||
<view class="realnum">{{realtimeobj.wordFraction || 0}}%</view> | |||||
<view class="realtext">平均挖掘率</view> | |||||
</view> | |||||
<view class="real"> | <view class="real"> | ||||
<view @click="prohibitedtap(1)" v-if="methodsisshow==true" class="realnum" style="color: red;"> | <view @click="prohibitedtap(1)" v-if="methodsisshow==true" class="realnum" style="color: red;"> | ||||
{{realtimeobj.prohibitedCustomer || 0}} | {{realtimeobj.prohibitedCustomer || 0}} | ||||
</view> | </view> | ||||
<view @click="prohibitedtap(1)" v-if="methodsisshow==true" class="realtext">违禁预警</view> | <view @click="prohibitedtap(1)" v-if="methodsisshow==true" class="realtext">违禁预警</view> | ||||
</view> | </view> | ||||
<view class="real"> | |||||
<view class="realnum"></view> | |||||
<view class="realtext"></view> | |||||
</view> | |||||
</view> | </view> | ||||
</view> | </view> | ||||
<view class="title" style="display: flex;"> | <view class="title" style="display: flex;"> | ||||
<view style="width: 55%;">概览</view> | <view style="width: 55%;">概览</view> | ||||
<view class="cet" style="display: flex;"> | <view class="cet" style="display: flex;"> | ||||
<view class="cetview" :class="{ activecllasscet: zhixingcenterindex == 2 }" @click="tabtimeclick(2)">近7天 | |||||
</view> | |||||
<view class="cetview" :class="{ activecllasscet: zhixingcenterindex == 6 }" @click="tabtimeclick(6)"> | |||||
近30天</view> | |||||
<view class="cetview" :class="{ activecllasscet: zhixingcenterindex == 7 }" @click="tabtimeclick(7)">自定义 | |||||
</view> | |||||
<view class="cetview" :class="{ activecllasscet: zhixingcenterindex == 2 }" @click="tabtimeclick(2)">近7天</view> | |||||
<view class="cetview" :class="{ activecllasscet: zhixingcenterindex == 6 }" @click="tabtimeclick(6)">近30天</view> | |||||
<view class="cetview" :class="{ activecllasscet: zhixingcenterindex == 7 }" @click="tabtimeclick(7)">自定义</view> | |||||
</view> | </view> | ||||
</view> | </view> | ||||
<view class="real-timebox"> | <view class="real-timebox"> | ||||
@@ -166,6 +160,10 @@ | |||||
<view class="realnum">{{Thisweekobj.avgDuration|| 0}}</view> | <view class="realnum">{{Thisweekobj.avgDuration|| 0}}</view> | ||||
<view class="realtext">平均接待时长</view> | <view class="realtext">平均接待时长</view> | ||||
</view> | </view> | ||||
<view class="real" @click="towajue"> | |||||
<view class="realnum">{{Thisweekobj.wordFraction || 0}}%</view> | |||||
<view class="realtext">平均挖掘率</view> | |||||
</view> | |||||
<view class="real" @click="prohibitedtap(2)" v-if="methodsisshow==true"> | <view class="real" @click="prohibitedtap(2)" v-if="methodsisshow==true"> | ||||
<view class="realnum" style="color: red;">{{Thisweekobj.prohibitedCustomer || 0}}</view> | <view class="realnum" style="color: red;">{{Thisweekobj.prohibitedCustomer || 0}}</view> | ||||
<view class="realtext">违禁预警</view> | <view class="realtext">违禁预警</view> | ||||
@@ -174,10 +172,6 @@ | |||||
<view class="realnum"></view> | <view class="realnum"></view> | ||||
<view class="realtext"></view> | <view class="realtext"></view> | ||||
</view> | </view> | ||||
<view class="real"> | |||||
<view class="realnum"></view> | |||||
<view class="realtext"></view> | |||||
</view> | |||||
</view> | </view> | ||||
</view> | </view> | ||||
@@ -193,7 +187,6 @@ | |||||
</view> | </view> | ||||
</view> | </view> | ||||
<!-- 项目切换 --> | <!-- 项目切换 --> | ||||
<view v-if="Showhiddenunits"> | <view v-if="Showhiddenunits"> | ||||
<u-select :mask-close-able="false" v-model="Showhiddenunits" mode="single-column" :list="lpanlist" | <u-select :mask-close-able="false" v-model="Showhiddenunits" mode="single-column" :list="lpanlist" | ||||
@@ -269,6 +262,7 @@ | |||||
prohibitedCustomer: '', | prohibitedCustomer: '', | ||||
tagCustomer: '', | tagCustomer: '', | ||||
fraction: '', | fraction: '', | ||||
wordFraction: '', | |||||
receptionCount: '' | receptionCount: '' | ||||
}, | }, | ||||
Thisweekobj: { | Thisweekobj: { | ||||
@@ -278,6 +272,7 @@ | |||||
prohibitedCustomer: '', | prohibitedCustomer: '', | ||||
tagCustomer: '', | tagCustomer: '', | ||||
fraction: '', | fraction: '', | ||||
wordFraction: '', | |||||
receptionCount: '' | receptionCount: '' | ||||
}, | }, | ||||
methodsisshow: false, | methodsisshow: false, | ||||
@@ -396,6 +391,11 @@ | |||||
}, 3000) | }, 3000) | ||||
}, | }, | ||||
methods: { | methods: { | ||||
towajue(){ | |||||
uni.navigateTo({ | |||||
url: "/pages/center/Piabodata/requireminingAnalysis" | |||||
}) | |||||
}, | |||||
close() { | close() { | ||||
this.isShowUpdate = false; | this.isShowUpdate = false; | ||||
}, | }, | ||||
@@ -533,6 +533,7 @@ | |||||
avgDuration: Math.floor(data.data.data.avgDuration / 60) || 0, | avgDuration: Math.floor(data.data.data.avgDuration / 60) || 0, | ||||
tagCustomer: data.data.data.tagCustomer, | tagCustomer: data.data.data.tagCustomer, | ||||
fraction: data.data.data.fraction, | fraction: data.data.data.fraction, | ||||
wordFraction: data.data.data.wordFraction, | |||||
receptionCount: data.data.data.receptionCount | receptionCount: data.data.data.receptionCount | ||||
} | } | ||||
} | } | ||||
@@ -564,6 +565,7 @@ | |||||
avgDuration: Math.floor(data.data.data.avgDuration / 60) || 0, | avgDuration: Math.floor(data.data.data.avgDuration / 60) || 0, | ||||
tagCustomer: data.data.data.tagCustomer, | tagCustomer: data.data.data.tagCustomer, | ||||
fraction: data.data.data.fraction, | fraction: data.data.data.fraction, | ||||
wordFraction: data.data.data.wordFraction, | |||||
receptionCount: data.data.data.receptionCount | receptionCount: data.data.data.receptionCount | ||||
} | } | ||||
} | } | ||||
@@ -41,9 +41,9 @@ | |||||
export default { | export default { | ||||
data() { | data() { | ||||
return { | return { | ||||
username: '', | |||||
username: '',//18831048327 ,18888888800 | |||||
//获取到的用户名的值 | //获取到的用户名的值 | ||||
password: '', | |||||
password: '',//123456 | |||||
//获取到的密码栏中的值 | //获取到的密码栏中的值 | ||||
passwordType: true, | passwordType: true, | ||||
agreeChecked: true | agreeChecked: true | ||||
@@ -241,10 +241,9 @@ | |||||
</view> | </view> | ||||
</view> | </view> | ||||
<view class="pingfenbox"> | <view class="pingfenbox"> | ||||
<view :class="{ activecllasscet: zhixingcenterindex == 0 }" @click="recordclick(0)">销讲总执行率{{totalRate}}% | |||||
</view> | |||||
<view v-if="methodsisshow==true" :class="{ activecllasscet: zhixingcenterindex == 1 }" | |||||
@click="recordclick(1)">禁忌执行</view> | |||||
<view :class="{ activecllasscet: zhixingcenterindex == 0 }" @click="recordclick(0)">销讲总执行率{{totalRate||0}}%</view> | |||||
<view v-if="methodsisshow==true" :class="{ activecllasscet: zhixingcenterindex == 1 }" @click="recordclick(1)">禁忌执行</view> | |||||
<view :class="{ activecllasscet: zhixingcenterindex == 2 }" @click="recordclick(2)">需求挖掘率{{KeyWordsfraction||0}}%</view> | |||||
</view> | </view> | ||||
<view v-if="zhixingcenterindex == 0" class="cenisbox"> | <view v-if="zhixingcenterindex == 0" class="cenisbox"> | ||||
<view | <view | ||||
@@ -254,7 +253,7 @@ | |||||
</view> | </view> | ||||
</view> | </view> | ||||
<view class="Level-box" v-for="(item,index) in ratelist" :key="index"> | <view class="Level-box" v-for="(item,index) in ratelist" :key="index"> | ||||
<view class="Level1che" @click="changeshow(item,1)"> | |||||
<view class="Level1che" @click="item.show = !item.show"> | |||||
<view class="title1">{{item.name.substring(0,8)}}</view> | <view class="title1">{{item.name.substring(0,8)}}</view> | ||||
<view class="leve1-jindu"> | <view class="leve1-jindu"> | ||||
<view class="jindutiao"> | <view class="jindutiao"> | ||||
@@ -268,7 +267,7 @@ | |||||
</view> | </view> | ||||
</view> | </view> | ||||
<view class="hhhbox" v-if="item.show" v-for="(subitem,i) in item.children" :key="i"> | <view class="hhhbox" v-if="item.show" v-for="(subitem,i) in item.children" :key="i"> | ||||
<view class="Level2che" @click="changeshow2(subitem,1)"> | |||||
<view class="Level2che" @click="item.show = !item.show"> | |||||
<view class="title1">{{subitem.name.substring(0,8)}}</view> | <view class="title1">{{subitem.name.substring(0,8)}}</view> | ||||
<view class="leve1-jindu"> | <view class="leve1-jindu"> | ||||
<view class="zhixing" v-if="!subitem.selected">已执行</view> | <view class="zhixing" v-if="!subitem.selected">已执行</view> | ||||
@@ -287,6 +286,8 @@ | |||||
<view class="jiantobox"> | <view class="jiantobox"> | ||||
<image v-if="che.selected==0" class="arrow" src="/static/images/rate-checked.png" | <image v-if="che.selected==0" class="arrow" src="/static/images/rate-checked.png" | ||||
mode="" /> | mode="" /> | ||||
<image v-else class="arrow" src="/static/images/rate-nocheck.png" | |||||
mode="" /> | |||||
</view> | </view> | ||||
</view> | </view> | ||||
<view v-if="subitem.show" style="width: 100%;height: 30rpx;"></view> | <view v-if="subitem.show" style="width: 100%;height: 30rpx;"></view> | ||||
@@ -301,6 +302,75 @@ | |||||
<view v-if="prohibitedlist.length==0" style="width: 100%;text-align: center;margin-top: 60rpx;">暂无数据 | <view v-if="prohibitedlist.length==0" style="width: 100%;text-align: center;margin-top: 60rpx;">暂无数据 | ||||
</view> | </view> | ||||
</view> | </view> | ||||
<view v-if="zhixingcenterindex == 2" class="cenisbox"> | |||||
<view | |||||
style="width: 100%;height: 80rpx;border-bottom: 1rpx solid #E0E0E0;display: flex;align-items: center;"> | |||||
<view style="flex: 1;font-size: 28rpx;color: #333333;font-weight: 600;text-indent: 20rpx;">指标</view> | |||||
<view style="flex: 1;font-size: 28rpx;color: #333333;font-weight: 600;text-indent: 170rpx;">执行率 | |||||
</view> | |||||
</view> | |||||
<view class="Level-box" v-for="(item,index) in KeyWordsfractionList" :key="index"> | |||||
<view class="Level1che" @click="item.show = !item.show"> | |||||
<view class="title1">{{item.name}}</view> | |||||
<view class="leve1-jindu"> | |||||
<view class="jindutiao"> | |||||
<view class="huanxing" :style="{width: item.fraction||0+'%'}"></view> | |||||
<view class="text">{{item.fraction||0}}%</view> | |||||
</view> | |||||
</view> | |||||
<view class="jiantobox"> | |||||
<image v-if="!item.show" class="arrow rotatearrow" src="/static/images/down.png" mode="" /> | |||||
<image v-else class="arrow" src="/static/images/up.png" mode="" /> | |||||
</view> | |||||
</view> | |||||
<!-- 话术在一级下 --> | |||||
<view v-if="item.showLevel==1"> | |||||
<view class="hhhbox" v-if="item.show" style="padding: 30rpx;"> | |||||
<view class="hsnrtest">话术内容</view> | |||||
<view class="Level3che" @tap="clickaudeopal(che)" | |||||
v-for="(che,inc) in item.questionList" :key='inc'> | |||||
<view class="title1">{{inc+1}}.{{che.question}}</view> | |||||
<view class="jiantobox"> | |||||
<image v-if="che.selected==0" class="arrow" src="/static/images/rate-checked.png" | |||||
mode="" /> | |||||
<image v-else class="arrow" src="/static/images/rate-nocheck.png" | |||||
mode="" /> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<!-- 话术在二级下 --> | |||||
<view v-if="item.showLevel==2"> | |||||
<view class="hhhbox" v-if="item.show" v-for="(subitem,i) in item.children" :key="i"> | |||||
<view class="Level2che" @click="item.show = !item.show"> | |||||
<view class="title1 u-line-1">{{subitem.name}}</view> | |||||
<view class="leve1-jindu"> | |||||
<view class="zhixing" v-if="!subitem.selected">已执行</view> | |||||
<view class="zhixing2" v-else>未执行</view> | |||||
</view> | |||||
<view class="jiantobox"> | |||||
<image v-if="!subitem.show" class="arrow rotatearrow" src="/static/images/down.png" | |||||
mode="" /> | |||||
<image v-else class="arrow" src="/static/images/up.png" mode="" /> | |||||
</view> | |||||
</view> | |||||
<view v-if="subitem.show" style="padding: 30rpx 0;"> | |||||
<view class="hsnrtest">话术内容</view> | |||||
<view class="Level3che" @tap="clickaudeopal(che)" | |||||
v-for="(che,inc) in subitem.questionList" :key='inc'> | |||||
<view class="title1">{{inc+1}}.{{che.question}}</view> | |||||
<view class="jiantobox"> | |||||
<image v-if="che.selected==0" class="arrow" src="/static/images/rate-checked.png" | |||||
mode="" /> | |||||
<image v-else class="arrow" src="/static/images/rate-nocheck.png" | |||||
mode="" /> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | </view> | ||||
<!-- 客户意向 --> | <!-- 客户意向 --> | ||||
@@ -445,6 +515,8 @@ | |||||
data() { | data() { | ||||
return { | return { | ||||
KeyWordsfraction: 0, | |||||
KeyWordsfractionList: [], | |||||
noClick: true, | noClick: true, | ||||
kehuyixiangcenterindex: 0, | kehuyixiangcenterindex: 0, | ||||
Acquirecustomerintentlist2: [], | Acquirecustomerintentlist2: [], | ||||
@@ -698,9 +770,10 @@ | |||||
this.zhixingcenterindex = i; | this.zhixingcenterindex = i; | ||||
if (i == 0) { | if (i == 0) { | ||||
this.getRatelist() | this.getRatelist() | ||||
} else { | |||||
console.log('999') | |||||
} else if(i==1) { | |||||
this.huoqujinji() | this.huoqujinji() | ||||
}else{ | |||||
this.getfindKeyWordsBycusId() | |||||
} | } | ||||
}, | }, | ||||
//获取禁忌 | //获取禁忌 | ||||
@@ -1047,7 +1120,6 @@ | |||||
} else { | } else { | ||||
tempRoleIndex = this.roleindex | tempRoleIndex = this.roleindex | ||||
} | } | ||||
console.log() | |||||
uni.request({ | uni.request({ | ||||
url: config.service.getCorpusAnal + '?corpusId=' + this.luyinList[this.csdFileindex].id + | url: config.service.getCorpusAnal + '?corpusId=' + this.luyinList[this.csdFileindex].id + | ||||
"&bg=" + bgcd + "&speaker=" + tempRoleIndex + "&voFlag=" + voFlagValue + | "&bg=" + bgcd + "&speaker=" + tempRoleIndex + "&voFlag=" + voFlagValue + | ||||
@@ -1503,7 +1575,6 @@ | |||||
this.messagelisy = this.dialogList[i].message | this.messagelisy = this.dialogList[i].message | ||||
this.argtextindex1 = i; | this.argtextindex1 = i; | ||||
this.argtextindex2 = index; | this.argtextindex2 = index; | ||||
}, | }, | ||||
//回到顶部 | //回到顶部 | ||||
gotoTop() { | gotoTop() { | ||||
@@ -1512,21 +1583,34 @@ | |||||
this.scrollId = "top"; | this.scrollId = "top"; | ||||
}) | }) | ||||
}, | }, | ||||
//切换tab | |||||
changeTab(type) { | |||||
if (type == 0) { | |||||
this.tab = 0 | |||||
} else { | |||||
this.tab = 1; | |||||
this.getRatelist(); | |||||
} | |||||
}, | |||||
//评分上下显隐 | |||||
changeshow(item, type) { | |||||
item.show = !item.show; | |||||
}, | |||||
changeshow2(item, type) { | |||||
item.show = !item.show; | |||||
// 客户详情需求挖掘话术 | |||||
getfindKeyWordsBycusId() { | |||||
this.$u.get("/cusLvStatistics/findKeyWordsBycusId?cusId=" + this.customerId).then(res => { | |||||
// console.log(res) | |||||
if(res.length){ | |||||
this.KeyWordsfraction = 0 | |||||
res.forEach(item=>{ | |||||
this.KeyWordsfraction += +item.fraction // 总执行率 | |||||
item.show = false | |||||
item.children.forEach(obj=>{ | |||||
obj.show = false | |||||
if(obj.questionList.length){ | |||||
obj.questionList.forEach(subobj=>{ | |||||
subobj.show =false | |||||
}) | |||||
} | |||||
}) | |||||
if(item.questionList.length){ | |||||
item.questionList.forEach(obj=>{ | |||||
obj.show =false | |||||
}) | |||||
} | |||||
}) | |||||
this.KeyWordsfractionList = res | |||||
}else{ | |||||
this.KeyWordsfractionList = [] | |||||
} | |||||
}) | |||||
}, | }, | ||||
getRatelist() { | getRatelist() { | ||||
this.$u.get("/customer/findzkMByCusId", { | this.$u.get("/customer/findzkMByCusId", { | ||||
@@ -1,8 +1,7 @@ | |||||
// http.js使用域名 | // http.js使用域名 | ||||
const baseUrl = 'http://81.70.55.170:9090/autoSR/api';// 最新测试 | const baseUrl = 'http://81.70.55.170:9090/autoSR/api';// 最新测试 | ||||
// const baseUrl = 'http://192.168.31.148:8080/api';// 泽明 | |||||
// const baseUrl = 'http://127.0.0.1:8080/autoSR/api'; // 本地 | // const baseUrl = 'http://127.0.0.1:8080/autoSR/api'; // 本地 | ||||
// const baseUrl = 'http://192.168.31.161:8080/autoSR/api'; // 长龙 | |||||
// const baseUrl = 'http://192.168.31.169:8080/autoSR/api'; // 长龙 | |||||
// const baseUrl = 'http://192.168.31.90:8080/api'; // 盛浩 | // const baseUrl = 'http://192.168.31.90:8080/api'; // 盛浩 | ||||
// const baseUrl = 'https://zkgj.quhouse.com/api'; // 质控正式 | // const baseUrl = 'https://zkgj.quhouse.com/api'; // 质控正式 | ||||
// const baseUrl = 'https://hfju.com/api'; // 数智正式 | // const baseUrl = 'https://hfju.com/api'; // 数智正式 | ||||
@@ -17,7 +16,6 @@ const baseUrl = 'http://81.70.55.170:9090/autoSR/api';// 最新测试 | |||||
// const host = 'http://192.168.31.57:8080/autoSR/api';// 本地 | // const host = 'http://192.168.31.57:8080/autoSR/api';// 本地 | ||||
const host = baseUrl; // 测试站 | const host = baseUrl; // 测试站 | ||||
// const host = 'http://192.168.31.167:8080/autoSR/api'; // 长龙 | // const host = 'http://192.168.31.167:8080/autoSR/api'; // 长龙 | ||||
// const host = 'http://192.168.31.134:8080/autoSR/api'; // 佳豪 | |||||
// const host = 'http://10.2.1.104:8081/autoSR/api'; // 刘敏 | // const host = 'http://10.2.1.104:8081/autoSR/api'; // 刘敏 | ||||
// const host = 'https://zkgj.quhouse.com/api'; // 质控正式 | // const host = 'https://zkgj.quhouse.com/api'; // 质控正式 | ||||
// const host = 'https://hfju.com/api'; // 数智正式 | // const host = 'https://hfju.com/api'; // 数智正式 | ||||