提交 1a990ef7 编写于 作者: X xinla

优化部分冗余代码,去除废弃功能插件等

上级 c538ef76
......@@ -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",
......
......@@ -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
<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;
.msgtypeimg {
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>
<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>
<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>
<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>
<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">&nbsp;</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>
<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>
<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>
<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>
<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.
先完成此消息的编辑!
想要评论请 注册