Merge branch 'hcb' of SH-Arbitrate/Arbitrate-FrontendH5 into master

This commit was merged in pull request #3.
This commit is contained in:
2024-04-29 09:40:56 +08:00
committed by Gitea
3 changed files with 103 additions and 200 deletions
+19 -57
View File
@@ -1,75 +1,35 @@
<template> <template>
<div class="roomFooter"> <div class="roomFooter">
<div class="outRoom"> <div class="outRoom">
<el-button type="danger" @click="exitRoom" v-if="!roleFlag" <el-button type="danger" @click="exitRoom" v-if="!roleFlag">退出房间</el-button>
>退出房间</el-button <el-button type="danger" @click="exitRoom" v-if="roleFlag">解散房间</el-button>
>
<el-button type="danger" @click="exitRoom" v-if="roleFlag"
>解散房间</el-button
>
</div> </div>
<div class="operation"> <div class="operation">
<div class="mic"> <div class="mic">
<img <img class="micImg" src="@/assets/mic_on.png" alt="" v-if="micFlag" @click="micClickOn" />
class="micImg" <img class="micImg" src="@/assets/mic_off.png" alt="" v-else @click="micClickOff" />
src="@/assets/mic_on.png"
alt=""
v-if="micFlag"
@click="micClickOn"
/>
<img
class="micImg"
src="@/assets/mic_off.png"
alt=""
v-else
@click="micClickOff"
/>
</div> </div>
<div class="video"> <div class="video">
<img <img class="videoImg" src="@/assets/video_on.png" alt="" v-if="videoFlag" @click="videoClickOn" />
class="videoImg" <img class="videoImg" src="@/assets/video_off.png" alt="" v-else @click="videoClickOff" />
src="@/assets/video_on.png"
alt=""
v-if="videoFlag"
@click="videoClickOn"
/>
<img
class="videoImg"
src="@/assets/video_off.png"
alt=""
v-else
@click="videoClickOff"
/>
</div> </div>
<div class="sharing"> <div class="sharing">
<img <img class="sharImg" src="@/assets/screenShare_on.png" alt="" v-if="sharFlag" @click="sharClickOn" />
class="sharImg" <img class="sharImg" src="@/assets/screenShare_off.png" alt="" v-else @click="sharClickOff" />
src="@/assets/screenShare_on.png"
alt=""
v-if="sharFlag"
@click="sharClickOn"
/>
<img
class="sharImg"
src="@/assets/screenShare_off.png"
alt=""
v-else
@click="sharClickOff"
/>
</div> </div>
<div class="mediationPop"> <div class="mediationPop">
<el-button type="warning" @click="mediationPop">调解</el-button> <el-button type="warning" @click="mediationPop">调解</el-button>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import { startVideo, stopVideo, destructionRoom } from "@/api/room.js"; import { startVideo, stopVideo, destructionRoom } from "@/api/room.js";
export default { export default {
name: "Footer", name: "Footer",
props: ["micFlag","videoFlag","sharFlag"], props: ["micFlag", "videoFlag", "sharFlag"],
components: {}, components: {},
data() { data() {
return { return {
@@ -112,7 +72,7 @@ export default {
this.$emit("sharClickOff"); this.$emit("sharClickOff");
}, },
// 弹出调解内容 // 弹出调解内容
mediationPop(){ mediationPop() {
this.$emit("mediationPop"); this.$emit("mediationPop");
}, },
exitRoom() { exitRoom() {
@@ -153,8 +113,8 @@ export default {
}, },
}; };
</script> </script>
<style scoped> <style scoped>
.roomFooter { .roomFooter {
width: 100%; width: 100%;
height: 100%; height: 100%;
@@ -202,9 +162,11 @@ export default {
height: 60px; height: 60px;
margin-left: 20px; margin-left: 20px;
} }
.mediationPop{
.mediationPop {
margin-left: 20px; margin-left: 20px;
} }
.micImg, .micImg,
.videoImg, .videoImg,
.sharImg { .sharImg {
-1
View File
@@ -35,7 +35,6 @@ export default {
} }
axios.get(`http://121.40.189.20:9090/onlyOfficeConfig/${edit}/${id}/${this.userId}/desktop/true`).then(res => { axios.get(`http://121.40.189.20:9090/onlyOfficeConfig/${edit}/${id}/${this.userId}/desktop/true`).then(res => {
this.config = res.data; this.config = res.data;
debugger
var docEditor = new DocsAPI.DocEditor("placeholder", this.config); var docEditor = new DocsAPI.DocEditor("placeholder", this.config);
}) })
}, },
+84 -142
View File
@@ -2,46 +2,25 @@
<div class="page"> <div class="page">
<div class="roompage" @mouseover="mouseHover" v-if="modileFlag"> <div class="roompage" @mouseover="mouseHover" v-if="modileFlag">
<div class="txtContent"> <div class="txtContent">
<el-tag type="danger" @click="txtContent" v-if="modileFlag" <el-tag type="danger" @click="txtContent" v-if="modileFlag">会议内容</el-tag>
>会议内容</el-tag
>
</div> </div>
<div class="content"> <div class="content">
<div <div class="screenShare" id="screenShare" v-show="screenShareFlag"></div>
class="screenShare"
id="screenShare"
v-show="screenShareFlag"
></div>
<div :class="videoList"> <div :class="videoList">
<div :class="videoClass" id="localStream"> <div :class="videoClass" id="localStream">
<div class="userName">{{ userId }}</div> <div class="userName">{{ userId }}</div>
</div> </div>
<div <div :class="videoClass" v-for="(item, index) in userList" :key="index" :id="item">
:class="videoClass"
v-for="(item, index) in userList"
:key="index"
:id="item"
>
<div class="userName">{{ item }}</div> <div class="userName">{{ item }}</div>
</div> </div>
</div> </div>
</div> </div>
<div class="footerList"> <div class="footerList">
<roomFooter <roomFooter @exitRoom="exitRoom" @micClickOn="micClickOn" @micClickOff="micClickOff"
@exitRoom="exitRoom" @videoClickOn="videoClickOn" @videoClickOff="videoClickOff" @sharClickOn="sharClickOn"
@micClickOn="micClickOn" @sharClickOff="sharClickOff" @mediationPop="mediationPop" :roomId="roomId" :micFlag="micFlag"
@micClickOff="micClickOff" :videoFlag="videoFlag" :sharFlag="sharFlag"></roomFooter>
@videoClickOn="videoClickOn"
@videoClickOff="videoClickOff"
@sharClickOn="sharClickOn"
@sharClickOff="sharClickOff"
@mediationPop="mediationPop"
:roomId="roomId"
:micFlag="micFlag"
:videoFlag="videoFlag"
:sharFlag="sharFlag"
></roomFooter>
</div> </div>
</div> </div>
<div class="roomPhone" v-if="!modileFlag"> <div class="roomPhone" v-if="!modileFlag">
@@ -52,12 +31,7 @@
<div :class="userClassPhone" id="localStream"> <div :class="userClassPhone" id="localStream">
<div class="userNamePhone">{{ userId }}</div> <div class="userNamePhone">{{ userId }}</div>
</div> </div>
<div <div :class="userClassPhone" v-for="(item, index) in userList" :key="index" :id="item">
:class="userClassPhone"
v-for="(item, index) in userList"
:key="index"
:id="item"
>
<div class="userNamePhone">{{ item }}</div> <div class="userNamePhone">{{ item }}</div>
</div> </div>
</div> </div>
@@ -156,111 +130,52 @@
</div> </div>
</div> </div>
</div> --> </div> -->
<quill-editor <quill-editor ref="myQuillEditor" v-model="contentValue" :options="editorOption" @blur="onEditorBlur($event)"
ref="myQuillEditor" @focus="onEditorFocus($event)" @ready="onEditorReady($event)"></quill-editor>
v-model="contentValue" <el-button class="updataBtn" @click="updataClick" type="primary" :disabled="!updataFlag">确认修改内容</el-button>
:options="editorOption"
@blur="onEditorBlur($event)"
@focus="onEditorFocus($event)"
@ready="onEditorReady($event)"
></quill-editor>
<el-button
class="updataBtn"
@click="updataClick"
type="primary"
:disabled="!updataFlag"
>确认修改内容</el-button
>
</el-drawer> </el-drawer>
<!-- 调解 --> <!-- 调解 -->
<el-drawer :visible.sync="drawerMediatio" direction="ltr" title="调解内容"> <el-drawer :visible.sync="drawerMediatio" direction="ltr" title="调解内容">
<div <div style="
style="
width: 100%; width: 100%;
display: flex; display: flex;
justify-content: space-around; justify-content: space-around;
margin-bottom: 10px; margin-bottom: 10px;
margin-top: 20px; margin-top: 20px;
" ">
> <el-upload ref="upload" :limit="1" :action="UploadUrl()" :headers="headers" :data="filedata"
<el-upload :on-change="beforeUpload" :on-success="handlSuccess" :file-list="fileList" v-if="appFlag">
ref="upload" <el-button slot="trigger" size="small" type="primary">申请人上传证据</el-button>
:limit="1"
:action="UploadUrl()"
:headers="headers"
:data="filedata"
:on-change="beforeUpload"
:on-success="handlSuccess"
:file-list="fileList"
v-if="appFlag"
>
<el-button slot="trigger" size="small" type="primary"
>申请人上传证据</el-button
>
</el-upload> </el-upload>
<el-upload <el-upload ref="upload1" :limit="1" :action="UploadUrl()" :headers="headers1" :data="filedata1"
ref="upload1" :on-change="beforeUpload1" :on-success="handlSuccess1" :file-list="fileList1" v-if="resFlag">
:limit="1" <el-button slot="trigger" size="small" type="primary">被申请人上传证据</el-button>
:action="UploadUrl()"
:headers="headers1"
:data="filedata1"
:on-change="beforeUpload1"
:on-success="handlSuccess1"
:file-list="fileList1"
v-if="resFlag"
>
<el-button slot="trigger" size="small" type="primary"
>被申请人上传证据</el-button
>
</el-upload> </el-upload>
<el-upload <el-upload ref="upload3" :limit="1" :action="UploadUrl()" :headers="headers3" :data="filedata3"
ref="upload3" :on-change="beforeUpload3" :on-success="handlSuccess3" :file-list="fileList3" accept=".doc,.docx"
:limit="1" v-if="updataFlag">
:action="UploadUrl()" <el-button slot="trigger" size="small" type="primary">上传调解书</el-button>
:headers="headers3"
:data="filedata3"
:on-change="beforeUpload3"
:on-success="handlSuccess3"
:file-list="fileList3"
accept=".doc,.docx"
v-if="updataFlag"
>
<el-button slot="trigger" size="small" type="primary"
>上传调解书</el-button
>
</el-upload> </el-upload>
</div> </div>
<div class="list"> <div class="list">
<div class="applicant" v-if="applicantFile.length > 0"> <div class="applicant" v-if="applicantFile.length > 0">
<div>申请人证据</div> <div>申请人证据</div>
<div <div style="color: #104fad; cursor: pointer" v-for="(item, index) in applicantFile" :key="index"
style="color: #104fad; cursor: pointer" @click="preview(item, 0)">
v-for="(item, index) in applicantFile"
:key="index"
@click="preview(item, 0)"
>
{{ item.annexName }} {{ item.annexName }}
</div> </div>
</div> </div>
<div class="res" v-if="resFile.length > 0"> <div class="res" v-if="resFile.length > 0">
<div>被申请人证据</div> <div>被申请人证据</div>
<div <div style="color: #104fad; cursor: pointer" v-for="(item, index) in resFile" :key="index"
style="color: #104fad; cursor: pointer" @click="preview(item, 0)">
v-for="(item, index) in resFile"
:key="index"
@click="preview(item, 0)"
>
{{ item.annexName }} {{ item.annexName }}
</div> </div>
</div> </div>
<div class="mediate" v-if="mediateFile.length > 0"> <div class="mediate" v-if="mediateFile.length > 0">
<div>调解书</div> <div>调解书</div>
<div <div style="color: #104fad; cursor: pointer" v-for="(item, index) in mediateFile" :key="index"
style="color: #104fad; cursor: pointer" @click="preview(item, 1)">
v-for="(item, index) in mediateFile"
:key="index"
@click="preview(item, 1)"
>
{{ item.annexName }} {{ item.annexName }}
</div> </div>
</div> </div>
@@ -296,7 +211,7 @@
</template> </template>
<script> <script>
import { getUsersig, reserveConferenceList,confirmMeetingResult } from "@/api/home"; import { getUsersig, reserveConferenceList, confirmMeetingResult } from "@/api/home";
import { import {
secretaryRoleByUserId, secretaryRoleByUserId,
htmlToPDF, htmlToPDF,
@@ -352,11 +267,11 @@ export default {
applicantFile: [], applicantFile: [],
resFile: [], resFile: [],
mediateFile: [], mediateFile: [],
formData:{ formData: {
mediaResult:1, mediaResult: 1,
sealFlag:1 sealFlag: 1
}, },
caseFlowId:null, caseFlowId: null,
headers: { headers: {
// Authorization: "Bearer " + token, // Authorization: "Bearer " + token,
Authorization: "", Authorization: "",
@@ -532,7 +447,9 @@ export default {
} }
let token = sessionStorage.getItem("token"); let token = sessionStorage.getItem("token");
window.open( window.open(
`http://121.40.189.20:8002/onlyoffice?id=${item.onlyOfficeFileId}&flag=${flag}&token=${token}`, // `http://121.40.189.20:8002/onlyoffice?id=${item.onlyOfficeFileId}&flag=${flag}&token=${token}`,
// "_black"
`http://localhost:81/onlyoffice?id=${item.onlyOfficeFileId}&flag=${flag}&token=${token}`,
"_black" "_black"
); );
} else { } else {
@@ -619,8 +536,10 @@ export default {
}); });
this.localStreamAsr.stop(); this.localStreamAsr.stop();
await trtc.exitRoom(); await trtc.exitRoom();
await trtc.updateLocalVideo({ publish: false }); // await trtc.updateLocalVideo({ publish: false });
await trtc.updateLocalAudio({ publish: false }); // await trtc.updateLocalAudio({ publish: false });
await trtc.stopLocalVideo();
await trtc.stopLocalAudio();
await trtc.destroy(); await trtc.destroy();
this.$router.push({ this.$router.push({
name: "Home", name: "Home",
@@ -683,30 +602,41 @@ export default {
// }) // })
}); });
}, },
/**主持人解散房间监听事件 */
exitRoomAll() {
trtc.on(TRTC.EVENT.KICKED_OUT, event => {
console.log(event.reason);
alert("主持人已经解散会议");
this.$router.push({
name: "Home",
});
this.userList = [];
});
},
// 删除退出会议人员列表 // 删除退出会议人员列表
deletePushVideo() { deletePushVideo() {
trtc.on(TRTC.EVENT.REMOTE_VIDEO_UNAVAILABLE, (event) => { trtc.on(TRTC.EVENT.REMOTE_VIDEO_UNAVAILABLE, (event) => {
const streamType = event.streamType; const streamType = event.streamType;
const userId = event.userId; const userId = event.userId;
if (streamType == "main") { if (streamType == "main") {
if (this.hostId == userId) { // if (this.hostId == userId) {
alert("主持人已经解散会议"); // alert("主持人已经解散会议");
this.$router.push({ // this.$router.push({
name: "Home", // name: "Home",
}); // });
this.userList = []; // this.userList = [];
return; // return;
} // }
let deleteIndex = this.userList.indexOf(userId); let deleteIndex = this.userList.indexOf(userId);
this.userList = this.userList.filter((item) => item !== userId); this.userList = this.userList.filter((item) => item !== userId);
if (deleteIndex !== -1) { if (deleteIndex !== -1) {
this.userList.splice(deleteIndex, 1); this.userList.splice(deleteIndex, 1);
} }
if (this.modileFlag) { // if (this.modileFlag) {
// this.userHeight = getHeight(this.userList); // // this.userHeight = getHeight(this.userList);
} else { // } else {
this.userClassPhone = getWidthPhone(this.userList); // this.userClassPhone = getWidthPhone(this.userList);
} // }
Object.keys(this.asrList).forEach((key) => { Object.keys(this.asrList).forEach((key) => {
this.asrList[userId].stop(); this.asrList[userId].stop();
}); });
@@ -748,25 +678,25 @@ export default {
} }
}); });
}, },
// 调解 // 调解
mediationPop() { mediationPop() {
this.drawerMediatio = true; this.drawerMediatio = true;
this.selectByIdFn(this.caseId); this.selectByIdFn(this.caseId);
setInterval(() => { setInterval(() => {
this.selectByIdFn(this.caseId); this.selectByIdFn(this.caseId);
}, 8000); }, 8000);
this.selectRoleMenuByCaseIdFn(this.caseId); this.selectRoleMenuByCaseIdFn(this.caseId);
this.getMenuPermsByUserFn(); this.getMenuPermsByUserFn();
}, },
// 确定会议结果 // 确定会议结果
determineMeeting(){ determineMeeting() {
let valueMeeting = { let valueMeeting = {
id:this.caseId, id: this.caseId,
mediaResult: this.formData.mediaResult, mediaResult: this.formData.mediaResult,
sealFlag:this.formData.sealFlag, sealFlag: this.formData.sealFlag,
caseFlowId:this.caseFlowId caseFlowId: this.caseFlowId
} }
confirmMeetingResult(valueMeeting).then(res=>{ confirmMeetingResult(valueMeeting).then(res => {
if (res.code == 200) { if (res.code == 200) {
this.$message({ this.$message({
message: "确定成功", message: "确定成功",
@@ -833,6 +763,7 @@ export default {
}); });
this.getPushVideo(); this.getPushVideo();
this.deletePushVideo(); this.deletePushVideo();
this.exitRoomAll();
try { try {
await trtc.enterRoom({ await trtc.enterRoom({
roomId: Number(roomId), roomId: Number(roomId),
@@ -898,11 +829,13 @@ export default {
width: 100%; width: 100%;
height: 100vh; height: 100vh;
} }
.content { .content {
width: 100%; width: 100%;
height: 90%; height: 90%;
display: flex; display: flex;
} }
.videoList { .videoList {
width: 100%; width: 100%;
height: 100%; height: 100%;
@@ -914,6 +847,7 @@ export default {
margin-bottom: 20px; margin-bottom: 20px;
position: relative; position: relative;
} }
.videoList1 { .videoList1 {
width: 20%; width: 20%;
height: 100%; height: 100%;
@@ -925,6 +859,7 @@ export default {
margin-bottom: 20px; margin-bottom: 20px;
position: relative; position: relative;
} }
.txtContent { .txtContent {
width: 100px; width: 100px;
height: 50px; height: 50px;
@@ -941,18 +876,21 @@ export default {
background: red; background: red;
border-radius: 20px; border-radius: 20px;
} }
.videoItem1 { .videoItem1 {
width: 32%; width: 32%;
height: 32%; height: 32%;
background: red; background: red;
border-radius: 20px; border-radius: 20px;
} }
.videoItem3 { .videoItem3 {
width: 48%; width: 48%;
height: 100%; height: 100%;
background: red; background: red;
border-radius: 20px; border-radius: 20px;
} }
.videoItem2 { .videoItem2 {
width: 90%; width: 90%;
height: 25%; height: 25%;
@@ -970,11 +908,13 @@ export default {
bottom: 0; bottom: 0;
z-index: 10; z-index: 10;
} }
.screenShare { .screenShare {
width: 80%; width: 80%;
height: 100%; height: 100%;
background: yellow; background: yellow;
} }
.userName { .userName {
border-radius: 10px; border-radius: 10px;
width: 90px; width: 90px;
@@ -988,11 +928,13 @@ export default {
z-index: 9; z-index: 9;
color: #ffffff; color: #ffffff;
} }
.footerList { .footerList {
width: 100%; width: 100%;
height: 10%; height: 10%;
background: green; background: green;
} }
.userNamePhone { .userNamePhone {
border-radius: 10px; border-radius: 10px;
min-width: 20%; min-width: 20%;