Browse Source

合并主分支

yun
douzhuo 1 year ago
parent
commit
4fe081536a
38 changed files with 3362 additions and 2060 deletions
  1. +11
    -6
      App.vue
  2. +0
    -2
      audios.js
  3. +56
    -0
      components/loading/index.vue
  4. +0
    -462
      components/long_audio/long_audio.vue
  5. +2
    -29
      components/uniapp-zaudio/dist/zaudio.js
  6. +1
    -0
      components/uniapp-zaudio/zaudio.vue
  7. +2
    -0
      config.js
  8. +2
    -2
      manifest.json
  9. +642
    -625
      pages.json
  10. +9
    -8
      pages/center/Piabodata/Customerportrait/Receivedetailabout.vue
  11. +10
    -6
      pages/center/Piabodata/Customerportrait/Receivingrecords.vue
  12. +12
    -1
      pages/center/Piabodata/Groupcontrast.vue
  13. +11
    -0
      pages/center/Piabodata/StaffAnalysis.vue
  14. +13
    -0
      pages/center/Piabodata/Theteamcompared.vue
  15. +17
    -16
      pages/center/Piabodata/TrendAnalysis.vue
  16. +18
    -6
      pages/center/Piabodata/Userinsightinto.vue
  17. +22
    -8
      pages/center/Piabodata/index.vue
  18. +697
    -0
      pages/center/Piabodata/requireminingAnalysis.vue
  19. +631
    -358
      pages/center/consumer/consumerDetail.vue
  20. +17
    -4
      pages/center/consumer/index.vue
  21. +16
    -4
      pages/center/prohibited/index.vue
  22. +23
    -5
      pages/center/records/index.vue
  23. +59
    -62
      pages/index/customer.vue
  24. +10
    -1
      pages/index/guide.vue
  25. +311
    -222
      pages/index/index.vue
  26. +34
    -26
      pages/index/personal.vue
  27. +7
    -10
      pages/login/index.vue
  28. +1
    -0
      pages/mine/calibration.vue
  29. +28
    -3
      pages/mine/details.vue
  30. +158
    -39
      pages/mine/details2.vue
  31. +357
    -0
      pages/mine/equipmentLog.vue
  32. +63
    -12
      pages/mine/reception/addreception.vue
  33. +25
    -55
      pages/mine/reception/consultant.vue
  34. +45
    -42
      pages/mine/subscribe.vue
  35. +7
    -1
      pages/reportExcel/dayReport.vue
  36. BIN
      static/images/back.png
  37. +5
    -6
      utils/domain.js
  38. +40
    -39
      utils/http.js

+ 11
- 6
App.vue View File

@@ -6,7 +6,6 @@
onLaunch(options) {
uni.getSystemInfo({
success: function(e) {
console.log(e, 'adjsakljdklasjdklsakjdslakjd')
// #ifdef MP-WEIXIN
Vue.prototype.StatusBar = e.statusBarHeight;
let custom = wx.getMenuButtonBoundingClientRect();
@@ -19,7 +18,8 @@
return {
StatusBar: Vue.prototype.StatusBar,
CustomBar: Vue.prototype.CustomBar,
windowHeight: Vue.prototype.windowHeight
windowHeight: Vue.prototype.windowHeight,
LOADING: false
};
},

@@ -77,17 +77,22 @@
}
return obj
},
// 检测权限
checkAuthority(name = '') {
let menu = uni.getStorageSync('weapp_session_Menu_data')
return menu.findIndex(item => item.name == name) != -1
},
},

filters: {
// ASCII码转换 大写字母A是65 演讲人是从1开始所以num+64
toCapital(num) {
let str = ''
if (num) {
str = String.fromCharCode(num + 64)
}
str = String.fromCharCode(Number(num) + 64)
return str
}
},
}
});
}


+ 0
- 2
audios.js
File diff suppressed because it is too large
View File


+ 56
- 0
components/loading/index.vue View File

@@ -0,0 +1,56 @@
<template>
<view class="pages" v-if="value">
<div class="donut"></div>
</view>
</template>

<script>
export default {
name: '加载组件',
props: {
// v-model绑定的变量
value: {
type: Boolean,
default: false
},
},
}
</script>

<style lang="scss" scoped>
.pages {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 999999;
display: flex;
flex-direction: column;
align-items: center;
background: #fff;

.donut {
margin-top: 35vh;
display: inline-block;
border: 10rpx solid rgba(0, 0, 0, 0.1);
border-left-color: #1296db;
border-radius: 50%;
width: 150rpx;
height: 150rpx;
animation: donut-spin 1.2s linear infinite;
}
}



@Keyframes donut-spin {
0% {
transform: rotate(0deg);
}

100% {
transform: rotate(360deg);
}
}
</style>

+ 0
- 462
components/long_audio/long_audio.vue View File

@@ -1,462 +0,0 @@
<template>
<view>
<!-- 播放块 -->
<view class="bottomhead">
<view class="audio-play" @tap="changePlayState">
<image class="image" mode="widthFix"
:src="audioPlay ? 'https://qufang.oss-cn-beijing.aliyuncs.com/upload/icon/xcx/jjycrm/pause.png' : 'https://qufang.oss-cn-beijing.aliyuncs.com/upload/icon/xcx/jjycrm/play.png'">
</image>
</view>
<view class="audio-slider">
<view class="audio-time">
<text>{{currentTimeStr}}</text>
</view>
<slider class="slider" min="0" :max="sliderMax" @change="sliderChangeComplate" block-size="14"
:value="sliderValue" activeColor="blue"></slider>
<view class="audio-time">
<text>{{timeStr}}</text>
</view>
</view>
</view>
</view>
</template>

<script>
var util = require("@/utils/util.js");
var config = require("@/config");
export default {
name: "long_audio",
data() {
return {
audioPlay: false, //当前的播放状态控制
sliderValue: 0, //进度条最小值
sliderMax: 0, //进度条最大值
innerAudioContext:null, //播放实例
currentTimeStr: "00:00", //当前进度的时间
timeStr: "00:00", //总的时间
recordPath: "",
luyinList: [], //录音文件
newluyinList: [],
dialogList: [], //录音识别列表
csdFileindex: 0,
date: "", //年月日
scrollId: "",
playNow: 0,
alltimeStr: "00:00:00",
};
},
props:{
customerId:'',
infos:null,
roleindex:0
},
mounted() {
this.roleindex = 0;
this.innerAudioContext = uni.createInnerAudioContext();
this.innerAudioContext.autoplay = false;
this.innerAudioContext.title = '音频';
this.onPlay()
this.onPause()
this.onCanplay()
this.onEnded()
this.onSeeking()
this.onSeeked()
this.TimeUpdate()
this.init(this.infos)
},
destroyed() {
//暂停
this.innerAudioContext.pause()
// 销毁
// this.innerAudioContext.destroy();
},
methods: {
onPlay() {
this.innerAudioContext.onPlay(() => {
// 播放监听
console.log('播放!');
this.audioPlay = true;
wx.enableAlertBeforeUnload({
message: "是否确认退出详情页面?",
success: function(res) {
console.log("方法注册成功:", res);
},
fail: function(errMsg) {
console.log("方法注册失败:", errMsg);
},
});
});
},
onPause() {
this.innerAudioContext.onPause(() => {
wx.disableAlertBeforeUnload({
success: function(res) {
console.log(res)
},
fail: function(e) {
console.log(e)
}
});
// 暂停监听
console.log('暂停播放!');
this.audioPlay = false
});
},
onCanplay() {
this.innerAudioContext.onCanplay((callback) => {
console.log("缓冲回调", this.innerAudioContext.duration);
})
},
onEnded() {
this.innerAudioContext.onEnded(() => {
// 结束播放监听
console.log('播放结束!');
this.audioPlay = false;
});
},
onSeeking() {
this.innerAudioContext.onSeeking((res) => {
console.log("进行跳转", res);
})
},
onSeeked() {
this.innerAudioContext.onSeeked((res) => {
console.log("结束跳转", res);
this.$forceUpdate()
});
},
TimeUpdate() {
this.innerAudioContext.onTimeUpdate(() => {
// var pages = getCurrentPages();
// if(pages[pages.length-1].route!="pages/mine/details2"){
// this.innerAudioContext.destroy();
// }
const {
currentTime,
duration
} = this.innerAudioContext;
console.log(currentTime, 'TimeUpdate, currentTime')
this.playNow = parseInt(currentTime * 1000)
uni.$emit("playNows", this.playNow)
console.log(this.playNow)
if (this.dialogList.length == 0) {
return
} else {
const message = this.dialogList[0].message;
for (let i = 0; i < message.length; i++) {
if (Number(message[i].bg) < this.playNow && Number(message[i].ed) > this.playNow) {
this.scrollId = "dialog" + this.csdFileindex + "text" + message[i].bg;
uni.$emit("scrollIds", this.scrollId)
break;
}
}
}
const currTimeStr = this.formatTime(currentTime);
this.sliderValue = parseInt(currentTime);
// 变动的时间
this.currentTimeStr = currTimeStr;
//进度条最大值
this.sliderMax = this.luyinList[this.csdFileindex].recordDuration;
this.$forceUpdate()
});
},
//分角色标记刷新
fenjiaoseunfo() {
var bgcd = this.sliderValue * 1000;
this.newluyinList = [];
this.dialogList = [];
uni.request({
url: config.service.getCorpusAnal + '?corpusId=' + this.luyinList[this.csdFileindex].id +
"&bg=" + bgcd + "&speaker=" + this.roleindex + '&num=50', //仅为示例,并非真实接口地址。
method: "GET",
header: {
'content-type': 'application/json',
'Access-Token': uni.getStorageSync('weapp_session_login_data').token
},
success: (data) => {
this.tablist = [];
let jsonInfo = JSON.parse(data.data.data.audioContent);
for (var i = 0; i <= data.data.data.speakerNum; i++) {
if (i === 0) {
this.tablist.push({
name: '全部'
})
} else {
this.tablist.push({
name: String.fromCharCode(i + 64)
})
}
}

if (data.data.data.speaker == null) {
this.roleindexbiaoji = 0;
this.dshfkjsdkksodofydwfkhwdfkjh = 0;
} else {
this.tablist[data.data.data.speaker].name = this.tablist[data.data.data.speaker]
.name + "顾问";
this.roleindexbiaoji = data.data.data.speaker - 1;
this.dshfkjsdkksodofydwfkhwdfkjh = data.data.data.speaker - 1;
}
if (this.roleindex > this.tablist.length - 1) {
this.roleindex = this.tablist.length - 1
this.fenjiaoseunfo()
}


this.speaker = data.data.data.speaker;
//上拉标记点
this.textindex = data.data.data.index;
//下拉标记点
this.toptextindex = data.data.data.index;

jsonInfo.forEach(item => {
item.message = JSON.parse(item.onebest)
item.backindex = this.csdFileindex
})
console.log(jsonInfo)

this.newluyinList = jsonInfo;
if (this.textindex == null) {
return
} else {
this.dialogList.push(jsonInfo[this.textindex]);
}
}
})
},
// 获取转义后的对话结果
getCorpusAnalysis(info) {
this.dialogList = [];
this.newluyinList = []
uni.request({
url: config.service.getCorpusAnal + '?corpusId=' + this.luyinList[this.csdFileindex].id +
"&bg=" + info.bg + "&speaker=" + this.roleindex + '&num=50', //仅为示例,并非真实接口地址。
method: "GET",
header: {
'content-type': 'application/json',
'Access-Token': uni.getStorageSync('weapp_session_login_data').token
},
success: (data) => {
this.tablist = [];
this.roleindexbiaoji = 0;
let jsonInfo = JSON.parse(data.data.data.audioContent);
for (var i = 0; i <= data.data.data.speakerNum; i++) {
if (i === 0) {
this.tablist.push({
name: '全部'
})
} else {
this.tablist.push({
name: String.fromCharCode(i + 64)
})
}
}
if (data.data.data.speaker == null) {
this.dshfkjsdkksodofydwfkhwdfkjh = 0;
} else {
this.tablist[data.data.data.speaker].name = this.tablist[data.data.data.speaker]
.name + "顾问";
this.roleindexbiaoji = data.data.data.speaker - 1;
this.dshfkjsdkksodofydwfkhwdfkjh = data.data.data.speaker - 1;
}
this.speaker = data.data.data.speaker;
//上拉标记点
this.textindex = data.data.data.index;
//下拉标记点
this.toptextindex = data.data.data.index;
jsonInfo.forEach(item => {
item.message = JSON.parse(item.onebest)
item.backindex = this.csdFileindex;
if (info.onebest) {
item.message.forEach(che => {
if (che.onebest == info.onebest) {
che.onebest =
`<font style='color: red'>${che.onebest}</font>`;
}
})
}
})
this.newluyinList = jsonInfo;
this.dialogList.push(jsonInfo[this.textindex]);
var itc = parseInt(info.bg / 1000)
this.adasdasdasd(itc)
}
})
},
init(info) {
this.sliderMax = 0; //进度条最大值
this.timeStr = "00:00"; //总的时间
const parames = {
pageNum: 1,
pageSize: 100,
query: {
customerId: this.customerId
}
}
this.$u.post("/corpus/findByPage", parames).then(res => {
if (res && res.length) {
let alltime = 1 + res[0].recordDuration;
this.calibration = res[0].calibration;
if (this.calibration == 0) {
this.kehuyixiangcenterindex = 0;
} else {
this.kehuyixiangcenterindex = 1;
}
this.alltimeStr = this.getTime(alltime)
if (info.bg != 0) {
this.luyinList = res;
this.recordPath = res[0].recordPath
this.sliderMax = this.getTime(res[0].recordDuration)
this.timeStr = this.getTime(res[0].recordDuration)
this.date = res[0].receptionTime;

this.getCorpusAnalysis(info);
this.creatAudio()
} else {
this.luyinList = res;
this.recordPath = res[0].recordPath
this.sliderMax = this.getTime(res[0].recordDuration)
this.timeStr = this.getTime(res[0].recordDuration)
this.date = res[0].receptionTime;

this.getCorpusAnalysis(info);
this.creatAudio()
}
}
})
},
//搜索跳转
adasdasdasd(e) {
const currTimeStr = this.formatTime(e)
this.currentTimeStr = currTimeStr
this.innerAudioContext.seek(e);
if (uni.getStorageSync('entrance') == 1) {
return
} else {
this.innerAudioContext.play();
}
},
getTime(time) {
return util.formatSecond(time)
},
// 录音暂停播放
changePlayState() {
if (this.audioPlay == false) {
this.innerAudioContext.play();
} else {
this.innerAudioContext.pause()
}
},
//音频前进回退
sliderChangeComplate(e) {
let platetime = e.detail.value * 1000;
this.dialogList = []
uni.request({
url: config.service.fastForward + '?corpusId=' + this.luyinList[this.csdFileindex].id +
"&bg=" + platetime, //仅为示例,并非真实接口地址。
method: "GET",
header: {
'content-type': 'application/json',
'Access-Token': uni.getStorageSync('weapp_session_login_data').token
},
success: (data) => {
this.textindex = data.data.data.index;
this.toptextindex = data.data.data.index;
if (data.data.data.index > this.newluyinList.length) {
this.dialogList.push(this.newluyinList[0])
} else {
this.dialogList.push(this.newluyinList[data.data.data.index])
}
console.log(e.detail, '1233333333333333333333333333333333333333333333333333333333333')
const currTimeStr = this.formatTime(e.detail.value)
this.currentTimeStr = currTimeStr
this.innerAudioContext.seek(e.detail.value);
this.innerAudioContext.play();
}
})
},
//录音实例
creatAudio() {
this.innerAudioContext = uni.createInnerAudioContext();
if (uni.getStorageSync('entrance') == 1) {
this.innerAudioContext.autoplay = false;
} else {
this.innerAudioContext.autoplay = true;
}
this.innerAudioContext.src = this.recordPath;
this.innerAudioContext.title = '音频';
this.onPlay()
this.onPause()
this.onCanplay()
this.onEnded()
this.onSeeking()
this.onSeeked()
this.TimeUpdate()
},
formatTime(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>

<style lang="scss">
.bottomhead {
width: 100%;
height: 81rpx;
border-bottom: 1px solid #E0E0E0;
display: flex;
justify-content: space-between;
align-items: center;

.audio-slider {
width: 87%;
display: flex;
justify-content: space-between;
align-items: center;
padding-right: 30rpx;
}

.audio-slider .slider {
width: 100%;
padding: 0px 15rpx;
box-sizing: border-box;
}

.audio-time {
width: 110rpx;
text-align: right;
font-size: 26rpx;
line-height: 28rpx;
color: #70798D;
display: flex;
justify-content: space-between;
}

.audio-play {
width: 48rpx;
height: 48rpx;
flex-shrink: 0;
}

.audio-play .image {
width: 100%;
height: 100%;
margin-left: 30rpx;
}
}
</style>

+ 2
- 29
components/uniapp-zaudio/dist/zaudio.js View File

@@ -450,8 +450,8 @@ class ZAudio extends util_1.EventBus {
this.audioCtx.singer = renderSinger;
this.audioCtx.coverImgUrl = renderCoverImgUrl || this.defaultCover;
this.audioCtx.startTime = 0;
this.audioCtx.seek(0);
this.audioCtx.play();
// this.audioCtx.seek(0);
// this.audioCtx.play();
this.commit("setPause", false);
this.commit("setPlayinfo", {
src: renderSrc,
@@ -626,33 +626,6 @@ class ZAudio extends util_1.EventBus {
// #endif
}
// 重置当前的参数
resetDatas() {
this.loading = false;
this.renderIndex = 0;
this.audiolist = [];
this.renderinfo = {
current: "00:00:00",
duration: "00:00:00",
duration_value: 0,
current_value: 0,
src: "",
title: "",
singer: "",
coverImgUrl: "",
};
this.playinfo = {
current: "00:00:00",
duration: "00:00:00",
duration_value: 0,
current_value: 0,
src: "",
title: "",
singer: "",
coverImgUrl: "",
};
}
}
exports.default = ZAudio;
ZAudio.version = "2.2.51";

+ 1
- 0
components/uniapp-zaudio/zaudio.vue View File

@@ -199,6 +199,7 @@
this.loading = loading;
});
this.$zaudio.syncRender()
console.log(this.$zaudio)
});
},
methods: {


+ 2
- 0
config.js View File

@@ -79,6 +79,8 @@ var config = {
firstShowPopup: `${host}/zkMessage/firstShow`,
//消息未读数
notReadNum: `${host}/zkMessage/findFlagCount`,
//设备日志
eqLog: `${host}/equipment/equipmentLog`,
}
};
module.exports = config;

