Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
chart-web
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zhangzhaowei
chart-web
Commits
82649518
Commit
82649518
authored
May 22, 2019
by
looker
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add tag
parent
3faa4225
Changes
17
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
434 additions
and
483 deletions
+434
-483
dev.env.js
config/dev.env.js
+3
-1
index.js
config/index.js
+3
-2
prod.env.js
config/prod.env.js
+3
-1
package-lock.json
package-lock.json
+6
-0
package.json
package.json
+4
-3
chatlist.vue
src/components/chatlist/chatlist.vue
+33
-12
message.vue
src/components/message/message.vue
+80
-33
mycard.vue
src/components/mycard/mycard.vue
+1
-1
search.vue
src/components/search/search.vue
+8
-1
text.vue
src/components/text/text.vue
+12
-22
main.js
src/main.js
+1
-0
api.js
src/service/api.js
+2
-1
getters.js
src/store/getters.js
+18
-16
user.js
src/store/modules/user.js
+196
-273
auth.js
src/utils/auth.js
+53
-1
common.js
src/utils/common.js
+4
-116
tools.js
src/utils/tools.js
+7
-0
No files found.
config/dev.env.js
View file @
82649518
...
@@ -2,5 +2,7 @@ var merge = require('webpack-merge')
...
@@ -2,5 +2,7 @@ var merge = require('webpack-merge')
var
prodEnv
=
require
(
'./prod.env'
)
var
prodEnv
=
require
(
'./prod.env'
)
module
.
exports
=
merge
(
prodEnv
,
{
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/"'
})
})
config/index.js
View file @
82649518
...
@@ -23,7 +23,7 @@ module.exports = {
...
@@ -23,7 +23,7 @@ module.exports = {
},
},
dev
:
{
dev
:
{
env
:
require
(
'./dev.env'
),
env
:
require
(
'./dev.env'
),
port
:
80
80
,
port
:
80
78
,
autoOpenBrowser
:
true
,
autoOpenBrowser
:
true
,
assetsSubDirectory
:
'static'
,
assetsSubDirectory
:
'static'
,
assetsPublicPath
:
'/'
,
assetsPublicPath
:
'/'
,
...
@@ -34,7 +34,8 @@ module.exports = {
...
@@ -34,7 +34,8 @@ module.exports = {
// }
// }
'/api'
:
{
'/api'
:
{
pathRewrite
:
{
'^/api'
:
''
},
pathRewrite
:
{
'^/api'
:
''
},
target
:
'http://imweb.chenzhen.shop'
,
// target: 'http://imweb.chenzhen.shop',
target
:
'http://imdev.chenzhen.shop/'
,
changeOrigin
:
true
,
//是否跨域
changeOrigin
:
true
,
//是否跨域
}
}
},
},
...
...
config/prod.env.js
View file @
82649518
module
.
exports
=
{
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/"'
}
}
package-lock.json
View file @
82649518
...
@@ -5635,6 +5635,12 @@
...
@@ -5635,6 +5635,12 @@
"minimist"
:
"0.0.8"
"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"
:
{
"move-concurrently"
:
{
"version"
:
"1.0.1"
,
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz"
,
...
...
package.json
View file @
82649518
...
@@ -40,18 +40,19 @@
...
@@ -40,18 +40,19 @@
"
friendly-errors-webpack-plugin
"
:
"
^1.1.3
"
,
"
friendly-errors-webpack-plugin
"
:
"
^1.1.3
"
,
"
html-webpack-plugin
"
:
"
^2.28.0
"
,
"
html-webpack-plugin
"
:
"
^2.28.0
"
,
"
http-proxy-middleware
"
:
"
^0.17.3
"
,
"
http-proxy-middleware
"
:
"
^0.17.3
"
,
"
webpack-bundle-analyzer
"
:
"
^2.2.1
"
,
"
moment
"
:
"
^2.24.0
"
,
"
semver
"
:
"
^5.3.0
"
,
"
shelljs
"
:
"
^0.7.6
"
,
"
opn
"
:
"
^4.0.2
"
,
"
opn
"
:
"
^4.0.2
"
,
"
optimize-css-assets-webpack-plugin
"
:
"
^1.3.0
"
,
"
optimize-css-assets-webpack-plugin
"
:
"
^1.3.0
"
,
"
ora
"
:
"
^1.2.0
"
,
"
ora
"
:
"
^1.2.0
"
,
"
rimraf
"
:
"
^2.6.0
"
,
"
rimraf
"
:
"
^2.6.0
"
,
"
semver
"
:
"
^5.3.0
"
,
"
shelljs
"
:
"
^0.7.6
"
,
"
url-loader
"
:
"
^0.5.8
"
,
"
url-loader
"
:
"
^0.5.8
"
,
"
vue-loader
"
:
"
^11.3.4
"
,
"
vue-loader
"
:
"
^11.3.4
"
,
"
vue-style-loader
"
:
"
^2.0.5
"
,
"
vue-style-loader
"
:
"
^2.0.5
"
,
"
vue-template-compiler
"
:
"
^2.2.6
"
,
"
vue-template-compiler
"
:
"
^2.2.6
"
,
"
webpack
"
:
"
^2.3.3
"
,
"
webpack
"
:
"
^2.3.3
"
,
"
webpack-bundle-analyzer
"
:
"
^2.2.1
"
,
"
webpack-dev-middleware
"
:
"
^1.10.0
"
,
"
webpack-dev-middleware
"
:
"
^1.10.0
"
,
"
webpack-hot-middleware
"
:
"
^2.18.0
"
,
"
webpack-hot-middleware
"
:
"
^2.18.0
"
,
"
webpack-merge
"
:
"
^4.1.0
"
"
webpack-merge
"
:
"
^4.1.0
"
...
...
src/components/chatlist/chatlist.vue
View file @
82649518
<!-- 聊天列表 -->
<!-- 聊天列表 -->
<
template
>
<
template
>
<div
class=
"msglist"
>
<div
class=
"msglist"
>
<ul>
<ul
v-if=
"user.whichPane==panelStatus.CHART"
>
<li
v-for=
"item in
searchedChatlist"
class=
"sessionlist"
:class=
"
{ active: item.id === selectId }" @click="selectSession(item.id
)">
<li
v-for=
"item in
chatlist"
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"
>
<img
class=
"avatar"
width=
"42"
height=
"42"
:alt=
"item.user.name"
:src=
"item.user.img"
>
</div>
</div>
<div
class=
"list-right"
>
<div
class=
"list-right"
>
<p
class=
"name"
>
{{
item
.
user
.
name
}}
</p>
<p
class=
"name"
>
{{
item
.
user
.
name
}}
</p>
<span
class=
"time"
>
{{
item
.
messages
[
item
.
messages
.
length
-
1
].
date
|
time
}}
</span>
<span
class=
"time"
>
{{
item
.
queryData
|
time
}}
</span>
<p
class=
"lastmsg"
>
{{
item
.
messages
[
item
.
messages
.
length
-
1
].
content
}}
</p>
<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>
</div>
</li>
</li>
</ul>
</ul>
...
@@ -18,14 +30,18 @@
...
@@ -18,14 +30,18 @@
<
script
>
<
script
>
import
{
mapState
,
mapActions
,
mapGetters
}
from
'vuex'
import
{
mapState
,
mapActions
,
mapGetters
}
from
'vuex'
import
{
panelStatus
}
from
'@/utils/common'
export
default
{
export
default
{
computed
:
{
computed
:
{
panelStatus
(){
return
panelStatus
},
...
mapState
([
...
mapState
([
'selectId'
,
'user'
,
'searchText'
]),
]),
...
mapGetters
([
...
mapGetters
([
'searchedChatlist'
'searchChatlist'
,
'chatlist'
])
])
},
},
methods
:
{
methods
:
{
...
@@ -33,18 +49,23 @@ export default {
...
@@ -33,18 +49,23 @@ export default {
'selectSession'
,
'selectSession'
,
])
])
},
},
mounted
()
{
let
obj
=
this
.
searchedChatlist
[
0
]
this
.
selectSession
(
obj
)
},
filters
:
{
filters
:
{
// 将日期过滤为 hour:minutes
time
(
date
)
{
time
(
date
)
{
if
(
date
){
if
(
typeof
date
===
'string'
)
{
date
=
new
Date
(
parseInt
(
date
)
*
1000
);
date
=
new
Date
(
date
);
}
if
(
date
.
getMinutes
()
<
10
){
if
(
date
.
getMinutes
()
<
10
){
return
date
.
getHours
()
+
':0'
+
date
.
getMinutes
();
return
date
.
getHours
()
+
':0'
+
date
.
getMinutes
();
}
else
{
}
else
{
return
date
.
getHours
()
+
':'
+
date
.
getMinutes
();
return
date
.
getHours
()
+
':'
+
date
.
getMinutes
();
}
}
}
else
{
return
""
}
}
}
},
},
}
}
</
script
>
</
script
>
...
...
src/components/message/message.vue
View file @
82649518
<!-- 消息框 -->
<
template
>
<
template
>
<div
class=
"message"
>
<div>
<header
class=
"header"
>
<div
class=
"message"
v-if=
"user.whichPane==panelStatus.CHART"
>
<div
class=
"friendname"
>
{{
selectedChat
.
user
.
name
}}
</div>
<header
class=
"header"
>
</header>
<div
class=
"friendname"
>
{{
selectedChat
&&
selectedChat
.
user
.
name
}}
</div>
<div
class=
"message-wrapper"
ref=
"list"
>
</header>
<ul
v-if=
"selectedChat"
>
<div
class=
"message-wrapper"
ref=
"list"
>
<li
v-for=
"item in selectedChat.messages"
class=
"message-item"
>
<ul
v-if=
"selectedChat"
>
<div
class=
"time"
><span>
{{
item
.
date
|
time
}}
</span></div>
<li
v-for=
"item in messages"
class=
"message-item"
>
<div
class=
"main"
:class=
"
{ self: item.self }">
<div
v-if=
"item.type==1"
class=
"main"
:class=
"
{ self: item.isSend }">
<img
class=
"avatar"
width=
"36"
height=
"36"
:src=
"item.self ? user.img : selectedChat.user.img"
/>
<img
class=
"avatar"
width=
"36"
height=
"36"
:src=
"item.isSend ? user.img : selectedChat.user.img"
/>
<div
class=
"content"
>
<div
class=
"time"
><span>
{{
item
.
createTime
|
time
}}
</span></div>
<div
class=
"text"
v-html=
"replaceFace(item.content)"
></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>
</div>
</div>
</li>
</li>
</ul>
</ul>
</div>
</div>
</div>
</div>
</div>
</
template
>
</
template
>
<
script
>
<
script
>
import
moment
from
'moment'
import
{
panelStatus
}
from
'@/utils/common'
import
{
mapGetters
,
mapState
}
from
'vuex'
import
{
mapGetters
,
mapState
}
from
'vuex'
export
default
{
export
default
{
data
(){
return
{
imgUrl
:
process
.
env
.
IMG_ADDRESS
}
},
computed
:
{
computed
:
{
panelStatus
(){
return
panelStatus
},
...
mapGetters
([
...
mapGetters
([
'selectedChat'
,
'selectedChat'
,
'selectedSearchChat'
,
'messages'
'messages'
]),
]),
...
mapState
([
...
mapState
([
...
@@ -33,12 +81,12 @@ export default {
...
@@ -33,12 +81,12 @@ export default {
])
])
},
},
mounted
()
{
mounted
()
{
// 在页面加载时让信息滚动到最下面
// console.log(this.$refs)
setTimeout
(()
=>
this
.
$refs
.
list
.
scrollTop
=
this
.
$refs
.
list
.
scrollHeight
,
0
)
//
setTimeout(() => this.$refs.list.scrollTop = this.$refs.list.scrollHeight, 0)
},
},
watch
:
{
watch
:
{
// 发送信息后,让信息滚动到最下面
messages
()
{
messages
()
{
console
.
log
(
44444444
)
setTimeout
(()
=>
this
.
$refs
.
list
.
scrollTop
=
this
.
$refs
.
list
.
scrollHeight
,
0
)
setTimeout
(()
=>
this
.
$refs
.
list
.
scrollTop
=
this
.
$refs
.
list
.
scrollHeight
,
0
)
}
}
},
},
...
@@ -46,7 +94,7 @@ export default {
...
@@ -46,7 +94,7 @@ export default {
// 在发送信息之后,将输入的内容中属于表情的部分替换成emoji图片标签
// 在发送信息之后,将输入的内容中属于表情的部分替换成emoji图片标签
// 再经过v-html 渲染成真正的图片
// 再经过v-html 渲染成真正的图片
replaceFace
(
con
)
{
replaceFace
(
con
)
{
if
(
con
.
includes
(
'/:'
))
{
if
(
con
&&
con
.
includes
(
'/:'
))
{
var
emojis
=
this
.
user
.
emojis
;
var
emojis
=
this
.
user
.
emojis
;
for
(
var
i
=
0
;
i
<
emojis
.
length
;
i
++
){
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" />'
);
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 {
...
@@ -59,14 +107,14 @@ export default {
filters
:
{
filters
:
{
// 将日期过滤为 hour:minutes
// 将日期过滤为 hour:minutes
time
(
date
)
{
time
(
date
)
{
if
(
typeof
date
===
'string'
)
{
date
=
new
Date
(
date
);
date
=
new
Date
(
parseInt
(
date
+
''
)
*
1000
);
}
return
moment
(
date
).
format
(
'YYYY-MM-DD HH:mm:ss'
)
if
(
date
.
getMinutes
()
<
10
){
//
if(date.getMinutes()
<
10
){
return
date
.
getHours
()
+
':0'
+
date
.
getMinutes
();
//
return date.getHours() + ':0' +date.getMinutes();
}
else
{
//
}else{
return
date
.
getHours
()
+
':'
+
date
.
getMinutes
();
//
return date.getHours() + ':' + date.getMinutes();
}
//
}
}
}
}
}
}
}
...
@@ -96,13 +144,11 @@ export default {
...
@@ -96,13 +144,11 @@ export default {
width: 100%
width: 100%
font-size: 12px
font-size: 12px
margin: 7px auto
margin: 7px auto
text-align: center
span
span
display: inline-block
display: inline-block
padding: 4px 6px
padding: 4px 6px
color: #
fff
color: #
797979
border-radius: 3px
border-radius: 3px
background-color: #dcdcdc
.main
.main
.avatar
.avatar
float: left
float: left
...
@@ -141,4 +187,5 @@ export default {
...
@@ -141,4 +187,5 @@ export default {
vertical-align: middle
vertical-align: middle
border-right-color: transparent
border-right-color: transparent
border-left-color: #b2e281
border-left-color: #b2e281
</
style
>
</
style
>
src/components/mycard/mycard.vue
View file @
82649518
...
@@ -25,7 +25,7 @@ import { mapState } from 'vuex'
...
@@ -25,7 +25,7 @@ import { mapState } from 'vuex'
export
default
{
export
default
{
data
(){
data
(){
return
{
return
{
accountFlag
:
tru
e
accountFlag
:
fals
e
}
}
},
},
computed
:
{
computed
:
{
...
...
src/components/search/search.vue
View file @
82649518
...
@@ -13,7 +13,14 @@
...
@@ -13,7 +13,14 @@
export
default
{
export
default
{
methods
:
{
methods
:
{
change
()
{
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
()
{
del
()
{
this
.
search
=
''
this
.
search
=
''
...
...
src/components/text/text.vue
View file @
82649518
...
@@ -24,12 +24,12 @@
...
@@ -24,12 +24,12 @@
<div
class=
"warn"
v-show=
"warn"
>
<div
class=
"warn"
v-show=
"warn"
>
<div
class=
"description"
>
不能发送空白信息
</div>
<div
class=
"description"
>
不能发送空白信息
</div>
</div>
</div>
</transition>
</transition>
<el-dialog
<el-dialog
title=
"选择转接对象"
title=
"选择转接对象"
:visible
.
sync=
"dialogVisible"
:visible
.
sync=
"dialogVisible"
width=
"30%"
width=
"30%"
:before-close=
"handleClose"
>
>
<div>
<div>
<el-select
style=
"width: 100%;"
v-model=
"value7"
placeholder=
"请选择"
>
<el-select
style=
"width: 100%;"
v-model=
"value7"
placeholder=
"请选择"
>
<el-option-group
<el-option-group
...
@@ -61,6 +61,8 @@ export default {
...
@@ -61,6 +61,8 @@ export default {
content
:
''
,
content
:
''
,
reply
:
'未找到'
,
reply
:
'未找到'
,
frequency
:
0
,
frequency
:
0
,
sendType
:
1
,
imageUrl
:
''
,
warn
:
false
,
warn
:
false
,
showEmoji
:
false
,
showEmoji
:
false
,
dialogVisible
:
false
,
dialogVisible
:
false
,
...
@@ -95,7 +97,7 @@ export default {
...
@@ -95,7 +97,7 @@ export default {
computed
:
{
computed
:
{
...
mapState
([
...
mapState
([
'selectId'
,
'selectId'
,
'
emojis
'
'
user
'
]),
]),
...
mapGetters
([
...
mapGetters
([
'selectedChat'
,
'selectedChat'
,
...
@@ -169,26 +171,14 @@ export default {
...
@@ -169,26 +171,14 @@ export default {
this
.
warn
=
false
;
this
.
warn
=
false
;
},
1000
)
},
1000
)
}
else
{
}
else
{
if
(
this
.
selectedChat
.
user
.
name
===
'机器人'
){
var
msg
=
{
this
.
$http
.
get
(
`https://zhaoplus.com/api/AI?search=
${
this
.
content
}
`
).
then
(
res
=>
{
id
:
this
.
user
.
selectId
,
this
.
reply
=
res
.
data
.
result
.
text
type
:
this
.
sendType
,
if
(
this
.
content
.
includes
(
'/:'
)){
content
:
this
.
content
,
this
.
reply
=
'嘻嘻'
imageUrl
:
this
.
imageUrl
}
var
msg
=
{
content
:
this
.
content
,
reply
:
this
.
reply
}
this
.
$store
.
dispatch
(
'sendMessage'
,
msg
)
this
.
content
=
''
})
}
else
{
var
msg
=
{
content
:
this
.
content
,
}
this
.
$store
.
dispatch
(
'sendMessage'
,
msg
)
this
.
content
=
''
}
}
this
.
$store
.
dispatch
(
'sendMessage'
,
msg
)
this
.
content
=
''
}
}
}
}
},
},
...
...
src/main.js
View file @
82649518
...
@@ -8,6 +8,7 @@ import ElementUI from 'element-ui'
...
@@ -8,6 +8,7 @@ import ElementUI from 'element-ui'
import
'element-ui/lib/theme-chalk/index.css'
import
'element-ui/lib/theme-chalk/index.css'
Vue
.
config
.
productionTip
=
false
Vue
.
config
.
productionTip
=
false
Vue
.
config
.
devtools
=
true
Vue
.
use
(
ElementUI
)
Vue
.
use
(
ElementUI
)
/* eslint-disable no-new */
/* eslint-disable no-new */
const
vm
=
new
Vue
({
const
vm
=
new
Vue
({
...
...
src/service/api.js
View file @
82649518
const
url
=
{}
const
url
=
{}
url
.
login
=
'/api/y/customer/passport/sign'
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
export
default
url
\ No newline at end of file
src/store/getters.js
View file @
82649518
import
{
panelStatus
}
from
'@/utils/common'
const
getters
=
{
const
getters
=
{
searchedChatlist
(
state
)
{
chatlist
(
state
)
{
let
sessions
=
state
.
user
.
chatlist
.
filter
(
sessions
=>
sessions
.
user
.
name
.
includes
(
state
.
user
.
searchText
));
return
state
.
user
.
chatlist
return
sessions
},
},
// 筛选出含有搜索值的好友列表
searchChatlist
(
state
)
{
searchedFriendlist
(
state
)
{
return
state
.
user
.
searchChatlist
let
friends
=
state
.
user
.
friendlist
.
filter
(
friends
=>
friends
.
remark
.
includes
(
state
.
user
.
searchText
));
return
friends
},
},
// 通过当前选择是哪个对话匹配相应的对话
// searchedFriendlist (state) {
// let friends = state.user.friendlist.filter(friends => friends.remark.includes(state.user.searchText));
// return friends
// },
selectedChat
(
state
)
{
selectedChat
(
state
)
{
let
session
=
state
.
user
.
chatlist
.
find
(
session
=>
session
.
id
===
state
.
user
.
selectId
);
let
temp
=
state
.
user
.
chatlist
.
find
(
session
=>
session
.
id
===
state
.
user
.
selectId
);
return
session
return
temp
},
selectedSearchChat
(
state
){
let
temp
=
state
.
user
.
searchChatlist
.
find
(
session
=>
session
.
id
===
state
.
user
.
selectId
);
return
temp
},
},
// 通过当前选择是哪个好友匹配相应的好友
selectedFriend
(
state
)
{
selectedFriend
(
state
)
{
let
friend
=
state
.
user
.
friendlist
.
find
(
friend
=>
friend
.
id
===
state
.
user
.
selectFriendId
);
let
friend
=
state
.
user
.
friendlist
.
find
(
friend
=>
friend
.
id
===
state
.
user
.
selectFriendId
);
return
friend
return
friend
},
},
messages
(
state
)
{
messages
(
state
)
{
let
session
=
state
.
user
.
chatlist
.
find
(
session
=>
session
.
id
===
state
.
user
.
selectId
);
let
session
=
state
.
user
.
chatlist
.
find
(
session
=>
session
.
id
===
state
.
user
.
selectId
);
console
.
log
(
session
)
return
session
&&
session
.
messages
return
session
.
messages
}
}
}
}
export
default
getters
export
default
getters
\ No newline at end of file
src/store/modules/user.js
View file @
82649518
This diff is collapsed.
Click to expand it.
src/utils/auth.js
View file @
82649518
...
@@ -29,4 +29,56 @@ export function getCommercialId() {
...
@@ -29,4 +29,56 @@ export function getCommercialId() {
export
function
setCommercialId
(
token
)
{
export
function
setCommercialId
(
token
)
{
return
Cookies
.
set
(
commercialIdKey
,
token
)
return
Cookies
.
set
(
commercialIdKey
,
token
)
}
}
\ No newline at end of file
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
}
]
src/utils/common.js
View file @
82649518
import
axios
from
"axios"
export
const
panelStatus
=
{
import
aliOss
from
"ali-oss"
SEARCH
:
'SEARCH'
,
//SEARCH搜索列表
CHART
:
'CHART'
//CHART回话列表
let
Authorization
=
null
}
\ No newline at end of file
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"
}
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
src/utils/tools.js
0 → 100644
View file @
82649518
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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment