From 089bf5d2378b3c4a61d795b2a92bede2c193b771 Mon Sep 17 00:00:00 2001
From: admin <344137771@qq.com>
Date: Tue, 06 Jan 2026 11:22:58 +0800
Subject: [PATCH] 1
---
src/views/message/index.vue | 1217 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 1,217 insertions(+), 0 deletions(-)
diff --git a/src/views/message/index.vue b/src/views/message/index.vue
new file mode 100644
index 0000000..a610cf1
--- /dev/null
+++ b/src/views/message/index.vue
@@ -0,0 +1,1217 @@
+<template>
+ <div class="mod-transport">
+ <el-container slot="container" class="full-height mod-transport">
+ <!-- 左侧侧边栏 -->
+ <el-aside width="320px" class="aside-box full-height">
+ <el-container class="full-height" direction="vertical">
+ <!-- 搜索栏 -->
+ <div class="header" style="height: 87px;">
+ <div class="from-search">
+ <el-input v-model="input" prefix-icon="el-icon-search" placeholder="搜索成功后接手该用户" size="small" />
+ </div>
+
+ <!-- 工具栏 -->
+ <div class="tools">
+ <el-button circle plain size="small" icon="el-icon-search" @click="search()" />
+ </div>
+ </div>
+
+ <!-- 对话列表栏 -->
+ <el-scrollbar tag="section" ref="menusScrollbar" :native="false"
+ :style="{ 'height': (this.documentClientHeight - 87) + 'px', 'max-height': (this.documentClientHeight - 87) + 'px' }">
+ <el-main class="main">
+
+ <!-- 对话列表 -->
+ <template>
+ <div v-for="item in talks" :key="item.id" class="talk-item pointer"
+ :class="{ active: index_name == item.id }" @click="clickTab(item)">
+ <div class="">
+ <img v-if="index_name == item.id" style="width: 50px; height: 50px"
+ src=".././../assets/img/avatar1.png" alt="" />
+ <img v-if="index_name != item.id" style="width: 50px; height: 50px"
+ src=".././../assets/img/avatar2.png" alt="" />
+ </div>
+ <div class="card-box">
+ <div class="title">
+ <div class="card-name">
+ <p class="nickname">
+ {{ item.remarks ? "(" + item.remarks + ")" + item.username : item.username }}
+ </p>
+ </div>
+
+
+
+ <div style="margin-top: 20px;margin-right: 25px;">
+ <el-badge class="mark" :value="item.unreadmsg" v-if="item.unreadmsg > 0" />
+ </div>
+
+ </div>
+ <div class="title">
+ <div class="card-name">
+ <p class="nickname-1">
+ {{
+ item.content
+ }}
+ </p>
+ </div>
+
+ <div class="card-time">
+ <p>{{ item.updatetime }}</p>
+ </div>
+
+ </div>
+ </div>
+ </div>
+ </template>
+ </el-main>
+ </el-scrollbar>
+ </el-container>
+ </el-aside>
+
+ <!-- 聊天面板容器 -->
+ <el-main class="ov-hidden full-height no-padding padding0">
+ <TalkPanel ref="talkPanel" class="full-height" :params="params" :is-online="isFriendOnline"
+ @change-talk="changeTalk" @close-talk="closeTalk" @event="handleTalkPanelEvent" />
+ </el-main>
+
+ <el-dialog title="" v-show="imageViewer.isShow">
+ <!-- 图片查看器 -->
+ <MeEditorImageView ref="imageViewer" v-model="imageViewer.isShow" :file="imageViewer.file"
+ @confirm="confirmUploadImage" @close="handleClose" />
+ </el-dialog>
+
+ </el-container>
+ <!-- <div v-if="this.$store.state.talks.clinkStatus == 1" style="background-color: white;width: 100%;height:100%;
+ top:0;left:0;opacity: 0.8;
+ z-index: 3000;position:fixed;">
+ <div class="loading"></div>
+ <div class="loadingText">消息加载中...</div>
+ </div> -->
+
+ </div>
+</template>
+<script>
+import { mapGetters, mapState } from 'vuex'
+import WelcomeModule from '@/components/layout/WelcomeModule'
+import GroupLaunch from '@/components/group/GroupLaunch'
+import TalkPanel from '@/components/chat/panel/TalkPanel'
+import UserSearch from '@/components/user/UserSearch'
+import MeEditorImageView from '@/components/editor/MeEditorImageView'
+import {
+ createNewAdminOnlineChatAction,
+ userlistNewAdminOnlineChatAction,
+ getUserInfoNewAdminOnlineChatAction,
+ unreadNewAdminOnlineChatAction,
+} from '@/api/chat'
+
+import { findTalkIndex } from '@/utils/talk'
+
+const title = document.title
+
+export default {
+ name: 'MessagePage',
+ components: {
+ GroupLaunch,
+ TalkPanel,
+ UserSearch,
+ WelcomeModule,
+ MeEditorImageView,
+ },
+ data() {
+ return {
+ subHeaderShadow: false,
+ launchGroupShow: false,
+
+ // 对话面板的传递参数
+ params: {
+ talk_type: 0,
+ receiver_id: 0,
+ nickname: '',
+ },
+
+ // 查询关键词
+ input: '',
+
+ // header 工具菜单
+ subMenu: false,
+ menus: [
+ {
+ name: '新的联系人',
+ path: '/contacts/apply',
+ },
+ {
+ name: '我的好友',
+ path: '/contacts/friends',
+ },
+ {
+ name: '我的群组',
+ path: '/contacts/groups',
+ },
+ ],
+
+ // 消息未读数计时器
+ interval: null,
+ loadStatus: 0,
+ index_name: 1,
+ talks: [],
+ talks1: [
+ {
+ "index_name": 0,
+ "avatar": "",
+ "gender": 0,
+ "group_id": 0,
+ "id": 5,
+ "is_online": 0,
+ "motto": "",
+ "nickname": "test0",
+ "remark": "test0",
+ "avatar": "",
+ "friend_apply": 0,
+ "friend_status": 2,
+ "gender": 0,
+ "id": 5,
+ "mobile": "18798272053",
+ "motto": "",
+ "nickname": "test0",
+ "nickname_remark": "test0",
+ "remark_name": "test0",
+ "updated_at": "2023-07-03 07:33:06"
+ },
+ {
+ "index_name": 1,
+ "avatar": "",
+ "gender": 0,
+ "group_id": 0,
+ "id": 5,
+ "is_online": 0,
+ "motto": "",
+ "nickname": "test3",
+ "remark": "test3",
+ "avatar": "",
+ "friend_apply": 0,
+ "friend_status": 2,
+ "gender": 0,
+ "id": 5,
+ "mobile": "18798272053",
+ "motto": "",
+ "nickname": "test3",
+ "nickname_remark": "test3",
+ "remark_name": "test3",
+ "updated_at": "2023-07-03 07:33:06"
+ },
+ {
+ "index_name": 2,
+ "avatar": "",
+ "gender": 0,
+ "group_id": 0,
+ "id": 5,
+ "is_online": 0,
+ "motto": "",
+ "nickname": "test3",
+ "remark": "test3",
+ "avatar": "",
+ "friend_apply": 0,
+ "friend_status": 2,
+ "gender": 0,
+ "id": 5,
+ "mobile": "18798272053",
+ "motto": "",
+ "nickname": "test3",
+ "nickname_remark": "test3",
+ "remark_name": "test3",
+ "updated_at": "2023-07-03 07:33:06"
+ },
+ {
+ "index_name": 3,
+ "avatar": "",
+ "gender": 0,
+ "group_id": 0,
+ "id": 5,
+ "is_online": 0,
+ "motto": "",
+ "nickname": "test3",
+ "remark": "test3",
+ "avatar": "",
+ "friend_apply": 0,
+ "friend_status": 2,
+ "gender": 0,
+ "id": 5,
+ "mobile": "18798272053",
+ "motto": "",
+ "nickname": "test3",
+ "nickname_remark": "test3",
+ "remark_name": "test3",
+ "updated_at": "2023-07-03 07:33:06"
+ },
+ {
+ "index_name": 4,
+ "avatar": "",
+ "gender": 0,
+ "group_id": 0,
+ "id": 5,
+ "is_online": 0,
+ "motto": "",
+ "nickname": "test3",
+ "remark": "test3",
+ "avatar": "",
+ "friend_apply": 0,
+ "friend_status": 2,
+ "gender": 0,
+ "id": 5,
+ "mobile": "18798272053",
+ "motto": "",
+ "nickname": "test3",
+ "nickname_remark": "test3",
+ "remark_name": "test3",
+ "updated_at": "2023-07-03 07:33:06"
+ },
+ {
+ "index_name": 5,
+ "avatar": "",
+ "gender": 0,
+ "group_id": 0,
+ "id": 5,
+ "is_online": 0,
+ "motto": "",
+ "nickname": "test3",
+ "remark": "test3",
+ "avatar": "",
+ "friend_apply": 0,
+ "friend_status": 2,
+ "gender": 0,
+ "id": 5,
+ "mobile": "18798272053",
+ "motto": "",
+ "nickname": "test3",
+ "nickname_remark": "test3",
+ "remark_name": "test3",
+ "updated_at": "2023-07-03 07:33:06"
+ },
+ {
+ "index_name": 6,
+ "avatar": "",
+ "gender": 0,
+ "group_id": 0,
+ "id": 5,
+ "is_online": 0,
+ "motto": "",
+ "nickname": "test3",
+ "remark": "test3",
+ "avatar": "",
+ "friend_apply": 0,
+ "friend_status": 2,
+ "gender": 0,
+ "id": 5,
+ "mobile": "18798272053",
+ "motto": "",
+ "nickname": "test3",
+ "nickname_remark": "test3",
+ "remark_name": "test3",
+ "updated_at": "2023-07-03 07:33:06"
+ },
+ {
+ "index_name": 7,
+ "avatar": "",
+ "gender": 0,
+ "group_id": 0,
+ "id": 5,
+ "is_online": 0,
+ "motto": "",
+ "nickname": "test3",
+ "remark": "test3",
+ "avatar": "",
+ "friend_apply": 0,
+ "friend_status": 2,
+ "gender": 0,
+ "id": 5,
+ "mobile": "18798272053",
+ "motto": "",
+ "nickname": "test3",
+ "nickname_remark": "test3",
+ "remark_name": "test3",
+ "updated_at": "2023-07-03 07:33:06"
+ },
+ {
+ "index_name": 8,
+ "avatar": "",
+ "gender": 0,
+ "group_id": 0,
+ "id": 5,
+ "is_online": 0,
+ "motto": "",
+ "nickname": "test3",
+ "remark": "test3",
+ "avatar": "",
+ "friend_apply": 0,
+ "friend_status": 2,
+ "gender": 0,
+ "id": 5,
+ "mobile": "18798272053",
+ "motto": "",
+ "nickname": "test3",
+ "nickname_remark": "test3",
+ "remark_name": "test3",
+ "updated_at": "2023-07-03 07:33:06"
+ },
+ {
+ "index_name": 9,
+ "avatar": "",
+ "gender": 0,
+ "group_id": 0,
+ "id": 5,
+ "is_online": 0,
+ "motto": "",
+ "nickname": "test3",
+ "remark": "test3",
+ "avatar": "",
+ "friend_apply": 0,
+ "friend_status": 2,
+ "gender": 0,
+ "id": 5,
+ "mobile": "18798272053",
+ "motto": "",
+ "nickname": "test3",
+ "nickname_remark": "test3",
+ "remark_name": "test3",
+ "updated_at": "2023-07-03 07:33:06"
+ },
+ {
+ "index_name": 10,
+ "avatar": "",
+ "gender": 0,
+ "group_id": 0,
+ "id": 5,
+ "is_online": 0,
+ "motto": "",
+ "nickname": "test33",
+ "remark": "test33",
+ "avatar": "",
+ "friend_apply": 0,
+ "friend_status": 2,
+ "gender": 0,
+ "id": 5,
+ "mobile": "18798272053",
+ "motto": "",
+ "nickname": "test33",
+ "nickname_remark": "test33",
+ "remark_name": "test33",
+ "updated_at": "2023-07-03 07:33:06"
+ }
+ ],
+ userInfo: {},
+ dialogTableVisible: false,
+ dialogFormVisible: false,
+ imageViewer: {},
+ talksMap: {}
+ }
+ },
+ computed: {
+ ...mapGetters(['topItems', 'talkItems', 'unreadNum', 'talkNum']),
+ ...mapState({
+ }),
+ // 计算置顶栏目的高度
+ subHeaderPx() {
+ const n = 7 // 一排能显示的用户数
+ const num = this.topItems.length
+ let len = 60
+
+ if (num > n) {
+ len = (Math.floor(num / n) + (num % n > 0 ? 1 : 0)) * len
+ }
+
+ return `${len}px`
+ },
+ // 当前对话好友在线状态
+ isFriendOnline() {
+ let index = findTalkIndex(this.index_name)
+ return index >= 0 && this.talks[index].is_online == 1
+ },
+ documentClientHeight: {
+ get() { return this.$store.state.common.documentClientHeight },
+ set(val) { this.$store.commit('common/updateDocumentClientHeight', val) }
+ },
+ },
+ watch: {
+ },
+ created() {
+ unreadNewAdminOnlineChatAction({}, (data) => { });
+ this.userlist();
+ },
+ mounted() {
+ this.resetDocumentClientHeight()
+ this.scrollEvent()
+ // 为全局事件总线绑定自定义事件
+ this.$bus.$on('SET_IMAGE_VIEWER', (data) => {
+ console.log("data = " + JSON.stringify(data));
+ this.imageViewer.isShow = data.isShow;
+ this.imageViewer.file = data.file;
+ console.log("this.imageViewer => " + JSON.stringify(this.imageViewer));
+ })
+ this.$bus.$on('updateCurrentUserChatList', (data) => {
+ this.updateCurrentUserChatList(data);
+ })
+
+ //获取聊天记录
+ this.interval && clearInterval(this.interval)
+ this.interval = setInterval(() => {
+ console.log("this.$route.path => " + this.$route.path)
+ if (!this.IS_DEBUG && this.$route.path == "/message") {
+ this.userlistTime();
+ this.updateCurrentUserChatList({ flag: false });
+ }
+ }, 5000)
+ },
+ destroyed() {
+ // 解绑事件
+ this.$bus.$off('SET_IMAGE_VIEWER')
+ this.$bus.$off('updateCurrentUserChatList')
+
+ document.title = title
+ clearInterval(this.interval)
+ this.clearTalk()
+ },
+ methods: {
+ // 重置窗口可视高度
+ resetDocumentClientHeight() {
+ this.documentClientHeight = document.documentElement['clientHeight'] - 80
+ window.onresize = () => {
+ this.documentClientHeight = document.documentElement['clientHeight'] - 80
+ }
+ document.documentElement.clientHeight
+ },
+ handleClose() {
+ store.commit('SET_IMAGE_VIEWER', {})
+ },
+ // 美化时间格式
+ // beautifyTime,
+
+ // header 功能栏隐藏事件
+ closeSubMenu() {
+ this.subMenu = false
+ },
+
+ // 清除当前对话
+ clearTalk() {
+ this.params = {
+ talk_type: 0,
+ receiver_id: 0,
+ nickname: '',
+ }
+
+ this.$store.commit('UPDATE_DIALOGUE_MESSAGE', {
+ talk_type: 0,
+ receiver_id: 0,
+ is_robot: 0,
+ })
+ },
+
+ // 工具栏事件
+ triggerSubMenu(type) {
+ this.closeSubMenu()
+
+ if (type == 1) {
+ this.launchGroupShow = true
+ } else {
+ this.$refs.searchUsers.open()
+ }
+ },
+
+ // 监听自定义滚动条事件
+ scrollEvent() {
+ let scrollbarEl = this.$refs.menusScrollbar.wrap
+ scrollbarEl.onscroll = () => {
+ this.subHeaderShadow = scrollbarEl.scrollTop > 0
+ }
+ },
+
+ // 发起群聊成功后回调方法
+ groupChatSuccess(data) {
+ this.launchGroupShow = false
+ sessionStorage.setItem('send_message_index_name', `2_${data.group_id}`)
+ this.$store.dispatch('LOAD_TALK_ITEMS')
+ },
+
+ // 切换聊天栏目
+ clickTab(data) {
+ console.log(" this.$store.state.talks.status = " + this.$store.state.talks.status);
+ // if(this.$store.state.talks.status == 0){
+ this.$store.commit('SET_CLINK_STATUS', 1)
+ this.index_name = data.id;
+ this.getUserInfo(data.partyid);
+ // }
+ return;
+ },
+ //用户信息
+ getUserInfo(id) {
+ console.log("this.$store.state.talks.status = " + this.$store.state.talks.status);
+ // if(this.$store.state.talks.status == 0){
+ this.$store.commit('SET_STATUS', 1)
+ console.log(" this.$store.state.talks.status = " + this.$store.state.talks.status);
+ getUserInfoNewAdminOnlineChatAction({ partyId: id || "" }, (data) => {
+ if (data == undefined) {
+ this.$store.commit('SET_STATUS', 0)
+ console.log(" this.$store.state.talks.status = " + this.$store.state.talks.status);
+ return;
+ }
+ console.log("this.$store.state.talks.status = " + JSON.stringify(data));
+ if (data.code == 0) {
+ this.$store.commit('SET_CLINK_STATUS', 0)
+ this.userInfo = data.data || {};
+ this.$refs.talkPanel.selectUser(this.userInfo, true);
+ }
+ })
+ // }
+
+
+ },
+ userlist() {
+ userlistNewAdminOnlineChatAction({}, (data) => {
+ if (data == undefined) {
+ this.$store.commit('SET_STATUS', 0)
+ console.log(" this.$store.state.talks.status = " + this.$store.state.talks.status);
+ return;
+ }
+ if (data.code == 0) {
+ this.talks = data.data || [];
+ // console.log("this.talks2 => " + JSON.stringify(this.talks));
+ if (this.talks.length > 0) {
+ // console.log("data.data => "+JSON.stringify(data.data));
+ this.index_name = this.talks[0].id;
+ this.getUserInfo(this.talks[0].partyid);
+ } else {
+ // this.$refs.panelHeader.selectUser({});
+ console.log("clear");
+ this.$refs.talkPanel.clearHeader();
+ this.userInfo = {}
+
+ }
+ } else {
+ console.log("clear 2");
+
+ // this.$refs.panelHeader.selectUser({});
+ this.$refs.talkPanel.clearHeader();
+ this.userInfo = {}
+ }
+
+ });
+ },
+ userlistTime() {
+ userlistNewAdminOnlineChatAction({}, (data) => {
+ if (data == undefined) {
+ this.$store.commit('SET_STATUS', 0)
+ console.log(" this.$store.state.talks.status = " + this.$store.state.talks.status);
+ return;
+ }
+ if (data.code == 0) {
+ this.talks = data.data || [];
+ // console.log("this.talks1 => " + JSON.stringify(this.talks));
+ if (this.talks.length <= 0) {
+ this.$refs.talkPanel.clearHeader();
+ this.userInfo = {}
+ } else {
+ // console.log("this.talks3 => " + JSON.stringify(this.talks));
+ // this.index_name = this.talks[0].id;
+ // this.getUserInfo(this.talks[0].partyid);
+ let flag = false;
+ for (let i = 0; i < this.talks.length; i++) {
+ if (this.talks[i].unreadmsg > 0) {
+
+ if (this.talksMap[this.talks[i].partyid]) {
+ let date1s = this.talks[i].order_updatetime;
+ let date2s = this.talksMap[this.talks[i].partyid].order_updatetime;
+ var date1 = new Date(date1s)
+ var date2 = new Date(date2s)
+ if (date1.getTime() > date2.getTime()) {
+ console.log("新消息")
+ flag = true;
+ } else {
+ console.log("旧消息")
+ }
+ } else {
+ flag = true;
+ }
+ }
+
+ if (flag) {
+ this.playAudioOfMute();
+ }
+
+
+ this.talksMap[this.talks[i].partyid] = this.talks[i];
+ }
+
+
+ }
+
+ } else {
+ this.$refs.talkPanel.clearHeader();
+ this.userInfo = {}
+ }
+
+ });
+ },
+ //刷新当前聊天记录
+ updateCurrentUserChatList(data) {
+ // if(this.$store.state.talks.status == 0){
+ this.$store.commit('SET_STATUS', 1)
+ console.log(" this.$store.state.talks.status = " + this.$store.state.talks.status);
+ this.$refs.talkPanel.selectUser(this.userInfo, data.flag);
+ // }
+ },
+ // 修改当前对话
+ changeTalk(index_name) {
+ sessionStorage.setItem('send_message_index_name', index_name)
+ this.$store.dispatch('LOAD_TALK_ITEMS')
+ },
+
+ // 关闭当前对话及刷新对话列表
+ closeTalk() {
+ this.$store.commit('UPDATE_DIALOGUE_MESSAGE', {
+ talk_type: 0,
+ receiver_id: 0,
+ is_robot: 0,
+ })
+
+ this.$store.dispatch('LOAD_TALK_ITEMS')
+ },
+
+ // 对话列表的右键自定义菜单
+ talkItemsMenu(item, event) {
+ let items = {
+ items: [
+ {
+ label: '好友信息',
+ icon: 'el-icon-user',
+ disabled: item.talk_type == 2 || item.is_robot == 1,
+ onClick: () => {
+ this.$user(item.receiver_id)
+ },
+ },
+ {
+ label: '修改备注',
+ icon: 'el-icon-edit-outline',
+ disabled: item.talk_type == 2 || item.is_robot == 1,
+ onClick: () => {
+ this.editFriendRemarks(item)
+ },
+ },
+ {
+ label: item.is_top == 0 ? '会话置顶' : '取消置顶',
+ icon: 'el-icon-top',
+ onClick: () => {
+ this.topChatItem(item)
+ },
+ },
+ {
+ label: item.is_disturb == 0 ? '消息免打扰' : '开启消息提示',
+ icon:
+ item.is_disturb == 0
+ ? 'el-icon-close-notification'
+ : 'el-icon-bell',
+ disabled: item.is_robot == 1,
+ onClick: () => {
+ this.setNotDisturb(item)
+ },
+ },
+ {
+ label: '移除会话',
+ icon: 'el-icon-remove-outline',
+ divided: true,
+ onClick: () => {
+ this.delChatItem(item)
+ },
+ },
+ {
+ label: item.talk_type == 1 ? '删除好友' : '退出群聊',
+ icon: 'el-icon-delete',
+ disabled: item.is_robot == 1,
+ onClick: () => {
+ let title = item.talk_type == 1 ? '删除好友' : '退出群聊'
+ this.$confirm(
+ `此操作将 <span style="color:red;font-size:16px;">${title}</span>, 是否继续?`,
+ '提示',
+ {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ center: true,
+ dangerouslyUseHTMLString: true,
+ }
+ ).then(() => {
+ if (item.talk_type == 1) {
+ // this.removeFriend(item)
+ } else {
+ // 退出群聊
+ // this.removeGroup(item)
+ }
+ })
+ },
+ },
+ ],
+ event: event,
+ zIndex: 3,
+ }
+
+ this.$contextmenu(items)
+ return false
+ },
+
+ // 置顶栏右键菜单栏
+ topItemsMenu(item, event) {
+ this.$contextmenu({
+ items: [
+ {
+ label: item.is_top == 0 ? '会话置顶' : '取消置顶',
+ icon: 'el-icon-top',
+ onClick: () => {
+ this.topChatItem(item)
+ },
+ },
+ ],
+ event: event,
+ zIndex: 3,
+ })
+
+ return false
+ },
+
+ // 会话列表置顶
+ topChatItem(item) {
+ },
+
+ // 设置消息免打扰
+ setNotDisturb(item) {
+ },
+
+ // 移除会话列表
+ delChatItem(item) {
+ },
+
+ // 解除好友关系
+ removeFriend(item) {
+ },
+
+ // 退出群聊
+ removeGroup(item) {
+ },
+
+ // 修改好友备注信息
+ editFriendRemarks(item) {
+ let title = `您正在设置【${item.name}】好友的备注信息`
+
+ if (item.remark_name) {
+ title += `,当前备注为【${item.remark_name}】`
+ }
+
+ this.$prompt(title, '修改备注', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ customClass: 'border-radius0',
+ inputPlaceholder: '请设置好友备注信息',
+ inputValue: item.remark_name ? item.remark_name : item.name,
+ inputValidator(val) {
+ return val == null || val == '' ? '好友备注不能为空' : true
+ },
+ })
+ .then(({ value }) => {
+ if (value == item.remark_name) {
+ return false
+ }
+
+ })
+ .catch(() => { })
+ },
+
+ //搜索
+ search() {
+ this.$store.commit('SET_STATUS', 0)
+ console.log(" this.$store.state.talks.status = " + this.$store.state.talks.status);
+ console.log("search = " + this.input);
+ createNewAdminOnlineChatAction({ partyId: this.input }, (data) => {
+ if (data.code == 0) {
+ this.userlist();
+ }
+ })
+ },
+ // 处理 Header 组件事件
+ handleTalkPanelEvent(event_name) {
+ // console.log(JSON.stringify(event_name));
+ switch (event_name.type) {
+ case 'userlist':
+ this.userlist();
+ break
+ case 'remarks':
+ this.userInfo.remarks = event_name.data;
+ // this.talks.forEach(item => {if (item.id == this.userInfo.id) {item.remark_name = event_name.data}});
+ for (let i = 0; i < this.talks.length; i++) {
+ if (this.talks[i].id == this.index_name) {
+ this.talks[i].remarks = event_name.data;
+ }
+ }
+ // console.log(JSON.stringify(this.talks));
+ break
+ case 'setting':
+ this.group.panel = !this.group.panel
+ break
+ }
+ },
+
+ // 确认上传图片消息回调事件
+ confirmUploadImage() {
+ // const { imageViewer } = this.$store.state.talk
+
+ let ref = this.$refs.imageViewer
+ console.log("imageViewer.file = " + JSON.stringify(this.imageViewer.file));
+
+ const isLt2M = this.imageViewer.size / 1024 / 1024 < 2;
+ if (!isLt2M) {
+ Toast.fail('上传图片大小不能超过 2MB!');
+ return false;
+ }
+
+ this.$http({
+ url: this.$http.adornUrl('/api/uploadFile'),
+ method: 'post',
+ data: this.$http.adornData(
+ Object.assign(
+ {
+ file: this.imageViewer.file,
+ }
+ )
+ )
+ }).then(({ data }) => {
+ //
+ console.log("uploaded image = " + JSON.stringify(data));
+ if (data.code == 0) {
+
+ } else {
+ this.$message('' + data.msg)
+ }
+ //
+ })
+ .finally(() => {
+ ref.loading = false
+ })
+ },
+
+ },
+}
+</script>
+<style lang="less" scoped>
+/deep/.el-scrollbar__wrap {
+ overflow-x: hidden;
+}
+
+.aside-box {
+ position: relative;
+ border-right: 1px solid rgb(245, 245, 245);
+ overflow: hidden;
+ padding: 0;
+ transition: width 0.3s;
+
+ .header {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ padding: 0 15px;
+
+ .from-search {
+ flex: 1 1;
+ flex-shrink: 0;
+
+ /deep/ .el-input .el-input__inner {
+ border-radius: 20px;
+ }
+ }
+
+ .tools {
+ flex-basis: 32px;
+ flex-shrink: 0;
+ height: auto;
+ margin-left: 15px;
+ cursor: pointer;
+ text-align: center;
+ position: relative;
+ user-select: none;
+
+ .tools-menu {
+ position: absolute;
+ right: 0;
+ top: 38px;
+ width: 100px;
+ min-height: 80px;
+ box-sizing: border-box;
+ background-color: rgba(31, 35, 41, 0.9);
+ border-radius: 5px;
+ z-index: 1;
+ padding: 3px 0;
+
+ .menu-item {
+ height: 40px;
+ line-height: 40px;
+ color: white;
+ font-size: 14px;
+
+ &:hover {
+ background-color: rgba(70, 72, 73, 0.9);
+ }
+ }
+ }
+ }
+ }
+
+}
+
+.aside-box .main {
+ overflow: hidden;
+ padding: 0;
+
+ .empty-data {
+ text-align: center;
+ padding-top: 40px;
+ color: #ccc;
+ }
+
+ .main-menu {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ padding: 6px 10px 6px 10px;
+ align-items: center;
+ user-select: none;
+
+ .title {
+ font-size: 12px;
+ font-weight: 600;
+ color: #1f2329;
+ }
+
+ .icon {
+ cursor: pointer;
+ }
+ }
+
+ .talk-item {
+ padding: 4px 0px;
+ height: 94px;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ border-left: 3px solid transparent;
+ transition: 0.2s ease-in;
+ cursor: pointer;
+ // background-color: #4aa71c;
+
+
+ .card-box {
+ height: 50px;
+ align-content: center;
+ flex: 1 1;
+ margin-left: 10px;
+ overflow: hidden;
+
+ .title {
+ width: 100%;
+ height: 25px;
+ display: flex;
+ align-items: center;
+
+ .card-name {
+ color: #1f2329;
+ font-size: 14px;
+ line-height: 20px;
+ flex: 1 1;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ align-items: center;
+ overflow: hidden;
+
+ .nickname {
+ font-weight: 400;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ margin-right: 3px;
+
+ font-family: PingFang SC;
+ font-size: 16px;
+ font-weight: 600;
+ line-height: 22px;
+ letter-spacing: 0em;
+ text-align: left;
+ }
+
+ .nickname-1 {
+ font-weight: 400;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ margin-right: 3px;
+
+ font-family: PingFang SC;
+ font-size: 14px;
+ font-weight: 400;
+ line-height: 20px;
+ letter-spacing: 0em;
+ text-align: left;
+ }
+
+ .top {
+ color: #dc9b04 !important;
+ background-color: #faf1d1 !important;
+ }
+
+ .group {
+ color: #3370ff !important;
+ background-color: #e1eaff !important;
+ font-size: 13px;
+ }
+
+ .disturb {
+ color: #98999c !important;
+ background-color: #ecedf1 !important;
+
+ i {
+ font-size: 12px;
+ }
+ }
+ }
+ }
+
+ .card-time {
+ color: #8f959e;
+ font-size: 12px;
+ margin-left: 10px;
+ user-select: none;
+ }
+
+ .content {
+ font-size: 13px;
+ line-height: 18px;
+ color: #8f959e;
+ margin-top: 3px;
+ font-weight: 300;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+
+ span:first-child {
+ margin-right: 5px;
+ }
+
+ .online-color {
+ color: #4aa71c;
+ font-weight: 300;
+ }
+
+ .draft-color {
+ color: red;
+ font-weight: 300;
+ }
+ }
+ }
+
+ &:hover {
+
+ background-color: #f3f5fa;
+ }
+
+ &.active {
+ .avatar-box {
+ border-radius: 5px;
+ }
+
+ background-color: #dfe6fc;
+ }
+ }
+}
+
+
+
+@media screen and (max-width: 800px) {
+ .aside-box {
+ width: 220px !important;
+
+ .subheader {
+ display: none;
+ }
+
+ .card-box .larkc-tag {
+ display: none;
+ }
+ }
+}
+
+.menu-list {
+ height: 42px;
+ display: flex;
+ align-items: center;
+ padding-left: 20px;
+ cursor: pointer;
+ border-left: 3px solid white;
+ position: relative;
+ transition: 0.2s ease-in;
+ font-size: 14px;
+ color: black;
+
+ &:hover {
+ background-color: #eff0f1;
+ border-color: #eff0f1;
+ }
+
+ &.selectd {
+ border-color: #3370ff !important;
+ background-color: #eff0f1;
+ }
+}
+</style>
+
+
+<style lang="scss" scoped>
+.mod-transport {
+ height: 100%;
+ min-height: 759px;
+ padding: 0;
+}
+
+.padding0 {
+ padding: 0;
+}
+
+
+.loading {
+ position: relative;
+ left: 50%;
+ top: 50%;
+ width: 120px;
+ height: 120px;
+ border: 2px solid #000;
+ border-top-color: rgba(0, 0, 0, 0.2);
+ border-right-color: rgba(0, 0, 0, 0.2);
+ border-bottom-color: rgba(0, 0, 0, 0.2);
+ border-radius: 100%;
+
+ animation: circle infinite 0.75s linear;
+}
+
+@keyframes circle {
+ 0% {
+ transform: rotate(0);
+ }
+
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+
+.loadingText {
+ position: relative;
+ left: 50%;
+ top: 50%;
+ width: 120px;
+ height: 50px;
+ text-align: center;
+ line-height: 50px;
+}
+</style>
\ No newline at end of file
--
Gitblit v1.9.3