在线质控-接口联调

main
ysn 1 week ago
parent ea2c988d3d
commit 53ff0ebabe
  1. 40
      src/api/videoCommunication.js
  2. 161
      src/views/message/components/CreateGroupDialog.vue
  3. 1402
      src/views/videoCommunication/qualityControl.vue

@ -7,6 +7,46 @@ export function postConsultationInfo(data) {
data
})
}
// 在线质控-创建质控{"avatar":"","init_users":[],"invite_code":"1234","name":"","room_id":"6688110"}
export function postQualityCreate(data) {
return request({
url: '/quality/create',
method: 'post',
data
})
}
// 在线质控-邀请质控{"invite_users":[687],"quality_id":1326}
export function postQualityInvite(data) {
return request({
url: '/quality/invite',
method: 'post',
data
})
}
// 在线质控-邀请质控-邀请人详情 {"user_id":687}
export function postUserInfo(data) {
return request({
url: '/users/info',
method: 'post',
data
})
}
// 在线质控-取消质控{"invite_type_detail":9,"quality_id":1326,"user_id":687}
export function postQualityQuit(data) {
return request({
url: '/quality/quit',
method: 'post',
data
})
}
// 在线质控-结束质控{"duration":134,"quality_id":1326}
export function postQualityStop(data) {
return request({
url: '/quality/stop',
method: 'post',
data
})
}
// 视讯-会议列表
export function getConsultationList(data) {
return request({

@ -1,35 +1,62 @@
<template>
<div>
<el-dialog :title="title" :visible.sync="visible" width="38%" append-to-body :before-close="handleClose">
<el-dialog
:title="title"
:visible.sync="visible"
width="38%"
append-to-body
:before-close="handleClose"
>
<el-row :gutter="20" class="body">
<!-- 左侧联系人选择区域 -->
<el-col :span="12">
<!-- 搜索框 -->
<el-input v-model="searchText" placeholder="搜索联系人" suffix-icon="el-icon-search" clearable
@keyup.enter.native="handleSearch" @clear="handleClearSearch" style="margin-bottom: 10px" />
<el-input
v-model="searchText"
placeholder="搜索联系人"
suffix-icon="el-icon-search"
clearable
@keyup.enter.native="handleSearch"
@clear="handleClearSearch"
style="margin-bottom: 10px"
/>
<!-- 标签页 -->
<el-tabs v-model="activeName" @tab-click="handleClick">
<!-- 最近联系人 -->
<el-tab-pane label="最近联系人" name="recentContacts">
<div v-loading="loading" class="contact-list">
<div v-for="member in displayMembers" :key="member.id" :class="[
<div
v-for="member in displayMembers"
:key="member.id"
:class="[
'member-item',
{
active: isSelected(member.id),
offline: !member.online,
},
]" @click="toggleSelect(member)">
<el-checkbox v-model="member.selected" :disabled="isSelectDisabled && !member.selected"
@change="toggleSelect(member)">
]"
@click="toggleSelect(member)"
>
<el-checkbox
v-model="member.selected"
:disabled="isSelectDisabled && !member.selected"
@change="toggleSelect(member)"
>
<div class="member-item-label">
<el-avatar :src="member.avatar" icon="el-icon-user-solid" />
<el-avatar
:src="member.avatar"
icon="el-icon-user-solid"
/>
<span class="member-name">{{ member.name }}</span>
<span v-if="member.online" class="online-dot" />
</div>
</el-checkbox>
</div>
<el-empty v-if="!loading && displayMembers.length === 0" description="暂无联系人" />
<el-empty
v-if="!loading && displayMembers.length === 0"
description="暂无联系人"
/>
</div>
</el-tab-pane>
@ -38,7 +65,11 @@
<div v-loading="loading" class="contact-list">
<div v-for="group in recentGroups" :key="group.id">
<!-- 群组标题 -->
<div class="group-header" :class="{ expanded: group.expanded }" @click="toggleGroupExpand(group)">
<div
class="group-header"
:class="{ expanded: group.expanded }"
@click="toggleGroupExpand(group)"
>
<el-avatar :size="32" :src="group.avatar" />
<span class="group-name">{{ group.name }}</span>
<i class="el-icon-arrow-right expand-icon" />
@ -46,21 +77,35 @@
<!-- 群成员列表 -->
<div v-if="group.expanded">
<!-- 全选 -->
<div class="member-item" :class="{ selected: group.allSelected }"
@click="toggleGroupAllSelect(group)">
<el-checkbox v-model="group.allSelected" @change="toggleGroupAllSelect(group)" />
<div
class="member-item"
:class="{ selected: group.allSelected }"
@click="toggleGroupAllSelect(group)"
>
<el-checkbox
v-model="group.allSelected"
@change="toggleGroupAllSelect(group)"
/>
<span class="member-name">全选</span>
</div>
<!-- 成员列表 -->
<div v-for="member in group.members" :key="member.id" :class="[
<div
v-for="member in group.members"
:key="member.id"
:class="[
'member-item',
{
active: isSelected(member.id),
offline: !member.online,
},
]" @click="toggleSelect(member)">
<el-checkbox v-model="member.selected" :disabled="isSelectDisabled && !member.selected"
@change="toggleSelect(member)">
]"
@click="toggleSelect(member)"
>
<el-checkbox
v-model="member.selected"
:disabled="isSelectDisabled && !member.selected"
@change="toggleSelect(member)"
>
<div class="member-item-label">
<el-avatar :size="32" :src="member.avatar" />
<span class="member-name">{{ member.name }}</span>
@ -69,16 +114,25 @@
</div>
</div>
</div>
<el-empty v-if="!loading && recentGroups.length === 0" description="暂无群组" />
<el-empty
v-if="!loading && recentGroups.length === 0"
description="暂无群组"
/>
</div>
</el-tab-pane>
<!-- 组织架构 -->
<el-tab-pane label="组织架构" name="organization">
<div v-loading="loading" class="contact-list">
<el-tree ref="orgTree" :data="treeData" :props="{ label: 'name', children: 'children' }"
:highlight-current="true" node-key="id" :expand-on-click-node="false"
@node-click="handleOrgNodeClick">
<el-tree
ref="orgTree"
:data="treeData"
:props="{ label: 'name', children: 'children' }"
:highlight-current="true"
node-key="id"
:expand-on-click-node="false"
@node-click="handleOrgNodeClick"
>
<template #default="{ node, data }">
<div class="custom-tree-node">
<!-- 组织节点 -->
@ -88,19 +142,30 @@
</template>
<!-- 全选节点 -->
<template v-else-if="data.type === 'all'">
<el-checkbox :indeterminate="data.indeterminate" v-model="data.checkAll"
@change="handleOrgCheckAllChange(data)">
<el-checkbox
:indeterminate="data.indeterminate"
v-model="data.checkAll"
@change="handleOrgCheckAllChange(data)"
>
全选
</el-checkbox>
</template>
<!-- 用户节点 -->
<div v-else-if="data.type === 'user'" class="userline">
<el-checkbox :value="isSelected(data.id)" @change="toggleSelect(data)"
:disabled="isSelectDisabled && !isSelected(data.id)">
<el-checkbox
:value="isSelected(data.id)"
@change="toggleSelect(data)"
:disabled="isSelectDisabled && !isSelected(data.id)"
>
<div class="member-item-label">
<el-avatar :size="32" :src="$store.state.user.netConfig
<el-avatar
:size="32"
:src="
$store.state.user.netConfig
.MINIO_ENDPOINT_HTTPS + data.avatar
" icon="el-icon-user-solid" />
"
icon="el-icon-user-solid"
/>
<span class="member-name">{{ data.name }}</span>
<span v-if="data.online" class="online-dot" />
</div>
@ -119,35 +184,58 @@
</el-col>
<!-- 右侧已选人员 -->
<el-col :span="12" style="height: 100%; display: flex; flex-direction: column">
<el-col
:span="12"
style="height: 100%; display: flex; flex-direction: column"
>
<div class="selected-header">
已选人员({{ selectedMembers.length }}
<template v-if="maxSelectCount > 0">/{{ maxSelectCount }}</template>)
<span v-if="selectedMembers.length > 0" class="clear-btn" @click="clearAllSelected">
<template v-if="maxSelectCount > 0">/{{ maxSelectCount }}</template
>)
<span
v-if="selectedMembers.length > 0"
class="clear-btn"
@click="clearAllSelected"
>
<i class="el-icon-close" />
</span>
</div>
<div class="selected-list">
<div v-for="member in selectedMembers" :key="member.id" class="selected-item">
<div
v-for="member in selectedMembers"
:key="member.id"
class="selected-item"
>
<el-avatar :size="40" :src="member.avatar" />
<span class="selected-name">{{ member.name }}</span>
<span class="remove-btn" @click="removeSelected(member)">
<i class="el-icon-close" />
</span>
</div>
<el-empty v-if="selectedMembers.length === 0" description="暂无选中人员" class="empty-tip" />
<el-empty
v-if="selectedMembers.length === 0"
description="暂无选中人员"
class="empty-tip"
/>
</div>
<div v-if="
<div
v-if="
maxSelectCount > 0 && selectedMembers.length >= maxSelectCount
" class="max-tip">
"
class="max-tip"
>
已达到最大选择数量({{ maxSelectCount }})
</div>
</el-col>
</el-row>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose"> </el-button>
<el-button type="primary" :loading="confirmLoading" :disabled="selectedMembers.length < minSelectCount"
@click="confirmCreateGroup">
<el-button
type="primary"
:loading="confirmLoading"
:disabled="selectedMembers.length < minSelectCount"
@click="confirmCreateGroup"
>
确认
</el-button>
</span>
@ -652,6 +740,7 @@ export default {
handleClose(done) {
this.clearAllSelected();
this.searchText = "";
this.visible = false;
},
//

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