会议模式-页面调整

main
ysn 1 week ago
parent 8361925273
commit 0323f7332e
  1. 19
      src/router/index.js
  2. 1
      src/views/message/components/CreateGroupDialog.vue
  3. 514
      src/views/video/index.vue
  4. 1324
      src/views/videoCommunication/caseStudy.vue
  5. 361
      src/views/videoCommunication/index.vue
  6. 1097
      src/views/videoCommunication/qualityControl.vue
  7. 26
      src/views/videoCommunication/realTimeConsultation.vue
  8. 1470
      src/views/videoCommunication/training.vue

@ -81,7 +81,7 @@ export const constantRoutes = [
children: [ children: [
{ {
path: 'index', path: 'index',
component: () => import('@/views/video/index'), component: () => import('@/views/videoCommunication/index'),
name: 'Index', name: 'Index',
meta: { title: '视讯', icon: 'guide' } meta: { title: '视讯', icon: 'guide' }
}, },
@ -90,21 +90,28 @@ export const constantRoutes = [
component: () => import('@/views/videoCommunication/realTimeConsultation'), component: () => import('@/views/videoCommunication/realTimeConsultation'),
name: 'RealTimeConsultation', name: 'RealTimeConsultation',
hidden: true, hidden: true,
meta: { title: '实时会诊', icon: 'dashboard', activeMenu: '/video' } meta: { title: '实时会诊', icon: 'dashboard', activeMenu: '/videoCommunication' }
}, },
{ {
path: 'training', path: 'training',
component: () => import('@/views/videoCommunication/training'), component: () => import('@/views/videoCommunication/training'),
name: 'Training', name: 'Training',
hidden: true, hidden: true,
meta: { title: '带教培训', icon: 'dashboard', activeMenu: '/video' } meta: { title: '带教培训', icon: 'dashboard', activeMenu: '/videoCommunication' }
}, },
{ {
path: 'qualityControl', path: 'qualityControl',
component: () => import('@/views/videoCommunication/qualityControl'), component: () => import('@/views/videoCommunication/qualityControl'),
name: 'QualityControl', name: 'QualityControl',
hidden: true, hidden: true,
meta: { title: '在线质控', icon: 'dashboard', activeMenu: '/video' } meta: { title: '在线质控', icon: 'dashboard', activeMenu: '/videoCommunication' }
},
{
path: 'caseStudy',
component: () => import('@/views/videoCommunication/caseStudy'),
name: 'CaseStudy',
hidden: true,
meta: { title: '病例研讨', icon: 'dashboard', activeMenu: '/videoCommunication' }
}, },
] ]
}, },
@ -117,7 +124,7 @@ export const constantRoutes = [
path: 'index', path: 'index',
component: () => import('@/views/message/index'), component: () => import('@/views/message/index'),
name: 'Message', name: 'Message',
meta: { title: '消息', icon: 'message'} meta: { title: '消息', icon: 'message' }
}, },
] ]
}, },
@ -143,7 +150,7 @@ export const constantRoutes = [
path: 'index', path: 'index',
component: () => import('@/views/knowledge/index'), component: () => import('@/views/knowledge/index'),
name: 'Knowledge', name: 'Knowledge',
meta: { title: '知识库', icon: 'knowledge'} meta: { title: '知识库', icon: 'knowledge' }
}, },
] ]
}, },

@ -348,6 +348,7 @@ export default {
children: [ children: [
{ id: "quanxuan", name: "全选" }, { id: "quanxuan", name: "全选" },
{ id: "chenwenhai", name: "陈文海1", type: "user" }, { id: "chenwenhai", name: "陈文海1", type: "user" },
{ id: "chenwenhai1", name: "陈文海2", type: "user" },
], ],
}, },
], ],

