lancer 3 years ago
parent
commit
e8a9d31983
13 changed files with 1813 additions and 11 deletions
  1. +32
    -0
      pages.json
  2. +15
    -1
      pages/center/Piabodata/Groupcontrast.vue
  3. +16
    -1
      pages/center/Piabodata/StaffAnalysis.vue
  4. +22
    -2
      pages/center/Piabodata/Theteamcompared.vue
  5. +92
    -0
      pages/center/Piabodata/selectTeam.vue
  6. +29
    -3
      pages/center/consumer/consumerDetail.vue
  7. +415
    -0
      pages/center/consumer/edit.vue
  8. +7
    -1
      pages/center/consumer/index.vue
  9. +265
    -0
      pages/center/consumer/newFollowup/newFollowup.css
  10. +816
    -0
      pages/center/consumer/newFollowup/newFollowup.vue
  11. +88
    -0
      pages/center/consumer/remind.vue
  12. +16
    -3
      pages/center/records/index.vue
  13. BIN
      static/images/edit.png

+ 32
- 0
pages.json View File

@@ -254,6 +254,14 @@
"navigationBarTextStyle": "black"
}
},
{
"path": "Piabodata/selectTeam",
"style": {
"navigationBarTitleText": "选择团队",
"navigationBarBackgroundColor": "#FFFFFF",
"navigationBarTextStyle": "black"
}
},
{
"path": "Piabodata/Userinsightinto",
"style": {
@@ -317,6 +325,30 @@
"navigationBarBackgroundColor": "#FFFFFF",
"navigationBarTextStyle": "black"
}
},
{
"path": "consumer/remind",
"style": {
"navigationBarTitleText": "添加提醒",
"navigationBarBackgroundColor": "#FFFFFF",
"navigationBarTextStyle": "black"
}
},
{
"path": "consumer/edit",
"style": {
"navigationBarTitleText": "编辑客户",
"navigationBarBackgroundColor": "#FFFFFF",
"navigationBarTextStyle": "black"
}
},
{
"path": "consumer/newFollowup/newFollowup",
"style": {
"navigationBarTitleText": "写跟进",
"navigationBarBackgroundColor": "#FFFFFF",
"navigationBarTextStyle": "black"
}
}
]
}


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

@@ -197,7 +197,7 @@
</view>
</view>
<u-calendar v-model="totalTimeShow" mode="range" @change="totalTimeChange"></u-calendar>
</view>
</template>

