Browse Source

提交修改

test
douzhuo 3 years ago
parent
commit
2247535e6e
30 changed files with 2252 additions and 1865 deletions
  1. +1
    -1
      App.vue
  2. +19
    -16
      pages.json
  3. +7
    -0
      pages/center/Piabodata/Employeesstatistics.vue
  4. +6
    -0
      pages/center/Piabodata/Groupcontrast.vue
  5. +15
    -0
      pages/center/Piabodata/StaffAnalysis.vue
  6. +14
    -257
      pages/center/Piabodata/Theteamcompared.vue
  7. +101
    -72
      pages/center/Piabodata/TrendAnalysis.vue
  8. +23
    -8
      pages/center/Piabodata/Userinsightinto.vue
  9. +72
    -52
      pages/center/Piabodata/index.vue
  10. +482
    -366
      pages/center/consumer/consumerDetail.vue
  11. +208
    -171
      pages/center/consumer/edit.vue
  12. +137
    -115
      pages/center/consumer/newFollowup/newFollowup.vue
  13. +30
    -8
      pages/center/records/index.vue
  14. +92
    -15
      pages/index/consumer/index.vue
  15. +90
    -78
      pages/index/customer.vue
  16. +54
    -9
      pages/index/index.vue
  17. +35
    -4
      pages/index/learning.vue
  18. +1
    -1
      pages/index/personal.vue
  19. +66
    -55
      pages/learning/Keywordsearch.vue
  20. +365
    -269
      pages/learning/Thefulltext/index2.vue
  21. +1
    -1
      pages/login/Verification.vue
  22. +1
    -1
      pages/login/index.vue
  23. +1
    -1
      pages/login/yinzhongmalogin.vue
  24. +1
    -1
      pages/mine/calibration.vue
  25. +84
    -66
      pages/mine/consultanonduty/index.vue
  26. +0
    -12
      pages/mine/details.vue
  27. +68
    -44
      pages/mine/details2.vue
  28. +36
    -18
      pages/mine/equipment/index.vue
  29. +237
    -224
      pages/mine/reception/addreception.vue
  30. +5
    -0
      uview-ui/components/u-select/u-select.vue

+ 1
- 1
App.vue View File

@@ -75,7 +75,7 @@
// return
if (res.statusCode == 401) {
uni.showToast({
title: '登陆过期请重新登陆',
title: '登录过期请重新登录',
icon: "none",
duration: 2000,
})


+ 19
- 16
pages.json View File

@@ -16,7 +16,8 @@
"style": {
"navigationBarTitleText": "AI销管",
"navigationBarBackgroundColor": "#2671E2",
"navigationBarTextStyle": "white"
"navigationBarTextStyle": "white",
"enablePullDownRefresh": true
}
},
{
@@ -24,7 +25,8 @@
"style": {
"navigationBarTitleText": "客户管理",
"navigationBarBackgroundColor": "#FFFFFF",
"navigationBarTextStyle": "black"
"navigationBarTextStyle": "black",
"enablePullDownRefresh": true
}
},
{
@@ -39,7 +41,8 @@
"style": {
"navigationBarTitleText": "学习",
"navigationBarBackgroundColor": "#2671E2",
"navigationBarTextStyle": "white"
"navigationBarTextStyle": "white",
"enablePullDownRefresh": true
}
}, {
"path": "pages/index/personal",
@@ -65,7 +68,7 @@
{
"path": "Verification",
"style": {
"navigationBarTitleText": "登",
"navigationBarTitleText": "登",
"navigationBarBackgroundColor": "#2671E2",
"navigationBarTextStyle": "white"
// "navigationStyle": "custom"
@@ -200,36 +203,36 @@
"navigationBarTextStyle": "black"
}
}
,{
"path" : "messageList",
,{
"path" : "messageList",
"style" :
{
"navigationBarTitleText": "消息",
"navigationBarBackgroundColor": "#2671E2",
"navigationBarTextStyle": "white"
}
}
,{
"path" : "daily/dailyList",
}
,{
"path" : "daily/dailyList",
"style" :
{
"navigationBarTitleText": "日报",
"navigationBarBackgroundColor": "#FFFFFF",
"navigationBarTextStyle": "black"
}
}
,{
"path" : "daily/dailyDetail",
}
,{
"path" : "daily/dailyDetail",
"style" :
{
"navigationBarTitleText": "日报详情",
"navigationBarBackgroundColor": "#2671E2",
"navigationBarTextStyle": "white"
}
}
}
]
},
{


+ 7
- 0
pages/center/Piabodata/Employeesstatistics.vue View File

@@ -348,6 +348,13 @@
background: #FAFAFA;
padding-bottom: 60rpx;
}
.boxtittab {
position: sticky;
top: var(--window-top);
z-index: 999;
}
.hejisan{
width: 92%;
margin: 0 auto;


+ 6
- 0
pages/center/Piabodata/Groupcontrast.vue View File

@@ -474,4 +474,10 @@
background: #FAFAFA;
padding-bottom: 60rpx;
}
.boxtittab {
position: sticky;
top: var(--window-top);
z-index: 999;
}
</style>

+ 15
- 0
pages/center/Piabodata/StaffAnalysis.vue View File

@@ -126,6 +126,7 @@
<view class="uchaserbox">
<qiun-data-charts
type="radar"
:opts="opts"
:chartData="chartData"
:canvas2d="true"
canvasId="wangxiaohuaerlingeryilinwuycsdx"
@@ -222,6 +223,14 @@
"data": [90,110,165,195,187,172]
}
]
},
opts: {
fontSize: 10,
extra: {
radar: {
max: 100
}
}
}
};
@@ -569,6 +578,12 @@
}
</script>
<style lang="scss" scoped>
.boxtittab {
position: sticky;
top: var(--window-top);
z-index: 999;
}
// 对比时间切换
.timepick{
width: 100%;


+ 14
- 257
pages/center/Piabodata/Theteamcompared.vue View File

@@ -48,9 +48,6 @@
<view class="title3-box" @click="tabtimetap1(1)">
<view style="height: 42rpx;" :class="{ activecltab: eharTab.active1 == 1 }">趋势</view>
</view>
<!-- <view class="title3-box">
<view style="height: 42rpx;" :class="{ activecltab: activeTotal2 == 2 }">表格</view>
</view> -->
</view>
</view>
<view class="hejibox">
@@ -130,15 +127,8 @@
<view class="title3-box" @click="tabtimetap3(1)">
<view style="height: 42rpx;" :class="{ activecltab: eharTab.active3 == 1 }">趋势</view>
</view>
<!-- <view class="title3-box">
<view style="height: 42rpx;" :class="{ activecltab: activeTotal2 == 2 }">表格</view>
</view> -->
</view>
</view>
<!-- <view class="hejibox">
<view class="heji">{{!staff1.value?'团队总数':staff1.label}}:{{newTeam3||0}}</view>
<view class="heji">{{!staff2.value?'团队平均':staff2.label}}:{{newAvg3||0}}</view>
</view> -->
<view class="" v-if=" eharTab.active3 == 1 ">
<view class="danwei">执行率</view>
<view class="uchaserbox">
@@ -161,35 +151,6 @@
</view>

<view style="width: 100%;height: 20rpx;background: #FAFAFA;"></view>
<!-- <view class="single">
<view class="title">
<view class="title1" style="flex: 1;">顾问排名(TOP10)</view>
<view class="title3" style="flex: 1;">
<view class="title3-box">
<view style="height: 42rpx;" :class="{ activecltab: activeTotal2 == 0 }">执行率</view>
</view>
<view class="title3-box">
<view style="height: 42rpx;" :class="{ activecltab: activeTotal2 == 1 }">得分</view>
</view>
</view>
</view>
<view class="hejibox">
<view class="heji">合计:50</view>
<view class="heji">均值:25</view>
</view>
<view class="jindu">
<view class="jindu-box" v-for="(item,index) in newlisttabinfo" :key="index">
<view class="jindu-boxche">
<view class="jindu-name">{{item.name.substring(0, 4)}}</view>
<view style="width: 440rpx;margin-left: 10rpx;">
<u-line-progress height="24" :show-percent="false" active-color="#9B6BDF" :percent="item.zxl"></u-line-progress>
</view>
<view class="jindu-zxl">{{item.zxl==null?0:item.zxl}}</view>
</view>
</view>
</view>
</view> -->

<view style="width: 100%;height: 20rpx;background: #FAFAFA;"></view>
<view class="single">
@@ -208,79 +169,7 @@
</view>
</view>




<view style="width: 100%;height: 20rpx;background: #FAFAFA;"></view>
<!-- <view class="single">
<view class="title">
<view class="title1" style="flex: 1;">禁忌执行率</view>
<view class="title3" style="flex: 1;">
<view class="title3-box" @click="tabtimetap4(0)">
<view style="height: 42rpx;" :class="{ activecltab: eharTab.active4 == 0 }">排名</view>
</view>
<view class="title3-box" @click="tabtimetap4(1)">
<view style="height: 42rpx;" :class="{ activecltab: eharTab.active4 == 1 }">趋势</view>
</view>
<view class="title3-box">
<view style="height: 42rpx;" :class="{ activecltab: activeTotal2 == 2 }">表格</view>
</view>
</view>
</view>
<view class="hejibox">
<view class="heji">{{!staff1.value?'团队':staff1.label}}:{{newTeam4||0}}</view>
<view class="heji">{{!staff2.value?'均值':staff2.label}}:{{newAvg4||0}}</view>
</view>
<view class="" v-if=" eharTab.active4 == 1 ">
<view class="danwei">来访(人)</view>
<view class="uchaserbox">
<qiun-data-charts
type="line"
:chartData="lineOptsect4"
background="none"
:ontouch="true"
canvasId="wangxiaohuaerlingeryilingwuyi"
:canvas2d="true"
/>
</view>
</view>
<view class="jindu" v-if=" eharTab.active4 == 0 ">
<view class="jindu-box" v-for="(item,index) in newlisttabinfo4" :key="index">
<view class="jindu-boxche">
<view class="jindu-name">{{item.name.substring(0, 4)}}</view>
<view style="width: 440rpx;margin-left: 10rpx;">
<u-line-progress height="24" :show-percent="false" active-color="#FBA448" :percent="item.zxl"></u-line-progress>
</view>
<view class="jindu-zxl">{{item.zxl==null?0:item.zxl}}</view>
</view>
</view>
</view>
</view> -->

<!-- <view style="width: 100%;height: 20rpx;background: #FAFAFA;"></view> -->
<!-- <view class="single">
<view class="title" style="padding-right: 30rpx;">
<view class="title1" style="flex: 1;">违禁能力(TOP10)</view>
<view class="title2" style="flex: 1;justify-content: flex-end;">
<view class="title2-che">楼盘
<image class="righttochoose" src="../../../static/images/righttochoose.png" mode=""></image>
</view>
</view>
</view>
<view class="hejibox">
<view class="heji">合计:50</view>
<view class="heji">均值:25</view>
</view>
<view class="uchaserbox">
<qiun-data-charts
type="radar"
:chartData="chartData"
:canvas2d="true"
canvasId="wangxiaohuaerlingeryilingwuyib89"
background="none"
/>
</view>
</view> -->

<u-calendar v-model="totalTimeShow" mode="range" @change="totalTimeChange"></u-calendar>

@@ -647,152 +536,10 @@
this.getPowerList()
}
},
// 团队对比接待量
// receptionCountList(idx){
// this.$u.post('/cusLvStatistics/teamAnalysisReception',{
// // userA:this.staff1.value,
// // userB:this.staff2.value,
// deptIds:[this.staff1.value,this.staff2.value].filter(item=>item).join(','),
// showRank:idx,
// houseId:this.houseId,
// timeType:this.lastEndDate?null:this.activeTotal+'',
// lastEndDate:this.lastEndDate,
// lastStartDate:this.lastStartDate
// })
// .then(res=>{
// // console.log(res)
// let result=res.result
// this.newTeam=res.avg[0]
// this.newAvg=res.avg[1]
// if(idx==0){
// // 当选择的是牌名时
// // 处理数据
// // 先处理牌名数据,需要进行判断全部还是单个
// // 当为全部时
// this.newlisttabinfo=[]
// // 当选择全部时
// if(!this.staff1.value&&!this.staff2.value){
// // console.log(1)
// result[0].map(item=>{
// let obj={}
// obj.name=item.deptName
// obj.zxl=item.receptionCount
// this.newlisttabinfo.push(obj)
// })
// }
// // 当选择只有一个时
// else if(this.staff1.value&&!this.staff2.value){
// // console.log(2)
// result[0].map(item=>{
// let obj={}
// obj.name=item.deptName
// obj.zxl=item.receptionCount
// this.newlisttabinfo.push(obj)
// })
// // 判断是否显示平均
// // 如果显示对比
// if(this.timepickpickisshow){
// result[1].map(item=>{
// let obj={}
// obj.name='平均'
// obj.zxl=item.receptionCount
// this.newlisttabinfo.push(obj)
// })
// }
// }else{
// // console.log(3)
// // 当两个都选择的时候
// result[0].map(item=>{
// let obj={}
// obj.name=item.deptName
// obj.zxl=item.receptionCount
// this.newlisttabinfo.push(obj)
// })
// result[1].map(item=>{
// let obj={}
// obj.name=item.deptName
// obj.zxl=item.receptionCount
// this.newlisttabinfo.push(obj)
// })
// }
// }else{
// // 当选择趋势时
// // this.lineOptsect={
// // categories:[],
// // series:[]
// // }
// let allobj={
// categories:[],
// series:[]
// }
// // 先处理时间
// // 当选择全部时
// if(!this.staff1.value&&!this.staff2.value){
// // console.log(1)
// result.map((item,idx)=>{
// let obj={}
// obj.name=item[0].deptName
// obj.data=[]
// item.map(item1=>{
// // 时间的处理
// if(idx==0){
// allobj.categories.push(item1.statDate.slice(5,10))
// }
// obj.data.push(item1.receptionCount)
// })
// allobj.series.push(obj)
// })
// }
// // 当选择只有一个时
// else if(this.staff1.value&&!this.staff2.value){
// // console.log(2)
// let obj={}
// obj.data=[]
// obj.name=result[0][0].deptName
// result[0].map(item=>{
// allobj.categories.push(item.statDate.slice(5,10))
// obj.data.push(item.receptionCount)
// })
// allobj.series.push(obj)
// // 判断是否显示平均
// // 如果显示对比
// if(this.timepickpickisshow){
// let obj={}
// obj.data=[]
// obj.name='平均'
// result[1].map(item=>{
// obj.data.push(item.receptionCount)
// })
// allobj.series.push(obj)
// }
// }else{
// // console.log(3)
// // 当两个都选择的时候
// let obj={}
// let obj1={}
// obj.data=[]
// obj1.data=[]
// obj.name=result[0][0].deptName
// obj1.name=result[1][0].deptName
// result[0].map(item=>{
// allobj.categories.push(item.statDate.slice(5,10))
// obj.data.push(item.receptionCount)
// })
// result[1].map(item=>{
// obj1.data.push(item.receptionCount)
// })
// allobj.series.push(obj)
// allobj.series.push(obj1)
// }
// this.lineOptsect=allobj
// }
// })
// },
// 接待时长

