Commit 82649518 authored by looker's avatar looker

add tag

parent 3faa4225
......@@ -2,5 +2,7 @@ var merge = require('webpack-merge')
var prodEnv = require('./prod.env')
module.exports = merge(prodEnv, {
NODE_ENV: '"development"'
NODE_ENV: '"development"',
WX_ADDRESS: '"http://imdev.chenzhen.shop:9093/"',
IMG_ADDRESS:'"http://chat-x.oss-cn-beijing.aliyuncs.com/"'
})
......@@ -23,7 +23,7 @@ module.exports = {
},
dev: {
env: require('./dev.env'),
port: 8080,
port: 8078,
autoOpenBrowser: true,
assetsSubDirectory: 'static',
assetsPublicPath: '/',
......@@ -34,7 +34,8 @@ module.exports = {
// }
'/api': {
pathRewrite: { '^/api': '' },
target: 'http://imweb.chenzhen.shop',
// target: 'http://imweb.chenzhen.shop',
target: 'http://imdev.chenzhen.shop/',
changeOrigin: true, //是否跨域
}
},
......
module.exports = {
NODE_ENV: '"production"'
NODE_ENV: '"production"',
WX_ADDRESS: "http://imweb.chenzhen.shop:9093",
IMG_ADDRESS:'"http://chat-x.oss-cn-beijing.aliyuncs.com/"'
}
......@@ -5635,6 +5635,12 @@
"minimist": "0.0.8"
}
},
"moment": {
"version": "2.24.0",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
"integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==",
"dev": true
},
"move-concurrently": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
......
<!-- 聊天列表 -->
<template>
<div class="msglist">
<ul>
<li v-for="item in searchedChatlist" class="sessionlist" :class="{ active: item.id === selectId }" @click="selectSession(item.id)">
<ul v-if="user.whichPane==panelStatus.CHART">
<li v-for="item in chatlist" 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">
</div>
<div class="list-right">
<p class="name">{{item.user.name}}</p>
<span class="time">{{item.messages[item.messages.length-1].date | time}}</span>
<p class="lastmsg">{{item.messages[item.messages.length-1].content}}</p>
<span class="time">{{item.queryData | time}}</span>
<p class="lastmsg">{{item.messages[item.messages.length-1]?'':item.messages[item.messages.length-1].content}}</p>
</div>
</li>
</ul>
<ul v-if="user.whichPane==panelStatus.SEARCH">
<li v-for="item in searchChatlist" 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">
</div>
<div class="list-right">
<p class="name">{{item.user.name}}</p>
<span class="time">{{item.queryData | time}}</span>
<p class="lastmsg">{{item.messages[item.messages.length-1]?'':item.messages[item.messages.length-1].content}}</p>
</div>
</li>
</ul>
......@@ -18,14 +30,18 @@
<script>
import { mapState, mapActions ,mapGetters } from 'vuex'
import { panelStatus } from '@/utils/common'
export default {
computed: {
panelStatus(){
return panelStatus
},
...mapState([
'selectId',
'searchText'
'user',
]),
...mapGetters([
'searchedChatlist'
'searchChatlist',
'chatlist'
])
},
methods: {
......@@ -33,17 +49,22 @@ export default {
'selectSession',
])
},
mounted() {
let obj = this.searchedChatlist[0]
this.selectSession(obj)
},
filters: {
// 将日期过滤为 hour:minutes
time (date) {
if (typeof date === 'string') {
date = new Date(date);
}
if(date){
date = new Date(parseInt(date) * 1000);
if(date.getMinutes()<10){
return date.getHours() + ':0' +date.getMinutes();
}else{
return date.getHours() + ':' + date.getMinutes();
}
}else{
return ""
}
}
},
}
......
<!-- 消息框 -->
<template>
<div class="message">
<div>
<div class="message" v-if="user.whichPane==panelStatus.CHART">
<header class="header">
<div class="friendname">{{selectedChat.user.name}}</div>
<div class="friendname">{{selectedChat&&selectedChat.user.name}}</div>
</header>
<div class="message-wrapper" ref="list">
<ul v-if="selectedChat">
<li v-for="item in selectedChat.messages" class="message-item">
<div class="time"><span>{{item.date | time}}</span></div>
<div class="main" :class="{ self: item.self }">
<img class="avatar" width="36" height="36" :src="item.self ? user.img : selectedChat.user.img" />
<li v-for="item in messages" class="message-item">
<div v-if="item.type==1" class="main" :class="{ self: item.isSend }">
<img class="avatar" width="36" height="36" :src="item.isSend ? user.img : selectedChat.user.img" />
<div class="time"><span>{{item.createTime | time}}</span></div>
<div class="content">
<div class="text" v-html="replaceFace(item.content)"></div>
</div>
</div>
<div v-if="item.type==3" class="main" :class="{ self: item.isSend }">
<img class="avatar" width="36" height="36" :src="item.isSend ? user.img : selectedChat.user.img" />
<div class="time"><span>{{item.createTime | time}}</span></div>
<div class="content">
<div class="img"><img style="width:300px;
height:300px;" :src="imgUrl+item.imageUrl" alt=""></div>
</div>
</div>
</li>
</ul>
</div>
</div>
<div class="message" v-if="user.whichPane==panelStatus.SEARCH">
<header class="header">
<div class="friendname">{{selectedSearchChat&&selectedSearchChat.user.name}}</div>
</header>
<div class="message-wrapper" ref="list">
<ul v-if="selectedSearchChat">
<li v-for="item in messages" class="message-item">
<div v-if="item.type==1" class="main" :class="{ self: item.isSend }">
<img class="avatar" width="36" height="36" :src="item.isSend ? user.img : selectedSearchChat.user.img" />
<div class="time"><span>{{item.createTime | time}}</span></div>
<div class="content">
<div class="text" v-html="replaceFace(item.content)"></div>
</div>
</div>
<div v-if="item.type==3" class="main" :class="{ self: item.isSend }">
<img class="avatar" width="36" height="36" :src="item.isSend ? user.img : selectedSearchChat.user.img" />
<div class="time"><span>{{item.createTime | time}}</span></div>
<div class="content">
<div class="img"><img style="width:300px;
height:300px;" :src="imgUrl+item.imageUrl" alt=""></div>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
</template>
<script>
import moment from 'moment'
import { panelStatus } from '@/utils/common'
import { mapGetters, mapState } from 'vuex'
export default {
data(){
return {
imgUrl:process.env.IMG_ADDRESS
}
},
computed: {
panelStatus(){
return panelStatus
},
...mapGetters([
'selectedChat',
'selectedSearchChat',
'messages'
]),
...mapState([
......@@ -33,12 +81,12 @@ export default {
])
},
mounted() {
// 在页面加载时让信息滚动到最下面
setTimeout(() => this.$refs.list.scrollTop = this.$refs.list.scrollHeight, 0)
// console.log(this.$refs)
// setTimeout(() => this.$refs.list.scrollTop = this.$refs.list.scrollHeight, 0)
},
watch: {
// 发送信息后,让信息滚动到最下面
messages() {
console.log(44444444)
setTimeout(() => this.$refs.list.scrollTop = this.$refs.list.scrollHeight, 0)
}
},
......@@ -46,7 +94,7 @@ export default {
// 在发送信息之后,将输入的内容中属于表情的部分替换成emoji图片标签
// 再经过v-html 渲染成真正的图片
replaceFace (con) {
if(con.includes('/:')) {
if(con&&con.includes('/:')) {
var emojis=this.user.emojis;
for(var i=0;i<emojis.length;i++){
con = con.replace(emojis[i].reg, '<img src="static/emoji/' + emojis[i].file +'" alt="" style="vertical-align: middle; width: 24px; height: 24px" />');
......@@ -59,14 +107,14 @@ export default {
filters: {
// 将日期过滤为 hour:minutes
time (date) {
if (typeof date === 'string') {
date = new Date(date);
}
if(date.getMinutes()<10){
return date.getHours() + ':0' +date.getMinutes();
}else{
return date.getHours() + ':' + date.getMinutes();
}
date = new Date(parseInt(date+'') * 1000);
return moment(date).format('YYYY-MM-DD HH:mm:ss')
// if(date.getMinutes()<10){
// return date.getHours() + ':0' +date.getMinutes();
// }else{
// return date.getHours() + ':' + date.getMinutes();
// }
}
}
}
......@@ -96,13 +144,11 @@ export default {
width: 100%
font-size: 12px
margin: 7px auto
text-align: center
span
display: inline-block
padding: 4px 6px
color: #fff
color: #797979
border-radius: 3px
background-color: #dcdcdc
.main
.avatar
float: left
......@@ -141,4 +187,5 @@ export default {
vertical-align: middle
border-right-color: transparent
border-left-color: #b2e281
</style>
......@@ -25,7 +25,7 @@ import { mapState } from 'vuex'
export default {
data(){
return {
accountFlag:true
accountFlag:false
}
},
computed: {
......
......@@ -13,7 +13,14 @@
export default {
methods: {
change () {
this.$store.dispatch('search', this.search)
const text = this.search
if(text.replace(/^\s\s*/, '').replace(/\s\s*$/, '')==''){
console.log(66666666666666666)
this.$store.dispatch('changeChartPanel')
}else{
this.$store.dispatch('searchSession', this.search)
}
},
del () {
this.search= ''
......
......@@ -29,7 +29,7 @@
title="选择转接对象"
:visible.sync="dialogVisible"
width="30%"
:before-close="handleClose">
>
<div>
<el-select style="width: 100%;" v-model="value7" placeholder="请选择">
<el-option-group
......@@ -61,6 +61,8 @@ export default {
content: '',
reply: '未找到',
frequency: 0,
sendType:1,
imageUrl:'',
warn: false,
showEmoji: false,
dialogVisible:false,
......@@ -95,7 +97,7 @@ export default {
computed: {
...mapState([
'selectId',
'emojis'
'user'
]),
...mapGetters([
'selectedChat',
......@@ -168,29 +170,17 @@ export default {
setTimeout(() => {
this.warn = false;
}, 1000)
}else{
if(this.selectedChat.user.name === '机器人'){
this.$http.get(`https://zhaoplus.com/api/AI?search=${this.content}`).then(res => {
this.reply = res.data.result.text
if(this.content.includes('/:')){
this.reply = '嘻嘻'
}
var msg = {
content: this.content,
reply: this.reply
}
this.$store.dispatch('sendMessage', msg)
this.content = ''
})
}else{
var msg = {
id:this.user.selectId,
type:this.sendType,
content: this.content,
imageUrl:this.imageUrl
}
this.$store.dispatch('sendMessage', msg)
this.content = ''
}
}
}
},
// 在进入的时候 聚焦输入框
mounted() {
......
......@@ -8,6 +8,7 @@ import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.config.productionTip = false
Vue.config.devtools = true
Vue.use(ElementUI)
/* eslint-disable no-new */
const vm = new Vue({
......
const url={}
url.login = '/api/y/customer/passport/sign'
url.wsUrl = "http://imweb.chenzhen.shop:9093"
url.wsUrl = "http://imdev.chenzhen.shop:9093/"
// url.wsUrl = process.env.WX_ADDRESS
export default url
\ No newline at end of file
import { panelStatus } from '@/utils/common'
const getters = {
searchedChatlist (state) {
let sessions = state.user.chatlist.filter(sessions => sessions.user.name.includes(state.user.searchText));
return sessions
chatlist (state) {
return state.user.chatlist
},
// 筛选出含有搜索值的好友列表
searchedFriendlist (state) {
let friends = state.user.friendlist.filter(friends => friends.remark.includes(state.user.searchText));
return friends
searchChatlist (state) {
return state.user.searchChatlist
},
// 通过当前选择是哪个对话匹配相应的对话
// searchedFriendlist (state) {
// let friends = state.user.friendlist.filter(friends => friends.remark.includes(state.user.searchText));
// return friends
// },
selectedChat (state) {
let session = state.user.chatlist.find(session => session.id === state.user.selectId);
return session
let temp = state.user.chatlist.find(session => session.id === state.user.selectId);
return temp
},
selectedSearchChat(state){
let temp = state.user.searchChatlist.find(session => session.id === state.user.selectId);
return temp
},
// 通过当前选择是哪个好友匹配相应的好友
selectedFriend (state) {
let friend = state.user.friendlist.find(friend => friend.id === state.user.selectFriendId);
return friend
},
messages (state) {
let session = state.user.chatlist.find(session => session.id === state.user.selectId);
console.log(session)
return session.messages
return session&&session.messages
}
}
export default getters
\ No newline at end of file
import * as service from '@/service'
import io from 'socket.io-client';
import apiUrl from '@/service/api.js'
import { setToken, getToken } from '@/utils/auth'
import { compare } from '@/utils/tools'
import { setToken, getToken, emojis } from '@/utils/auth'
import { panelStatus } from '@/utils/common'
import Vue from 'vue'
const now = new Date();
const user = {
......@@ -10,222 +12,104 @@ const user = {
userInfo:{},
wsObject:null,
img: 'static/images/UserAvatar.jpg',
chatlist: [
{
id: 1,
user: {
name: '妈咪',
img: 'static/images/mother.jpg'
whichPane:panelStatus.CHART,
messagesPage:1,
messagesPer:30,
messagesObject:{},
chatlist: [],
searchChatlist:[],
tempSearchChatlist:[],
tempChatlist:[],
friendlist: [
// {
// id: 0,
// wxid: "", //微信号
// initial: '新的朋友', //姓名首字母
// img: 'static/images/newfriend.jpg', //头像
// signature: "", //个性签名
// nickname: "新的朋友", //昵称
// sex: 0, //性别 1为男,0为女
// remark: "新的朋友", //备注
// area: "", //地区
// }
],
emojis,
selectId: 1,
selectFriendId: 0
},
messages: [
{
content: '么么哒,妈咪爱你', //聊天内容
date: now //时间
mutations: {
USER_LOGIN(state, value){
setToken(value.token)
state.userInfo = value
},
{
content: '按回车可以发送信息,还可以给我发送表情哟',
date: now
CHANGE_CONVERSATIONPANEL(state, value){
if(panelStatus.CHART==value){
state.whichPane = panelStatus.CHART
state.searchChatlist = []
state.tempSearchChatlist = []
}else{
state.whichPane = panelStatus.SEARCH
state.whichPane = value
}
],
index: 1 // 当前在聊天列表中的位置,从1开始
},
{
id: 2,
user: {
name: 'father',
img: 'static/images/father.jpg'
SET_WXOBJECT(state, value){
state.wsObject = value
},
messages: [
{
content: 'Are you kidding me?',
date: now
}
],
index: 2
SELECT_SEESION (state, value) {
state.messagesObject = value
state.selectId = value.id
},
{
id: 3,
SET_SEARCHCHART_LIST(state, value){
state.tempSearchChatlist = value
let tempList = []
for(let i in value){
let temp = [{
content: value[i].lastMessage&&value[i].lastMessage.content,
date: value[i].lastMessage&&value[i].lastMessage.createTime
}]
tempList.push({
id: value[i].id,
user: {
name: '机器人',
img: 'static/images/vue.jpg'
name: value[i].userBo.nickname,
img: value[i].userBo.avatar
},
messages: [
{
content: '我会跟你聊聊天的哟',
date: now
}
],
index: 3
messages: temp,
queryData:value[i].lastUpdateTime,
index: i
})
}
],
// 好友列表
friendlist: [
{
id: 0,
wxid: "", //微信号
initial: '新的朋友', //姓名首字母
img: 'static/images/newfriend.jpg', //头像
signature: "", //个性签名
nickname: "新的朋友", //昵称
sex: 0, //性别 1为男,0为女
remark: "新的朋友", //备注
area: "", //地区
},
{
id: 1,
wxid: "AmorAres-", //微信号
initial: 'A', //姓名首字母
img: 'static/images/小姨妈.jpg', //头像
signature: "每天我就萌萌哒", //个性签名
nickname: "Amor", //昵称
sex: 0, //性别 1为男,0为女
remark: "Amor", //备注
area: "浙江 宁波", //地区
},
{
id: 2,
wxid: "Big-fly",
initial: 'B',
img: 'static/images/大飞哥.jpg',
signature: "你不知道的js",
nickname: "fly",
sex: 1,
remark: "大飞哥",
area: "奥地利 布尔根兰",
},
{
id: 3,
wxid: "microzz",
initial: 'D',
img: 'static/images/microzz.jpg',
signature: "学习让我快乐让我成长",
nickname: "microzz",
sex: 1,
remark: "大佬",
area: "江西 赣州",
},
{
id: 4,
wxid: "hwn0366",
initial: 'F',
img: 'static/images/father.jpg',
signature: "学习让我快乐让我成长",
nickname: "丢",
sex: 1,
remark: "father",
area: "江西 抚州",
},
{
id: 5,
wxid: "orange66",
initial: 'J',
img: 'static/images/orange.jpg',
signature: "你可以笑的很阳光!",
nickname: "orange",
sex: 1,
remark: "橘子",
area: "江西 赣州",
},
{
id: 6,
wxid: "Seto_L",
img: 'static/images/加菲猫.jpg',
signature: "自强不息",
nickname: "21",
sex: 1,
remark: "加菲",
area: "北京 海淀",
state.searchChatlist = tempList.sort(compare('queryData'))
},
{
id: 7,
wxid: "wxid_itjz73t1ajt722",
initial: 'M',
img: 'static/images/mother.jpg',
signature: "开开心心就好",
nickname: "娄娄",
sex: 0,
remark: "妈咪",
area: "江西 抚州",
SET_CHART_LIST(state, value){
state.tempChatlist = value
let tempList = []
for(let i in value){
let temp = [{
content: value[i].lastMessage&&value[i].lastMessage.content,
date: value[i].lastMessage&&value[i].lastMessage.createTime
}]
tempList.push({
id: value[i].id,
user: {
name: value[i].userBo.nickname,
img: value[i].userBo.avatar
},
{
id: 8,
wxid: "hj960503",
img: 'static/images/萌萌俊.jpg',
signature: "原谅我有点蠢。。",
nickname: "。。。。。",
sex: 1,
remark: "萌萌均",
area: "江西 萍乡",
messages: temp,
queryData:value[i].lastUpdateTime,
index: i
})
}
state.chatlist = tempList.sort(compare('queryData'))
],
//emoji表情
emojis: [
{ file: '100.gif', code: '/::)', title: '微笑',reg:/\/::\)/g },
{ file: '101.gif', code: '/::~', title: '伤心',reg:/\/::~/g },
{ file: '102.gif', code: '/::B', title: '美女',reg:/\/::B/g },
{ file: '103.gif', code: '/::|', title: '发呆',reg:/\/::\|/g },
{ file: '104.gif', code: '/:8-)', title: '墨镜',reg:/\/:8-\)/g },
{ file: '105.gif', code: '/::<', title: '哭',reg:/\/::</g },
{ file: '106.gif', code: '/::$', title: '羞',reg:/\/::\$/g },
{ file: '107.gif', code: '/::X', title: '哑',reg:/\/::X/g },
{ file: '108.gif', code: '/::Z', title: '睡',reg:/\/::Z/g },
{ file: '109.gif', code: '/::\'(', title: '哭',reg:/\/::'\(/g },
{ file: '110.gif', code: '/::-|', title: '囧',reg:/\/::-\|/g },
{ file: '111.gif', code: '/::@', title: '怒',reg:/\/::@/g },
{ file: '112.gif', code: '/::P', title: '调皮',reg:/\/::P/g },
{ file: '113.gif', code: '/::D', title: '笑',reg:/\/::D/g },
{ file: '114.gif', code: '/::O', title: '惊讶',reg:/\/::O/g },
{ file: '115.gif', code: '/::(', title: '难过',reg:/\/::\(/g },
{ file: '116.gif', code: '/::+', title: '酷',reg:/\/::\+/g },
{ file: '117.gif', code: '/:--b', title: '汗',reg:/\/:--b/g },
{ file: '118.gif', code: '/::Q', title: '抓狂',reg:/\/::Q/g },
{ file: '119.gif', code: '/::T', title: '吐',reg:/\/::T/g },
{ file: '120.gif', code: '/:,@P', title: '笑',reg:/\/:,@P/g },
{ file: '121.gif', code: '/:,@-D', title: '快乐',reg:/\/:,@-D/g },
{ file: '122.gif', code: '/::d', title: '奇',reg:/\/::d/g },
{ file: '123.gif', code: '/:,@o', title: '傲' ,reg:/\/:,@o/g},
{ file: '124.gif', code: '/::g', title: '饿',reg:/\/::g/g },
{ file: '125.gif', code: '/:|-)', title: '累' ,reg:/\/:\|-\)/g},
{ file: '126.gif', code: '/::!', title: '吓',reg:/\/::!/g },
{ file: '127.gif', code: '/::L', title: '汗',reg:/\/::L/g },
{ file: '128.gif', code: '/::>', title: '高兴',reg:/\/::>/g },
{ file: '129.gif', code: '/::,@', title: '闲',reg:/\/::,@/g },
{ file: '130.gif', code: '/:,@f', title: '努力',reg:/\/:,@f/g },
{ file: '131.gif', code: '/::-S', title: '骂',reg:/\/::-S/g },
{ file: '133.gif', code: '/:,@x', title: '秘密',reg:/\/:,@x/g },
{ file: '134.gif', code: '/:,@@', title: '乱',reg:/\/:,@@/g },
{ file: '135.gif', code: '/::8', title: '疯',reg:/\/::8/g },
{ file: '136.gif', code: '/:,@!', title: '哀',reg:/\/:,@!/g },
{ file: '137.gif', code: '/:!!!', title: '鬼',reg:/\/:!!!/g },
{ file: '138.gif', code: '/:xx', title: '打击',reg:/\/:xx/g },
{ file: '139.gif', code: '/:bye', title: 'bye',reg:/\/:bye/g },
{ file: '142.gif', code: '/:handclap', title: '鼓掌',reg:/\/:handclap/g },
{ file: '145.gif', code: '/:<@', title: '什么',reg:/\/:<@/g },
{ file: '147.gif', code: '/::-O', title: '累',reg:/\/::-O/g },
{ file: '153.gif', code: '/:@x', title: '吓',reg:/\/:@x/g },
{ file: '155.gif', code: '/:pd', title: '刀',reg:/\/:pd/g },
{ file: '156.gif', code: '/:<W>', title: '水果',reg:/\/:<W>/g },
{ file: '157.gif', code: '/:beer', title: '酒',reg:/\/:beer/g },
{ file: '158.gif', code: '/:basketb', title: '篮球',reg:/\/:basketb/g },
{ file: '159.gif', code: '/:oo', title: '乒乓',reg:/\/:oo/g },
{ file: '195.gif', code: '/:circle', title: '跳舞',reg:/\/:circle/g },
{ file: '160.gif', code: '/:coffee', title: '咖啡',reg:/\/:coffee/g }
],
// 得知当前选择的是哪个对话
selectId: 1,
// 得知当前选择的是哪个好友
selectFriendId: 0
},
mutations: {
USER_LOGIN(state, value){
setToken(value.token)
state.userInfo = value
},
SET_WXOBJECT(state, value){
state.wsObject = value
SELECT_MESSAGE(state, value){
let { chatlist, selectId } = state
for(let c in chatlist){
if(chatlist[c].id==selectId){
chatlist[c].messages = value==null?[]:value.sort(compare('createTime'))
}
}
},
initData (state) {
let data = localStorage.getItem('vue-chat');
......@@ -233,67 +117,41 @@ const user = {
state.chatlist = JSON.parse(data);
}
},
// 获取搜索值
search (state, value) {
state.searchText = value
},
// 得知用户当前选择的是哪个对话。便于匹配对应的对话框
selectSession (state, value) {
state.selectId = value
},
// 得知用户当前选择的是哪个好友。
selectFriend (state, value) {
state.selectFriendId = value
},
// 发送信息
sendMessage (state, msg){
let result = state.chatlist.find(session => session.id === state.selectId);
result.messages.push({
content: msg.content,
date: new Date(),
self: true
});
if(result.user.name === '机器人'){
setTimeout(() => {
result.messages.push({
content: msg.reply,
date: new Date(),
self: false
});
},500)
}
},
// 选择好友后,点击发送信息。判断在聊天列表中是否有该好友,有的话跳到该好友对话。没有的话
// 添加该好友的对话 并置顶
send (state) {
let result = state.friendlist.find(friend => friend.id === state.selectFriendId)
let msg = state.chatlist.find(msg => msg.user.name === result.remark)
if( !msg ){
state.selectId = 1
for(let i = 0; i < state.chatlist.length; i++ ){
state.chatlist[i].id++;
state.chatlist[i].index++;
}
state.chatlist.unshift({
id: 1,
user: {
name: result.remark,
img: result.img
},
messages: [
{
content: '已经置顶聊天,可以给我发信息啦!',
date: new Date()
}
],
index: 1
})
}else {
state.selectId = msg.index
router.push({ path: '/chat'})
}
}
// send (state) {
// let result = state.friendlist.find(friend => friend.id === state.selectFriendId)
// let msg = state.chatlist.find(msg => msg.user.name === result.remark)
// if( !msg ){
// state.selectId = 1
// for(let i = 0; i < state.chatlist.length; i++ ){
// state.chatlist[i].id++;
// state.chatlist[i].index++;
// }
// state.chatlist.unshift({
// id: 1,
// user: {
// name: result.remark,
// img: result.img
// },
// messages: [
// {
// content: '已经置顶聊天,可以给我发信息啦!',
// date: new Date()
// }
// ],
// index: 1
// })
// }else {
// state.selectId = msg.index
// router.push({ path: '/chat'})
// }
// }
},
actions: {
......@@ -311,19 +169,25 @@ const user = {
})
})
},
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()
token: getToken(),
version: 2.0
}
wsClient.on('connect', () => {
// Common.wsClient = wsClient
console.log("connect")
// commit('login')
// dispatch('connected')
dispatch('connected')
// storage.set('account', state)
}).on('connect_error', () => {
console.log("connect_error")
......@@ -335,11 +199,13 @@ const user = {
})
wsClient.open()
}
dispatch("init")
},
connected({ state, dispatch }) {
state.userInfo
.on('messages/message', (data) => {
connected({ state, commit }) {
state.wsObject
.on('messages/message', (data, callback) => {
console.log(data)
callback()
if (data.eventType == "conversations/create" && data.message) {
// dispatch('conversation/newConversation', data, { root: true })
} else {
......@@ -347,15 +213,15 @@ const user = {
// dispatch('conversation/newMessage', data, { root: true })
}
})
.on('conversations/index', (data) => {
.on('conversations/index', (data, callback) => {
console.log(data)
commit('SET_CHART_LIST', data)
// console.log('conversations/index')
// console.log(data)
// _.each(data, (conversation) => {
// dispatch('conversation/addConversation', {...conversation, from: 'index'}, { root: true })
// })
})
.on('conversations/friend', (data) => {
.on('conversations/friend', (data, callback) => {
console.log(data)
// console.log('conversations/friend')
// console.log(data)
......@@ -363,8 +229,9 @@ const user = {
// dispatch('conversation/addFriendConversation', {...conversation, from: 'index'}, { root: true })
// })
})
.on('messages/index', (data) => {
console.log(data)
.on('messages/index', (data, callback) => {
callback(true)
commit('SELECT_MESSAGE', data)
// console.log('messages/index')
// if (_.isEmpty(data)) return
// _.each(data, (message) => {
......@@ -373,13 +240,23 @@ const user = {
// })
// dispatch('conversation/isMessagesDone', data, { root: true })
})
.on('conversations/show', (data) => {
console.log(data)
.on('conversations/show', (data, callback) => {
const tempChatlist = state.tempChatlist
for(let j in tempChatlist){
if(tempChatlist[j].id==data.id){
let tempMessages = [...tempChatlist[j].messages]
tempChatlist[j] = data
tempChatlist[j].messages= tempMessages
}
}
commit('SET_CHART_LIST', tempChatlist)
// console.log('conversations/show')
// dispatch('conversation/addConversation', data, { root: true })
})
.on('conversions/search', (data) => {
.on('conversions/search', (data, callback) => {
console.log(data)
callback()
commit('SET_SEARCHCHART_LIST', data)
// _.each(data, (conversation) => {
// dispatch('conversation/addConversation', conversation, { root: true })
// })
......@@ -398,14 +275,60 @@ const user = {
// },
// })
},
selectSession({ commit, state }, conversation) {
console.log(5555555555555555555555)
commit('SELECT_SEESION', conversation)
state.wsObject.emit('appevent', {
eventType: 'messages/index',
message: {
conversationId:conversation.id,
page: state.messagesPage,
rows: state.messagesPer
}
})
},
changeChartPanel({ commit, state }){
commit('CHANGE_CONVERSATIONPANEL', panelStatus.CHART)
},
searchSession({ commit, state }, keyword) {
console.log(44444)
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 = state.messagesObject.messages
temp.push({
conversationId:conversation.id,
type: conversation.type,
isSend:1,
content: conversation.content,
createTime: Date.parse(new Date())
})
commit('SELECT_MESSAGE', temp)
},
search: ({ commit }, value) => {
setTimeout(() => {
commit('search', value)
}, 100)
},
selectSession: ({ commit }, value) => commit('selectSession', value),
// selectSession: ({ commit }, value) => commit('selectSession', value),
selectFriend: ({ commit }, value) => commit('selectFriend', value),
sendMessage: ({ commit }, msg) => commit('sendMessage', msg),
// sendMessage: ({ commit }, msg) => commit('sendMessage', msg),
send: ({ commit }) => commit('send'),
initData: ({ commit }) => commit('initData')
}
......
......@@ -30,3 +30,55 @@ export function getCommercialId() {
export function setCommercialId(token) {
return Cookies.set(commercialIdKey, token)
}
export const emojis = [
{ file: '100.gif', code: '/::)', title: '微笑',reg:/\/::\)/g },
{ file: '101.gif', code: '/::~', title: '伤心',reg:/\/::~/g },
{ file: '102.gif', code: '/::B', title: '美女',reg:/\/::B/g },
{ file: '103.gif', code: '/::|', title: '发呆',reg:/\/::\|/g },
{ file: '104.gif', code: '/:8-)', title: '墨镜',reg:/\/:8-\)/g },
{ file: '105.gif', code: '/::<', title: '哭',reg:/\/::</g },
{ file: '106.gif', code: '/::$', title: '羞',reg:/\/::\$/g },
{ file: '107.gif', code: '/::X', title: '哑',reg:/\/::X/g },
{ file: '108.gif', code: '/::Z', title: '睡',reg:/\/::Z/g },
{ file: '109.gif', code: '/::\'(', title: '哭',reg:/\/::'\(/g },
{ file: '110.gif', code: '/::-|', title: '囧',reg:/\/::-\|/g },
{ file: '111.gif', code: '/::@', title: '怒',reg:/\/::@/g },
{ file: '112.gif', code: '/::P', title: '调皮',reg:/\/::P/g },
{ file: '113.gif', code: '/::D', title: '笑',reg:/\/::D/g },
{ file: '114.gif', code: '/::O', title: '惊讶',reg:/\/::O/g },
{ file: '115.gif', code: '/::(', title: '难过',reg:/\/::\(/g },
{ file: '116.gif', code: '/::+', title: '酷',reg:/\/::\+/g },
{ file: '117.gif', code: '/:--b', title: '汗',reg:/\/:--b/g },
{ file: '118.gif', code: '/::Q', title: '抓狂',reg:/\/::Q/g },
{ file: '119.gif', code: '/::T', title: '吐',reg:/\/::T/g },
{ file: '120.gif', code: '/:,@P', title: '笑',reg:/\/:,@P/g },
{ file: '121.gif', code: '/:,@-D', title: '快乐',reg:/\/:,@-D/g },
{ file: '122.gif', code: '/::d', title: '奇',reg:/\/::d/g },
{ file: '123.gif', code: '/:,@o', title: '傲' ,reg:/\/:,@o/g},
{ file: '124.gif', code: '/::g', title: '饿',reg:/\/::g/g },
{ file: '125.gif', code: '/:|-)', title: '累' ,reg:/\/:\|-\)/g},
{ file: '126.gif', code: '/::!', title: '吓',reg:/\/::!/g },
{ file: '127.gif', code: '/::L', title: '汗',reg:/\/::L/g },
{ file: '128.gif', code: '/::>', title: '高兴',reg:/\/::>/g },
{ file: '129.gif', code: '/::,@', title: '闲',reg:/\/::,@/g },
{ file: '130.gif', code: '/:,@f', title: '努力',reg:/\/:,@f/g },
{ file: '131.gif', code: '/::-S', title: '骂',reg:/\/::-S/g },
{ file: '133.gif', code: '/:,@x', title: '秘密',reg:/\/:,@x/g },
{ file: '134.gif', code: '/:,@@', title: '乱',reg:/\/:,@@/g },
{ file: '135.gif', code: '/::8', title: '疯',reg:/\/::8/g },
{ file: '136.gif', code: '/:,@!', title: '哀',reg:/\/:,@!/g },
{ file: '137.gif', code: '/:!!!', title: '鬼',reg:/\/:!!!/g },
{ file: '138.gif', code: '/:xx', title: '打击',reg:/\/:xx/g },
{ file: '139.gif', code: '/:bye', title: 'bye',reg:/\/:bye/g },
{ file: '142.gif', code: '/:handclap', title: '鼓掌',reg:/\/:handclap/g },
{ file: '145.gif', code: '/:<@', title: '什么',reg:/\/:<@/g },
{ file: '147.gif', code: '/::-O', title: '累',reg:/\/::-O/g },
{ file: '153.gif', code: '/:@x', title: '吓',reg:/\/:@x/g },
{ file: '155.gif', code: '/:pd', title: '刀',reg:/\/:pd/g },
{ file: '156.gif', code: '/:<W>', title: '水果',reg:/\/:<W>/g },
{ file: '157.gif', code: '/:beer', title: '酒',reg:/\/:beer/g },
{ file: '158.gif', code: '/:basketb', title: '篮球',reg:/\/:basketb/g },
{ file: '159.gif', code: '/:oo', title: '乒乓',reg:/\/:oo/g },
{ file: '195.gif', code: '/:circle', title: '跳舞',reg:/\/:circle/g },
{ file: '160.gif', code: '/:coffee', title: '咖啡',reg:/\/:coffee/g }
]
import axios from "axios"
import aliOss from "ali-oss"
let Authorization = null
let Common = {}
window.common = Common
// const ajaxUrl = "http://172.16.22.234:19891";
const ajaxUrl = "/api"
// const ajaxUrl = "http://localhost";
Common.ajax = axios.create({
baseURL: ajaxUrl,
timeout: 120000,
headers: {
"Cache-Control": "no-cache,no-store,must-revalidate,max-age=-1,private"
}
})
// Common.wsUrl = "http://172.16.22.234:9093";
Common.wsUrl = "http://imweb.chenzhen.shop"
Common.bag = {
host: "https://baozheng.cc"
// host: "http://172.16.22.3:19893"
// host: "http://172.16.22.234:9093"
export const panelStatus = {
SEARCH:'SEARCH',//SEARCH搜索列表
CHART:'CHART'//CHART回话列表
}
\ No newline at end of file
Common.bag.ajax = axios.create({
baseURL: Common.bag.host,
timeout: 120000,
headers: {
"Cache-Control": "no-cache,no-store,must-revalidate,max-age=-1,private"
}
// withCredentials: true
})
Common.bag.ajax.interceptors.response.use((response) => {
// console.log(response)
return response
}, (error) => {
if (error.response && error.response.status == 401) {
window.vm.bagLogin()
}
return Promise.reject(error)
})
Common.chenzhen = {}
Common.chenzhen.ajax = axios.create({
// baseURL: "http://172.16.22.234:19893",
// baseURL: "http://127.0.0.1:4396",
baseURL: "http://imweb.chenzhen.shop",
timeout: 30000,
headers: {
"Cache-Control": "no-cache,no-store,must-revalidate,max-age=-1,private"
}
})
Common.chenzhen.ajax.interceptors.request.use((body) => {
body.headers.Authorization = localStorage.getItem("chenzhen-token")
return body
}, (error) => {
return Promise.reject(error)
})
Common.chenzhen.ajax.interceptors.response.use((response) => {
if (response.data.code === 800) {
localStorage.clear()
window.vm.chenzhenLogin()
}
return response
}, (error) => {
return Promise.reject(error)
})
Common.chat = {
host: "http://imweb.chenzhen.shop"
}
Common.chat.ajax = axios.create({
baseURL: Common.chat.host,
timeout: 120000,
headers: {
"Cache-Control": "no-cache,no-store,must-revalidate,max-age=-1,private"
}
})
Common.six_day = 6 * 24 * 60 * 60 * 1000
Common.wsClient = null
Common.sendMessage = (message) => {
return new Promise((resolve, reject) => {
if (Common.wsClient == null || Common.wsClient.disconnected) {
reject("No socket connection.")
} else {
// console.log(message)
let options = {
eventType: "messages/create",
message: message
}
Common.wsClient.emit("appevent", options)
resolve()
}
})
}
Common.ossClient = new aliOss({
region: "oss-cn-beijing",
accessKeyId: "LTAImsrYiikk7t3f",
accessKeySecret: "XtgwITVY6Apb7H1hOO3LRZNxE0Onpb",
bucket: "chat-x"
})
Common.ossUrl = "http://chat-x.oss-cn-beijing.aliyuncs.com/"
export default Common
export const compare =(po)=>{
return function(a,b){
let temp1 = a[po];
let temp2 = b[po];
return temp1-temp2
}
}
\ No newline at end of file
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