@@ -211,6 +211,7 @@
activeTotal: 2,
activeTotal2: 0,
bocindex:0,
totalTimeShow: false,
newlisttabinfo:[
{name:'接待量',zxl:'10'},
{name:'平均执行率',zxl:'50'},
@@ -236,6 +237,19 @@
tapspagek2(index) {
this.bocindex = index;
},
//时间切换
tabtimetap(index) {
if (index == 3) {
this.totalTimeShow = true;
} else {
this.activeTotal = index;
}
},
//自定义时间
totalTimeChange(e) {
console.log(e.startDate, e.endDate)
this.activeTotal=3;
},
//集团对比
Groupcontrast(){
uni.navigateTo({


+ 16
- 1
pages/center/Piabodata/StaffAnalysis.vue View File

@@ -105,7 +105,7 @@
</view>
<u-calendar v-model="totalTimeShow" mode="range" @change="totalTimeChange"></u-calendar>
<u-calendar v-model="totalTimeShow" mode="range" @change="totalTimeChange"></u-calendar>
</view>
</template>
@@ -114,6 +114,7 @@
data() {
return {
timepickpickisshow:false,
totalTimeShow: false,
activeTotal:0,
activeTotal2:0,
lineOptsect:{
@@ -148,6 +149,20 @@
checkboxChange(){
this.timepickpickisshow=!this.timepickpickisshow;
},
tabtimetap(index){
// console.log(idx)
// this.activeTotal=idx
if (index == 3) {
this.totalTimeShow = true;
} else {
this.activeTotal = index;
}
},
//自定义时间
totalTimeChange(e) {
console.log(e.startDate, e.endDate)
this.activeTotal=3;
},
},
}
</script>


+ 22
- 2
pages/center/Piabodata/Theteamcompared.vue View File

@@ -126,7 +126,7 @@
<view class="single">
<view class="title" style="padding-right: 30rpx;">
<view class="title1" style="flex: 1;">违禁能力(TOP10)</view>
<view class="title2" style="flex: 1;justify-content: flex-end;">
<view class="title2" style="flex: 1;justify-content: flex-end;" @click="goTeam">
<view class="title2-che">楼盘
<image class="righttochoose" src="../../../static/images/righttochoose.png" mode=""></image>
</view>
@@ -197,7 +197,7 @@
</view>
</view>
<u-calendar v-model="totalTimeShow" mode="range" @change="totalTimeChange"></u-calendar>
</view>
</template>

@@ -211,6 +211,7 @@
activeTotal: 2,
activeTotal2: 0,
bocindex:0,
totalTimeShow: false,
newlisttabinfo:[
{name:'接待量',zxl:'10'},
{name:'平均执行率',zxl:'50'},
@@ -232,6 +233,19 @@
},
methods: {
//时间切换
tabtimetap(index) {
if (index == 3) {
this.totalTimeShow = true;
} else {
this.activeTotal = index;
}
},
//自定义时间
totalTimeChange(e) {
console.log(e.startDate, e.endDate)
this.activeTotal=3;
},
//指标执行率分析tab
tapspagek2(index) {
this.bocindex = index;
@@ -241,6 +255,12 @@
uni.navigateTo({
url: '/pages/center/Piabodata/Groupcontrast'
});
},
// 去选择团队
goTeam(){
uni.navigateTo({
url:'/pages/center/Piabodata/selectTeam'
})
}
}
};


+ 92
- 0
pages/center/Piabodata/selectTeam.vue View File

@@ -0,0 +1,92 @@
<template>
<view class="box">
<!-- 顾问选择 -->
<view class="nextcon">
最多选择五项
</view>
<view class="content">
<checkbox-group v-model="value" @change="checkboxChange">
<view v-for="(item,index) in items" :key="index">
<view class="content-tips">
<view class="left">
{{item.name}}
</view>
<view class="right">
<radio :value="item.value" style="transform:scale(0.8)" color="#2671E2" :checked="item.checked" @click="addclick(index)"></radio>
</view>
</view>
</view>
</checkbox-group>

</view>
</view>
</template>

<script>
export default {
data(){
return{
value:[],
items:[
{
name:'销售一部',
value:'0',
checked:false
},
{
name:'销售二部',
value:'1',
checked:false
},
]
}
},
methods:{
checkboxChange (e) {
console.log(e)
},
addclick(index){
this.items[index].checked=!this.items[index].checked
}
}
}
</script>

<style lang="scss" scoped>
.box{
background: #F8F8F8;
width: 100%;
height: 100%;
font-size: 30rpx;
font-weight: 400;
// line-height: 30px;
.nextcon{
height: 78rpx;
background: #F4F8FD;
color: #2671E2;
text-align: center;
line-height: 78rpx;
}
.content-tips{
display: flex;
justify-content: space-between;
background: #fff;
padding: 0 30rpx;
height: 92rpx;
margin-bottom: 20rpx;
.left{
display: flex;
// margin-top: 30rpx;
font-weight: 500;
color: #303030;
line-height: 92rpx;
font-size: 30rpx;
}
.right{
margin: 24rpx 0;
}
}
}
</style>

+ 29
- 3
pages/center/consumer/consumerDetail.vue View File

@@ -1,7 +1,7 @@
<template>
<view class="box">
<view class="content">
<view class="content-tips" @click="godetail()">
<view class="content-tips" @click="goedit()">
<view class="content-first">
<view class="left">
<view class="img">
@@ -10,6 +10,9 @@
<view class="test">
李先生
</view>
<view class="edit">
<image class="screen-sel-img" src="../../../static/images/edit.png" mode=""></image>
</view>
</view>
<view class="right">
<view class="point"></view>
@@ -204,7 +207,7 @@
</view>
<view class="pon-foot">
<view class="foot-tab">
<view class="foot-tab" @click="goRemind">
添加提醒
</view>
<!-- <view class="foot-tab">
@@ -228,7 +231,20 @@
tabtimetap(idx){
console.log(idx)
this.activeTotal=idx
}
},
// 去编辑
goedit(){
// console.log('去编辑')
uni.navigateTo({
url:'/pages/center/consumer/edit'
})
},
// 去添加提醒
goRemind(){
uni.navigateTo({
url:'/pages/center/consumer/remind'
})
},
}
}
</script>
@@ -299,6 +315,16 @@
font-weight: 500;
color: #333333;
}
.edit{
height: 30rpx;
width: 30rpx;
margin-left: 30rpx;
margin-top: 11rpx;
image{
width: 100%;
height: 100%;
}
}
}
.right{
display: flex;


+ 415
- 0
pages/center/consumer/edit.vue View File

@@ -0,0 +1,415 @@
<template>
<view class="box">
<!-- 编辑 -->
<view class="conmsg">
<view class="conmsg-title">
客户信息
</view>
<view class="conmsg-msg">
<view class="conmsg-msg-lab">
<view class="conmsg-msg-lab-1">
客户姓名
<view class="star">
*
</view>
</view>
<view class="conmsg-msg-lab-inp">
<input type="text" placeholder="请输入客户姓名" v-model="form.name"/>
</view>
</view>
<view class="conmsg-msg-lab">
<view class="conmsg-msg-lab-1">
客户性别
</view>
<view class="conmsg-msg-lab-inp">
<u-radio-group v-model="form.sex" >
<view style="display: flex;">
<u-radio name="0" shape='circle'>男</u-radio>
<u-radio name="1" shape='circle'>女</u-radio>
</view>
</u-radio-group>
</view>
</view>
<view class="conmsg-msg-lab">
<view class="conmsg-msg-lab-1">
联系电话
<view class="star">
*
</view>
</view>
<view class="conmsg-msg-lab-inp">
<input type="text" placeholder="请输入联系电话" v-model="form.phone"/>
</view>
</view>
<view class="conmsg-msg-lab">
<view class="conmsg-msg-lab-1">
微信账号
</view>
<view class="conmsg-msg-lab-inp">
<input type="text" placeholder="请输入微信账号" v-model="form.wx"/>
</view>
</view>
<view class="conmsg-msg-lab">
<view class="conmsg-msg-lab-1">
客户等级
</view>
<view class="conmsg-msg-lab-inp">
<input type="text" placeholder="请选择客户等级" @click="lelveshow = true" v-model="selectform.lelve" disabled/>
</view>
<view class="conmsg-msg-lab-img">
<image class="screen-sel-img" src="../../../static/images/right.png" mode=""></image>
</view>
</view>
<view class="conmsg-msg-lab">
<view class="conmsg-msg-lab-1">
客户阶段
</view>
<view class="conmsg-msg-lab-inp">
<input type="text" placeholder="请选择客户阶段" @click="stageshow = true" v-model="selectform.stage" disabled/>
</view>
<view class="conmsg-msg-lab-img">
<image class="screen-sel-img" src="../../../static/images/right.png" mode=""></image>
</view>
</view>
<view class="conmsg-msg-lab">
<view class="conmsg-msg-lab-1">
备注内容
</view>
<view class="conmsg-msg-lab-inp">
<input type="text" placeholder="请输入备注内容" v-model="form.txea"/>
</view>
</view>
</view>
</view>
<view class="conmsg">
<view class="conmsg-title">
客户标签
</view>
<view class="conmsg-msg">
<view class="conmsg-msg-lab">
<view class="conmsg-msg-lab-1">
置业需求
</view>
<view class="conmsg-msg-lab-inp">
<input type="text" placeholder="请选择置业需求" @click="demandshow = true" v-model="selectform.demand" disabled/>
</view>
<view class="conmsg-msg-lab-img">
<image class="screen-sel-img" src="../../../static/images/right.png" mode=""></image>
</view>
</view>
<view class="conmsg-msg-lab">
<view class="conmsg-msg-lab-1">
意向面积
</view>
<view class="conmsg-msg-lab-inp">
<input type="text" placeholder="请选择意向面积" @click="areashow = true" v-model="selectform.area" disabled/>
</view>
<view class="conmsg-msg-lab-img">
<image class="screen-sel-img" src="../../../static/images/right.png" mode=""></image>
</view>
</view>
<view class="conmsg-msg-lab">
<view class="conmsg-msg-lab-1">
预算
</view>
<view class="conmsg-msg-lab-inp">
<input type="text" placeholder="请选择预算" @click="budgetshow = true" v-model="selectform.budget" disabled/>
</view>
<view class="conmsg-msg-lab-img">
<image class="screen-sel-img" src="../../../static/images/right.png" mode=""></image>
</view>
</view>
<view class="conmsg-msg-lab">
<view class="conmsg-msg-lab-1">
关注点
</view>
<view class="conmsg-msg-lab-inp">
<input type="text" placeholder="请选择关注点" @click="fouceshow = true" v-model="selectform.fouce" disabled/>
</view>
<view class="conmsg-msg-lab-img">
<image class="screen-sel-img" src="../../../static/images/right.png" mode=""></image>
</view>
</view>
<view class="conmsg-msg-lab">
<view class="conmsg-msg-lab-1">
客户来源
</view>
<view class="conmsg-msg-lab-inp">
<input type="text" placeholder="请选择客户来源" @click="soureshow = true" v-model="selectform.soure" disabled/>
</view>
<view class="conmsg-msg-lab-img">
<image class="screen-sel-img" src="../../../static/images/right.png" mode=""></image>
</view>
</view>
</view>
</view>
<view class="submit">
<view class="btn">
确定
</view>
</view>
<!-- 客户等级 -->
<u-select v-model="lelveshow" :list="lelvelist" @confirm="lelveshowCallback"></u-select>
<!-- 客户阶段 -->
<u-select v-model="stageshow" :list="stagelist" @confirm="stageshowCallback"></u-select>
<!-- 职业需求 -->
<u-select v-model="demandshow" :list="demandlist" @confirm="demandshowCallback"></u-select>
<!-- 意向面积 -->
<u-select v-model="areashow" :list="arealist" @confirm="areashowCallback"></u-select>
<!-- 预算 -->
<u-select v-model="budgetshow" :list="budgetlist" @confirm="budgetshowCallback"></u-select>
<!-- 关注点 -->
<u-select v-model="fouceshow" :list="foucelist" @confirm="fouceshowCallback"></u-select>
<!-- 客户来源 -->
<u-select v-model="soureshow" :list="sourelist" @confirm="soureshowCallback"></u-select>
</view>
</template>

<script>
export default{
data(){
return{
form:{
name:'',
sex:'0',
phone:'',
wx:'',
lelve:'',
stage:'',
txea:'',
demand:'',
area:'',
budget:'',
fouce:'',
soure:'',
},
selectform:{
lelve:'A',
stage:'',
demand:'',
area:'',
budget:'',
fouce:'',
soure:'',
},
lelveshow:false,
stageshow:false,
demandshow:false,
areashow:false,
budgetshow:false,
fouceshow:false,
soureshow:false,
lelvelist:[
{
value:1,
label:'A'
},
{
value:2,
label:'B'
},
{
value:3,
label:'C'
},
{
value:4,
label:'D'
},
],
stagelist:[
{
value:1,
label:'首次到访'
},
{
value:2,
label:'首次到访B'
},
{
value:3,
label:'首次到访C'
},
],
demandlist:[
{
value:1,
label:'需求'
},
{
value:2,
label:'首次到访B'
},
{
value:3,
label:'首次到访C'
},
],
arealist:[
{
value:1,
label:'面积'
},
{
value:2,
label:'首次到访B'
},
{
value:3,
label:'首次到访C'
},
],
budgetlist:[
{
value:1,
label:'预算'
},
{
value:2,
label:'首次到访B'
},
{
value:3,
label:'首次到访C'
},
],
foucelist:[
{
value:1,
label:'关注'
},
{
value:2,
label:'首次到访B'
},
{
value:3,
label:'首次到访C'
},
],
sourelist:[
{
value:1,
label:'来源'
},
{
value:2,
label:'首次到访B'
},
{
value:3,
label:'首次到访C'
},
],
}
},
methods:{
lelveshowCallback(e){
this.selectform.lelve=e[0].label
this.form.lelve=e[0].value
},
stageshowCallback(e){
this.selectform.stage=e[0].label
this.form.stage=e[0].value
},
demandshowCallback(e){
this.selectform.demand=e[0].label
this.form.demand=e[0].value
},
areashowCallback(e){
this.selectform.area=e[0].label
this.form.area=e[0].value
},
budgetshowCallback(e){
this.selectform.budget=e[0].label
this.form.budget=e[0].value
},
fouceshowCallback(e){
this.selectform.fouce=e[0].label
this.form.fouce=e[0].value
},
soureshowCallback(e){
this.selectform.soure=e[0].label
this.form.soure=e[0].value
},
}
}
</script>

<style lang="scss" scoped>
.box {
width: 100%;
height: 100%;
background: #F8F8F8;
overflow: hidden;
}
.conmsg{
background: #FFFFFF;
margin-top: 20rpx;
.conmsg-title{
height: 92rpx;
line-height: 92rpx;
padding: 0 30rpx;
font-weight: 500;
color: #303030;
font-size: 32rpx;
border-bottom: 1px solid #E0E0E0;
}
.conmsg-msg{
padding: 0 30rpx;
.conmsg-msg-lab{
height: 102rpx;
display: flex;
font-size: 30rpx;
font-weight: 400;
color: #333333;
border-bottom: 1px solid #E0E0E0;
line-height: 102rpx;
.conmsg-msg-lab-1{
display: flex;
width: 136rpx;
.star{
color: #E7483C;
line-height: 108rpx;
}
}
.conmsg-msg-lab-inp{
margin-top: 30rpx;
margin-left: 44rpx;
}
.conmsg-msg-lab-img{
width: 14rpx;
height: 30rpx;
margin-top: 6rpx;
margin-left: auto;
image{
width: 100%;
height: 100%;
}
}
}
}
}
.submit{
height: 228rpx;
.btn{
margin: 60rpx auto;
text-align: center;
width: 690rpx;
height: 88rpx;
background: #2671E2;
border-radius: 8rpx;
font-size: 32tpx;
font-weight: 400;
color: #FFFFFF;
line-height: 88rpx;
}
}
</style>

+ 7
- 1
pages/center/consumer/index.vue View File

@@ -66,7 +66,7 @@
<view class="content-last-tab">
拨打电话
</view>
<view class="content-last-tab">
<view class="content-last-tab" @click="goFollow">
写跟进
</view>
</view>
@@ -327,6 +327,12 @@
url: '/pages/center/consumer/consumerSearch'
});
},
goFollow(){
uni.navigateTo({
url:`/pages/center/consumer/newFollowup/newFollowup?id=5f3846c2e8134dda8b3f41fc90684114`,
})
},
},
onLoad() {
console.log('这里是进入')


+ 265
- 0
pages/center/consumer/newFollowup/newFollowup.css View File

@@ -0,0 +1,265 @@
/* 新增客户跟进 */

page {
background: #f9f9f9;
}

.follow_up {
}

/* 最新状态 */

.follow_up_list {
padding: 0rpx 30rpx 0rpx 30rpx;
box-sizing: border-box;
background: #fff;
overflow: hidden;
margin-bottom: 0rpx;
}

.follow_up_list_title {
display: flex;
align-items: center;
}

.follow_up_list_title image {
width: 19rpx;
height: 18rpx;
display: block;
margin-right: 10rpx;
}

.follow_up_list_title label {
height: 42rpx;
font-size: 30rpx;
font-weight: 600;
color: rgba(51, 51, 51, 1);
line-height: 42rpx;
letter-spacing: 1rpx;
}

.follow_up_list_label {
margin-top: 30rpx;
}

.follow_up_list_label view {
padding: 0rpx 25rpx;
height: 50rpx;
border-radius: 8rpx;
border: 2rpx solid rgba(206, 206, 206, 1);
float: left;
color: rgba(97, 110, 135, 1);
font-size: 26rpx;
line-height: 50rpx;
margin-left: 20rpx;
margin-bottom: 22rpx;

}

.active {
background: rgba(42, 111, 255, 1);
border: 2rpx solid rgba(42, 111, 255, 1) !important;
color: #fff !important;
}

/* 意向级别 */

.assess-star {
padding: 10rpx 0rpx 0rpx 20rpx;
box-sizing: border-box;
display: flex;
align-items: center;
}

.star-wrap {
display: flex;
align-items: center;
}

.star-item {
display: inline-block;
height: 38rpx;
width: 36rpx;
margin-right: 0rpx;
}

.star-item image {
width: 26rpx;
height: 26rpx;
margin-left: 10rpx;

}


.star-desc {
font-size: 26rpx;
font-weight: 400;
color: rgba(97, 110, 135, 1);
text-align: center;
height: 44rpx;
margin-left: 27rpx;
line-height: 44rpx;

}

/* 跟进内容 */

.follow_content {
background: #fff;
padding: 30rpx;
box-sizing: border-box;
position: relative;
}

.follow_content_title {
color: #333;
font-size: 30rpx;
line-height: 42rpx;
}

.follow_content_title em {
color: #a6a6a6;
}

.follow_content_textarea {
padding: 30rpx 20rpx;
box-sizing: border-box;
font-size: 30rpx;
width: 100%;
height: 200rpx;
}

.follow_content .voice{
width: 100rpx;
margin-left: calc(50% - 50rpx);
z-index: 10000;
}

.place {
color: #a6a6a6;
line-height: 42px;
font-size: 30rpx;
}

.follow_btn {
width: 688rpx;
height: 90rpx;
background: rgba(221, 221, 223, 1);
border-radius: 8rpx;
line-height: 90rpx;
margin: 50rpx auto;
color: #fff;
text-align: center;
font-size: 34rpx;
}

.follow_btn_active {
background: rgba(42, 111, 255, 1);
}
/* 提醒 */
.tixing{
width: 100rpx;
height: 50rpx;
text-align: center;
line-height: 50rpx;
float: right;
}
.tixing image{
width: 26rpx;
height: 30rpx;
display: inline-block;
}
.mask{
width: 100%;
height: 100%;
position: fixed;
top: 0;
left: 0;
z-index: 999;
background:rgba(0,0,0,0.61);
}
.time-box{
position: fixed;
width: 100%;
bottom: 0;
left: 0;
z-index: 9999;
background: #fff;
box-sizing: content-box
}
.time-title{
float:left;
width:20%;
text-align:center;
color:rgba(51, 51, 51, 1);
}
.time-title-box{
border-top: 1rpx solid rgba(51, 51, 51, 1);
height: 70rpx;
font-size: 31rpx;
line-height: 70rpx;
color: rgba(51, 51, 51, 1);
}
.picker-text{
text-align:center;
width: calc(750rpx / 5);
background: #fff;
}
.time-text{
text-align: center;
color: rgba(51, 51, 51, 1);
height: 90rpx;
font-size: 33rpx;
line-height: 90rpx;
}
.time-sure{
float: right;
/* margin-right: 20rpx; */
font-size: 33rpx;
width: 120rpx;
height: 100%;
}
.tixing1 {
width: 26rpx;
height: 32rpx;
display: inline-block;
margin-right: 10rpx;
}
.tixingBox{
width:750rpx;
height:109rpx;
background:rgba(255,255,255,1);
color:rgba(17, 94, 255, 1);
display: flex;
align-items: center;
line-height: 109rpx;
padding: 0 30rpx;
box-sizing: border-box;
margin-top: 21rpx;
}
.tixing{
width: 160rpx;
height: 60rpx;
background: rgba(42,111,255,1);
border-radius: 35rpx;
padding: 0 22rpx;
box-sizing: border-box;
display: flex;
justify-content: space-around;
line-height: 60rpx;
font-size: 28rpx;
font-family: PingFangSC-Medium,PingFang SC;
font-weight: 500;
color: rgba(255,255,255,1);
margin-left: 368rpx;
}
.tixing image{
width: 30rpx;
height: 30rpx;
margin-top: 15rpx;
margin-right: 0;

}
.active1{
background:#DEDEDE;
}

+ 816
- 0
pages/center/consumer/newFollowup/newFollowup.vue View File

@@ -0,0 +1,816 @@
<template>
<view>
<!-- 新增客户跟进 -->
<view class="follow_up">
<view class="follow_content_title tixingBox"
v-if="orderRemindDate1=='' || orderRemindDate1 == null || overdue == true">
<image src="https://qufang.oss-cn-beijing.aliyuncs.com/upload/icon/xcx/jjycrm/ld.png" class="tixing1">
</image>
跟进提醒
<view class="tixing" @tap="onClose">
<text>设置</text>
</view>
</view>
<view class="follow_content_title tixingBox" v-else>
<image src="https://qufang.oss-cn-beijing.aliyuncs.com/upload/icon/xcx/jjycrm/ld.png" class="tixing1">
</image>
跟进提醒
<view class="tixing active1" @tap="onClose1">
<text>已设置</text>
</view>
</view>
<!-- 最新状态 -->
<view class="follow_up_list">
<view class="follow_up_list_title">
<image src="https://qufang.oss-cn-beijing.aliyuncs.com/upload/icon/xcx/jjycrm/index/xh.png"></image>
<label>最新状态</label>
</view>
<view class="follow_up_list_label">
<view v-for="(item, i) in sortList" :key="i" :class="'taga-item ' + (state===i?'active':'')"
:data-state="i" @tap="tagChoose">
{{item.stageName}}
</view>
</view>
</view>
<!-- 意向级别 -->
<view class="follow_up_list" style="padding-bottom: 10rpx;">
<view class="follow_up_list_title">
<image src="https://qufang.oss-cn-beijing.aliyuncs.com/upload/icon/xcx/jjycrm/index/xh.png"></image>
<label>意向级别</label>
</view>
<view class="follow_level_selection">
<view class="assess-star">
<view class="star-wrap">
<view v-for="(item, index) in stars" :key="index" class="star-item" :data-index="index"
@tap="starClick">
<image v-if="item.flag==1"
src="https://qufang.oss-cn-beijing.aliyuncs.com/upload/icon/xcx/jjycrm/index/index12.png">
</image>
<image v-else
src="https://qufang.oss-cn-beijing.aliyuncs.com/upload/icon/xcx/jjycrm/index/index13.png">
</image>
</view>
</view>
<view class="star-desc" v-if="level==1">A级</view>
<view class="star-desc" v-if="level==2">B级</view>
<view class="star-desc" v-if="level==3">C级</view>
<view class="star-desc" v-if="level==4">D级</view>
</view>
</view>
</view>
<!-- 客户类型 -->
<view class="follow_up_list">
<view class="follow_up_list_title">
<image src="https://qufang.oss-cn-beijing.aliyuncs.com/upload/icon/xcx/jjycrm/index/xh.png"></image>
<label>客户类型</label>
</view>
<view class="total" style="font-size: 22rpx;">
<u-icon style="margin-right:14rpx" name="checkmark-circle-fill" color="#FD6B18"></u-icon>
已选择<text style="color: #FD6B18;">{{chosedCustomer.length}}</text>个
</view>
<view class="list" @click="showList" :class="{chosed:chosedCustomer.length>0}">
<view v-for="(item, i) in chosedCustomerType" :key="i" class="taga-item"
:class="{active:chosedCustomer.includes(item.keywords)}">
{{item.keywords}}
</view>
</view>
<view class="more" @click="showList">
选择更多
</view>
</view>
<!-- 跟进内容 -->
<view class="follow_content">
<view class="follow_content_title">
跟进内容
<em>({{feedbackContent.length}}/50)</em>
</view>
<textarea v-show="!customerTypeShow" class="follow_content_textarea" v-if="show==false"
:value="feedbackContent" maxlength="50" @input="note" placeholder="请输入跟进内容,按话筒按钮可以语音识别"
placeholder-class="place"></textarea>
<!-- <image class="voice" @click="changeVoiceShow" src="/static/images/yuyin.png" mode="widthFix"></image> -->
</view>

<view :class="'follow_btn ' + (value!=='' && state!== '' && level !=='' ?'follow_btn_active':'')"
@tap="ok">
保存
</view>
</view>
<!-- 提醒 -->
<view class="mask" v-if="show==true" @tap="timeClose"></view>
<view class="time-box" v-if="show==true">
<view class="time-text">
{{year}}-{{month}}-{{day}} {{hour}}:{{minute}}
<view class="time-sure" @tap="timeSure">确定</view>
<view class="time-sure" style="float:left" @tap="timeClose">取消</view>
</view>
<view class="time-title-box">
<view class="time-title">年</view>
<view class="time-title">月</view>
<view class="time-title">日</view>
<view class="time-title">时</view>
<view class="time-title">分</view>
</view>
<picker-view indicator-style="height: 50px;"
style="width: 100%; height: 300px;display: flex;background:#fff;" :value="value" @change="bindChange">
<picker-view-column class="picker-text">
<view v-for="(item, index) in years" :key="index" style="line-height: 50px">{{item}}</view>
</picker-view-column>
<picker-view-column class="picker-text">
<view v-for="(item, index) in months" :key="index" style="line-height: 50px">{{item}}</view>
</picker-view-column>
<picker-view-column class="picker-text">
<view v-for="(item, index) in days" :key="index" style="line-height: 50px">{{item}}</view>
</picker-view-column>
<picker-view-column class="picker-text">
<view v-for="(item, index) in hours" :key="index" style="line-height: 50px">{{item}}</view>
</picker-view-column>
<picker-view-column class="picker-text">
<view v-for="(item, index) in minutes" :key="index" style="line-height: 50px">{{item}}</view>
</picker-view-column>
</picker-view>
</view>
<cover-view class="voiceContent" v-if="voiceShow" @click="changeVoiceShow">
<cover-view class="box" @click.stop="" @touchstart="voiceStart" @touchend="voiceEnd">
<cover-view class="center">
<cover-image class="voice" src="/static/images/voice.png" mode="widthFix"></cover-image>
<cover-view class="text">
{{isRecording?'正在输入':'长按语音输入'}}
</cover-view>
</cover-view>
</cover-view>
</cover-view>
<u-popup v-model="customerTypeShow" mode="center" border-radius="22" width="690" height="785">
<view class="customerTypePopup">
<view class="search">
<input class="input" type="text" v-model="customerTypeSearch" />
</view>
<scroll-view class="list" :scroll-y="true">
<view v-for="(item,index) in filterCustomerList" :key="index"
@click="choseCustomerName(item.keywords)" class="item"
:class="{active:chosedCustomerTmp.includes(item.keywords)}">
{{item.keywords}}
</view>
</scroll-view>
<view class="save" @click="saveCustomerType">
保存
</view>
</view>
</u-popup>
</view>
</template>

<script>
var util = require("../../../../utils/util.js");
var config = require("../../../../config");
var plugin = requirePlugin("WechatSI")
let manager = plugin.getRecordRecognitionManager();
var WXB_SESSION_LOGIN_DATA = 'weapp_session_login_data';
var app = getApp(); // 定义年、月、日、时、分的数组都为空
// 定义年、月、日、时、分的数组都为空
const date = new Date();
const years = [];
const months = [];
const days = [];
const hours = [];
const minutes = [];
var thisMon = date.getMonth();
var thisDay = date.getDate(); // 获取年
// 获取日期
var totalDay = mGetDate(date.getFullYear(), thisMon);
// 获取年
for (let i = 0; i <= date.getFullYear() + 1; i++) {
years.push(i)
}
// 获取月份
for (let i = 0; i <= 11; i++) {
var k = i;
if (0 <= i && i < 9) {
k = "0" + (i + 1);
} else {
k = (i + 1);
}
months.push(k)
}
if (0 <= thisMon && thisMon < 9) {
thisMon = "0" + (thisMon + 1);
} else {
thisMon = (thisMon + 1);
}
if (0 <= thisDay && thisDay < 10) {
thisDay = "0" + thisDay;
}
// 获取日期
var totalDay = mGetDate(date.getFullYear(), thisMon);
for (let i = 1; i <= 31; i++) {
var k = i;
if (0 <= i && i < 10) {
k = "0" + i
}
days.push(k)
}
// 获取小时
for (let i = 0; i <= 23; i++) {
var k = i;
if (0 <= i && i < 10) {
k = "0" + i
}
hours.push(k)
}
// 获取分钟
for (let i = 0; i <= 59; i++) {
var k = i;
if (0 <= i && i < 10) {
k = "0" + i
}
minutes.push(k)
}
// 给新的日期赋值
function mGetDate(year, month) {
var d = new Date(year, month, 0);
return d.getDate();
}

export default {
data() {
return {
isokColor: false,
sortList: [],
starDesc: '',
stars: [{
lightImg: 'https://qufang.oss-cn-beijing.aliyuncs.com/upload/icon/xcx/jjycrm/index/index12.png',
blackImg: 'https://qufang.oss-cn-beijing.aliyuncs.com/upload/icon/xcx/jjycrm/index/index13.png',
flag: 1,
message: 'A',
level: 1
}, {
lightImg: 'https://qufang.oss-cn-beijing.aliyuncs.com/upload/icon/xcx/jjycrm/index/index12.png',
blackImg: 'https://qufang.oss-cn-beijing.aliyuncs.com/upload/icon/xcx/jjycrm/index/index13.png',
flag: 1,
message: 'B',
level: 2
}, {
lightImg: 'https://qufang.oss-cn-beijing.aliyuncs.com/upload/icon/xcx/jjycrm/index/index12.png',
blackImg: 'https://qufang.oss-cn-beijing.aliyuncs.com/upload/icon/xcx/jjycrm/index/index13.png',
flag: 1,
message: 'C',
level: 3
}, {
lightImg: 'https://qufang.oss-cn-beijing.aliyuncs.com/upload/icon/xcx/jjycrm/index/index12.png',
blackImg: 'https://qufang.oss-cn-beijing.aliyuncs.com/upload/icon/xcx/jjycrm/index/index13.png',
flag: 1,
message: 'D',
level: 4
}],
state: null,
feedbackContent: "",
level: "",
customerId: "",
// 提醒
years: years,
year: date.getFullYear(),
months: months,
month: thisMon,
days: days,
day: thisDay,
value: [date.getFullYear(), date.getMonth(), Number(date.getDate() - 1), Number(date.getHours()), Number(
date.getMinutes())],
hours: hours,
hour: date.getHours(),
minutes: minutes,
minute: date.getMinutes(),
show: false,
overdue: false,
code: "",
orderRemindDate: "",
orderRemindDate1: "",
allItem: 0,
item: 0,
voiceShow: false,
isRecording: false,
customerType: [],
customerTypeShow: false,
customerTypeSearch: "",
chosedCustomer: [],
chosedCustomerTmp: [],
};
},
onLoad(e) {
// console.log(e,'123')
const that = this;
uni.login({
success(res) {
if (res.code) {
// that.setData({
// code: res.code
// });
} else {
console.log('登录失败!' + res.errMsg);
}
}
});
var customerId = e.id;
var day = Number(date.getDate()) < 10 ? '0' + date.getDate() : date.getDate();
var moth = Number(date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;
var hour = Number(date.getHours()) < 10 ? '0' + date.getHours() : date.getHours();
var min = Number(date.getMinutes()) < 10 ? '0' + date.getMinutes() : date.getMinutes();
this.setData({
customerId: customerId,
orderRemindDate: date.getFullYear() + '-' + moth + '-' + day + ' ' + hour + ':' + min,
orderRemindDate1: e.followRemindDate,
hour: hour,
minute: min
});

if (e.followRemindDate) {
var setData = new Date(e.followRemindDate).getTime();
var newData = new Date().getTime();

if (setData < newData) {
this.setData({
overdue: true
});
} else {
this.setData({
overdue: false
});
}
}
this.getNewStatus();
this.getCustomerType();
},
onShow() {
this.initRecord();
},

methods: {
setData: function(obj) {
let that = this;
let keys = [];
let val, data;
Object.keys(obj).forEach(function(key) {
keys = key.split(".");
val = obj[key];
data = that.$data;
keys.forEach(function(key2, index) {
if (index + 1 == keys.length) {
that.$set(data, key2, val);
} else {
if (!data[key2]) {
that.$set(data, key2, {});
}
}
data = data[key2];
});
});
},
getCustomerType() {
this.$u.get("/customer/queryKeyWords").then(res => {
this.customerType = res;
})
},
showList() {
this.chosedCustomerTmp = this.chosedCustomer;
this.customerTypeShow = true;
},
choseCustomerName(name) {
const tmp = new Set(this.chosedCustomerTmp);
if (tmp.has(name)) {
tmp.delete(name)
} else {
tmp.add(name)
}
this.chosedCustomerTmp = Array.from(tmp);
},
saveCustomerType() {
this.chosedCustomer = this.chosedCustomerTmp;
this.customerTypeShow = false;
},
changeVoiceShow() {
this.voiceShow = !this.voiceShow;
},
voiceStart: function() {
manager.start({
lang: "zh_CN"
});
},
voiceEnd: function() {
if (this.isRecording) {
uni.showLoading({
title: "识别中"
})
}

this.voiceShow = false;
this.isRecording = false;
manager.stop();
},
initRecord() {
const that = this;
manager.onStart = function(res) {
console.log(res.msg);
that.isRecording = true;
// this.voiceState = "onStart:" + res.msg + "正在录音"
};
//有新的识别内容返回,则会调用此事件
manager.onRecognize = (res) => {
console.log('ing' + res.result);
}

// 识别结束事件
manager.onStop = (res) => {
uni.hideLoading();
let newText = that.feedbackContent + res.result;
if (newText.length > 50) {
newText = newText.substring(0, 50)
}
that.feedbackContent = newText;
}

// 识别错误事件
manager.onError = (res) => {
uni.hideLoading();
console.error(res.msg)
// this.voiceState = "onError" + res.msg;

}
},
// 关闭提醒
timeClose() {
this.setData({
show: false,
years: years,
year: date.getFullYear(),
months: months,
month: thisMon,
days: days,
day: thisDay,
value: [date.getFullYear(), date.getMonth(), date.getDate() - 1, date.getHours(), date
.getMinutes()
],
hours: hours,
hour: date.getHours(),
minutes: minutes,
minute: date.getMinutes()
});
},

// 打开提醒
onClose() {
const that = this; // 检测是否已经授权,有授权直接弹窗,没授权弹出授权

uni.getSetting({
withSubscriptions: true,

success(res) {
console.log(res);

if (res && res.subscriptionsSetting && res.subscriptionsSetting.itemSettings && res
.subscriptionsSetting
.itemSettings['cBnJvhkMPHp0ReUiSdpM_Pd2usGeEEW6wx-5s6X4hEI'] == 'accept') {
that.setData({
show: true
});
} else {
uni.requestSubscribeMessage({
tmplIds: ['cBnJvhkMPHp0ReUiSdpM_Pd2usGeEEW6wx-5s6X4hEI'],

success(res) {
that.setData({
show: true
});
},

fail(res) {
console.log(res);
util.showNone("请授权");
}

});
}
},

fail(res) {
console.log(res);
}

});
},

onClose1() {
util.showNone(this.orderRemindDate1);
},

timeSure() {
var that = this;
var params = {
customerId: that.customerId,
followRemindTime: that.orderRemindDate + ':00',
code: that.code
};
util.getRequestPromise(config.service.updateByPrimaryKey, params).then(data => {
uni.showToast({
title: '操作成功'
});
var data = that.orderRemindDate + ':00';
var setData = new Date(data).getTime();
var newData = new Date().getTime();
console.log(setData, newData);

if (setData < newData) {
this.setData({
overdue: true
});
} else {
this.setData({
overdue: false
});
}

this.setData({
show: false,
value: [this.year, Number(this.month) - 1, Number(this.day) - 1, this.hour, this
.minute
],
orderRemindDate1: that.orderRemindDate + ':00'
});
});
},

// 获取新的日期和时间
bindChange: function(e) {
const val = e.detail.value;
this.setData({
year: this.years[val[0]],
month: this.months[val[1]],
day: this.days[val[2]],
hour: this.hours[val[3]],
minute: this.minutes[val[4]],
orderRemindDate: this.years[val[0]] + '-' + this.months[val[1]] + '-' + this.days[val[2]] +
' ' + this.hours[
val[3]] + ':' + this.minutes[val[4]]
});
},
// 最新状态
tagChoose: function(options) {
var that = this;
var state = options.currentTarget.dataset.state;
that.setData({
'state': state
});
},
// 意向级别
starClick: function(e) {
var that = this;

for (var i = 0; i < that.stars.length; i++) {
var allItem = 'stars[' + i + '].flag';
that.setData({
[allItem]: 1
});
}

var index = e.currentTarget.dataset.index;

for (var i = 0; i <= index; i++) {
var item = 'stars[' + i + '].flag';
that.setData({
[item]: 2
});
}

this.setData({
starDesc: this.stars[index].message,
level: this.stars[3 - index].level
});
},
// textarea
note: function(e) {
this.feedbackContent = e.detail.value
},
getNewStatus: function() {
var that = this;
let premo={
houseId:uni.getStorageSync('buildingID').id
}
util.getRequestPromise(config.service.getStage, premo).then(data => {
this.sortList = data;
});
},
//提交
ok(){
var that = this;
var state = that.state;
var feedbackContent = that.feedbackContent;
var level = that.level;
var customerId = that.customerId;
if (state === null || this.chosedCustomer.length == 0 || level === "") {
uni.showModal({
title: '提示',
content: '请选择状态、级别、类型',
showCancel: false
});
return;
}
uni.showLoading({
title: "保存中~",
mask: true
})
const chosedState = this.sortList[state];
var param = {
"stageCode": chosedState.stageCode,
"stageName": chosedState.stageName,
"remarks": feedbackContent,
words: this.chosedCustomer,
// "settingTime":"",
"agentRelationPo": {
"customerId": customerId,
"level": level,
"state": chosedState.id
}
}

util.getRequestPromise(config.service.followRecord, param, true).then(data => {
util.showSuccess("提交成功");
uni.hideLoading();
uni.navigateBack();
});
}
},
computed: {
filterCustomerList() {
return this.customerType.filter(item => {
return item.keywords.includes(this.customerTypeSearch)
});
},
chosedCustomerType() {
if (this.chosedCustomer.length > 0) {
return this.customerType.filter(item => {
return this.chosedCustomer.includes(item.keywords)
})
} else {
return this.customerType
}
}
},
};
</script>
<style lang="scss" scoped>
@import "./newFollowup.css";

.voiceContent {
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
width: 100vw;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
background: rgba(30, 30, 30, 0.4592);
z-index: 10001;
}

.box {
background: rgba(21, 144, 233, 0.299);
width: 524upx;
height: 524upx;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;

.center {
width: 412upx;
height: 412upx;
background: #1590E9;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;

.voice {
width: 110upx;
height: 133upx;
}

.text {
color: #FFFFFF;
font-size: 36upx;
margin-top: 24upx;
}
}
}

.follow_up_list {
.total {
font-size: 22rpx;
margin-top: 20rpx;
line-height: 1;
}

.list {
display: flex;
font-size: 22rpx;
flex-wrap: wrap;
margin: 0 -30rpx;
padding: 0 15rpx;
max-height: calc(3em + 90rpx + 66rpx);
overflow: hidden;

&.chosed {
max-height: unset;
}

.taga-item {
line-height: 1;
padding: 11rpx 33rpx;
color: #333333;
background: rgba(136, 136, 136, 0.1);
border: 1rpx solid rgba(232, 103, 17, 0);
border-radius: 6rpx;
margin: 15rpx;

&.active {
background: rgba(253, 84, 43, 0.1);
border: 1rpx solid rgba(232, 103, 17, 0.5) !important;
color: #FD6D2B !important;
}
}
}

.more {
text-align: center;
color: #999999;
font-size: 22rpx;
position: relative;
top: 4rpx;
}
}

.customerTypePopup {
width: 100%;
height: 100%;

.search {
padding: 25rpx;

.input {
box-sizing: border-box;
}
}

.list {
height: calc(100% - 200rpx);
display: flex;
flex-wrap: wrap;
padding: 0 15rpx;
overflow: hidden;

.item {
line-height: 1;
padding: 11rpx 33rpx;
color: #333333;
background: rgba(136, 136, 136, 0.1);
border: 1rpx solid rgba(232, 103, 17, 0) !important;
border-radius: 6rpx;
margin: 15rpx;
display: inline-flex;

&.active {
background: rgba(253, 84, 43, 0.1) !important;
border: 1rpx solid rgba(232, 103, 17, 0.5) !important;
color: #FD6D2B !important;
}
}
}

.save {
background: #2B6EFD;
width: 600rpx;
height: 78rpx;
line-height: 78rpx;
text-align: center;
margin: 0 auto;
border-radius: 17rpx;
font-size: 36rpx;
color: #FFFFFF;
}
}
</style>

+ 88
- 0
pages/center/consumer/remind.vue View File

@@ -0,0 +1,88 @@
<template>
<view class="box">
<view class="conmsg">
<view class="conmsg-lab">
<view class="conmsg-lab-1">
客户信息
</view>
<view class="conmsg-lab-2">
李先生/12385945986
</view>
</view>
<view class="conmsg-lab" style="border: none;">
<view class="conmsg-lab-1">
提醒时间
</view>
<view class="conmsg-lab-3">
请选择提醒时间(必填)
</view>
<view class="conmsg-lab-4">
<image class="screen-sel-img" src="../../../static/images/right.png" mode=""></image>
</view>
</view>
</view>
<view class="conent">
<u-input v-model="value" type="textarea" height="148" :auto-height="true" />
</view>
</view>
</template>

<script>
export default{
data(){
return{
}
},
methods:{
}
}
</script>

<style lang="scss" scoped>
.box {
width: 100%;
height: 100%;
background: #F8F8F8;
}
.conmsg{
border-top: 1px solid #E0E0E0;
padding: 0 30rpx;
background: #fff;
height: 208rpx;
.conmsg-lab{
display: flex;
border-bottom: 1px solid #E0E0E0;
height: 102rpx;
font-size: 30rpx;
font-weight: 400;
line-height: 102rpx;
color: #333333;
.conmsg-lab-1{
margin-right: 60rpx;
}
.conmsg-lab-3{
color: #B2B2B2;
}
.conmsg-lab-4{
width: 14rpx;
height: 30rpx;
margin-top: 6rpx;
margin-left: auto;
image{
width: 100%;
height: 100%;
}
}
}
}
.conent{
margin-top: 20rpx;
min-height: 208rpx;
background: #FFFFFF;
box-sizing: border-box;
padding: 30rpx;
margin-bottom: 20rpx;
}
</style>

+ 16
- 3
pages/center/records/index.vue View File

@@ -185,6 +185,8 @@
</u-popup>
<!-- 选择顾问的选择框 -->
<u-select v-model="selectshow" :list="list" @confirm="actionSelectCallback"></u-select>
<u-calendar v-model="totalTimeShow" mode="range" @change="totalTimeChange"></u-calendar>
</view>
</template>

@@ -196,6 +198,7 @@
value:'',
screenShow:false,
selectshow:false,
totalTimeShow: false,
screen:{
counselorName:'',
record:'0',
@@ -227,9 +230,19 @@
}
},
methods:{
tabtimetap(idx){
console.log(idx)
this.activeTotal=idx
tabtimetap(index){
// console.log(idx)
// this.activeTotal=idx
if (index == 3) {
this.totalTimeShow = true;
} else {
this.activeTotal = index;
}
},
//自定义时间
totalTimeChange(e) {
console.log(e.startDate, e.endDate)
this.activeTotal=3;
},
// 筛选
screenshow(){


BIN
static/images/edit.png View File

Before After
Width: 30  |  Height: 30  |  Size: 506 B

Loading…
Cancel
Save