Commit 9626702f authored by looker's avatar looker

add page

parent e7366c54
No preview for this file type
...@@ -2,14 +2,24 @@ ...@@ -2,14 +2,24 @@
<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-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'">
<span class="htp-top" v-if="item.unReadTotal!=0">
{{item.unReadTotal}}
</span>
</div> </div>
<div class="list-right"> <div class="list-right">
<p class="name">{{item.user.name | name}}</p> <p class="name">{{item.user.name | name}}</p>
<span class="time">{{item.queryData | time}}</span> <span class="time">{{item.queryData | time}}</span>
<p class="lastmsg">{{item.messages[0]?item.messages[0].content:''}}</p> <p class="lastmsg">{{item.messages | content}}</p>
</div> </div>
</li> </li>
</ul> </ul>
...@@ -32,7 +42,7 @@ export default { ...@@ -32,7 +42,7 @@ export default {
]) ])
}, },
methods: { methods: {
...mapActions([ ...mapActions('user',[
'selectSession', 'selectSession',
]) ])
}, },
...@@ -55,12 +65,41 @@ export default { ...@@ -55,12 +65,41 @@ export default {
}, },
name(name){ name(name){
return name.length>8?name.substring(0,8)+'...':name; return name.length>8?name.substring(0,8)+'...':name;
},
content(messages){
return messages[messages.length-1]?messages[messages.length-1].content:''
} }
}, },
} }
</script> </script>
<style lang="stylus" scoped> <style lang="stylus" scoped>
.modonghua{
animation:mymove 3s;
animation-iteration-count:20;
height: 50px;background: #dedede;margin:10px;border-radius: 3px;
}
@keyframes mymove
{
0% {background:rgba(222,222,222,0.2);}
25% {background:rgba(222,222,222,0.5);}
50% {background:rgba(222,222,222,0.7);}
100% {background:rgba(222,222,222,1);}
}
.list-left{
width:60px;
}
.htp-top{
font-size: 10px;
background-color: red;
border-radius: 20px;
color: #ffffff;
padding: 0 4px;
position: relative;
top: -40px;
left: 35px;
}
.msglist .msglist
height: 740px height: 740px
overflow-y: auto overflow-y: auto
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<div> <div>
<div class="message"> <div class="message">
<header class="header"> <header class="header">
<div class="friendname">{{selectedChat&&selectedChat.user.name}}</div> <div class="friendname">{{selectedChat&&(selectedChat.user.conRemark?selectedChat.user.remark+'---'+selectedChat.user.conRemark:selectedChat.user.remark+'---'+selectedChat.user.name)}}</div>
</header> </header>
<div class="message-wrapper" ref="list"> <div class="message-wrapper" ref="list">
<ul v-if="selectedChat"> <ul v-if="selectedChat">
...@@ -81,8 +81,6 @@ export default { ...@@ -81,8 +81,6 @@ export default {
temp.moreMessage() temp.moreMessage()
} }
} }
// console.log(this.$refs)
// setTimeout(() => this.$refs.list.scrollTop = this.$refs.list.scrollHeight, 0)
}, },
watch: { watch: {
selectId() { selectId() {
...@@ -124,7 +122,7 @@ export default { ...@@ -124,7 +122,7 @@ export default {
} }
}, },
methods: { methods: {
...mapActions([ ...mapActions('user',[
'moreMessage', 'moreMessage',
]), ]),
// 在发送信息之后,将输入的内容中属于表情的部分替换成emoji图片标签 // 在发送信息之后,将输入的内容中属于表情的部分替换成emoji图片标签
......
...@@ -34,7 +34,7 @@ export default { ...@@ -34,7 +34,7 @@ export default {
}, },
methods: { methods: {
clearSearch() { clearSearch() {
this.$store.dispatch('search', '') this.$store.dispatch('user/search', '')
}, },
logout(){ logout(){
this.$confirm('确定要此操作吗?', '提示', { this.$confirm('确定要此操作吗?', '提示', {
...@@ -99,7 +99,7 @@ export default { ...@@ -99,7 +99,7 @@ export default {
} }
.tool-panel .tool-panel
position:relative; position:relative;
bottom:-480px; bottom:-600px;
height:80px; height:80px;
width:120px; width:120px;
right:-60px; right:-60px;
......
...@@ -18,9 +18,9 @@ export default { ...@@ -18,9 +18,9 @@ export default {
if(text.replace(/^\s\s*/, '').replace(/\s\s*$/, '')==''){ if(text.replace(/^\s\s*/, '').replace(/\s\s*$/, '')==''){
console.log(66666666666666666) console.log(66666666666666666)
this.$store.dispatch('changeChartPanel') this.$store.dispatch('user/changeChartPanel')
}else{ }else{
this.$store.dispatch('searchSession', this.search) this.$store.dispatch('user/searchSession', this.search)
} }
}, },
del () { del () {
......
...@@ -2,11 +2,13 @@ ...@@ -2,11 +2,13 @@
<template> <template>
<div class="text"> <div class="text">
<div class="emoji"> <div class="emoji">
<i class="icon iconfont icon-look" @click="showEmoji=!showEmoji"></i> <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">
<div style="width: 20px;display: inline-block;"> <div style="width: 20px;display: inline-block;">
<el-upload <el-upload
class="upload-demo" class="upload-demo"
action="/api/o/upload/image" :action="upLoadImgUrl"
:on-preview="handlePreview" :on-preview="handlePreview"
:on-remove="handleRemove" :on-remove="handleRemove"
:on-success="fileEd" :on-success="fileEd"
...@@ -23,7 +25,7 @@ ...@@ -23,7 +25,7 @@
<transition name="showbox"> <transition name="showbox">
<div class="emojiBox" v-show="showEmoji"> <div class="emojiBox" v-show="showEmoji">
<li v-for="(item, index) in user.emojis"> <li v-for="(item, index) in user.emojis">
<img :src="'static/emoji/'+item.file" :data="item.code" @click="content +=item.code"> <img :src="'static/emoji/'+item.file" :data="item.code" @click="chiosebiafg(item.code)">
</li> </li>
</div> </div>
</transition> </transition>
...@@ -67,6 +69,7 @@ ...@@ -67,6 +69,7 @@
<script> <script>
import { mapGetters, mapState, mapActions } from 'vuex' import { mapGetters, mapState, mapActions } from 'vuex'
import apiUrl from '@/service/api.js'
export default { export default {
data () { data () {
return { return {
...@@ -74,7 +77,7 @@ export default { ...@@ -74,7 +77,7 @@ export default {
reply: '未找到', reply: '未找到',
frequency: 0, frequency: 0,
sendType:1, sendType:1,
upLoadImgUrl:process.env.IMG_ADDRESS, upLoadImgUrl:apiUrl.upLoadImg,
imageUrl:'', imageUrl:'',
warn: false, warn: false,
showEmoji: false, showEmoji: false,
...@@ -93,7 +96,19 @@ export default { ...@@ -93,7 +96,19 @@ export default {
]) ])
}, },
methods: { methods: {
...mapActions([ chiosebiafg(code){
this.content +=code
this.clonese()
},
clonese(){
this.accountFlag =false
this.showEmoji = false
},
showBafg(){
this.showEmoji = true
this.accountFlag =true
},
...mapActions('user',[
'getTranster', 'getTranster',
'toTranster', 'toTranster',
'closeTake' 'closeTake'
...@@ -188,12 +203,21 @@ export default { ...@@ -188,12 +203,21 @@ export default {
}, },
onKeyup (e) { onKeyup (e) {
if ( e.keyCode === 13 ) { if ( e.keyCode === 13 ) {
console.log(55555555)
if(this.content.replace(/\s+/g,"")==''){
this.warn = true
this.content = ''
setTimeout(() => {
this.warn = false;
}, 1000)
}else{
this.send() this.send()
}
} }
}, },
send () { send () {
if(this.sendType!=3){ if(this.sendType!=3){
if(this.content.length < 1){ if(this.content.replace(/\s+/g,"")==''){
this.warn = true this.warn = true
this.content = '' this.content = ''
setTimeout(() => { setTimeout(() => {
...@@ -206,7 +230,7 @@ export default { ...@@ -206,7 +230,7 @@ export default {
content: this.content, content: this.content,
imageUrl:this.imageUrl imageUrl:this.imageUrl
} }
this.$store.dispatch('sendMessage', msg) this.$store.dispatch('user/sendMessage', msg)
this.content = '' this.content = ''
} }
}else{ }else{
...@@ -216,7 +240,7 @@ export default { ...@@ -216,7 +240,7 @@ export default {
content: this.content, content: this.content,
imageUrl:this.imageUrl imageUrl:this.imageUrl
} }
this.$store.dispatch('sendMessage', msg) this.$store.dispatch('user/sendMessage', msg)
this.content = '' this.content = ''
this.sendType =1 this.sendType =1
} }
...@@ -257,7 +281,7 @@ export default { ...@@ -257,7 +281,7 @@ export default {
height: 40px height: 40px
line-height: 40px line-height: 40px
font-size: 12px font-size: 12px
padding: 0 30px padding: 0 10px
box-sizing: border-box box-sizing: border-box
color: #7c7c7c color: #7c7c7c
.icon-img .icon-img
......
...@@ -44,7 +44,7 @@ export default { ...@@ -44,7 +44,7 @@ export default {
passwd:this.password passwd:this.password
} }
this.isLoging = true; this.isLoging = true;
this.$store.dispatch('login',loginParam).then((red)=>{ this.$store.dispatch('user/login',loginParam).then((red)=>{
this.isLoging = false; this.isLoging = false;
this.$message({ this.$message({
message: '登录成功!', message: '登录成功!',
......
<template> <template>
<div id="app"> <div id="app-main">
<div class="sidebar"> <div class="sidebar">
<mycard></mycard> <mycard></mycard>
</div> </div>
...@@ -22,15 +22,16 @@ export default { ...@@ -22,15 +22,16 @@ export default {
toolbar toolbar
}, },
created () { created () {
this.$store.dispatch('connect') this.$store.dispatch('user/connect')
} }
} }
</script> </script>
<style lang="stylus" scoped> <style lang="stylus" scoped>
#app #app-main
display: flex display: flex
margin: auto margin: auto
margin-top:30px
width: 1260px width: 1260px
background-color: #fff background-color: #fff
.sidebar .sidebar
......
...@@ -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)
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
</template> </template>
<script> <script>
import { mapState, mapActions ,mapGetters } from 'vuex'
export default{ export default{
data(){ data(){
return { return {
...@@ -35,150 +36,56 @@ export default{ ...@@ -35,150 +36,56 @@ export default{
numItem:[ numItem:[
{ {
label:'今日接入量', label:'今日接入量',
value:54 value:'加载中。。。'
}, },
{ {
label:'今日预约量', label:'今日预约量',
value:54 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:'加载中。。。'
} }
] ]
}, },
{ {
title:'客机统计', title:'个人待办事项',
dataPanel:[ numItem:[
{
label:'诊断方案未发送',
id:'diagnosisUnSend',
value:'加载中。。。'
},
{ {
title:'客机:robot1', label:'诊断方案未确认',
dataItem:[ id:'diagnosisUnConfirm',
[ value:'加载中。。。'
{
label:'今日新粉丝咨询量',
value:0
},
{
label:'今日新粉丝收货单量',
value:0
},
{
label:'今日新粉丝转化率',
value:0
},
{
label:'今日新粉丝预收货货值',
value:0
},
],
[
{
label:'今日新粉丝咨询量',
value:0
},
{
label:'今日新粉丝收货单量',
value:0
},
{
label:'今日新粉丝转化率',
value:0
},
{
label:'今日新粉丝预收货货值',
value:0
},
],
[
{
label:'今日新粉丝咨询量',
value:0
},
{
label:'今日新粉丝收货单量',
value:0
},
{
label:'今日新粉丝转化率',
value:0
},
{
label:'今日新粉丝预收货货值',
value:0
},
]
]
}, },
{ {
title:'客机:robot2', label:'效果方案未发送',
dataItem:[ id:'effectsUnSend',
[ value:'加载中。。。'
{ },
label:'今日新粉丝咨询量', {
value:0 label:'效果方案未确认',
}, id:'effectsUnConfirm',
{ value:'加载中。。。'
label:'今日新粉丝收货单量',
value:0
},
{
label:'今日新粉丝转化率',
value:0
},
{
label:'今日新粉丝预收货货值',
value:0
},
],
[
{
label:'今日新粉丝咨询量',
value:0
},
{
label:'今日新粉丝收货单量',
value:0
},
{
label:'今日新粉丝转化率',
value:0
},
{
label:'今日新粉丝预收货货值',
value:0
},
],
[
{
label:'今日新粉丝咨询量',
value:0
},
{
label:'今日新粉丝收货单量',
value:0
},
{
label:'今日新粉丝转化率',
value:0
},
{
label:'今日新粉丝预收货货值',
value:0
},
]
]
} }
] ]
}, },
...@@ -206,9 +113,39 @@ export default{ ...@@ -206,9 +113,39 @@ 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)
} }
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
</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,7 +55,16 @@ export default{ ...@@ -54,7 +55,16 @@ export default{
comprePicture, comprePicture,
labelUserList labelUserList
}, },
computed: {
},
mounted() {
this.setCustomerInfo()
},
methods: { methods: {
...mapActions('chenzhen',[
'setCustomerInfo',
]),
handleClick(){ handleClick(){
console.log(43434) console.log(43434)
} }
......
<template> <template>
<div class="tabs-body"> <div class="tabs-body">
<el-input v-model="input" placeholder="请输入内容"> <el-row :gutter="20">
</el-input> <el-col :span="16">
<i class="el-icon-search" style="position:relative;top: -30px;right: -380px;"></i> <div class="grid-content bg-purple">
<div class="huashu-type"> <el-input v-model="input" placeholder="请输入内容">
<el-button v-for="item in buttons">{{item}}</el-button> </el-input>
</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>
<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>
<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>
...@@ -23,6 +44,7 @@ ...@@ -23,6 +44,7 @@
</template> </template>
<script> <script>
import { mapState, mapActions ,mapGetters } from 'vuex'
export default{ export default{
data(){ data(){
return { return {
...@@ -36,7 +58,15 @@ export default{ ...@@ -36,7 +58,15 @@ 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)
} }
...@@ -53,6 +83,19 @@ export default{ ...@@ -53,6 +83,19 @@ 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="false"> <div style="margin:50px;" v-if="!chenzhen.isLogin">
<el-form :model="ruleForm2" status-icon :rules="rules2" 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="password" placeholder="登录名" v-model="ruleForm2.pass" auto-complete="off"></el-input> <el-input type="text" placeholder="登录名" v-model="ruleForm2.account" auto-complete="off"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="checkPass"> <el-form-item prop="checkPass">
<el-input type="password" placeholder="密码" v-model="ruleForm2.checkPass" auto-complete="off"></el-input> <el-input type="password" placeholder="密码" v-model="ruleForm2.passwd" auto-complete="off"></el-input>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="submitForm('ruleForm2')">登录</el-button> <el-button type="primary" @click="submitForm()">登录</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<baozheng v-if="false"/> <baozheng v-if="chenzhen.isLogin&&user.userInfo.type==3"/>
<chenzheng v-if="true"/> <chenzheng v-if="chenzhen.isLogin&&user.userInfo.type==1"/>
</div> </div>
</template> </template>
<script> <script>
import { mapGetters, mapState, mapActions } from 'vuex'
import baozheng from './baozheng' import baozheng from './baozheng'
import chenzheng from './chenzheng' import chenzheng from './chenzheng'
import { mainPanel } from '@/utils/common'
export default{ export default{
data(){ data(){
return { return {
activeName:'second', activeName:'second',
ruleForm2:{} ruleForm2:{
account:'18310825053',
passwd:'123456'
}
} }
}, },
components: { components: {
baozheng, baozheng,
chenzheng, chenzheng,
}, },
computed: {
...mapState([
'chenzhen',
'user',
])
},
mounted() {
this.init()
// if(this.chenzhen.isLogin&&this.user.userInfo.type==1){
// this.init()
// }
},
methods: { methods: {
...mapActions('chenzhen',[
'login',
'init'
]),
submitForm(){
let parm = this.ruleForm2
this.login(parm).then(()=>{
this.$message({
message: '登录成功!',
type: 'success'
});
this.isLogin = true
}).catch((error)=>{
this.$message.error(error);
})
},
handleClick(){ handleClick(){
console.log()
console.log(43434) console.log(43434)
} }
} }
......
...@@ -4,5 +4,15 @@ url.wsUrl = "http://imdev.chenzhen.shop:9093/" ...@@ -4,5 +4,15 @@ url.wsUrl = "http://imdev.chenzhen.shop:9093/"
url.getTransferList = `${process.env.API_URL}o/customer/transfer` url.getTransferList = `${process.env.API_URL}o/customer/transfer`
url.toTreansfer = `${process.env.API_URL}o/customer/transfer` url.toTreansfer = `${process.env.API_URL}o/customer/transfer`
url.closeTake = `${process.env.API_URL}o/customerConversation/finish` url.closeTake = `${process.env.API_URL}o/customerConversation/finish`
url.upLoadImg = `${process.env.API_URL}/o/upload/image`
const chenzhen={}
chenzhen.login = `${process.env.API_URL}nice-wechat-service/v1/login`
chenzhen.getCustomerInfo = `${process.env.API_URL}nice-wechat-service/v1/customer/info`
chenzhen.getPersonStatistics = `${process.env.API_URL}nice-wechat-service/v1/statistics/person`
chenzhen.personTodo = `${process.env.API_URL}nice-wechat-service/v1/statistics/person/todo`
chenzhen.speechSort = `${process.env.API_URL}p/api/speech/sort`
chenzhen.findByMobile = `${process.env.API_URL}v1/customer/findByMobile`
url.chenzhen = chenzhen
// 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/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 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,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'
const login = (param)=>{ const login = (param)=>{
return request({ return request({
url: apiUrl.login, url: apiUrl.login,
...@@ -10,5 +11,6 @@ const login = (param)=>{ ...@@ -10,5 +11,6 @@ const login = (param)=>{
} }
export { export {
login, login,
chart chart,
chenzhen
} }
\ No newline at end of file
...@@ -24,6 +24,9 @@ const getters = { ...@@ -24,6 +24,9 @@ const getters = {
let session = state.user.chartings.find(session => session.id === state.user.selectId); let session = state.user.chartings.find(session => session.id === state.user.selectId);
return session&&session.messages return session&&session.messages
}, },
userInfo(state){
return state.user.userInfo
},
isSelectMore(state){ isSelectMore(state){
return state.user.isSelectMore return state.user.isSelectMore
} }
......
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 getters from './getters' import getters from './getters'
Vue.use(Vuex) Vue.use(Vuex)
...@@ -8,6 +9,7 @@ Vue.use(Vuex) ...@@ -8,6 +9,7 @@ Vue.use(Vuex)
const store = new Vuex.Store({ const store = new Vuex.Store({
modules: { modules: {
user, user,
chenzhen
}, },
getters getters
}) })
......
This diff is collapsed.
import * as service from '@/service'
import router from '@/router'
import apiUrl from '@/service/api.js'
import * as auth from '@/utils/auth'
import { MessageBox, Alert } from 'element-ui'
import Vue from 'vue'
const chenzhenService = service.chenzhen.baseService()
const user = {
namespaced: true,
state: {
userInfo:auth.getUserInfo(),
isLogin:false,
img: 'static/images/UserAvatar.jpg',
customerInfo:null,
selectFriendId: 0
},
mutations: {
USER_LOGIN(state, value){
auth.setTokenChenzhen(value.token)
},
CHANGE_LOGINSTATUS(state, value){
state.isLogin = value
},
SET_CUSTOMERINFO(state, value){
state.customerInfo = value
}
},
actions: {
init({ dispatch, commit, state }){
let token = auth.getTokenChenzhen()
console.log(token)
if(token){
dispatch('changeLogin', true)
}
},
setCustomerInfo({ commit, rootGetters , state }, value){
console.log(6666666666666)
console.log(rootGetters.selectedChat )
let customerId = rootGetters.selectedChat.user.id
return new Promise((resolve, reject) => {
service.chenzhen.getCustomerInfo({ chatUserId: customerId }).then(response=>{
if(response.code==200){
commit('SET_CUSTOMERINFO', response.data)
resolve(response.data)
}else{
reject(response)
}
}).catch(error => {
reject(error)
})
})
},
changeLogin({ commit, state }, value){
commit('CHANGE_LOGINSTATUS', value)
},
login:({ dispatch, commit }, value)=>{
return new Promise((resolve, reject) => {
service.chenzhen.login(value).then(response=>{
if(response.code==200){
dispatch('changeLogin', true)
commit('chenzhen/USER_LOGIN', response.data, { root: true })
resolve(response.data)
}else{
reject(response)
}
}).catch(error => {
reject(error)
})
})
},
getPersonStatistics:({ dispatch, commit }, value)=>{
return new Promise((resolve, reject) => {
service.chenzhen.getPersonStatistics(value).then(response=>{
if(response.code==200){
resolve(response.data)
}else{
reject(response)
}
}).catch(error => {
reject(error)
})
})
},
personTodo:({ dispatch, commit }, value)=>{
return new Promise((resolve, reject) => {
service.chenzhen.personTodo(value).then(response=>{
if(response.code==200){
resolve(response.data)
}else{
reject(response)
}
}).catch(error => {
reject(error)
})
})
},
speechSort:({ dispatch, commit }, value)=>{
console.log(chenzhenService)
console.log(apiUrl)
return new Promise((resolve, reject) => {
console.log(apiUrl)
chenzhenService.get(apiUrl.chenzhen.speechSort)(value).then(response=>{
if(response.code==200){
resolve(response.data)
}else{
reject(response)
}
}).catch(error => {
reject(error)
})
})
}
}
}
export default user
\ No newline at end of file
...@@ -2,14 +2,19 @@ import * as service from '@/service' ...@@ -2,14 +2,19 @@ import * as service from '@/service'
// import io from 'socket.io-client'; // import io from 'socket.io-client';
import apiUrl from '@/service/api.js' import apiUrl from '@/service/api.js'
import router from '@/router' import router from '@/router'
import { compare } from '@/utils/tools' import { compare, singel } from '@/utils/tools'
import { setToken, getToken, setUserId, getUserId, emojis } from '@/utils/auth' import {
setToken, getToken, setUserId,
getUserId, emojis, setUserInfo,
getUserInfo
} from '@/utils/auth'
import { MessageBox, Alert } from 'element-ui' import { MessageBox, Alert } from 'element-ui'
import { panelStatus } from '@/utils/common' import { panelStatus } from '@/utils/common'
import Vue from 'vue' import Vue from 'vue'
let isSend = false; let isSend = false;
const now = new Date(); const now = new Date();
const user = { const user = {
namespaced: true,
state: { state: {
name: 'ratel', name: 'ratel',
userInfo:{}, userInfo:{},
...@@ -31,10 +36,14 @@ const user = { ...@@ -31,10 +36,14 @@ const user = {
mutations: { mutations: {
USER_LOGIN(state, value){ USER_LOGIN(state, value){
setUserInfo(value)
setToken(value.token) setToken(value.token)
setUserId(value.customerId) setUserId(value.customerId)
state.userInfo = value state.userInfo = value
}, },
SET_USERINFO(state, value){
state.userInfo = value
},
CHANGE_CONVERSATIONPANEL(state, value){ CHANGE_CONVERSATIONPANEL(state, value){
if(panelStatus.CHART==value){ if(panelStatus.CHART==value){
state.chartings = state.chatlist state.chartings = state.chatlist
...@@ -46,8 +55,8 @@ const user = { ...@@ -46,8 +55,8 @@ const user = {
} }
}, },
SET_CHARTING_LIST(state,value){ SET_CHARTING_LIST(state,value){
state.chatlist = value.reverse(compare('queryData')) state.chatlist = singel(value.reverse(compare('queryData')))
state.chartings =value.reverse(compare('queryData')) state.chartings = singel(value.reverse(compare('queryData')))
}, },
CHANGE_ISSELECTMORE(state,value){ CHANGE_ISSELECTMORE(state,value){
state.isSelectMore = value state.isSelectMore = value
...@@ -69,10 +78,13 @@ const user = { ...@@ -69,10 +78,13 @@ const user = {
tempList.push({ tempList.push({
id: value[i].id, id: value[i].id,
user: { user: {
name: value[i].userBo.nickname, name:value[i].userBo&&value[i].userBo.nickname,
img: value[i].userBo.avatar, img: value[i].userBo.avatar,
conRemark:value[i].userBo.conRemark,
remark:value[i].devicesBo&&value[i].devicesBo.remark,
id:value[i].userBo.userId id:value[i].userBo.userId
}, },
unReadTotal:value[i].unReadTotal,
page: 1, page: 1,
rows: 30, rows: 30,
messages: temp, messages: temp,
...@@ -80,8 +92,8 @@ const user = { ...@@ -80,8 +92,8 @@ const user = {
index: i index: i
}) })
} }
state.searchChatlist = tempList.sort(compare('queryData')) state.searchChatlist = singel(tempList.sort(compare('queryData')))
state.chartings = tempList.sort(compare('queryData')) state.chartings = singel(tempList.sort(compare('queryData')))
}, },
SET_CHART_LIST(state, value){ SET_CHART_LIST(state, value){
state.tempChatlist = value state.tempChatlist = value
...@@ -94,10 +106,13 @@ const user = { ...@@ -94,10 +106,13 @@ const user = {
tempList.push({ tempList.push({
id: value[i].id, id: value[i].id,
user: { user: {
name: value[i].userBo.nickname, name:value[i].userBo.nickname,
img: value[i].userBo.avatar, img: value[i].userBo.avatar,
conRemark:value[i].userBo.conRemark,
remark:value[i].devicesBo&&value[i].devicesBo.remark,
id:value[i].userBo.userId id:value[i].userBo.userId
}, },
unReadTotal:value[i].unReadTotal,
page: 1, page: 1,
rows: 30, rows: 30,
messages: temp, messages: temp,
...@@ -105,22 +120,26 @@ const user = { ...@@ -105,22 +120,26 @@ const user = {
index: i index: i
}) })
} }
state.chatlist = tempList.reverse(compare('queryData')) state.chatlist = singel(tempList.reverse(compare('queryData')))
state.chartings =tempList.reverse(compare('queryData')) state.chartings = singel(tempList.reverse(compare('queryData')))
}, },
ADD_MESSAGE(state, value){ ADD_MESSAGE(state, value){
let { chatlist, selectId } = state let { chatlist, selectId } = state
for(let c in chatlist){ for(let c in chatlist){
if(chatlist[c].id==selectId){ if(chatlist[c].id==selectId){
let temp = value == null?[]:value.sort(compare('createTime')) let temp = [...value, ...chatlist[c].messages]
chatlist[c].messages = [...temp, ...chatlist[c].messages] chatlist[c].messages = temp.sort(compare('createTime'))
} }
// if(chatlist[c].id==selectId){
// let temp = value == null?[]:value.sort(compare('createTime'))
// chatlist[c].messages = [...temp, ...chatlist[c].messages]
// }
} }
}, },
SEND_MESSAGE(state, value){ SEND_MESSAGE(state, value){
let { chatlist, selectId } = state let { chatlist, selectId } = state
for(let c in chatlist){ for(let c in chatlist){
if(chatlist[c].id==selectId){ if(chatlist[c].id==value[0].conversationId){
let temp = value == null?[]:value.sort(compare('createTime')) let temp = value == null?[]:value.sort(compare('createTime'))
chatlist[c].messages = [...chatlist[c].messages, ...temp] chatlist[c].messages = [...chatlist[c].messages, ...temp]
} }
...@@ -133,7 +152,7 @@ const user = { ...@@ -133,7 +152,7 @@ const user = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
service.login(value).then(response=>{ service.login(value).then(response=>{
if(response.code==200){ if(response.code==200){
commit('USER_LOGIN', response.data) commit('user/USER_LOGIN', response.data, { root: true })
resolve(response.data) resolve(response.data)
}else{ }else{
reject(response) reject(response)
...@@ -143,12 +162,17 @@ const user = { ...@@ -143,12 +162,17 @@ const user = {
}) })
}) })
}, },
initData({ commit, state }){
let userInfo = getUserInfo()
commit('user/SET_USERINFO', userInfo, { root: true })
},
init ({ commit, state }) { init ({ commit, state }) {
state.wsObject.emit('appevent', { state.wsObject.emit('appevent', {
eventType: 'conversations/index' eventType: 'conversations/index'
}) })
}, },
connect({ dispatch, commit, state }) { connect({ dispatch, commit, state }) {
dispatch('initData')
const wsClient = io(apiUrl.wsUrl, { autoConnect: false, transports: ['websocket'] }) const wsClient = io(apiUrl.wsUrl, { autoConnect: false, transports: ['websocket'] })
commit('SET_WXOBJECT', wsClient) commit('SET_WXOBJECT', wsClient)
if (wsClient.disconnected) { if (wsClient.disconnected) {
...@@ -184,33 +208,36 @@ const user = { ...@@ -184,33 +208,36 @@ const user = {
connected({ state, commit }) { connected({ state, commit }) {
state.wsObject state.wsObject
.on('messages/message', (data, callback) => { .on('messages/message', (data, callback) => {
if(isSend){ callback(true)
isSend = false if(data.isSend==1){
}else{ }else{
commit('SEND_MESSAGE', [data]) commit('SEND_MESSAGE', [data])
callback()
} }
}) })
.on('conversations/index', (data, callback) => { .on('conversations/index', (data, callback) => {
commit('SET_CHART_LIST', data) callback(true)
let { tempChatlist } = state
let list = [...data].concat(tempChatlist)
commit('SET_CHART_LIST', list)
}) })
.on('conversations/friend', (data, callback) => { .on('conversations/friend', (data, callback) => {
console.log(data) console.log(data)
}) })
.on('messages/index', (data, callback) => { .on('messages/index', (data, callback) => {
callback(true)
if(isSend){ if(isSend){
isSend = false isSend = false
}else{ }else{
commit('CHANGE_ISSELECTMORE',false) commit('CHANGE_ISSELECTMORE',false)
callback(true)
data&&commit('ADD_MESSAGE', data) data&&commit('ADD_MESSAGE', data)
!data&&state.messagesPage-- !data&&state.messagesPage--
} }
}) })
.on('conversations/show', (data, callback) => { .on('conversations/show', (data, callback) => {
callback(true)
let customerId = getUserId() let customerId = getUserId()
let { tempChatlist } = state let { tempChatlist } = state
if(data!=null&&data.userBo.primaryBindCustomerId!= customerId){ if(data!=null&&data.userBo.primaryBindCustomerId== customerId){
let temp = null let temp = null
let isNew = true let isNew = true
const { chartings } = state const { chartings } = state
...@@ -231,12 +258,12 @@ const user = { ...@@ -231,12 +258,12 @@ const user = {
} }
}) })
.on('conversions/search', (data, callback) => { .on('conversions/search', (data, callback) => {
callback() callback(true)
commit('SET_SEARCHCHART_LIST', data) commit('SET_SEARCHCHART_LIST', data)
}) })
}, },
selectSession({ dispatch, commit, state }, conversation) { selectSession({ dispatch, commit, state }, conversation) {
if(state.selectId==conversation.id)return if(state.selectId==conversation.id)return
let parm = {} let parm = {}
if(state.whichPane == panelStatus.SEARCH){ if(state.whichPane == panelStatus.SEARCH){
let temp = true let temp = true
...@@ -247,6 +274,7 @@ const user = { ...@@ -247,6 +274,7 @@ const user = {
} }
} }
conversation.lastUpdateTime = Date.parse( new Date()) conversation.lastUpdateTime = Date.parse( new Date())
conversation.unReadTotal = 0
state.chatlist = [conversation].concat(state.chatlist) state.chatlist = [conversation].concat(state.chatlist)
commit('CHANGE_CONVERSATIONPANEL', panelStatus.CHART) commit('CHANGE_CONVERSATIONPANEL', panelStatus.CHART)
parm = { parm = {
...@@ -259,18 +287,20 @@ const user = { ...@@ -259,18 +287,20 @@ const user = {
if(state.whichPane == panelStatus.CHART){ if(state.whichPane == panelStatus.CHART){
for(let obj of state.chatlist){ for(let obj of state.chatlist){
if(obj.id == conversation.id){ if(obj.id == conversation.id){
obj.unReadTotal = 0
obj.page = 1
obj.rows = 30
parm = { parm = {
conversationId:conversation.id, conversationId:conversation.id,
page: obj.page, page: obj.page,
rows: obj.rows rows: obj.rows
} }
if(obj.messages.length<2){ obj.messages = []
obj.messages = [] dispatch('selectMessage', parm)
dispatch('selectMessage', parm)
}
} }
} }
} }
// dispatch('chenzhen/setCustomerInfo', null, { root: true })
commit('SELECT_SEESION', conversation) commit('SELECT_SEESION', conversation)
}, },
selectMessage({ commit, state }, message){ selectMessage({ commit, state }, message){
...@@ -325,7 +355,7 @@ const user = { ...@@ -325,7 +355,7 @@ const user = {
content: conversation.content, content: conversation.content,
createTime: Date.parse(new Date()) createTime: Date.parse(new Date())
} }
isSend=true
commit('SEND_MESSAGE', [temp]) commit('SEND_MESSAGE', [temp])
}, },
getTranster({ commit, state }, prams){ getTranster({ commit, state }, prams){
......
import Cookies from 'js-cookie' import Cookies from 'js-cookie'
const storage = window.localStorage;
const TokenKey = 'token' const TokenKey = 'token'
const UserInfo = 'userInfo'
const TokenChenzhenKey = 'tokenChenzhen' const TokenChenzhenKey = 'tokenChenzhen'
const userIdKey = 'userId' const userIdKey = 'userId'
const commercialIdKey = 'commercialId' const commercialIdKey = 'commercialId'
storage.setItem("c",3);
const setStorage = (key,value)=>{
storage.setItem(key,JSON.stringify(value));
}
const getStorage = (key)=>{
return JSON.parse(storage.getItem(key));
}
export function getToken() { export function getToken() {
return Cookies.get(TokenKey) return storage.getItem(TokenKey)
}
export function getUserInfo() {
return getStorage(UserInfo);
// return Cookies.get(UserInfo)&&JSON.parse(Cookies.get(UserInfo))
}
export function setUserInfo(userInfo) {
return setStorage(UserInfo,userInfo);
// return Cookies.set(UserInfo, userInfo)
} }
export function setToken(token) { export function setToken(token) {
return Cookies.set(TokenKey, token) return storage.setItem(TokenKey, token)
} }
export function getTokenChenzhen() { export function getTokenChenzhen() {
......
import axios from 'axios'
import { Message, MessageBox } from 'element-ui'
import store from '../store'
import { getTokenChenzhen } from '@/utils/auth'
// 创建axios实例
const service = axios.create({
// baseURL: process.env.BASE_API, // api 的 base_url
timeout: 5000 // 请求超时时间
})
// request拦截器
service.interceptors.request.use(
config => {
config.headers['Content-Type'] = 'application/json;charset=UTF-8'
// if (store.getters.token) {
config.headers['Authorization'] = getTokenChenzhen() // 让每个请求携带自定义token 请根据实际情况自行修改
// }
return config
},
error => {
// Do something with request error
Promise.reject(error)
}
)
// response 拦截器
service.interceptors.response.use(
response => {
/**
* code为非20000是抛错 可结合自己业务进行修改
*/
// const res = response.data
if(response.data.code != 200){
console.log(43434343434)
// Message.error(response.data.message);
// if(response.data.code == 401){
// // store.
// }
}
return response.data
// if (res.code !== 20000) {
// Message({
// message: res.message,
// type: 'error',
// duration: 5 * 1000
// })
// // 50008:非法的token; 50012:其他客户端登录了; 50014:Token 过期了;
// if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
// MessageBox.confirm(
// '你已被登出,可以取消继续留在该页面,或者重新登录',
// '确定登出',
// {
// confirmButtonText: '重新登录',
// cancelButtonText: '取消',
// type: 'warning'
// }
// ).then(() => {
// store.dispatch('FedLogOut').then(() => {
// location.reload() // 为了重新实例化vue-router对象 避免bug
// })
// })
// }
// return Promise.reject('error')
// } else {
// return response.data
// }
},
error => {
console.log('err' + error) // for debug
Message({
message: error.message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
export default service
\ No newline at end of file
export const panelStatus = { export const panelStatus = {
SEARCH:'SEARCH',//SEARCH搜索列表 SEARCH:'SEARCH',//SEARCH搜索列表
CHART:'CHART'//CHART回话列表 CHART:'CHART'//CHART回话列表
} }
\ No newline at end of file export const mainPanel = {
CHENZHEN:'CHENGZHEN',
BAOZHENG:'BAOZHENG',
}
\ No newline at end of file
...@@ -4,4 +4,12 @@ export const compare =(po)=>{ ...@@ -4,4 +4,12 @@ export const compare =(po)=>{
let temp2 = b[po]; let temp2 = b[po];
return temp1-temp2 return temp1-temp2
} }
}
export const singel = (arr)=>{
let obj = {};
arr = arr.reduce(function(item, next) {
obj[next.id] ? '' : obj[next.id] = true && item.push(next);
return item;
}, []);
return arr
} }
\ No newline at end of file
static/icon-img/folder-open.png

3.43 KB | W: | H:

static/icon-img/folder-open.png

9.34 KB | W: | H:

static/icon-img/folder-open.png
static/icon-img/folder-open.png
static/icon-img/folder-open.png
static/icon-img/folder-open.png
  • 2-up
  • Swipe
  • Onion skin
static/icon-img/link.png

5.19 KB | W: | H:

static/icon-img/link.png

12.1 KB | W: | H:

static/icon-img/link.png
static/icon-img/link.png
static/icon-img/link.png
static/icon-img/link.png
  • 2-up
  • Swipe
  • Onion skin
static/icon-img/poweroff.png

5.89 KB | W: | H:

static/icon-img/poweroff.png

11.6 KB | W: | H:

static/icon-img/poweroff.png
static/icon-img/poweroff.png
static/icon-img/poweroff.png
static/icon-img/poweroff.png
  • 2-up
  • Swipe
  • Onion skin
static/icon-img/retweet.png

2.61 KB | W: | H:

static/icon-img/retweet.png

11.9 KB | W: | H:

static/icon-img/retweet.png
static/icon-img/retweet.png
static/icon-img/retweet.png
static/icon-img/retweet.png
  • 2-up
  • Swipe
  • Onion skin
static/icon-img/tag.png

4.05 KB | W: | H:

static/icon-img/tag.png

6.22 KB | W: | H:

static/icon-img/tag.png
static/icon-img/tag.png
static/icon-img/tag.png
static/icon-img/tag.png
  • 2-up
  • Swipe
  • Onion skin
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