+ 2
- 2
manifest.json View File

@@ -1,7 +1,7 @@
{
"name" : "去房智控管家",
"appid" : "__UNI__7A1611D",
"description" : "AI营销助理",
"description" : "去房智控管家",
"versionName" : "1.1.0",
"versionCode" : "100",
"transformPx" : false,
@@ -96,7 +96,7 @@
"urlCheck" : false,
"es6" : true,
"postcss" : true,
"minified" : true
"minified" : false
},
"usingComponents" : true,
"permission" : {},


+ 642
- 625
pages.json
File diff suppressed because it is too large
View File


+ 9
- 8
pages/center/Piabodata/Customerportrait/Receivedetailabout.vue View File

@@ -42,17 +42,21 @@
v-for="(item,index) in dialog.message" :key="index" :data-speaker="item.speaker">
<view class="avatar">
<view :style="[SPEAKERSTYLE(item.speaker)]">
<!-- <image v-if="item.isShow == 0" :src="Aimg.replace(/[\r\n]/g,'')" mode="widthFix"></image> -->
<text v-if="item.isShow == 0">顾</text>
<text v-else>{{ item.speaker | toCapital }}</text>
<text>{{ item.speaker | toCapital }}</text>
</view>
</view>


<view class="contentInfo">
<view class="info">
<text class="AudioUserName" v-if="item.isShow == 0">{{ item.username }}</text>
<text class="AudioUserName" v-else>{{ item.speaker | toCapital }}</text>
<text class="AudioUserName">
<template v-if="item.username">
{{ item.username }}
</template>
<template v-else>
{{ item.speaker | toCapital }}
</template>
</text>
<text>{{conversionTiame(item.bg/1000)}}</text>
</view>
<view class="content">
@@ -535,14 +539,11 @@
},

onHide() {
this.isAudio = 0
this.info = {}
this.isPageHide = true
},

// 销毁实例
onUnload() {
this.isAudio = 0
this.info = {}
//卸载不需要的业务和获取播放状态的业务,提高页面性能
this.$zaudio.off('seek', this.ACTION);


+ 10
- 6
pages/center/Piabodata/Customerportrait/Receivingrecords.vue View File

@@ -2,7 +2,7 @@
<view class="cenbox">
<view class="screeningtop">
<view class="screeningview" @click="clickscreening(1)">
<view>近一周</view>
<view>{{ showFillterText }}</view>
<view class="viewimg">
<image v-if="screeningshow1==false" src="../../../../static/images/down1.png" mode=""></image>
<image v-if="screeningshow1==true" src="../../../../static/images/down2.png" mode=""></image>
@@ -77,10 +77,10 @@
<view v-if="screeningshow1==true" class="call_zhezhao" @click="allcancel()"></view>
<view v-if="screeningshow1==true" class="timepick">
<view class="tiempickbox">
<view :class="{ timeactive: activetime == 0 }" @click="activetimetab(0)">今日</view>
<view :class="{ timeactive: activetime == 1 }" @click="activetimetab(1)">昨日</view>
<view :class="{ timeactive: activetime == 2 }" @click="activetimetab(2)">近一周</view>
<view :class="{ timeactive: activetime == 3 }" @click="activetimetab(3)">本月</view>
<view :class="{ timeactive: activetime == 0 }" @click="activetimetab(0, '今日')">今日</view>
<view :class="{ timeactive: activetime == 1 }" @click="activetimetab(1, '昨日')">昨日</view>
<view :class="{ timeactive: activetime == 2 }" @click="activetimetab(2, '近一周')">近一周</view>
<view :class="{ timeactive: activetime == 3 }" @click="activetimetab(3, '本月')">本月</view>
</view>
<view class="tiempickzidingyi" @click="activetimetab(5)">
<text v-if="Datesicing.length==0">自定义时间:请选择</text>
@@ -162,6 +162,7 @@ export default {
keywordIds:'',
type:0,
customerId: '', // 点击那一项的customerId
showFillterText: '近一周',
};
},
onLoad(options) {
@@ -312,6 +313,7 @@ export default {
this.tadelist=[...this.tadelist, ...data.results];
this.totalpage=data.totalRecord;
}
this.$forceUpdate()
})
},
//获取三级
@@ -360,6 +362,7 @@ export default {
//自定义时间确认
totalTimeChange(e){
this.Datesicing=e.startDate+'至'+e.endDate;
this.showFillterText = '自定义'
this.starttime=e.startDate;
this.endoftime=e.endDate;
this.activetime=this.Inthemiddletime;
@@ -369,11 +372,12 @@ export default {
this.Accesstolevel()
},
//时间选择
activetimetab(index){
activetimetab(index, text){
if(index==5){
this.Inthemiddletime=index;
this.totalTimeShow=!this.totalTimeShow;
}else{
this.showFillterText = text
this.Datesicing='';
this.activetime=index;
this.tadelist=[]


+ 12
- 1
pages/center/Piabodata/Groupcontrast.vue View File

@@ -208,6 +208,10 @@
<!-- 选择项目 -->
<u-select v-model="staffShow" :list="staffList" @confirm="staffSelectCallback" :default-value='selindex'>
</u-select>


<!-- 加载组件 -->
<loading v-model="LOADING"></loading>
</view>
</template>

@@ -215,7 +219,11 @@
var app = getApp();
var util = require("../../../utils/util.js");
var config = require("../../../config");
import loading from "@/components/loading/index.vue"
export default {
components: {
loading
},
data() {
return {
activeTotal: 4,
@@ -312,6 +320,7 @@
};
},
onLoad() {
this.LOADING = true
let that = this
uni.$on('updateGroup', function(data) {
console.log(data)
@@ -354,7 +363,6 @@
this.getdata()
// console.log(this.staffList,this.staffList,this.houseId)
})

},
//指标执行率分析tab
tapspagek2(index) {
@@ -437,6 +445,7 @@
lastStartDate: this.lastStartDate
})
.then(res => {
this.LOADING = false
// console.log(res,123)
// 处理数据
// return
@@ -467,6 +476,8 @@
this.opts.extra.radar.max = max + 25
this.chartData = allobj
this.$forceUpdate()
}).catch(e => {
this.LOADING = false
})
},
//自定义时间


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

@@ -120,10 +120,17 @@
</u-select>
<u-select v-model="staffShow1" :list="staffList1" @confirm="staffSelectCallback" :default-value='selindex'>
</u-select>
<!-- 加载组件 -->
<loading v-model="LOADING"></loading>
</view>
</template>
<script>
import loading from "@/components/loading/index.vue"
export default {
components: {
loading
},
data() {
return {
timepickpickisshow: true,
@@ -218,6 +225,7 @@
},

onLoad(option) {
this.LOADING = true
// 获取项目id
this.houseId = uni.getStorageSync('buildingID').id;
// 请求接口获取所有置业顾问员工的列表
@@ -459,6 +467,7 @@
lastStartDate: this.lastStartDate
})
.then(res => {
this.LOADING = false
// console.log(res)
let first = res.first
let second = res.second
@@ -499,6 +508,8 @@
}
this.opts.extra.radar.max = max + 25

}).catch(e => {
this.LOADING = false
})
},
tabtimetap(index) {


+ 13
- 0
pages/center/Piabodata/Theteamcompared.vue View File

@@ -256,6 +256,11 @@
</u-select>
<u-select v-model="staffShow1" :list="staffList1" @confirm="staffSelectCallback" :default-value='selindex'>
</u-select>
<!-- 加载组件 -->
<loading v-model="LOADING"></loading>
</view>
</template>

@@ -263,7 +268,11 @@
var app = getApp();
var util = require("../../../utils/util.js");
var config = require("../../../config");
import loading from "@/components/loading/index.vue"
export default {
components: {
loading
},
data() {
return {
activeTotal: 4,
@@ -455,6 +464,7 @@
},

onLoad() {
this.LOADING = true
let that = this
uni.$on('update', function(data) {
// console.log(data)
@@ -818,6 +828,7 @@
lastStartDate: this.lastStartDate
})
.then(res => {
this.LOADING = false
// console.log(res)
// 处理数据
this.chartData1 = {
@@ -899,6 +910,8 @@
// console.log(allobj)
this.chartData1 = allobj
this.$forceUpdate()
}).catch(e => {
this.LOADING = false
})
},
// 定义一个公共方法对数据进行处理


+ 17
- 16
pages/center/Piabodata/TrendAnalysis.vue View File

@@ -221,12 +221,21 @@
<u-calendar v-model="totalTimeShow" mode="range" @change="totalTimeChange"></u-calendar>
<newcalendar v-model="totalTimeShow2" :planNum='intervaltime' mode="date" @change="totalTimeChange2">
</newcalendar>
<!-- 加载组件 -->
<loading v-model="LOADING"></loading>
</view>

</template>
<script>
import newcalendar from '@/components/newcalendar/newcalendar.vue';
import loading from "@/components/loading/index.vue"
export default {
components: {
newcalendar,
loading
},
data() {
return {
selindexList: [0], // 默认选中第一项
@@ -322,10 +331,8 @@
};

},
components: {
newcalendar
},
onLoad(option) {
this.LOADING = true
this.pamect.houseId = uni.getStorageSync('buildingID').id;
this.init()
@@ -472,7 +479,13 @@
this.aboutEecondary()
}
}
});
setTimeout(() => {
this.LOADING = false
}, 1500)
}).catch(e => {
this.LOADING = false
})
},
//起始时间
totalTimeChange(e) {
@@ -589,18 +602,6 @@
this.guwenshow = false;
this.Selectlevel = false;
this.Selecttuandui = false;
// this.tableDate = []
// this.pamect.showStatus = 0;
// this.pamect.timeType = "4";
// this.pamect.firstStartDate = '';
// this.pamect.firstEndDate = '';
// this.pamect.lastStartDate = '';
// this.pamect.lastEndDate = '';
// this.pamect.accountId = '';
// this.pamect.marketingId = '';
// this.pamect.deptId = ""
// this.activeTotal = 0;
this.timepickpickisshow = false;
this.init()

if (index == 1) {


+ 18
- 6
pages/center/Piabodata/Userinsightinto.vue View File

@@ -89,6 +89,10 @@

<u-calendar v-model="totalTimeShow" mode="range" @change="totalTimeChange"></u-calendar>
<u-back-top :scroll-top="scrollTop"></u-back-top>
<!-- 加载组件 -->
<loading v-model="LOADING"></loading>
</view>
</template>

@@ -96,7 +100,11 @@
var app = getApp();
var util = require("../../../utils/util.js");
var config = require("../../../config");
import loading from "@/components/loading/index.vue"
export default {
components: {
loading
},
data() {
return {
scrollTop: 0,
@@ -120,6 +128,7 @@
this.scrollTop = e.scrollTop;
},
onLoad(e) {
this.LOADING = true
this.buildingID=uni.getStorageSync('buildingID').id;
if (e.activeTotal) {
this.activeTotal = e.activeTotal
@@ -147,11 +156,11 @@
});
}else if(i==2){
uni.navigateTo({
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal='+this.activeTotal+'&markAdvisor=1'+'&staTime='+this.timeobj.statDateStart+'&endtime='+this.timeobj.statDateEnd
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal='+this.activeTotal+'&markAdvisor=1&validInvalid=0'+'&staTime='+this.timeobj.statDateStart+'&endtime='+this.timeobj.statDateEnd
});
}else{
uni.navigateTo({
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal='+this.activeTotal+'&markAdvisor=0'+'&staTime='+this.timeobj.statDateStart+'&endtime='+this.timeobj.statDateEnd
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal='+this.activeTotal+'&markAdvisor=0&validInvalid=0'+'&staTime='+this.timeobj.statDateStart+'&endtime='+this.timeobj.statDateEnd
});
}
},
@@ -185,10 +194,11 @@
houseId:this.buildingID
}
this.$u.post("/matchKeywords/findmatchdata", parames).then(data => {
this.numlist.push({
name:"有效接待",
num:data.total
})
this.LOADING = false
// this.numlist.push({
// name:"有效接待",
// num:data.total
// })
this.efficient = data.total
this.markCount = data.markCount
this.noMarkCount = data.noMarkCount
@@ -243,6 +253,8 @@
citem.isshow=false
}
})
}).catch(e => {
this.LOADING = false
})
},
//查看


+ 22
- 8
pages/center/Piabodata/index.vue View File

@@ -97,8 +97,10 @@
<view class="title1">团队接待趋势</view>
<view class="title2">
<view class="title2-che" style="width: 220rpx;display: flex;align-items: center;">
<text style="flex-grow: 1;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">{{team.label}}</text>
<image style="flex-shrink: 0;" class="righttochoose" src="../../../static/images/righttochoose.png" mode=""></image>
<text
style="flex-grow: 1;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">{{team.label}}</text>
<image style="flex-shrink: 0;" class="righttochoose"
src="../../../static/images/righttochoose.png" mode=""></image>
</view>

</view>
@@ -208,6 +210,12 @@
:default-value='selindex'></u-select>
<u-select v-model="staffShow1" :list="teamList" @confirm="staffSelectCallback($event,1)"
:default-value='selindex'></u-select>




<!-- 加载组件 -->
<loading v-model="LOADING"></loading>
</view>
</template>