@ -1,514 +0,0 @@
<template>
<div class="app-container">
<!-- 1. 会议模式卡片 -->
<el-card class="card" style="margin-bottom: 10px">
<div slot="header" class="card-header">
<span class="line"></span>
会议模式
</div>
<!-- 口令入会区域 -->
<div class="join-area">
<el-input
v-model="meetingCode"
placeholder="请输入数字口令"
class="join-input"
@keyup.enter="joinMeeting"
/>
<el-button type="success" class="join-btn" @click="joinMeeting">
入会
</el-button>
</div>
<!-- 四种模式卡片 -->
<div class="mode-list">
<div
v-for="(mode, index) in meetingModes"
:key="index"
:class="['mode-item', mode.color]"
@click="handleModeClick(mode)"
>
<div class="title">
{{ mode.title }}
</div>
<div class="icon-bg">
<i :class="mode.icon"></i>
</div>
</div>
</div>
</el-card>
<!-- 2. 会诊记录卡片 -->
<el-card class="card">
<div slot="header" class="card-header">
<span class="line"></span>
会诊记录
</div>
<!-- 会诊表格 -->
<div class="table-wrapper">
<el-table
v-loading="loading"
:data="recordList"
:show-header="false"
stripe
height="calc(100vh - 550px)"
>
<el-table-column label="头像" prop="avatar" align="center" width="50">
<template slot-scope="scope">
<el-avatar :src="scope.row.avatar" />
</template>
</el-table-column>
<el-table-column label="会议名称" prop="name" align="center" />
<el-table-column label="类型" prop="type" align="center" />
<el-table-column label="时间" prop="time" align="center" />
<el-table-column label="操作" align="center" width="50">
<template slot-scope="scope">
<el-button
type="text"
icon="el-icon-more"
class="more-btn"
@click="showDetail(scope.row)"
/>
</template>
</el-table-column>
</el-table>
</div>
<!-- 分页 -->
<pagination
v-show="queryParams.total > 0"
:total="queryParams.total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</el-card>
<!-- 会诊详情弹框 -->
<el-dialog
title="会诊详情"
:visible.sync="showDetailDialog"
width="400px"
:close-on-click-modal="false"
>
<el-form :model="selectedRecord" label-width="110px">
<el-form-item label="会议状态">
{{ selectedRecord.status || "已结束" }}
</el-form-item>
<el-divider />
<el-form-item label="会议时间">
{{ selectedRecord.time || "" }}
</el-form-item>
<el-form-item label="会议持续时间">
{{ selectedRecord.duration || "0分钟0秒" }}
</el-form-item>
<el-form-item label="病例数记录">
<el-form-item label="总病例数">
{{ selectedRecord.totalCases || "2" }}
</el-form-item>
<el-form-item label="阳性病例数">
{{ selectedRecord.positiveCases || "0" }}
</el-form-item>
<el-form-item label="阴性病例数">
{{ selectedRecord.negativeCases || "0" }}
</el-form-item>
<el-form-item label="上级转诊病例数">
{{ selectedRecord.referralCases || "4" }}
</el-form-item>
</el-form-item>
<el-divider />
<el-form-item label="会议发起人">
{{ selectedRecord.sponsor || "" }}
</el-form-item>
<el-divider />
<el-form-item label="参会人员">
{{ selectedRecord.participants || "" }}
</el-form-item>
</el-form>
</el-dialog>
</div>
</template>
<script>
// import { listMeeting, getMeeting, joinMeeting } from "@/api/videoCommunication";
//
const mockRecordList = [
{
id: 1,
name: "超声事业部的云诊室",
type: "会诊",
time: "2026-05-07 09:09:23",
avatar:
"https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png",
iconType: "blue",
duration: "0分钟0秒",
totalCases: "2",
positiveCases: "0",
negativeCases: "0",
referralCases: "4",
status: "已结束",
sponsor: "张三",
participants: "李四、王五",
},
{
id: 2,
name: "超声事业部的云诊室",
type: "会诊",
time: "2026-05-06 13:40:51",
avatar:
"https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png",
iconType: "blue",
duration: "0分钟0秒",
totalCases: "2",
positiveCases: "0",
negativeCases: "0",
referralCases: "4",
status: "已结束",
sponsor: "张三",
participants: "李四、王五",
},
{
id: 3,
name: "超声事业部的云教学",
type: "教学",
time: "2026-05-06 13:40:38",
avatar:
"https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png",
iconType: "orange",
duration: "0分钟0秒",
totalCases: "2",
positiveCases: "0",
negativeCases: "0",
referralCases: "4",
status: "已结束",
sponsor: "张三",
participants: "李四、王五",
},
{
id: 4,
name: "超声事业部的云诊室",
type: "会诊",
time: "2026-04-29 13:16:48",
avatar:
"https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png",
iconType: "blue",
duration: "0分钟0秒",
totalCases: "2",
positiveCases: "0",
negativeCases: "0",
referralCases: "4",
status: "已结束",
sponsor: "张三",
participants: "李四、王五",
},
{
id: 5,
name: "质控会议-6019100",
type: "质控",
time: "2026-04-20 18:14:20",
avatar:
"https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png",
iconType: "blue",
duration: "0分钟0秒",
totalCases: "2",
positiveCases: "0",
negativeCases: "0",
referralCases: "4",
status: "已结束",
sponsor: "张三",
participants: "李四、王五",
},
{
id: 6,
name: "超声事业部的云诊室",
type: "会诊",
time: "2026-04-20 18:14:09",
avatar:
"https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png",
iconType: "blue",
duration: "0分钟0秒",
totalCases: "2",
positiveCases: "0",
negativeCases: "0",
referralCases: "4",
status: "已结束",
sponsor: "张三",
participants: "李四、王五",
},
];
export default {
name: "VideoPage",
data() {
return {
meetingCode: "",
loading: false,
queryParams: {
pageNum: 1,
pageSize: 10,
total: 125, // 125
},
meetingModes: [
{
title: "实时会诊",
icon: "el-icon-user-solid",
color: "blue",
routeName: "RealTimeConsultation",
routePath: "/videoCommunication/realTimeConsultation",
},
{
title: "带教培训",
icon: "el-icon-video-play",
color: "yellow",
routeName: "Training",
routePath: "/videoCommunication/training",
},
{
title: "在线质控",
icon: "el-icon-lightbulb",
color: "grayblue",
routeName: "QualityControl",
routePath: "/videoCommunication/qualityControl",
},
{
title: "病例研讨",
icon: "el-icon-chat-line-square",
color: "greenblue",
routeName: "CaseDiscussion",
routePath: "/videoCommunication/caseDiscussion",
},
],
recordList: [],
showDetailDialog: false,
selectedRecord: {},
};
},
computed: {
totalPage() {
return Math.ceil(this.queryParams.total / this.queryParams.pageSize);
},
},
mounted() {
this.getList();
},
methods: {
//
joinMeeting() {
if (!this.meetingCode.trim()) {
this.$message.warning("请输入数字口令");
return;
}
this.loading = true;
//
// joinMeeting({ meetingCode: this.meetingCode })
// .then(() => {
// this.$message.success("");
// this.meetingCode = "";
// })
// .catch(() => {
// this.$message.error("");
// })
// .finally(() => {
// this.loading = false;
// });
//
setTimeout(() => {
this.$message.success("成功加入会议");
this.meetingCode = "";
this.loading = false;
}, 500);
},
//
handleModeClick(mode) {
this.$router.push({ name: mode.routeName });
},
//
async getList() {
this.loading = true;
try {
//
// const response = await listMeeting(this.queryParams);
// this.recordList = response.rows;
// this.queryParams.total = response.total;
//
throw new Error("接口请求失败");
} catch (error) {
console.warn("接口请求失败,使用假数据:", error);
this.$message.warning("获取会议列表失败,已加载模拟数据");
// 使
this.recordList = [...mockRecordList];
this.queryParams.total = 125;
} finally {
this.loading = false;
}
},
//
goFirst() {
this.queryParams.pageNum = 1;
this.getList();
},
goPrev() {
if (this.queryParams.pageNum > 1) {
this.queryParams.pageNum--;
this.getList();
}
},
goNext() {
if (this.queryParams.pageNum < this.totalPage) {
this.queryParams.pageNum++;
this.getList();
}
},
goLast() {
this.queryParams.pageNum = this.totalPage;
this.getList();
},
//
async showDetail(record) {
this.loading = true;
try {
//
// const response = await getMeeting(record.id);
// this.selectedRecord = response.data;
// 使
throw new Error("获取详情失败");
} catch (error) {
console.warn("获取详情接口失败,使用当前记录数据:", error);
this.$message.warning("获取会议详情失败,已加载基础信息");
this.selectedRecord = { ...record };
} finally {
this.showDetailDialog = true;
this.loading = false;
}
},
},
};
</script>
<style lang="scss" scoped>
.app-container {
padding: 10px;
}
//
.card {
.card-header {
display: flex;
align-items: center;
font-size: 16px;
font-weight: 500;
color: #333;
.line {
display: inline-block;
width: 3px;
height: 16px;
background-color: #009696;
margin-right: 8px;
}
}
//
.join-area {
display: flex;
align-items: center;
margin-bottom: 20px;
.join-input {
width: 250px;
margin-right: 10px;
}
.join-btn {
background-color: #009696;
border-color: #009696;
color: #fff;
&:hover {
background-color: #00796b;
border-color: #00796b;
}
}
}
//
.mode-list {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 10px;
.mode-item {
height: 115px;
border-radius: 8px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
color: #fff;
position: relative;
overflow: hidden;
cursor: pointer;
transition: transform 0.2s ease, box-shadow 0.2s ease;
&:hover {
transform: translateY(-3px);
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.2);
}
&:active {
transform: translateY(-1px);
}
.title {
font-size: 18px;
margin-bottom: 10px;
z-index: 1;
}
.icon-bg {
position: absolute;
right: 20px;
bottom: 20px;
font-size: 40px;
opacity: 0.3;
}
&::after {
content: "";
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 60px;
background: rgba(255, 255, 255, 0.1);
border-radius: 100% 100% 0 0;
}
&.blue {
background: linear-gradient(to right, #67c2ef, #2196f3);
}
&.yellow {
background: linear-gradient(to right, #ffd54f, #ff9800);
}
&.grayblue {
background: linear-gradient(to right, #b0bec5, #29b6f6);
}
&.greenblue {
background: linear-gradient(to right, #43d8c9, #29b6f6);
}
}
}
//
.more-btn {
color: #009696;
cursor: pointer;
}
}
</style>

File diff suppressed because it is too large Load Diff

@ -35,63 +35,50 @@
</div> </div>
</div> </div>
</el-card> </el-card>
<!-- 2. 会诊记录卡片 --> <!-- 2. 会诊记录卡片 -->
<el-card class="card"> <el-card class="card">
<div slot="header" class="card-header"> <div slot="header" class="card-header">
<span class="line"></span> <span class="line"></span>
会诊记录 会诊记录
</div> </div>
<!-- 无数据状态 -->
<div v-if="recordList.length === 0" class="no-data">
----- 无会诊记录 -----
</div>
<!-- 会诊表格 --> <!-- 会诊表格 -->
<el-table <div class="table-wrapper">
v-loading="loading" <el-table
v-else v-loading="loading"
:data="recordList" :data="recordList"
:show-header="false" :show-header="false"
stripe stripe
> height="calc(100vh - 550px)"
<el-table-column label="头像" prop="avatar" align="center" width="50">
<template slot-scope="scope">
<el-avatar :src="scope.row.avatar" />
</template>
</el-table-column>
<el-table-column label="会议名称" prop="name" align="center" />
<el-table-column label="类型" prop="type" align="center" />
<el-table-column label="时间" prop="time" align="center" />
<el-table-column label="操作" align="center" width="50">
<template slot-scope="scope">
<el-button
type="text"
icon="el-icon-more"
class="more-btn"
@click="showDetail(scope.row)"
/>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<div class="pagination-wrapper">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="queryParams.pageNum"
:page-sizes="[10, 20, 50, 100]"
:page-size="queryParams.pageSize"
layout="prev, pager, next"
:total="queryParams.total"
> >
</el-pagination> <el-table-column label="头像" prop="avatar" align="center" width="50">
<template slot-scope="scope">
<el-avatar :src="scope.row.avatar" />
</template>
</el-table-column>
<el-table-column label="会议名称" prop="name" align="center" />
<el-table-column label="类型" prop="type" align="center" />
<el-table-column label="时间" prop="time" align="center" />
<el-table-column label="操作" align="center" width="50">
<template slot-scope="scope">
<el-button
type="text"
icon="el-icon-more"
class="more-btn"
@click="showDetail(scope.row)"
/>
</template>
</el-table-column>
</el-table>
</div> </div>
<!-- 分页 -->
<pagination
v-show="queryParams.total > 0"
:total="queryParams.total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</el-card> </el-card>
<!-- 会诊详情弹框 --> <!-- 会诊详情弹框 -->
<el-dialog <el-dialog
title="会诊详情" title="会诊详情"
@ -101,11 +88,11 @@
> >
<el-form :model="selectedRecord" label-width="110px"> <el-form :model="selectedRecord" label-width="110px">
<el-form-item label="会议状态"> <el-form-item label="会议状态">
{{ selectedRecord.status || "进行中" }} {{ selectedRecord.status || "已结束" }}
</el-form-item> </el-form-item>
<el-divider /> <el-divider />
<el-form-item label="会议时间"> <el-form-item label="会议时间">
{{ selectedRecord.time }} {{ selectedRecord.time || "" }}
</el-form-item> </el-form-item>
<el-form-item label="会议持续时间"> <el-form-item label="会议持续时间">
{{ selectedRecord.duration || "0分钟0秒" }} {{ selectedRecord.duration || "0分钟0秒" }}
@ -126,11 +113,11 @@
</el-form-item> </el-form-item>
<el-divider /> <el-divider />
<el-form-item label="会议发起人"> <el-form-item label="会议发起人">
{{ selectedRecord.sponsor || "暂无" }} {{ selectedRecord.sponsor || "" }}
</el-form-item> </el-form-item>
<el-divider /> <el-divider />
<el-form-item label="参会人员"> <el-form-item label="参会人员">
{{ selectedRecord.participants || "暂无" }} {{ selectedRecord.participants || "" }}
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-dialog> </el-dialog>
@ -138,20 +125,125 @@
</template> </template>
<script> <script>
import { listMeeting, getMeeting, joinMeeting } from "@/api/videoCommunication"; // import { listMeeting, getMeeting, joinMeeting } from "@/api/videoCommunication";
//
const mockRecordList = [
{
id: 1,
name: "超声事业部的云诊室",
type: "会诊",
time: "2026-05-07 09:09:23",
avatar:
"https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png",
iconType: "blue",
duration: "0分钟0秒",
totalCases: "2",
positiveCases: "0",
negativeCases: "0",
referralCases: "4",
status: "已结束",
sponsor: "张三",
participants: "李四、王五",
},
{
id: 2,
name: "超声事业部的云诊室",
type: "会诊",
time: "2026-05-06 13:40:51",
avatar:
"https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png",
iconType: "blue",
duration: "0分钟0秒",
totalCases: "2",
positiveCases: "0",
negativeCases: "0",
referralCases: "4",
status: "已结束",
sponsor: "张三",
participants: "李四、王五",
},
{
id: 3,
name: "超声事业部的云教学",
type: "教学",
time: "2026-05-06 13:40:38",
avatar:
"https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png",
iconType: "orange",
duration: "0分钟0秒",
totalCases: "2",
positiveCases: "0",
negativeCases: "0",
referralCases: "4",
status: "已结束",
sponsor: "张三",
participants: "李四、王五",
},
{
id: 4,
name: "超声事业部的云诊室",
type: "会诊",
time: "2026-04-29 13:16:48",
avatar:
"https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png",
iconType: "blue",
duration: "0分钟0秒",
totalCases: "2",
positiveCases: "0",
negativeCases: "0",
referralCases: "4",
status: "已结束",
sponsor: "张三",
participants: "李四、王五",
},
{
id: 5,
name: "质控会议-6019100",
type: "质控",
time: "2026-04-20 18:14:20",
avatar:
"https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png",
iconType: "blue",
duration: "0分钟0秒",
totalCases: "2",
positiveCases: "0",
negativeCases: "0",
referralCases: "4",
status: "已结束",
sponsor: "张三",
participants: "李四、王五",
},
{
id: 6,
name: "超声事业部的云诊室",
type: "会诊",
time: "2026-04-20 18:14:09",
avatar:
"https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png",
iconType: "blue",
duration: "0分钟0秒",
totalCases: "2",
positiveCases: "0",
negativeCases: "0",
referralCases: "4",
status: "已结束",
sponsor: "张三",
participants: "李四、王五",
},
];
export default { export default {
name: "VideoPage", name: "VideoPage",
data() { data() {
return { return {
meetingCode: "", meetingCode: "",
//
loading: false, loading: false,
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
total: 0, total: 125, // 125
}, },
//
meetingModes: [ meetingModes: [
{ {
title: "实时会诊", title: "实时会诊",
@ -176,19 +268,22 @@ export default {
}, },
{ {
title: "病例研讨", title: "病例研讨",
icon: "el-icon-user-solid", icon: "el-icon-chat-line-square",
color: "greenblue", color: "greenblue",
routeName: "CaseDiscussion", routeName: "CaseStudy",
routePath: "/videoCommunication/caseDiscussion", routePath: "/videoCommunication/caseStudy",
}, },
], ],
//
recordList: [], recordList: [],
//
showDetailDialog: false, showDetailDialog: false,
selectedRecord: {}, selectedRecord: {},
}; };
}, },
computed: {
totalPage() {
return Math.ceil(this.queryParams.total / this.queryParams.pageSize);
},
},
mounted() { mounted() {
this.getList(); this.getList();
}, },
@ -200,66 +295,95 @@ export default {
return; return;
} }
this.loading = true; this.loading = true;
joinMeeting({ meetingCode: this.meetingCode }) //
.then(() => { // joinMeeting({ meetingCode: this.meetingCode })
this.$message.success("成功加入会议"); // .then(() => {
this.meetingCode = ""; // this.$message.success("");
}) // this.meetingCode = "";
.catch(() => { // })
this.$message.error("入会失败,请检查口令是否正确"); // .catch(() => {
}) // this.$message.error("");
.finally(() => { // })
this.loading = false; // .finally(() => {
}); // this.loading = false;
// });
//
setTimeout(() => {
this.$message.success("成功加入会议");
this.meetingCode = "";
this.loading = false;
}, 500);
}, },
// //
handleModeClick(mode) { handleModeClick(mode) {
this.$router.push({ name: mode.routeName }); this.$router.push({ name: mode.routeName });
}, },
//
getList() { //
this.loading = true; async getList() {
listMeeting(this.queryParams)
.then((response) => {
this.recordList = response.rows || [];
this.queryParams.total = response.total || 0;
})
.catch(() => {
this.$message.error("获取会议列表失败");
})
.finally(() => {
//
this.recordList = [];
this.queryParams.total = 0;
this.loading = false;
});
},
//
showDetail(record) {
this.loading = true; this.loading = true;
getMeeting(record.id) try {
.then((response) => { //
this.selectedRecord = response.data || record; // const response = await listMeeting(this.queryParams);
this.showDetailDialog = true; // this.recordList = response.rows;
}) // this.queryParams.total = response.total;
.catch(() => {
this.$message.error("获取会议详情失败"); //
this.selectedRecord = record; throw new Error("接口请求失败");
this.showDetailDialog = true; } catch (error) {
}) console.warn("接口请求失败,使用假数据:", error);
.finally(() => { this.$message.warning("获取会议列表失败,已加载模拟数据");
this.loading = false; // 使
}); this.recordList = [...mockRecordList];
this.queryParams.total = 125;
} finally {
this.loading = false;
}
}, },
//
handleSizeChange(val) { //
this.queryParams.pageSize = val; goFirst() {
this.queryParams.pageNum = 1;
this.getList(); this.getList();
}, },
handleCurrentChange(val) { goPrev() {
this.queryParams.pageNum = val; if (this.queryParams.pageNum > 1) {
this.queryParams.pageNum--;
this.getList();
}
},
goNext() {
if (this.queryParams.pageNum < this.totalPage) {
this.queryParams.pageNum++;
this.getList();
}
},
goLast() {
this.queryParams.pageNum = this.totalPage;
this.getList(); this.getList();
}, },
//
async showDetail(record) {
this.loading = true;
try {
//
// const response = await getMeeting(record.id);
// this.selectedRecord = response.data;
// 使
throw new Error("获取详情失败");
} catch (error) {
console.warn("获取详情接口失败,使用当前记录数据:", error);
this.$message.warning("获取会议详情失败,已加载基础信息");
this.selectedRecord = { ...record };
} finally {
this.showDetailDialog = true;
this.loading = false;
}
},
}, },
}; };
</script> </script>
@ -312,11 +436,11 @@ export default {
// //
.mode-list { .mode-list {
display: flex; display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 10px; gap: 10px;
.mode-item { .mode-item {
flex: 1;
height: 115px; height: 115px;
border-radius: 8px; border-radius: 8px;
display: flex; display: flex;
@ -381,23 +505,10 @@ export default {
} }
} }
// // ss
.no-data {
text-align: center;
padding: 50px 0;
color: #999;
}
//
.more-btn { .more-btn {
color: #009696; color: #009696;
cursor: pointer; cursor: pointer;
} }
//
.pagination-wrapper {
text-align: center;
margin-top: 15px;
}
} }
</style> </style>