// 公共方法
receptionCountList(idx, index, url) {
this.$u.post(url, {
// userA:this.staff1.value,
// userB:this.staff2.value,
deptIds: [this.staff1.value, this.staff2.value].filter(item => item).join(','),
showRank: idx,
houseId: this.houseId,
@@ -801,11 +548,12 @@
lastStartDate: this.lastStartDate
})
.then(res => {
// console.log(res)
console.log('我再此')
let result = res.result
this['newTeam' + index] = res.avg[0]
this['newAvg' + index] = res.avg[1]
if (idx == 0) {
console.log(idx, index, url, '打卡记录撒橘红颗粒大健康1 ')
// 当选择的是牌名时
// 处理数据
// 先处理牌名数据,需要进行判断全部还是单个
@@ -847,7 +595,7 @@
arr = this.dealData(arr)
this['newlisttabinfo' + index] = arr
} else {
// console.log(3)
console.log(3, '啥大上课了就可领取诶去玩害偶尔UI哦请勿诶哦')
// 当两个都选择的时候
result[0].map(item => {
let obj = {}
@@ -865,6 +613,7 @@
this['newlisttabinfo' + index] = arr
}
} else {
console.log(idx, index, url, '1231231231289123132UI哦23UI哦23UI哦1 ')
// 当选择趋势时
this['lineOptsect' + index] = {}
let allobj = {
@@ -936,6 +685,8 @@
// this['lineOptsect'+index].series=allobj.series
// this['lineOptsect'+index].categories=allobj.categories
}
this.$forceUpdate()
})
},
// 获取销奖能力
@@ -1053,6 +804,12 @@
};
</script>
<style lang="scss" scoped>
.boxtittab {
position: sticky;
top: var(--window-top);
z-index: 999;
}
.box {
width: 100%;
height: 100%;


+ 101
- 72
pages/center/Piabodata/TrendAnalysis.vue View File

@@ -54,9 +54,9 @@
{{index==1?item.num+'%':item.num}}
</view>
<view class="comparesize" v-if="compareFlag&&timepickpickisshow">
<text style="margin-right: 10rpx;">对比:{{index==1?item.num1+'%':item.num1}} </text>
<text :style="{color:item.num2*1>0?'red':'green'}">{{item.num2+'%'}}
{{item.num2*1>0?'↑':'↓'}}</text>
<text style="margin-right: 10rpx;">对比:{{index==1?item.num1+'%':item.num1}}</text>
<text
:style="{color:item.num2*1>0?'red':'green'}">{{item.num2+'%'}} {{(item.num2*1) > 0 ? '↑' : '↓'}}</text>
</view>
</view>
</view>
@@ -141,9 +141,9 @@
<view class="single">
<!-- <view class="danwei" style="margin-top: 10rpx;">销讲词执行率</view> -->
<view class="uchaserbox" v-if="lineOptsect.series.length!=0">
<qiun-data-charts :style="!showCanvas?'display:none':''" :type="linetype" :chartData="lineOptsect"
background="none" :ontouch="true" canvasId="wangxiaohuaerlingeryilingwuyibao"
:canvas2d="true" />
<qiun-data-charts :style="!showCanvas?'display:none':''" :type="linetype" :opts="opts"
:chartData="lineOptsect" background="none" :ontouch="true"
canvasId="wangxiaohuaerlingeryilingwuyibao" :canvas2d="true" />
</view>
<view v-else style="width: 100%;">
<view style="width: 100%;text-align: center;">
@@ -184,7 +184,8 @@
style="display: inline-block;">
<view v-if="index==1&&index1>0" class="td" :style="{color:item1*1>0?'red':'green'}"
style="border-right:1px solid #E0E0E0;">
{{item1==0?'--':item1+'%'}}{{item1*1>0?'↑':item1*1<0?'↓':''}}</view>
{{item1==0?'--':item1+'%'}}{{item1*1>0?'↑':item1*1<0?'↓':''}}
</view>
<view v-else-if="index>1&&index1>0" class="td" style="border-right:1px solid #E0E0E0;">
{{item1+'%'}}
</view>
@@ -198,7 +199,7 @@
</view>
<view style="width: 100%;height: 60rpx;"></view>
<u-select v-model="Showhiddenunits" mode="single-column" :list="selectlist" @confirm="confirm"
:default-value="selindex">
:default-value="selindexList">
</u-select>
<u-select v-model="Showhiddenunits2" mode="single-column" :list="selectlist2" @confirm="confirm2"
:default-value="selindex">
@@ -221,6 +222,7 @@
export default {
data() {
return {
selindexList: [0], // 默认选中第一项
compareFlag: false,
numlist: [{
name: '接待量',
@@ -307,7 +309,15 @@
sheartime2: "",
intervaltime: 0,
tableDate: [],
guwenFlag: false
guwenFlag: false,
opts: {
fontSize: 10,
extra: {
radar: {
max: 100
}
}
}
};

},
@@ -577,70 +587,73 @@
};
this.linetype = "line";
this.$u.post("/cusLvStatistics/teamOrOneValueShow", this.pamect).then(data => {
if (this.pamect.showStatus == 0) {
that.lineOptsect = {
categories: [],
series: [{
name: '起始时间',
data: [],
color: '#7ED3F4'
}]
}
data.startList.forEach((child, zxc) => {
that.lineOptsect.categories.push(child.statDate.substring(5, 10))
})
that.lineOptsect.series[0].data = data.startList.map(item => item.fraction);
} else {
that.lineOptsect = {
categories: [],
series: [{
if (data.data != null) {
if (this.pamect.showStatus == 0) {
that.lineOptsect = {
categories: [],
series: [{
name: '起始时间',
data: [],
color: '#7ED3F4'
},
{
name: '对比时间',
data: [],
color: '#FF7070'
},
]
}
data.startList.forEach((item, sdf) => {
data.endList.forEach((child, zxc) => {
if (sdf == zxc) {
that.lineOptsect.categories.push(
child.statDate.substring(5, 10) + 'vs' + item.statDate
.substring(5, 10)
)
}
}]
}
data.startList.forEach((child, zxc) => {
that.lineOptsect.categories.push(child.statDate.substring(5, 10))
})
})
that.lineOptsect.series[1].data = data.startList.map(item => item.fraction);
that.lineOptsect.series[0].data = data.endList.map(item => item.fraction)
that.guwenFlag = false
// // 处理表格数据
let arr = [
['时间', '时段一', '时段二', '变化']
// {
// time:'时间',
// time1:'时段一',
// time2:'时段二',
// compare:'变化'
// },
]
that.lineOptsect.categories.map((item, index) => {
let newarr = [item, data.endList[index].fraction, data.startList[index]
.fraction, data.comparedList[index].fraction
that.lineOptsect.series[0].data = data.startList.map(item => item.fraction);
} else {
that.lineOptsect = {
categories: [],
series: [{
name: '起始时间',
data: [],
color: '#7ED3F4'
},
{
name: '对比时间',
data: [],
color: '#FF7070'
},
]
}
data.startList.forEach((item, sdf) => {
data.endList.forEach((child, zxc) => {
if (sdf == zxc) {
that.lineOptsect.categories.push(
child.statDate.substring(5, 10) + 'vs' + item
.statDate
.substring(5, 10)
)
}
})
})
that.lineOptsect.series[1].data = data.startList.map(item => item.fraction);
that.lineOptsect.series[0].data = data.endList.map(item => item.fraction)
that.guwenFlag = false
// // 处理表格数据
let arr = [
['时间', '时段一', '时段二', '变化']
// {
// time:'时间',
// time1:'时段一',
// time2:'时段二',
// compare:'变化'
// },
]
// obj.time=item
// obj.time1=data.firstValue[index].fraction
// obj.time2=data.lastValue[index].fraction
// obj.compare=data.contrast[index].data
// arr.push(obj)
arr.push(newarr)
})
// console.log(arr)
that.tableDate = arr
that.lineOptsect.categories.map((item, index) => {
let newarr = [item, data.endList[index].fraction, data.startList[index]
.fraction, data.comparedList[index].fraction
]
// obj.time=item
// obj.time1=data.firstValue[index].fraction
// obj.time2=data.lastValue[index].fraction
// obj.compare=data.contrast[index].data
// arr.push(obj)
arr.push(newarr)
})
// console.log(arr)
that.tableDate = arr
}
}
});
},
@@ -718,6 +731,11 @@
this.pamect.accountId = this.lopanobj.id;
this.ConsultantDimension()
this.Showhiddenunits = false;
for (let i = 0; i < this.selectlist.length; i++) {
if (e[0].value == this.selectlist[i].value) {
this.selindexList[0] = i
}
}
},
//获取顾问
getguwenlist() {
@@ -1122,25 +1140,30 @@
}
</script>
<style lang="scss" scoped>
.uchaserbox {
height: 50vh;
}

.title2-che {
width: 178rpx;
height: 48rpx;
height: 80rpx;
background: #FFFFFF;
border-radius: 6rpx;
border: 1px solid #E0E0E0;
line-height: 48rpx;
border: 1rpx solid #E0E0E0;
line-height: 80rpx;
font-size: 28rpx;
font-weight: 400;
color: #666666;
text-indent: 12rpx;
margin-left: 35rpx;
margin-top: 20rpx;
position: relative;

.righttochoose {
width: 18rpx;
height: 24rpx;
position: absolute;
top: 12rpx;
top: 28rpx;
right: 12rpx;
}
}
@@ -1211,6 +1234,10 @@

// 顶部时间切换
.timetabct {
position: sticky;
top: var(--window-top);
z-index: 999;
background: #fff;
width: 100%;
height: 98rpx;
display: flex;
@@ -1357,6 +1384,8 @@
font-size: 24rpx;
color: #666666;
margin-top: 10rpx;
display: flex;
align-items: center;
}

.grid:nth-child(1) {


+ 23
- 8
pages/center/Piabodata/Userinsightinto.vue View File

@@ -62,14 +62,21 @@
</view>
</view>
<view v-if="item.activeTab==1" class="tabech">
<qiun-data-charts
:key="item.id"
type="ring"
:chartData="item.chartData"
:canvas2d="true"
:canvasId="'wangxiaohuahahahahaha'+item.id"
:opts='item.opts'
background="none" />
<template v-if="item.chartDataShow">
<qiun-data-charts
:key="item.id"
type="ring"
:chartData="item.chartData"
:canvas2d="true"
:canvasId="'wangxiaohuahahahahaha'+item.id"
:opts='item.opts'
background="none" />
</template>
<template v-else>
<view>
<view style="color: #999999;width: 100%;height: 500rpx;line-height: 500rpx;text-align: center;" >暂无数据</view>
</view>
</template>
</view>
</view>

@@ -172,6 +179,11 @@
"value": chend.proportion
})
})
if (item.chartData.series[0].data.length > 0) {
item.chartDataShow = true
} else {
item.chartDataShow = false
}
})
data.list.forEach(item=>{
item.matchKeywords.forEach(chend=>{
@@ -240,6 +252,9 @@
}

.boxtittab {
position: sticky;
top: var(--window-top);
z-index: 999;
width: 100;
height: 92rpx;
background: #FFFFFF;


+ 72
- 52
pages/center/Piabodata/index.vue View File

@@ -14,8 +14,8 @@
<view :class="{ activecllasscet: activeTotal == 3 }" @click="tabtimetap(3)">自定义</view>
</view>
</view>
<!-- <view style="width: 100%;height: 20rpx;background: #FAFAFA;"></view>
<view class="Piabodata-box">
<view class="Piabodata" @click="toTrendAnalysis()" v-if="permissions.commonly3">
@@ -83,9 +83,9 @@
<view class="heji">均值:25</view>
</view> -->
<view class="danwei">{{danwei}} </view>
<view class="uchaserbox" >
<qiun-data-charts type="line" :chartData="lineOptsect" :opts="optionsobj" background="none" :ontouch="true"
canvasId="wangxiaohuaerlingilingwuyiba1" :canvas2d="true" />
<view class="uchaserbox">
<qiun-data-charts type="line" :chartData="lineOptsect" :opts="optionsobj" background="none"
:ontouch="true" canvasId="wangxiaohuaerlingilingwuyiba1" :canvas2d="true" />
</view>
</view>

@@ -99,7 +99,7 @@
<view class="title2-che" style="width: 220rpx;">{{team.label}}
<image class="righttochoose" src="../../../static/images/righttochoose.png" mode=""></image>
</view>
</view>
</view>
<view class="danwei">单位(%)</view>
@@ -130,8 +130,8 @@
</view> -->
<view class="danwei">单位(%)</view>
<view class="uchaserbox">
<qiun-data-charts type="line" :chartData="lineOptsect2" background="none" :ontouch="true"
canvasId="wangxiaohuaerlingeryilingwuyibao" :canvas2d="true" />
<qiun-data-charts type="line" :opts="opts" :chartData="lineOptsect2" background="none"
:ontouch="true" canvasId="wangxiaohuaerlingeryilingwuyibao" :canvas2d="true" />
</view>
</view>
</view>
@@ -153,7 +153,8 @@
<view class="heji">合计:50</view>
<view class="heji">均值:25</view>
</view> -->
<view style="width: 100%;height: 300rpx;text-align: center;line-height: 300rpx;" v-if="newlisttabinfo.length==0">暂无数据</view>
<view style="width: 100%;height: 300rpx;text-align: center;line-height: 300rpx;"
v-if="newlisttabinfo.length==0">暂无数据</view>
<view v-else class="jindu" style="margin-top: 20rpx;">
<scroll-view style="height: 300rpx;" scroll-y="true">
<view class="jindu-box" v-for="(item,index) in newlisttabinfo" :key="index">
@@ -181,7 +182,8 @@
:is-scroll="true">
</u-tabs-swiper>
</view>
<view style="width: 100%;height: 300rpx;text-align: center;line-height: 300rpx;" v-if="newlisttabinfo1.length==0">暂无数据</view>
<view style="width: 100%;height: 300rpx;text-align: center;line-height: 300rpx;"
v-if="newlisttabinfo1.length==0">暂无数据</view>
<view class="jindu" v-else>
<scroll-view style="height: 300rpx;" scroll-y="true">
<view class="jindu-box" v-for="(item,index) in newlisttabinfo1" :key="index">
@@ -249,19 +251,20 @@
totalTimeShow: false,
activeTab: 0,
numlist: [{
name: '接待客户',
name: '平均执行率',
num: ''
},
{
name: '接待量',
name: '平均接待时长',
num: ''
},

{
name: '平均执行率',
name: '接待量',
num: ''
},
{
name: '平均接待时长',
name: '有效接待',
num: ''
},
],
@@ -279,20 +282,21 @@
},
newlistoj: [],
newlistoj1: [{
name: "接待客户",
id: 1
},
{
name: "平均执行率",
id: 2
},
{
name: "平均接待时长",
id: 5
},

{
name: "接待量",
id: 3
},
{
name: "平均接待时长",
id: 5
name: "有效接待",
id: 1
},
],
bocindex: 0,
@@ -314,25 +318,33 @@
Groupcontrastisshow: false,
allechar: [],
allList: [],
optionsobj:{},
permissions:{
commonly2:false,
commonly3:false,
commonly4:false,
commonly5:false,
commonly6:false,
optionsobj: {},
permissions: {
commonly2: false,
commonly3: false,
commonly4: false,
commonly5: false,
commonly6: false,
},

opts: {
yAxis: {
data: [{
max: 100
}]
}
}
};
},
onShow() {
let newmenulist= uni.getStorageSync('weapp_session_Menu_data');
this.permissions.commonly2=newmenulist.lpdb;
this.permissions.commonly3=newmenulist.xjqs;
this.permissions.commonly4=newmenulist.tddb;
this.permissions.commonly5=newmenulist.gwnl;
this.permissions.commonly6=newmenulist.yhhx;
let newmenulist = uni.getStorageSync('weapp_session_Menu_data');
this.permissions.commonly2 = newmenulist.lpdb;
this.permissions.commonly3 = newmenulist.xjqs;
this.permissions.commonly4 = newmenulist.tddb;
this.permissions.commonly5 = newmenulist.gwnl;
this.permissions.commonly6 = newmenulist.yhhx;
// 获取楼盘id
this.houseId = uni.getStorageSync('buildingID').id;
// 获取数据看板
@@ -351,8 +363,8 @@
this.getindexZxl()
},
methods: {
// 获取员工列表
getStaffList() {
this.$u.post('/cusLvStatistics/selectAllAccountIdByHouseId', {
@@ -477,7 +489,8 @@
this.lineOptsect2.categories = []
this.lineOptsect2.series = [{
name: first[0].accountName,
data: []
data: [],
max: 100,
}]
first.map(item => {
this.lineOptsect2.categories.push(item.statDate.slice(5, 10))
@@ -576,14 +589,7 @@
}]
}
if (index == 0) {
// 接待量
this.danwei = '单位(次)'
allobj.series[0].name = '接待量'
this.allechar.map(item => {
allobj.categories.push(item.statDate.slice(5, 10))
allobj.series[0].data.push(item.receptionCount)
})
} else if (index == 1) {

// 平均执行率
this.danwei = '单位(%)'
allobj.series[0].name = '平均执行率'
@@ -591,28 +597,36 @@
allobj.categories.push(item.statDate.slice(5, 10))
allobj.series[0].data.push(item.fraction)
})
} else if (index == 1) {
// 平均接待时长
this.danwei = '单位(min)'
allobj.series[0].name = '录音时长'
this.allechar.map(item => {
allobj.categories.push(item.statDate.slice(5, 10))
allobj.series[0].data.push(item.sumDuration)
})
} else if (index == 2) {
// 接待客户
this.danwei = '单位(个)'
allobj.series[0].name = '接待客户'
allobj.series[0].name = '接待'
this.allechar.map(item => {
allobj.categories.push(item.statDate.slice(5, 10))
allobj.series[0].data.push(item.sumCustomer)
})
} else {
// 平均接待时长
this.danwei = '单位(min)'
allobj.series[0].name = '录音时长'
// 接待量
this.danwei = '单位()'
allobj.series[0].name = '有效接待'
this.allechar.map(item => {
allobj.categories.push(item.statDate.slice(5, 10))
allobj.series[0].data.push(item.sumDuration)
allobj.series[0].data.push(item.receptionCount)
})
}
this.bocindex = index;
this.lineOptsect = allobj
},
tapspagek3(index) {
this.newlisttabinfo1=[];
this.newlisttabinfo1 = [];
let arr = []
this.allList[index].children.map(item => {
arr.push({
@@ -678,6 +692,12 @@
padding-bottom: 60rpx;
}

.boxtittab {
position: sticky;
top: var(--window-top);
z-index: 999;
}

.Piabodata-box {
width: 100%;
background: #FFFFFF;


+ 482
- 366
pages/center/consumer/consumerDetail.vue
File diff suppressed because it is too large
View File


+ 208
- 171
pages/center/consumer/edit.vue View File

@@ -14,22 +14,25 @@
</view>
</view>
<view class="conmsg-msg-lab-inp">
<input type="text" placeholder="请输入客户姓名" placeholder-style="color:#B2B2B2;" v-model="form.name"/>
<input type="text" placeholder="请输入客户姓名" placeholder-style="color:#B2B2B2;"
v-model="form.name" />
</view>
</view>
<view class="conmsg-msg-lab">
<view class="conmsg-msg-lab-1">
客户性别
</view>
<view class="conmsg-msg-lab-inp" style="margin-top: 20rpx;">
<view style="border: none; display: flex;">
<view class="sexchose" @click="form.sex=1" :style="{border:form.sex==1?'1px solid #0A6EE9':'1px solid #E0E0E0'}">
</view>
<view class="sexchose" @click="form.sex=2" :style="{border:form.sex==2?'1px solid #0A6EE9':'1px solid #E0E0E0'}">
</view>
<view class="conmsg-msg-lab-inp">
<view style="border: none; display: flex;">
<view class="sexchose" @click="form.sex=1"
:style="{border:form.sex==1?'1px solid #0A6EE9;background: #0A6EE9;color: #fff;':'1px solid #E0E0E0'}">
</view>
<view class="sexchose" @click="form.sex=2"
:style="{border:form.sex==2?'1px solid #0A6EE9;background: #0A6EE9;color: #fff;':'1px solid #E0E0E0'}">
</view>
</view>
</view>
</view>
<view class="conmsg-msg-lab">
@@ -40,7 +43,8 @@
</view>
</view>
<view class="conmsg-msg-lab-inp">
<input :disabled="dataCode!=6" type="number" placeholder="请输入联系电话" placeholder-style="color:#B2B2B2;" maxlength="11" v-model="form.phone"/>
<input :disabled="dataCode!=6" type="number" placeholder="请输入联系电话"
placeholder-style="color:#B2B2B2;" maxlength="11" v-model="form.phone" />
</view>
</view>
<view class="conmsg-msg-lab">
@@ -48,7 +52,8 @@
微信账号
</view>
<view class="conmsg-msg-lab-inp">
<input type="text" placeholder="请输入微信账号" placeholder-style="color:#B2B2B2;" v-model="form.chatNo"/>
<input type="text" placeholder="请输入微信账号" placeholder-style="color:#B2B2B2;"
v-model="form.chatNo" />
</view>
</view>
<view class="conmsg-msg-lab" @click="levelshow = true">
@@ -56,7 +61,7 @@
客户等级
</view>
<view class="conmsg-msg-lab-inp">
<input type="text" placeholder="请选择客户等级" v-model="selectform.level" disabled/>
<input type="text" placeholder="请选择客户等级" v-model="selectform.level" disabled />
</view>
<view class="conmsg-msg-lab-img">
<image class="screen-sel-img" src="../../../static/images/right.png" mode=""></image>
@@ -78,188 +83,196 @@
备注内容
</view>
<view class="conmsg-msg-lab-inp">
<input type="text" placeholder="请输入备注内容" placeholder-style="color:#B2B2B2;" v-model="form.remarks"/>
<input type="text" placeholder="请输入备注内容" placeholder-style="color:#B2B2B2;"
v-model="form.remarks" />
</view>
</view>
</view>
</view>
<view class="conmsg" v-if="allList.length!=0">
<view class="conmsg-title">
客户标签
</view>
<view class="conmsg-msg">
<view v-for="(item,index) in allList" :key="index">
<view class="">
<view class="conmsg-msg-lab" style="border: none;">
<view class="conmsg-msg-lab-1">
{{item.name}}
<view class="conmsg-msg-lab" style="border: none;">
<view class="conmsg-msg-lab-1">
{{item.name}}
</view>
</view>
</view>
<view class="con-msg-con" :style="{borderBottom:index==allList.length-1?'none':'1px solid #E0E0E0'}">
<view v-for="(item1,i) in item.children" :key="i" @click="Edittag(item,item1,index,i)" :style="{border:item1.selected==0?'1px solid #0A6EE9':'1px solid #E0E0E0'}" class="chebox" >
{{item1.label}}
<view class="con-msg-con"
:style="{borderBottom:index==allList.length-1?'none':'1px solid #E0E0E0'}">
<view v-for="(item1,i) in item.children" :key="i" @click="Edittag(item,item1,index,i)"
:style="{border:item1.selected==0?'1px solid #0A6EE9;background: #0A6EE9;color: #fff;':'1px solid #E0E0E0'}"
class="chebox">
{{item1.label}}
</view>
</view>
</view>
</view>
</view>

</view>
</view>
<view class="submit">
<view class="btn" @click="submit">
确定
</view>
</view>
<view class="" style="height: 220rpx;" >
<view class="" style="height: 220rpx;background: #fff;">
<!-- :style="{marginTop:allList.length!=0?'0':'500rpx'}" -->
</view>
<!-- 客户等级 -->
<u-select v-model="levelshow" :list="levellist" @confirm="levelshowCallback"></u-select>
</view>
</template>

<script>
export default{
data(){
return{
form:{
name:'',
sex:'1',
phone:'',
chatNo:'',
level:'1',
remarks:'',
export default {
data() {
return {
form: {
name: '',
sex: '1',
phone: '',
chatNo: '',
level: '1',
remarks: '',
},
selectform:{
level:'A',
stage:'',
demand:'',
area:'',
budget:'',
fouce:'',
soure:'',
selectform: {
level: 'A',
stage: '',
demand: '',
area: '',
budget: '',
fouce: '',
soure: '',
},
levelshow:false,
customerId:'',
levelshow: false,
customerId: '',
// 等级
levellist:[
{
value:1,
label:'A'
levellist: [{
value: 1,
label: 'A'
},
{
value:2,
label:'B'
value: 2,
label: 'B'
},
{
value:3,
label:'C'
value: 3,
label: 'C'
},
{
value:4,
label:'D'
value: 4,
label: 'D'
},
],
allList:[],
dataCode:''
allList: [],
dataCode: ''
}
},
onLoad(e) {
const {
dataCode
} = uni.getStorageSync("weapp_session_userInfo_data");
this.dataCode=dataCode
this.dataCode = dataCode
console.log(e)
// 先调用借口查询数据
this.customerId=e.id
this.customerId = e.id
this.getdetail()
},
methods:{
Edittag(item,item1,index,i){
if(this.allList[index].children[i].selected==0){
this.allList[index].children[i].selected=1;
}else{
this.allList[index].children[i].selected=0;
methods: {
Edittag(item, item1, index, i) {
if (this.allList[index].children[i].selected == 0) {
this.allList[index].children[i].selected = 1;
} else {
this.allList[index].children[i].selected = 0;
}
this.$forceUpdate()
},
sourecheck(index){
this.sourelist[index].checked=!this.sourelist[index].checked
sourecheck(index) {
this.sourelist[index].checked = !this.sourelist[index].checked
this.$forceUpdate()
},
demandcheck(index){
this.demandlist[index].checked=!this.demandlist[index].checked
demandcheck(index) {
this.demandlist[index].checked = !this.demandlist[index].checked
this.$forceUpdate()
},
areacheck(index){
this.arealist[index].checked=!this.arealist[index].checked
areacheck(index) {
this.arealist[index].checked = !this.arealist[index].checked
this.$forceUpdate()
},
levelshowCallback(e){
this.selectform.level=e[0].label
this.form.level=e[0].value
levelshowCallback(e) {
this.selectform.level = e[0].label
this.form.level = e[0].value
},
// 获取用户数据
getdetail(){
this.$u.get("customer/findById?",{id:this.customerId})
.then(res=>{
this.form=res
// 给客户等级赋值
let idx= this.levellist.findIndex(item=>item.value==res.level)
if(idx!=-1){
this.selectform.level=this.levellist[idx].label
}else{
this.selectform.level='A';
this.form.level=1;
}
// 获取置业需求
this.getListByType()
})
getdetail() {
this.$u.get("customer/findById?", {
id: this.customerId
})
.then(res => {
this.form = res
// 给客户等级赋值
let idx = this.levellist.findIndex(item => item.value == res.level)
if (idx != -1) {
this.selectform.level = this.levellist[idx].label
} else {
this.selectform.level = 'A';
this.form.level = 1;
}
// 获取置业需求
this.getListByType()
})
},
// 字典表接口
getListByType(){
this.$u.get("/matchKeywords/findPersonalMatchData",{customerId:this.customerId})
.then(res=>{
// console.log(res)
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;
getListByType() {
this.$u.get("/matchKeywords/findPersonalMatchData", {
customerId: this.customerId
})
.then(res => {
// console.log(res)
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;
})
})
})
// console.log(res)
this.allList=res
// return
})
// console.log(res)
this.allList = res
// return
})
},
// 提交
submit(){
let param={}
let str=[]
if(this.form.name==''){
submit() {
let param = {}
let str = []
if (this.form.name == '') {
uni.showToast({
title:'请输入客户姓名',
icon:'none'
title: '请输入客户姓名',
icon: 'none'
})
return
}
if(this.form.phone==''){
if (this.form.phone == '') {
uni.showToast({
title:'请输入手机号',
icon:'none'
title: '请输入手机号',
icon: 'none'
})
return
}
@@ -271,45 +284,45 @@
// // this.form.phone=''
// return false;
// }
if (this.form.phone.length<5) {
if (this.form.phone.length < 5) {
uni.showToast({
icon: "none",
title: "手机号码不能小于5位"
})
return;
}
if (this.form.phone.length>11) {
if (this.form.phone.length > 11) {
uni.showToast({
icon: "none",
title: "手机号码不能大于11位"
})
return;
}
this.allList.map(item=>{
item.children.map(item1=>{
if(item1.selected==0){
this.allList.map(item => {
item.children.map(item1 => {
if (item1.selected == 0) {
str.push(item1.keywordsId)
}
})
})
str=str.join(',')
param=this.form
param.keywordIds=str
str = str.join(',')
param = this.form
param.keywordIds = str
console.log(param)
// return
this.$u.post("customer/update",param)
.then(res=>{
// console.log(res)
uni.showToast({
title:'操作成功',
icon:'none',
success: () => {
uni.navigateBack()
}
this.$u.post("customer/update", param)
.then(res => {
// console.log(res)
uni.showToast({
title: '操作成功',
icon: 'none',
success: () => {
uni.navigateBack()
}
})

})
})
},
}
}
@@ -318,14 +331,20 @@
<style lang="scss" scoped>
.box {
width: 100%;
height: 100%;
min-height: 100vh;
background: #F8F8F8;
overflow: hidden;
display: flex;
flex-direction: column;
}
.conmsg{

.conmsg {
flex-grow: 1;
flex-shrink: 0;
background: #FFFFFF;
margin-top: 20rpx;
.conmsg-title{

.conmsg-title {
height: 92rpx;
line-height: 92rpx;
font-weight: bold;
@@ -335,35 +354,49 @@
font-size: 32rpx;
border-bottom: 1px solid #E0E0E0;
}
.conmsg-msg{

.conmsg-msg {
padding: 0 30rpx;
.conmsg-msg-lab{

.conmsg-msg-lab {
width: 100%;
height: 102rpx;
display: flex;
font-size: 30rpx;
font-weight: 400;
color: #333333;
border-bottom: 1px solid #E0E0E0;
line-height: 102rpx;
.conmsg-msg-lab-1{
display: flex;
align-items: center;

.conmsg-msg-lab-1 {
flex-shrink: 0;
display: flex;
min-width: 136rpx;
.star{

.star {
color: #E7483C;
line-height: 108rpx;
}
}
.conmsg-msg-lab-inp{
margin-top: 30rpx;
.conmsg-msg-lab-inp {
margin-left: 44rpx;
flex-grow: 1;
display: flex;
input {
flex-grow: 1;
}

}
.conmsg-msg-lab-img{

.conmsg-msg-lab-img {
width: 14rpx;
height: 30rpx;
margin-top: 6rpx;
margin-left: auto;
image{

image {
width: 100%;
height: 100%;
}
@@ -371,14 +404,15 @@
}
}
}
.submit{
.submit {
position: fixed;
bottom: 20rpx;
left: 20rpx;
height: 120rpx;
background: #FFFFFF;
.btn{

.btn {
// margin: 60rpx auto;
text-align: center;
width: 690rpx;
@@ -391,13 +425,15 @@
line-height: 88rpx;
}
}
.con-msg-con{

.con-msg-con {
display: flex;
flex-wrap: wrap;
// justify-content: space-around;
border-bottom: 1px solid #E0E0E0;
padding-bottom: 16rpx;
.chebox{

.chebox {
// width: 20%;
height: 60rpx;
line-height: 60rpx;
@@ -409,15 +445,16 @@
padding: 0 10rpx;
}
}
.sexchose{
width: 120rpx;
height: 60rpx;
background: #FFFFFF;
border-radius: 4rpx;
border: 1px solid #E0E0E0;
text-align: center;
line-height: 60rpx;
margin-right: 20rpx;
}

.sexchose {
width: 120rpx;
height: 60rpx;
background: #FFFFFF;
border-radius: 4rpx;
border: 1px solid #E0E0E0;
text-align: center;
line-height: 60rpx;
margin-right: 20rpx;

}
</style>

+ 137
- 115
pages/center/consumer/newFollowup/newFollowup.vue View File

@@ -1,40 +1,44 @@
<template>
<view class="box">

<view class="screen">
<!-- 录音标示 -->
<view class="screen-record">
<view class="screen-record-text">
最新状态
</view>
<view class="screen-record-tab">
<view v-for="(item,index) in stateList" :key="index">
<view :class="[screen.state==index?'screen-record-chose':'screen-record-nochose']" @click="screen.state=index">
{{item.stageName}}
</view>
</view>
<view class="screen">
<!-- 录音标示 -->
<view class="screen-record">
<view class="screen-record-text">
最新状态
</view>
<view class="screen-record-tab">
<view v-for="(item,index) in stateList" :key="index">
<view :class="[screen.state==index?'screen-record-chose':'screen-record-nochose']"
@click="screen.state=index">
{{item.stageName}}
</view>
</view>
<!-- 录音标示 -->
<view class="screen-record">
<view class="screen-record-text">
意向级别
</view>
<view class="screen-record-tab">
<view :class="[screen.level==1?'screen-record-chose':'screen-record-nochose']" @click="screen.level=1">
A
</view>
<view :class="[screen.level==2?'screen-record-chose':'screen-record-nochose']" @click="screen.level=2">
B
</view>
<view :class="[screen.level==3?'screen-record-chose':'screen-record-nochose']" @click="screen.level=3">
C
</view>
<view :class="[screen.level==4?'screen-record-chose':'screen-record-nochose']" @click="screen.level=4">
D
</view>
</view>
</view>
</view>
<!-- 录音标示 -->
<view class="screen-record">
<view class="screen-record-text">
意向级别
</view>
<view class="screen-record-tab">
<view :class="[screen.level==1?'screen-record-chose':'screen-record-nochose']"
@click="screen.level=1">
A
</view>
<view :class="[screen.level==2?'screen-record-chose':'screen-record-nochose']"
@click="screen.level=2">
B
</view>
<view :class="[screen.level==3?'screen-record-chose':'screen-record-nochose']"
@click="screen.level=3">
C
</view>
<view :class="[screen.level==4?'screen-record-chose':'screen-record-nochose']"
@click="screen.level=4">
D
</view>
</view>
</view>
<!-- <view class="screen-record" style="height: auto;">
<view class="screen-record-text" style="margin-bottom: 20rpx;">
客户类型
@@ -51,104 +55,104 @@
</scroll-view>
</view> -->
<view class="screen-record">
<view class="screen-record-text">
跟进内容
</view>
<view class="screen-record-tab">
<input type="text" placeholder="请输入跟进内容" v-model="screen.con"/>
</view>
</view>
<view class="screen-foot">
<view class="screen-foot-sure" @click="screensure">
保存
</view>
</view>
<view class="screen-record">
<view class="screen-record-text">
跟进内容
</view>
<view class="screen-record-tab">
<input type="text" placeholder="请输入跟进内容" v-model="screen.con" />
</view>
</view>
<view class="screen-foot">
<view class="screen-foot-sure" @click="screensure">
保存
</view>
</view>
</view>


</view>
</template>

<script>
export default{
data(){
return{
value:'',
screenShow:false,
selectshow:false,
selectTipshow:false,
buildingID:'',
keyword:'',
screen:{
state:'0',
con:"",
level:'1'
export default {
data() {
return {
value: '',
screenShow: false,
selectshow: false,
selectTipshow: false,
buildingID: '',
keyword: '',
screen: {
state: '0',
con: "",
level: '1'
},
stateList:[],
recordList:[],
nextPage:1,
totalRecord:'',
freeList:[],
customerType:[],
customerId:''
stateList: [],
recordList: [],
nextPage: 1,
totalRecord: '',
freeList: [],
customerType: [],
customerId: ''
}
},
onShow() {

},
onLoad(e) {
this.customerId=e.id
this.customerId = e.id
this.buildingID = uni.getStorageSync('buildingID').id;
this.recordList=[]
this.recordList = []
// this.getMyCustom()
// this.getFreeList()
this.getNewStatus()
this.getCustomerType();
},
methods:{
methods: {
//选择顾问
actionSelectCallback(e){
this.screen.agentId=e[0].value;
this.screen.agentIdtext=e[0].label;
actionSelectCallback(e) {
this.screen.agentId = e[0].value;
this.screen.agentIdtext = e[0].label;
},
getCustomerType(){
getCustomerType() {
this.$u.get("/customer/queryKeyWords").then(res => {
res.map(item=>{
item.check=false
res.map(item => {
item.check = false
})
this.customerType = res;
})
},
getNewStatus() {
var that = this;
let premo={
houseId:uni.getStorageSync('buildingID').id
let premo = {
houseId: uni.getStorageSync('buildingID').id
}
this.$u.post('/customer/getStage',premo)
.then(res=>{
this.stateList=res
})
this.$u.post('/customer/getStage', premo)
.then(res => {
this.stateList = res
})
},
checkbox(idx){
console.log(idx)
this.customerType[idx].check=!this.customerType[idx].check
checkbox(idx) {
console.log(idx)
this.customerType[idx].check = !this.customerType[idx].check
},
search(e){
search(e) {
console.log(e)
},
//选择标签
selectCallback(e){
selectCallback(e) {
console.log(e[0].label)
},
//筛选确认
screensure(){
screensure() {
// 获取选择过的数据
// let type=[]
let words=[]
this.customerType.map(item=>{
if(item.check){
let words = []
this.customerType.map(item => {
if (item.check) {
// type.push(item.id)
words.push(item.keywords)
}
@@ -166,7 +170,7 @@
mask: true
})
// console.log(type)
let param={
let param = {
"stageCode": this.stateList[this.screen.state].stageCode,
"stageName": this.stateList[this.screen.state].stageName,
"remarks": this.screen.con,
@@ -178,12 +182,12 @@
"state": this.stateList[this.screen.state].id
}
}
this.$u.post('/customer/addZkDailyWorkRecord',param)
.then(res=>{
// util.showSuccess("提交成功");
uni.hideLoading();
uni.navigateBack();
})
this.$u.post('/customer/addZkDailyWorkRecord', param)
.then(res => {
// util.showSuccess("提交成功");
uni.hideLoading();
uni.navigateBack();
})
},
}
}
@@ -195,68 +199,84 @@
height: 100%;
background: #F8F8F8;
}
.screen{

.screen {
// box-sizing: border-box;
// padding: 0 30rpx;
background: #FFFFFF;
.screen-counselor{

.screen-counselor {
display: flex;
height: 106rpx;
// padding: 40rpx 30rpx 36rpx 30rpx;
padding: 0 30rpx;
box-sizing: border-box;
border-bottom: 1px solid #CCCCCC;
.screen-text{

.screen-text {
margin: 40rpx 0 36rpx 0;
font-size: 30rpx;
font-weight: 400;
color: #333333;
line-height: 30rpx;
}
.screen-sel{

.screen-sel {
display: flex;
justify-content: space-between;
width: 500rpx;
margin-left: 60rpx;
.screen-sel-img{

.screen-sel-img {
margin: 40rpx 0 36rpx 0;
width: 14rpx;
height: 30rpx;
}
.screen-inp{

.screen-inp {
margin-top: 20rpx;
}
}
}
.screen-record{

.screen-record {
height: 192rpx;
// width: 100%;
overflow: hidden;
padding: 0 30rpx;
box-sizing: border-box;
border-bottom: 1px solid #CCCCCC;
.screen-record-text{

.screen-record-text {
margin-top: 36rpx;
font-size: 30rpx;
font-weight: 400;
color: #333333;
line-height: 30rpx;
}
.screen-record-tab{

.screen-record-tab {
margin-top: 30rpx;
width: 100%;
display: flex;
// justify-content: space-around;
.screen-record-chose{
input {
flex-grow: 1;
}
.screen-record-chose {
width: 151rpx;
height: 60rpx;
background: #FFFFFF;
background: #2671E2;
border-radius: 4rpx;
color: #fff;
border: 1px solid #2671E2;
text-align: center;
line-height: 60rpx;
margin-right: 22rpx;
}
.screen-record-nochose{

.screen-record-nochose {
width: 151rpx;
height: 60rpx;
background: #FFFFFF;
@@ -266,16 +286,17 @@
line-height: 60rpx;
margin-right: 22rpx;
}
}
}
.screen-foot{

.screen-foot {
height: 88rpx;
display: flex;
width: 100%;
margin-top: 160rpx;
.screen-foot-reset{
.screen-foot-reset {
width: 80%;
text-align: center;
margin: 0 auto;
@@ -284,7 +305,8 @@
font-weight: 400;
color: #666666;
}
.screen-foot-sure{

.screen-foot-sure {
width: 80%;
margin: 0 auto;
text-align: center;


+ 30
- 8
pages/center/records/index.vue View File

@@ -1,7 +1,7 @@
<template>
<view class="box">
<!-- 搜索框点击跳转 -->
<view>
<!-- <view>
<view class="search-box">
<view class="search" @click="goSearch">
<view class="search-img">
@@ -11,7 +11,7 @@
</view>
</view>
</view>
-->
<!-- 选择器 -->
<view class="boxtittab">
<view class="tabbox" @click="taptimeisshow">
@@ -49,13 +49,13 @@

<view class="right" v-if="item.recording!=0">
<view style="margin-right: 6rpx;color: red;">{{item.receptionStatusName || ''}}</view>
<text style="margin-right: 6rpx;"> |</text>
<view v-if="methodsisshow==true">
<text style="margin-right: 6rpx;" v-if="item.receptionStatusName"> |</text>
<view v-if="methodsisshow">
<text style="margin-right: 6rpx;color: red;" v-if="item.taboo==1">违禁接待</text>
<text style="margin-right: 6rpx;" v-if="item.taboo==1"> |</text>
</view>
<view style="margin-right: 6rpx;">{{item.validInvalidName||''}}</view>
<text style="margin-right: 6rpx;"> |</text>
<text style="margin-right: 6rpx;" v-if="item.validInvalidName"> |</text>
<view v-if="item.markAdvisor==0" class="">未标记</view>
<view v-if="item.markAdvisor==1" class="">已标记</view>
</view>
@@ -514,7 +514,7 @@
visitRecord: null,
validInvalid: null
}
this.screenShow = false;
// this.screenShow = false;
this.nextPage = 1;
this.recordList = [];
this.getMyCustom();
@@ -581,6 +581,9 @@

//时间切换的样式
.boxtittab {
position: sticky;
top: var(--window-top);
z-index: 999;
width: 100;
height: 92rpx;
background: #FFFFFF;
@@ -663,8 +666,12 @@
justify-content: space-between;

.left {
flex-shrink: 0;
min-width: 50%;
display: flex;
align-items: center;
overflow: hidden;

.adviser {
margin-right: 10rpx;
@@ -685,8 +692,9 @@
}

.name {
font-weight: 600;
color: #333333;
font-size: 32rpx;
font-weight: bold;
}

.status {
@@ -702,10 +710,17 @@
}

.right {
max-width: 50%;
overflow-x: scroll;
display: flex;
font-size: 30rpx;

view,text {
flex-shrink: 0;
}
.point {
flex-shrink: 0;
width: 12rpx;
height: 12rpx;
background: #2B6EFF;
@@ -742,6 +757,13 @@
font-weight: 400;
color: #666666;
// line-height: 30rpx;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
line-height: 23px;
max-height: 46px;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}

.arriveNum {


+ 92
- 15
pages/index/consumer/index.vue View File

@@ -1,6 +1,5 @@
<template>
<view class="box">
<!-- -->
<view style="flex-shrink: 0;">
<view class="search-box">
<view class="search" @click="goSearch">
@@ -43,9 +42,10 @@
<view class="content-first">
<view class="left">
<template v-if="item.level > 0">
<view class="img">{{ item.level | levelText }}</view>
<view class="img" :class="colorName[item.level]">{{ item.level | levelText }}</view>
</template>
<view class="test">{{item.name}}</view>
<view v-if="item.clientStageName" class="clientStageName">{{ item.clientStageName }}</view>
</view>
<view class="right">
{{item.fraction || '0'}}%
@@ -222,7 +222,17 @@
<view class="timeview" :style="{ color: activeTotal2 == 5 ? '#2B6EFF' : '#333333' }" @click="timetap(5)">
90min以上</view>
</u-popup>
<u-select v-model="soltishow" :list="orderBylist" @confirm="selectCallback2"></u-select>
<u-popup v-model="soltishow" mode="bottom">
<view class="soltishow">
<block v-for="(item, index) in orderBylist" :key="index">
<view class="soltishow-item" @click="selectCallback2(item)">
{{ item.label }}
</view>
</block>
</view>
</u-popup>
<!-- <u-select v-model="soltishow" :list="orderBylist" @confirm="selectCallback2"></u-select> -->

<!-- 底部导航栏 -->
<u-tabbar :mid-button="true" activeColor="#1296db" inactiveColor="#999999" v-model="current" :list="tabbarList">
@@ -240,10 +250,6 @@
tabbarList: tabbarList,
//--- end --- tabbar配置项
orderBylist: [
/*{
label: '全部',
value: '0'
},*/
{
label: '创建时间倒序',
value: '1'
@@ -314,11 +320,32 @@
list: [], // 客户来源列表
sourceId: '', // 选中的客户来源id
sourceIndex: -1, // 选中项的下标
// 不同等级之间的颜色
colorName: [
'', "A", "B", "C", "D"
],
}
},
onLoad(options) {
this.isnorefresh = 'refresh';
},
onPullDownRefresh() {
this.nextPage = 1;
this.recordList = []
this.reset()
this.getFreeList()
this.getfindKeywordsList()
this.getFromSource();
this.getMyCustom();
setTimeout(() => {
uni.stopPullDownRefresh()
}, 3000)
},
onShow() {
let newmenulist = uni.getStorageSync('weapp_session_Menu_data');
this.permissions.commonly1 = newmenulist.khgl_ck;
@@ -371,9 +398,10 @@
},
//选择标签
selectCallback2(e) {
this.orderBy = e[0].value;
this.orderBy = e.value;
this.nextPage = 1;
this.recordList = [];
this.soltishow = false
this.getMyCustom();
},
//选择录音时长
@@ -552,7 +580,7 @@
}
this.nextPage = 1;
this.recordList = [];
this.screenShow = false;
// this.screenShow = false;
this.sourceId = '';
this.sourceIndex = -1;
this.getMyCustom();
@@ -585,13 +613,13 @@
str = "A"
break;
case 2:
str = "A"
str = "B"
break;
case 3:
str = "A"
str = "C"
break;
case 4:
str = "A"
str = "D"
break;
default:
str = ''
@@ -638,6 +666,9 @@

//时间切换的样式
.boxtittab {
position: sticky;
top: var(--window-top);
z-index: 999;
width: 100;
height: 92rpx;
background: #FFFFFF;
@@ -655,7 +686,21 @@
font-size: 28rpx;
}
}

.soltishow {
width: 100%;
height: 40vh;
overflow-y: scroll;
.soltishow-item {
width: 100%;
height: 80rpx;
display: flex;
align-items: center;
justify-content: center;
}
}
.search-box {
width: 100%;
height: 102rpx;
@@ -728,10 +773,42 @@
height: 52rpx;
border: 1px solid #E0E0E0;
border-radius: 50%;
text-align: center;
line-height: 50rpx;
margin-right: 20rpx;
display: flex;
align-items: center;
justify-content: center;
}
.clientStageName {
margin-left: 20rpx;
padding: 5rpx 20rpx;
border: 1px solid #F29819;
border-radius: 32rpx 32rpx 32rpx 0;
color: #F29819;
font-size: 20rpx;
}
// '#19AC09', '#F29819', '#F2D01A', '#1396F6',
.A {
color: #FFF;
background: #19AC09;
border: 1px solid #19AC09;
}
.B {
color: #FFF;
background: #F29819;
border: 1px solid #F29819;
}
.C {
color: #FFF;
background: #F2D01A;
border: 1px solid #F2D01A;
}
.D {
color: #FFF;
background: #1396F6;
border: 1px solid #1396F6;
}

.test {
font-weight: 500;


+ 90
- 78
pages/index/customer.vue View File

@@ -1,7 +1,8 @@
<template>
<view class="cented-box">
<view v-if="waitCustomList.length==0" style="width: 100%;height: 100%;display: flex;align-items: center;">
<view style="width: 100%;padding-top: 200rpx;">
<view v-if="waitCustomList.length==0" class="empty">
<view style="width: 100%;display: flex;
flex-direction: column;justify-content: center;align-items: center;">
<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>
@@ -9,7 +10,7 @@
<view style="text-align: center;width: 100%;margin-top: 20rpx;color: #999999;">暂无数据</view>
</view>
</view>
<!-- <view class="customer" v-if="waitCustomList.length!=0" v-for="(item,index) in waitCustomList" :key='index'
<!-- <view class="customer" v-if="waitCustomList.length!=0" v-for="(item,index) in waitCustomList" :key='index'
@click="tapThevisiting(item)">
<view class="title">
<view class="zuo">
@@ -57,7 +58,7 @@
</view>

</view> -->
<view class="customer" v-if="waitCustomList.length!=0" v-for="(item,index) in waitCustomList" :key='index'
@click="tapThevisiting(item)">
<view class="title">
@@ -65,9 +66,9 @@
<view class="zuoimg">顾</view>
<view class="zuoname">{{item.agentName || '--'}}</view>
</view>
<view class="cen" v-if="timestamp(item.createTime) < 60*30">
<view class="cen" v-if="timestamp(item.assignedTime) < 60*30">
<view v-if="item.status!=0">
自动结束 <u-count-down :timestamp="timestamp(item.createTime)" color="#E7483C"></u-count-down>
自动结束 <u-count-down :timestamp="timestamp(item.assignedTime)" color="#E7483C"></u-count-down>
</view>
</view>
<view class="you">
@@ -76,37 +77,33 @@
<view class="youtext">{{item.status==0?"排队中":item.status==1?"接待中":"已完成"}}</view> -->
<view class="" v-if="item.status!=0" style="display: flex;">
<block v-if="item.imei!=null">
<!-- 接待中 -->
<view class="">
<!-- 工牌标示 -->
<image class="you-img"
src="../../static/images/cus1.png" mode=""></image>
</view>
<!-- 未离线 -->
<view class="" v-if="item.zkEquipmentState.onLine!=0" style="display: flex;">
<!-- 接待中 -->
<view class="">
<!-- 电量 -->
<image v-if="item.zkEquipmentState.electricity>=80" class="you-img"
src="../../static/images/cus2.png" mode=""></image>
<image v-else class="you-img"
src="../../static/images/cus5.png" mode=""></image>
<!-- 工牌标示 -->
<image class="you-img" src="../../static/images/cus1.png" mode=""></image>
</view>
<view class="">
<!-- 录音 -->
<image v-if="item.zkEquipmentState.simAudioStatus=='true'" class="you-img"
src="../../static/images/cus3.png" mode=""></image>
<image v-else class="you-img"
src="../../static/images/cus6.png" mode=""></image>
<!-- 未离线 -->
<view class="" v-if="item.zkEquipmentState.onLine!=0" style="display: flex;">
<view class="">
<!-- 电量 -->
<image v-if="item.zkEquipmentState.electricity>=80" class="you-img"
src="../../static/images/cus2.png" mode=""></image>
<image v-else class="you-img" src="../../static/images/cus5.png" mode=""></image>
</view>
<view class="">
<!-- 录音 -->
<image v-if="item.zkEquipmentState.simAudioStatus=='true'" class="you-img"
src="../../static/images/cus3.png" mode=""></image>
<image v-else class="you-img" src="../../static/images/cus6.png" mode=""></image>
</view>
</view>
</view>
<!-- 离线 -->
<view class="" v-else>
<view class="">
<!-- 录音 -->
<image class="you-img"
src="../../static/images/cus4.png" mode=""></image>
<!-- 离线 -->
<view class="" v-else>
<view class="">
<!-- 录音 -->
<image class="you-img" src="../../static/images/cus4.png" mode=""></image>
</view>
</view>
</view>
</block>
</view>
<view class="youtext" v-else>
@@ -116,28 +113,28 @@
</view>
</view>
<view class="centerbox">
<view class="content-sec">
<view class="left">
<view class="adviser">客</view>
<view class="cus">{{item.name || '--'}}</view>
<!-- <view class="arriveNum">第{{item.visitRecord || "--"}}次接待</view> -->
<view class="arriveNum">{{ item.phone ||'--' }}</view>
</view>
</view>
<view class="content-last">
<view class="c-items">
<image src="../../static/images/people.png" class="c-items-img" mode=""></image>
{{ item.visitRecord || "--" }}次到访
</view>
<view class="c-items">
<image src="../../static/images/time.png" class="c-items-img" mode=""></image>
{{ item.createTime }}
<view class="content-sec">
<view class="left">
<view class="adviser">客</view>
<view class="cus">{{item.name || '--'}}</view>
<!-- <view class="arriveNum">第{{item.visitRecord || "--"}}次接待</view> -->
<view class="arriveNum">{{ item.phone ||'--' }}</view>
</view>
</view>
<!-- <view class="c-items">
<view class="content-last">
<view class="c-items">
<image src="../../static/images/people.png" class="c-items-img" mode=""></image>
{{ item.visitRecord || "--" }}次到访
</view>
<view class="c-items">
<image src="../../static/images/time.png" class="c-items-img" mode=""></image>
{{ item.createTime }}
</view>
<!-- <view class="c-items">
<image src="../../static/images/voice.png" class="c-items-img" mode=""></image>
{{ item.mm || '0' }}min
</view> -->
</view>
</view>
</view>
<view class="footer-button" v-if="item.status!=0">
<view v-if="permissions.commonly3" class="footer1" @click.stop="addTime(item)">接待延时</view>
@@ -147,16 +144,17 @@
<view class="footer-button" v-if="item.status==0">
<view class="footer3" @click.stop="assign(item)">指派顾问</view>
</view>
</view>
<image v-if="permissions.commonly2" @click="addreception()" class="add" src="/static/images/add.png" mode="">
</image>
<image class="add2" @click="reshCustom()" src="https://static.quhouse.com/zhikong_xcx_img/refresh.png" mode="">
</image>
<!-- 底部导航栏 -->
<u-tabbar :mid-button="true" activeColor="#1296db" inactiveColor="#999999" v-model="current" :list="tabbarList"></u-tabbar>
<u-tabbar :mid-button="true" activeColor="#1296db" inactiveColor="#999999" v-model="current" :list="tabbarList">
</u-tabbar>
</view>
</template>

@@ -186,17 +184,18 @@
onLoad() {
uni.hideTabBar();
},
computed:{
timestamp(){
return (e)=>{
let totalTime = new Date(e).getTime()/1000 + 60*60*2
let nowTime = new Date().getTime()/1000
computed: {
timestamp() {
return (e) => {
if (!e) return
let totalTime = new Date(e).getTime() / 1000 + 60 * 60 * 2
let nowTime = new Date().getTime() / 1000
return totalTime - nowTime
}
}
// judgeHalfAnHour(){
// return (e)=>{
// }
// }
},
@@ -220,7 +219,7 @@
methods: {
reshCustom() {
this.init()
},
},
tapThevisiting(item) {
if (this.permissions.commonly1 != true) {
return
@@ -392,8 +391,16 @@
.cented-box {
background: #F8F8F8;
width: 100%;
height: 100vh;
min-height: calc(100vh - var(--window-bottom) - var(--window-top));
padding-bottom: 30rpx;
display: flex;
flex-direction: column;

.empty {
flex-grow: 1;
display: flex;
align-items: center;
}
}

.customer {
@@ -437,12 +444,14 @@
margin-left: 20rpx;
}
}
.cen{

.cen {
// width:50%;
color: #E7483C;
text-align: center;
}

.you {
// width: 25%;
height: 100%;
@@ -456,11 +465,13 @@
border-radius: 50%;
background: #2B6EFF;
}
.you-img{

.you-img {
width: 24rpx;
height: 32rpx;
margin-left: 24rpx;
}

.youimg1-1 {
width: 12rpx;
height: 12rpx;
@@ -520,8 +531,9 @@
font-weight: 400;
color: #333333;
border-top: 1rpx solid #E0E0E0;
justify-content:flex-end;
justify-content: flex-end;
line-height: 58rpx;

.footer1 {
// flex: 1;
text-align: center;
@@ -534,7 +546,7 @@
border-radius: 30rpx;
border: 1px solid #999999;
margin-left: 30rpx;
}

.footer3 {
@@ -568,16 +580,16 @@
bottom: 100upx;
right: 44upx;
}
.content-sec {
padding: 28rpx 30rpx 32rpx;
display: flex;
justify-content: space-between;
.left {
display: flex;
align-items: center;
.adviser {
margin-right: 10rpx;
padding: 5rpx 11rpx;
@@ -587,28 +599,28 @@
font-size: 30rpx;
color: #fff;
}
.cus {
font-size: 30rpx;
font-weight: 400;
color: #666666;
// line-height: 30rpx;
}
.arriveNum {
font-size: 30rpx;
font-weight: 400;
margin-left: 10rpx;
}
}
.right {
font-size: 28rpx;
font-weight: 400;
color: #2671E2;
display: flex;
align-items: center;
.img {
margin-right: 10rpx;
width: 32rpx;
@@ -616,7 +628,7 @@
}
}
}
.content-last {
padding: 0 30rpx 34rpx;
font-size: 30rpx;
@@ -625,13 +637,13 @@
display: flex;
align-items: center;
justify-content: space-between;
.c-items {
flex-shrink: 0;
display: flex;
align-items: center;
font-size: 28rpx;
.c-items-img {
margin-right: 10rpx;
width: 32rpx;


+ 54
- 9
pages/index/index.vue View File

@@ -67,7 +67,7 @@
</view>
</view>

<!--
<view class="title" v-if="permissions.shebeinum">待处理</view>
<view class="shebenbox" v-if="permissions.shebeinum" >
<view class="shebenche" @click="indexStatus(0)">
@@ -82,11 +82,7 @@
<view class="shebenchenum">{{operation.forbiddenCount || 0}}</view>
<view class="shebenchetext">违禁提醒</view>
</view>
<view class="shebenche" @click="tapjumpequipment(2)">
<view class="shebenchenum" style="color: red;">{{operation.lowPowerNum || 0}}</view>
<view class="shebenchetext">低电工牌</view>
</view>
</view>
</view> -->

<view class="title" v-if="permissions.shebeinum">设备总览</view>
<view class="shebenbox" v-if="permissions.shebeinum" >
@@ -103,6 +99,12 @@
<view class="shebenchenum">{{equipmentobj.activeNum || 0}}</view>
<view class="shebenchetext">活跃</view>
</view>
<view class="shebenche" @click="tapjumpequipment(2)">
<view class="shebenchenum" style="color: red;">{{operation.lowPowerNum || 0}}</view>
<view class="shebenchetext">低电工牌</view>
</view>
<!-- <view class="shebenche" @click="tapjumpequipment(2)">
<view class="shebenchenum" style="color: red;">{{equipmentobj.lowPowerNum || 0}}</view>
<view class="shebenchetext">急需充电</view>
@@ -248,12 +250,13 @@
</view>
<view class="commonly-text">值班顾问</view>
</view>
<view class="commonly" @click="Piabodata('日报')" v-if="permissions.commonly6">
<!-- <view class="commonly" @click="Piabodata('日报')" v-if="permissions.commonly6">
<view class="commonly-img">
<image class="commonly-img1" src="../../static/images/function6.png" mode=""></image>
</view>
<view class="commonly-text">日报</view>
</view>
</view> -->

<view class="commonly" @click="Piabodata('顾问排名')" v-if="permissions.commonly7">
<view class="commonly-img">
@@ -410,6 +413,47 @@
onLoad() {
this.sendLog()
},
onPullDownRefresh() {
this.getMenu()

this.userInfo = uni.getStorageSync('weapp_session_userInfo_data');
if (this.userInfo.dataCode == 6 || this.userInfo.dataCode == 3) {
this.methodsisshow = false;
} else {
this.methodsisshow = true;
}
if (this.userInfo.zkProperties.length == 1) {
this.buildingID = uni.getStorageSync('buildingID').id;
this.buildingname = uni.getStorageSync('buildingID').name;
this.buildingishow = false;
} else {
this.buildingishow = true;
this.buildingname = uni.getStorageSync('buildingID').name;
this.buildingID = uni.getStorageSync('buildingID').id;
this.userInfo.zkProperties.forEach(item => {
item.label = item.propertyName;
item.value = item.id
})
this.lpanlist = this.userInfo.zkProperties
}
if (this.userInfo.dataCode == 6) {
// this.Myworkcard = true;
this.equipmentisshow = false;
this.iniodianloang()
} else {
this.equipmentisshow = true;
// this.Myworkcard = false;
this.initequipment()
this.waitForOperation()
}
this.initworkThisWeek()
this.initrealTimeStatistics()
setTimeout(() => {
uni.stopPullDownRefresh()
}, 3000)
},
onShow() {
this.getMenu()

@@ -488,6 +532,7 @@
if (index == 7) {
this.totalTimeShow = true;
} else {
console.log(str)
this.choiceIndex=str
this.zhixingcenterindex = index;
this.initworkThisWeek()
@@ -536,7 +581,7 @@
totalTimeChange(e) {
this.statDateStart = e.startDate;
this.statDateEnd = e.endDate;
this.choiceIndex=e.startDate+'-'+e.endDate
this.choiceIndex= `${e.startDate.replace(/\-/g, '.')}-${e.endDate.replace(/\-/g, '.')}`
this.zhixingcenterindex = 7;
this.initworkThisWeek()
},


+ 35
- 4
pages/index/learning.vue View File

@@ -27,7 +27,7 @@
</view>
<view class="footerinfozuo">
<image src="../../static/images/img/voice.png" mode=""></image>
{{ item.recordDuration || 0 }}min
{{ item.duration | formatTime }}min
</view>
<view class="footerinfozuo" style="color: #2671E2;">
<image src="../../static/images/img/percent.png" mode=""></image>
@@ -151,12 +151,24 @@
alllists: [], // 二级分类菜单
};
},

onPullDownRefresh() {
var i = uni.getStorageSync('fendianindex')
this.buildingID = uni.getStorageSync('buildingID').id;
this.clocktab(i)
this.leftIndex = 0
this.infoinit()
setTimeout(() => {
uni.stopPullDownRefresh()
}, 3000)
},
onShow() {
var i = uni.getStorageSync('fendianindex')
this.buildingID = uni.getStorageSync('buildingID').id;
this.clocktab(i)
this.leftIndex =0
this.leftIndex = 0
this.infoinit()
},

@@ -335,7 +347,7 @@
success: (data) => {
if (data.data.code == 10000) {
this.equinoctial = data.data.data
this.getSecond(data.data.data[0].marketingId)
this.getSecond(data.data.data[0].marketingId)
} else {
uni.showToast({
title: data.data.message,
@@ -346,6 +358,21 @@
})
}
},

filters: {
//格式化时间
formatTime(num) {
if (!num) return 0
num = parseInt(num);
//格式化时间格式
num = num.toFixed(0);
let second = num % 60;
if (second < 10) second = "0" + second;
let min = Math.floor(num / 60);
if (min < 10) min = "0" + min;
return min + ":" + second;
},
}
}
</script>

@@ -357,6 +384,10 @@
}

.tab-box {
position: sticky;
top: var(--window-top);
z-index: 999;
background: #fff;
width: 100%;
height: 80rpx;
}


+ 1
- 1
pages/index/personal.vue View File

@@ -124,7 +124,7 @@
},
method: "DELETE",
success: function(result) {
var data = result.data; //console.log("登信息", data);
var data = result.data; //console.log("登信息", data);
if (data.data == true) {
// app.Closewebsocke()
uni.clearStorageSync(); //清除缓存


+ 66
- 55
pages/learning/Keywordsearch.vue View File

@@ -1,26 +1,35 @@
<template>
<view class="translation">
<view style="width: 690rpx;height: 64rpx;margin: 0 auto;margin-top: 30rpx;background: #F2F2F2;border-radius: 32rpx;
display: flex;align-items: center;">
<view style="width: 10%;height: 64rpx;display: flex;align-items: center;">
<image style="width: 28rpx;height: 28rpx;margin-left: 30rpx;" src="/static/images/search.png" mode=""></image>
</view>
<view style="width: 90%;height: 64rpx;display: flex;align-items: center;">
<input type="text" @input="searchinfo" :disabled="disabled" v-model="keyword" placeholder="请输入关键字"
style="width: 100%;color: #999999;font-size: 24rpx;"/>
<view style="display: flex;align-items: center;width: 100%;padding: 0 30rpx;">
<!-- <view class="search-input">
<view style="flex-shrink: 0;width: 10%;height: 64rpx;display: flex;align-items: center;">
<image style="width: 28rpx;height: 28rpx;margin-left: 30rpx;" src="/static/images/search.png"
mode=""></image>
</view>
<view style="flex-grow: 1;height: 64rpx;display: flex;align-items: center;">
<input type="text" @input="searchinfo" v-model="keyword" placeholder="请输入关键字"
style="flex-grow: 1;color: #999999;font-size: 24rpx;" />
</view>
</view>
<view class="searchbtn" @click="searchinfo">搜索</view> -->
<u-search class="search-boxs" :disabled="disabled" placeholder="请输入" v-model="keyword" action-text="搜索" :show-action="true"
@search="searchinfo" @custom="searchinfo"></u-search>
</view>
<view style="width: 690rpx;margin: 0 auto;margin-top: 10rpx;">
<view style="width: 100%;border-bottom: 1px solid #E0E0E0;display: flex;padding-bottom: 10rpx;margin-top: 40rpx;"
v-for="(item,index) in listarr" :key='index' @click="toaidoinfo(item.Content,item.corpusId,item.index)">

<view
style="width: 100%;border-bottom: 1px solid #E0E0E0;display: flex;padding-bottom: 10rpx;margin-top: 40rpx;"
v-for="(item,index) in listarr" :key='index' @click="toaidoinfo(item.Content,item.corpusId,item.index)">
<view style="width: 26rpx;height: 36rpx;margin-top: 4rpx;">
<image style="width: 26rpx;height: 28rpx;" src="../../static/images/testimg.png" mode=""></image>
</view>
<view v-html="item.Content.text" style="color: #666666;font-size: 28rpx;line-height: 36rpx;margin-left: 10rpx;width: 80%;"></view>
<view v-html="item.Content.text"
style="color: #666666;font-size: 28rpx;line-height: 36rpx;margin-left: 10rpx;width: 80%;"></view>
<view style="font-size: 28rpx;width: 10%;width: 14%;text-align: right;">{{item.Content.time}}</view>
</view>
</view>
</view>
</template>
@@ -31,22 +40,22 @@
export default {
data() {
return {
customerId:'',
listarr:[],
keyword:'',
skpl:'',
disabled:false
customerId: '',
listarr: [],
keyword: '',
skpl: '',
disabled: false
};
},
onLoad: function(options) {
this.customerId = options.customerId;
this.keyword=options.keyword;
this.skpl=options.skpl;
if(this.skpl==2){
this.keyword = options.keyword;
this.skpl = options.skpl;
if (this.skpl == 2) {
this.searchinfo()
this.disabled=true;
}else{
this.disabled=false;
this.disabled = true;
} else {
this.disabled = false;
}
},
methods: {
@@ -59,23 +68,23 @@
if (min < 10) min = '0' + min;
return min + ":" + second;
},
searchinfo(){
if(this.keyword.length==0){
searchinfo() {
if (this.keyword.length == 0) {
return
}else{
let parames={
keyword:this.keyword,
customerId:this.customerId
}
this.$u.post("/corpus/keyWordsMatching", parames).then(res => {
res.forEach(item=>{
item.Content=JSON.parse(item.transferContent)
})
res.forEach(cet=>{
cet.Content.time=this.formatTime(cet.Content.bg/1000)
cet.Content.text=this.brightKeyword(cet.Content.onebest)
} else {
let parames = {
keyword: this.keyword,
customerId: this.customerId
}
this.$u.post("/corpus/keyWordsMatching", parames).then(res => {
res.forEach(item => {
item.Content = JSON.parse(item.transferContent)
})
this.listarr=res;
res.forEach(cet => {
cet.Content.time = this.formatTime(cet.Content.bg / 1000)
cet.Content.text = this.brightKeyword(cet.Content.onebest)
})
this.listarr = res;
})
}
},
@@ -88,26 +97,26 @@
}
},
//跳转
toaidoinfo(item,id,index){
toaidoinfo(item, id, index) {
uni.setStorageSync("entrance", 2); //写入缓存
item.customerId=this.customerId;
item.id=id;
item.index=index;
if(this.skpl==2){
item.customerId = this.customerId;
item.id = id;
item.index = index;
if (this.skpl == 2) {
this.infostust(item)
}else{
let pages = getCurrentPages() //获取当前页面栈的信息
let prevPage = pages[pages.length - 2] //获取上一个页面
prevPage.setData({ //把需要回传的值保存到上一个页面
info: item
} else {
let pages = getCurrentPages() //获取当前页面栈的信息
let prevPage = pages[pages.length - 2] //获取上一个页面
prevPage.setData({ //把需要回传的值保存到上一个页面
info: item
});
wx.navigateBack({ //然后返回上一个页面
delta: 1
wx.navigateBack({ //然后返回上一个页面
delta: 1
})
}
},
//只有一条的时候
infostust(item){
infostust(item) {
uni.setStorageSync("searchobj", item); //写入缓存
const parames = {
pageNum: 1,
@@ -117,12 +126,12 @@
}
}
this.$u.post("/corpus/findByPage", parames).then(res => {
if(res[0].merge==0){
if (res[0].merge == 0) {
let newobj = res[0];
uni.navigateTo({
url: `/pages/mine/details2?customerId=${newobj.customerId}&status=${newobj.status}&stateisshow=${'2'}`
})
}else{
} else {
let newobj = res[0];
uni.navigateTo({
url: `/pages/mine/details?customerId=${newobj.customerId}&status=${newobj.status}&stateisshow=${'2'}`
@@ -134,5 +143,7 @@
}
</script>
<style lang="scss" scoped>

.search-boxs {
width: 100%;
}
</style>

+ 365
- 269
pages/learning/Thefulltext/index2.vue
File diff suppressed because it is too large
View File


+ 1
- 1
pages/login/Verification.vue View File

@@ -93,7 +93,7 @@
grant_type: 'mobile'
},
success: (result) => {
var data = result.data; //console.log("登信息", data);
var data = result.data; //console.log("登信息", data);
if (data) {
var res = data;
if (res.code != 1) {


+ 1
- 1
pages/login/index.vue View File

@@ -127,7 +127,7 @@
grant_type: 'password'
},
success: function(result) {
var data = result.data; //console.log("登信息", data);
var data = result.data; //console.log("登信息", data);
if (data) {
var res = data;
console.log(res.code)


+ 1
- 1
pages/login/yinzhongmalogin.vue View File

@@ -125,7 +125,7 @@
grant_type:'mobile'
},
success: (result) => {
var data = result.data; //console.log("登信息", data);
var data = result.data; //console.log("登信息", data);
if (data) {
var res = data;
if (res.code!=1) {


+ 1
- 1
pages/mine/calibration.vue View File

@@ -13,7 +13,7 @@
<view class="con-msg-con"
:style="{borderBottom:index==allList.length-1?'none':'1px solid #E0E0E0'}">
<view v-for='(item1,i) in item.children' :key='i' @click="Edittag(item,item1,index,i)"
:style="{border:item1.selected==0?'1px solid #0A6EE9':'1px solid #E0E0E0'}"
:style="{border:item1.selected==0?'1px solid #0A6EE9;background: #0A6EE9;color: #fff;':'1px solid #E0E0E0'}"
class="chebox">
{{item1.label}}
</view>


+ 84
- 66
pages/mine/consultanonduty/index.vue View File

@@ -1,65 +1,64 @@
<template>
<view class="box">
<!-- 顾问选择 -->
<view class="nextcon">
下一位接待顾问:{{agentList[0].name||'没有下一位了'}}
</view>
<view class="tab">
<!-- <view class="tabbox">
<view :class="{ activecllasscet: activeTotal == 0 }" @click="tabtimetap(0)">全部</view>
</view> -->
<view class="tabbox">
<view :class="{ activecllasscet: activeTotal == 1 }" @click="tabtimetap(1)">排队顾问</view>
<view class="header">
<view class="nextcon">
下一位接待顾问:{{agentList[0].name||'没有下一位了'}}
</view>
<view class="tabbox">
<view :class="{ activecllasscet: activeTotal == 2 }" @click="tabtimetap(2)">暂停顾问</view>
<view class="tab">
<view class="tabbox">
<view :class="{ activecllasscet: activeTotal == 1 }" @click="tabtimetap(1)">排队顾问</view>
</view>
<view class="tabbox">
<view :class="{ activecllasscet: activeTotal == 2 }" @click="tabtimetap(2)">暂停顾问</view>
</view>
</view>
</view>
<view class="content">
<view v-if="activeAgentList.length>0">
<view v-for="(item,index) in activeAgentList" :key="index">
<view class="content-tips">
<view class="top">
<view class="tit">
<view class="img">
{{item.name.slice(0,1)}}
</view>
<view class="test">
{{item.name}}
</view>
<view v-if="activeAgentList.length>0">
<view v-for="(item,index) in activeAgentList" :key="index">
<view class="content-tips">
<view class="top">
<view class="tit">
<view class="img">
{{item.name.slice(0,1)}}
</view>
<view class="test">
{{item.name}}
</view>
<!-- <view class="state">
</view>
<!-- <view class="state">
<view class="point" v-if="activeTotal==1"></view>
{{activeTotal==1?'接待中':'空闲'}}
</view> -->
</view>
<view class="reception">
<view class="" style="line-height: 50rpx;">
今日接待:<test class="num">{{item.receiveNum||0}}</test>
</view>
<view class="reception">
<view class="" style="line-height: 50rpx;">
今日接待:<test class="num">{{item.receiveNum||0}}</test>
</view>
<view class="btn" @click="changeAgentStatus(item.agentId)">
{{activeTotal==1?'暂停':'恢复'}}
</view>
<view class="btn" @click="changeAgentStatus(item.agentId)">
{{activeTotal==1?'暂停':'恢复'}}
</view>
</view>
</view>
</view>
<view class="nolist" v-else>
暂无数据
</view>
</view>
<view class="nolist" v-else>
暂无数据
</view>
</view>
</view>
</template>

<script>
export default {
data(){
return{
value:"",
data() {
return {
value: "",
activeTotal: 1,
agentList:[],
pausedAgentList:[],
houseId:''
agentList: [],
pausedAgentList: [],
houseId: ''
}
},
onLoad() {
@@ -72,22 +71,22 @@
return this.activeTotal == 1 ? this.agentList : this.pausedAgentList
},
},
methods:{
tabtimetap(idx){
methods: {
tabtimetap(idx) {
// console.log(idx)
this.activeTotal=idx
this.activeTotal = idx
},
changeAgentListShow() {
this.$u.get("/zkAgentPool/nextFreeAgent?itemId="+this.houseId).then(res => {
this.agentList = res;
})
this.$u.get("/zkAgentPool/nextFreeAgent?itemId=" + this.houseId).then(res => {
this.agentList = res;
})
},
// 获取暂停的经纪人列表
changePausedAgentListShow() {
this.$u.get("/zkAgentPool/stopAgentList?itemId="+this.houseId).then(res => {
this.pausedAgentList = res;
})
this.$u.get("/zkAgentPool/stopAgentList?itemId=" + this.houseId).then(res => {
this.pausedAgentList = res;
})
},
changeAgentStatus(id) {
let content = "";
@@ -121,19 +120,27 @@
</script>

<style lang="scss" scoped>
.box{
.box {
background: #F8F8F8;
width: 100%;
height: 100vh;
min-height: 100vh;
font-size: 30rpx;
font-weight: 400;
.header {
position: sticky;
top: var(--window-top);
z-index: 999;
}

// line-height: 30px;
.tab{
.tab {
height: 88rpx;
border-bottom: 1px solid #E0E0E0;
background: #FFFFFF;
display: flex;
align-items: center;

.tabbox {
flex: 1;
height: 100%;
@@ -143,7 +150,7 @@
font-size: 28rpx;
display: flex;
justify-content: center;
.activecllasscet {
border-bottom: 2px solid #2671E2;
color: #2671E2;
@@ -151,27 +158,32 @@
}
}
}
.nextcon{

.nextcon {
height: 78rpx;
background: #F4F8FD;
color: #2671E2;
text-align: center;
line-height: 78rpx;
}
.content-tips{

.content-tips {
background: #fff;
padding: 0 30rpx;
height: 168rpx;
margin-bottom: 20rpx;
overflow: hidden;
.top{

.top {
margin-top: 19rpx;
display: flex;
justify-content: space-between;
.tit{

.tit {
height: 52rpx;
display: flex;
.img{

.img {
width: 52rpx;
height: 52rpx;
border-radius: 50%;
@@ -181,26 +193,30 @@
border: 1px solid #C9C9C9;
margin-right: 20rpx;
}
.test{

.test {
font-weight: 600;
color: #333333;
margin-top: 6rpx;
}
}
.state{

.state {
display: flex;
.point{

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

.reception {
display: flex;
font-weight: 400;
width: 100%;
@@ -208,7 +224,8 @@
justify-content: space-between;
color: #666666;
line-height: 30rpx;
.btn{

.btn {
width: 100rpx;
height: 48rpx;
background: #FFFFFF;
@@ -220,10 +237,11 @@
font-size: 28rpx;
}
}
}
}
.nolist{

.nolist {
text-align: center;
height: 300rpx;
color: #CCCCCC;


+ 0
- 12
pages/mine/details.vue View File

@@ -559,9 +559,6 @@ onPlay(){
return
}else {
this.num=this.num+1;
uni.showLoading({
title: '加载中'
});
setTimeout(function() {
uni.hideLoading();
}, 2000);
@@ -616,9 +613,6 @@ onPlay(){
return
}else {
this.Bnum=this.Bnum-1;
uni.showLoading({
title: '加载中'
});
setTimeout(function() {
uni.hideLoading();
}, 2000);
@@ -931,9 +925,6 @@ onPlay(){
// 获取评分
getRatelist() {
if (this.ratelist.length == 0) {
uni.showLoading({
title: '加载中'
});
this.$u.get("/customer/findzkMByCusId", {
cusId: this.customerId
}).then(res => {
@@ -989,9 +980,6 @@ onPlay(){
// 获取转义后的对话结果
getCorpusAnalysis(info) {
this.dialogList = [];
uni.showLoading({
title: '加载中'
});
uni.request({
url: config.service.getCorpusAnalysis + '?corpusId=' + this.luyinList[this.csdFileindex].id+"&customerId="+this.customerId, //仅为示例,并非真实接口地址。
method: "GET",


+ 68
- 44
pages/mine/details2.vue View File

@@ -1,5 +1,5 @@
<template>
<view class="box">
<view class="box" @tap="Thetapeidisshow=false">
<view class="headbox">
<!-- 顶部时间 -->
<view class="headboxhead">
@@ -30,7 +30,7 @@
<scroll-view :scroll-top="scrollTop" lower-threshold='100px' @scrolltolower="ltolower()" upper-threshold='40px'
@scrolltoupper="rolltoupper()" :scroll-into-view="scrollId" scroll-y="true" class="zhuti text scroll-Y">
<!-- 聊天记录-->
<view class="dialog-block" v-for="(dialog,i) in dialogList" :key="i">
<view class="dialog-block" @click="close()" v-for="(dialog,i) in dialogList" :key="i">
<view :id="'dialog'+i" class="fileName">录音文件</view>
<view class="text" :id="'dialog'+csdFileindex+'text'+item.bg"
:class="{active: item.bg < playNow && item.ed > playNow && i==0}"
@@ -123,8 +123,8 @@
</view>
<view class="contentMain">
<view class="content">
<view @longpress="changanxiaoguo(item,index,i)" v-html="item.onebest"></view>
<view @longpress.stop="changanxiaoguo(item,index,i)" v-html="item.onebest"></view>
<view class="tankuangcss" :class="{bottoms:index == 0}" v-if="item.isshow">
<view @click="clickcopy()"
style="width: 60rpx;font-size: 24rpx;text-align: center;margin-left: 24rpx;">复制
@@ -135,15 +135,17 @@
<view v-if="permissions.commonly3" @click="Addtheessence()"
style="width: 80rpx;font-size: 24rpx;text-align: center;margin-left: 22rpx;">加精华
</view>
<view @click="clickbofang(dialog.backindex,item)"
<!-- 暂时注释掉 -->
<!-- <view @click="clickbofang(dialog.backindex,item)"
style="width: 80rpx;font-size: 24rpx;text-align: center;margin-left: 14rpx;">播放
</view>
</view> -->
<view @click="Modifyrole(index,item)"
style="font-size: 24rpx;text-align: center;margin-left: 14rpx;">修改角色
</view>
</view>
</view>
<image @click="clickbofang(dialog.backindex,item)" class="play" src="../../static/images/recordingManagement/play.png"></image>
<image @click="clickbofang(dialog.backindex,item)" class="play"
src="../../static/images/recordingManagement/play.png"></image>
</view>
</view>
</view>
@@ -186,20 +188,20 @@
</view>
<view class="fill"></view>
<!-- audioinfo2 -->
<view class="tmmchen" v-if="permissions.commonly2==true">
<image @click="Receivedetailsabouttab('Receivedetailsabout')" src="../../static/images/allimg.png"
mode=""></image>
<view @click="Receivedetailsabouttab('Receivedetailsabout')">更多</view>
<view @click.stop="Receivedetailsabouttab('Receivedetailsabout')" class="tmmchen"
v-if="permissions.commonly2==true">
<image src="../../static/images/allimg.png" mode=""></image>
<view>更多</view>
<view class="allimg" v-if="Thetapeidisshow">
<view @click="Receivetap()" style="line-height: 70rpx;margin-top: 10rpx;">接待信息</view>
<view @click="alllogo()" style="line-height:70rpx;">{{userlistobj.validInvalidName}}</view>
<view @click.stop="Receivetap()" style="line-height: 70rpx;margin-top: 10rpx;">接待信息</view>
<view @click.stop="alllogo()" style="line-height:70rpx;">{{userlistobj.validInvalidName}}</view>
</view>
</view>

<view class="tmmchen" @click="Receivetap()" v-if="permissions.commonly2==false">
<image @click="Receivedetailsabouttab('Receivedetailsabout')"
<view class="tmmchen" @click.stop="Receivetap()" v-if="permissions.commonly2==false">
<image @click.stop="Receivedetailsabouttab('Receivedetailsabout')"
src="../../static/images/audioinfo2.png" mode=""></image>
<view @click="Receivedetailsabouttab('Receivedetailsabout')">接待信息</view>
<view @click.stop="Receivedetailsabouttab('Receivedetailsabout')">接待信息</view>
</view>


@@ -611,10 +613,10 @@
roletiaoshu: 0,
};
},
computed:{
conversionTiame(){
computed: {
conversionTiame() {
return (e) => {
return this.getTime(e);
return this.getTime(e);
}
}
},
@@ -679,6 +681,15 @@
this.innerAudioContext.destroy();
},
methods: {
// 关闭弹窗
close() {
this.dialogList.forEach(res => {
res.message.forEach(asd => {
asd.isshow = false;
})
})
this.$forceUpdate();
},
// 添加角色
addRole() {
this.tablist.push({
@@ -2017,6 +2028,7 @@
font-size: 26rpx;
color: #333333;
text-align: center;
box-shadow: 10rpx 10rpx 5rpx #888888;
}
}

@@ -2340,24 +2352,28 @@
.scroll-Y .text[data-speaker="6"] {
flex-direction: row-reverse;
text-align: right;
.contentInfo{
.info{

.contentInfo {
.info {
color: #ccc;
font-size: 18rpx;
font-size: 30rpx;
padding: 0 28rpx;
}
.contentMain{

.contentMain {
display: flex;
flex-direction: row-reverse;
align-items: center;
flex-direction: row-reverse;
align-items: center;

.content {
margin-left: 0;
margin-right: 30upx;
background: #F6F6F6;
color: #999999;
}
.play{

.play {
width: 50rpx;
height: 50rpx;
margin-right: 20rpx;
@@ -2366,27 +2382,29 @@
}


}
.scroll-Y .text[data-speaker="2"],
.scroll-Y .text[data-speaker="4"],
.scroll-Y .text[data-speaker="6"] {
.contentInfo{
.info{
.AudioUserName{
.contentInfo {
.info {
.AudioUserName {
margin-left: 10rpx;
}

display: flex;
flex-direction: row-reverse;
}
}
}
.scroll-Y .text{
.contentInfo{
.info{
.AudioUserName{

.scroll-Y .text {
.contentInfo {
.info {
.AudioUserName {
margin-right: 10rpx;
}
}
@@ -2411,16 +2429,19 @@
width: 40upx;
}
}
.scroll-Y .text .contentInfo .info{

.scroll-Y .text .contentInfo .info {
color: #ccc;
font-size: 18rpx;
font-size: 30rpx;
padding: 0 28rpx;
}
.scroll-Y .text .contentInfo .contentMain{

.scroll-Y .text .contentInfo .contentMain {
display: flex;
align-items: center;
}

.scroll-Y .text .contentInfo .contentMain .content {
margin-left: 30upx;
line-height: 60rpx;
@@ -2448,16 +2469,19 @@
border-radius: 15rpx;
z-index: 1000;
}
.bottoms {
top: unset;
bottom: -140rpx;
}

.bottoms {
top: unset;
bottom: -140rpx;
}
}
.scroll-Y .text .contentInfo .contentMain .play{

.scroll-Y .text .contentInfo .contentMain .play {
width: 50rpx;
height: 50rpx;
margin-left: 20rpx;
}

.scroll-Y .text.active .content {
color: #38FFF1;
position: relative;
@@ -2490,8 +2514,8 @@
}

.jiangshang {
color: #2671E2;
background: #F4F8FD;
color: #fff;
background: #2671E2;
}

.jiangshang1 {


+ 36
- 18
pages/mine/equipment/index.vue View File

@@ -1,19 +1,21 @@
<template>
<view class="cented">
<view style="width: 690rpx;margin: 0 auto;margin-top: 20rpx;">
<u-search @search='shecs()' :show-action='false' placeholder="请输入设备编号或领用人进行搜索" v-model="imei"></u-search>
</view>
<view class="tab-box">
<!-- <view class="tab-item-wrap">
<view v-for="(item, index) in tablist" :key="index" :class="activeClass == index ? 'bottom' : ''" @tap="clocktab(index)">
{{item.names}}( {{item.num}} )
<view class="bottomLine" v-if="activeClass == index"></view>
</view>
</view> -->
<u-tabs-swiper ref="tabs" font-size="30" :bold="true" swiper-width="700" :current="activeClass" @change="clocktab()"
inactive-color="#b1b1b1" active-color="#008ef2" :list="tablist" :is-scroll="true">
</u-tabs-swiper>
<view class="header">
<view style="width: 690rpx;margin: 0 auto;margin-top: 20rpx;">
<u-search @search='shecs()' :show-action='false' placeholder="请输入设备编号或领用人进行搜索" v-model="imei"></u-search>
</view>
<view class="tab-box">
<!-- <view class="tab-item-wrap">
<view v-for="(item, index) in tablist" :key="index" :class="activeClass == index ? 'bottom' : ''" @tap="clocktab(index)">
{{item.names}}( {{item.num}} )
<view class="bottomLine" v-if="activeClass == index"></view>
</view>
</view> -->
<u-tabs-swiper ref="tabs" font-size="30" :bold="true" swiper-width="700" :current="activeClass" @change="clocktab()"
inactive-color="#b1b1b1" active-color="#008ef2" :list="tablist" :is-scroll="true">
</u-tabs-swiper>
</view>
</view>
@@ -57,10 +59,16 @@
<view class="box2-you" v-if="item.audioStatus=='' ">关闭</view>
</view>
<view class="infobox2">
<view class="box2-zuo">上传状态</view>
<view class="box2-you" v-if="item.audioUploadStatus=='false'">无上传</view>
<view class="box2-zuo">待上传</view>
<template v-if="item.fileCount && item.fileCount > 0">
<text class="stayupload">{{ item.fileCount }}条</text>
</template>
<template v-else>
0
</template>
<!-- <view class="box2-you" v-if="item.audioUploadStatus=='false'">无上传</view>
<view class="box2-you" v-if="item.audioUploadStatus=='true'">上传中</view>
<view class="box2-you" v-if="item.audioUploadStatus=='' ">无上传</view>
<view class="box2-you" v-if="item.audioUploadStatus=='' ">无上传</view> -->
</view>
<view class="infobox2">
<view class="box2-zuo">更新时间</view>
@@ -249,8 +257,14 @@
<style lang="scss">
.cented {
width: 100%;
height: 100vh;
min-height: 100vh;
background: #FFFFFF;
.header {
position: sticky;
top: var(--window-top);
z-index: 999;
}
}

// .infoinputbox {
@@ -443,6 +457,10 @@
font-size: 24rpx;
color: #333333;
text-indent: 30rpx;
.stayupload {
color: #F41313;
}
}
}
}


+ 237
- 224
pages/mine/reception/addreception.vue View File

@@ -2,11 +2,13 @@
<view class="cented-box">
<view class="Pinspeak">客户信息</view>
<view class="chented">
<view class="title">
<view class="titletext">客户姓名</view>
<view class="titletext2">
<input class="titletext-input" style="color: #333333;" v-model="parames.name" placeholder-class="titletext-input" placeholder-style="color:#B2B2B2;" type="text" placeholder="请输入客户姓名(必填)" />
<input class="titletext-input" style="color: #333333;" v-model="parames.name"
placeholder-class="titletext-input" placeholder-style="color:#B2B2B2;" type="text"
placeholder="请输入客户姓名(必填)" />
</view>
<view class="titleimg">
<!-- <image class="titleimg1" src="../../../static/images/arrow.png" mode=""></image> -->
@@ -19,14 +21,16 @@
<view class="sexRadio" @click="changeSex(2)" :class="{active:parames.sex == 2}">女士</view>
</view>
</view>
<view class="title">
<view class="titletext">联系电话</view>
<view class="titletext2">
<input class="titletext-input" style="color: #333333;" v-model="parames.phone" placeholder-class="titletext-input" placeholder-style="color:#B2B2B2;" type="number" placeholder="请输入联系电话" />
<input class="titletext-input" style="color: #333333;" v-model="parames.phone" maxlength="11"
placeholder-class="titletext-input" placeholder-style="color:#B2B2B2;" type="number"
placeholder="请输入联系电话" />
</view>
</view>
<view class="title">
<view class="titletext">接待人数</view>
<view class="titletext2" style="display: flex;align-items: center;justify-content: space-around;">
@@ -35,11 +39,12 @@
{{i + 1}}
</view>
</view>
</view>
</view>
<view class="title" style="border: none;" @click="Buildingselection()">
<view class="titletext">客户来源</view>
<view class="titletext2" style="font-size: 30rpx;font-weight: 400;color: #B2B2B2;line-height: 90rpx;padding-left: 10rpx;">
<view class="titletext2"
style="font-size: 30rpx;font-weight: 400;color: #B2B2B2;line-height: 110rpx;padding-left: 10rpx;">
<!-- {{parames.sourceName||'请选择客户来源'}} -->
<text v-if="parames.sourceName" style="color: #333333;">{{parames.sourceName}}</text>
<text v-else>请选择客户来源</text>
@@ -48,13 +53,14 @@
<image class="titleimg1" src="../../../static/images/arrow.png" mode=""></image>
</view>
</view>
</view>
<view class="Pinspeak" v-if="shifoinfo==0">顾问</view>
<view class="chented" v-if="shifoinfo==0" @click="clickShowhid()">
<view class="Pinspeak" v-if="isShow">顾问</view>
<view class="chented" v-if="isShow" @click="clickShowhid()">
<view class="title" style="border: none;">
<view class="titletext">接待顾问</view>
<view class="titletext2" style="font-size: 30rpx;font-weight: 400;color: #B2B2B2;line-height: 90rpx;padding-left: 10rpx;">
<view class="titletext2"
style="font-size: 30rpx;font-weight: 400;color: #B2B2B2;line-height: 110rpx;padding-left: 10rpx;">
<!-- {{text || '请选择接待顾问'}} -->
<text v-if="text" style="color: #333333;">{{text}}</text>
<text v-else>请选择接待顾问</text>
@@ -62,18 +68,22 @@
<view class="titleimg">
<image class="titleimg1" src="../../../static/images/arrow.png" mode=""></image>
</view>
</view>
</view>
</view>
<view class="clive" @click="save">确定</view>
<view v-if="Showhiddenunits">
<u-select :mask-close-able="false" v-model="Showhiddenunits" mode="single-column" :list="list" @cancel="cancel" @confirm="confirm"></u-select>
<u-select :mask-close-able="false" v-model="Showhiddenunits" mode="single-column" :list="list"
@cancel="cancel" @confirm="confirm"></u-select>
</view>
<view v-if="Showhid">
<u-select :mask-close-able="false" v-model="Showhid" mode="single-column" :list="freeList" @cancel="cancel1" @confirm="confirm1"></u-select>
<u-select :mask-close-able="false" v-model="Showhid" mode="single-column" :list="freeList" @cancel="cancel1"
@confirm="confirm1"></u-select>
</view>
<u-modal v-model="show" :mask-close-able="true" :title="'代接待提醒'" :confirm-text="confirmtext" :cancel-text='canceltext' @cancel="confirmA" @confirm="confirmB" :show-cancel-button='true' :content="content"></u-modal>
<u-modal v-model="show" :mask-close-able="true" :title="'代接待提醒'" :confirm-text="confirmtext"
:cancel-text='canceltext' @cancel="confirmA" @confirm="confirmB" :show-cancel-button='true'
:content="content"></u-modal>
</view>
</template>

@@ -84,10 +94,15 @@
export default {
data() {
return {
Showhiddenunits:false,
list: [
{label: '自然到访',value:'自然到访'},
{label: '渠道推荐',value:'渠道推荐'},
Showhiddenunits: false,
list: [{
label: '自然到访',
value: '自然到访'
},
{
label: '渠道推荐',
value: '渠道推荐'
},
],
parames: {
name: '',
@@ -97,72 +112,64 @@
source: null,
sourceName: null,
howMany: 1,
agentId:null,
projectId:'',
replaceReception:0
agentId: null,
projectId: '',
replaceReception: 0
},
shifoinfo:0,
freeList:[],
Showhid:false,
text:null,
show:false,
freeList: [],
Showhid: false,
text: null,
show: false,
content: '东临碣石,以观沧海',
confirmtext:'1',//确认文字
canceltext:'2',//取消文字
daitiReceptionobj:{}
confirmtext: '1', //确认文字
canceltext: '2', //取消文字
daitiReceptionobj: {},
isShow: false, // 默认隐藏该权限
};
},
onShow: function() {
this.parames.projectId=uni.getStorageSync('buildingID').id;
this.init()
onShow() {
let newmenulist= uni.getStorageSync('weapp_session_Menu_data');
this.isShow = newmenulist.jd_zp
this.parames.projectId = uni.getStorageSync('buildingID').id;
this.getFreeList();
},
methods: {
//取消
confirmA(){
if(this.daitiReceptionobj.assign!=null){
this.parames.agentId=this.daitiReceptionobj.assign.accountId;
confirmA() {
if (this.daitiReceptionobj.assign != null) {
this.parames.agentId = this.daitiReceptionobj.assign.accountId;
this.baochunfun()
}else{
} else {
uni.showToast({
icon: "none",
title: "【"+this.daitiReceptionobj.owner.name+"】正在接待中"
title: "【" + this.daitiReceptionobj.owner.name + "】正在接待中"
})
return;
}
},
// 确认
confirmB(){
this.parames.agentId=this.daitiReceptionobj.replacement.accountId;
this.parames.replaceReception=1;
confirmB() {
console.log(this.daitiReceptionobj.replacement.accountId)
this.parames.agentId = this.daitiReceptionobj.replacement.accountId;
this.parames.replaceReception = 1;
this.baochunfun()
},
save() {
if (this.parames.name.length==0) {
if (this.parames.name.length == 0) {
uni.showToast({
icon: "none",
title: "客户姓名不能为空"
})
return;
}
// (this.parames.phone && !this.$u.test.mobile(this.parames.phone))
// if (this.parames.phone) {
// uni.showToast({
// icon: "none",
// title: "手机号码不能为空"
// })
// return;
// }
console.log(this.parames.phone.length)
if (this.parames.phone && this.parames.phone.length<11) {
if (this.parames.phone && this.parames.phone.length < 11) {
uni.showToast({
icon: "none",
title: "手机号码不能小于11位"
})
return;
}
if (this.parames.phone && this.parames.phone.length>11) {
if (this.parames.phone && this.parames.phone.length > 11) {
uni.showToast({
icon: "none",
title: "手机号码不能大于11位"
@@ -173,42 +180,48 @@
this.$u.post("customer/daitiReception", {
phone: that.parames.phone,
projectId: that.parames.projectId,
agentId:that.parames.agentId
agentId: that.parames.agentId
}).then(res => {
if(res.unchecked==0){
if (res.unchecked == 0) {
that.baochunfun()
}else{
if(res.zs==0){
that.parames.agentId=res.assign.accountId;
} else {
if (res.zs == 0) {
console.log(res, 'ajdlksajdklsajkdljsakldjsakl')
console.log(res, 'ajdlksajdklsajkdljsakldjsakl')
that.parames.agentId = res.assign.accountId;
that.baochunfun()
}else{
} else {
console.log("zo")
if(res.assign==null&&res.replacement==null){
if (res.assign == null && res.replacement == null) {
that.baochunfun()
}else{
if(res.assign==null){
that.daitiReceptionobj=res;
that.content="此客户的顾问为【"+ res.owner.name +"】,确认让【"+ res.replacement.name +"】代接待吗?"
that.confirmtext=res.replacement.name +"代接代",//确认文字
that.canceltext=res.owner.name +'接待',//取消文字
that.show=true;
}else{
that.daitiReceptionobj=res;
} else {
if (res.assign == null) {
that.daitiReceptionobj = res;
that.content = "此客户的顾问为【" + res.owner.name + "】,确认让【" + res.replacement.name +
"】代接待吗?"
that.confirmtext = res.replacement.name + "代接代", //确认文字
that.canceltext = res.owner.name + '接待', //取消文字
that.show = true;
} else {
that.daitiReceptionobj = res;
console.log(that.daitiReceptionobj)
that.content="此客户的顾问为【"+ res.owner.name +"】,确认让【"+ res.replacement.name +"】代接待吗?"
that.confirmtext=res.replacement.name +"代接代",//确认文字
that.canceltext=res.assign.name +'接待',//取消文字
that.show=true;
that.content = "此客户的顾问为【" + res.owner.name + "】,确认让【" + res.replacement.name +
"】代接待吗?"
that.confirmtext = res.replacement.name + "代接代", //确认文字
that.canceltext = res.assign.name + '接待', //取消文字
that.show = true;
}
}
}
}
})
},
baochunfun(){
const { dataCode } = uni.getStorageSync("weapp_session_userInfo_data");
if(this.parames.phone.length==0){
this.parames.phone=null
baochunfun() {
const {
dataCode
} = uni.getStorageSync("weapp_session_userInfo_data");
if (this.parames.phone.length == 0) {
this.parames.phone = null
}
uni.showLoading({
title: "保存中",
@@ -240,176 +253,176 @@
changeHowMany(num) {
this.parames.howMany = num;
},
clickShowhid(){
if(this.freeList.length==0){
clickShowhid() {
if (this.freeList.length == 0) {
uni.showToast({
icon:'none',
title: '当前无可用排班顾问',
duration: 2000
icon: 'none',
title: '当前无可用排班顾问',
duration: 2000
});
}else{
this.Showhid=true;
} else {
this.Showhid = true;
}
},
cancel1(){
this.Showhid=false;
cancel1() {
this.Showhid = false;
},
confirm1(e) {
this.text=e[0].label;
this.parames.agentId=e[0].value;
this.Showhid=false;
this.text = e[0].label;
this.parames.agentId = e[0].value;
this.Showhid = false;
},
Buildingselection(){
this.Showhiddenunits=true;
Buildingselection() {
this.Showhiddenunits = true;
},
cancel(){
this.Showhiddenunits=false;
cancel() {
this.Showhiddenunits = false;
},
confirm(e) {
this.parames.sourceName=e[0].value;
this.Showhiddenunits=false;
},
init(){
uni.request({
url: config.service.getSelfAssignedByHouseId+"?houseId="+this.parames.projectId,
method: "GET",
header: {
'content-type': 'application/json',
'Authorization': 'Bearer '+uni.getStorageSync('weapp_session_login_data').token
},
success: (data) => {
if(data.data.code==10000){
this.shifoinfo=data.data.data.selfAssigned
}
}
})
this.parames.sourceName = e[0].value;
this.Showhiddenunits = false;
},
//获取顾问列表
getFreeList() {
this.$u.get("/zkAgentPool/freeList?itemId="+this.parames.projectId).then(res => {
this.freeList = res;
this.freeList.forEach(item=>{
if(item.onLine==0){
item.label=item.name+"(离线)";
}else if(item.onLine==1){
item.label=item.name+"(在线)";
}else{
item.label=item.name+"(无设备)";
}
item.value=item.agentId
this.$u.get("/zkAgentPool/freeList?itemId=" + this.parames.projectId).then(res => {
this.freeList = res;
this.freeList.forEach(item => {
if (item.onLine == 0) {
item.label = item.name + "(离线)";
} else if (item.onLine == 1) {
item.label = item.name + "(在线)";
} else {
item.label = item.name + "(无设备)";
}
item.value = item.agentId
})
})
})
},
}
};
</script>
<style lang="scss" scoped>
.sexRadio{
color: #BFBFBF;
border: 1rpx solid #BFBFBF;
font-size: 24upx;
width: 100rpx;
height: 43rpx;
text-align: center;
line-height: 40rpx;
&:last-child {
margin-left: 20rpx;
}
&.active {
color: #2B6FFF;
border-color: #2B6FFF;
}
}
.sexRadio {
color: #BFBFBF;
border: 1rpx solid #BFBFBF;
font-size: 24upx;
width: 120rpx;
height: 60rpx;
text-align: center;
display: flex;
align-items: center;
justify-content: center;

.num {
width: 50rpx;
height: 50rpx;
background: rgba(43, 110, 253, 0.1);
color: #2B6EFD;
font-size: 30rpx;
display: flex;
align-items: center;
justify-content: center;
&:last-child {
margin-left: 20rpx;
}

&.active {
background: #2B6EFD;
color: #FFFFFF;
&.active {
background: #2B6FFF;
color: #fff;
border-color: #2B6FFF;
}
}
}
.cented-box{
background: #F8F8F8;
width: 100%;
height: 100vh;
}
.Pinspeak{
width: 100%;
height: 92rpx;
border-bottom: 1rpx solid #E0E0E0;
font-size: 32rpx;
font-weight: bold;
color: #333333;
text-indent: 30rpx;
line-height: 92rpx;
background: #FFFFFF;
margin-top: 20rpx;
padding-left: 10rpx;
}
.chented{
width: 100%;
padding-left: 30rpx;
padding-right: 30rpx;
background-color: #FFFFFF;
.title{
width: 100%;
height: 90rpx;
border-bottom: 1rpx solid #E0E0E0;

.num {
width: 50rpx;
height: 50rpx;
background: rgba(43, 110, 253, 0.1);
color: #2B6EFD;
font-size: 30rpx;
display: flex;
align-items: center;
.titletext{
width: 21%;
height: 90rpx;
font-size: 30rpx;
font-weight: 400;
color: #333333;
line-height: 90rpx;
text-indent: 10rpx;
}
.titletext2{
width: 71%;
height: 90rpx;
justify-content: center;

&.active {
background: #2B6EFD;
color: #FFFFFF;
}
.titletext-input{
}

.cented-box {
background: #F8F8F8;
width: 100%;
height: 100vh;
}

.Pinspeak {
width: 100%;
height: 92rpx;
border-bottom: 1rpx solid #E0E0E0;
font-size: 32rpx;
font-weight: bold;
color: #333333;
text-indent: 30rpx;
line-height: 92rpx;
background: #FFFFFF;
margin-top: 20rpx;
padding-left: 10rpx;
}

.chented {
width: 100%;
padding-left: 30rpx;
padding-right: 30rpx;
background-color: #FFFFFF;

.title {
width: 100%;
height: 90rpx;
font-size: 30rpx;
font-weight: 400;
color: #B2B2B2;
line-height: 90rpx;
padding-left: 10rpx;
}
.titleimg{
width: 8%;
text-align: right;
.titleimg1{
width: 16rpx;
height: 36rpx;
height: 110rpx;
border-bottom: 1rpx solid #E0E0E0;
display: flex;
align-items: center;

.titletext {
width: 21%;
height: 110rpx;
font-size: 30rpx;
font-weight: 400;
color: #333333;
line-height: 110rpx;
text-indent: 10rpx;
}

.titletext2 {
width: 71%;
height: 110rpx;
}

.titletext-input {
width: 100%;
height: 110rpx;
font-size: 30rpx;
font-weight: 400;
color: #B2B2B2;
line-height: 110rpx;
padding-left: 10rpx;
}

.titleimg {
width: 8%;
text-align: right;

.titleimg1 {
width: 16rpx;
height: 36rpx;
}
}
}
}
}
.clive{
width: 690rpx;
height: 88rpx;
background: #2671E2;
text-align: center;
line-height: 88rpx;
color: #FFFFFF;
border-radius: 8rpx;
margin: 0 auto;
margin-top: 300rpx;
font-size: 32rpx;
}

.clive {
position: absolute;
bottom: 32rpx;
left: 30rpx;
right: 30rpx;
width: 690rpx;
height: 88rpx;
background: #2671E2;
text-align: center;
line-height: 88rpx;
color: #FFFFFF;
border-radius: 8rpx;
font-size: 32rpx;
}
</style>

+ 5
- 0
uview-ui/components/u-select/u-select.vue View File

@@ -414,4 +414,9 @@ export default {
}
}
}

.u-select__header__btn {
font-size: 32rpx;
font-weight: bold;
}
</style>

||||||
x
 
000:0
Loading…
Cancel
Save