Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
仟微科技
Link Wechat
提交
1a990ef7
Link Wechat
项目概览
仟微科技
/
Link Wechat
通知
48
Star
3
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Link Wechat
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1a990ef7
编写于
7月 25, 2021
作者:
X
xinla
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
优化部分冗余代码,去除废弃功能插件等
上级
c538ef76
变更
13
展开全部
隐藏空白更改
内联
并排
Showing
13 changed file
with
1679 addition
and
1357 deletion
+1679
-1357
linkwe-ui/package.json
linkwe-ui/package.json
+0
-1
linkwe-ui/public/index.html
linkwe-ui/public/index.html
+7
-6
linkwe-ui/src/views/conversation/component/chat.vue
linkwe-ui/src/views/conversation/component/chat.vue
+265
-235
linkwe-ui/src/views/conversation/component/curList.vue
linkwe-ui/src/views/conversation/component/curList.vue
+95
-66
linkwe-ui/src/views/conversation/component/cusChat.vue
linkwe-ui/src/views/conversation/component/cusChat.vue
+133
-131
linkwe-ui/src/views/conversation/component/customerList.vue
linkwe-ui/src/views/conversation/component/customerList.vue
+89
-66
linkwe-ui/src/views/conversation/component/groupList.vue
linkwe-ui/src/views/conversation/component/groupList.vue
+116
-83
linkwe-ui/src/views/conversation/component/insideList.vue
linkwe-ui/src/views/conversation/component/insideList.vue
+82
-67
linkwe-ui/src/views/conversation/component/list.vue
linkwe-ui/src/views/conversation/component/list.vue
+81
-68
linkwe-ui/src/views/conversation/content.vue
linkwe-ui/src/views/conversation/content.vue
+26
-27
linkwe-ui/src/views/conversation/page/employeeTest.vue
linkwe-ui/src/views/conversation/page/employeeTest.vue
+413
-314
linkwe-ui/src/views/conversation/page/userTest.vue
linkwe-ui/src/views/conversation/page/userTest.vue
+354
-275
linkwe-ui/src/views/conversation/security.vue
linkwe-ui/src/views/conversation/security.vue
+18
-18
未找到文件。
linkwe-ui/package.json
浏览文件 @
1a990ef7
...
...
@@ -57,7 +57,6 @@
"normalize.css"
:
"^8.0.1"
,
"nprogress"
:
"0.2.0"
,
"path-to-regexp"
:
"2.4.0"
,
"performance_test_plugins_milk"
:
"^0.0.7"
,
"promise.prototype.finally"
:
"^3.1.2"
,
"screenfull"
:
"4.2.0"
,
"sortablejs"
:
"1.8.4"
,
...
...
linkwe-ui/public/index.html
浏览文件 @
1a990ef7
...
...
@@ -7,8 +7,10 @@
<meta
name=
"renderer"
content=
"webkit"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
>
<link
rel=
"icon"
href=
"<%= BASE_URL %>favicon.ico"
>
<script
type=
"text/javascript"
src=
"//api.map.baidu.com/api?v=2.0&ak=wI3zLlyN01Ej3ZD6ZD4WiuoE8N6AC6Lm"
></script>
<title><
%=
VUE_APP_TITLE
%
></title>
<!-- <script type="text/javascript" src="//api.map.baidu.com/api?v=2.0&ak=wI3zLlyN01Ej3ZD6ZD4WiuoE8N6AC6Lm"></script> -->
<title>
<
%=
VUE_APP_TITLE
%
>
</title>
<style>
html
,
body
,
...
...
@@ -197,19 +199,18 @@
color
:
#FFF
;
opacity
:
0.5
;
}
</style>
</head>
<body>
<div
id=
"app"
>
<
!-- <
div id="loader-wrapper">
<div
id=
"loader-wrapper"
>
<div
id=
"loader"
></div>
<div
class=
"loader-section section-left"
></div>
<div
class=
"loader-section section-right"
></div>
<div
class=
"load_title"
>
正在加载系统资源,请耐心等待
</div>
</div>
-->
</div>
</div>
</body>
</html>
</html>
\ No newline at end of file
linkwe-ui/src/views/conversation/component/chat.vue
浏览文件 @
1a990ef7
<
template
>
<div
class=
"takecontent"
>
<ul>
<li
v-for=
"(item,index) in allChat"
:key=
"index"
>
<li
v-for=
"(item, index) in allChat"
:key=
"index"
>
<!--
<span
v-if=
"item.fromInfo.name"
>
{{
item
.
fromInfo
.
name
}}
</span>
-->
<div
:style=
"
{'color':item.action=='send'?'#199ed8':'#999'}">
<span
v-if=
"item.fromInfo"
>
{{
item
.
fromInfo
.
name
}}
</span>
<span
:style=
"
{'color':item.action=='send'?'#199ed8':'#999'}">
{{
parseTime
(
item
.
msgTime
)
}}
</span></div>
<div
v-if=
"item.msgType=='text'"
class=
"msgtypetext"
>
{{
item
.
text
.
content
}}
<div
:style=
"
{ color: item.action == 'send' ? '#199ed8' : '#999' }">
<span
v-if=
"item.fromInfo"
>
{{
item
.
fromInfo
.
name
}}
</span>
<span
:style=
"
{ color: item.action == 'send' ? '#199ed8' : '#999' }"
>
{{
parseTime
(
item
.
msgTime
)
}}
</span
>
</div>
<div
v-if=
"item.msgType == 'text'"
class=
"msgtypetext"
>
{{
item
.
text
.
content
}}
</div>
<div
v-else-if=
"item.msgType
==
'image'"
class=
"msgtypeimg"
>
<img
:src=
"item.image.attachment"
@
click=
"showImg(item)"
>
<div
v-else-if=
"item.msgType
==
'image'"
class=
"msgtypeimg"
>
<img
:src=
"item.image.attachment"
@
click=
"showImg(item)"
/
>
</div>
<div
v-else-if=
"item.msgType=='file'"
class=
"msgtypefile"
@
click=
"down(item.file)"
>
{{
item
.
file
.
fileName
}}
<div
v-else-if=
"item.msgType == 'file'"
class=
"msgtypefile"
@
click=
"down(item.file)"
>
{{
item
.
file
.
fileName
}}
</div>
<div
v-else-if=
"item.msgType=='voice'"
class=
"msgtypevoice"
>
<i
class=
"el-icon-microphone"
style=
" font-size: 40px; color: #199ed8;"
@
click=
"playVideo(item)"
></i>
<div
v-else-if=
"item.msgType == 'voice'"
class=
"msgtypevoice"
>
<i
class=
"el-icon-microphone"
style=
" font-size: 40px; color: #199ed8;"
@
click=
"playVideo(item)"
></i>
</div>
<div
v-else-if=
"item.msgType
==
'emotion'"
class=
"msgtypeimg"
>
<img
:src=
"item.emotion.attachment"
@
click=
"showImg(item)"
>
<div
v-else-if=
"item.msgType
==
'emotion'"
class=
"msgtypeimg"
>
<img
:src=
"item.emotion.attachment"
@
click=
"showImg(item)"
/
>
</div>
<div
v-else-if=
"item.msgType=='video'"
class=
"msgtypevideo"
>
<i
class=
"el-icon-video-play"
style=
" font-size: 40px; color: #199ed8;"
@
click=
"play(item,'video')"
></i>
<div
v-else-if=
"item.msgType == 'video'"
class=
"msgtypevideo"
>
<i
class=
"el-icon-video-play"
style=
" font-size: 40px; color: #199ed8;"
@
click=
"play(item, 'video')"
></i>
</div>
<div
v-else-if=
"item.msgType
==
'location'"
class=
"msgtypecard"
>
<div
v-else-if=
"item.msgType
==
'location'"
class=
"msgtypecard"
>
<div
class=
"card_name"
>
<el-amap
ref=
"map"
vid=
"amapDemo"
:center=
"[item.location.longitude, item.location.latitude]"
:zoom=
"zoom"
class=
"amap-demo"
style=
"pointer-events: none;"
>
<el-amap-marker
:position=
"[item.location.longitude, item.location.latitude]"
></el-amap-marker>
<el-amap
ref=
"map"
vid=
"amapDemo"
:center=
"[item.location.longitude, item.location.latitude]"
:zoom=
"zoom"
class=
"amap-demo"
style=
"pointer-events: none;"
>
<el-amap-marker
:position=
"[item.location.longitude, item.location.latitude]"
></el-amap-marker>
</el-amap>
</div>
<div
class=
"card_foot"
>
{{
item
.
location
.
address
}}
</div>
<div
class=
"card_foot"
>
{{
item
.
location
.
address
}}
</div>
</div>
<div
v-else-if=
"item.msgType
==
'weapp'"
class=
"msgtypecard"
>
<div
class=
"card_name"
>
{{
item
.
weApp
.
title
}}
</div>
<div
v-else-if=
"item.msgType
==
'weapp'"
class=
"msgtypecard"
>
<div
class=
"card_name"
>
{{
item
.
weApp
.
title
}}
</div>
<div
class=
"card_foot"
>
小程序
</div>
</div>
<div
v-else-if=
"item.msgType
==
'card'"
class=
"msgtypecard "
>
<div
class=
"card_name"
>
{{
item
.
card
.
corpName
}}
</div>
<div
v-else-if=
"item.msgType
==
'card'"
class=
"msgtypecard "
>
<div
class=
"card_name"
>
{{
item
.
card
.
corpName
}}
</div>
<div
class=
"card_foot"
>
个人名片
</div>
</div>
</li>
</ul>
<div
class=
"shabowbox"
v-show=
"dia"
>
<div
class=
"close"
@
click=
"dia=false"
><i
class=
"el-icon-circle-close"
></i></div>
<div
class=
"close"
@
click=
"dia = false"
>
<i
class=
"el-icon-circle-close"
></i>
</div>
<div
class=
"shabowboxvidoe"
>
<video-player
class=
"video-player vjs-custom-skin"
ref=
"videoPlayer"
id=
"videoPlayer"
:playsinline=
"true"
:options=
"playerOptions"
></video-player>
<video-player
class=
"video-player vjs-custom-skin"
ref=
"videoPlayer"
id=
"videoPlayer"
:playsinline=
"true"
:options=
"playerOptions"
></video-player>
</div>
</div>
<div
class=
"shabowbox"
v-show=
"diavioce"
>
<div
class=
"close"
@
click=
"vioceClose"
><i
class=
"el-icon-circle-close"
></i></div>
<div
class=
"close"
@
click=
"vioceClose"
>
<i
class=
"el-icon-circle-close"
></i>
</div>
<div
class=
"shabowboxvidoe shabowboxaudio"
>
<AudioPlayer
:audio-list=
"vioceSrc"
ref=
"AudioPlayer"
:before-play=
"onBeforePlay"
/>
<AudioPlayer
:audio-list=
"vioceSrc"
ref=
"AudioPlayer"
:before-play=
"onBeforePlay"
/>
</div>
</div>
<el-dialog
:visible.sync=
"dialogVisible"
width=
"30%"
>
<img
:src=
"imgSrc"
style=
"width:100%;max-height:600px"
>
<span
slot=
"footer"
class=
"dialog-footer"
>
</span>
<img
:src=
"imgSrc"
style=
"width:100%;max-height:600px"
/>
<span
slot=
"footer"
class=
"dialog-footer"
>
</span>
</el-dialog>
</div>
</
template
>
<
script
>
import
{
AMapManager
}
from
'
vue-amap
'
;
import
'
video.js/dist/video-js.css
'
import
'
vue-video-player/src/custom-theme.css
'
import
{
AMapManager
}
from
'
vue-amap
'
import
'
video.js/dist/video-js.css
'
import
'
vue-video-player/src/custom-theme.css
'
import
{
parseTime
,
yearMouthDay
}
from
'
@/utils/common.js
'
export
default
{
components
:
{
AMapManager
},
props
:
{
allChat
:
{
type
:
Array
,
defluat
:
()
=>
[]
}
},
mounted
()
{
},
data
()
{
return
{
dia
:
false
,
diavioce
:
false
,
dialogVisible
:
false
,
imgSrc
:
''
,
vioceSrc
:
[],
playerOptions
:
{
playbackRates
:
[
0.7
,
1.0
,
1.5
,
2.0
],
//播放速度
autoplay
:
false
,
//如果true,浏览器准备好时开始回放。
controls
:
true
,
//控制条
preload
:
'
auto
'
,
//视频预加载
muted
:
false
,
//默认情况下将会消除任何音频。
loop
:
false
,
//导致视频一结束就重新开始。
language
:
'
zh-CN
'
,
aspectRatio
:
'
16:9
'
,
// 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
fluid
:
true
,
// 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
sources
:
[{
import
{
parseTime
,
yearMouthDay
}
from
'
@/utils/common.js
'
export
default
{
components
:
{
AMapManager
},
props
:
{
allChat
:
{
type
:
Array
,
defluat
:
()
=>
[]
}
},
mounted
()
{},
data
()
{
return
{
dia
:
false
,
diavioce
:
false
,
dialogVisible
:
false
,
imgSrc
:
''
,
vioceSrc
:
[],
playerOptions
:
{
playbackRates
:
[
0.7
,
1.0
,
1.5
,
2.0
],
//播放速度
autoplay
:
false
,
//如果true,浏览器准备好时开始回放。
controls
:
true
,
//控制条
preload
:
'
auto
'
,
//视频预加载
muted
:
false
,
//默认情况下将会消除任何音频。
loop
:
false
,
//导致视频一结束就重新开始。
language
:
'
zh-CN
'
,
aspectRatio
:
'
16:9
'
,
// 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
fluid
:
true
,
// 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
sources
:
[
{
type
:
'
video/mp4
'
,
src
:
'
https://v-cdn.zjol.com.cn/280443.mp4
'
//你所放置的视频的地址,最好是放在服务器上
}
],
poster
:
""
,
//你的封面地址(覆盖在视频上面的图片)
width
:
document
.
documentElement
.
clientWidth
,
height
:
'
475
'
,
notSupportedMessage
:
'
此视频暂无法播放,请稍后再试
'
//允许覆盖Video.js无法播放媒体源时显示的默认信息。
},
}
],
poster
:
''
,
//你的封面地址(覆盖在视频上面的图片)
width
:
document
.
documentElement
.
clientWidth
,
height
:
'
475
'
,
notSupportedMessage
:
'
此视频暂无法播放,请稍后再试
'
//允许覆盖Video.js无法播放媒体源时显示的默认信息。
},
zoom
:
15
,
center
:
[
117.148118
,
36.660223
],
markers
:
[{
zoom
:
15
,
center
:
[
117.148118
,
36.660223
],
markers
:
[
{
position
:
[
117.148118
,
36.660223
],
visible
:
false
,
draggable
:
false
,
}]
}
draggable
:
false
}
]
}
},
methods
:
{
vioceClose
()
{
this
.
diavioce
=
false
const
mp3
=
this
.
$refs
.
AudioPlayer
mp3
.
pause
()
},
methods
:
{
vioceClose
()
{
this
.
diavioce
=
false
const
mp3
=
this
.
$refs
.
AudioPlayer
;
mp3
.
pause
()
},
playVideo
(
e
)
{
this
.
vioceSrc
=
[
e
.
voice
.
attachment
]
this
.
diavioce
=
true
;
},
onBeforePlay
(
next
)
{
next
()
// 开始播放
},
showImg
(
e
)
{
this
.
imgSrc
=
e
.
image
.
attachment
;
this
.
dialogVisible
=
true
},
play
(
e
)
{
this
.
dia
=
true
const
player
=
this
.
$refs
.
videoPlayer
.
player
this
.
playerOptions
[
'
sources
'
][
0
][
'
src
'
]
=
e
.
video
.
attachment
;
player
.
play
()
},
down
(
e
)
{
const
url
=
window
.
URL
.
createObjectURL
(
new
Blob
([
e
.
attachment
],
{
type
:
'
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
'
}))
const
link
=
document
.
createElement
(
'
a
'
)
link
.
href
=
url
link
.
setAttribute
(
'
download
'
,
e
.
filename
)
// 下载文件的名称及文件类型后缀
document
.
body
.
appendChild
(
link
)
link
.
click
()
document
.
body
.
removeChild
(
link
);
// 下载完成移除元素
window
.
URL
.
revokeObjectURL
(
url
);
// 释放掉blob对象
}
playVideo
(
e
)
{
this
.
vioceSrc
=
[
e
.
voice
.
attachment
]
this
.
diavioce
=
true
},
onBeforePlay
(
next
)
{
next
()
// 开始播放
},
showImg
(
e
)
{
this
.
imgSrc
=
e
.
image
.
attachment
this
.
dialogVisible
=
true
},
play
(
e
)
{
this
.
dia
=
true
const
player
=
this
.
$refs
.
videoPlayer
.
player
this
.
playerOptions
[
'
sources
'
][
0
][
'
src
'
]
=
e
.
video
.
attachment
player
.
play
()
},
down
(
e
)
{
const
url
=
window
.
URL
.
createObjectURL
(
new
Blob
([
e
.
attachment
],
{
type
:
'
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
'
})
)
const
link
=
document
.
createElement
(
'
a
'
)
link
.
href
=
url
link
.
setAttribute
(
'
download
'
,
e
.
filename
)
// 下载文件的名称及文件类型后缀
document
.
body
.
appendChild
(
link
)
link
.
click
()
document
.
body
.
removeChild
(
link
)
// 下载完成移除元素
window
.
URL
.
revokeObjectURL
(
url
)
// 释放掉blob对象
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
*
{
padding
:
0
;
margin
:
0
;
}
//
* {
//
padding: 0;
//
margin: 0;
//
}
#videoPlayer
/
deep
/
.vjs-tech
{
height
:
450px
;
#videoPlayer
/
deep
/
.vjs-tech
{
height
:
450px
;
}
.shabowbox
{
position
:
fixed
;
width
:
100%
;
height
:
100%
;
background
:
rgba
(
0
,
0
,
0
,
0
.4
);
left
:
0
;
top
:
0
;
z-index
:
2000
;
}
.shabowboxvidoe
{
position
:
fixed
;
width
:
800px
;
height
:
475px
;
left
:
50%
;
margin-left
:
-400px
;
top
:
50%
;
margin-top
:
-235px
;
z-index
:
2001
;
background
:
#fff
;
}
.shabowboxaudio
{
height
:
125px
;
padding
:
12px
;
}
.close
{
position
:
fixed
;
width
:
50px
;
height
:
50px
;
right
:
10px
;
z-index
:
2012
;
top
:
10px
;
text-align
:
center
;
line-height
:
50px
;
font-size
:
20px
;
color
:
#fff
;
cursor
:
pointer
;
font-size
:
43px
;
}
.takecontent
{
text-align
:
left
;
width
:
100%
;
height
:
600px
;
overflow-y
:
scroll
;
::-webkit-scrollbar
{
display
:
none
;
}
.shabowbox
{
position
:
fixed
;
width
:
100%
;
height
:
100%
;
background
:
rgba
(
0
,
0
,
0
,
0
.4
);
left
:
0
;
top
:
0
;
z-index
:
2000
;
ul
li
{
padding
:
8px
;
}
.shabowboxvidoe
{
position
:
fixed
;
width
:
800px
;
height
:
475px
;
left
:
50%
;
margin-left
:
-400px
;
top
:
50%
;
margin-top
:
-235px
;
;
z-index
:
2001
;
background
:
#fff
;
.msgtypetext
{
padding
:
10px
0
;
}
.shabowboxaudio
{
height
:
125px
;
padding
:
12px
;
.msgtypevoice
{
margin
:
10px
;
}
.close
{
position
:
fixed
;
width
:
50px
;
height
:
50px
;
right
:
10px
;
z-index
:
2012
;
top
:
10px
;
text-align
:
center
;
line-height
:
50px
;
font-size
:
20px
;
color
:
#FFF
;
.msgtypefile
{
margin
:
10px
;
width
:
200px
;
height
:
40px
;
line-height
:
40px
;
cursor
:
pointer
;
font-size
:
43px
;
color
:
#199ed8
;
text-indent
:
10px
;
box-shadow
:
0
1px
4px
0
rgba
(
0
,
0
,
0
,
0
.2
)
,
0
1px
4px
0
rgba
(
0
,
0
,
0
,
0
.19
);
}
.takecontent
{
text-align
:
left
;
width
:
100%
;
height
:
600px
;
overflow-y
:
scroll
;
::-webkit-scrollbar
{
display
:
none
;
}
ul
li
{
padding
:
8px
;
}
.msgtypetext
{
padding
:
10px
0
;
}
.msgtypevoice
{
margin
:
10px
;
}
.msgtypefile
{
margin
:
10px
;
width
:
200px
;
height
:
40px
;
line-height
:
40px
;
cursor
:
pointer
;
color
:
#199ed8
;
text-indent
:
10px
;
box-shadow
:
0
1px
4px
0
rgba
(
0
,
0
,
0
,
0
.2
)
,
0
1px
4px
0
rgba
(
0
,
0
,
0
,
0
.19
);
}
.card_name
{
width
:
320px
;
height
:
105px
;
line-height
:
80px
;
text-indent
:
10px
;
}
.card_name
{
width
:
320px
;
height
:
105px
;
line-height
:
80px
;
text-indent
:
10px
;
}
.msgtypevideo
{
margin
:
10px
;
.msgtypevideo
{
margin
:
10px
;
cursor
:
pointer
;
cursor
:
pointer
;
border-radius
:
8px
;
}
border-radius
:
8px
;
}
.msgtypeimg
{
width
:
100px
;
height
:
80px
;
margin
:
10px
;
.msgtype
img
{
img
{
width
:
100px
;
height
:
80px
;
margin
:
10px
;
img
{
width
:
100px
;
height
:
80px
;
}
}
}
.msgtypecard
{
width
:
320px
;
height
:
140px
;
margin
:
10px
;
border-radius
:
8px
;
-webkit-box-shadow
:
0
4px
8px
0
rgba
(
0
,
0
,
0
,
0
.2
)
,
0
6px
8px
0
rgba
(
0
,
0
,
0
,
0
.19
);
box-shadow
:
0
4px
8px
0
rgba
(
0
,
0
,
0
,
0
.2
)
,
0
6px
8px
0
rgba
(
0
,
0
,
0
,
0
.19
);
position
:
relative
;
.msgtypecard
{
width
:
320px
;
height
:
140px
;
margin
:
10px
;
border-radius
:
8px
;
-webkit-box-shadow
:
0
4px
8px
0
rgba
(
0
,
0
,
0
,
0
.2
)
,
0
6px
8px
0
rgba
(
0
,
0
,
0
,
0
.19
);
box-shadow
:
0
4px
8px
0
rgba
(
0
,
0
,
0
,
0
.2
)
,
0
6px
8px
0
rgba
(
0
,
0
,
0
,
0
.19
);
position
:
relative
;
.card_foot
{
position
:
absolute
;
height
:
20px
;
border-top
:
1px
solid
#efefef
;
text-align
:
left
;
bottom
:
15px
;
padding
:
10px
;
color
:
#333
;
font-weight
:
bold
;
width
:
100%
;
}
.card_foot
{
position
:
absolute
;
height
:
20px
;
border-top
:
1px
solid
#efefef
;
text-align
:
left
;
bottom
:
15px
;
padding
:
10px
;
color
:
#333
;
font-weight
:
bold
;
width
:
100%
;
}
}
}
</
style
>
linkwe-ui/src/views/conversation/component/curList.vue
浏览文件 @
1a990ef7
<
template
>
<div
class=
"list"
v-loading=
"loading"
>
<div
v-if=
"personList.length>=1"
>
<ul>
<li
v-for=
"(item,index) in personList"
:key=
"index"
@
click=
"liClick(item)"
>
<el-row
style=
"padding:10px"
>
<span
class=
"fl"
>
<img
:src=
"item.finalChatContext.fromInfo.avatar"
></span>
<span
class=
"fl"
style=
"margin-left:8px;"
>
<p>
{{
item
.
roomInfo
.
groupName
}}
<span
class=
"fr gray"
>
{{
parseTime
(
item
.
finalChatContext
.
msgtime
)
}}
</span></p>
<p
class=
"gray "
v-if=
"item.finalChatContext.text"
>
{{
item
.
finalChatContext
.
text
.
content
}}
</p>
</span>
</el-row>
</li>
</ul>
</div>
<div
v-else
></div>
<div
class=
"list"
v-loading=
"loading"
>
<div
v-if=
"personList.length >= 1"
>
<ul>
<li
v-for=
"(item, index) in personList"
:key=
"index"
@
click=
"liClick(item)"
>
<el-row
style=
"padding:10px"
>
<span
class=
"fl"
>
<img
:src=
"item.finalChatContext.fromInfo.avatar"
/></span>
<span
class=
"fl"
style=
"margin-left:8px;"
>
<p>
{{
item
.
roomInfo
.
groupName
}}
<span
class=
"fr gray"
>
{{
parseTime
(
item
.
finalChatContext
.
msgtime
)
}}
</span>
</p>
<p
class=
"gray "
v-if=
"item.finalChatContext.text"
>
{{
item
.
finalChatContext
.
text
.
content
}}
</p>
</span>
</el-row>
</li>
</ul>
</div>
<div
v-else
></div>
</div>
</
template
>
<
script
>
import
{
parseTime
}
from
'
@/utils/common.js
'
export
default
{
props
:
{
personList
:
{
type
:
Array
,
defluat
:
()
=>
[]
},
loading
:
{
type
:
Boolean
,
defluat
:
false
},
},
data
()
{
return
{
loadings
:
true
}
},
methods
:{
liClick
(
e
){
this
.
$emit
(
'
chatFn
'
,
e
)
}
}
import
{
parseTime
}
from
'
@/utils/common.js
'
export
default
{
props
:
{
personList
:
{
type
:
Array
,
defluat
:
()
=>
[]
},
loading
:
{
type
:
Boolean
,
defluat
:
false
}
},
data
()
{
return
{
loadings
:
true
}
},
methods
:
{
liClick
(
e
)
{
this
.
$emit
(
'
chatFn
'
,
e
)
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
*
{
padding
:
0
;
margin
:
0
;}
.fl
{
float
:
left
;}
.list
{
overflow-y
:scroll
;
height
:
652px
;
::-webkit-scrollbar
{
display
:
none
;
}
// * {
// padding: 0;
// margin: 0;
// }
.fl
{
float
:
left
;
}
.list
{
overflow-y
:
scroll
;
height
:
652px
;
::-webkit-scrollbar
{
display
:
none
;
}
/
deep
/
.el-loading-spinner
{
margin-top
:
20px
;}
.fr
{
float
:right
;}
.gray
{
color
:
#999
;}
.padt10
{
padding-top
:
10px
;}
ul
li
{
overflow
:
hidden
;
border-bottom
:
1px
solid
#efefef
;
cursor
:
pointer
;
p
{
white-space
:nowrap
;
overflow
:hidden
;
text-overflow
:ellipsis
;}
:hover
{
background
:
#efefef
;}
img
{
width
:
40px
;
height
:
40px
;
float
:
left
}
}
/
deep
/
.el-loading-spinner
{
margin-top
:
20px
;
}
.fr
{
float
:
right
;
}
.gray
{
color
:
#999
;
}
.padt10
{
padding-top
:
10px
;
}
ul
li
{
overflow
:
hidden
;
border-bottom
:
1px
solid
#efefef
;
cursor
:
pointer
;
p
{
white-space
:
nowrap
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
}
:hover
{
background
:
#efefef
;
}
img
{
width
:
40px
;
height
:
40px
;
float
:
left
;
}
</
style
>
\ No newline at end of file
}
}
</
style
>
linkwe-ui/src/views/conversation/component/cusChat.vue
浏览文件 @
1a990ef7
<
template
>
<div
class=
"takecontent"
>
<ul>
<li
v-for=
"(item,index) in allChat"
:key=
"index"
>
<div
:style=
"
{'color':item.action=='send'?'#199ed8':'#999'}">
{{
item
.
from
}}
<span
:style=
"
{'color':item.action=='send'?'#199ed8':'#999'}">
{{
parseTime
(
item
.
msgtime
)
}}
</span></div>
<div
v-if=
"item.msgtype=='text'"
class=
"msgtypetext"
>
{{
item
.
text
.
content
}}
</div>
<div
v-else-if=
"item.msgtype=='image'"
class=
"msgtypeimg"
>
<img
:src=
"item.image.attachment"
>
</div>
<div
v-else-if=
"item.msgtype=='file'"
class=
"msgtypefile"
@
click=
"down(item.file)"
>
{{
item
.
file
.
filename
}}
</div>
<div
v-else-if=
"item.msgtype=='voice'"
class=
"msgtypevoice"
>
<i
class=
"el-icon-video-play"
@
click=
"play(item,'voice')"
></i>
</div>
<div
v-else-if=
"item.msgtype=='video'"
class=
"msgtypevideo"
>
<i
class=
"el-icon-video-play"
@
click=
"play(item,'video')"
></i>
</div>
<div
v-else-if=
"item.msgtype=='location'"
class=
"msgtypecard "
>
<div
class=
"card_name"
></div>
<div
class=
"card_foot"
>
{{
item
.
location
.
address
}}
</div>
</div>
<div
v-else-if=
"item.msgtype=='weapp'"
class=
"msgtypecard "
>
<div
class=
"card_name"
></div>
<div
class=
"card_foot"
>
小程序
</div>
</div>
<div
v-else-if=
"item.msgtype=='card'"
class=
"msgtypecard "
>
<div
class=
"card_name"
>
{{
item
.
card
.
corpname
}}
</div>
<div
class=
"card_foot"
>
个人名片
</div>
</div>
</li>
</ul>
<el-dialog
:visible.sync=
"dia"
:show-close=
'false'
>
<p>
播放
</p>
<div
class=
"takecontent"
>
<ul>
<li
v-for=
"(item, index) in allChat"
:key=
"index"
>
<div
:style=
"
{ color: item.action == 'send' ? '#199ed8' : '#999' }">
{{
item
.
from
}}
<span
:style=
"
{ color: item.action == 'send' ? '#199ed8' : '#999' }"
>
{{
parseTime
(
item
.
msgtime
)
}}
</span
>
</div>
<div
v-if=
"item.msgtype == 'text'"
class=
"msgtypetext"
>
{{
item
.
text
.
content
}}
</div>
<div
v-else-if=
"item.msgtype == 'image'"
class=
"msgtypeimg"
>
<img
:src=
"item.image.attachment"
/>
</div>
<div
v-else-if=
"item.msgtype == 'file'"
class=
"msgtypefile"
@
click=
"down(item.file)"
>
{{
item
.
file
.
filename
}}
</div>
<div
v-else-if=
"item.msgtype == 'voice'"
class=
"msgtypevoice"
>
<i
class=
"el-icon-video-play"
@
click=
"play(item, 'voice')"
></i>
</div>
<div
v-else-if=
"item.msgtype == 'video'"
class=
"msgtypevideo"
>
<i
class=
"el-icon-video-play"
@
click=
"play(item, 'video')"
></i>
</div>
</el-dialog>
</div>
<div
v-else-if=
"item.msgtype == 'location'"
class=
"msgtypecard "
>
<div
class=
"card_name"
></div>
<div
class=
"card_foot"
>
{{
item
.
location
.
address
}}
</div>
</div>
<div
v-else-if=
"item.msgtype == 'weapp'"
class=
"msgtypecard "
>
<div
class=
"card_name"
></div>
<div
class=
"card_foot"
>
小程序
</div>
</div>
<div
v-else-if=
"item.msgtype == 'card'"
class=
"msgtypecard "
>
<div
class=
"card_name"
>
{{
item
.
card
.
corpname
}}
</div>
<div
class=
"card_foot"
>
个人名片
</div>
</div>
</li>
</ul>
<el-dialog
:visible.sync=
"dia"
:show-close=
"false"
>
<p>
播放
</p>
</el-dialog>
</div>
</
template
>
<
script
>
import
{
parseTime
,
yearMouthDay
,
}
from
'
@/utils/common.js
'
export
default
{
props
:
{
allChat
:
{
type
:
Array
,
defluat
:
()
=>
[]
}
},
import
{
parseTime
,
yearMouthDay
}
from
'
@/utils/common.js
'
export
default
{
props
:
{
allChat
:
{
type
:
Array
,
defluat
:
()
=>
[]
}
},
data
()
{
return
{
dia
:
false
}
},
methods
:
{
play
()
{
this
.
dia
=
true
},
down
(
e
){
//下载文件
}
}
data
()
{
return
{
dia
:
false
}
},
methods
:
{
play
()
{
this
.
dia
=
true
},
down
(
e
)
{
//下载文件
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
*
{
padding
:
0
;
margin
:
0
;
}
.takecontent
{
text-align
:
left
;
width
:
100%
;
height
:
600px
;
overflow-y
:
scroll
;
::-webkit-scrollbar
{
display
:
none
;
}
.takecontent
{
text-align
:
left
;
width
:
100%
;
height
:
600px
;
overflow-y
:
scroll
;
ul
li
{
padding
:
8px
;
}
::-webkit-scrollbar
{
display
:
none
;
}
.msgtypetext
{
padding
:
10px
0
;
}
ul
li
{
padding
:
8px
;
}
.msgtypevoice
{
margin
:
10px
;
}
.msgtypetext
{
padding
:
10px
0
;
}
.msgtypefile
{
margin
:
10px
;
width
:
200px
;
height
:
40px
;
line-height
:
40px
;
cursor
:
pointer
;
color
:
#199ed8
;
text-indent
:
10px
;
box-shadow
:
0
1px
4px
0
rgba
(
0
,
0
,
0
,
0
.2
)
,
0
1px
4px
0
rgba
(
0
,
0
,
0
,
0
.19
);
}
.card_name
{
line-height
:
80px
;
text-indent
:
10px
;}
.msgtypevideo
{
margin
:
10px
;
font-size
:
40px
;
cursor
:
pointer
;
color
:
#199ed8
;
border-radius
:
8px
;
}
.msgtypevoice
{
margin
:
10px
;
}
.msgtypeimg
{
width
:
100px
;
height
:
80px
;
margin
:
10px
;
}
.msgtypefile
{
margin
:
10px
;
width
:
200px
;
height
:
40px
;
line-height
:
40px
;
cursor
:
pointer
;
color
:
#199ed8
;
text-indent
:
10px
;
box-shadow
:
0
1px
4px
0
rgba
(
0
,
0
,
0
,
0
.2
)
,
0
1px
4px
0
rgba
(
0
,
0
,
0
,
0
.19
);
}
.card_name
{
line-height
:
80px
;
text-indent
:
10px
;
}
.msgtypevideo
{
margin
:
10px
;
font-size
:
40px
;
cursor
:
pointer
;
color
:
#199ed8
;
border-radius
:
8px
;
}
.msgtypecard
{
width
:
300px
;
height
:
140px
;
margin
:
10px
;
border-radius
:
8px
;
-webkit-box-shadow
:
0
4px
8px
0
rgba
(
0
,
0
,
0
,
0
.2
)
,
0
6px
8px
0
rgba
(
0
,
0
,
0
,
0
.19
);
box-shadow
:
0
4px
8px
0
rgba
(
0
,
0
,
0
,
0
.2
)
,
0
6px
8px
0
rgba
(
0
,
0
,
0
,
0
.19
);
position
:
relative
;
.msgtypeimg
{
width
:
100px
;
height
:
80px
;
margin
:
10px
;
}
.card_foot
{
position
:
absolute
;
height
:
20px
;
border-top
:
1px
solid
#efefef
;
text-align
:
left
;
bottom
:
15px
;
padding
:
10px
;
color
:
#333
;
font-weight
:
bold
;
width
:
100%
;
}
}
.msgtypecard
{
width
:
300px
;
height
:
140px
;
margin
:
10px
;
border-radius
:
8px
;
-webkit-box-shadow
:
0
4px
8px
0
rgba
(
0
,
0
,
0
,
0
.2
)
,
0
6px
8px
0
rgba
(
0
,
0
,
0
,
0
.19
);
box-shadow
:
0
4px
8px
0
rgba
(
0
,
0
,
0
,
0
.2
)
,
0
6px
8px
0
rgba
(
0
,
0
,
0
,
0
.19
);
position
:
relative
;
.card_foot
{
position
:
absolute
;
height
:
20px
;
border-top
:
1px
solid
#efefef
;
text-align
:
left
;
bottom
:
15px
;
padding
:
10px
;
color
:
#333
;
font-weight
:
bold
;
width
:
100%
;
}
</
style
>
\ No newline at end of file
}
}
</
style
>
linkwe-ui/src/views/conversation/component/customerList.vue
浏览文件 @
1a990ef7
<
template
>
<div
class=
"list"
v-loading=
"loading"
>
<div
v-if=
"personList.length>=1"
>
<ul>
<li
v-for=
"(item,index) in personList"
:key=
"index"
@
click=
"liClick(item)"
>
<el-row
style=
"padding:10px"
>
<el-col
:span=
"3"
><img
:src=
"item.receiveWeUser.avatarMediaid"
></el-col>
<el-col
:span=
"21"
>
<p>
{{
item
.
receiveWeUser
.
name
}}
<span
class=
"fr gray"
>
{{
parseTime
(
item
.
finalChatContext
.
msgtime
)
}}
</span></p>
<p
class=
"gray padt10"
v-if=
"item.finalChatContext.text"
>
{{
item
.
finalChatContext
.
text
.
content
}}
</p>
</el-col>
</el-row>
</li>
</ul>
</div>
<div
v-else
></div>
<div
class=
"list"
v-loading=
"loading"
>
<div
v-if=
"personList.length >= 1"
>
<ul>
<li
v-for=
"(item, index) in personList"
:key=
"index"
@
click=
"liClick(item)"
>
<el-row
style=
"padding:10px"
>
<el-col
:span=
"3"
><img
:src=
"item.receiveWeUser.avatarMediaid"
/></el-col>
<el-col
:span=
"21"
>
<p>
{{
item
.
receiveWeUser
.
name
}}
<span
class=
"fr gray"
>
{{
parseTime
(
item
.
finalChatContext
.
msgtime
)
}}
</span>
</p>
<p
class=
"gray padt10"
v-if=
"item.finalChatContext.text"
>
{{
item
.
finalChatContext
.
text
.
content
}}
</p>
</el-col>
</el-row>
</li>
</ul>
</div>
<div
v-else
></div>
</div>
</
template
>
<
script
>
import
{
parseTime
}
from
'
@/utils/common.js
'
export
default
{
props
:
{
personList
:
{
type
:
Array
,
defluat
:
()
=>
[]
},
loading
:
{
type
:
Boolean
,
defluat
:
false
},
},
data
()
{
return
{
loadings
:
true
}
},
methods
:{
liClick
(
e
){
this
.
$emit
(
'
chatFn
'
,
e
)
}
}
import
{
parseTime
}
from
'
@/utils/common.js
'
export
default
{
props
:
{
personList
:
{
type
:
Array
,
defluat
:
()
=>
[]
},
loading
:
{
type
:
Boolean
,
defluat
:
false
}
},
data
()
{
return
{
loadings
:
true
}
},
methods
:
{
liClick
(
e
)
{
this
.
$emit
(
'
chatFn
'
,
e
)
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
*
{
padding
:
0
;
margin
:
0
;}
.list
{
overflow-y
:scroll
;
height
:
651px
;
::-webkit-scrollbar
{
display
:
none
;
}
.list
{
overflow-y
:
scroll
;
height
:
651px
;
::-webkit-scrollbar
{
display
:
none
;
}
/
deep
/
.el-loading-spinner
{
margin-top
:
20px
;}
.fr
{
float
:right
;}
.gray
{
color
:
#999
;}
.padt10
{
padding-top
:
10px
;}
ul
li
{
padding
:
10px
;
overflow
:
hidden
;
border-bottom
:
1px
solid
#efefef
;
cursor
:
pointer
;
p
{
white-space
:nowrap
;
overflow
:hidden
;
text-overflow
:ellipsis
;}
:hover
{
background
:
#efefef
;}
img
{
width
:
40px
;
height
:
40px
;
float
:
left
}
}
/
deep
/
.el-loading-spinner
{
margin-top
:
20px
;
}
.fr
{
float
:
right
;
}
.gray
{
color
:
#999
;
}
.padt10
{
padding-top
:
10px
;
}
ul
li
{
padding
:
10px
;
overflow
:
hidden
;
border-bottom
:
1px
solid
#efefef
;
cursor
:
pointer
;
p
{
white-space
:
nowrap
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
}
:hover
{
background
:
#efefef
;
}
img
{
width
:
40px
;
height
:
40px
;
float
:
left
;
}
</
style
>
\ No newline at end of file
}
}
</
style
>
linkwe-ui/src/views/conversation/component/groupList.vue
浏览文件 @
1a990ef7
<
template
>
<div
class=
"list"
v-loading=
"loading"
>
<div
v-if=
"personList"
>
<ul>
<li
v-for=
"(item,index) in personList"
:key=
"index"
@
click=
"liClick(item)"
>
<el-row
style=
"padding:10px"
v-if=
"item.finalChatContext.msgtype=='text'"
>
<span
class=
"fl"
>
<div
class=
"ninebox"
>
<ul
v-if=
"item.roomInfo"
>
<li
v-for=
"(a,i) in item.roomInfo.avatar.split(',')"
:key=
"i"
><img
:src=
"a"
></li>
</ul>
</div>
</span>
<span
class=
"fl"
style=
"margin-left:8px;line-height:60px"
>
<p>
{{
item
.
finalChatContext
.
roomInfo
.
name
}}
<span
class=
"fr gray"
>
{{
parseTime
(
item
.
finalChatContext
.
fromInfo
.
updateTime
)
}}
</span></p>
<p
class=
"gray"
v-if=
"item.finalChatContext.fromInfo"
>
{{
item
.
finalChatContext
.
fromInfo
.
name
}}
:
{{
item
.
finalChatContext
.
text
.
content
}}
</p>
</span>
</el-row>
<!--
<el-row
style=
"padding:10px"
v-if=
"item.finalChatContext.msgtype=='file'"
>
<div
class=
"list"
v-loading=
"loading"
>
<div
v-if=
"personList"
>
<ul>
<li
v-for=
"(item, index) in personList"
:key=
"index"
@
click=
"liClick(item)"
>
<el-row
style=
"padding:10px"
v-if=
"item.finalChatContext.msgtype == 'text'"
>
<span
class=
"fl"
>
<div
class=
"ninebox"
>
<ul
v-if=
"item.roomInfo"
>
<li
v-for=
"(a, i) in item.roomInfo.avatar.split(',')"
:key=
"i"
>
<img
:src=
"a"
/>
</li>
</ul>
</div>
</span>
<span
class=
"fl"
style=
"margin-left:8px;line-height:60px"
>
<p>
{{
item
.
finalChatContext
.
roomInfo
.
name
}}
<span
class=
"fr gray"
>
{{
parseTime
(
item
.
finalChatContext
.
fromInfo
.
updateTime
)
}}
</span>
</p>
<p
class=
"gray"
v-if=
"item.finalChatContext.fromInfo"
>
{{
item
.
finalChatContext
.
fromInfo
.
name
}}
:
{{
item
.
finalChatContext
.
text
.
content
}}
</p>
</span>
</el-row>
<!--
<el-row
style=
"padding:10px"
v-if=
"item.finalChatContext.msgtype=='file'"
>
<el-col
:span=
"3"
>
</el-col>
<el-col
:span=
"21"
>
<p><span
class=
"fr gray"
>
{{
parseTime
(
item
.
finalChatContext
.
msgtime
)
}}
</span></p>
...
...
@@ -26,75 +46,88 @@
</p>
</el-col>
</el-row>
-->
</li>
</ul>
</div>
<div
v-else
></div>
</li>
</ul>
</div>
<div
v-else
></div>
</div>
</
template
>
<
script
>
import
{
parseTime
}
from
'
@/utils/common.js
'
export
default
{
props
:
{
personList
:
{
type
:
Array
,
defluat
:
()
=>
[]
},
loading
:
{
type
:
Boolean
,
defluat
:
false
},
},
data
()
{
return
{
loadings
:
true
}
},
methods
:{
liClick
(
e
){
this
.
$emit
(
'
groupFn
'
,
e
)
}
}
import
{
parseTime
}
from
'
@/utils/common.js
'
export
default
{
props
:
{
personList
:
{
type
:
Array
,
defluat
:
()
=>
[]
},
loading
:
{
type
:
Boolean
,
defluat
:
false
}
},
data
()
{
return
{
loadings
:
true
}
},
methods
:
{
liClick
(
e
)
{
this
.
$emit
(
'
groupFn
'
,
e
)
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
*
{
padding
:
0
;
.fl
{
float
:
left
;}
margin
:
0
;}
.ninebox
{
width
:
54px
;
height
:
52px
;
border
:
1px
solid
#199ed8
;;
ul
li
{
float
:
left
;
width
:
15px
;
height
:
15px
;
padding
:
0
!
important
;
margin
:
1px
1px
1px
1px
;
}}
.list
{
overflow-y
:scroll
;
::-webkit-scrollbar
{
display
:
none
;
}
.ninebox
{
width
:
54px
;
height
:
52px
;
border
:
1px
solid
#199ed8
;
ul
li
{
float
:
left
;
width
:
15px
;
height
:
15px
;
padding
:
0
!
important
;
margin
:
1px
1px
1px
1px
;
}
}
.list
{
overflow-y
:
scroll
;
/
deep
/
.el-loading-spinner
{
margin-top
:
20px
;}
.fr
{
float
:right
;}
.gray
{
color
:
#999
;}
.padt10
{
padding-top
:
10px
;}
ul
li
{
padding
:
3px
10px
;
overflow
:
hidden
;
border-bottom
:
1px
solid
#efefef
;
cursor
:
pointer
;
p
{
white-space
:nowrap
;
overflow
:hidden
;
text-overflow
:ellipsis
;}
:hover
{
background
:
#efefef
;}
img
{
width
:
100%
;
height
:
100%
;
float
:
left
}
}
::-webkit-scrollbar
{
display
:
none
;
}
/
deep
/
.el-loading-spinner
{
margin-top
:
20px
;
}
.fr
{
float
:
right
;
}
.gray
{
color
:
#999
;
}
.padt10
{
padding-top
:
10px
;
}
ul
li
{
padding
:
3px
10px
;
overflow
:
hidden
;
border-bottom
:
1px
solid
#efefef
;
cursor
:
pointer
;
p
{
white-space
:
nowrap
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
}
:hover
{
background
:
#efefef
;
}
img
{
width
:
100%
;
height
:
100%
;
float
:
left
;
}
</
style
>
\ No newline at end of file
}
}
</
style
>
linkwe-ui/src/views/conversation/component/insideList.vue
浏览文件 @
1a990ef7
<
template
>
<div
class=
"list"
v-loading=
"loading"
>
<div
v-if=
"personList.length>=1"
>
<ul>
<li
v-for=
"(item,index) in personList"
:key=
"index"
@
click=
"liClick(item)"
>
<el-row
style=
"padding:10px"
>
<span
class=
"fl"
>
<img
:src=
"item.finalChatContext.fromInfo.avatarMediaid"
></span>
<span
class=
"fl"
style=
"margin-left:8px"
>
<p>
{{
item
.
finalChatContext
.
fromInfo
.
name
}}
</p>
</span>
</el-row>
</li>
</ul>
</div>
<div
v-else
></div>
<div
class=
"list"
v-loading=
"loading"
>
<div
v-if=
"personList.length >= 1"
>
<ul>
<li
v-for=
"(item, index) in personList"
:key=
"index"
@
click=
"liClick(item)"
>
<el-row
style=
"padding:10px"
>
<span
class=
"fl"
>
<img
:src=
"item.finalChatContext.fromInfo.avatarMediaid"
/></span>
<span
class=
"fl"
style=
"margin-left:8px"
>
<p>
{{
item
.
finalChatContext
.
fromInfo
.
name
}}
</p>
</span>
</el-row>
</li>
</ul>
</div>
<div
v-else
></div>
</div>
</
template
>
<
script
>
import
{
parseTime
}
from
'
@/utils/common.js
'
export
default
{
props
:
{
personList
:
{
type
:
Array
,
defluat
:
()
=>
[]
},
loading
:
{
type
:
Boolean
,
defluat
:
false
},
},
data
()
{
return
{
loadings
:
true
}
},
methods
:{
liClick
(
e
){
console
.
log
(
e
)
this
.
$emit
(
'
chatFn
'
,
e
)
}
}
import
{
parseTime
}
from
'
@/utils/common.js
'
export
default
{
props
:
{
personList
:
{
type
:
Array
,
defluat
:
()
=>
[]
},
loading
:
{
type
:
Boolean
,
defluat
:
false
}
},
data
()
{
return
{
loadings
:
true
}
},
methods
:
{
liClick
(
e
)
{
console
.
log
(
e
)
this
.
$emit
(
'
chatFn
'
,
e
)
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
*
{
padding
:
0
;
margin
:
0
;}
.fl
{
float
:
left
;}
.list
{
overflow-y
:scroll
;
height
:
708px
;
::-webkit-scrollbar
{
display
:
none
;
}
.list
{
overflow-y
:
scroll
;
height
:
708px
;
::-webkit-scrollbar
{
display
:
none
;
}
/
deep
/
.el-loading-spinner
{
margin-top
:
20px
;}
.fr
{
float
:right
;}
.gray
{
color
:
#999
;}
.padt10
{
padding-top
:
10px
;}
ul
li
{
overflow
:
hidden
;
border-bottom
:
1px
solid
#efefef
;
cursor
:
pointer
;
p
{
white-space
:nowrap
;
overflow
:hidden
;
line-height
:
40px
;
text-overflow
:ellipsis
;}
:hover
{
background
:
#efefef
;}
img
{
width
:
40px
;
height
:
40px
;
float
:
left
}
}
/
deep
/
.el-loading-spinner
{
margin-top
:
20px
;
}
.fr
{
float
:
right
;
}
.gray
{
color
:
#999
;
}
.padt10
{
padding-top
:
10px
;
}
ul
li
{
overflow
:
hidden
;
border-bottom
:
1px
solid
#efefef
;
cursor
:
pointer
;
p
{
white-space
:
nowrap
;
overflow
:
hidden
;
line-height
:
40px
;
text-overflow
:
ellipsis
;
}
:hover
{
background
:
#efefef
;
}
img
{
width
:
40px
;
height
:
40px
;
float
:
left
;
}
</
style
>
\ No newline at end of file
}
}
</
style
>
linkwe-ui/src/views/conversation/component/list.vue
浏览文件 @
1a990ef7
<
template
>
<div
class=
"list"
v-loading=
"loading"
>
<div
v-if=
"personList.length>=1"
>
<ul>
<li
v-for=
"(item,index) in personList"
:key=
"index"
@
click=
"liClick(item)"
>
<el-row
style=
"padding:10px"
>
<span
class=
"fl"
>
<img
:src=
"item.receiveWeCustomer.avatar"
></span>
<span
class=
"fl"
style=
"margin-left:8px"
>
<p>
{{
item
.
receiveWeCustomer
.
name
}}
</p>
</span>
</el-row>
</li>
</ul>
</div>
<div
v-else
></div>
<div
class=
"list"
v-loading=
"loading"
>
<div
v-if=
"personList.length >= 1"
>
<ul>
<li
v-for=
"(item, index) in personList"
:key=
"index"
@
click=
"liClick(item)"
>
<el-row
style=
"padding:10px"
>
<span
class=
"fl"
>
<img
:src=
"item.receiveWeCustomer.avatar"
/></span>
<span
class=
"fl"
style=
"margin-left:8px"
>
<p>
{{
item
.
receiveWeCustomer
.
name
}}
</p>
</span>
</el-row>
</li>
</ul>
</div>
<div
v-else
></div>
</div>
</
template
>
<
script
>
import
{
parseTime
}
from
'
@/utils/common.js
'
export
default
{
props
:
{
personList
:
{
type
:
Array
,
defluat
:
()
=>
[]
},
loading
:
{
type
:
Boolean
,
defluat
:
false
},
},
data
()
{
return
{
loadings
:
true
}
},
methods
:{
liClick
(
e
){
console
.
log
(
e
,
'
liClick
'
)
this
.
$emit
(
'
chatFn
'
,
e
)
}
}
import
{
parseTime
}
from
'
@/utils/common.js
'
export
default
{
props
:
{
personList
:
{
type
:
Array
,
defluat
:
()
=>
[]
},
loading
:
{
type
:
Boolean
,
defluat
:
false
}
},
data
()
{
return
{
loadings
:
true
}
},
methods
:
{
liClick
(
e
)
{
console
.
log
(
e
,
'
liClick
'
)
this
.
$emit
(
'
chatFn
'
,
e
)
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
*
{
padding
:
0
;
margin
:
0
;}
.fl
{
float
:
left
;}
.list
{
overflow-y
:scroll
;
height
:
708px
;
::-webkit-scrollbar
{
display
:
none
;
}
.list
{
overflow-y
:
scroll
;
height
:
708px
;
::-webkit-scrollbar
{
display
:
none
;
}
/
deep
/
.el-loading-spinner
{
margin-top
:
20px
;}
.fr
{
float
:right
;}
.gray
{
color
:
#999
;}
.padt10
{
padding-top
:
10px
;}
ul
li
{
padding
:
10px
;
overflow
:
hidden
;
border-bottom
:
1px
solid
#efefef
;
cursor
:
pointer
;
p
{
white-space
:nowrap
;
overflow
:hidden
;
line-height
:
40px
;
text-overflow
:ellipsis
;}
:hover
{
background
:
#efefef
;}
img
{
width
:
40px
;
height
:
40px
;
float
:
left
}
}
/
deep
/
.el-loading-spinner
{
margin-top
:
20px
;
}
.fr
{
float
:
right
;
}
.gray
{
color
:
#999
;
}
.padt10
{
padding-top
:
10px
;
}
ul
li
{
padding
:
10px
;
overflow
:
hidden
;
border-bottom
:
1px
solid
#efefef
;
cursor
:
pointer
;
p
{
white-space
:
nowrap
;
overflow
:
hidden
;
line-height
:
40px
;
text-overflow
:
ellipsis
;
}
:hover
{
background
:
#efefef
;
}
img
{
width
:
40px
;
height
:
40px
;
float
:
left
;
}
</
style
>
\ No newline at end of file
}
}
</
style
>
linkwe-ui/src/views/conversation/content.vue
浏览文件 @
1a990ef7
<
template
>
<div
class=
"content"
>
<el-tabs
v-model=
"activeName"
@
tab-click=
"handleClick"
>
<el-tab-pane
label=
"员工检索"
name=
"1"
>
<employee></employee>
</el-tab-pane>
<el-tab-pane
label=
"客户检索"
name=
"2"
>
<user
v-if=
"activeName==
2"
></user>
</el-tab-pane>
<el-tab-pane
label=
"全局检索"
name=
"3"
>
<role
v-if=
"activeName==
3"
></role>
</el-tab-pane>
</el-tabs>
</div>
<div
class=
"content"
>
<el-tabs
v-model=
"activeName"
@
tab-click=
"handleClick"
>
<el-tab-pane
label=
"员工检索"
name=
"1"
>
<employee></employee>
</el-tab-pane>
<el-tab-pane
label=
"客户检索"
name=
"2"
>
<user
v-if=
"activeName ==
2"
></user>
</el-tab-pane>
<el-tab-pane
label=
"全局检索"
name=
"3"
>
<role
v-if=
"activeName ==
3"
></role>
</el-tab-pane>
</el-tabs>
</div>
</
template
>
<
script
>
import
employee
from
'
./page/employeeTest.vue
'
import
user
from
'
./page/userTest.vue
'
import
role
from
'
./page/roleTest.vue
'
export
default
{
components
:{
employee
,
user
,
role
},
data
()
{
return
{
activeName
:
'
1
'
,
}
},
methods
:
{
handleClick
(
tab
,
event
)
{
console
.
log
(
tab
,
event
);
}
}
export
default
{
components
:
{
employee
,
user
,
role
},
data
()
{
return
{
activeName
:
'
1
'
}
},
methods
:
{
handleClick
(
tab
,
event
)
{
console
.
log
(
tab
,
event
)
}
}
}
</
script
>
<
style
scoped
>
*
{
margin
:
0
;
padding
:
0
;}
/* *{margin: 0;padding: 0;} */
</
style
>
linkwe-ui/src/views/conversation/page/employeeTest.vue
浏览文件 @
1a990ef7
此差异已折叠。
点击以展开。
linkwe-ui/src/views/conversation/page/userTest.vue
浏览文件 @
1a990ef7
此差异已折叠。
点击以展开。
linkwe-ui/src/views/conversation/security.vue
浏览文件 @
1a990ef7
<
template
>
<div
class=
"security"
>
<el-tabs
v-model=
"activeName"
@
tab-click=
"handleClick
"
>
<el-tab-pane
label=
"敏感词触发"
name=
"1"
>
<sensitive-list
/>
</el-tab-pane>
<el-tab-pane
label=
"敏感词设置"
name=
"2"
>
<set-sensitive-word
/>
</el-tab-pane>
<el-tab-pane
label=
"敏感行为警告"
name=
"3"
>
<alarming-sensitive
/>
</el-tab-pane>
</el-tabs>
</div>
<div
class=
"security"
>
<el-tabs
v-model=
"activeName
"
>
<el-tab-pane
label=
"敏感词触发"
name=
"1"
>
<sensitive-list
/>
</el-tab-pane>
<el-tab-pane
label=
"敏感词设置"
name=
"2"
>
<set-sensitive-word
/>
</el-tab-pane>
<el-tab-pane
label=
"敏感行为警告"
name=
"3"
>
<alarming-sensitive
/>
</el-tab-pane>
</el-tabs>
</div>
</
template
>
<
script
>
import
alarmingSensitive
from
'
./securityPage/alarmingSensitive.vue
'
import
sensitiveList
from
'
./securityPage/sensitiveList.vue
'
import
setSensitiveWord
from
'
./securityPage/setSensitiveWord
'
export
default
{
components
:{
components
:
{
sensitiveList
,
setSensitiveWord
,
alarmingSensitive
},
data
()
{
return
{
activeName
:
'
1
'
,
activeName
:
'
1
'
}
},
methods
:
{
handleClick
(
tab
,
event
)
{
console
.
log
(
tab
,
event
);
}
//
handleClick(tab, event) {
//
console.log(tab, event);
//
}
}
}
</
script
>
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录