@@ -0,0 +1,119 @@ | |||||
@mixin textoverflow() { | |||||
display: -webkit-box; | |||||
overflow: hidden; | |||||
text-overflow: ellipsis; | |||||
-webkit-box-orient: vertical; | |||||
-webkit-line-clamp: 1; | |||||
} | |||||
@keyframes rowup { | |||||
0% { | |||||
-webkit-transform: translate(-50%, -50%) rotate(0deg); | |||||
transform-origin: center center; | |||||
} | |||||
100% { | |||||
-webkit-transform: translate(-50%, -50%) rotate(360deg); | |||||
transform-origin: center center; | |||||
} | |||||
} | |||||
.imt-audio{ | |||||
position:relative; | |||||
width: 100%; | |||||
display: flex; | |||||
box-sizing: border-box; | |||||
background: #fff; | |||||
overflow: hidden; | |||||
.top { | |||||
width: 140rpx; | |||||
position: relative; | |||||
} | |||||
.audio-wrapper { | |||||
display: flex; | |||||
flex-direction: column; | |||||
flex: 1; | |||||
color: #fff; | |||||
margin-left: 20rpx; | |||||
} | |||||
.slidebox { | |||||
display: flex; | |||||
justify-content: space-between; | |||||
width: 96%; | |||||
} | |||||
/deep/ .uni-slider-tap-area { | |||||
padding: 0; | |||||
} | |||||
/deep/ .uni-slider-wrapper { | |||||
min-height: 0; | |||||
} | |||||
/deep/ .uni-slider-handle-wrapper { | |||||
height: 6px; | |||||
} | |||||
.audio-slider { | |||||
padding-top: 10rpx; | |||||
margin-left: 150rpx; | |||||
position: absolute; | |||||
bottom: 40rpx; | |||||
width: 75vw; | |||||
left: 0; | |||||
padding: 0; | |||||
} | |||||
// .cover { | |||||
// width: 120rpx; | |||||
// height: 120rpx; | |||||
// box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2); | |||||
// position: absolute; | |||||
// top: 50%; | |||||
// left: 50%; | |||||
// transform: translate(-50%, -50%); | |||||
// animation-fill-mode: forwards; | |||||
// -webkit-animation-fill-mode: forwards; | |||||
// } | |||||
.play { | |||||
width: 48rpx; | |||||
height: 48rpx; | |||||
z-index: 99; | |||||
background: rgba(0, 0, 0, 0.4); | |||||
border-radius: 50%; | |||||
position: absolute; | |||||
top: 50%; | |||||
left: 50%; | |||||
transform: translate(-50%, -50%); | |||||
&.loading{ | |||||
width: 48rpx; | |||||
height: 48rpx; | |||||
animation: rotating_theme3 2s linear infinite; | |||||
} | |||||
} | |||||
} | |||||
@keyframes rotating { | |||||
0% { | |||||
transform: rotateZ(0deg) | |||||
} | |||||
100% { | |||||
transform: rotateZ(360deg) | |||||
} | |||||
} | |||||
@keyframes rotating_theme3 { | |||||
0% { | |||||
transform: translate(-50%, -50%) rotateZ(0deg) | |||||
} | |||||
100% { | |||||
transform: translate(-50%, -50%) rotateZ(360deg) | |||||
} | |||||
} | |||||
.hItem | |||||
{ | |||||
margin-left: 16rpx; | |||||
} | |||||
.extrButton | |||||
{ | |||||
font-size: 36rpx; | |||||
} |
@@ -0,0 +1,318 @@ | |||||
<template> | |||||
<view class="imt-audio"> | |||||
<template> | |||||
<view class="top"> | |||||
<view class="audio-control-wrapper"> | |||||
<!-- <image :src="poster" mode="aspectFill" class="cover"></image> --> | |||||
<image :src="require('./static/loading.png')" v-if="playState=='loading'" class="play loading"> | |||||
</image> | |||||
<template v-else> | |||||
<image :src="require('./static/playbtn.png')" alt="play" @click="play" class="play" | |||||
v-if="playState=='pause'"></image> | |||||
<image :src="require('./static/pausebtn.png')" alt="pause" @click="pause" class="play" v-else> | |||||
</image> | |||||
</template> | |||||
</view> | |||||
</view> | |||||
<view class="audio-wrapper"> | |||||
<view class="audio-flex"> | |||||
<text> | |||||
{{formatSeconds(currentTime)}} | |||||
</text> | |||||
<slider class="audio-slider" block-size="12" :max="duration" :value="currentTime" | |||||
@change="sliderChange" @changing="sliderChanging"></slider> | |||||
<text> | |||||
{{formatSeconds(duration)}} | |||||
</text> | |||||
</view> | |||||
<view class="slidebox"> | |||||
<slot name="extraCtrls"> | |||||
<text class="hItem extrButton" @click="$emit('Button1Click')" | |||||
v-show="isButton1Visible">{{button1Text}}</text> | |||||
<text class="hItem extrButton" @click="$emit('Button2Click')" | |||||
v-show="isButton2Visible">{{button2Text}}</text> | |||||
<text class="hItem extrButton" @click="$emit('Button3Click')" | |||||
v-show="isButton3Visible">{{button3Text}}</text> | |||||
</slot> | |||||
</view> | |||||
</view> | |||||
<!--video在ios中不能完全隐藏,否则无法播放--> | |||||
<video id="videoPlayer" class="videoPlayer" :src="src" autoplay="true" :muted="false" style="width: 10rpx;height:10rpx;" | |||||
@play="playerOnPlay" @pause="playerOnPause" @ended="playerOnEnded" @timeupdate="playerOnTimeupdate" | |||||
@waiting="playerOnWaiting" @error="playerOnError"></video> | |||||
</template> | |||||
</view> | |||||
</template> | |||||
<script> | |||||
/* | |||||
createInnerAudioContext()是audio组件的内部实现,不能熄屏播放、不能后台播放、不能倍速播放。 | |||||
getBackgroundAudioManager() 可以熄屏播放、后台播放,不能倍速播放。缺点是响应速度很慢,无法实现精细、及时的进度控制,而且可能被别的程序占用。 | |||||
因此这里只能用video来实现,video能倍速播放,不能熄屏播放、不能后台播放。而且避免了用createInnerAudioContext()实现的跳转到别的页面,还在播放的问题 | |||||
因此应用程序可以在需要后台播放的时候(需要用户操作触发),再暂停这个控件的播放,然后自己用getBackgroundAudioManager实现后台播放 | |||||
*/ | |||||
import Vue from 'vue'; | |||||
export default { | |||||
props: { | |||||
isButton1Visible: { | |||||
type: Boolean, | |||||
default: false | |||||
}, | |||||
button1Text: { | |||||
type: String, | |||||
default: '' | |||||
}, | |||||
isButton2Visible: { | |||||
type: Boolean, | |||||
default: false | |||||
}, | |||||
button2Text: { | |||||
type: String, | |||||
default: '' | |||||
}, | |||||
isButton3Visible: { | |||||
type: Boolean, | |||||
default: false | |||||
}, | |||||
button3Text: { | |||||
type: String, | |||||
default: '' | |||||
}, | |||||
}, | |||||
data() { | |||||
return { | |||||
src: "", | |||||
poster: "", | |||||
name: "...", | |||||
singer: "...", | |||||
duration: 0, | |||||
currentTime: 0, | |||||
playState: "pause", //"loading"/"playing"/"pause" | |||||
isSliderChanging: false, | |||||
}; | |||||
}, | |||||
created: function() { | |||||
//自定义组件,需要传递第二个参数为this,否则后续的pause等操作不起作用 | |||||
this.videoCtx = uni.createVideoContext("videoPlayer", this); | |||||
}, | |||||
methods: { | |||||
setSrc: function(value) { | |||||
this.src = value; | |||||
}, | |||||
setPoster: function(value) { | |||||
this.poster = value; | |||||
}, | |||||
setName: function(value) { | |||||
this.name = value; | |||||
}, | |||||
setSinger: function(value) { | |||||
this.singer = value; | |||||
}, | |||||
playerOnPlay: function(e) { | |||||
this.playState = "playing"; | |||||
this.$emit("play"); | |||||
}, | |||||
playerOnPause: function(e) { | |||||
this.playState = "pause"; | |||||
this.$emit("pause"); | |||||
}, | |||||
playerOnEnded: function(e) { | |||||
this.playState = "pause"; | |||||
this.$emit("ended"); | |||||
}, | |||||
playerOnTimeupdate: function(e) { | |||||
this.playState = "playing"; | |||||
this.duration = e.detail.duration; | |||||
this.currentTime = e.detail.currentTime; | |||||
this.$emit("timeUpdate", e.detail); | |||||
}, | |||||
playerOnWaiting: function(e) { | |||||
this.playState = "loading"; | |||||
}, | |||||
playerOnError: function(e) { | |||||
uni.showToast({ | |||||
title: "播放出错" + e | |||||
}); | |||||
this.playState = "pause"; | |||||
this.$emit("error", e); | |||||
}, | |||||
formatSeconds(seconds) { | |||||
var result = typeof seconds === "string" ? parseFloat(seconds) : seconds; | |||||
if (isNaN(result)) return ""; | |||||
let h = Math.floor(result / 3600) < 10 ? | |||||
"0" + Math.floor(result / 3600) : | |||||
Math.floor(result / 3600); | |||||
let m = Math.floor((result / 60) % 60) < 10 ? | |||||
"0" + Math.floor((result / 60) % 60) : | |||||
Math.floor((result / 60) % 60) + h * 60; | |||||
let s = Math.floor(result % 60) < 10 ? | |||||
"0" + Math.floor(result % 60) : | |||||
Math.floor(result % 60); | |||||
return `${m}:${s}`; | |||||
}, | |||||
stop: function() { | |||||
this.videoCtx.stop(); | |||||
}, | |||||
seek: function(t) { | |||||
this.videoCtx.seek(t); | |||||
}, | |||||
play: function() { | |||||
var that = this; | |||||
this.videoCtx.play(); //在有的H5浏览器里,如果play不是用户触发的,则play()会报错 | |||||
}, | |||||
pause: function() { | |||||
this.videoCtx.pause(); | |||||
}, | |||||
playbackRate: function(value) { | |||||
this.videoCtx.playbackRate(value); | |||||
//playbackRate不能在play之前或者之后立即调用,否则只有很少几率会成功 | |||||
}, | |||||
sliderChange: function(e) { | |||||
this.isSliderChanging = false; | |||||
//要通过e.detail.value获取,否则如果通过dom去读取slider的value | |||||
//就会存在滚动条拖不动的情况 | |||||
this.videoCtx.seek(e.detail.value); | |||||
this.$emit('sliderChangeComplate', e) | |||||
}, | |||||
sliderChanging(e) { | |||||
this.isSliderChanging = true; | |||||
console.log(e, '当前正在改变') | |||||
}, | |||||
}, | |||||
} | |||||
</script> | |||||
<style lang="scss"> | |||||
// @import './index.scss'; | |||||
@mixin textoverflow() { | |||||
display: -webkit-box; | |||||
overflow: hidden; | |||||
text-overflow: ellipsis; | |||||
-webkit-box-orient: vertical; | |||||
-webkit-line-clamp: 1; | |||||
} | |||||
@keyframes rowup { | |||||
0% { | |||||
-webkit-transform: translate(-50%, -50%) rotate(0deg); | |||||
transform-origin: center center; | |||||
} | |||||
100% { | |||||
-webkit-transform: translate(-50%, -50%) rotate(360deg); | |||||
transform-origin: center center; | |||||
} | |||||
} | |||||
.imt-audio { | |||||
position: relative; | |||||
width: 100%; | |||||
height: 81rpx; | |||||
display: flex; | |||||
box-sizing: border-box; | |||||
background: #fff; | |||||
overflow: hidden; | |||||
.top { | |||||
position: relative; | |||||
width: 100rpx; | |||||
} | |||||
.audio-wrapper { | |||||
display: flex; | |||||
flex-direction: column; | |||||
flex: 1; | |||||
color: #fff; | |||||
margin-left: 20rpx; | |||||
} | |||||
.slidebox { | |||||
display: flex; | |||||
justify-content: space-between; | |||||
width: 96%; | |||||
} | |||||
/deep/ .uni-slider-tap-area { | |||||
padding: 0; | |||||
} | |||||
/deep/ .uni-slider-wrapper { | |||||
min-height: 0; | |||||
} | |||||
/deep/ .uni-slider-handle-wrapper { | |||||
height: 6px; | |||||
} | |||||
.audio-slider { | |||||
flex-grow: 1; | |||||
} | |||||
.play { | |||||
width: 48rpx; | |||||
height: 48rpx; | |||||
z-index: 99; | |||||
background: rgba(0, 0, 0, 0.4); | |||||
border-radius: 50%; | |||||
position: absolute; | |||||
top: 50%; | |||||
left: 50%; | |||||
transform: translate(-50%, -50%); | |||||
&.loading { | |||||
width: 48rpx; | |||||
height: 48rpx; | |||||
animation: rotating_theme3 2s linear infinite; | |||||
} | |||||
} | |||||
} | |||||
.audio-flex { | |||||
padding: 0 32rpx 0 0; | |||||
display: flex; | |||||
align-items: center; | |||||
text { | |||||
color: #70798D; | |||||
} | |||||
} | |||||
@keyframes rotating { | |||||
0% { | |||||
transform: rotateZ(0deg) | |||||
} | |||||
100% { | |||||
transform: rotateZ(360deg) | |||||
} | |||||
} | |||||
@keyframes rotating_theme3 { | |||||
0% { | |||||
transform: translate(-50%, -50%) rotateZ(0deg) | |||||
} | |||||
100% { | |||||
transform: translate(-50%, -50%) rotateZ(360deg) | |||||
} | |||||
} | |||||
.hItem { | |||||
margin-left: 16rpx; | |||||
} | |||||
.extrButton { | |||||
font-size: 36rpx; | |||||
} | |||||
.videoPlayer { | |||||
position: absolute; | |||||
left: 0; | |||||
bottom: 0; | |||||
z-index: -1; | |||||
} | |||||
</style> |
@@ -100,6 +100,7 @@ | |||||
}, | }, | ||||
"usingComponents" : true, | "usingComponents" : true, | ||||
"permission" : {}, | "permission" : {}, | ||||
"requiredBackgroundModes": ["audio"], | |||||
"plugins" : { | "plugins" : { | ||||
"WechatSI" : { | "WechatSI" : { | ||||
"version" : "0.3.4", | "version" : "0.3.4", | ||||
@@ -169,7 +169,7 @@ | |||||
</view> | </view> | ||||
</view> | </view> | ||||
<view class="uchaserbox"> | |||||
<view class="uchaserbox" v-if="chartData1"> | |||||
<qiun-data-charts :opts="opts" type="radar" :chartData="chartData1" :canvas2d="true" | <qiun-data-charts :opts="opts" type="radar" :chartData="chartData1" :canvas2d="true" | ||||
canvasId="wangxiaohuaerlingeryilingwuyib88" background="none" /> | canvasId="wangxiaohuaerlingeryilingwuyib88" background="none" /> | ||||
</view> | </view> | ||||
@@ -379,6 +379,7 @@ | |||||
this.lineOptsect1 = null | this.lineOptsect1 = null | ||||
this.lineOptsect2 = null | this.lineOptsect2 = null | ||||
this.lineOptsect3 = null | this.lineOptsect3 = null | ||||
this.chartData1 = null | |||||
// 团队对比接待量 | // 团队对比接待量 | ||||
this.receptionCountList(this.eharTab.active1, 1, '/cusLvStatistics/teamAnalysisReception') | this.receptionCountList(this.eharTab.active1, 1, '/cusLvStatistics/teamAnalysisReception') | ||||
// 团队对比接待时长 | // 团队对比接待时长 | ||||
@@ -55,8 +55,8 @@ | |||||
</view> | </view> | ||||
<view class="comparesize" v-if="compareFlag&&timepickpickisshow"> | <view class="comparesize" v-if="compareFlag&&timepickpickisshow"> | ||||
<text style="margin-right: 10rpx;">对比:{{index==1?item.num1+'%':item.num1}}</text> | <text style="margin-right: 10rpx;">对比:{{index==1?item.num1+'%':item.num1}}</text> | ||||
<text :style="{color:item.num2*1>0?'red':'green'}">{{item.num2+'%'}} | |||||
{{(item.num2*1) > 0 ? '↑' : '↓'}}</text> | |||||
<text | |||||
:style="{color:item.num2*1>0?'red':'green'}">{{item.num2+'%'}}{{(item.num2*1) > 0 ? '↑' : '↓'}}</text> | |||||
</view> | </view> | ||||
</view> | </view> | ||||
</view> | </view> | ||||
@@ -9,7 +9,10 @@ | |||||
<view class="img B" v-else-if="customerInfo.level==2">B</view> | <view class="img B" v-else-if="customerInfo.level==2">B</view> | ||||
<view class="img C" v-else-if="customerInfo.level==3">C</view> | <view class="img C" v-else-if="customerInfo.level==3">C</view> | ||||
<view class="img D" v-else-if="customerInfo.level==4">D</view> | <view class="img D" v-else-if="customerInfo.level==4">D</view> | ||||
<view class="test">{{customerInfo.name || '--'}}</view> | |||||
<view class="test"> | |||||
{{customerInfo.name || '--'}} | |||||
<view v-if="customerInfo.clientStageName" class="clientStageName">{{ customerInfo.clientStageName }}</view> | |||||
</view> | |||||
<view class="edit" @click="goedit()" v-if="isHavePermission"> | <view class="edit" @click="goedit()" v-if="isHavePermission"> | ||||
<image class="screen-sel-img" src="../../../static/images/edit.png" mode=""></image> | <image class="screen-sel-img" src="../../../static/images/edit.png" mode=""></image> | ||||
</view> | </view> | ||||
@@ -122,6 +125,7 @@ | |||||
<view class="tab2-first-left"> | <view class="tab2-first-left"> | ||||
<view class="img">{{item.agentName.slice(0,1) || '--'}}</view> | <view class="img">{{item.agentName.slice(0,1) || '--'}}</view> | ||||
<view class="name">{{item.agentName || '||'}}</view> | <view class="name">{{item.agentName || '||'}}</view> | ||||
<view v-if="item.clientStageName" class="clientStageName">{{ item.clientStageName }}</view> | |||||
</view> | </view> | ||||
<view class="tab2-first-right">{{item.createTime}}</view> | <view class="tab2-first-right">{{item.createTime}}</view> | ||||
</view> | </view> | ||||
@@ -905,6 +909,17 @@ | |||||
flex-grow: 1; | flex-grow: 1; | ||||
font-weight: 500; | font-weight: 500; | ||||
color: #333333; | color: #333333; | ||||
display: flex; | |||||
align-items: center; | |||||
.clientStageName { | |||||
margin-left: 20rpx; | |||||
padding: 5rpx 20rpx; | |||||
border: 1px solid #F29819; | |||||
border-radius: 32rpx 32rpx 32rpx 0; | |||||
color: #F29819; | |||||
font-size: 20rpx; | |||||
} | |||||
} | } | ||||
.edit { | .edit { | ||||
@@ -918,6 +933,7 @@ | |||||
height: 100%; | height: 100%; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
.right { | .right { | ||||
@@ -1149,6 +1165,7 @@ | |||||
// height: 75rpx; | // height: 75rpx; | ||||
.tab2-first-left { | .tab2-first-left { | ||||
display: flex; | display: flex; | ||||
align-items: center; | |||||
.img { | .img { | ||||
width: 52rpx; | width: 52rpx; | ||||
@@ -1164,7 +1181,15 @@ | |||||
font-weight: 600; | font-weight: 600; | ||||
color: #333333; | color: #333333; | ||||
margin-left: 20rpx; | margin-left: 20rpx; | ||||
margin-top: 11rpx; | |||||
} | |||||
.clientStageName { | |||||
margin-left: 20rpx; | |||||
padding: 5rpx 20rpx; | |||||
border: 1px solid #F29819; | |||||
border-radius: 32rpx 32rpx 32rpx 0; | |||||
color: #F29819; | |||||
font-size: 20rpx; | |||||
} | } | ||||
} | } | ||||
@@ -90,12 +90,11 @@ | |||||
</view> | </view> | ||||
</view> | </view> | ||||
<view class="conmsg" v-if="allList.length!=0"> | |||||
<view class="conmsg"> | |||||
<view class="conmsg-title"> | <view class="conmsg-title"> | ||||
客户标签 | 客户标签 | ||||
</view> | </view> | ||||
<view class="conmsg-msg"> | <view class="conmsg-msg"> | ||||
<view v-for="(item,index) in allList" :key="index"> | <view v-for="(item,index) in allList" :key="index"> | ||||
<view class=""> | <view class=""> | ||||
<view class="conmsg-msg-lab" style="border: none;"> | <view class="conmsg-msg-lab" style="border: none;"> | ||||
@@ -193,11 +192,16 @@ | |||||
console.log(this.userInfo.showPhoneStatus) | console.log(this.userInfo.showPhoneStatus) | ||||
// 先调用借口查询数据 | // 先调用借口查询数据 | ||||
this.customerId = e.id | this.customerId = e.id | ||||
this.getdetail() | |||||
this.initPage() | |||||
}, | }, | ||||
methods: { | methods: { | ||||
initPage() { | |||||
this.getdetail() | |||||
// 获取置业需求 | |||||
this.getListByType() | |||||
}, | |||||
Edittag(item, item1, index, i) { | Edittag(item, item1, index, i) { | ||||
if (this.allList[index].children[i].selected == 0) { | if (this.allList[index].children[i].selected == 0) { | ||||
this.allList[index].children[i].selected = 1; | this.allList[index].children[i].selected = 1; | ||||
} else { | } else { | ||||
@@ -241,8 +245,6 @@ | |||||
this.selectform.level = 'A'; | this.selectform.level = 'A'; | ||||
this.form.level = 1; | this.form.level = 1; | ||||
} | } | ||||
// 获取置业需求 | |||||
this.getListByType() | |||||
}) | }) | ||||
}, | }, | ||||
@@ -252,7 +254,7 @@ | |||||
customerId: this.customerId | customerId: this.customerId | ||||
}) | }) | ||||
.then(res => { | .then(res => { | ||||
// console.log(res) | |||||
console.log(res, '123123123123') | |||||
res.forEach(item1 => { | res.forEach(item1 => { | ||||
item1.children.map(item => { | item1.children.map(item => { | ||||
if (item.isInterval == 0) { | if (item.isInterval == 0) { | ||||
@@ -95,11 +95,12 @@ | |||||
totalRecord: '', | totalRecord: '', | ||||
freeList: [], | freeList: [], | ||||
customerType: [], | customerType: [], | ||||
customerId: '' | |||||
customerId: '', | |||||
orgCode: '', | |||||
} | } | ||||
}, | }, | ||||
onShow() { | onShow() { | ||||
this.orgCode = uni.getStorageSync('orgCode') | |||||
}, | }, | ||||
onLoad(e) { | onLoad(e) { | ||||
this.customerId = e.id | this.customerId = e.id | ||||
@@ -174,6 +175,7 @@ | |||||
"stageCode": this.stateList[this.screen.state].stageCode, | "stageCode": this.stateList[this.screen.state].stageCode, | ||||
"stageName": this.stateList[this.screen.state].stageName, | "stageName": this.stateList[this.screen.state].stageName, | ||||
"remarks": this.screen.con, | "remarks": this.screen.con, | ||||
orgCode: this.orgCode, | |||||
words, | words, | ||||
// "settingTime":"", | // "settingTime":"", | ||||
"agentRelationPo": { | "agentRelationPo": { | ||||
@@ -55,13 +55,13 @@ | |||||
</view> | </view> | ||||
<view class="right" v-if="item.recording!=0"> | <view class="right" v-if="item.recording!=0"> | ||||
<view style="margin-right: 6rpx;color: red;">{{item.receptionStatusName.slice(0, 2) || ''}}</view> | |||||
<view v-if="item.receptionStatusName" style="margin-right: 6rpx;color: red;">{{item.receptionStatusName.slice(0, 2) || ''}}</view> | |||||
<text style="margin-right: 6rpx;" v-if="item.receptionStatusName"> |</text> | <text style="margin-right: 6rpx;" v-if="item.receptionStatusName"> |</text> | ||||
<view v-if="methodsisshow"> | <view v-if="methodsisshow"> | ||||
<text style="margin-right: 6rpx;color: red;" v-if="item.taboo==1">违禁</text> | <text style="margin-right: 6rpx;color: red;" v-if="item.taboo==1">违禁</text> | ||||
<text style="margin-right: 6rpx;" v-if="item.taboo==1"> |</text> | <text style="margin-right: 6rpx;" v-if="item.taboo==1"> |</text> | ||||
</view> | </view> | ||||
<view style="margin-right: 6rpx;">{{item.validInvalidName.slice(0, 2)||''}}</view> | |||||
<view v-if="item.validInvalidName" style="margin-right: 6rpx;">{{item.validInvalidName.slice(0, 2)||''}}</view> | |||||
<text style="margin-right: 6rpx;" v-if="item.validInvalidName"> |</text> | <text style="margin-right: 6rpx;" v-if="item.validInvalidName"> |</text> | ||||
<view v-if="item.markAdvisor==0" class="">未标记</view> | <view v-if="item.markAdvisor==0" class="">未标记</view> | ||||
<view v-if="item.markAdvisor==1" class="">已标记</view> | <view v-if="item.markAdvisor==1" class="">已标记</view> | ||||
@@ -108,7 +108,7 @@ | |||||
所属顾问 | 所属顾问 | ||||
</view> | </view> | ||||
<view class="screen-sel" @click="selectshow = true"> | <view class="screen-sel" @click="selectshow = true"> | ||||
<u-input v-model="screen.counselorName" input-align="right" type="text" placeholder='请选择' | |||||
<input v-model="screen.counselorName" type="text" placeholder='请选择' | |||||
class="screen-inp" disabled /> | class="screen-inp" disabled /> | ||||
<image class="screen-sel-img" src="../../../static/images/right.png" mode=""></image> | <image class="screen-sel-img" src="../../../static/images/right.png" mode=""></image> | ||||
</view> | </view> | ||||
@@ -507,11 +507,11 @@ | |||||
}, | }, | ||||
//获取顾问列表 | //获取顾问列表 | ||||
getFreeList() { | getFreeList() { | ||||
this.$u.get("/zkAgentPool/freeList?itemId=" + this.buildingID).then(res => { | |||||
this.$u.post("/cusLvStatistics/selectAllAccountIdByHouseId", {houseId: this.buildingID}).then(res => { | |||||
this.freeList = res; | this.freeList = res; | ||||
this.freeList.forEach(item => { | this.freeList.forEach(item => { | ||||
item.label = item.name; | item.label = item.name; | ||||
item.value = item.agentId | |||||
item.value = item.accountId | |||||
}) | }) | ||||
}) | }) | ||||
}, | }, | ||||
@@ -521,7 +521,7 @@ | |||||
}, | }, | ||||
actionSelectCallback(e) { | actionSelectCallback(e) { | ||||
this.screen.agentId = e[0].value; | this.screen.agentId = e[0].value; | ||||
this.screenShow = false; | |||||
this.screen.counselorName = e[0].label | |||||
this.recordList = []; | this.recordList = []; | ||||
this.nextPage = 1; | this.nextPage = 1; | ||||
this.getMyCustom(); | this.getMyCustom(); | ||||
@@ -864,6 +864,7 @@ | |||||
.screen-counselor { | .screen-counselor { | ||||
display: flex; | display: flex; | ||||
align-items: center; | |||||
height: 106rpx; | height: 106rpx; | ||||
// padding: 40rpx 30rpx 36rpx 30rpx; | // padding: 40rpx 30rpx 36rpx 30rpx; | ||||
padding: 0 30rpx; | padding: 0 30rpx; | ||||
@@ -871,7 +872,6 @@ | |||||
border-bottom: 1px solid #EEEEEE; | border-bottom: 1px solid #EEEEEE; | ||||
.screen-text { | .screen-text { | ||||
margin: 40rpx 0 36rpx 0; | |||||
font-size: 30rpx; | font-size: 30rpx; | ||||
font-weight: 400; | font-weight: 400; | ||||
color: #333333; | color: #333333; | ||||
@@ -880,21 +880,20 @@ | |||||
.screen-sel { | .screen-sel { | ||||
display: flex; | display: flex; | ||||
justify-content: space-between; | |||||
justify-content: flex-end; | |||||
align-items: center; | |||||
width: 500rpx; | width: 500rpx; | ||||
margin-left: 60rpx; | margin-left: 60rpx; | ||||
.screen-sel-img { | .screen-sel-img { | ||||
flex-shrink: 0; | flex-shrink: 0; | ||||
margin: 40rpx 0 36rpx 0; | |||||
width: 14rpx; | width: 14rpx; | ||||
height: 30rpx; | height: 30rpx; | ||||
} | } | ||||
.screen-inp { | .screen-inp { | ||||
margin-top: 20rpx; | |||||
padding: 0 20rpx; | padding: 0 20rpx; | ||||
flex-grow: 1; | |||||
text-align: right; | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -104,8 +104,8 @@ | |||||
<view class="screen-text"> | <view class="screen-text"> | ||||
所属顾问 | 所属顾问 | ||||
</view> | </view> | ||||
<view class="screen-sel" @click="selectshow = true"> | |||||
<u-input input-align="right" v-model="screen.agentIdtext" type="text" placeholder='请选择' class="screen-inp" | |||||
<view class="screen-sel" @tap="selectshow = true"> | |||||
<input v-model="screen.agentIdtext" type="text" placeholder="请选择" class="screen-inp" | |||||
disabled /> | disabled /> | ||||
<image class="screen-sel-img" src="../../../static/images/right.png" mode=""></image> | <image class="screen-sel-img" src="../../../static/images/right.png" mode=""></image> | ||||
</view> | </view> | ||||
@@ -114,8 +114,8 @@ | |||||
<view class="screen-text"> | <view class="screen-text"> | ||||
客户标签 | 客户标签 | ||||
</view> | </view> | ||||
<view class="screen-sel" @click="selectTipshow = true"> | |||||
<u-input v-model="screen.cunsumerTips" type="text" placeholder='请选择' input-align="right" class="screen-inp" | |||||
<view class="screen-sel" @tap="selectTipshow = true"> | |||||
<input v-model="screen.cunsumerTips" type="text" placeholder="请选择" class="screen-inp" | |||||
disabled /> | disabled /> | ||||
<image class="screen-sel-img" src="../../../static/images/right.png" mode=""></image> | <image class="screen-sel-img" src="../../../static/images/right.png" mode=""></image> | ||||
</view> | </view> | ||||
@@ -320,7 +320,7 @@ | |||||
soltishow: false, | soltishow: false, | ||||
staTime: '', | staTime: '', | ||||
endtime: '', | endtime: '', | ||||
orderBy: '', | |||||
orderBy: '', // 排序的id | |||||
permissions: { | permissions: { | ||||
commonly1: false, | commonly1: false, | ||||
commonly2: false | commonly2: false | ||||
@@ -351,16 +351,16 @@ | |||||
}, | }, | ||||
onPullDownRefresh() { | onPullDownRefresh() { | ||||
this.nextPage = 1; | |||||
this.recordList = [] | |||||
this.resetFilter() | |||||
this.reset() | this.reset() | ||||
this.getFreeList() | this.getFreeList() | ||||
this.getfindKeywordsList() | this.getfindKeywordsList() | ||||
this.getFromSource(); | this.getFromSource(); | ||||
this.getMyCustom(); | this.getMyCustom(); | ||||
setTimeout(() => { | setTimeout(() => { | ||||
uni.stopPullDownRefresh() | uni.stopPullDownRefresh() | ||||
}, 3000) | |||||
}, 2000) | |||||
}, | }, | ||||
onShow() { | onShow() { | ||||
@@ -393,11 +393,26 @@ | |||||
} | } | ||||
}, | }, | ||||
methods: { | methods: { | ||||
// 过滤 | |||||
resetFilter() { | |||||
this.sortFilter = '排序'; | |||||
this.orderBy = null; | |||||
this.arriveFilter = '到访时间'; | |||||
this.staTime = ''; | |||||
this.endtime = ''; | |||||
this.nextPage = 1; | |||||
this.activeTotal = 5; | |||||
this.recordList = []; | |||||
this.receptionDuration = '接待时长'; | |||||
this.activeTotal2 = 0; | |||||
}, | |||||
// 获取客户来源 | // 获取客户来源 | ||||
getFromSource() { | getFromSource() { | ||||
this.$u.get('customer/findCustomerSourceList', { | this.$u.get('customer/findCustomerSourceList', { | ||||
houseId: this.buildingID | houseId: this.buildingID | ||||
}).then(res => { | |||||
}).then(res => { | |||||
console.log('我进来了') | console.log('我进来了') | ||||
this.list = res | this.list = res | ||||
}) | }) | ||||
@@ -555,11 +570,11 @@ | |||||
//获取顾问列表 | //获取顾问列表 | ||||
getFreeList() { | getFreeList() { | ||||
this.freeList = [] | this.freeList = [] | ||||
this.$u.get("/zkAgentPool/freeList?itemId=" + this.buildingID).then(res => { | |||||
this.$u.post("/cusLvStatistics/selectAllAccountIdByHouseId", {houseId: this.buildingID}).then(res => { | |||||
this.freeList = res; | this.freeList = res; | ||||
this.freeList.forEach(item => { | this.freeList.forEach(item => { | ||||
item.label = item.name; | item.label = item.name; | ||||
item.value = item.agentId | |||||
item.value = item.accountId | |||||
}) | }) | ||||
}) | }) | ||||
}, | }, | ||||
@@ -969,6 +984,7 @@ | |||||
border-bottom: 1px solid #E0E0E0; | border-bottom: 1px solid #E0E0E0; | ||||
.screen-text { | .screen-text { | ||||
flex-shrink: 0; | |||||
margin: 40rpx 0 36rpx 0; | margin: 40rpx 0 36rpx 0; | ||||
font-size: 30rpx; | font-size: 30rpx; | ||||
font-weight: 400; | font-weight: 400; | ||||
@@ -977,9 +993,10 @@ | |||||
} | } | ||||
.screen-sel { | .screen-sel { | ||||
flex-grow: 1; | |||||
display: flex; | display: flex; | ||||
justify-content: space-between; | |||||
width: 500rpx; | |||||
justify-content: flex-end; | |||||
align-items: center; | |||||
margin-left: 60rpx; | margin-left: 60rpx; | ||||
.screen-sel-img { | .screen-sel-img { | ||||
@@ -990,9 +1007,8 @@ | |||||
} | } | ||||
.screen-inp { | .screen-inp { | ||||
margin-top: 20rpx; | |||||
padding: 0 20rpx; | padding: 0 20rpx; | ||||
flex-grow: 1; | |||||
text-align: right; | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -464,9 +464,11 @@ | |||||
this.methodsisshow = true; | this.methodsisshow = true; | ||||
} | } | ||||
if (this.userInfo.zkProperties.length == 1) { | if (this.userInfo.zkProperties.length == 1) { | ||||
console.log('asdklajkl') | |||||
this.buildingID = uni.getStorageSync('buildingID').id; | this.buildingID = uni.getStorageSync('buildingID').id; | ||||
this.buildingname = uni.getStorageSync('buildingID').name; | this.buildingname = uni.getStorageSync('buildingID').name; | ||||
this.buildingishow = false; | this.buildingishow = false; | ||||
uni.setStorageSync('orgCode', this.userInfo.zkProperties[0].orgCode) | |||||
} else { | } else { | ||||
this.buildingishow = true; | this.buildingishow = true; | ||||
this.buildingname = uni.getStorageSync('buildingID').name; | this.buildingname = uni.getStorageSync('buildingID').name; | ||||
@@ -490,6 +492,8 @@ | |||||
this.initworkThisWeek() | this.initworkThisWeek() | ||||
this.initrealTimeStatistics() | this.initrealTimeStatistics() | ||||
// this.sendLog() | // this.sendLog() | ||||
console.log(this.lpanlist, '123uio123uyoiasdcfnmklsdfm;kl ') | |||||
}, | }, | ||||
methods: { | methods: { | ||||
indexStatus(i){ | indexStatus(i){ | ||||
@@ -754,6 +758,7 @@ | |||||
name: e[0].label | name: e[0].label | ||||
} | } | ||||
uni.setStorageSync("buildingID", lopan); //楼盘id写入缓存 | uni.setStorageSync("buildingID", lopan); //楼盘id写入缓存 | ||||
uni.setStorageSync("orgCode", e[0].orgCode); //楼盘id写入缓存 | |||||
this.initworkThisWeek() | this.initworkThisWeek() | ||||
this.initrealTimeStatistics() | this.initrealTimeStatistics() | ||||
this.waitForOperation() | this.waitForOperation() | ||||
@@ -17,7 +17,7 @@ | |||||
<view class="infozuochiud1">{{item.jbaName}}</view> | <view class="infozuochiud1">{{item.jbaName}}</view> | ||||
</view> | </view> | ||||
<view class="infoyou"> | <view class="infoyou"> | ||||
<view class="infoyouchiud2">未学习</view> | |||||
<view class="infoyouchiud2">{{ item.studyStatus }}</view> | |||||
</view> | </view> | ||||
</view> | </view> | ||||
<view class="footerinfo"> | <view class="footerinfo"> | ||||
@@ -272,8 +272,8 @@ | |||||
}, | }, | ||||
addHot(){ | addHot(){ | ||||
// console.log('30') | // console.log('30') | ||||
this.$u.get('/addtodigest/addHeat',{ | |||||
id:this.customerId | |||||
this.$u.post('/zkstudyrecord',{ | |||||
targetId: this.customerId | |||||
}) | }) | ||||
.then(res=>{ | .then(res=>{ | ||||
// console.log(res) | // console.log(res) | ||||
@@ -361,8 +361,8 @@ | |||||
}, | }, | ||||
addHot() { | addHot() { | ||||
// console.log('30') | // console.log('30') | ||||
this.$u.get('/addtodigest/addHeat', { | |||||
id: this.customerId | |||||
this.$u.post('/zkstudyrecord', { | |||||
targetId: this.customerId | |||||
}) | }) | ||||
.then(res => { | .then(res => { | ||||
// console.log(res) | // console.log(res) | ||||
@@ -873,23 +873,23 @@ | |||||
color: #FFFFFF; | color: #FFFFFF; | ||||
border: none; | border: none; | ||||
} | } | ||||
.boxs { | .boxs { | ||||
min-height: 100%; | min-height: 100%; | ||||
display: flex; | display: flex; | ||||
flex-direction: column; | flex-direction: column; | ||||
.chat { | .chat { | ||||
flex-grow: 1; | flex-grow: 1; | ||||
} | } | ||||
.bottomArea { | .bottomArea { | ||||
flex-shrink: 0; | flex-shrink: 0; | ||||
position: sticky; | position: sticky; | ||||
bottom: 0; | bottom: 0; | ||||
} | } | ||||
} | } | ||||
// 表单 | // 表单 | ||||
.tian-view { | .tian-view { | ||||
width: 570upx; | width: 570upx; | ||||
@@ -30,7 +30,7 @@ | |||||
<scroll-view :scroll-top="scrollTop" lower-threshold='100px' @scrolltolower="ltolower()" upper-threshold='40px' | <scroll-view :scroll-top="scrollTop" lower-threshold='100px' @scrolltolower="ltolower()" upper-threshold='40px' | ||||
@scrolltoupper="rolltoupper()" :scroll-into-view="scrollId" scroll-y="true" class="zhuti text scroll-Y"> | @scrolltoupper="rolltoupper()" :scroll-into-view="scrollId" scroll-y="true" class="zhuti text scroll-Y"> | ||||
<!-- 聊天记录--> | <!-- 聊天记录--> | ||||
<view class="dialog-block" @click="close()" v-for="(dialog,i) in dialogList" :key="i"> | |||||
<view class="dialog-block" @click="close()" v-for="(dialog,i) in dialogList" :key="i"> | |||||
<view :id="'dialog'+i" class="fileName">录音文件</view> | <view :id="'dialog'+i" class="fileName">录音文件</view> | ||||
<view class="text" :id="'dialog'+csdFileindex+'text'+item.bg" | <view class="text" :id="'dialog'+csdFileindex+'text'+item.bg" | ||||
:class="{active: item.bg < playNow && item.ed > playNow && i==0}" | :class="{active: item.bg < playNow && item.ed > playNow && i==0}" | ||||
@@ -153,6 +153,7 @@ | |||||
</scroll-view> | </scroll-view> | ||||
<view class="bottombox"> | <view class="bottombox"> | ||||
<!-- 播放块 --> | <!-- 播放块 --> | ||||
<!-- <yz-audio ref="zyAudio"></yz-audio> --> | |||||
<view class="bottomhead"> | <view class="bottomhead"> | ||||
<view class="audio-play" @tap="changePlayState"> | <view class="audio-play" @tap="changePlayState"> | ||||
<image class="image" mode="widthFix" | <image class="image" mode="widthFix" | ||||
@@ -1804,6 +1805,7 @@ | |||||
//录音实例 | //录音实例 | ||||
creatAudio() { | creatAudio() { | ||||
this.innerAudioContext = uni.createInnerAudioContext(); | this.innerAudioContext = uni.createInnerAudioContext(); | ||||
// this.$refs.zyAudio.setSrc(this.recordPath) | |||||
if (uni.getStorageSync('entrance') == 1) { | if (uni.getStorageSync('entrance') == 1) { | ||||
this.innerAudioContext.autoplay = false; | this.innerAudioContext.autoplay = false; | ||||
} else { | } else { | ||||
@@ -2751,18 +2753,17 @@ | |||||
padding: 20rpx; | padding: 20rpx; | ||||
border: 1rpx solid #E4F0FF; | border: 1rpx solid #E4F0FF; | ||||
} | } | ||||
.scroll-Y .text.active .content { | .scroll-Y .text.active .content { | ||||
color: #38FFF1; | color: #38FFF1; | ||||
position: relative; | position: relative; | ||||
} | } | ||||
.scroll-Y .text.active[data-speaker="2"] .content, | .scroll-Y .text.active[data-speaker="2"] .content, | ||||
.scroll-Y .text.active[data-speaker="4"] .content, | .scroll-Y .text.active[data-speaker="4"] .content, | ||||
.scroll-Y .text.active[data-speaker="6"] .content { | .scroll-Y .text.active[data-speaker="6"] .content { | ||||
color: #FF7538 !important; | color: #FF7538 !important; | ||||
position: relative; | position: relative; | ||||
} | } | ||||
</style> | </style> |
@@ -2,7 +2,8 @@ | |||||
// const base = 'http://8kdmng.natappfree.cc' ;// 佳豪 | // const base = 'http://8kdmng.natappfree.cc' ;// 佳豪 | ||||
// const base = 'http://192.168.31.134:9999' ;// 佳豪 | // const base = 'http://192.168.31.134:9999' ;// 佳豪 | ||||
// const base = 'http://192.168.31.167:9999' // 长龙 | // const base = 'http://192.168.31.167:9999' // 长龙 | ||||
const base = 'https://zanyong.hfju.com';// 正式 | |||||
const base = 'https://zanyong.hfju.com';// 正式 AI销管 | |||||
// const base = 'https://hxz.quhouse.com';// 正式 AI销讲助手 | |||||
// http.js使用 | // http.js使用 | ||||
const baseUrl = `${base}/autoSR/api`; | const baseUrl = `${base}/autoSR/api`; | ||||