视讯-会诊记录-接口联调

main
ysn 4 days ago
parent 0dd4edec04
commit fc085d1222
  1. 16
      src/api/videoCommunication.js
  2. 297
      src/views/videoCommunication/index.vue

@ -1,10 +1,18 @@
import request from '@/utils/request' import request from '@/utils/request'
// 视讯-会议列表 // 视讯-会议列表
export function listConsultation(query) { export function getConsultationList(data) {
return request({ return request({
url: '/v1/consultation/list', url: '/consultation/list',
method: 'get', method: 'post',
params: query data
})
}
// 视讯-会议详情
export function getConsultationMeetingInfo(data) {
return request({
url: '/consultation/meeting_info',
method: 'post',
data
}) })
} }

@ -45,26 +45,27 @@
<div class="table-wrapper"> <div class="table-wrapper">
<el-table <el-table
v-loading="loading" v-loading="loading"
:data="recordList" :data="list"
:show-header="false" :show-header="false"
stripe stripe
height="calc(100vh - 550px)" height="calc(100vh - 550px)"
> >
<el-table-column label="头像" prop="avatar" align="center" width="50"> <el-table-column label="视迅头像" prop="avatar" align="center" width="50">
<template slot-scope="scope"> <template slot-scope="scope">
<el-avatar :src="scope.row.avatar" /> <el-avatar :src="scope.row.avatar" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="会议名称" prop="name" align="center" /> <el-table-column label="视迅名称" prop="name" align="center" />
<el-table-column label="类型" prop="type" align="center" /> <el-table-column label="视迅类型" prop="meet_type_name" align="center" />
<el-table-column label="时间" prop="time" align="center" /> <el-table-column label="加入会诊时间" prop="create_time" align="center" />
<!-- 状态status 1-开始 0-结束 -->
<el-table-column label="操作" align="center" width="50"> <el-table-column label="操作" align="center" width="50">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
type="text" type="text"
icon="el-icon-more" icon="el-icon-more"
class="more-btn" class="more-btn"
@click="showDetail(scope.row)" @click="handleDetail(scope.row)"
/> />
</template> </template>
</el-table-column> </el-table-column>
@ -74,50 +75,82 @@
<pagination <pagination
v-show="queryParams.total > 0" v-show="queryParams.total > 0"
:total="queryParams.total" :total="queryParams.total"
:page.sync="queryParams.pageNum" :page.sync="queryParams.page"
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</el-card> </el-card>
<!-- 会诊详情弹框 --> <!-- 会诊详情弹框 -->
<el-dialog <el-dialog
title="会诊详情" :title="meetingDetail.name"
:visible.sync="showDetailDialog" :visible.sync="meetingDetailVisible"
width="400px" width="35%"
:close-on-click-modal="false" :close-on-click-modal="false"
> >
<el-form :model="selectedRecord" label-width="110px"> <el-form :model="selectedRecord" label-width="110px">
<el-form-item label="会议状态"> <el-form-item>
{{ selectedRecord.status || "已结束" }} {{ getStatusText(meetingDetail.status) }}
</el-form-item> </el-form-item>
<el-divider /> <el-divider />
<el-form-item label="会议时间"> <el-form-item label="会议时间">
{{ selectedRecord.time || "" }} {{ meetingDetail.create_time || "" }}
</el-form-item> </el-form-item>
<el-form-item label="会议持续时间"> <el-form-item label="会议持续时间">
{{ selectedRecord.duration || "0分钟0秒" }} {{ formatDuration(meetingDetail.duration) }}
</el-form-item> </el-form-item>
<el-form-item label="病例数记录"> <el-form-item label="病例数记录">
<el-form-item label="总病例数"> <el-form-item label="总病例数">
{{ selectedRecord.totalCases || "2" }} {{ meetingDetail.total_patients }}
</el-form-item> </el-form-item>
<el-form-item label="阳性病例数"> <el-form-item label="阳性病例数">
{{ selectedRecord.positiveCases || "0" }} {{ meetingDetail.positive_patients }}
</el-form-item>
<el-form-item label="阴性病例数">
{{ selectedRecord.negativeCases || "0" }}
</el-form-item> </el-form-item>
<el-form-item label="上级转诊病例数"> <el-form-item label="上级转诊病例数">
{{ selectedRecord.referralCases || "4" }} {{ meetingDetail.transfer_patients }}
</el-form-item> </el-form-item>
</el-form-item> </el-form-item>
<el-divider /> <el-divider />
<el-form-item label="会议发起人"> <el-form-item label="会议发起人">
{{ selectedRecord.sponsor || "" }} <el-row>
<el-col :span="3">
<el-form-item>
<el-avatar
:src="meetingDetail.user_list && meetingDetail.user_list[0] ? meetingDetail.user_list[0].avatar : ''"
size="48"
class="person-avatar"
/>
</el-form-item>
</el-col>
<el-col :span="21">
<el-form-item>
{{ meetingDetail.user_name || "" }}
</el-form-item>
</el-col>
</el-row>
</el-form-item> </el-form-item>
<el-divider /> <el-divider />
<el-form-item label="参会人员"> <el-form-item label="参会人员" label-position="top">
{{ selectedRecord.participants || "" }} <el-row v-for="(item, index) in meetingDetail.user_list" :key="index">
<el-col :span="3">
<el-form-item>
<el-avatar
:src="item.avatar"
size="48"
class="person-avatar"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item>
{{ item.name || "" }}
</el-form-item>
</el-col>
<el-col :span="15">
<el-form-item label="入会时间">
{{ item.join_time || "" }}
</el-form-item>
</el-col>
</el-row>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-dialog> </el-dialog>
@ -125,113 +158,10 @@
</template> </template>
<script> <script>
// import { listMeeting, getMeeting, joinMeeting } from "@/api/videoCommunication"; import {
getConsultationList,
// getConsultationMeetingInfo,
const mockRecordList = [ } from "@/api/videoCommunication";
{
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",
@ -240,9 +170,9 @@ export default {
meetingCode: "", meetingCode: "",
loading: false, loading: false,
queryParams: { queryParams: {
pageNum: 1, page: 1,
pageSize: 10, pageSize: 10,
total: 125, // 125 total: 0,
}, },
meetingModes: [ meetingModes: [
{ {
@ -274,20 +204,32 @@ export default {
routePath: "/videoCommunication/caseStudy", routePath: "/videoCommunication/caseStudy",
}, },
], ],
recordList: [], list: [],
showDetailDialog: false, meetingDetailVisible: false,
selectedRecord: {}, meetingDetail: {},
}; };
}, },
computed: {
totalPage() {
return Math.ceil(this.queryParams.total / this.queryParams.pageSize);
},
},
mounted() { mounted() {
this.getList(); this.getList();
}, },
methods: { methods: {
//
getStatusText(status) {
const statusMap = {
0: "已结束",
1: "进行中",
2: "空闲",
};
return statusMap[status] || "已结束";
},
//
formatDuration(seconds) {
if (!seconds) return '-'
const h = Math.floor(seconds / 3600)
const m = Math.floor((seconds % 3600) / 60)
const s = seconds % 60
return `${h}${m}${s}`
},
// //
joinMeeting() { joinMeeting() {
if (!this.meetingCode.trim()) { if (!this.meetingCode.trim()) {
@ -321,68 +263,23 @@ export default {
this.$router.push({ name: mode.routeName }); this.$router.push({ name: mode.routeName });
}, },
// //
async getList() { getList() {
this.loading = true; this.loading = true;
try { getConsultationList(this.queryParams).then((res) => {
// console.log("会诊记录列表", res);
// const response = await listMeeting(this.queryParams); this.list = res.data.list;
// this.recordList = response.rows; this.queryParams.total = Number(res.data.total);
// 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; 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();
}, },
//
// handleDetail(row) {
async showDetail(record) { getConsultationMeetingInfo(row).then((res) => {
this.loading = true; console.log("会诊记录详情", res);
try { this.meetingDetail = res.data;
// this.meetingDetailVisible = true;
// 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;
}
}, },
}, },
}; };
@ -505,7 +402,7 @@ export default {
} }
} }
// ss //
.more-btn { .more-btn {
color: #009696; color: #009696;
cursor: pointer; cursor: pointer;

Loading…
Cancel
Save