Commit 9626702f authored by looker's avatar looker

add page

parent e7366c54
No preview for this file type
......@@ -2,14 +2,24 @@
<template>
<div class="msglist">
<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)">
<div class="list-left">
<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 class="list-right">
<p class="name">{{item.user.name | name}}</p>
<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>
</li>
</ul>
......@@ -32,7 +42,7 @@ export default {
])
},
methods: {
...mapActions([
...mapActions('user',[
'selectSession',
])
},
......@@ -55,12 +65,41 @@ export default {
},
name(name){
return name.length>8?name.substring(0,8)+'...':name;
},
content(messages){
return messages[messages.length-1]?messages[messages.length-1].content:''
}
},
}
</script>
<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
height: 740px
overflow-y: auto
......
......@@ -3,7 +3,7 @@
<div>
<div class="message">
<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>
<div class="message-wrapper" ref="list">
<ul v-if="selectedChat">
......@@ -81,8 +81,6 @@ export default {
temp.moreMessage()
}
}
// console.log(this.$refs)
// setTimeout(() => this.$refs.list.scrollTop = this.$refs.list.scrollHeight, 0)
},
watch: {
selectId() {
......@@ -124,7 +122,7 @@ export default {
}
},
methods: {
...mapActions([
...mapActions('user',[
'moreMessage',
]),
// 在发送信息之后,将输入的内容中属于表情的部分替换成emoji图片标签
......
......@@ -34,7 +34,7 @@ export default {
},
methods: {
clearSearch() {
this.$store.dispatch('search', '')
this.$store.dispatch('user/search', '')
},
logout(){
this.$confirm('确定要此操作吗?', '提示', {
......@@ -99,7 +99,7 @@ export default {
}
.tool-panel
position:relative;
bottom:-480px;
bottom:-600px;
height:80px;
width:120px;
right:-60px;
......
......@@ -18,9 +18,9 @@ export default {
if(text.replace(/^\s\s*/, '').replace(/\s\s*$/, '')==''){
console.log(66666666666666666)
this.$store.dispatch('changeChartPanel')
this.$store.dispatch('user/changeChartPanel')
}else{
this.$store.dispatch('searchSession', this.search)
this.$store.dispatch('user/searchSession', this.search)
}
},
del () {
......
......@@ -2,11 +2,13 @@
<template>
<div class="text">
<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;">
<el-upload
class="upload-demo"
action="/api/o/upload/image"
:action="upLoadImgUrl"
:on-preview="handlePreview"
:on-remove="handleRemove"
:on-success="fileEd"
......@@ -23,7 +25,7 @@
<transition name="showbox">
<div class="emojiBox" v-show="showEmoji">
<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>
</div>
</transition>
......@@ -67,6 +69,7 @@
<script>
import { mapGetters, mapState, mapActions } from 'vuex'
import apiUrl from '@/service/api.js'
export default {
data () {
return {
......@@ -74,7 +77,7 @@ export default {
reply: '未找到',
frequency: 0,
sendType:1,
upLoadImgUrl:process.env.IMG_ADDRESS,
upLoadImgUrl:apiUrl.upLoadImg,
imageUrl:'',
warn: false,
showEmoji: false,
......@@ -93,7 +96,19 @@ export default {
])
},
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',
'toTranster',
'closeTake'
......@@ -188,12 +203,21 @@ export default {
},
onKeyup (e) {
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()
}
}
},
send () {
if(this.sendType!=3){
if(this.content.length < 1){
if(this.content.replace(/\s+/g,"")==''){
this.warn = true
this.content = ''
setTimeout(() => {
......@@ -206,7 +230,7 @@ export default {
content: this.content,
imageUrl:this.imageUrl
}
this.$store.dispatch('sendMessage', msg)
this.$store.dispatch('user/sendMessage', msg)
this.content = ''
}
}else{
......@@ -216,7 +240,7 @@ export default {
content: this.content,
imageUrl:this.imageUrl
}
this.$store.dispatch('sendMessage', msg)
this.$store.dispatch('user/sendMessage', msg)
this.content = ''
this.sendType =1
}
......@@ -257,7 +281,7 @@ export default {
height: 40px
line-height: 40px
font-size: 12px
padding: 0 30px
padding: 0 10px
box-sizing: border-box
color: #7c7c7c
.icon-img
......
......@@ -44,7 +44,7 @@ export default {
passwd:this.password
}
this.isLoging = true;
this.$store.dispatch('login',loginParam).then((red)=>{
this.$store.dispatch('user/login',loginParam).then((red)=>{
this.isLoging = false;
this.$message({
message: '登录成功!',
......
<template>
<div id="app">
<div id="app-main">
<div class="sidebar">
<mycard></mycard>
</div>
......@@ -22,15 +22,16 @@ export default {
toolbar
},
created () {
this.$store.dispatch('connect')
this.$store.dispatch('user/connect')
}
}
</script>
<style lang="stylus" scoped>
#app
#app-main
display: flex
margin: auto
margin-top:30px
width: 1260px
background-color: #fff
.sidebar
......
......@@ -11,6 +11,7 @@
</template>
<script>
import { mapGetters, mapState, mapActions } from 'vuex'
export default{
data(){
return {
......@@ -19,6 +20,11 @@ export default{
},
components: {
},
methods: {
...mapActions('user',[
'selectSession',
])
},
methods: {
handleClick(){
console.log(43434)
......
......@@ -25,6 +25,7 @@
</template>
<script>
import { mapState, mapActions ,mapGetters } from 'vuex'
export default{
data(){
return {
......@@ -35,150 +36,56 @@ export default{
numItem:[
{
label:'今日接入量',
value:54
value:'加载中。。。'
},
{
label:'今日预约量',
value:54
value:'加载中。。。'
},
{
label:'今日开单量',
value:54
label:'今天预约单量',
id:'todayBookings',
value:'加载中。。。'
},
{
label:'本月开单量',
value:54
label:'本月预约单量',
id:'monthBookings',
value:'加载中。。。'
},
{
label:'6日内预约单未转正',
value:54
id:'sixDayBookingsUnOpen',
value:'加载中。。。'
},
{
label:'6日外预约单未转正',
value:54
label:'6日前预约单未转正',
id:'beforeSixDayBookingsUnOpen',
value:'加载中。。。'
}
]
},
{
title:'客机统计',
dataPanel:[
title:'个人待办事项',
numItem:[
{
label:'诊断方案未发送',
id:'diagnosisUnSend',
value:'加载中。。。'
},
{
title:'客机:robot1',
dataItem:[
[
{
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
},
]
]
label:'诊断方案未确认',
id:'diagnosisUnConfirm',
value:'加载中。。。'
},
{
title:'客机:robot2',
dataItem:[
[
{
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
},
]
]
label:'效果方案未发送',
id:'effectsUnSend',
value:'加载中。。。'
},
{
label:'效果方案未确认',
id:'effectsUnConfirm',
value:'加载中。。。'
}
]
},
......@@ -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: {
},
methods: {
...mapActions('chenzhen',[
'getPersonStatistics',
'personTodo',
]),
handleClick(){
console.log(43434)
}
......
......@@ -32,6 +32,7 @@
</template>
<script>
import { mapGetters, mapState, mapActions } from 'vuex'
import cussService from './cus-service'
import cusUsers from './cus-users'
import takelScript from './takel-script'
......@@ -54,7 +55,16 @@ export default{
comprePicture,
labelUserList
},
computed: {
},
mounted() {
this.setCustomerInfo()
},
methods: {
...mapActions('chenzhen',[
'setCustomerInfo',
]),
handleClick(){
console.log(43434)
}
......
<template>
<div class="tabs-body">
<el-input v-model="input" placeholder="请输入内容">
</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>
<el-row :gutter="20">
<el-col :span="16">
<div class="grid-content bg-purple">
<el-input v-model="input" placeholder="请输入内容">
</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 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>
......@@ -23,6 +44,7 @@
</template>
<script>
import { mapState, mapActions ,mapGetters } from 'vuex'
export default{
data(){
return {
......@@ -36,7 +58,15 @@ export default{
},
components: {
},
mounted() {
this.speechSort({company:10}).then((data)=>{
console.log(data)
})
},
methods: {
...mapActions('chenzhen',[
'speechSort',
]),
handleClick(){
console.log(43434)
}
......@@ -53,6 +83,19 @@ export default{
.box-card{
margin-top:20px;
}
.panelk{
margin:20px;
h1{
text-align:center;
margin:20px;
}
.el-button{
width:100%;
}
.el-tag{
margin:2px;
}
}
.tabs-body
height:800px;
width:100%;
......
<template>
<div class="tabs-body">
<div style="margin:50px;" v-if="false">
<el-form :model="ruleForm2" status-icon :rules="rules2" ref="ruleForm2" class="demo-ruleForm">
<div style="margin:50px;" v-if="!chenzhen.isLogin">
<el-form :model="ruleForm2" status-icon ref="ruleForm2" class="demo-ruleForm">
<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 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-button type="primary" @click="submitForm('ruleForm2')">登录</el-button>
<el-button type="primary" @click="submitForm()">登录</el-button>
</el-form-item>
</el-form>
</div>
<baozheng v-if="false"/>
<chenzheng v-if="true"/>
<baozheng v-if="chenzhen.isLogin&&user.userInfo.type==3"/>
<chenzheng v-if="chenzhen.isLogin&&user.userInfo.type==1"/>
</div>
</template>
<script>
import { mapGetters, mapState, mapActions } from 'vuex'
import baozheng from './baozheng'
import chenzheng from './chenzheng'
import { mainPanel } from '@/utils/common'
export default{
data(){
return {
activeName:'second',
ruleForm2:{}
ruleForm2:{
account:'18310825053',
passwd:'123456'
}
}
},
components: {
baozheng,
chenzheng,
},
computed: {
...mapState([
'chenzhen',
'user',
])
},
mounted() {
this.init()
// if(this.chenzhen.isLogin&&this.user.userInfo.type==1){
// this.init()
// }
},
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(){
console.log()
console.log(43434)
}
}
......
......@@ -4,5 +4,15 @@ url.wsUrl = "http://imdev.chenzhen.shop:9093/"
url.getTransferList = `${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.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
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 request from '@/utils/request'
import chart from './chart'
import chenzhen from './chenzhen'
const login = (param)=>{
return request({
url: apiUrl.login,
......@@ -10,5 +11,6 @@ const login = (param)=>{
}
export {
login,
chart
chart,
chenzhen
}
\ No newline at end of file
......@@ -24,6 +24,9 @@ const getters = {
let session = state.user.chartings.find(session => session.id === state.user.selectId);
return session&&session.messages
},
userInfo(state){
return state.user.userInfo
},
isSelectMore(state){
return state.user.isSelectMore
}
......
import Vue from 'vue'
import Vuex from 'vuex'
import user from './modules/user'
import chenzhen from './modules/chenzhen'
import getters from './getters'
Vue.use(Vuex)
......@@ -8,6 +9,7 @@ Vue.use(Vuex)
const store = new Vuex.Store({
modules: {
user,
chenzhen
},
getters
})
......
import * as service from '@/service'
import apiUrl from '@/service/api.js'
import router from '@/router'
import { compare } from '@/utils/tools'
import * as auth from '@/utils/auth'
import { MessageBox, Alert } from 'element-ui'
import { panelStatus } from '@/utils/common'
import Vue from 'vue'
let isSend = false;
const now = new Date();
const user = {
state: {
name: 'ratel',
userInfo:{},
wsObject:null,
img: 'static/images/UserAvatar.jpg',
whichPane:panelStatus.CHART,
messagesPage:1,
messagesPer:30,
chatlist: [],
chartings:[],
searchChatlist:[],
tempSearchChatlist:[],
tempChatlist:[],
emojis,
isSelectMore:false,
selectId: 1,
selectFriendId: 0
},
mutations: {
USER_LOGIN(state, value){
setToken(value.token)
setUserId(value.customerId)
state.userInfo = value
},
CHANGE_CONVERSATIONPANEL(state, value){
if(panelStatus.CHART==value){
state.chartings = state.chatlist
state.whichPane = panelStatus.CHART
}else{
state.chartings = []
state.whichPane = panelStatus.SEARCH
state.whichPane = value
}
},
SET_CHARTING_LIST(state,value){
state.chatlist = value.reverse(compare('queryData'))
state.chartings =value.reverse(compare('queryData'))
},
CHANGE_ISSELECTMORE(state,value){
state.isSelectMore = value
},
SET_WXOBJECT(state, value){
state.wsObject = value
},
SELECT_SEESION (state, value) {
state.selectId = value.id
},
SET_SEARCHCHART_LIST(state, value){
state.tempSearchChatlist = value
let tempList = []
for(let i in value){
let temp = [{
content: value[i].content||'',
date: value[i].lastUpdateTime
}]
tempList.push({
id: value[i].id,
user: {
name: value[i].userBo.nickname,
img: value[i].userBo.avatar,
id:value[i].userBo.userId
},
page: 1,
rows: 30,
messages: temp,
queryData:value[i].lastUpdateTime,
index: i
})
}
state.searchChatlist = tempList.sort(compare('queryData'))
state.chartings = tempList.sort(compare('queryData'))
},
SET_CHART_LIST(state, value){
state.tempChatlist = value
let tempList = []
for(let i in value){
let temp = [{
content: value[i].content||'',
date: value[i].lastUpdateTime
}]
tempList.push({
id: value[i].id,
user: {
name: value[i].userBo.nickname,
img: value[i].userBo.avatar,
id:value[i].userBo.userId
},
page: 1,
rows: 30,
messages: temp,
queryData:value[i].lastUpdateTime,
index: i
})
}
state.chatlist = tempList.reverse(compare('queryData'))
state.chartings =tempList.reverse(compare('queryData'))
},
ADD_MESSAGE(state, value){
let { chatlist, selectId } = state
for(let c in chatlist){
if(chatlist[c].id==selectId){
let temp = value == null?[]:value.sort(compare('createTime'))
chatlist[c].messages = [...temp, ...chatlist[c].messages]
}
}
},
SEND_MESSAGE(state, value){
let { chatlist, selectId } = state
for(let c in chatlist){
if(chatlist[c].id==selectId){
let temp = value == null?[]:value.sort(compare('createTime'))
chatlist[c].messages = [...chatlist[c].messages, ...temp]
}
}
}
},
actions: {
login:({ commit }, value)=>{
return new Promise((resolve, reject) => {
service.login(value).then(response=>{
if(response.code==200){
commit('USER_LOGIN', response.data)
resolve(response.data)
}else{
reject(response)
}
}).catch(error => {
reject(error)
})
})
},
init ({ commit, state }) {
state.wsObject.emit('appevent', {
eventType: 'conversations/index'
})
},
connect({ dispatch, commit, state }) {
const wsClient = io(apiUrl.wsUrl, { autoConnect: false, transports: ['websocket'] })
commit('SET_WXOBJECT', wsClient)
if (wsClient.disconnected) {
// commit('init', account)
wsClient.io.opts.query = {
token: getToken(),
version: 2.0
}
wsClient.on('connect', () => {
// Common.wsClient = wsClient
console.log("connect")
// commit('login')
dispatch('connected')
// storage.set('account', state)
}).on('connect_error', () => {
console.log("connect_error")
}).on('disconnect', () => {
MessageBox('连接被迫断开,重新登录!', '提示', {
confirmButtonText: '确定',
type: 'warning'
}).then(() => {
window.location.href="/"
}).catch(() => {
console.log(2)
});
}).on('reconnect_attempt', () => {
// if (Common.wsClient) Common.wsClient.io.opts.transports = ['polling', 'websocket'];
})
wsClient.open()
}
dispatch("init")
},
connected({ state, commit }) {
state.wsObject
.on('messages/message', (data, callback) => {
if(isSend){
isSend = false
}else{
commit('SEND_MESSAGE', [data])
callback()
}
})
.on('conversations/index', (data, callback) => {
commit('SET_CHART_LIST', data)
})
.on('conversations/friend', (data, callback) => {
console.log(data)
})
.on('messages/index', (data, callback) => {
if(isSend){
isSend = false
}else{
commit('CHANGE_ISSELECTMORE',false)
callback(true)
data&&commit('ADD_MESSAGE', data)
!data&&state.messagesPage--
}
})
.on('conversations/show', (data, callback) => {
let customerId = getUserId()
let { tempChatlist } = state
if(data!=null&&data.userBo.primaryBindCustomerId!= customerId){
let temp = null
let isNew = true
const { chartings } = state
for(let i in state.chatlist){
if(state.chatlist[i].id == data.id){
temp = Object.assign(state.chatlist[i])
isNew = false
state.chatlist.splice(i, 1);
}
}
if(isNew){
let list = [data].concat(tempChatlist)
commit('SET_CHART_LIST', list)
}else{
let list = [temp].concat(state.chatlist)
commit('SET_CHARTING_LIST', list)
}
}
})
.on('conversions/search', (data, callback) => {
callback()
commit('SET_SEARCHCHART_LIST', data)
})
},
selectSession({ dispatch, commit, state }, conversation) {
if(state.selectId==conversation.id)return
let parm = {}
if(state.whichPane == panelStatus.SEARCH){
let temp = true
for(let i in state.chatlist){
if(state.chatlist[i].id == conversation.id){
state.chatlist.splice(i, 1);
temp = false
}
}
conversation.lastUpdateTime = Date.parse( new Date())
state.chatlist = [conversation].concat(state.chatlist)
commit('CHANGE_CONVERSATIONPANEL', panelStatus.CHART)
parm = {
conversationId:conversation.id,
page: 1,
rows: 30
}
dispatch('selectMessage', parm)
}
if(state.whichPane == panelStatus.CHART){
for(let obj of state.chatlist){
if(obj.id == conversation.id){
parm = {
conversationId:conversation.id,
page: obj.page,
rows: obj.rows
}
if(obj.messages.length<2){
obj.messages = []
dispatch('selectMessage', parm)
}
}
}
}
commit('SELECT_SEESION', conversation)
},
selectMessage({ commit, state }, message){
commit('CHANGE_ISSELECTMORE',true)
state.wsObject.emit('appevent', {
eventType: 'messages/index',
message
})
},
moreMessage({ dispatch, commit, state }, message){
let id = state.selectId
let parms = {}
for(let i in state.chatlist){
if(state.chatlist[i].id == id){
parms = {
conversationId:id,
page: ++state.chatlist[i].page,
rows: state.chatlist[i].rows
}
}
}
dispatch('selectMessage', parms)
},
changeChartPanel({ commit, state }){
commit('CHANGE_CONVERSATIONPANEL', panelStatus.CHART)
},
searchSession({ commit, state }, keyword) {
commit('CHANGE_CONVERSATIONPANEL', panelStatus.SEARCH)
state.wsObject.emit('appevent', {
eventType: 'conversions/search',
message: { keyword }
})
},
sendMessage({ commit, state }, conversation){
state.wsObject.emit('appevent', {
eventType: 'messages/create',
message: {
conversationId: conversation.id,
type: conversation.type,
content: conversation.content,
imageUrl: conversation.imageUrl
},
},(data) => {
console.log(data);
console.log('这个socket发送成功了!');
})
let temp = {
conversationId:conversation.id,
type: conversation.type,
isSend:1,
imageUrl: conversation.imageUrl,
content: conversation.content,
createTime: Date.parse(new Date())
}
isSend=true
commit('SEND_MESSAGE', [temp])
},
getTranster({ commit, state }, prams){
let customerId = getUserId()
let { chartings, selectId } = state
let customerdeId =null
for(let tob of chartings){
if(tob.id==selectId){
customerdeId = tob.user.id
}
}
return new Promise((resolve, reject) => {
service.chart.getTransfer({
userId:customerdeId,
customerId
}).then(response=>{
if(response.code==200){
resolve(response.data)
}else{
reject(response)
}
}).catch(error => {
reject(error)
})
})
},
toTranster({ commit, state }, prams){
let customerId = getUserId()
let { chartings, chatlist, selectId } = state
let tempUserId =null
for(let tob of chartings){
if(tob.id==selectId){
tempUserId = tob.user.id
}
}
prams.userId = tempUserId
prams.fromCustomerId = customerId
return new Promise((resolve, reject) => {
service.chart.toTrensfer(prams).then(response=>{
if(response.code==200){
resolve(response.data)
for(let i in chatlist){
if(chatlist[i].id == selectId){
chatlist.splice(i, 1);
}
}
commit('SET_CHARTING_LIST', chatlist)
}else{
reject(response)
}
}).catch(error => {
reject(error)
})
})
},
closeTake({ commit, state }, prams){
let customerId = getUserId()
let { chartings, chatlist, selectId } = state
let customerdeId =null
for(let tob of chartings){
if(tob.id==selectId){
customerdeId = tob.user.id
}
}
return new Promise((resolve, reject) => {
service.chart.closeSession({
userId:customerdeId,
customerId
}).then(response=>{
if(response.code==200){
resolve(response.data)
for(let i in chatlist){
if(chatlist[i].id == selectId){
chatlist.splice(i, 1);
}
}
commit('SET_CHARTING_LIST', chatlist)
}else{
reject(response)
}
}).catch(error => {
reject(error)
})
})
}
}
}
export default user
\ No newline at end of file
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'
// import io from 'socket.io-client';
import apiUrl from '@/service/api.js'
import router from '@/router'
import { compare } from '@/utils/tools'
import { setToken, getToken, setUserId, getUserId, emojis } from '@/utils/auth'
import { compare, singel } from '@/utils/tools'
import {
setToken, getToken, setUserId,
getUserId, emojis, setUserInfo,
getUserInfo
} from '@/utils/auth'
import { MessageBox, Alert } from 'element-ui'
import { panelStatus } from '@/utils/common'
import Vue from 'vue'
let isSend = false;
const now = new Date();
const user = {
namespaced: true,
state: {
name: 'ratel',
userInfo:{},
......@@ -31,10 +36,14 @@ const user = {
mutations: {
USER_LOGIN(state, value){
setUserInfo(value)
setToken(value.token)
setUserId(value.customerId)
state.userInfo = value
},
SET_USERINFO(state, value){
state.userInfo = value
},
CHANGE_CONVERSATIONPANEL(state, value){
if(panelStatus.CHART==value){
state.chartings = state.chatlist
......@@ -46,8 +55,8 @@ const user = {
}
},
SET_CHARTING_LIST(state,value){
state.chatlist = value.reverse(compare('queryData'))
state.chartings =value.reverse(compare('queryData'))
state.chatlist = singel(value.reverse(compare('queryData')))
state.chartings = singel(value.reverse(compare('queryData')))
},
CHANGE_ISSELECTMORE(state,value){
state.isSelectMore = value
......@@ -69,10 +78,13 @@ const user = {
tempList.push({
id: value[i].id,
user: {
name: value[i].userBo.nickname,
name:value[i].userBo&&value[i].userBo.nickname,
img: value[i].userBo.avatar,
conRemark:value[i].userBo.conRemark,
remark:value[i].devicesBo&&value[i].devicesBo.remark,
id:value[i].userBo.userId
},
unReadTotal:value[i].unReadTotal,
page: 1,
rows: 30,
messages: temp,
......@@ -80,8 +92,8 @@ const user = {
index: i
})
}
state.searchChatlist = tempList.sort(compare('queryData'))
state.chartings = tempList.sort(compare('queryData'))
state.searchChatlist = singel(tempList.sort(compare('queryData')))
state.chartings = singel(tempList.sort(compare('queryData')))
},
SET_CHART_LIST(state, value){
state.tempChatlist = value
......@@ -94,10 +106,13 @@ const user = {
tempList.push({
id: value[i].id,
user: {
name: value[i].userBo.nickname,
name:value[i].userBo.nickname,
img: value[i].userBo.avatar,
conRemark:value[i].userBo.conRemark,
remark:value[i].devicesBo&&value[i].devicesBo.remark,
id:value[i].userBo.userId
},
unReadTotal:value[i].unReadTotal,
page: 1,
rows: 30,
messages: temp,
......@@ -105,22 +120,26 @@ const user = {
index: i
})
}
state.chatlist = tempList.reverse(compare('queryData'))
state.chartings =tempList.reverse(compare('queryData'))
state.chatlist = singel(tempList.reverse(compare('queryData')))
state.chartings = singel(tempList.reverse(compare('queryData')))
},
ADD_MESSAGE(state, value){
let { chatlist, selectId } = state
for(let c in chatlist){
if(chatlist[c].id==selectId){
let temp = value == null?[]:value.sort(compare('createTime'))
chatlist[c].messages = [...temp, ...chatlist[c].messages]
let temp = [...value, ...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){
let { chatlist, selectId } = state
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'))
chatlist[c].messages = [...chatlist[c].messages, ...temp]
}
......@@ -133,7 +152,7 @@ const user = {
return new Promise((resolve, reject) => {
service.login(value).then(response=>{
if(response.code==200){
commit('USER_LOGIN', response.data)
commit('user/USER_LOGIN', response.data, { root: true })
resolve(response.data)
}else{
reject(response)
......@@ -143,12 +162,17 @@ const user = {
})
})
},
initData({ commit, state }){
let userInfo = getUserInfo()
commit('user/SET_USERINFO', userInfo, { root: true })
},
init ({ commit, state }) {
state.wsObject.emit('appevent', {
eventType: 'conversations/index'
})
},
connect({ dispatch, commit, state }) {
dispatch('initData')
const wsClient = io(apiUrl.wsUrl, { autoConnect: false, transports: ['websocket'] })
commit('SET_WXOBJECT', wsClient)
if (wsClient.disconnected) {
......@@ -184,33 +208,36 @@ const user = {
connected({ state, commit }) {
state.wsObject
.on('messages/message', (data, callback) => {
if(isSend){
isSend = false
callback(true)
if(data.isSend==1){
}else{
commit('SEND_MESSAGE', [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) => {
console.log(data)
})
.on('messages/index', (data, callback) => {
callback(true)
if(isSend){
isSend = false
}else{
commit('CHANGE_ISSELECTMORE',false)
callback(true)
data&&commit('ADD_MESSAGE', data)
!data&&state.messagesPage--
}
})
.on('conversations/show', (data, callback) => {
callback(true)
let customerId = getUserId()
let { tempChatlist } = state
if(data!=null&&data.userBo.primaryBindCustomerId!= customerId){
if(data!=null&&data.userBo.primaryBindCustomerId== customerId){
let temp = null
let isNew = true
const { chartings } = state
......@@ -231,12 +258,12 @@ const user = {
}
})
.on('conversions/search', (data, callback) => {
callback()
callback(true)
commit('SET_SEARCHCHART_LIST', data)
})
},
selectSession({ dispatch, commit, state }, conversation) {
if(state.selectId==conversation.id)return
if(state.selectId==conversation.id)return
let parm = {}
if(state.whichPane == panelStatus.SEARCH){
let temp = true
......@@ -247,6 +274,7 @@ const user = {
}
}
conversation.lastUpdateTime = Date.parse( new Date())
conversation.unReadTotal = 0
state.chatlist = [conversation].concat(state.chatlist)
commit('CHANGE_CONVERSATIONPANEL', panelStatus.CHART)
parm = {
......@@ -259,18 +287,20 @@ const user = {
if(state.whichPane == panelStatus.CHART){
for(let obj of state.chatlist){
if(obj.id == conversation.id){
obj.unReadTotal = 0
obj.page = 1
obj.rows = 30
parm = {
conversationId:conversation.id,
page: obj.page,
rows: obj.rows
}
if(obj.messages.length<2){
obj.messages = []
dispatch('selectMessage', parm)
}
obj.messages = []
dispatch('selectMessage', parm)
}
}
}
// dispatch('chenzhen/setCustomerInfo', null, { root: true })
commit('SELECT_SEESION', conversation)
},
selectMessage({ commit, state }, message){
......@@ -325,7 +355,7 @@ const user = {
content: conversation.content,
createTime: Date.parse(new Date())
}
isSend=true
commit('SEND_MESSAGE', [temp])
},
getTranster({ commit, state }, prams){
......
import Cookies from 'js-cookie'
const storage = window.localStorage;
const TokenKey = 'token'
const UserInfo = 'userInfo'
const TokenChenzhenKey = 'tokenChenzhen'
const userIdKey = 'userId'
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() {
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) {
return Cookies.set(TokenKey, token)
return storage.setItem(TokenKey, token)
}
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 = {
SEARCH:'SEARCH',//SEARCH搜索列表
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)=>{
let temp2 = b[po];
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