File diff suppressed because it is too large Load Diff

@ -188,17 +188,12 @@
</footer> </footer>
<!-- 邀请弹窗 --> <!-- 邀请弹窗 -->
<el-dialog <CreateGroupDialog
title="通讯录邀请"
:visible.sync="inviteDialogVisible" :visible.sync="inviteDialogVisible"
width="30%" title="通讯录邀请"
> @confirm="handleInviteConfirm"
<p>这里是通讯录列表勾选用户进行邀请</p> @close="inviteDialogVisible = false"
<template slot="footer"> />
<el-button @click="inviteDialogVisible = false">取消</el-button>
<el-button type="primary" @click="confirmInvite">确定</el-button>
</template>
</el-dialog>
<!-- 设置弹窗 --> <!-- 设置弹窗 -->
<el-dialog <el-dialog
@ -348,10 +343,14 @@
<script> <script>
import CaseFormDialog from "@/views/cases/components/CaseFormDialog"; import CaseFormDialog from "@/views/cases/components/CaseFormDialog";
import CreateGroupDialog from "@/views/message/components/CreateGroupDialog";
export default { export default {
name: "MeetingRoom", name: "MeetingRoom",
components: { CaseFormDialog }, components: {
CaseFormDialog,
CreateGroupDialog,
},
data() { data() {
return { return {
// ==================== ==================== // ==================== ====================
@ -1065,8 +1064,9 @@ export default {
handleInvite() { handleInvite() {
this.inviteDialogVisible = true; this.inviteDialogVisible = true;
}, },
confirmInvite() { handleInviteConfirm(selectedContacts) {
this.$message.success("邀请成功"); console.log('邀请的联系人:', selectedContacts);
this.$message.success(`已邀请 ${selectedContacts.length} 位联系人`);
this.inviteDialogVisible = false; this.inviteDialogVisible = false;
}, },
fetchMeetingInfo() { fetchMeetingInfo() {

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save