@@ -215,7 +223,11 @@
var app = getApp();
// var util = require("../../../utils/util.js");
var config = require("../../../config");
import loading from "@/components/loading/index.vue"
export default {
components: {
loading
},
data() {
return {
activeTotal: 4,
@@ -252,12 +264,11 @@
totalTimeShow: false,
activeTab: 0,

numlist: [
{
numlist: [{
name: '接待量',
num: '',
setName: 'sumCustomer'
},{
}, {
name: '有效接待',
num: '',
setName: 'receptionCount'
@@ -294,8 +305,7 @@
},
newlistoj: [],

newlistoj1: [
{
newlistoj1: [{
name: "接待量",
id: 3,
title: '单位(个)',
@@ -351,6 +361,7 @@
};
},
onShow() {
this.LOADING = true
// 获取项目id
this.houseId = uni.getStorageSync('buildingID').id;
// 获取数据看板
@@ -452,6 +463,7 @@
lastStartDate: this.lastStartDate
})
.then(res => {
this.LOADING = false
// console.log(res)
// 处理销奖维度执行率
// this.newlisttabinfo
@@ -470,6 +482,8 @@
this.newlisttabinfo = arr
this.allList = res.list
this.tapspagek3(this.bocindex1)
}).catch(e => {
this.LOADING = false
})
},
// 获取简报
@@ -750,4 +764,4 @@
.grid:nth-child(3) {
border-right: none;
}
</style>
</style>

+ 697
- 0
pages/center/Piabodata/requireminingAnalysis.vue View File

@@ -0,0 +1,697 @@
<template>
<view class="box">
<!-- 选择器 -->
<view class="boxtittab">
<view class="tabbox" @click="timeshow=true">
{{ time }}
<u-icon name="arrow-down" size="24" style="padding-left: 12rpx;"></u-icon>
</view>
<view class="tabbox" @click="deptshow=true">
{{ dept}}
<u-icon name="arrow-down" size="24" style="padding-left: 12rpx;"></u-icon>
</view>
<view class="tabbox" @click="guwenshow=true">
{{ guwen}}
<u-icon name="arrow-down" size="24" style="padding-left: 12rpx;"></u-icon>
</view>
<!-- <view class="tabbox" @click="taptimetuisshow">
{{ huashu}}
<u-icon name="arrow-down" size="24" style="padding-left: 12rpx;"></u-icon>
</view> -->
<!-- <view class="tabbox" @click="screenshow">
更多筛选<u-icon name="arrow-down" size="24" style="padding-left: 12rpx;"></u-icon>
</view> -->
</view>
<view style="width: 100%;height: 20rpx;background: #FAFAFA;"></view>
<view class="boxzonglan" style="min-height: 400rpx;">
<view class="zonglantitle">简报 <text @click="showDesc=true">统计说明</text></view>
<view class="zonglanbox">
<view class="grid" style="height: auto;" v-for="(item,index) in numlist" :key="index">
<view class="audonum">{{item.name}}</view>
<view class="num">{{item.firstnum||0}}</view>
<view class="bottom">
<view class="leftnum">对比:{{item.endnum||0}}</view>
<view class="rightnum" :class="item.duibinum>0?'red':'green'">{{item.duibinum||0}}
<image v-if="item.duibinum>0" src="https://static.quhouse.com/c4145f84cc3c49769ee2ec11465c085b.png" mode="" />
<image v-else src="https://static.quhouse.com/c5dbf780e09a4da0b0bab2d7fa58accd.png" mode="" />
</view>
</view>
</view>
</view>
</view>
<!-- 统计说明 -->
<view class="black-bg" v-if="showDesc" >
<view class="tongjiDesc">
<view class="tongji-title">统计说明</view>
<view class="text">
<view><text class="bold">平均需求挖掘率:</text>筛选时间内,有效接待中已标记顾问的需求挖掘执行率的平均值;</view>
<view><text class="bold">未标记:</text>筛选时间内,有效接待中未标记顾问的接待数;</view>
<view><text class="bold">有效接待:</text>筛选时间内,标记为有效的接待数,不包含待接单;</view>
<view><text class="bold">未挖掘需求数:</text>筛选时间内,需求挖掘平均执行率未0 的需求数;</view>
</view>
</view>
<view class="close" @click="showDesc=false">X</view>
</view>
<view style="width: 100%;height: 20rpx;background: #FAFAFA;"></view>
<view class="single">
<view class="title">
<view class="title1">平均需求挖掘率趋势</view>
</view>
<view class="uchaserbox">
<qiun-data-charts type="line" :chartData="lineOptsect" :opts="lineOpts" background="none"
:ontouch="true" canvasId="wangxiaohuaerlingilingwuyiba1" :canvas2d="true" />
</view>
</view>
<view style="width: 100%;height: 20rpx;background: #FAFAFA;"></view>
<view class="single">
<view class="title">
<view class="title1">平均需求挖掘分布</view>
</view>
<view class="uchaserbox">
<qiun-data-charts
type="ring"
:chartData="ringChartData"
:canvas2d="true"
:canvasId="ChartBoxIdwangxiaohuaerlingilingwuyiba1"
:opts='opts'
background="none" />
</view>
</view>
<view style="width: 100%;height: 20rpx;background: #FAFAFA;"></view>
<view class="single">
<view class="title">
<view class="title1">需求挖掘排名</view>
</view>
<view class="tabdada">
<view class="tabth">
<view>排名</view>
<view>需求类型/挖掘执行接待数</view>
<view>执行率</view>
<view>操作</view>
</view>
<view v-if="total==0" style="color: #999999;width: 100%;height: 500rpx;line-height: 500rpx;text-align: center;" >暂无数据</view>
<view class="tabtd" v-for="(item,i) in sortList" :key="i">
<view>
<image v-if="i==0" class="ranking" src="../../../static/images/ranking1.png" mode=""></image>
<image v-else-if="i==1" class="ranking" src="../../../static/images/ranking2.png" mode=""></image>
<image v-else-if="i==2" class="ranking" src="../../../static/images/ranking3.png" mode=""></image>
<view class="ranking1" v-else>{{i+1}}</view>
</view>
<view class="u-line-1">{{item.name}}({{item.selected}})</view>
<view>{{item.fraction}}%</view>
<view @click="Toview(item,i)">查看</view>
</view>
</view>
</view>
<u-popup v-model="timeshow" mode="bottom">
<view class="timeview" :style="{ color: activeTotal == 4 ? '#2B6EFF' : '#333333' }"
@click="tabtimetap(4, '近7天')">
近7天</view>
<view class="timeview" :style="{ color: activeTotal == 5 ? '#2B6EFF' : '#333333' }"
@click="tabtimetap(5, '近15天')">
近15天</view>
<view class="timeview" :style="{ color: activeTotal == 6 ? '#2B6EFF' : '#333333' }"
@click="tabtimetap(6, '近30天')">
近30天</view>
<view class="timeview" :style="{ color: activeTotal == 3 ? '#2B6EFF' : '#333333' }" @click="tabtimetap(3,'自定义')">
自定义</view>
</u-popup>
<u-calendar v-model="calendarShow" mode="range" @change="calendarTimeChange"></u-calendar>
<u-select v-model="guwenshow" :list="staffList" @confirm="staffSelectCallback($event,0)"
:default-value='selindex'></u-select>
<u-select v-model="deptshow" :list="teamList" @confirm="staffSelectCallback($event,1)"
:default-value='selindex'></u-select>
<!-- 加载组件 -->
<loading v-model="LOADING"></loading>
</view>
</template>

<script>
var app = getApp();
var config = require("../../../config");
import loading from "@/components/loading/index.vue"
export default {
components: {
loading
},
data() {
return {
selindex: '',
guwenshow: false,
timeshow: false,
selectshow: false,
deptshow: false,
deptVal: '',
guwenVal: '',
// 筛选文字展示
time: '近7天',
dept: '部门',
guwen: '顾问',
huashu: '话术',
showDesc: false,
sortList: [],
ringChartData: {
},
// ring图 分布图
opts: {
rotate: false,
rotateLock: false,
color: ["#1890FF","#91CB74","#FAC858","#EE6666"],
padding: [5,5,5,5],
dataLabel: true,
legend: {
show: true,
position: "right",
lineHeight: 25
},
title: {
name: "",
fontSize: 15,
color: "#666666"
},
subtitle: {
name: "",
fontSize: 25,
color: "#7cb5ec"
},
extra: {
ring: {
ringWidth: 60,
activeOpacity: 0.5,
activeRadius: 10,
offsetAngle: 0,
labelWidth: 15,
border: false,
borderWidth: 3,
borderColor: "#FFFFFF"
}
}
},
activeTotal: 4,
houseId: '',
// 员工列表
staffList: [],
// 团队列表
teamList: [],
team: {
value: '',
label: ''
},
startDate: '',
endDate: '',
calendarShow: false,
activeTab: 0,
numlist: [{
name: '平均需求挖掘率',
firstnum: '',
endnum: '',
duibinum: '',
setName: 'wordFraction'
}, {
name: '未挖掘需求',
firstnum: '',
endnum: '',
duibinum: '',
setName: 'noFinishWord'
},
{
name: '有效接待',
firstnum: '',
endnum: '',
duibinum: '',
setName: 'activeCustomer'
},
{
name: '未标记',
firstnum: '',
endnum: '',
duibinum: '',
setName: 'markAdvisor'
},
],
lineOptsect: {
"categories": [],
"series": [{
"name": "第一段",
"data": []
},{
"name": "第二段",
"data": []
}
]
},
Theteamcomparedisshow: false,
Groupcontrastisshow: false,
allList: [],
lineOpts: {
yAxis: {
data: [{
max: 100,
min: 0,
}]
}
},
};
},
onShow() {
// this.LOADING = true
// 获取项目id
this.houseId = uni.getStorageSync('buildingID').id;
// 获取员工
this.getStaffList()
// 获取团队
this.getSectionList()
this.getdata()
},
onReady: function(){
this.getRingData()
},
onPullDownRefresh() {
},
methods: {
getdata(){
// 需求挖掘分析-简报
this.wordMiningAnalyze()
// 挖掘趋势图
this.getwordMiningAnalyzePercentage()
//需求挖掘排行
this.getwordMiningRank()
// 需求挖掘f分布图
this.getRingData()
},
// 需求挖掘排行
getwordMiningRank(){
this.$u.post('/cusLvStatistics/wordMiningRank', {
houseId: this.houseId,
deptId: this.deptVal,
createUser: this.guwenVal,
"dateType":this.activeTotal,
"firstStartDate":!this.activeTotal?this.startDate:'',
"firstEndDate":!this.activeTotal?this.endDate:''
})
.then(res => {
console.log(res)
if(res.length){
this.sortList = res.map(item=>{
return {
name: item.name,
id: item.id,
fraction: item.fraction,
selected: item.selected
}
})
}
})
},
// 需求挖掘分布图
getRingData(){
this.$u.post('/cusLvStatistics/wordMiningAnalyzeFenbu', {
houseId: this.houseId,
deptId: this.deptVal,
createUser: this.guwenVal,
"firstStartDate":!this.activeTotal?this.startDate:'',
"firstEndDate":!this.activeTotal?this.endDate:'',
"dateType":this.activeTotal
})
.then(res => {
console.log(res)
this.ringChartData = { series: [
{
data: [
{"name":"30%以下","value":res.a},
{"name":"30%~50%","value":res.b},
{"name":"50%~70%","value":res.c},
{"name":"70%以上","value":res.d},
]
}
]}
})
},
Toview(){
//跳转到接待记录
uni.navigateTo({
url: '/pages/center/records/index'
});
},
// 需求挖掘分析-简报
wordMiningAnalyze() {
let params = {
"houseId":this.houseId,
deptId: this.deptVal,
createUser: this.guwenVal,
"dateType": this.activeTotal,
"firstStartDate":!this.activeTotal?this.startDate:'',
"firstEndDate":!this.activeTotal?this.endDate:''
}
this.$u.post("/cusLvStatistics/wordMiningAnalyze",params).then(res => {
// console.log(res.contrast)
res.contrast.wordFraction = (res.contrast.wordFraction || 0) + '%'
this.numlist.forEach(item => {
item.duibinum = res.contrast[item.setName]
item.endnum = res.end[item.setName]
item.firstnum = res.first[item.setName]
})
})
},
// 获取员工列表
getStaffList() {
this.$u.post('/cusLvStatistics/selectAllAccountIdByHouseId', {
houseId: this.houseId
})
.then(res => {
// console.log(res)
if(res.length){
this.staffList = res.map(item => {
return {
label: item.name,
value: item.accountId
}
})
}
})
},
// 需求挖掘率趋势图
getwordMiningAnalyzePercentage() {
this.$u.post('/cusLvStatistics/wordMiningAnalyzePercentage', {
houseId: this.houseId,
deptId: this.deptVal,
createUser: this.guwenVal,
"dateType": this.activeTotal,
"firstStartDate":!this.activeTotal?this.startDate:'',
"firstEndDate":!this.activeTotal?this.endDate:''
})
.then(res => {
let categories1 = []
let categories2 = []
if(res.first&&res.first.length){
categories1 = res.first.map(item=> item.statDate.substring(0,10))
this.lineOptsect.series[0].data=res.first.map(item=> item.wordFraction)
}else{
categories1= []
this.lineOptsect.series[0] = []
}
if(res.end&&res.end.length){
this.lineOptsect.series[1].data=res.end.map(item=> item.wordFraction)
categories2 = res.end.map(item => item.statDate.substring(0,10))
}else{
categories2 = []
}
let categories3 =[]
categories1.forEach(item1=>{
categories2.forEach(item2=>{
categories3.push(item1+ '/' + item2)
})
})
this.lineOptsect.categories = categories3
console.log(this.lineOptsect.categories)
})
},
// 获取团队列表
getSectionList() {
this.$u.post('/cusLvStatistics/findAllDeptIdByHouseId', {
houseId: this.houseId
})
.then(res => {
this.teamList = []
if(res.length){
this.teamList = res.map(item=> {
return {
label: item.deptName,
value: item.deptId
}
})
}
})
},
//时间切换
tabtimetap(index, text) {
if (index == 3) {
this.calendarShow = true;
this.activeTotal = null
} else {
this.activeTotal = index;
this.endDate = ''
this.startDate = ''
this.time = text
this.getdata()
}
this.timeshow = false
},
staffSelectCallback(e, idx) {
if (idx == 0) {
this.guwenVal = e[0].value
this.guwen = e[0].label
} else { // 部门
this.dept = e[0].label
this.deptVal = e[0].value
}
this.getdata()

},
//自定义时间
calendarTimeChange(e) {
// console.log(e.startDate, e.endDate)
this.activeTotal = null;
this.endDate = e.endDate
this.startDate = e.startDate
this.time = '自定义'
this.getdata()
}
}
};
</script>
<style lang="scss" scoped>
.box {
width: 100%;
height: 100%;
background: #FAFAFA;
}
//时间切换的样式
.boxtittab {
position: sticky;
top: var(--window-top);
z-index: 999;
width: 100;
height: 92rpx;
background: #FFFFFF;
border: 1px solid #E0E0E0;
display: flex;
align-items: center;

.tabbox {
flex: 1;
height: 100%;
text-align: center;
line-height: 92rpx;
color: #666666;
font-size: 28rpx;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
/* 将对象作为弹性伸缩盒子模型显示 */
-webkit-line-clamp: 1;
/* 控制最多显示几行 */
-webkit-box-orient: vertical;
/* 设置或检索伸缩盒对象的子元素的排列方式 */
}
}
.timeview {
height: 80rpx;
line-height: 80rpx;
width: 100%;
text-align: center;
border-bottom: 1px solid #F8F8F8;
}
.black-bg{
position: fixed;
background: rgba(0,0,0,0.6);
left: 0;
right: 0;
top: 0;
bottom: 0;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
z-index: 9999;
.tongjiDesc{
width: 80%;
background: #FFFFFF;
border-radius: 4rpx;
padding: 30rpx;
}
.close{
background: #fff;
border-radius: 50%;
width: 80rpx;
height: 80rpx;
margin-top: 30rpx;
display: flex;
justify-content: center;
align-items: center;
}
.tongji-title{
text-align: center;
font-size: 30rpx;
margin-bottom: 20rpx;
}
.text view{
margin-bottom: 24rpx;
}
.bold{
font-weight: bold;
}
}
.grid:nth-child(1) {
border-right: none;
border-bottom: none;
}

.grid:nth-child(2) {
border-bottom: none;
}

.grid:nth-child(3) {
border-right: none;
}
.grid .bottom{
display: flex;
align-items: center;
padding-left: 20rpx;
margin: 10rpx 0 20rpx;
.leftnum{
height: 36rpx;
font-size: 26rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #666666;
line-height: 36rpx;
margin-right: 20rpx;
}
.rightnum{
height: 36rpx;
font-size: 26rpx;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
color: #666;
line-height: 36rpx;
display: flex;
align-items: center;
&.red{
color: #E6273A;
}
&.green{
color: #43CD80;
}
image{
width: 18rpx;
height: 14rpx;
margin-left: 6rpx;
}
}
}
.zonglantitle{
display: flex;
justify-content: space-between;
align-items: center;
text{
color: #666666;
}
}

.uchaserbox{
width: 100%;
height: 500rpx;
}
.tabdada {
width: 100%;
height: 580rpx;
overflow-y: auto;
padding-bottom: 20rpx;
.tabth {
width: 100%;
height: 28rpx;
display: flex;
font-size: 28rpx;
line-height: 28rpx;
color: #666666;
margin-top: 28rpx;
}

.tabth>view:nth-of-type(1) {
width: 10%;
text-align: center;
}

.tabth>view:nth-of-type(2) {
width: 46%;
text-align: center;
}

.tabth>view:nth-of-type(3) {
width: 22%;
text-align: center;
}

.tabth>view:nth-of-type(4) {
width: 22%;
text-align: center;
}

.tabtd {
width: 100%;
height: 30rpx;
display: flex;
font-size: 26rpx;
line-height: 30rpx;
margin-top: 32rpx;
}

.tabtd>view:nth-of-type(1) {
width: 10%;
text-align: center;
line-height: 30rpx;
}

.tabtd>view:nth-of-type(2) {
width: 46%;
max-width: 400rpx;
text-align: center;
color: #333333;
}

.tabtd>view:nth-of-type(3) {
width: 22%;
text-align: center;
color: #333333;
}

.tabtd>view:nth-of-type(4) {
width: 22%;
text-align: center;
color: #2671E2;
}

.ranking {
width: 34rpx;
height: 34rpx;
}
.ranking1 {
width: 30rpx;
height: 30rpx;
background: #ECF1FF;
color: #424D64;
font-size: 18rpx;
text-align: center;
line-height: 30rpx;
border-radius: 50%;
margin: 0 auto;
}

.tabech {
width: 100%;
height: 600rpx;
}
}
</style>

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


+ 17
- 4
pages/center/consumer/index.vue View File

@@ -72,14 +72,17 @@

</view>
<view class="content-sec-lab">
顾问姓名:<view class="content-sec-lab1">{{item.agentName}}</view>
顾问姓名:<view class="content-sec-lab1">{{item.agentName||'--'}}</view>
</view>
<view class="content-sec-lab">
需求挖掘:<view class="content-sec-lab1">{{item.wordFraction||0}}%</view>
</view>
<view class="content-sec-lab">
添加时间:<view class="content-sec-lab1">{{item.createTime}}</view>
</view>
<view class="content-sec-num">
<view class="">{{item.visitRecord || '--'}}次到访</view>
<view class="">{{item.fraction || '0'}}% | {{item.mm || '0'}}<text
<view class="">{{item.fraction || 0}}% | {{item.mm || 0}}<text
style="font-size: 24rpx;">min</text></view>
</view>
</view>
@@ -246,11 +249,18 @@
</u-popup>

<u-select v-model="soltishow" :list="orderBylist" @confirm="selectCallback2"></u-select>

<!-- 加载组件 -->
<loading v-model="LOADING"></loading>
</view>
</template>

<script>
import loading from "@/components/loading/index.vue"
export default {
components: {
loading
},
data() {
return {
orderBylist: [{
@@ -367,6 +377,7 @@
}
},
onLoad(options) {
this.LOADING = true
this.isnorefresh = options.refresh;
},
onShow() {
@@ -577,8 +588,8 @@
// }
this.userInfo = uni.getStorageSync('weapp_session_userInfo_data');
this.$u.post("/customer/customerManagement", parames).then(data => {
if(this.staTime && this.endtime) {
this.LOADING = false
if (this.staTime && this.endtime) {
this.arriveFilter = `${this.staTime}-${this.endtime}`
}
var list = data.results || [];
@@ -606,6 +617,8 @@
}
this.totalRecord = data.totalPage;
this.totalRecords = data.totalRecord;
}).catch(e => {
this.LOADING = false
})
},
//获取顾问列表


+ 16
- 4
pages/center/prohibited/index.vue View File

@@ -80,11 +80,19 @@
<u-select v-model="soltishow" :list="orderBylist" @confirm="selectCallback2"></u-select>

<u-select v-model="showIdent" :list="identList" @confirm="selectIdent"></u-select>


<!-- 加载组件 -->
<loading v-model="LOADING"></loading>
</view>
</template>

<script>
import loading from "@/components/loading/index.vue"
export default {
components: {
loading
},
data() {
return {
orderBylist: [{
@@ -173,6 +181,7 @@
}
},
onLoad(options) {
this.LOADING = true
this.isnorefresh = options.refresh;
if (options.activeTotal) {
this.activeTotal = options.activeTotal
@@ -331,18 +340,18 @@
let newobj = res[0];

let obj = {
pageSize: index+1,
pageSize: index + 1,
num: this.totalRecords,
query: {
...this.nextPageObj
}
}
uni.setStorageSync('nextPageObj', JSON.stringify(obj))
uni.navigateTo({
url: `/pages/center/prohibited/details?customerId=${newobj.customerId}&status=${newobj.status}&stateisshow=${"2"}&index=${index}&isMerge=${res[0].merge}`
})
// if (res[0].merge == 0) {
// }
// else {
@@ -387,6 +396,7 @@
}

this.$u.post("/customer/findbypage", parames).then(data => {
this.LOADING = false
var list = data.results || [];
if (this.isRefresh) {
this.recordList = list;
@@ -396,6 +406,8 @@
this.totalRecord = data.totalPage;
this.totalRecords = data.totalRecord;
this.nextPageObj = parames.query
}).catch(e => {
this.LOADING = false
})
},
//获取顾问列表
@@ -444,7 +456,7 @@
}
return str
},
// DisposeStatus
DisposeStatus(status) {
let str = '';


+ 23
- 5
pages/center/records/index.vue View File

@@ -78,10 +78,12 @@
<view class="arriveNum">第{{item.visitRecord || "--"}}次接待</view>
</view>
<view class="right">
<!-- {{item.fraction || '0'}}% | {{item.fraction || '0'}}分 -->
{{item.fraction || '0'}}%
</view>
</view>
<view class="content-last">
需求挖掘:{{item.wordFraction|| 0}}%
</view>
<view class="content-last">
{{item.createTime}} | {{item.mm || '0'}} min
</view>
@@ -101,7 +103,7 @@
<image class="screen-sel-img" src="../../../static/images/right.png" mode=""></image>
</view>
</view>
<!-- <view class="screen-counselor">
<!-- <view class="screen-counselor">
<view class="screen-text">
客户阶段
</view>
@@ -205,7 +207,8 @@
<view class="timeview" :style="{ color: activeTotal == 3 ? '#2B6EFF' : '#333333' }"
@click="tabtimetap(3, '近30天')">
近30天</view>
<view class="timeview" :style="{ color: activeTotal == 4 ? '#2B6EFF' : '#333333' }" @click="tabtimetap(4, '')">
<view class="timeview" :style="{ color: activeTotal == 4 ? '#2B6EFF' : '#333333' }"
@click="tabtimetap(4, '')">
自定义</view>
</u-popup>
<u-popup v-model="timetushow" mode="bottom">
@@ -229,11 +232,18 @@
90min以上</view>
</u-popup>
<u-select v-model="soltishow" :list="orderBylist" @confirm="selectCallback2"></u-select>

<!-- 加载组件 -->
<loading v-model="LOADING"></loading>
</view>
</template>

<script>
import loading from "@/components/loading/index.vue"
export default {
components: {
loading
},
data() {
return {
orderBylist: [{
@@ -331,6 +341,7 @@
}
},
onLoad(options) {
this.LOADING = true
this.isnorefresh = options.refresh;
if (options.activeTotal) {
this.activeTotal = options.activeTotal
@@ -343,7 +354,7 @@
}
if (options.staTime) {
this.staTime = options.staTime;
this.endtime = options.endtime;
this.endtime = options.endtime + ' 23:59:59';
}

},
@@ -424,6 +435,7 @@
this.$u.post("/customer/lifeTrackDefineList", {
houseId: this.buildingID
}).then(res => {
this.LOADING = false
let tempArr = []
res.forEach(item => {
let tempObj = {}
@@ -517,6 +529,7 @@
var item = {
bg: 0,
customerId: item.id,
wordFraction: item.wordFraction
}
uni.setStorageSync("searchobj", item); //写入缓存
uni.setStorageSync("entrance", 1); //写入缓存
@@ -537,7 +550,7 @@
let newobj = res[0];
if (res[0].merge == 0) {
uni.navigateTo({
url: `/pages/mine/details2?customerId=${newobj.customerId}&status=${newobj.status}&stateisshow=${"2"}`
url: `/pages/mine/details2?customerId=${newobj.customerId}&status=${newobj.status}&stateisshow=${"2"}&wordFraction=${item.wordFraction}`
})
} else {
uni.navigateTo({
@@ -555,6 +568,8 @@
let orderBy = 0;
if (this.activeTotal == 5) {
dateType = null;
} else if (this.activeTotal == 3) {
dateType = null;
} else if (this.activeTotal == 4) {
dateType = null;
} else {
@@ -594,6 +609,7 @@
parames.query.agentId = this.screen.agentId
}
this.$u.post("/customer/findbypage", parames).then(data => {
this.LOADING = false
if (this.staTime && this.endtime) {
this.arriveFilter = `${this.staTime}-${this.endtime}`
}
@@ -605,6 +621,8 @@
}
this.totalRecord = data.totalPage;
this.totalRecords = data.totalRecord;
}).catch(e => {
this.LOADING = false
})
},
//获取顾问列表


+ 59
- 62
pages/index/customer.vue View File

@@ -43,9 +43,12 @@


</view>
<!-- checkAuthority('顾问指派顾问') -->
<view class="footer-button" v-if="item.status!=0">
<view class="footer1" @click.stop="addTime(item)">接待延时</view>
<view class="footer1" @click.stop="assign(item)">重新指派</view>
<template v-if="zhipai">
<view class="footer1" @click.stop="assign(item)">重新指派</view>
</template>
<template v-if="endReception">
<view class="footer3" @click.stop="changeEnd(item.id)">结束接待</view>
</template>
@@ -55,15 +58,21 @@
<view class="centerbox-che">手机号码:<text class="shizai">{{item.phone || "--"}}</text></view>
</view>
<view class="footer-button" v-if="item.status==0">
<view class="footer3" @click.stop="assign(item)">指派顾问</view>
<template v-if="zhipai">
<view class="footer3" @click.stop="assign(item)">指派顾问</view>
</template>
</view>

</view>
<image v-if="isAdd == 0 && (dataCode!=6||(dataCode==6&&addAccount==0))" @click="addreception()" class="add"
<image v-if="dataCode!=6||(dataCode==6&&addAccount==0)" @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 activeColor="#1296db" inactiveColor="#999999" v-model="current" :list="tabbarList"></u-tabbar>


<!-- 加载组件 -->
<loading v-model="LOADING"></loading>
</view>
</template>

@@ -71,36 +80,48 @@
var util = require("../../utils/util.js");
var config = require("../../config");
import tabbarList from '@/utils/tabbar.js'
import loading from "@/components/loading/index.vue"
export default {
components: {
loading
},
data() {
return {
noClick:true,
tabbarList:tabbarList,
noClick: true,
tabbarList: tabbarList,
current: 0,
buildingID: '',
waitCustomList: [],
isAdd: '',
dataCode: '',
addAccount: '',
endReception: true,
fdFlag:null
fdFlag: null
};
},
computed: {
zhipai() {
if (this.dataCode == 6) {
return this.checkAuthority('顾问指派顾问')
} else {
return true
}
}
},
components: {},
onLoad() {},
onShow() {
this.LOADING = true
this.buildingID = uni.getStorageSync('buildingID').id;
const {
addAccount,
dataCode
} = uni.getStorageSync("weapp_session_userInfo_data");
let menulist = uni.getStorageSync('weapp_session_Menu_data')
this.endReception = menulist.findIndex(item => { return item.name == '结束接待' }) != -1
this.endReception = menulist.findIndex(item => {
return item.name == '结束接待'
}) != -1
this.addAccount = addAccount;
this.dataCode = dataCode;
console.log(this.menulist)
this.init()
this.queryHaveDept()
this.updateInit()
},
methods: {
@@ -173,21 +194,16 @@
}

},
queryHaveDept() {
return new Promise((resolve, reject) => {
this.$u.get("/user/queryHaveDept?houseId=" + this.buildingID).then(res => {
this.isAdd = res;
resolve();
})
})
},
init() {
this.waitCustomList = []
let parames = {
itemId: this.buildingID
}
this.$u.post("/customer/reception", parames).then(data => {
this.LOADING = false
this.waitCustomList = data;
}).catch(e => {
this.LOADING = false
});
},
//延时接待
@@ -216,26 +232,26 @@
cancelColor: "#999999",
success: res => {
if (this.noClick) {
this.noClick= false;
if (res.confirm) {
if (res.confirm) {
this.$u.post("/customer/endReception", {
id: id,
houseId: this.buildingID
}).then(res => {
uni.showToast({
icon: "none",
title: "操作成功"
})
this.init();
});
}
}
setTimeout(()=> {
this.noClick= true;
}, 2000)
this.noClick = false;
if (res.confirm) {
if (res.confirm) {
this.$u.post("/customer/endReception", {
id: id,
houseId: this.buildingID
}).then(res => {
uni.showToast({
icon: "none",
title: "操作成功"
})
this.init();
});
}
}
setTimeout(() => {
this.noClick = true;
}, 2000)
} else {
// 这里是重复点击的判断
// 这里是重复点击的判断
}
}
})
@@ -255,29 +271,10 @@
});
return
}
if (this.waitCustomList.length == 0) {
uni.navigateTo({
url: '/pages/mine/reception/addreception'
})
return
} else {
for (var i = 0; i < this.waitCustomList.length; i++) {
if (this.waitCustomList[i].status == 1) {
uni.showLoading({
title: '当前还有未完成的客户项'
});
setTimeout(function() {
uni.hideLoading();
}, 1000);
return
} else {
uni.navigateTo({
url: '/pages/mine/reception/addreception'
})
return
}
}
}
uni.navigateTo({
url: '/pages/mine/reception/addreception'
});

} else {
uni.navigateTo({
url: '/pages/mine/reception/addreception'
@@ -439,7 +436,7 @@
width: 90upx;
height: 90upx;
position: fixed;
bottom:275upx;
bottom: 275upx;
right: 44upx;
}



+ 10
- 1
pages/index/guide.vue View File

@@ -1,7 +1,7 @@
<template>
<view class="boox">
<view class="title">
数智工牌
{{ isPuqiang ? "数智工牌" : "AI营销辅助"}}
</view>
<view class="booximg">
<!-- <image class="img" src="https://qufang.oss-cn-beijing.aliyuncs.com/zkgj/xcx/guidepage.png" mode=""></image> -->
@@ -52,6 +52,15 @@
pathur3:'/pages/center/prohibited/index',
};
},
computed: {
// 是否是普强小程序
isPuqiang() {
return config.service.host.indexOf('xitong.pachira.cn') == -1
},
},
onLoad(opts) {
this.name=opts.loginName ||'';
let stat=opts.path||'';


+ 311
- 222
pages/index/index.vue View File

@@ -4,7 +4,7 @@
<view class="Switching1">
<image class="Switching1-img" src="../../static/images/building.png" mode=""></image>
</view>
<view class="Switching2">项目:</view>
<view class="Switching2">{{ isPuqiang ? '项目' : '客户' }}:</view>
<view class="Switching3">{{buildingname}}</view>
<view class="Switching4" v-if="buildingishow" @click="piskbuilding()">切换项目</view>
</view>
@@ -60,7 +60,7 @@
</view>

<view class="title" v-if="equipmentisshow">设备</view>
<view class="shebenbox" v-if="equipmentisshow" >
<view class="shebenbox" v-if="equipmentisshow">
<view class="shebenche" @click="tapjumpequipment(0)">
<view class="shebenchenum">{{equipmentobj.totalNum || 0}}</view>
<view class="shebenchetext">设备总数</view>
@@ -90,7 +90,7 @@
</view>
</view> -->
<view class="real-timebox">
<view class="timebox">
<view class="real" @click="tapjumpreception('1')">
@@ -102,13 +102,13 @@
<view class="realtext">有效接待</view>
</view>
<view class="real" @click="tapjumpreception('2')">
<view class="realnum">{{realtimeobj.receivingCustomer || 0}}</view>
<view class="realnum">{{realtimeobj.receivingCustomer || 0}}</view>
<view class="realtext">正在接待</view>
</view>
<view class="real" @click="tapjumpreception('4')">
<view class="realnum">{{realtimeobj.tagCustomer || 0}}</view>
<view class="realtext">未标顾问</view>
</view>
</view>
</view>
<view class="timebox">
<view class="real" @click="tapjumpreception('auth')">
@@ -119,19 +119,18 @@
<view class="realnum">{{realtimeobj.fraction || 0}}%</view>
<view class="realtext">平均执行率</view>
</view>
<view class="real" >
<view @click="prohibitedtap(1)" v-if="methodsisshow==true" class="realnum" style="color: red;" >{{realtimeobj.prohibitedCustomer || 0}}</view>
<view @click="prohibitedtap(1)" v-if="methodsisshow==true" class="realtext">违禁预警</view>
<view class="real" @click="tapjumpreception('6')">
<view class="realnum">{{realtimeobj.wordFraction || 0}}%</view>
<view class="realtext">平均挖掘率</view>
</view>
<view class="real">
<view class="realnum"></view>
<view class="realtext"></view>
<view @click="prohibitedtap(1)" v-if="methodsisshow==true" class="realnum" style="color: red;">
{{realtimeobj.prohibitedCustomer || 0}}
</view>
<view @click="prohibitedtap(1)" v-if="methodsisshow==true" class="realtext">违禁预警</view>
</view>
</view>
</view>


<view class="title" style="display: flex;">
<view style="width: 55%;">概览</view>
@@ -143,7 +142,7 @@
</view>
<view class="real-timebox">
<view class="timebox">
<view class="real" @click="tapjumpreception('3')">
<view class="real" @click="tapjumpreception('3')">
<view class="realnum">{{Thisweekobj.receptionCount || 0}}</view>
<view class="realtext">接待量</view>
</view>
@@ -151,56 +150,43 @@
<view class="realnum">{{Thisweekobj.activeCustomer|| 0}}</view>
<view class="realtext">有效接待</view>
</view>
<view class="real" @click="tapjumpreception('333')">
<view class="realnum">{{Thisweekobj.fraction || 0}}%</view>
<view class="real" @click="tapjumpreception('333')">
<view class="realnum">{{Thisweekobj.fraction || 0}}%</view>
<view class="realtext">平均执行率</view>
</view>
</view>
<view class="timebox">
<view class="real" @click="tapjumpreception('333')">
<view class="real" @click="tapjumpreception('333')">
<view class="realnum">{{Thisweekobj.avgDuration|| 0}}</view>
<view class="realtext">平均接待时长</view>
</view>
<view class="real" @click="tapjumpreception('3')">
<view class="realnum">{{Thisweekobj.wordFraction || 0}}%</view>
<view class="realtext">平均挖掘率</view>
</view>
<view class="real" @click="prohibitedtap(2)" v-if="methodsisshow==true">
<view class="realnum" style="color: red;" >{{Thisweekobj.prohibitedCustomer || 0}}</view>
<view class="realnum" style="color: red;">{{Thisweekobj.prohibitedCustomer || 0}}</view>
<view class="realtext">违禁预警</view>
</view>
<view class="real" v-else>
<view class="realnum"></view>
<view class="realtext"></view>
</view>
<view class="real">
<view class="realnum"></view>
<view class="realtext"></view>
</view>
</view>
</view>

<view class="title">常用功能</view>
<view class="commonly-box">
<!-- 权限菜单控制显隐 因为后台添加的按钮权限并不会在此返回所以需要手动添加 showMenu -->
<view class="commonly" @click="Piabodata(item.name)" v-for="(item,index) in Menulist" :key="index" v-if="showMenu(item.name)">
<view class="commonly" @click="Piabodata(item.name)" v-for="(item,index) in Menulist" :key="index"
v-if="showMenu(item.name)">
<view class="commonly-img">
<image v-if="item.name=='客户管理'" class="commonly-img1" src="../../static/images/function1.png"
mode=""></image>
<image v-if="item.name=='接待记录'" class="commonly-img1" src="../../static/images/function2.png"
mode=""></image>
<image v-if="item.name=='销讲数据'" class="commonly-img1" src="../../static/images/function4.png"
mode=""></image>
<image v-if="item.name=='设备管理'" class="commonly-img1" src="../../static/images/function5.png"
mode=""></image>
<image v-if="item.name=='值班顾问'" class="commonly-img1" src="../../static/images/function6.png"
mode=""></image>
<image v-if="item.name=='顾问排名'" class="commonly-img1" src="../../static/images/rankingguwen.png"
mode=""></image>
<image v-if="item.name=='违禁记录'" class="commonly-img1" src="../../static/images/prohibited.png"
mode=""></image>
<image class="commonly-img1" :src="item.name | imgFilter" mode=""></image>
</view>
<view class="commonly-text">{{item.name}}</view>
</view>
</view>


<!-- 项目切换 -->
<view v-if="Showhiddenunits">
<u-select :mask-close-able="false" v-model="Showhiddenunits" mode="single-column" :list="lpanlist"
@@ -214,7 +200,7 @@
</view>
<view class="content">
<view class="tit">{{tit}}</view>
<u-parse class="ql-editor" :content="content" @preview="preview" @navigate="navigate"/>
<u-parse class="ql-editor" :content="content" @preview="preview" @navigate="navigate" />
<!-- <rich-text :nodes="content"></rich-text> -->
</view>
<view class="btn" @click="lookDetail">查看详情</view>
@@ -223,8 +209,8 @@
</view>
</view>
</view>
<!-- 加载组件 -->
<loading v-model="LOADING"></loading>
<u-tabbar activeColor="#1296db" inactiveColor="#999999" v-model="current" :list="tabbarList"></u-tabbar>
</view>
</template>
@@ -234,14 +220,20 @@
var util = require("../../utils/util.js");
import tabbarList from '@/utils/tabbar.js'
import uParse from '../../components/gaoyia-parse/parse.vue'
import loading from "@/components/loading/index.vue"
export default {
components: {
uParse,
loading
},

data() {
return {
id:"",
isShowUpdate:false,
tit:"",
content:"",
tabbarList:tabbarList,
id: "",
isShowUpdate: false,
tit: "",
content: "",
tabbarList: tabbarList,
current: 0,
userInfo: {},
Showhiddenunits: false,
@@ -270,7 +262,8 @@
prohibitedCustomer: '',
tagCustomer: '',
fraction: '',
receptionCount:''
wordFraction: '',
receptionCount: ''
},
Thisweekobj: {
sumCustomer: '',
@@ -279,38 +272,56 @@
prohibitedCustomer: '',
tagCustomer: '',
fraction: '',
receptionCount:''
wordFraction: '',
receptionCount: ''
},
methodsisshow:false,
zhixingcenterindex:2,
methodsisshow: false,
zhixingcenterindex: 2,
totalTimeShow: false,
statDateStart:'',
statDateEnd:'',
statDateStart: '',
statDateEnd: '',
needShow: ['客户管理', '接待记录', '销讲数据', '设备管理', '值班顾问', '顾问排名', '违禁记录'], // 权限配置需要展示出来的功能入口
};
},


computed: {
// 是否是普强小程序
showMenu() {
return name => {
if (name == '标记有效无效接待' || name == '结束接待' || name == '客户编辑') {
return false
} else {
if (this.needShow.findIndex(item => item == name) != -1) {
return true
} else {
return false
}
}
}
},
// 是否是普强小程序
isPuqiang() {
return config.service.host.indexOf('xitong.pachira.cn') == -1
},
},
components: {
uParse

onLoad() {
if (!this.isPuqiang) {
uni.setNavigationBarTitle({
title: 'AI营销辅助平台'
})
}
this.initPopup()
},


onShow() {
this.LOADING = true
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.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;
@@ -339,9 +350,10 @@
this.initrealTimeStatistics()
this.updateInit()
},

onPullDownRefresh() {
this.getMenu()
this.userInfo = uni.getStorageSync('weapp_session_userInfo_data');
if (this.userInfo.dataCode == 6 || this.userInfo.dataCode == 3) {
this.methodsisshow = false;
@@ -378,14 +390,16 @@
uni.stopPullDownRefresh()
}, 3000)
},
onLoad() {
this.initPopup()
},
methods: {
close(){
towajue(){
uni.navigateTo({
url: "/pages/center/Piabodata/requireminingAnalysis"
})
},
close() {
this.isShowUpdate = false;
},
lookDetail(){
lookDetail() {
let datas = {
id: this.id,
title: this.tit,
@@ -396,8 +410,8 @@
url: "../mine/messageDetail"
})
let data = {
id:this.id,
accountId:uni.getStorageSync('weapp_session_userInfo_data').accountId
id: this.id,
accountId: uni.getStorageSync('weapp_session_userInfo_data').accountId
}
uni.request({
url: config.service.updateRead,
@@ -413,7 +427,7 @@
})
this.isShowUpdate = false;
},
initPopup(){
initPopup() {
uni.request({
url: config.service.updatePopup,
method: "GET",
@@ -421,9 +435,9 @@
'content-type': 'application/json',
'Access-Token': uni.getStorageSync('weapp_session_login_data').token
},
data: {
},
success: (res) => {
this.first(res.data.data.id)
@@ -431,11 +445,11 @@
this.tit = res.data.data.title
this.aid = res.data.data.accountId
this.id = res.data.data.id
this.isShowUpdate = res.data.data.readFlag==0?true:false;
this.isShowUpdate = res.data.data.readFlag == 0 ? true : false;
}
})
},
first(id){
first(id) {
uni.request({
url: config.service.firstShowPopup,
method: "GET",
@@ -443,7 +457,9 @@
'content-type': 'application/json',
'Access-Token': uni.getStorageSync('weapp_session_login_data').token
},
data:{id},
data: {
id
},
success: (res) => {}
})
},
@@ -453,7 +469,7 @@
method: "GET",
data: {
id: uni.getStorageSync('weapp_session_userInfo_data').accountId,
projectId: uni.getStorageSync('buildingID').id,
projectId: uni.getStorageSync('buildingID').id,
},
header: {
'content-type': 'application/json',
@@ -465,28 +481,28 @@
}
})
},
//获取权限
getMenu(){
getMenu() {
this.$u.get("/user/getMenu").then(data => {
uni.setStorageSync("weapp_session_Menu_data", data)
this.Menulist = uni.getStorageSync('weapp_session_Menu_data');
console.log(this.Menulist, 'adasdasds123')
})
})
},
//自定义时间
totalTimeChange(e) {
this.statDateStart=e.startDate;
this.statDateEnd=e.endDate;
this.zhixingcenterindex=7;
this.statDateStart = e.startDate;
this.statDateEnd = e.endDate;
this.zhixingcenterindex = 7;
this.initworkThisWeek()
},
//时间选择
tabtimeclick(i){
if(i==7){
tabtimeclick(i) {
if (i == 7) {
this.totalTimeShow = true;
}else{
this.zhixingcenterindex=i;
} else {
this.zhixingcenterindex = i;
this.initworkThisWeek()
}
},
@@ -501,9 +517,9 @@
},
data: {
houseId: this.buildingID,
dateType:this.zhixingcenterindex==7?null:this.zhixingcenterindex,
statDateStart:this.statDateStart,
statDateEnd:this.statDateEnd
dateType: this.zhixingcenterindex == 7 ? null : this.zhixingcenterindex,
statDateStart: this.statDateStart,
statDateEnd: this.statDateEnd
},
success: (data) => {
if (data.data.data == null) {
@@ -514,10 +530,11 @@
receivingCustomer: data.data.data.receivingCustomer,
activeCustomer: data.data.data.activeCustomer,
prohibitedCustomer: data.data.data.prohibitedCustomer,
avgDuration: Math.floor(data.data.data.avgDuration/60) ||0,
avgDuration: Math.floor(data.data.data.avgDuration / 60) || 0,
tagCustomer: data.data.data.tagCustomer,
fraction: data.data.data.fraction,
receptionCount:data.data.data.receptionCount
wordFraction: data.data.data.wordFraction,
receptionCount: data.data.data.receptionCount
}
}
}
@@ -536,6 +553,7 @@
houseId: this.buildingID
},
success: (data) => {
this.LOADING = false
if (data.data.data == null) {
return
} else {
@@ -544,16 +562,20 @@
receivingCustomer: data.data.data.receivingCustomer,
activeCustomer: data.data.data.activeCustomer,
prohibitedCustomer: data.data.data.prohibitedCustomer,
avgDuration: Math.floor(data.data.data.avgDuration/60) ||0,
avgDuration: Math.floor(data.data.data.avgDuration / 60) || 0,
tagCustomer: data.data.data.tagCustomer,
fraction: data.data.data.fraction,
receptionCount:data.data.data.receptionCount
wordFraction: data.data.data.wordFraction,
receptionCount: data.data.data.receptionCount
}
}
},
fail: () => {
this.LOADING = false
}
})
},
//设备
initequipment() {
uni.request({
@@ -625,7 +647,7 @@
piskbuilding() {
// this.Showhiddenunits = true;
uni.navigateTo({
url:"../mine/selectBuilding"
url: "../mine/selectBuilding"
})
},
// 项目选择确认
@@ -641,127 +663,153 @@
this.initrealTimeStatistics()
this.initequipment()
this.iniodianloang()
},
// 项目选择取消
cancel() {
this.Showhiddenunits = false;
},
tapjumpequipment(i){
this.Menulist.forEach(item=>{
if(item.name=='设备管理'){
tapjumpequipment(i) {
this.Menulist.forEach(item => {
if (item.name == '设备管理') {
uni.navigateTo({
url: '/pages/mine/equipment/index?active='+i
url: '/pages/mine/equipment/index?active=' + i
});
}
})
},
prohibitedtap(i){
if(i==1){
prohibitedtap(i) {
if (i == 1) {
uni.navigateTo({
url: '/pages/center/prohibited/index?refresh='+'refresh'+'&activeTotal='+'0'+'&violatedStatus=1'
url: '/pages/center/prohibited/index?refresh=' + 'refresh' + '&activeTotal=' + '0' +
'&violatedStatus=1'
});
}else{
if(this.zhixingcenterindex==2){
} else {
if (this.zhixingcenterindex == 2) {
uni.navigateTo({
url: '/pages/center/prohibited/index?refresh='+'refresh'+'&activeTotal='+'2'+'&violatedStatus=1'
url: '/pages/center/prohibited/index?refresh=' + 'refresh' + '&activeTotal=' + '2' +
'&violatedStatus=1'
});
}else if(this.zhixingcenterindex==6){
} else if (this.zhixingcenterindex == 6) {
uni.navigateTo({
url: '/pages/center/prohibited/index?refresh='+'refresh'+'&activeTotal='+'3'+'&violatedStatus=1'
url: '/pages/center/prohibited/index?refresh=' + 'refresh' + '&activeTotal=' + '3' +
'&violatedStatus=1'
});
}else{
} else {
uni.navigateTo({
url: '/pages/center/prohibited/index?refresh='+'refresh'+'&activeTotal='+'4'+'&staTime='+this.statDateStart+'&endtime='+this.statDateEnd+'&violatedStatus=1'
url: '/pages/center/prohibited/index?refresh=' + 'refresh' + '&activeTotal=' + '4' +
'&staTime=' + this.statDateStart + '&endtime=' + this.statDateEnd +
'&violatedStatus=1'
});
}
}
},
tapjumpreception(i){
this.Menulist.forEach(item=>{
if(item.name=='接待记录'){
if(i==1){
tapjumpreception(i) {
this.Menulist.forEach(item => {
if (item.name == '接待记录') {
if (i == 1) {
uni.navigateTo({
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal='+'0'
url: '/pages/center/records/index?refresh=' + 'refresh' + '&activeTotal=' +
'0'
});
} else if (i == 'auth') {
uni.navigateTo({
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal='+'0'+'&validInvalid=0'
url: '/pages/center/records/index?refresh=' + 'refresh' + '&activeTotal=' +
'0' + '&validInvalid=0'
});
}else if(i==2){
} else if (i == 2) {
uni.switchTab({
url: '/pages/index/customer'
});
}else if(i==3){
if(this.zhixingcenterindex==2){
} else if (i == 3) {
if (this.zhixingcenterindex == 2) {
uni.navigateTo({
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal='+'2'
url: '/pages/center/records/index?refresh=' + 'refresh' +
'&activeTotal=' + '2'
});
}else if(this.zhixingcenterindex==6){
} else if (this.zhixingcenterindex == 6) {
uni.navigateTo({
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal='+'3'
url: '/pages/center/records/index?refresh=' + 'refresh' +
'&activeTotal=' + '3'
});
}else{
} else {
uni.navigateTo({
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal='+'4'+'&staTime='+this.statDateStart+'&endtime='+this.statDateEnd
url: '/pages/center/records/index?refresh=' + 'refresh' +
'&activeTotal=' + '4' + '&staTime=' + this.statDateStart +
'&endtime=' + this.statDateEnd
});
}
}else if(i==333){
if(this.zhixingcenterindex==2){
} else if (i == 333) {
if (this.zhixingcenterindex == 2) {
uni.navigateTo({
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal='+'2'+'&validInvalid=0'
url: '/pages/center/records/index?refresh=' + 'refresh' +
'&activeTotal=' + '2' + '&validInvalid=0'
});
}else if(this.zhixingcenterindex==6){
} else if (this.zhixingcenterindex == 6) {
uni.navigateTo({
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal='+'3'+'&validInvalid=0'
url: '/pages/center/records/index?refresh=' + 'refresh' +
'&activeTotal=' + '3' + '&validInvalid=0'
});
}else{
} else {
uni.navigateTo({
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal='+'4'+'&staTime='+this.statDateStart+'&endtime='+this.statDateEnd+'&validInvalid=0'
url: '/pages/center/records/index?refresh=' + 'refresh' +
'&activeTotal=' + '4' + '&staTime=' + this.statDateStart +
'&endtime=' + this.statDateEnd + '&validInvalid=0'
});
}
}else if(i==3){
if(this.zhixingcenterindex==2){
} else if (i == 3) {
if (this.zhixingcenterindex == 2) {
uni.navigateTo({
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal='+'2'
url: '/pages/center/records/index?refresh=' + 'refresh' +
'&activeTotal=' + '2'
});
}else if(this.zhixingcenterindex==6){
} else if (this.zhixingcenterindex == 6) {
uni.navigateTo({
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal='+'3'
url: '/pages/center/records/index?refresh=' + 'refresh' +
'&activeTotal=' + '3'
});
}else{
} else {
uni.navigateTo({
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal='+'4'+'&staTime='+this.statDateStart+'&endtime='+this.statDateEnd
url: '/pages/center/records/index?refresh=' + 'refresh' +
'&activeTotal=' + '4' + '&staTime=' + this.statDateStart +
'&endtime=' + this.statDateEnd
});
}
}else if(i==6){
} else if (i == 6) {
uni.navigateTo({
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal='+'0'+'&validInvalid=0'
url: '/pages/center/records/index?refresh=' + 'refresh' + '&activeTotal=' +
'0' + '&validInvalid=0'
});
}else if(i==7){
if(this.zhixingcenterindex==2){
} else if (i == 7) {
if (this.zhixingcenterindex == 2) {
uni.navigateTo({
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal='+'2'+'&validInvalid=0'
url: '/pages/center/records/index?refresh=' + 'refresh' +
'&activeTotal=' + '2' + '&validInvalid=0'
});
}else if(this.zhixingcenterindex==6){
} else if (this.zhixingcenterindex == 6) {
uni.navigateTo({
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal='+'3'+'&validInvalid=0'
url: '/pages/center/records/index?refresh=' + 'refresh' +
'&activeTotal=' + '3' + '&validInvalid=0'
});
}else{
} else {
uni.navigateTo({
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal='+'4'+'&staTime='+this.statDateStart+'&endtime='+this.statDateEnd+'&validInvalid=0'
url: '/pages/center/records/index?refresh=' + 'refresh' +
'&activeTotal=' + '4' + '&staTime=' + this.statDateStart +
'&endtime=' + this.statDateEnd + '&validInvalid=0'
});
}
}else if (i == 4) {
} else if (i == 4) {
uni.navigateTo({
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal=0'+'&markAdvisor=0'+'&validInvalid=0'
url: '/pages/center/records/index?refresh=' + 'refresh' +
'&activeTotal=0' + '&markAdvisor=0' + '&validInvalid=0'
});
}else{
} else {
uni.navigateTo({
url: '/pages/center/records/index?refresh='+'refresh'+'&activeTotal=0'+'&markAdvisor=0'
url: '/pages/center/records/index?refresh=' + 'refresh' +
'&activeTotal=0' + '&markAdvisor=0'
});
}
}
@@ -774,7 +822,7 @@
});
} else if (item == '接待记录') {
uni.navigateTo({
url: '/pages/center/records/index?refresh='+'refresh'
url: '/pages/center/records/index?refresh=' + 'refresh'
});
} else if (item == '值班顾问') {
uni.navigateTo({
@@ -784,97 +832,138 @@
uni.navigateTo({
url: '/pages/mine/equipment/index'
});
} else if(item == '顾问排名') {
} else if (item == '顾问排名') {
uni.navigateTo({
url: '/pages/center/Piabodata/Employeesstatistics'
});
}else if(item == '违禁记录'){
} else if (item == '违禁记录') {
uni.navigateTo({
url: '/pages/center/prohibited/index?refresh='+'refresh'
url: '/pages/center/prohibited/index?refresh=' + 'refresh'
});
}else{
} else {
uni.navigateTo({
url: '/pages/center/consumer/index?refresh='+'refresh'
url: '/pages/center/consumer/index?refresh=' + 'refresh'
});
}
},
},

filters: {
imgFilter(type) {
let path = ''
switch (type) {
case '客户管理':
path = '../../static/images/function1.png'
break
case '接待记录':
path = '../../static/images/function2.png'
break
case '销讲数据':
path = '../../static/images/function4.png'
break
case '设备管理':
path = '../../static/images/function5.png'
break
case '值班顾问':
path = '../../static/images/function6.png'
break
case '顾问排名':
path = '../../static/images/rankingguwen.png'
break
case '违禁记录':
path = '../../static/images/prohibited.png'
break
}
return path
}
}

};
</script>

<style lang="scss" scoped>
.update{
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: 9999;
.updateBox{
width: 80%;
background: #FFFFFF;
position: relative;
left: 50%;
margin-left: -40%;
padding: 20rpx;
border-radius: 10rpx;
top: 140rpx;
.top{
width: 350rpx;
height: 220rpx;
margin: 0 auto;
image{
width: 100%;
height: 100%;
}
}
.btn{
width: 510rpx;
height: 88rpx;
background: #2671E2;
margin: 0 auto;
display: flex;
justify-content: center;
align-items: center;
font-size: 36rpx;
border-radius: 8rpx;
color: #FFFFFF;
}
.content{
height: 268rpx;
overflow-y: auto;
margin: 46rpx 0;
}
.tit{
font-size: 40rpx;
text-align: center;
font-weight: bold;
}
.close{
position: absolute;
bottom: -100rpx;
left: 50%;
margin-left: -50rpx;
.update {
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: 9999;

.updateBox {
width: 80%;
background: #FFFFFF;
position: relative;
left: 50%;
margin-left: -40%;
padding: 20rpx;
border-radius: 10rpx;
top: 140rpx;

.top {
width: 350rpx;
height: 220rpx;
margin: 0 auto;

image {
width: 100%;
height: 100%;
}
}

.btn {
width: 510rpx;
height: 88rpx;
background: #2671E2;
margin: 0 auto;
display: flex;
justify-content: center;
align-items: center;
font-size: 36rpx;
border-radius: 8rpx;
color: #FFFFFF;
}

.content {
height: 268rpx;
overflow-y: auto;
margin: 46rpx 0;
}

.tit {
font-size: 40rpx;
text-align: center;
font-weight: bold;
}

.close {
position: absolute;
bottom: -100rpx;
left: 50%;
margin-left: -50rpx;
}
}
}
.activecllasscet{

.activecllasscet {
font-size: 28rpx;
font-weight: 400;
color: #008ef2;
}
.cet{

.cet {
font-size: 28rpx;
font-weight: 400;
color: #333333;
.cetview{

.cetview {
margin-left: 20rpx;
}
}

.cented-box {
padding: 30rpx;
background: #F8F8F8;


+ 34
- 26
pages/index/personal.vue View File

@@ -24,15 +24,17 @@
<image src="/static/images/arrow.png" style="width: 18rpx;height: 32rpx;" mode=""></image>
</view>
</navigator>
<navigator class="line" url="/pages/mine/subscribe">
<view class="title">
<image src="/static/images/studyhot.png" style="width: 36rpx;height: 36rpx;" mode=""></image>
订阅消息
</view>
<view class="right">
<image src="/static/images/arrow.png" style="width: 18rpx;height: 32rpx;" mode=""></image>
</view>
</navigator>
<template v-if="isPuqiang">
<navigator class="line" url="/pages/mine/subscribe">
<view class="title">
<image src="/static/images/studyhot.png" style="width: 36rpx;height: 36rpx;" mode=""></image>
订阅消息
</view>
<view class="right">
<image src="/static/images/arrow.png" style="width: 18rpx;height: 32rpx;" mode=""></image>
</view>
</navigator>
</template>
<navigator class="line" url="/pages/mine/Myprofile">
<view class="title">
<image src="/static/images/setting.png" style="width: 36rpx;height: 36rpx;" mode=""></image>
@@ -89,32 +91,37 @@
var util = require("../../utils/util.js");
var config = require("../../config");
import tabbarList from '@/utils/tabbar.js'

export default {
data() {
return {
tabbarList:tabbarList,
tabbarList: tabbarList,
current: 0,
tabList: [
{
tabList: [{
name: '系统消息'
},
{
name: '升级公告'
},
},
],
name: "",
photo: "",
mobile: "",
count:0,
count: 0,
};
},
computed: {
isPuqiang() {
return config.service.host.indexOf('xitong.pachira.cn') == -1
}
},

onShow: function() {
var userInfos = uni.getStorageSync('weapp_session_userInfo_data');
this.name = userInfos.name,
this.photo = userInfos.picUrl,
this.mobile = userInfos.loginName
this.photo = userInfos.picUrl,
this.mobile = userInfos.loginName
this.updateInit()
console.log(config.service.host.indexOf('xitong.pachira.cn') != -1)
},
methods: {
updateInit() {
@@ -135,10 +142,10 @@
}
})
},
scan(){
scan() {
uni.navigateTo({
url:"../mine/registerCode"
url: "../mine/registerCode"
})
},
//拨打电话
@@ -194,23 +201,23 @@
// })
// }
// })
// } else {
// console.log('登录失败!' + res.errMsg)
// }
// }
// })
// // /pages/mine/subscribe
// },

}
};
</script>
<style lang="scss" scoped>
.count{
.count {
background: red;
width: 50rpx;
height: 50rpx;
@@ -222,6 +229,7 @@
font-size: 24rpx;
margin-right: 20rpx;
}

.main {
padding: 0 30rpx;
background: #F8F8F8;
@@ -302,4 +310,4 @@
}
}
}
</style>
</style>

+ 7
- 10
pages/login/index.vue View File

@@ -8,15 +8,15 @@
<view class="cwjs-item center">
<image src="https://qufang.oss-cn-beijing.aliyuncs.com/channelHelper/user.png" class="logo_input">
</image>
<input class="cwjs-item cwjs-input" v-model="username" placeholder="请输入账号名" type="number" maxlength="11" placeholder-style="color:#AAAAAA"></input>
<input class="cwjs-item cwjs-input" v-model="username" placeholder="请输入账号名" type="number" maxlength="11" placeholder-style="color:#AAAAAA"/>
</view>
</view>
<view class="cwjs-cells item-flex" style="margin-top:13rpx;">
<view class="cwjs-item center">
<image src="https://qufang.oss-cn-beijing.aliyuncs.com/channelHelper/lock.png" class="logo_input">
</image>
<input class="cwjs-item cwjs-input" placeholder="请输入密码" placeholder-style="color:#AAAAAA" type="password" v-model="password" maxlength="16" v-if="passwordType"></input>
<input class="cwjs-item cwjs-input" placeholder="请输入密码" placeholder-style="color:#AAAAAA" maxlength="16" v-model="password" v-else></input>
<input class="cwjs-item cwjs-input" placeholder="请输入密码" placeholder-style="color:#AAAAAA" type="password" v-model="password" maxlength="16" v-if="passwordType"/>
<input class="cwjs-item cwjs-input" placeholder="请输入密码" placeholder-style="color:#AAAAAA" maxlength="16" v-model="password" v-else/>
</view>
<view class="imagesBox" @tap="changeBindPassword">
<image v-if="passwordType==false" src="../../static/images/zhengkai.png" class="images" mode="scaleToFill"></image>
@@ -41,10 +41,8 @@
export default {
data() {
return {
username: '',
//获取到的用户名的值
password: '',
//获取到的密码栏中的值
username: '',//18831048327 ,18888888800
password: '',//123456
passwordType: true,
agreeChecked: true
};
@@ -94,7 +92,8 @@
method: "POST",
data: loginParams,
success: function(result) {
var data = result.data; //console.log("登陆信息", data);
var data = result.data;
//console.log("登陆信息", data);
if (data && data.code == 10000) {
var res = data.data;
if (res) {
@@ -149,8 +148,6 @@
uni.setStorageSync("weapp_session_Menu_data", data)
})
}
}
};
</script>


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

@@ -79,6 +79,7 @@
let param = {
keywordIds:'',
id: this.customerId,
projectId: uni.getStorageSync('buildingID').id,
}
let str = []
this.allList.map(item => {


+ 28
- 3
pages/mine/details.vue View File

@@ -51,9 +51,7 @@
v-for="(item,index) in dialog.message" :key="index" :data-speaker="item.speaker">
<view class="avatar">
<view :style="[SPEAKERSTYLE(item.speaker)]">
<!-- <image v-if="item.isShow == 0" :src="Aimg.replace(/[\r\n]/g,'')" mode="widthFix"></image> -->
<text v-if="item.speaker == 0">顾</text>
<text v-else>{{ item.speaker | toCapital }}</text>
<text>{{ item.speaker | toCapital }}</text>
</view>
</view>
<view class="contentInfo">
@@ -115,6 +113,10 @@
<view class="backTop" @click="gotoTop">
<image src="/static/images/backTop.png" mode=""></image>
</view>
<view v-if="eqLog!=-1" class="eqLog" @click="eqLogClick()">
<view style="width: 78rpx;text-align: center;">设备日志</view>
</view>
<!-- 加入常错词 -->
<view class="zhezhoa" v-if="isshow2" @tap="Cancelout"></view>
@@ -278,10 +280,14 @@
ACTION: Symbol('zaudio'), // 唯一值区分每个页面的方法
isPageHide: false, // 是否息屏
duration: '', // 总时长
eqLog:0,
};
},

onLoad(options) {
let menu = uni.getStorageSync('weapp_session_Menu_data');
this.eqLog = menu.findIndex(item=>item.name=='设备日志');
this.status = options.status;
this.customerId = options.customerId;
this.itemobj = uni.getStorageSync('searchobj');
@@ -365,6 +371,11 @@
}
},
methods: {
eqLogClick(){
uni.navigateTo({
url:`./equipmentLog?id=${this.customerId}`
})
},
effectiveAdd() {
if (this.effectiveindex == 4) {
if (this.effectiveitext.length == 0) {
@@ -1690,6 +1701,20 @@
height: 34upx;
}
}
.eqLog {
width: 115upx;
height: 115upx;
background: rgba(211, 235, 253, 1);
box-shadow: 0 0 10rpx 7rpx #f1f1f1;;
border-radius: 50%;
position: fixed;
bottom: 300upx;
right: 8upx;
display: flex;
justify-content: center;
align-items: center;
color: #008EF2;
}

// 评分
.rate-box {


+ 158
- 39
pages/mine/details2.vue View File

@@ -39,13 +39,19 @@
</template>
<view class="avatar">
<view :style="[SPEAKERSTYLE(item.speaker)]">
<text v-if="item.isShow == 0">顾</text>
<text v-else>{{ item.speaker | toCapital }}</text>
<text>{{ item.speaker | toCapital }}</text>
</view>
</view>
<view class="contentInfo">
<view class="info">
<text class="AudioUserName">{{ item.speaker | toCapital }}</text>
<text class="AudioUserName">
<template v-if="item.username">
{{ item.username }}
</template>
<template v-else>
{{ item.speaker | toCapital }}
</template>
</text>
<text>{{conversionTiame(item.bg/1000)}}</text>
</view>
<view class="contentMain">
@@ -94,16 +100,18 @@
</view>
<view class="fill"></view>
<!-- audioinfo2 -->
<view class="tmmchen" v-if="Menulistisshow==true">
<view class="tmmchen">
<image @click="Receivedetailsabouttab('Receivedetailsabout')" src="../../static/images/allimg.png"
mode=""></image>
<view @click="Receivedetailsabouttab('Receivedetailsabout')">更多</view>
<view class="allimg" v-if="Thetapeidisshow">
<view v-if="eqLog!=-1" @click="eqLogClick()" style="line-height: 70rpx;margin-top: 10rpx;">设备日志
</view>
<view @click="Receivetap()" style="line-height: 70rpx;margin-top: 10rpx;">接待信息</view>
<view @click="alllogo()" style="line-height:70rpx;">{{userlistobj.validInvalidName}}</view>
<view v-if="Menulistisshow==true" @click="alllogo()" style="line-height:70rpx;">
{{userlistobj.validInvalidName}}</view>
</view>
</view>

<view class="tmmchen" @click="Receivetap()" v-if="Menulistisshow==false">
<image @click="Receivedetailsabouttab('Receivedetailsabout')"
src="../../static/images/audioinfo2.png" mode=""></image>
@@ -111,7 +119,7 @@
</view>
</view>
</view>
<view v-else class="bottomboxs" @click="sureRefinement">确定</view>
<!-- 标记 -->
<view class="zhezhoa" v-if="biojiisshow" @tap="unmarktap()"></view>
@@ -244,10 +252,12 @@
</view>
</view>
<view class="pingfenbox">
<view :class="{ activecllasscet: zhixingcenterindex == 0 }" @click="recordclick(0)">销讲总执行率{{totalRate}}%
</view>
<view :class="{ activecllasscet: zhixingcenterindex == 0 }" @click="recordclick(0)">
销讲总执行率{{totalRate||0}}%</view>
<view v-if="methodsisshow==true" :class="{ activecllasscet: zhixingcenterindex == 1 }"
@click="recordclick(1)">禁忌执行</view>
<view :class="{ activecllasscet: zhixingcenterindex == 2 }" @click="recordclick(2)">
需求挖掘率{{KeyWordsfraction||0}}%</view>
</view>
<view v-if="zhixingcenterindex == 0" class="cenisbox">
<view
@@ -257,7 +267,7 @@
</view>
</view>
<view class="Level-box" v-for="(item,index) in ratelist" :key="index">
<view class="Level1che" @click="changeshow(item,1)">
<view class="Level1che" @click="hangeshow2(item,1)">
<view class="title1">{{item.name.substring(0,8)}}</view>
<view class="leve1-jindu">
<view class="jindutiao">
@@ -271,7 +281,7 @@
</view>
</view>
<view class="hhhbox" v-if="item.show" v-for="(subitem,i) in item.children" :key="i">
<view class="Level2che" @click="changeshow2(subitem,1)">
<view class="Level2che" @click="hangeshow2(subitem,1)">
<view class="title1">{{subitem.name.substring(0,8)}}</view>
<view class="leve1-jindu">
<view class="zhixing" v-if="!subitem.selected">已执行</view>
@@ -290,6 +300,7 @@
<view class="jiantobox">
<image v-if="che.selected==0" class="arrow" src="/static/images/rate-checked.png"
mode="" />
<image v-else class="arrow" src="/static/images/rate-nocheck.png" mode="" />
</view>
</view>
<view v-if="subitem.show" style="width: 100%;height: 30rpx;"></view>
@@ -304,6 +315,73 @@
<view v-if="prohibitedlist.length==0" style="width: 100%;text-align: center;margin-top: 60rpx;">暂无数据
</view>
</view>
<view v-if="zhixingcenterindex == 2" class="cenisbox">
<view
style="width: 100%;height: 80rpx;border-bottom: 1rpx solid #E0E0E0;display: flex;align-items: center;">
<view style="flex: 1;font-size: 28rpx;color: #333333;font-weight: 600;text-indent: 20rpx;">指标</view>
<view style="flex: 1;font-size: 28rpx;color: #333333;font-weight: 600;text-indent: 170rpx;">执行率
</view>
</view>
<view class="Level-box" v-for="(item,index) in KeyWordsfractionList" :key="index">
<view class="Level1che" @click="hangeshow2(item,1)">
<view class="title1">{{item.name}}</view>
<view class="leve1-jindu">
<view class="jindutiao">
<view class="huanxing" v-if="item.selected==0" :style="{width: item.fraction+'%'}">
</view>
<view class="huanxing" v-else style="width: 0"></view>
<view class="text">{{item.selected==0?item.fraction:0}}%</view>
</view>
</view>
<view class="jiantobox">
<image v-if="!item.show" class="arrow rotatearrow" src="/static/images/down.png" mode="" />
<image v-else class="arrow" src="/static/images/up.png" mode="" />
</view>
</view>
<!-- 话术在一级下 -->
<view v-if="item.showLevel==1">
<view class="hhhbox" v-if="item.show" style="padding: 30rpx;">
<view class="hsnrtest">话术内容</view>
<view class="Level3che" v-for="(che,inc) in item.questionList" :key='inc'>
<view class="title1">{{inc+1}}.{{che.question}}</view>
<view class="jiantobox">
<image v-if="che.selected==0" class="arrow" src="/static/images/rate-checked.png"
mode="" />
<image v-else class="arrow" src="/static/images/rate-nocheck.png" mode="" />
</view>
</view>
</view>
</view>
<!-- 话术在二级下 -->
<view v-if="item.showLevel==2">
<view class="hhhbox" v-if="item.show" v-for="(subitem,i) in item.children" :key="i">
<view class="Level2che" @click="hangeshow2(subitem,1)">
<view class="title1 u-line-1">{{subitem.name}}</view>
<view class="leve1-jindu">
<view class="zhixing" v-if="!subitem.selected">已执行</view>
<view class="zhixing2" v-else>未执行</view>
</view>
<view class="jiantobox">
<image v-if="!subitem.show" class="arrow rotatearrow" src="/static/images/down.png"
mode="" />
<image v-else class="arrow" src="/static/images/up.png" mode="" />
</view>
</view>
<view v-if="subitem.show" style="padding: 30rpx 0;">
<view class="hsnrtest">话术内容</view>
<view class="Level3che" v-for="(che,inc) in subitem.questionList" :key='inc'>
<view class="title1">{{inc+1}}.{{che.question}}</view>
<view class="jiantobox">
<image v-if="che.selected==0" class="arrow"
src="/static/images/rate-checked.png" mode="" />
<image v-else class="arrow" src="/static/images/rate-nocheck.png" mode="" />
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>

<!-- 客户意向 -->
@@ -426,6 +504,10 @@
</view>

<u-toast ref="uToast" />

<!-- 加载组件 -->
<loading v-model="LOADING"></loading>

</view>

</template>
@@ -435,13 +517,17 @@
var config = require("../../config");

import zaudio from '@/components/uniapp-zaudio/zaudio';
import loading from "@/components/loading/index.vue"
export default {
components: {
zaudio
zaudio,
loading
},

data() {
return {
KeyWordsfraction: 0,
KeyWordsfractionList: [],
noClick: true,
kehuyixiangcenterindex: 0,
Acquirecustomerintentlist2: [],
@@ -543,8 +629,8 @@
isPageHide: false, // 是否息屏
duration: '', // 总时长
isBand: false, // 阻止二次提交

refined: false,
eqLog: 0,
};
},
computed: {
@@ -555,8 +641,13 @@
},
},
onLoad(options) {
this.LOADING = true
let menu = uni.getStorageSync('weapp_session_Menu_data');
this.eqLog = menu.findIndex(item => item.name == '设备日志');

this.status = options.status;
this.customerId = options.customerId;
this.KeyWordsfraction = options.wordFraction || 0;
this.itemobj = uni.getStorageSync('searchobj');
console.log(this.itemobj)
this.stateisshow = options.stateisshow;
@@ -637,6 +728,14 @@
item.checked = !item.checked
this.$forceUpdate()
},
hangeshow2(item, type) {
item.show = !item.show;
},
eqLogClick() {
uni.navigateTo({
url: `./equipmentLog?id=${this.customerId}`
})
},
rolexuanze(index) {
this.roleindexrow = index;
},
@@ -692,9 +791,10 @@
this.zhixingcenterindex = i;
if (i == 0) {
this.getRatelist()
} else {
console.log('999')
} else if (i == 1) {
this.huoqujinji()
} else {
this.getfindKeyWordsBycusId()
}
},
//获取禁忌
@@ -716,7 +816,7 @@
//评分点击
clickaudeopal(item) {
if (item.selected == 0 && item.viewFlag != 1) {
console.log(item)
// console.log(item)
this.Pinspeak = false
uni.navigateTo({
url: '/pages/mine/ScoringPlaylist?customerId=' + this.customerId + "&id=" + item
@@ -937,10 +1037,11 @@
//接待详情点击
Receivedetailsabouttab(stringa) {
if (stringa == 'Receivedetailsabout') {
this.gituserlist()
this.Thetapeidisshow = !this.Thetapeidisshow;
this.gituserlist()
} else if (stringa == 'Pinspeak') {
this.getRatelist()
this.getfindKeyWordsBycusId()
this.Pinspeak = true;
} else {
if (this.kehuyixiangcenterindex == 0) {
@@ -1042,7 +1143,6 @@
} else {
tempRoleIndex = this.roleindex
}
console.log()
uni.request({
url: config.service.getCorpusAnal + '?corpusId=' + this.luyinList[this.csdFileindex].id +
"&bg=" + bgcd + "&speaker=" + tempRoleIndex + "&voFlag=" + voFlagValue +
@@ -1421,7 +1521,7 @@
})
})
},
// 确认批量加精
sureRefinement() {
this.isshow3 = true;
@@ -1437,7 +1537,7 @@
})
})
},
// 取消加精
Cancelout2() {
this.isshow3 = false;
@@ -1512,7 +1612,6 @@
this.messagelisy = this.dialogList[i].message
this.argtextindex1 = i;
this.argtextindex2 = index;

},
//回到顶部
gotoTop() {
@@ -1521,21 +1620,36 @@
this.scrollId = "top";
})
},
//切换tab
changeTab(type) {
if (type == 0) {
this.tab = 0
} else {
this.tab = 1;
this.getRatelist();
}
},
//评分上下显隐
changeshow(item, type) {
item.show = !item.show;
},
changeshow2(item, type) {
item.show = !item.show;
// 客户详情需求挖掘话术
getfindKeyWordsBycusId() {
this.$u.get("/cusLvStatistics/findKeyWordsBycusId?cusId=" + this.customerId).then(res => {
// console.log(res)
if (res.length) {
// this.KeyWordsfraction = 0
res.forEach(item => {
// if(item.selected==0){
// this.KeyWordsfraction += +item.fraction // 总执行率
// }
item.show = false
item.children.forEach(obj => {
obj.show = false
if (obj.questionList.length) {
obj.questionList.forEach(subobj => {
subobj.show = false
})
}
})
if (item.questionList.length) {
item.questionList.forEach(obj => {
obj.show = false
})
}
})
this.KeyWordsfractionList = res
} else {
this.KeyWordsfractionList = []
}
})
},
getRatelist() {
this.$u.get("/customer/findzkMByCusId", {
@@ -1624,6 +1738,7 @@
'Access-Token': uni.getStorageSync('weapp_session_login_data').token
},
success: (data) => {
this.LOADING = false
this.isShowMark = data.data.data.viewNameFlag
this.tablist = [];
this.roleindexbiaoji = 0;
@@ -1686,6 +1801,10 @@
this.dialogList.push(jsonInfo[this.textindex]);
var itc = parseInt(info.bg / 1000)
this.adasdasdasd(itc)
},

fail: () => {
this.LOADING = false
}
})
},
@@ -1694,7 +1813,6 @@
return util.formatSecond(time)
},


//音频前进回退
sliderChangeComplate(currentTime) {
this.dialogList = []
@@ -1897,7 +2015,7 @@
align-items: center;
}
}
.bottomboxs {
width: 100%;
height: 90rpx;
@@ -1989,7 +2107,8 @@
.allimg {
position: absolute;
width: 168rpx;
top: -152rpx;
min-height: 210rpx;
top: -240rpx;
border: 1px solid #E0E0E0;
background: #FFFFFF;
font-size: 26rpx;


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

@@ -0,0 +1,357 @@
<template>
<view class="eqLog">
<view class="bg"></view>
<view class="tophead" :style="{height: `${CustomBar}px`}">
<view class="topheads" :style="{height: `${CustomBar}px`,paddingTop: `${StatusBar}px`}">
<view class="eqno">
<image @click="back" class="backs" src="@/static/images/back.png" mode=""></image>
<view class="middle">
设备日志
</view>
</view>
<!-- 背景色 -->
<view class="eqNo-bg"></view>
</view>
</view>
<view class="eqNo">
<view class="noInfo">
<view class="left">
<text style="font-weight: 500;">设备编号:{{ info.imei || '' }}</text>
<text>录音说明:{{ info.recordExplain || '' }}</text>
</view>
<view class="right">
<text>{{state(info.recording)}}</text>
</view>
</view>
</view>
<view class="eqMain">
<view class="recordingStart">
<view class="items">
<text>录音开启用时</text>
<text class="font"
:style="{color: info.recording==1?'red':'#333'}">{{info.startActionTime || ''}}min</text>
</view>
<view class="line"></view>
<view class="items">
<text>待上传文件</text>
<text class="font" :style="{color: info.fileCount==0?'#333':'red'}">{{info.fileCount || 0}}个</text>
</view>
</view>
<view class="recording">
<view class="left-box">
<view class="cycle"></view>
<view class="point"></view>
<view class="cycle"></view>
</view>
<view class="recordingBox">
<text class="recordingBoxItem-title" >录音开启</text>
<view class="recordingBoxItem">
<text class="left">指派人:</text>
<text class="right">{{info.owenrName}}</text>
</view>
<view class="recordingBoxItem">
<text class="left">指派时间:</text>
<text class="right">{{info.assignTime}}</text>
</view>
<view class="recordingBoxItem">
<text class="left">录音开始时间:</text>
<view class="right" style="font-weight: bold;font-size: 28rpx;">
<text :style="{color: info.recording==1?'red':'#333'}">
{{info.recordStartTime}}
</text>
</view>
</view>
</view>
<view class="recordingBox" style="margin-top: 40rpx;">
<text class="recordingBoxItem-title">录音关闭</text>
<view class="recordingBoxItem">
<text class="left">结束人:</text>
<text class="right">{{info.userName}}</text>
</view>
<view class="recordingBoxItem">
<text class="left">结束时间:</text>
<text class="right">{{info.assignEndTime}}</text>
</view>
<view class="recordingBoxItem">
<text class="left">录音结束时间:</text>
<view class="right" style="font-weight: bold;font-size: 28rpx;">
<text :style="{color: info.recording==1?'red':'#333'}">
{{info.recordEndTime}}
</text>
</view>
</view>
</view>
</view>
<view class="offlineRec">
<text style="font-size:32rpx;font-weight: 700;">离线记录</text>
<view class="recMain">
<block v-for="(item,index) in info.offLineList" :key="index">
<text>{{index+1}}、 {{item}}</text>
</block>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
info: {},
}
},
computed: {
state() {
return (e => {
switch (e) {
case 0:
return "接待中";
case 1:
return "部分录音";
default:
return "完整录音";
}
})
},
},
onLoad(options) {
this.$u.get("/equipment/equipmentLog", {
id: options.id
}).then(res => {
// console.log(res)
this.info = res
})
},
methods: {
back() {
uni.navigateBack()
}
}
}
</script>
<style lang="scss">
.eqLog {
position: relative;
width: 100vw;
min-height: 100vh;
background: #F8F8F8;
.bg {
position: absolute;
top: 0;
left: 0;
right: 0;
z-index: 0;
width: 100%;
height: 420rpx;
background: linear-gradient(180deg, #2671E2 0%, #3B9CF4 54%, #93C8F7 100%);
}
.tophead {
position: sticky;
top: 0;
z-index: 999;
width: 100%;
.topheads {
position: relative;
z-index: 1;
overflow: hidden;
.eqno {
position: relative;
z-index: 1;
width: 100%;
height: 100%;
display: flex;
align-items: center;
.backs {
margin-left: 24rpx;
width: 48rpx;
height: 48rpx;
}
.middle {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
font-size: 32rpx;
color: #fff;
}
}
.eqNo-bg {
position: absolute;
top: 0;
left: 0;
right: 0;
z-index: 0;
width: 100%;
height: 420rpx;
background: linear-gradient(180deg, #2671E2 0%, #3B9CF4 54%, #93C8F7 100%);
}
}
}
.eqNo {
position: relative;
z-index: 1;
width: 100%;
.noInfo {
margin: 24rpx auto 0;
padding: 24rpx;
width: 690rpx;
min-height: 152rpx;
background: #FFFFFF;
border-radius: 8rpx;
display: flex;
justify-content: space-between;
.left {
display: flex;
flex-direction: column;
justify-content: space-between;
font-size: 32rpx;
font-weight: 400;
}
.right {
flex-shrink: 0;
font-size: 32rpx;
font-weight: 400;
}
}
}
.eqMain {
position: relative;
z-index: 1;
padding: 0 30rpx;
.recordingStart {
margin-top: 20rpx;
width: 100%;
height: 164rpx;
display: flex;
align-items: center;
border-radius: 8rpx;
background: #FFFFFF;
.items {
flex-grow: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
color: #1C1010;
font-size: 30rpx;
.font {
margin-top: 20rpx;
font-weight: 700;
}
}
.line {
width: 1rpx;
height: 88rpx;
background: #E0E0E0;
}
}
.recording {
position: relative;
z-index: 1;
margin-top: 20rpx;
padding: 30rpx 30rpx 30rpx 68rpx;
display: flex;
flex-direction: column;
background: #FFFFFF;
border-radius: 8rpx;
.left-box {
position: absolute;
left: 30rpx;
top: 40rpx;
width: 24rpx;
height: 300rpx;
display: flex;
flex-direction: column;
align-items: center;
.cycle {
width: 24rpx;
height: 24rpx;
flex-shrink: 0;
border-radius: 50%;
border: 4rpx solid #2671E2;
}
.point {
flex-grow: 1;
border-left: 5rpx dotted #2671E2;
}
}
.recordingBox {
width: 100%;
display: flex;
flex-direction: column;
.recordingBoxItem-title {
font-size: 32rpx;
font-weight: 700;
}
.recordingBoxItem {
margin-top: 24rpx;
display: flex;
.left {
flex-shrink: 0;
width: 210rpx;
color: #505050;
font-size: 30rpx;
}
.right {
flex-grow: 1;
font-size: 30rpx !important;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
}
}
.offlineRec {
margin-top: 20rpx;
padding: 28rpx 24rpx;
border-radius: 8rpx;
background: #FFFFFF;
.recMain {
display: flex;
flex-direction: column;
text {
margin: 24rpx 0;
font-size: 30rpx;
}
}
}
}
}
</style>

+ 63
- 12
pages/mine/reception/addreception.vue View File

@@ -54,13 +54,14 @@
</view>

</view>
<view class="Pinspeak" v-if="shifoinfo==0">顾问</view>
<view class="chented" v-if="shifoinfo==0" @click="clickShowhid()">

<!-- <template v-if="shifoinfo==0 && userInfo.dataCode != 6"> -->
<view class="Pinspeak">顾问</view>
<view class="chented" @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;">
<!-- {{text || '请选择接待顾问'}} -->
<text v-if="text" style="color: #333333;">{{text}}</text>
<text v-else>请选择接待顾问</text>
</view>
@@ -69,14 +70,14 @@
</view>
</view>
</view>
<!-- </template> -->


<view class="clive" @click.stop="$noMultipleClicks(save)" :style="{background:(isBand==false?'#2671E2':'#949494')}">确定</view>
<view class="clive" @click.stop="$noMultipleClicks(save)"
:style="{background:(isBand==false?'#2671E2':'#949494')}">确定</view>

<!-- <view v-if="Showhiddenunits"> -->
<!-- <u-select v-model="show" :list="list"></u-select> -->
<u-select :mask-close-able="false" label-name="sourceName" value-name="id" v-model="Showhiddenunits"
mode="single-column" :list="list" @cancel="cancel" @confirm="confirm"></u-select>
<!-- </view> -->
<u-select :mask-close-able="false" v-model="Showhid" mode="single-column" :list="freeList" @cancel="cancel1"
@confirm="confirm1"></u-select>
<u-modal v-model="show" :mask-close-able="true" :title="'代接待提醒'" :confirm-text="confirmtext"
@@ -111,7 +112,7 @@
replaceReception: 0
},
showSourceName: '', // 展示文字
shifoinfo: 0,
shifoinfo: 0, // 高级权限 项目是否能指派顾问
freeList: [],
Showhid: false,
text: null,
@@ -123,9 +124,18 @@
saveisshow: true,
isBand: false, // 阻止二次提交
tap: true,
fdFlag:null
fdFlag: null,
isPass: false, // 当前顾问是否正在接待
};
},

computed: {
// 用户详情
userInfo() {
return uni.getStorageSync("weapp_session_userInfo_data")
},
},

onShow() {
this.parames.projectId = uni.getStorageSync('buildingID').id;
console.log(this.$u)
@@ -134,6 +144,7 @@
this.getFromSource();
},
methods: {

// 获取客户来源
getFromSource() {
uni.request({
@@ -176,8 +187,18 @@
if (this.isBand) return
this.save()
},
save() {

// 校验当前登录人是否是顾问
let obj = this.freeList.find(item => {
return item.agentId == this.userInfo.accountId
}) || null
if (!obj && this.userInfo.dataCode == 6) {
this.isPass = true
} else {
this.isPass = false
}
if (this.parames.name.length == 0) {
uni.showToast({
icon: "none",
@@ -192,6 +213,15 @@
})
return;
}

// 判断条件2是否选中顾问
if (this.isPass && !this.parames.agentId) {
uni.showToast({
icon: "none",
title: "请选择顾问~"
})
return;
}
const that = this;
this.isBand = true
this.$u.post("customer/daitiReception", {
@@ -220,7 +250,7 @@
that.confirmtext = res.replacement.name + "代接待", //确认文字
that.canceltext = res.owner.name + '接待', //取消文字
that.show = true;
this.isBand = false
this.isBand = false
} else {
that.daitiReceptionobj = res;
console.log(that.daitiReceptionobj)
@@ -229,7 +259,7 @@
that.confirmtext = res.replacement.name + "代接待", //确认文字
that.canceltext = res.assign.name + '接待', //取消文字
that.show = true;
this.isBand = false
this.isBand = false
}
}
}
@@ -283,6 +313,23 @@
this.parames.howMany = num;
},
clickShowhid() {
if (this.shifoinfo != 0) {
uni.showToast({
icon: 'none',
title: '您没有指派权限~',
duration: 2000
});
return
}

if (this.userInfo.dataCode == 6 && !this.checkAuthority('顾问指派顾问')) {
uni.showToast({
icon: "none",
title: "您没有指派权限~",
duration: 2000
})
return
}
if (this.freeList.length == 0) {
uni.showToast({
icon: 'none',
@@ -342,6 +389,10 @@
item.label = item.name + "(无设备)";
}
item.value = item.agentId
if (this.userInfo.accountId == item.agentId) {
this.text = item.label
this.parames.agentId = item.agentId;
}
})
})
},


+ 25
- 55
pages/mine/reception/consultant.vue View File

@@ -49,11 +49,20 @@
<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>



<!-- 加载组件 -->
<loading v-model="LOADING"></loading>
</view>
</template>

<script>
import loading from "@/components/loading/index.vue"
export default {
components: {
loading
},
data() {
return {
customerId: '',
@@ -73,55 +82,17 @@
list: [], // 部门列表
listCurrent: 0, //选中分类下标
deptId: '',

}
},
onLoad(option) {
this.LOADING = true
this.customerId = option.id;
this.getAllList()
},
onShow() {
this.buildingID = uni.getStorageSync('buildingID').id;
this.getFreeList();

},
methods: {
// 获取全部的列表
getAllList() {
let params = {
houseId: uni.getStorageSync('buildingID').id
}
this.$u.post('/cusLvStatistics/findAllDeptIdByHouseId', params)
.then(res => {
console.log(res, 'list')
if (res && res.length > 0) {
this.list = res
this.list.unshift({
deptName: '全部',
deptId: '',
})
}
})
},

// 重置页面数据
initPageList() {
this.freeList = []
},
// 选中部门
change(index) {
this.deptId = this.list[index].deptId
this.listCurrent = index;
this.initPageList()
this.getFreeList()
},
// 搜索
searchFunc() {
console.log('我搜索了', 'keywords')
this.initPageList()
this.getFreeList()
},

//取消
confirmA() {
if (this.daitiReceptionobj.assign != null) {
@@ -139,7 +110,7 @@
this.replaceReception = 1;
this.baochunfun()
},
// 保存按钮点击事件
save() {
console.log(this.chosedAgentId)
if (!this.chosedAgentId) {
@@ -183,7 +154,6 @@
}
});
},
// 保存指派顾问
baochunfun() {
uni.showLoading({
title: "保存中",
@@ -199,22 +169,22 @@
icon: "none",
title: "分配成功"
})
uni.hideLoading()
uni.navigateBack()
})
uni.navigateBack();
uni.hideLoading();
});
},
// 获取顾问列表
getFreeList() {
this.$u.get("/zkAgentPool/freeList?itemId=" + this.buildingID + "&deptId=" + this.deptId + '&name=' + this
.keywords)
.then(res => {
if (res.length == 0) {
this.freeList = []
} else {
this.freeList = res;
this.textcdhSKJ = res[0].name
}
})
this.$u.get("/zkAgentPool/freeList?itemId=" + this.buildingID).then(res => {
this.LOADING = false
if (res.length == 0) {
this.freeList = []
} else {
this.freeList = res;
this.textcdhSKJ = res[0].name
}
}).catch(e => {
this.LOADING = false
})
},
radioChange(evt) {
this.chosedAgentId = '';


+ 45
- 42
pages/mine/subscribe.vue View File

@@ -3,8 +3,9 @@
<view class="text1">第一步:关注数智工牌公众号</view>
<view style="width: 96%;margin: 0 auto;">
<view class="text2" style="margin-top: 30rpx;">1.长按识别二维码或保存至相册进行关注</view>
<view style="text-align: center;" >
<image @click="baocun()" style="width: 300rpx;height: 300rpx;" src="../../static/images/supimg.png" mode=""></image>
<view style="text-align: center;">
<image @click="baocun()" style="width: 300rpx;height: 300rpx;" src="../../static/images/supimg.png"
mode=""></image>
</view>
<view style="margin-top: 30rpx;" class="text2">2.微信搜索公众号【数智工牌】进行关注</view>
</view>
@@ -26,66 +27,68 @@
export default {
data() {
return {
};
},
onShow: function() {
var userInfos = uni.getStorageSync('weapp_session_userInfo_data');
},
methods: {
baocun () {
const _this = this;
wx.getImageInfo({
src: '/static/images/supimg.png',
success: function (res) {
wx.saveImageToPhotosAlbum({
filePath: res.path,
success (result) {
_this.setData({ show: false });
wx.showToast({
title: '保存成功',
icon: 'success',
duration: 2000
})
},
fail (err) {
if (err.errMsg === "saveImageToPhotosAlbum:fail auth deny") {
wx.openSetting({
success (settingdata) {
if (settingdata.authSetting['scope.writePhotosAlbum']) {
_this.savePhoto()
} else {
wx.showToast({
title: '获取权限失败,无法保存图片',
icon: 'success',
duration: 2000
})
}
}
})
}
}
})
}
})
}
baocun() {
const _this = this;
wx.getImageInfo({
src: '/static/images/supimg.png',
success: function(res) {
wx.saveImageToPhotosAlbum({
filePath: res.path,
success(result) {
wx.showToast({
title: '保存成功',
icon: 'success',
duration: 2000
})
},
fail(err) {
if (err.errMsg === "saveImageToPhotosAlbum:fail auth deny") {
wx.openSetting({
success(settingdata) {
if (settingdata.authSetting[
'scope.writePhotosAlbum']) {
_this.savePhoto()
} else {
wx.showToast({
title: '获取权限失败,无法保存图片',
icon: 'success',
duration: 2000
})
}
}
})
}
}
})
}
})
}
}
};
</script>
<style lang="scss" scoped>
.main {
padding:30rpx;
padding: 30rpx;
background: #F8F8F8;
display: flex;
flex-direction: column;
min-height: 100vh;
padding-bottom: 40rpx;
background: #FFFFFF;
.text1{

.text1 {
color: #303030;
font-size: 30rpx;
}
.text2{

.text2 {
font-size: 30rpx;
color: #666666;
}


+ 7
- 1
pages/reportExcel/dayReport.vue View File

@@ -443,8 +443,14 @@
// 分割数组排名前三,倒三
getTopThree() {
if (this.weekObj.XJTopList && this.weekObj.XJTopList.length > 0) {
this.carryOutLast = this.weekObj.XJTopList.slice(0, 3)
let arr = this.weekObj.XJTopList.slice(0, 3)
arr.forEach(item => {
if (item.value != 100) {
this.carryOutLast.push(item)
}
})
this.carryOutTop = this.weekObj.XJTopList.reverse().slice(0, 3)
console.log(this.weekObj.XJTopList)
}
if (this.weekObj.ZXLTopList && this.weekObj.ZXLTopList.length > 0) {
this.consultant = this.weekObj.ZXLTopList.reverse().slice(0, 3)


BIN
static/images/back.png View File

Before After
Width: 128  |  Height: 128  |  Size: 3.0 KiB

+ 5
- 6
utils/domain.js View File

@@ -1,11 +1,11 @@
// http.js使用域名
// const baseUrl = 'http://81.70.55.170:9090/autoSR/api';// 最新测试
// const baseUrl = 'http://192.168.31.211:8080/api';// 泽明
// const baseUrl = 'http://localhost:8080/autoSR/api'; // 本地
// const baseUrl = 'http://192.168.31.161:8080/autoSR/api'; // 长龙
// const baseUrl = 'http://192.168.31.86:9090/api'; // 盛浩
const baseUrl = 'https://zkgj.quhouse.com/api'; // 质控正式
// const baseUrl = 'http://127.0.0.1:8080/autoSR/api'; // 本地
// const baseUrl = 'http://192.168.31.169:8080/autoSR/api'; // 长龙
const baseUrl = 'http://192.168.31.149:9090/api'; // 盛浩
// const baseUrl = 'https://zkgj.quhouse.com/api'; // 质控正式
// const baseUrl = 'https://hfju.com/api'; // 数智正式
// const baseUrl = 'https://xitong.pachira.cn/api'; // AI营销辅助 普强使用


// config使用域名
@@ -16,7 +16,6 @@ const baseUrl = 'https://zkgj.quhouse.com/api'; // 质控正式
// const host = 'http://192.168.31.57:8080/autoSR/api';// 本地
const host = baseUrl; // 测试站
// const host = 'http://192.168.31.167:8080/autoSR/api'; // 长龙
// const host = 'http://192.168.31.134:8080/autoSR/api'; // 佳豪
// const host = 'http://10.2.1.104:8081/autoSR/api'; // 刘敏
// const host = 'https://zkgj.quhouse.com/api'; // 质控正式
// const host = 'https://hfju.com/api'; // 数智正式


+ 40
- 39
utils/http.js View File

@@ -1,5 +1,6 @@

import { baseUrl } from './domain.js'
import {
baseUrl
} from './domain.js'

const install = (Vue, vm) => {
Vue.prototype.$u.http.setConfig({
@@ -7,44 +8,44 @@ const install = (Vue, vm) => {
loadingText: '加载中~',
loadingTime: 800,
});
// 请求拦截,如果有token,携带token
Vue.prototype.$u.http.interceptor.request = (config) => {
const token = uni.getStorageSync('weapp_session_login_data');
if(token){
config.header['Access-Token'] = token.token;
}
return config
}
// 响应拦截,公共错误处理
Vue.prototype.$u.http.interceptor.response = (res) => {
if(res.code == 10000) {
return res.data;
}else if(res.code == 10003 || res.code == 20006){
uni.hideToast();
uni.showToast({
icon:"none",
title:"您的登录已失效,请重新登录",
duration: 2000
})
uni.clearStorageSync();
setTimeout(function () {
uni.reLaunch({
url: '/pages/login/index'
});
},2000);
return false;
}else{
uni.hideLoading();
uni.showToast({
icon:"none",
title:res.message,
duration: 3000
})
return false;
}
}
// 请求拦截,如果有token,携带token
Vue.prototype.$u.http.interceptor.request = (config) => {
const token = uni.getStorageSync('weapp_session_login_data');
if (token) {
config.header['Access-Token'] = token.token;
}
return config
}
// 响应拦截,公共错误处理
Vue.prototype.$u.http.interceptor.response = (res) => {
if (res.code == 10000) {
return res.data;
} else if (res.code == 10003 || res.code == 20006) {
uni.hideToast();
uni.showToast({
icon: "none",
title: "您的登录已失效,请重新登录",
duration: 2000
})
uni.clearStorageSync();
setTimeout(function() {
uni.reLaunch({
url: '/pages/login/index'
});
}, 2000);
return false;
} else {
uni.hideLoading();
uni.showToast({
icon: "none",
title: res.message,
duration: 3000
})
return false;
}
}
}

export default {
install
}
}

Loading…
Cancel
Save