Commit 341d2ade authored by looker's avatar looker

add some goods fe

parent c5850fef
No preview for this file type
...@@ -2,13 +2,13 @@ ...@@ -2,13 +2,13 @@
<template> <template>
<div class="msglist"> <div class="msglist">
<ul> <ul>
<!-- <li v-if="chartings.length==0" class="modonghua" ></li>
<li v-if="chartings.length==0" class="modonghua" ></li> <li v-if="chartings.length==0" class="modonghua" ></li>
<li v-if="chartings.length==0" class="modonghua" ></li> <li v-if="chartings.length==0" class="modonghua" ></li>
<li v-if="chartings.length==0" class="modonghua" ></li> <li v-if="chartings.length==0" class="modonghua" ></li>
<li v-if="chartings.length==0" class="modonghua" ></li> <li v-if="chartings.length==0" class="modonghua" ></li>
<li v-if="chartings.length==0" class="modonghua" ></li> <li v-if="chartings.length==0" class="modonghua" ></li>
<li v-if="chartings.length==0" class="modonghua" ></li> <li v-if="chartings.length==0" class="modonghua" ></li> -->
<li v-if="chartings.length==0" class="modonghua" ></li>
<li v-for="item in chartings" class="sessionlist" :class="{ active: item.id === user.selectId }" @click="selectSession(item)"> <li v-for="item in chartings" class="sessionlist" :class="{ active: item.id === user.selectId }" @click="selectSession(item)">
<div class="list-left"> <div class="list-left">
<img class="avatar" width="42" height="42" :alt="item.user.name" :src="item.user.img||'static/images/weixin.jpg'"> <img class="avatar" width="42" height="42" :alt="item.user.name" :src="item.user.img||'static/images/weixin.jpg'">
...@@ -57,15 +57,15 @@ export default { ...@@ -57,15 +57,15 @@ export default {
// obj&&this.selectSession(obj) // obj&&this.selectSession(obj)
}, },
watch:{ watch:{
chartings(val){ // chartings(val){
if(this.fd){ // if(this.fd){
this.fd = false // this.fd = false
if(val.lenght!=0){ // if(val.lenght!=0){
let obj = val[0] // let obj = val[0]
this.selectSession(obj) // this.selectSession(obj)
} // }
} // }
} // }
}, },
filters: { filters: {
time (date) { time (date) {
...@@ -118,7 +118,7 @@ export default { ...@@ -118,7 +118,7 @@ export default {
left: 35px; left: 35px;
} }
.msglist .msglist
height: 740px height: calc(100% - 60px)
overflow-y: auto overflow-y: auto
.sessionlist .sessionlist
display: flex display: flex
......
<template> <template>
<div> <div style="height: calc(100% - 150px)">
<div class="message"> <div class="message">
<header class="header"> <header class="header">
<div class="friendname">{{selectedChat&&(selectedChat.user.conRemark?selectedChat.user.remark+'---'+selectedChat.user.conRemark:selectedChat.user.remark+'---'+selectedChat.user.name)}}</div> <div class="friendname">{{selectedChat&&(selectedChat.user.conRemark?selectedChat.user.remark+'---'+selectedChat.user.conRemark:selectedChat.user.remark+'---'+selectedChat.user.name)}}</div>
...@@ -167,7 +167,7 @@ export default { ...@@ -167,7 +167,7 @@ export default {
<style lang="stylus" scoped> <style lang="stylus" scoped>
.message .message
width: 100% width: 100%
height: 650px height: 100%
.header .header
height: 60px height: 60px
padding: 28px 0 0 30px padding: 28px 0 0 30px
...@@ -176,8 +176,7 @@ export default { ...@@ -176,8 +176,7 @@ export default {
.friendname .friendname
font-size: 18px font-size: 18px
.message-wrapper .message-wrapper
min-height: 590px height:calc(100% - 60px)
max-height: 590px
padding: 10px 15px padding: 10px 15px
box-sizing: border-box box-sizing: border-box
overflow-y: auto overflow-y: auto
......
...@@ -26,17 +26,18 @@ ...@@ -26,17 +26,18 @@
</div> </div>
<footer> <footer>
<i class="icon iconfont icon-more" @click="accountFlag=!accountFlag"></i> <i class="icon iconfont icon-more" @click="accountFlag=!accountFlag"></i>
</footer>
<div v-if="accountFlag" style="width: 100%;height: 100%;position: fixed; top: 0;right: 0;" @click="accountFlag=!accountFlag"></div> <div v-if="accountFlag" style="width: 100%;height: 100%;position: fixed; top: 0;right: 0;" @click="accountFlag=!accountFlag"></div>
<div class="tool-panel" style="position:relative;bottom:-550px;" v-if="accountFlag"> <div class="tool-panel" style="position:relative;" v-if="accountFlag">
<div @click="logout"><span class="sdsd">切换账号</span></div> <div @click="logout"><span class="sdsd">切换账号</span></div>
<div @click="logout"><span class="sdsd">退出登录</span></div> <div @click="logout"><span class="sdsd">退出登录</span></div>
</div> </div>
</footer>
</div> </div>
</template> </template>
<script> <script>
import { mapState, mapActions } from 'vuex' import { mapState, mapActions, mapGetters } from 'vuex'
export default { export default {
data(){ data(){
return { return {
...@@ -47,6 +48,9 @@ export default { ...@@ -47,6 +48,9 @@ export default {
computed: { computed: {
...mapState([ ...mapState([
'user', 'user',
]),
...mapGetters([
'selectId',
]) ])
}, },
methods: { methods: {
...@@ -125,7 +129,6 @@ export default { ...@@ -125,7 +129,6 @@ export default {
} }
.tool-panel .tool-panel
position:relative; position:relative;
bottom:-600px;
height:80px; height:80px;
width:120px; width:120px;
right:-60px; right:-60px;
......
<!-- 文本输入框 --> <!-- 文本输入框 -->
<template> <template>
<div class="text"> <div>
<div v-if="selectId==0">
</div>
<div class="text" v-if="selectId!=0">
<div class="emoji"> <div class="emoji">
<div v-if="accountFlag" style="width: 100%;height: 100%;position: fixed;top: 0;right: 0;" @click="clonese"></div> <div v-if="accountFlag" style="width: 100%;height: 100%;position: fixed;top: 0;right: 0;" @click="clonese"></div>
<img src="static/icon-img/xiaolian.png" class="icon-img" align="absmiddle" @click="showBafg"> <img src="static/icon-img/xiaolian.png" class="icon-img" align="absmiddle" @click="showBafg">
...@@ -18,8 +22,8 @@ ...@@ -18,8 +22,8 @@
</el-upload> </el-upload>
</div> </div>
<img class="icon-img" align="absmiddle" src="static/icon-img/link.png" alt=""> <img class="icon-img" align="absmiddle" src="static/icon-img/link.png" alt="" @click="seandLink">
<img class="icon-img" align="absmiddle" src="static/icon-img/tag.png" alt=""> <!-- <img class="icon-img" align="absmiddle" src="static/icon-img/tag.png" alt=""> -->
<img class="icon-img" align="absmiddle" src="static/icon-img/retweet.png" alt="" @click="transfer"> <img class="icon-img" align="absmiddle" src="static/icon-img/retweet.png" alt="" @click="transfer">
<img class="icon-img" align="absmiddle" src="static/icon-img/poweroff.png" alt="" @click="closeSession"> <img class="icon-img" align="absmiddle" src="static/icon-img/poweroff.png" alt="" @click="closeSession">
<transition name="showbox"> <transition name="showbox">
...@@ -42,6 +46,7 @@ ...@@ -42,6 +46,7 @@
<el-dialog <el-dialog
title="选择转接对象" title="选择转接对象"
:visible.sync="dialogVisible" :visible.sync="dialogVisible"
:modal-append-to-body="false"
width="30%" width="30%"
> >
<div> <div>
...@@ -65,6 +70,7 @@ ...@@ -65,6 +70,7 @@
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
</div>
</template> </template>
<script> <script>
...@@ -79,6 +85,7 @@ export default { ...@@ -79,6 +85,7 @@ export default {
sendType:1, sendType:1,
upLoadImgUrl:apiUrl.upLoadImg, upLoadImgUrl:apiUrl.upLoadImg,
imageUrl:'', imageUrl:'',
accountFlag:false,
warn: false, warn: false,
showEmoji: false, showEmoji: false,
dialogVisible:false, dialogVisible:false,
...@@ -93,6 +100,8 @@ export default { ...@@ -93,6 +100,8 @@ export default {
]), ]),
...mapGetters([ ...mapGetters([
'selectedChat', 'selectedChat',
'selectId',
'sendContent'
]) ])
}, },
methods: { methods: {
...@@ -197,8 +206,8 @@ export default { ...@@ -197,8 +206,8 @@ export default {
that.tempList = tempList that.tempList = tempList
this.dialogVisible = true this.dialogVisible = true
}).catch((data)=>{ }).catch((data)=>{
that.tempList=[] // that.tempList=[]
this.dialogVisible = false // this.dialogVisible = false
}) })
}, },
onKeyup (e) { onKeyup (e) {
...@@ -244,10 +253,28 @@ export default { ...@@ -244,10 +253,28 @@ export default {
this.content = '' this.content = ''
this.sendType =1 this.sendType =1
} }
},
seandLink() {
let temp =this
this.$prompt('请输入图片链接', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
inputPattern: /^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)(([A-Za-z0-9-~]+).)+([A-Za-z0-9-~\/])+$/,
inputErrorMessage: '链接格式不正确'
}).then(({ value }) => {
var msg = {
id:temp.user.selectId,
type:3,
content: temp.content,
imageUrl:value
}
temp.$store.dispatch('user/sendMessage', msg)
}).catch(() => {
});
} }
}, },
mounted() { mounted() {
this.$refs.text.focus() this.$refs.text&&this.$refs.text.focus()
}, },
watch: { watch: {
selectId() { selectId() {
...@@ -265,6 +292,11 @@ export default { ...@@ -265,6 +292,11 @@ export default {
}, 1000) }, 1000)
} }
} }
},
sendContent(val){
console.log(7777777777777777777)
this.content = val
} }
} }
} }
......
<template> <template>
<div class="content"> <div class="content">
<div class="msglist"> <div class="msgliste">
<search></search> <search></search>
<chatlist></chatlist> <chatlist></chatlist>
</div> </div>
...@@ -30,9 +30,12 @@ export default { ...@@ -30,9 +30,12 @@ export default {
.content .content
display: flex display: flex
width: 800px width: 800px
.msglist height:calc(100%);
.msgliste
height:calc(100%);
width: 250px width: 250px
background: rgb(230,230,230) background: rgb(230,230,230)
.chatbox .chatbox
height:100%;
flex: 1 flex: 1
</style> </style>
...@@ -34,10 +34,10 @@ export default { ...@@ -34,10 +34,10 @@ export default {
#app-main #app-main
display: flex display: flex
position: fixed; position: fixed;
top: calc(50% - 400px) top:5%
left: calc(50% - 630px) left: calc(50% - 630px)
width: 1260px width: 1260px
height: 800px height: 90%
background-color: #fff background-color: #fff
.sidebar .sidebar
width: 60px width: 60px
...@@ -49,6 +49,7 @@ export default { ...@@ -49,6 +49,7 @@ export default {
background: #f2f2f2 background: #f2f2f2
.tarbar .tarbar
flex: 2 flex: 2
border-left: 1px solid #e7e7e7;
width:00px; width:00px;
height: 100% height: 100%
</style> </style>
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
</template> </template>
<script> <script>
import { mapGetters, mapState, mapActions } from 'vuex'
export default{ export default{
data(){ data(){
return { return {
...@@ -19,6 +20,11 @@ export default{ ...@@ -19,6 +20,11 @@ export default{
}, },
components: { components: {
}, },
methods: {
...mapActions('user',[
'selectSession',
])
},
methods: { methods: {
handleClick(){ handleClick(){
console.log(43434) console.log(43434)
......
...@@ -7,44 +7,49 @@ ...@@ -7,44 +7,49 @@
<div class="box-body"> <div class="box-body">
<div> <div>
<span>顾客ID:</span> <span>顾客ID:</span>
<span>107507</span> <span>{{customerInfo.id}}</span>
<el-button type="success" size="mini">修改</el-button> <el-button type="success" size="mini" @click="fdsfsdf">修改</el-button>
</div> </div>
<div> <div>
<span>系统顾客名称:</span> <span>系统顾客名称:</span>
<span>毛毛 13434343434</span> <span style="width: 90px;overflow:hidden;display: inline-block;text-overflow:ellipsis;white-space:nowrap">{{customerInfo.customerName}}</span>
<el-button type="success" size="mini">新建预约单</el-button> <!-- <el-button type="success" size="mini">新建预约单</el-button> -->
</div>
<div>
<span>联系方式:</span>
<span>{{customerInfo.mobile}}</span>
</div> </div>
<div> <div>
<span>来源:</span> <span>来源:</span>
<span> 清仓自增长</span> <span> {{customerInfo.customerSourceValue}}</span>
</div> </div>
<div> <div>
<span>余额:</span> <span>余额:</span>
<span>25.0</span> <span> {{customerInfo.balance}}</span>
<el-button type="info" size="mini">发送充值链接</el-button> <!-- <el-button type="info" size="mini">发送充值链接</el-button> -->
</div> </div>
<div> <div>
<span>6天内预约单数据:</span> <span>6天内预约单数据:</span>
<span>2</span> <span>{{customerInfo.sixDayBookingsCount}}</span>
</div> </div>
<div> <div>
<span>6天前预约单数据:</span> <span>6天前预约单数据:</span>
<span> 2</span> <span> {{customerInfo.beforeSixDayBookingsCount}}</span>
</div> </div>
<div> <div>
<span>历史订单:</span> <span>历史订单:</span>
<span>2</span> <span>{{customerInfo.historyGoodsCount}}</span>
</div> </div>
<div> <div>
<span>返工:</span> <span>返工:</span>
<span>2</span> <span>{{customerInfo.reworkGoodsCount}}</span>
</div> </div>
</div> </div>
</div> </div>
</el-card> </el-card>
</template> </template>
<script> <script>
import { mapState, mapActions ,mapGetters } from 'vuex'
export default{ export default{
data(){ data(){
return { return {
...@@ -69,9 +74,26 @@ export default{ ...@@ -69,9 +74,26 @@ export default{
] ]
} }
}, },
computed: {
...mapState([
'selectId',
'user',
'baozheng'
]),
...mapGetters([
'customerInfo',
])
},
components: { components: {
}, },
methods: { methods: {
...mapActions('baozheng',[
'changeCustomerInfo'
]),
fdsfsdf(){
this.changeCustomerInfo(null)
},
handleClick(){ handleClick(){
console.log(43434) console.log(43434)
} }
......
...@@ -11,8 +11,53 @@ ...@@ -11,8 +11,53 @@
</div> </div>
</div> </div>
</el-card> </el-card>
<cus-info></cus-info> <div v-if="customerInfo==null">
<el-card class="box-card"> <div style="margin:30px 0 ; font-weight: 800">绑定客户信息</div>
<div style="margin:30px 0 ;">
<el-row :gutter="20">
<el-col :span="16">
<div class="grid-content bg-purple">
<el-input v-model="speechContext" placeholder="请输入内容">
</el-input>
</div>
</el-col>
<el-col :span="8"><div class="grid-content bg-purple"><el-button type="primary" @click="goSearch">搜索</el-button></div>
</el-col>
</el-row>
</div>
</div>
<div style="width: 100%;" v-if="customerInfo==null">
<el-table
:data="tableData"
style="width: 100%"
>
<el-table-column
prop="customerName"
label="姓名"
width="80">
</el-table-column>
<el-table-column
prop="mobile"
label="手机号"
width="130">
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="120">
<template slot-scope="scope">
<el-button
@click.native.prevent="bindUser(scope, tableData)"
type="text"
size="small">
绑定
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<cus-info v-if="customerInfo!=null"></cus-info>
<!-- <el-card class="box-card">
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<span>售前咨询</span> <span>售前咨询</span>
</div> </div>
...@@ -20,42 +65,91 @@ ...@@ -20,42 +65,91 @@
<el-button>新粉咨询</el-button> <el-button>新粉咨询</el-button>
<el-button type="success">日常咨询</el-button> <el-button type="success">日常咨询</el-button>
</div> </div>
</el-card> </el-card> -->
</div> </div>
</template> </template>
<script> <script>
import cusInfo from './cus-info' import cusInfo from './cus-info'
import { mapGetters, mapState, mapActions } from 'vuex'
export default{ export default{
data(){ data(){
return { return {
centerDialogVisible:false,
speechContext:'13906025858',
activeName:'second', activeName:'second',
baseInfo:[ baseInfo:[
{ {
label:'微信昵称', label:'微信昵称',
value:'李元霸' value:''
}, },
{ {
label:'微信号', label:'微信号',
value:'李元霸' value:''
}, },
{ {
label:'微信备注', label:'微信备注',
value:'李元霸' value:''
}, },
{ ],
label:'来源', tableData: [],
value:'李元霸' hasCustemer:true,
}
]
} }
}, },
components: { components: {
cusInfo cusInfo
}, },
computed: {
...mapState([
'selectId',
'user',
'baozheng'
]),
...mapGetters([
'selectedChat',
'customerInfo'
])
},
mounted() {
this.$refs.text&&this.$refs.text.focus()
this.setCustomerInfo()
},
watch:{
selectedChat(val){
this.baseInfo[0].value = val.user.name
this.baseInfo[1].value = val.user.username
this.baseInfo[2].value = val.user.conRemark
this.setCustomerInfo()
console.log(333)
}
},
methods: { methods: {
...mapActions('baozheng',[
'setCustomerInfo',
'findByMobile',
'bindChatUser'
]),
goSearch(){
let mobile = this.speechContext
this.findByMobile({mobile}).then((data)=>{
console.log('---------')
console.log(data)
this.tableData = [data]
})
},
bindUser(val){
let customerId= val.row.id
this.bindChatUser({customerId}).then((data)=>{
this.setCustomerInfo()
})
},
handleClick(){ handleClick(){
console.log(43434) console.log(43434)
},
addUser(){
this.centerDialogVisible = true
} }
} }
} }
......
...@@ -8,12 +8,24 @@ ...@@ -8,12 +8,24 @@
<span v-if="index!=0" style="color: #007dfd">{{ite.value}}</span> <span v-if="index!=0" style="color: #007dfd">{{ite.value}}</span>
<span v-if="index==0">{{ite.value}}</span> <span v-if="index==0">{{ite.value}}</span>
</div> </div>
<el-card class="box-card" v-for="(itey) in item.dataPanel">
<div slot="header" class="clearfix">
<span>{{itey.title}}</span>
</div>
<div style="margin-bottom:20px; " v-for="(itet,o) in itey.dataItem" :key="o" class="text item">
<div v-for="(it,o) in itet">
<span>{{it.label}}:</span>
<span>{{it.value}}</span>
</div>
</div>
</el-card>
</el-collapse-item> </el-collapse-item>
</el-collapse> </el-collapse>
</div> </div>
</template> </template>
<script> <script>
import { mapState, mapActions ,mapGetters } from 'vuex'
export default{ export default{
data(){ data(){
return { return {
...@@ -22,29 +34,35 @@ export default{ ...@@ -22,29 +34,35 @@ export default{
{ {
title:'个人统计', title:'个人统计',
numItem:[ numItem:[
{ // {
label:'今日接入量', // label:'今日接入量',
value:54 // id:'todayGoods',
}, // value:'加载中。。。'
// },
{ {
label:'今日预约量', label:'今日预约量',
value:54 id:'todayBookings',
value:'加载中。。。'
}, },
{ {
label:'今日开单量', label:'今天预约单量',
value:54 id:'todayBookings',
value:'加载中。。。'
}, },
{ {
label:'本月开单量', label:'本月预约单量',
value:54 id:'monthBookings',
value:'加载中。。。'
}, },
{ {
label:'6日内预约单未转正', label:'6日内预约单未转正',
value:54 id:'sixDayBookingsUnOpen',
value:'加载中。。。'
}, },
{ {
label:'6日外预约单未转正', label:'6日前预约单未转正',
value:54 id:'beforeSixDayBookingsUnOpen',
value:'加载中。。。'
} }
] ]
}, },
...@@ -53,19 +71,23 @@ export default{ ...@@ -53,19 +71,23 @@ export default{
numItem:[ numItem:[
{ {
label:'诊断方案未发送', label:'诊断方案未发送',
value:54 id:'diagnosisUnSend',
value:'加载中。。。'
}, },
{ {
label:'诊断方案未确认', label:'诊断方案未确认',
value:54 id:'diagnosisUnConfirm',
value:'加载中。。。'
}, },
{ {
label:'效果方案未发送', label:'效果方案未发送',
value:54 id:'effectsUnSend',
value:'加载中。。。'
}, },
{ {
label:'效果方案未确认', label:'效果方案未确认',
value:54 id:'effectsUnConfirm',
value:'加载中。。。'
} }
] ]
}, },
...@@ -74,31 +96,130 @@ export default{ ...@@ -74,31 +96,130 @@ export default{
numItem:[ numItem:[
{ {
label:'诊断方案未发送', label:'诊断方案未发送',
value:54 id:'diagnosisUnSend',
value:'加载中。。。'
}, },
{ {
label:'诊断方案未确认', label:'诊断方案未确认',
value:54 id:'diagnosisUnConfirm',
value:'加载中。。。'
}, },
{ {
label:'效果方案未发送', label:'效果方案未发送',
value:54 id:'effectsUnSend',
value:'加载中。。。'
}, },
{ {
label:'效果方案未确认', label:'效果方案未确认',
value:54 id:'effectsUnConfirm',
value:'加载中。。。'
} }
] ]
} }
] ]
} }
}, },
computed: {
...mapGetters([
'witchPanel',
'selectedChat'
])
},
mounted() {
this.aiyowei()
},
components: { components: {
}, },
methods: { methods: {
...mapActions('baozheng',[
'getPersonStatistics',
'personTodo',
'teamTodo',
]),
aiyowei(){
this.getPersonStatistics().then((data)=>{
let qs = this.queryLists
for(let o in data){
for(let q in qs[0].numItem){
if(qs[0].numItem[q].id == o){
qs[0].numItem[q].value = data[o]
}
}
}
})
this.personTodo().then((data)=>{
let qs = this.queryLists
for(let o in data){
for(let q in qs[1].numItem){
if(qs[1].numItem[q].id == o){
qs[1].numItem[q].value = data[o]
}
}
}
}).catch((error)=>{
console.log(error)
})
this.teamTodo().then((data)=>{
console.log(data)
let qs = this.queryLists
for(let o in data){
for(let q in qs[2].numItem){
if(qs[2].numItem[q].id == o){
qs[2].numItem[q].value = data[o]
}
}
}
}).catch((error)=>{
console.log(error)
})
},
handleClick(){ handleClick(){
console.log(43434) console.log(43434)
} }
},
watch:{
selectedChat(){
this.aiyowei()
},
witchPanel(val){
if(val=='second'){
this.getPersonStatistics().then((data)=>{
let qs = this.queryLists
for(let o in data){
for(let q in qs[0].numItem){
if(qs[0].numItem[q].id == o){
qs[0].numItem[q].value = data[o]
}
}
}
})
this.personTodo().then((data)=>{
let qs = this.queryLists
for(let o in data){
for(let q in qs[1].numItem){
if(qs[1].numItem[q].id == o){
qs[1].numItem[q].value = data[o]
}
}
}
}).catch((error)=>{
console.log(error)
})
this.teamTodo().then((data)=>{
console.log(data)
let qs = this.queryLists
for(let o in data){
for(let q in qs[2].numItem){
if(qs[2].numItem[q].id == o){
qs[2].numItem[q].value = data[o]
}
}
}
}).catch((error)=>{
console.log(error)
})
}
}
} }
} }
</script> </script>
......
<template> <template>
<div class="tabs-body"> <div class="tabs-body">
<img width="95px" src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=4239577881,3334823103&fm=200&gp=0.jpg" alt=""/> <el-row :gutter="20">
<img width="95px" src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=4239577881,3334823103&fm=200&gp=0.jpg" alt=""/> <el-col :span="16">
<img width="95px" src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=4239577881,3334823103&fm=200&gp=0.jpg" alt=""/> <div class="grid-content bg-purple">
<img width="95px" src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=4239577881,3334823103&fm=200&gp=0.jpg" alt=""/> <el-input v-model="speechContext" placeholder="请输入内容">
</el-input>
<img width="95px" src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=4239577881,3334823103&fm=200&gp=0.jpg" alt=""/><img width="95px" src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=4239577881,3334823103&fm=200&gp=0.jpg" alt=""/> </div>
<img width="95px" src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=4239577881,3334823103&fm=200&gp=0.jpg" alt=""/> </el-col>
<img width="95px" src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=4239577881,3334823103&fm=200&gp=0.jpg" alt=""/> <el-col :span="8"><div class="grid-content bg-purple"><el-button type="primary" @click="goSearch">搜索</el-button></div>
</el-col>
</el-row>
<div style="margin-top: 50px;height:600px;overflow: auto;">
<img v-for="item in pics.result" width="95px" @click="seadPic(item)" :src="item.imageUrlValue.split('?')[0]" alt=""/>
</div> </div>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="currentPage"
:page-size="20"
layout="total,prev, pager, next"
:total="total">
</el-pagination>
</div>
</template> </template>
<script> <script>
import { mapState, mapActions ,mapGetters } from 'vuex'
export default{ export default{
data(){ data(){
return { return {
activeName:'second', activeName:'second',
speechContext:"",
currentPage:100,
total:10,
page:1,
pics :[]
} }
}, },
components: { components: {
}, },
computed: {
...mapState([
'user',
]),
},
mounted() {
this.goSearch()
},
methods: { methods: {
...mapActions('baozheng',[
'searchBiaoqingbao',
]),
handleSizeChange(val) {
console.log(`每页 ${val} 条`);
},
handleCurrentChange(val) {
this.page = val
this.diomng()
console.log(`当前页: ${val}`);
},
goSearch(){
this.page = 1
this.diomng()
},
diomng(){
let parm = {}
parm.imageKey= this.speechContext
parm.company = 20
parm.page = this.page
parm.rows = 20
this.searchBiaoqingbao(parm).then((data)=>{
this.pics = data
this.total = data.total
})
},
handleClick(){ handleClick(){
console.log(43434) console.log(43434)
},
seadPic(val){
this.$alert(`
<img src="${val.imageUrlValue.split('?')[0]}" style="widht:300px;height:300px;" alt="" />`, '确认发送!', {
dangerouslyUseHTMLString: true,
cancelButtonText: '取消',
confirmButtonText: '确定',
}).then(() => {
var msg = {
id:this.user.selectId,
type:3,
content:'',
imageUrl:val.imageUrlValue.split('?')[0]
} }
this.$store.dispatch('user/sendMessage', msg)
});
} }
},
} }
</script> </script>
......
<template> <template>
<div class="tabs-body"> <div>
<div v-if="selectId==0">
<h5 style="text-align: center;margin-top: 100px;">请选择列表进行会话!</h5>
</div>
<div class="tabs-body" v-if="selectId!=0">
<el-tabs type="border-card" v-model="activeName" @tab-click="handleClick"> <el-tabs type="border-card" v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="顾客" name="first"> <el-tab-pane label="看板" name="second" @tab-click="handleClick">
<div class="tool-body"> <div class="tool-body">
<cuss-service></cuss-service> <cus-users></cus-users>
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="看板" name="second"> <el-tab-pane label="顾客" name="first">
<div class="tool-body"> <div class="tool-body">
<cus-users></cus-users> <cuss-service></cuss-service>
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="话术" name="third"> <el-tab-pane label="话术" name="script">
<div class="tool-body"> <div class="tool-body">
<takel-script></takel-script> <takel-script></takel-script>
</div> </div>
...@@ -21,17 +25,19 @@ ...@@ -21,17 +25,19 @@
<doutu-picture></doutu-picture> <doutu-picture></doutu-picture>
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="对比图" name="fivth"> <!-- <el-tab-pane label="对比图" name="fivth">
<div class="tool-body"> <div class="tool-body">
<compre-picture></compre-picture> <compre-picture></compre-picture>
</div> </div>
</el-tab-pane> </el-tab-pane> -->
<el-tab-pane label="其他" name="sixth"><div class="tool-body">用户管理</div></el-tab-pane> <el-tab-pane label="其他" name="sixth"><div class="tool-body">暂时未开放此功能!</div></el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
</div>
</template> </template>
<script> <script>
import { mapGetters, mapState, mapActions } from 'vuex'
import cussService from './cus-service' import cussService from './cus-service'
import cusUsers from './cus-users' import cusUsers from './cus-users'
import takelScript from './takel-script' import takelScript from './takel-script'
...@@ -54,21 +60,40 @@ export default{ ...@@ -54,21 +60,40 @@ export default{
comprePicture, comprePicture,
labelUserList labelUserList
}, },
computed: {
...mapGetters([
'selectedChat',
'selectId'
])
},
mounted() {
},
methods: { methods: {
handleClick(){ handleClick(e){
console.log(43434) this.changePanel(e.name)
if('second'==e.name){
} }
console.log(e.name)
console.log(43434)
},
...mapActions('baozheng',[
'changePanel',
]),
} }
} }
</script> </script>
<style lang="stylus" scoped> <style lang="stylus" scoped>
.tabs-body .tabs-body
height:800px; height:100%;
width:100%; width:100%;
overflow-y: auto;
overflow-x: hidden;
.tool-body .tool-body
width:100%; width:100%;
height:729px;
overflow-y: auto; overflow-y: auto;
overflow-x: hidden; overflow-x: hidden;
height:clac(100% - 70px);
overflow-y: auto;
</style> </style>
\ No newline at end of file
<template> <template>
<div class="tabs-body"> <div class="tabs-body">
<el-input v-model="input" placeholder="请输入内容"> <el-row :gutter="20">
<el-col :span="16">
<div class="grid-content bg-purple">
<el-input v-model="speechContext" placeholder="请输入内容">
</el-input> </el-input>
<i class="el-icon-search" style="position:relative;top: -30px;right: -380px;"></i>
<div class="huashu-type">
<el-button v-for="item in buttons">{{item}}</el-button>
</div> </div>
</el-col>
<el-col :span="8"><div class="grid-content bg-purple"><el-button type="primary" @click="search">搜索</el-button></div>
</el-col>
</el-row>
<div class="panelk">
<h1 >推送服务号</h1>
<el-button type="success" @click="sendCode">推送服务号二维码</el-button>
</div>
<div class="panelk">
<h1 >分类</h1>
<div> <div>
<el-card class="box-card"> <div>
央视网消息:眼下,东北正在大面积地春播。记者从农业农村部了解到,今年我国东北四省区及黄淮海地区,大豆种植面积大幅增加。 <el-tag type="info" v-for="item in catigary" >
<span v-if="item.speechSortId==tempCatygary" @click="chioseTag(item)" style="cursor: pointer;color:#67c23a">{{item.speechSortName}}</span>
<span v-if="item.speechSortId!=tempCatygary" @click="chioseTag(item)" style="cursor: pointer;">{{item.speechSortName}}</span>
</el-tag>
</div>
</div>
</div>
<div class="panelk">
<h1 >标签</h1>
<div>
<div>
<el-tag type="success" v-for="item in tags" ><span @click="searchCotent(item)" style="cursor: pointer;">{{item.speechLabelName}}</span></el-tag>
</div>
</div>
</div>
<div class="panelk cvds" ref="list">
<h1>内容</h1>
<el-card class="box-card" v-for="item in contents.result">
<span @click="sead(item)">{{item.speechContext}}</span>
</el-card> </el-card>
<el-card class="box-card"> <!-- <el-card class="box-card">
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<span>卡片名称</span> <span>卡片名称</span>
</div> </div>
<div> <div>
央视网消息:眼下,东北正在大面积地春播。记者从农业农村部了解到,今年我国东北四省区及黄淮海地区,大豆种植面积大幅增加。 央视网消息:眼下,东北正在大面积地春播。记者从农业农村部了解到,今年我国东北四省区及黄淮海地区,大豆种植面积大幅增加。
</div> </div>
</el-card> </el-card> -->
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import { mapState, mapActions ,mapGetters } from 'vuex'
export default{ export default{
data(){ data(){
return { return {
activeName:'second', activeName:'second',
input:'gregreg', input:'gregreg',
tempCatygary:'',
speechLabelId:"",
speechContext:'',
contents:{
result:[]
},
page:1,
rows:5,
tags:[],
catigary:[],
buttons:[ buttons:[
'全部', '全部',
'回访调查' '回访调查'
...@@ -36,7 +76,95 @@ export default{ ...@@ -36,7 +76,95 @@ export default{
}, },
components: { components: {
}, },
computed: {
...mapState([
'selectId',
'user'
]),
...mapGetters([
'selectedChat',
'witchPanel'
])
},
mounted() {
let temp = this
console.log(this.$refs)
this.$refs.list.onscroll = function () {
console.log(this.scrollHeight)
if(this.scrollTop ==(this.scrollHeight-400)){
temp.page++
temp.queryContent()
}
}
},
watch:{
witchPanel(val){
if('script'==val){
this.getScriptCatgary({company:20}).then((data)=>{
this.catigary = data
})
}
}
},
methods: { methods: {
...mapActions('baozheng',[
'speechSort',
'getScriptCatgary',
'changeContent',
'getScriptTags',
]),
chioseTag(val){
console.log(43434)
this.tempCatygary = val.speechSortId
let parm = {
speechSortId:val.speechSortId,
company:20
}
this.getScriptTags(parm).then((data)=>{
this.tags = data
})
},
searchCotent(val){
val&&(this.speechLabelId = val.speechLabelId)
val&&(this.contents.result = [])
val&&(this.page = 1)
let parm = {
company:20
}
parm.speechContext = this.speechContext
parm.speechLabelId = this.speechLabelId
parm.speechSortId = this.tempCatygary
parm.page = this.page
parm.rows = this.rows
this.speechSort(parm).then((data)=>{
if(this.contents.result.length !=0){
this.contents.result = [...data.result,...this.contents.result]
}else{
this.contents = data
}
})
},
search(){
this.contents.result = []
this.page =1
this.searchCotent()
},
queryContent(){
this.searchCotent()
},
sendCode(){
var msg = {
id:this.user.selectId,
type:3,
content: '',
imageUrl:'http://chat-x.oss-cn-beijing.aliyuncs.com/73218520-8690-11e9-848f-edf4a3ff5396.jpeg'
}
this.$store.dispatch('user/sendMessage', msg)
},
sead(item){
console.log('66666666666666')
this.$store.dispatch('baozheng/changeContent', item.speechContext)
},
handleClick(){ handleClick(){
console.log(43434) console.log(43434)
} }
...@@ -53,6 +181,23 @@ export default{ ...@@ -53,6 +181,23 @@ export default{
.box-card{ .box-card{
margin-top:20px; margin-top:20px;
} }
.cvds{
height:400px;
overflow: auto;
}
.panelk{
margin:20px;
h1{
text-align:center;
margin:20px;
}
.el-button{
width:100%;
}
.el-tag{
margin:2px;
}
}
.tabs-body .tabs-body
height:800px; height:800px;
width:100%; width:100%;
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
</template> </template>
<script> <script>
import { mapGetters, mapState, mapActions } from 'vuex'
export default{ export default{
data(){ data(){
return { return {
...@@ -20,11 +19,6 @@ export default{ ...@@ -20,11 +19,6 @@ export default{
}, },
components: { components: {
}, },
methods: {
...mapActions('user',[
'selectSession',
])
},
methods: { methods: {
handleClick(){ handleClick(){
console.log(43434) console.log(43434)
......
...@@ -8,24 +8,12 @@ ...@@ -8,24 +8,12 @@
<span v-if="index!=0" style="color: #007dfd">{{ite.value}}</span> <span v-if="index!=0" style="color: #007dfd">{{ite.value}}</span>
<span v-if="index==0">{{ite.value}}</span> <span v-if="index==0">{{ite.value}}</span>
</div> </div>
<el-card class="box-card" v-for="(itey) in item.dataPanel">
<div slot="header" class="clearfix">
<span>{{itey.title}}</span>
</div>
<div style="margin-bottom:20px; " v-for="(itet,o) in itey.dataItem" :key="o" class="text item">
<div v-for="(it,o) in itet">
<span>{{it.label}}:</span>
<span>{{it.value}}</span>
</div>
</div>
</el-card>
</el-collapse-item> </el-collapse-item>
</el-collapse> </el-collapse>
</div> </div>
</template> </template>
<script> <script>
import { mapState, mapActions ,mapGetters } from 'vuex'
export default{ export default{
data(){ data(){
return { return {
...@@ -36,31 +24,27 @@ export default{ ...@@ -36,31 +24,27 @@ export default{
numItem:[ numItem:[
{ {
label:'今日接入量', label:'今日接入量',
value:'加载中。。。' value:54
}, },
{ {
label:'今日预约量', label:'今日预约量',
value:'加载中。。。' value:54
}, },
{ {
label:'今天预约单量', label:'今日开单量',
id:'todayBookings', value:54
value:'加载中。。。'
}, },
{ {
label:'本月预约单量', label:'本月开单量',
id:'monthBookings', value:54
value:'加载中。。。'
}, },
{ {
label:'6日内预约单未转正', label:'6日内预约单未转正',
id:'sixDayBookingsUnOpen', value:54
value:'加载中。。。'
}, },
{ {
label:'6日前预约单未转正', label:'6日外预约单未转正',
id:'beforeSixDayBookingsUnOpen', value:54
value:'加载中。。。'
} }
] ]
}, },
...@@ -69,23 +53,19 @@ export default{ ...@@ -69,23 +53,19 @@ export default{
numItem:[ numItem:[
{ {
label:'诊断方案未发送', label:'诊断方案未发送',
id:'diagnosisUnSend', value:54
value:'加载中。。。'
}, },
{ {
label:'诊断方案未确认', label:'诊断方案未确认',
id:'diagnosisUnConfirm', value:54
value:'加载中。。。'
}, },
{ {
label:'效果方案未发送', label:'效果方案未发送',
id:'effectsUnSend', value:54
value:'加载中。。。'
}, },
{ {
label:'效果方案未确认', label:'效果方案未确认',
id:'effectsUnConfirm', value:54
value:'加载中。。。'
} }
] ]
}, },
...@@ -113,39 +93,9 @@ export default{ ...@@ -113,39 +93,9 @@ export default{
] ]
} }
}, },
mounted() {
this.getPersonStatistics().then((data)=>{
let qs = this.queryLists
for(let o in data){
for(let q in qs[0].numItem){
if(qs[0].numItem[q].id == o){
qs[0].numItem[q].value = data[o]
}
}
}
console.log(data)
})
this.personTodo().then((data)=>{
let qs = this.queryLists
for(let o in data){
for(let q in qs[1].numItem){
if(qs[1].numItem[q].id == o){
qs[1].numItem[q].value = data[o]
}
}
}
console.log(data)
}).catch((error)=>{
console.log(error)
})
},
components: { components: {
}, },
methods: { methods: {
...mapActions('chenzhen',[
'getPersonStatistics',
'personTodo',
]),
handleClick(){ handleClick(){
console.log(43434) console.log(43434)
} }
......
<template> <template>
<div class="tabs-body"> <div class="tabs-body">
<el-tabs type="border-card" v-model="activeName" @tab-click="handleClick"> <el-tabs type="border-card" v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="看板" name="second"> <el-tab-pane label="顾客" name="first">
<div class="tool-body"> <div class="tool-body">
<cus-users></cus-users> <cuss-service></cuss-service>
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="顾客" name="first"> <el-tab-pane label="看板" name="second">
<div class="tool-body"> <div class="tool-body">
<cuss-service></cuss-service> <cus-users></cus-users>
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="话术" name="third"> <el-tab-pane label="话术" name="third">
...@@ -32,7 +32,6 @@ ...@@ -32,7 +32,6 @@
</template> </template>
<script> <script>
import { mapGetters, mapState, mapActions } from 'vuex'
import cussService from './cus-service' import cussService from './cus-service'
import cusUsers from './cus-users' import cusUsers from './cus-users'
import takelScript from './takel-script' import takelScript from './takel-script'
...@@ -55,16 +54,7 @@ export default{ ...@@ -55,16 +54,7 @@ export default{
comprePicture, comprePicture,
labelUserList labelUserList
}, },
computed: {
},
mounted() {
this.setCustomerInfo()
},
methods: { methods: {
...mapActions('chenzhen',[
'setCustomerInfo',
]),
handleClick(){ handleClick(){
console.log(43434) console.log(43434)
} }
...@@ -80,4 +70,5 @@ export default{ ...@@ -80,4 +70,5 @@ export default{
width:100%; width:100%;
height:729px; height:729px;
overflow-y: auto; overflow-y: auto;
overflow-x: hidden;
</style> </style>
\ No newline at end of file
<template> <template>
<div class="tabs-body"> <div class="tabs-body">
<el-row :gutter="20">
<el-col :span="16">
<div class="grid-content bg-purple">
<el-input v-model="input" placeholder="请输入内容"> <el-input v-model="input" placeholder="请输入内容">
</el-input> </el-input>
<i class="el-icon-search" style="position:relative;top: -30px;right: -380px;"></i>
<div class="huashu-type">
<el-button v-for="item in buttons">{{item}}</el-button>
</div> </div>
</el-col>
<el-col :span="8"><div class="grid-content bg-purple"><el-button type="primary">主要按钮</el-button></div>
</el-col>
</el-row>
<div class="panelk">
<h1 >推送服务号</h1>
<el-button type="success" >成功按钮</el-button>
</div>
<div class="panelk">
<h1 >分类</h1>
<div>
<el-tag type="info">标签三</el-tag><el-tag type="info">标签三</el-tag><el-tag type="info">标签三</el-tag><el-tag type="info">标签三</el-tag><el-tag type="info">标签三</el-tag>
</div>
</div>
<div class="panelk">
<h1 >标签</h1>
<div> <div>
<el-tag type="success">标签三</el-tag><el-tag type="success">标签三</el-tag><el-tag type="success">标签三</el-tag><el-tag type="success">标签三</el-tag><el-tag type="success">标签三</el-tag>
</div>
</div>
<div class="panelk">
<h1>内容</h1>
<el-card class="box-card"> <el-card class="box-card">
央视网消息:眼下,东北正在大面积地春播。记者从农业农村部了解到,今年我国东北四省区及黄淮海地区,大豆种植面积大幅增加。 央视网消息:眼下,东北正在大面积地春播。记者从农业农村部了解到,今年我国东北四省区及黄淮海地区,大豆种植面积大幅增加。
</el-card> </el-card>
...@@ -44,7 +23,6 @@ ...@@ -44,7 +23,6 @@
</template> </template>
<script> <script>
import { mapState, mapActions ,mapGetters } from 'vuex'
export default{ export default{
data(){ data(){
return { return {
...@@ -58,15 +36,7 @@ export default{ ...@@ -58,15 +36,7 @@ export default{
}, },
components: { components: {
}, },
mounted() {
this.speechSort({company:10}).then((data)=>{
console.log(data)
})
},
methods: { methods: {
...mapActions('chenzhen',[
'speechSort',
]),
handleClick(){ handleClick(){
console.log(43434) console.log(43434)
} }
...@@ -83,19 +53,6 @@ export default{ ...@@ -83,19 +53,6 @@ export default{
.box-card{ .box-card{
margin-top:20px; margin-top:20px;
} }
.panelk{
margin:20px;
h1{
text-align:center;
margin:20px;
}
.el-button{
width:100%;
}
.el-tag{
margin:2px;
}
}
.tabs-body .tabs-body
height:800px; height:800px;
width:100%; width:100%;
......
<template> <template>
<div class="tabs-body"> <div class="tabs-body">
<div style="margin:50px;" v-if="!chenzhen.isLogin"> <div style="margin:50px;overflow: auto;" v-if="!baozheng.isLogin">
<el-form :model="ruleForm2" status-icon ref="ruleForm2" class="demo-ruleForm"> <el-form :model="ruleForm2" status-icon ref="ruleForm2" class="demo-ruleForm">
<el-form-item prop="pass"> <el-form-item prop="pass">
<el-input type="text" placeholder="登录名" v-model="ruleForm2.account" auto-complete="off"></el-input> <el-input type="text" placeholder="登录名" v-model="ruleForm2.account" auto-complete="off"></el-input>
...@@ -13,8 +13,8 @@ ...@@ -13,8 +13,8 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<baozheng v-if="chenzhen.isLogin&&user.userInfo.type==3"/> <baozheng v-if="baozheng.isLogin&&user.userInfo.type==1"/>
<chenzheng v-if="chenzhen.isLogin&&user.userInfo.type==1"/> <chenzheng v-if="baozheng.isLogin&&user.userInfo.type==3"/>
</div> </div>
</template> </template>
...@@ -29,7 +29,7 @@ export default{ ...@@ -29,7 +29,7 @@ export default{
activeName:'second', activeName:'second',
ruleForm2:{ ruleForm2:{
account:'13521750803', account:'13521750803',
passwd:'baozheng0618' passwd:'123123'
} }
} }
}, },
...@@ -39,18 +39,18 @@ export default{ ...@@ -39,18 +39,18 @@ export default{
}, },
computed: { computed: {
...mapState([ ...mapState([
'chenzhen', 'baozheng',
'user', 'user',
]) ])
}, },
mounted() { mounted() {
this.init() this.init()
// if(this.chenzhen.isLogin&&this.user.userInfo.type==1){ // if(this.baozheng.isLogin&&this.user.userInfo.type==1){
// this.init() // this.init()
// } // }
}, },
methods: { methods: {
...mapActions('chenzhen',[ ...mapActions('baozheng',[
'login', 'login',
'init' 'init'
]), ]),
...@@ -76,8 +76,9 @@ export default{ ...@@ -76,8 +76,9 @@ export default{
<style lang="stylus" scoped> <style lang="stylus" scoped>
.tabs-body .tabs-body
height:700px; height:100%;
width:100%; width:100%;
overflow: auto;
.tool-body .tool-body
width:100%; width:100%;
height:729px; height:729px;
......
...@@ -12,17 +12,19 @@ url.changeCustomerStatus = `${process.env.API_URL}o/customersession/update/users ...@@ -12,17 +12,19 @@ url.changeCustomerStatus = `${process.env.API_URL}o/customersession/update/users
const chenzhen={} const baozheng={}
chenzhen.login = `${process.env.API_URL}nice-wechat-service/v1/login` baozheng.login = `${process.env.API_URL}nice-wechat-service/v1/login`
chenzhen.getCustomerInfo = `${process.env.API_URL}nice-wechat-service/v1/customer/info` baozheng.getCustomerInfo = `${process.env.API_URL}nice-wechat-service/v1/customer/info`
chenzhen.getPersonStatistics = `${process.env.API_URL}nice-wechat-service/v1/statistics/person` baozheng.getPersonStatistics = `${process.env.API_URL}nice-wechat-service/v1/statistics/person`
chenzhen.personTodo = `${process.env.API_URL}nice-wechat-service/v1/statistics/person/todo` baozheng.personTodo = `${process.env.API_URL}nice-wechat-service/v1/statistics/person/todo`
chenzhen.speechSort = `${process.env.API_URL}p/api/speech/sort` baozheng.speechSort = `${process.env.API_URL}p/api/speech`
chenzhen.findByMobile = `${process.env.API_URL}v1/customer/findByMobile` baozheng.findByMobile = `${process.env.API_URL}nice-wechat-service/v1/customer/findByMobile`
url.searchBiaoqingbao = "" baozheng.teamTodo = `${process.env.API_URL}nice-wechat-service/v1/statistics/team/todo`
url.getScriptTags = "" baozheng.searchBiaoqingbao = `${process.env.API_URL}p/api/images`
url.getScriptCatgary = "" baozheng.getScriptTags = `${process.env.API_URL}p/api/speech/label`
url.getScripts = "" baozheng.getScriptCatgary = `${process.env.API_URL}p/api/speech/sort`
url.chenzhen = chenzhen baozheng.bindChatUser = `${process.env.API_URL}nice-wechat-service/v1/customer/bindChatUser`
baozheng.getScripts = ""
url.baozheng = baozheng
// url.wsUrl = process.env.API_URL // url.wsUrl = process.env.API_URL
export default url export default url
\ No newline at end of file
import apiUrl from './api.js'
import request from '@/utils/baozhengRequest.js'
const login = (param)=>{
return request({
url: apiUrl.baozheng.login,
method: 'post',
data: param
})
}
const getCustomerInfo = (param)=>{
return request({
url: apiUrl.baozheng.getCustomerInfo,
method: 'get',
params: param
})
}
const getPersonStatistics = (param)=>{
return request({
url: apiUrl.baozheng.getPersonStatistics,
method: 'get',
params: param
})
}
const personTodo = (param)=>{
return request({
url: apiUrl.baozheng.personTodo,
method: 'get',
params: param
})
}
const speechSort = (param)=>{
return request({
url: apiUrl.baozheng.speechSort,
method: 'get',
params: param
})
}
const searchBiaoqingbao = (param)=>{
return request({
url:apiUrl.baozheng.searchBiaoqingbao,
method:'get',
params:param
})
}
const getScriptTags = (param)=>{
return request({
url:apiUrl.baozheng.getScriptTags,
method:'get',
params:param
})
}
const getScriptCatgary = (param)=>{
return request({
url:apiUrl.baozheng.getScriptCatgary,
method:'get',
params:param
})
}
const apis = [
[apiUrl.baozheng.speechSort],
[apiUrl.baozheng.getPersonStatistics],
[apiUrl.baozheng.personTodo],
[apiUrl.baozheng.getScriptTags],
[apiUrl.baozheng.searchBiaoqingbao],
[apiUrl.baozheng.teamTodo],
[apiUrl.baozheng.getScriptCatgary],
[apiUrl.baozheng.bindChatUser,'post'],
[apiUrl.baozheng.findByMobile,'post']
]
const reMap = new Map()
const baseService = (()=>{
for(let ap of apis){
let temp = ({resolve, reject,param,isComplete = true})=>{
return isComplete?request({
url: ap[0],
method: ap[1]||'get',
params: param,
data:param
}).then(response=>{
if(response.code==200){
resolve(response.data)
}else{
reject(response)
}
}).catch(error => {
reject(error)
}):request({
url: ap[0],
method: ap[1]||'get',
params: param,
data:param
})
}
reMap.set(ap[0],temp)
}
return reMap
})()
export default {
login,
personTodo,
baseService,
getCustomerInfo,
getPersonStatistics
}
\ No newline at end of file
import apiUrl from './api.js'
import request from '@/utils/chenzhenRequest.js'
const login = (param)=>{
return request({
url: apiUrl.chenzhen.login,
method: 'post',
data: param
})
}
const getCustomerInfo = (param)=>{
return request({
url: apiUrl.chenzhen.getCustomerInfo,
method: 'get',
params: param
})
}
const getPersonStatistics = (param)=>{
return request({
url: apiUrl.chenzhen.getPersonStatistics,
method: 'get',
params: param
})
}
const personTodo = (param)=>{
return request({
url: apiUrl.chenzhen.personTodo,
method: 'get',
params: param
})
}
const speechSort = (param)=>{
return request({
url: apiUrl.chenzhen.speechSort,
method: 'get',
params: param
})
}
const searchBiaoqingbao = (param)=>{
return request({
url:apiUrl.chenzhen.searchBiaoqingbao,
method:'get',
params:param
})
}
const getScriptTags = (param)=>{
return request({
url:apiUrl.chenzhen.getScriptTags,
method:'get',
params:param
})
}
const getScriptCatgary = (param)=>{
return request({
url:apiUrl.chenzhen.getScriptCatgary,
method:'get',
params:param
})
}
const apis = [
[apiUrl.chenzhen.speechSort],
[apiUrl.chenzhen.getPersonStatistics],
[apiUrl.chenzhen.personTodo],
[apiUrl.chenzhen.findByMobile,'post']
]
const reMap = new Map()
const baseService = (()=>{
for(let ap of apis){
let temp = (param)=>{
return request({
url: ap[0],
method: ap[1]||'get',
params: param
})
}
reMap.set(ap[0],temp)
}
return reMap
})()
export default {
login,
personTodo,
baseService,
getCustomerInfo,
getPersonStatistics
}
\ No newline at end of file
import apiUrl from './api.js' import apiUrl from './api.js'
import request from '@/utils/request' import request from '@/utils/request'
import chart from './chart' import chart from './chart'
import chenzhen from './chenzhen' import baozheng from './baozheng'
const login = (param)=>{ const login = (param)=>{
return request({ return request({
url: apiUrl.login, url: apiUrl.login,
...@@ -12,5 +12,5 @@ const login = (param)=>{ ...@@ -12,5 +12,5 @@ const login = (param)=>{
export { export {
login, login,
chart, chart,
chenzhen baozheng
} }
\ No newline at end of file
...@@ -29,6 +29,15 @@ const getters = { ...@@ -29,6 +29,15 @@ const getters = {
}, },
isSelectMore(state){ isSelectMore(state){
return state.user.isSelectMore return state.user.isSelectMore
} },
witchPanel(state){
return state.baozheng.witchPanel
},
sendContent(state){
return state.baozheng.sendContent
},
customerInfo(state){
return state.baozheng.customerInfo
},
} }
export default getters export default getters
\ No newline at end of file
import Vue from 'vue' import Vue from 'vue'
import Vuex from 'vuex' import Vuex from 'vuex'
import user from './modules/user' import user from './modules/user'
import chenzhen from './modules/chenzhen' import baozheng from './modules/baozheng'
import getters from './getters' import getters from './getters'
Vue.use(Vuex) Vue.use(Vuex)
...@@ -9,7 +9,7 @@ Vue.use(Vuex) ...@@ -9,7 +9,7 @@ Vue.use(Vuex)
const store = new Vuex.Store({ const store = new Vuex.Store({
modules: { modules: {
user, user,
chenzhen baozheng
}, },
getters getters
}) })
......
...@@ -4,15 +4,17 @@ import apiUrl from '@/service/api.js' ...@@ -4,15 +4,17 @@ import apiUrl from '@/service/api.js'
import * as auth from '@/utils/auth' import * as auth from '@/utils/auth'
import { MessageBox, Alert } from 'element-ui' import { MessageBox, Alert } from 'element-ui'
import Vue from 'vue' import Vue from 'vue'
const chenzhenService = service.chenzhen.baseService const chenzhenService = service.baozheng.baseService
const baozhengApi = apiUrl.baozheng
const user = { const baozheng = {
namespaced: true, namespaced: true,
state: { state: {
userInfo:auth.getUserInfo(), userInfo:auth.getUserInfo(),
isLogin:false, isLogin:false,
witchPanel:'',
img: 'static/images/UserAvatar.jpg', img: 'static/images/UserAvatar.jpg',
customerInfo:null, customerInfo:null,
sendContent:'',
selectFriendId: 0 selectFriendId: 0
}, },
...@@ -23,28 +25,38 @@ const user = { ...@@ -23,28 +25,38 @@ const user = {
CHANGE_LOGINSTATUS(state, value){ CHANGE_LOGINSTATUS(state, value){
state.isLogin = value state.isLogin = value
}, },
CHAGNGE_PANEL(state, value){
state.witchPanel = value
},
SET_CUSTOMERINFO(state, value){ SET_CUSTOMERINFO(state, value){
state.customerInfo = value state.customerInfo = value
} },
CHANGE_CONTENT(state, value){
state.sendContent = value
},
}, },
actions: { actions: {
init({ dispatch, commit, state }){ init({ dispatch, commit, state }){
let token = auth.getTokenChenzhen() let token = auth.getTokenChenzhen()
console.log(token)
if(token){ if(token){
dispatch('changeLogin', true) dispatch('changeLogin', true)
} }
}, },
changeContent({ dispatch, commit, state }, value){
commit('CHANGE_CONTENT', value)
},
changePanel({ dispatch, commit, state }, value){
commit('CHAGNGE_PANEL', value)
},
setCustomerInfo({ commit, rootGetters , state }, value){ setCustomerInfo({ commit, rootGetters , state }, value){
console.log(6666666666666)
console.log(rootGetters.selectedChat )
let customerId = rootGetters.selectedChat.user.id let customerId = rootGetters.selectedChat.user.id
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
service.chenzhen.getCustomerInfo({ chatUserId: customerId }).then(response=>{ service.baozheng.getCustomerInfo({ chatUserId: customerId }).then(response=>{
if(response.code==200){ if(response.code==200){
commit('SET_CUSTOMERINFO', response.data) commit('SET_CUSTOMERINFO', response.data)
resolve(response.data) resolve(response.data)
}else{ }else{
commit('SET_CUSTOMERINFO', null)
reject(response) reject(response)
} }
}).catch(error => { }).catch(error => {
...@@ -52,15 +64,18 @@ const user = { ...@@ -52,15 +64,18 @@ const user = {
}) })
}) })
}, },
changeCustomerInfo({ dispatch, commit, state }, value){
commit('SET_CUSTOMERINFO', value)
},
changeLogin({ commit, state }, value){ changeLogin({ commit, state }, value){
commit('CHANGE_LOGINSTATUS', value) commit('CHANGE_LOGINSTATUS', value)
}, },
login:({ dispatch, commit }, value)=>{ login:({ dispatch, commit }, value)=>{
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
service.chenzhen.login(value).then(response=>{ service.baozheng.login(value).then(response=>{
if(response.code==200){ if(response.code==200){
dispatch('changeLogin', true) dispatch('changeLogin', true)
commit('chenzhen/USER_LOGIN', response.data, { root: true }) commit('baozheng/USER_LOGIN', response.data, { root: true })
resolve(response.data) resolve(response.data)
}else{ }else{
reject(response) reject(response)
...@@ -72,7 +87,7 @@ const user = { ...@@ -72,7 +87,7 @@ const user = {
}, },
getPersonStatistics:({ dispatch, commit }, value)=>{ getPersonStatistics:({ dispatch, commit }, value)=>{
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
service.chenzhen.getPersonStatistics(value).then(response=>{ service.baozheng.getPersonStatistics(value).then(response=>{
if(response.code==200){ if(response.code==200){
resolve(response.data) resolve(response.data)
}else{ }else{
...@@ -85,7 +100,7 @@ const user = { ...@@ -85,7 +100,7 @@ const user = {
}, },
personTodo:({ dispatch, commit }, value)=>{ personTodo:({ dispatch, commit }, value)=>{
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
service.chenzhen.personTodo(value).then(response=>{ service.baozheng.personTodo(value).then(response=>{
if(response.code==200){ if(response.code==200){
resolve(response.data) resolve(response.data)
}else{ }else{
...@@ -96,22 +111,42 @@ const user = { ...@@ -96,22 +111,42 @@ const user = {
}) })
}) })
}, },
speechSort:({ dispatch, commit }, value)=>{ teamTodo:({ dispatch, commit }, param)=>{
console.log(chenzhenService)
console.log(apiUrl)
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
console.log(apiUrl) chenzhenService.get(baozhengApi.teamTodo)({resolve, reject,param,isComplete:true})
chenzhenService.get(apiUrl.chenzhen.speechSort)(value).then(response=>{ })
if(response.code==200){ },
resolve(response.data) getScriptCatgary:({ dispatch, commit }, param)=>{
}else{ return new Promise((resolve, reject) => {
reject(response) chenzhenService.get(baozhengApi.getScriptCatgary)({resolve, reject,param,isComplete:true})
} })
}).catch(error => { },
reject(error) getScriptTags:({ dispatch, commit }, param)=>{
return new Promise((resolve, reject) => {
chenzhenService.get(baozhengApi.getScriptTags)({resolve, reject,param,isComplete:true})
})
},
searchBiaoqingbao:({ dispatch, commit }, param)=>{
return new Promise((resolve, reject) => {
chenzhenService.get(baozhengApi.searchBiaoqingbao)({resolve, reject,param,isComplete:true})
}) })
},
findByMobile:({ dispatch, commit }, param)=>{
return new Promise((resolve, reject) => {
chenzhenService.get(baozhengApi.findByMobile)({resolve, reject,param,isComplete:true})
})
},
bindChatUser:({ dispatch, rootGetters, commit }, param)=>{
param.chatUserId = rootGetters.selectedChat.user.id
return new Promise((resolve, reject) => {
chenzhenService.get(baozhengApi.bindChatUser)({resolve, reject,param,isComplete:true})
})
},
speechSort:({ dispatch, commit }, param)=>{
return new Promise((resolve, reject) => {
chenzhenService.get(baozhengApi.speechSort)({resolve, reject,param,isComplete:true})
}) })
} }
} }
} }
export default user export default baozheng
\ No newline at end of file \ No newline at end of file
...@@ -32,7 +32,7 @@ const user = { ...@@ -32,7 +32,7 @@ const user = {
tempChatlist:[], tempChatlist:[],
emojis, emojis,
isSelectMore:false, isSelectMore:false,
selectId: 1, selectId: 0,
selectFriendId: 0, selectFriendId: 0,
onLineStatus:10, onLineStatus:10,
customerConversationNum:0, customerConversationNum:0,
...@@ -104,6 +104,7 @@ const user = { ...@@ -104,6 +104,7 @@ const user = {
id: value[i].id, id: value[i].id,
user: { user: {
name:value[i].userBo&&value[i].userBo.nickname, name:value[i].userBo&&value[i].userBo.nickname,
username: value[i].userBo&&value[i].userBo.username,
img: value[i].userBo.avatar, img: value[i].userBo.avatar,
conRemark:value[i].userBo.conRemark, conRemark:value[i].userBo.conRemark,
remark:value[i].devicesBo&&value[i].devicesBo.remark, remark:value[i].devicesBo&&value[i].devicesBo.remark,
...@@ -135,6 +136,7 @@ const user = { ...@@ -135,6 +136,7 @@ const user = {
user: { user: {
name:value[i].userBo.nickname, name:value[i].userBo.nickname,
img: value[i].userBo.avatar, img: value[i].userBo.avatar,
username: value[i].userBo&&value[i].userBo.username,
conRemark:value[i].userBo.conRemark, conRemark:value[i].userBo.conRemark,
remark:value[i].devicesBo&&value[i].devicesBo.remark, remark:value[i].devicesBo&&value[i].devicesBo.remark,
id:value[i].userBo.userId id:value[i].userBo.userId
...@@ -152,9 +154,6 @@ const user = { ...@@ -152,9 +154,6 @@ const user = {
tempList.reverse() tempList.reverse()
state.chatlist = singel(tempList) state.chatlist = singel(tempList)
state.chartings = singel(tempList) state.chartings = singel(tempList)
for(let dd of state.chatlist){
console.log(dd.queryData)
}
}, },
ADD_MESSAGE(state, value){ ADD_MESSAGE(state, value){
let { chatlist, selectId } = state let { chatlist, selectId } = state
...@@ -177,16 +176,9 @@ const user = { ...@@ -177,16 +176,9 @@ const user = {
let temp = value == null?[]:value.sort(compare('createTime')) let temp = value == null?[]:value.sort(compare('createTime'))
array[c].messages = [...array[c].messages, ...temp] array[c].messages = [...array[c].messages, ...temp]
array[c].queryData = value[0].createTime array[c].queryData = value[0].createTime
array.sort(compare('queryData')) array.sort(compare('queryData'))
for(let f of array ){
console.log(f.user.name,f.queryData)
}
console.log('----------------')
array.reverse() array.reverse()
for(let f of array ){
console.log(f.user.name,f.queryData)
}
// let tempe = array[0] // let tempe = array[0]
// array[0] = array[array.length-1] // array[0] = array[array.length-1]
// array[array.length-1] = tempe // array[array.length-1] = tempe
...@@ -244,6 +236,14 @@ const user = { ...@@ -244,6 +236,14 @@ const user = {
dispatch('connected') dispatch('connected')
// storage.set('account', state) // storage.set('account', state)
}).on('connect_error', () => { }).on('connect_error', () => {
MessageBox('连接被迫断开,重新登录!', '提示', {
confirmButtonText: '确定',
type: 'warning'
}).then(() => {
window.location.href="/"
}).catch(() => {
console.log(2)
});
console.log("connect_error") console.log("connect_error")
}).on('disconnect', () => { }).on('disconnect', () => {
MessageBox('连接被迫断开,重新登录!', '提示', { MessageBox('连接被迫断开,重新登录!', '提示', {
...@@ -466,6 +466,7 @@ const user = { ...@@ -466,6 +466,7 @@ const user = {
chatlist.splice(i, 1); chatlist.splice(i, 1);
} }
} }
commit('SELECT_SEESION', {id:0})
commit('SET_CHARTING_LIST', chatlist) commit('SET_CHARTING_LIST', chatlist)
}else{ }else{
reject(response) reject(response)
...@@ -533,6 +534,7 @@ const user = { ...@@ -533,6 +534,7 @@ const user = {
}else{ }else{
Notification({ Notification({
title: '警告', title: '警告',
position: 'bottom-left',
message: `您的客机 ${response.data.notOnlineDevices.join('-')} 客机不在线,请重启客机!`, message: `您的客机 ${response.data.notOnlineDevices.join('-')} 客机不在线,请重启客机!`,
type: 'warning' type: 'warning'
}); });
......
...@@ -28,11 +28,11 @@ export function setToken(token) { ...@@ -28,11 +28,11 @@ export function setToken(token) {
} }
export function getTokenChenzhen() { export function getTokenChenzhen() {
return Cookies.get(TokenChenzhenKey) return getStorage(TokenChenzhenKey)
} }
export function setTokenChenzhen(token) { export function setTokenChenzhen(token) {
return Cookies.set(TokenChenzhenKey, token) return setStorage(TokenChenzhenKey, token)
} }
export function getUserId() { export function getUserId() {
......
...@@ -74,6 +74,14 @@ service.interceptors.response.use( ...@@ -74,6 +74,14 @@ service.interceptors.response.use(
type: 'error', type: 'error',
duration: 5 * 1000 duration: 5 * 1000
}) })
MessageBox('连接被迫断开,重新登录!', '提示', {
confirmButtonText: '确定',
type: 'warning'
}).then(() => {
window.location.href="/"
}).catch(() => {
console.log(2)
});
return Promise.reject(error) return Promise.reject(error)
} }
) )
......
...@@ -70,6 +70,14 @@ service.interceptors.response.use( ...@@ -70,6 +70,14 @@ service.interceptors.response.use(
type: 'error', type: 'error',
duration: 5 * 1000 duration: 5 * 1000
}) })
MessageBox('连接被迫断开,重新登录!', '提示', {
confirmButtonText: '确定',
type: 'warning'
}).then(() => {
window.location.href="/"
}).catch(() => {
console.log(2)
});
return Promise.reject(error) return Promise.reject(error)
} }
) )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment