Merge branch 'main' into 'stg'

Main

See merge request cloud-mediate/mediate-manage-web!69
This commit is contained in:
刘翕 2025-02-24 09:23:51 +00:00
commit 1de718ccff
6 changed files with 77 additions and 33 deletions

View File

@ -117,6 +117,7 @@ export default {
voiceCall.webCalling().then(res => { voiceCall.webCalling().then(res => {
const {agent, token, sdkAppId, agentId, sdkURL} = res; const {agent, token, sdkAppId, agentId, sdkURL} = res;
// console.log(res, '---res') // console.log(res, '---res')
this.$store.commit('setAgent', agent)
if (agent){ if (agent){
let userId = agentId; let userId = agentId;
let sdkUrl = sdkURL; let sdkUrl = sdkURL;

View File

@ -22,7 +22,7 @@
<el-avatar size="medium" :src="userInfo.headUrl?userInfo.headUrl:defaultHeadUrl" ></el-avatar> <el-avatar size="medium" :src="userInfo.headUrl?userInfo.headUrl:defaultHeadUrl" ></el-avatar>
<span class="f16 color-fff ml-16">{{ userInfo.realName || userInfo.showName || '-' }}</span> <span class="f16 color-fff ml-16">{{ userInfo.realName || userInfo.showName || '-' }}</span>
</div> </div>
<div class="cursor-pointer border-radius-8 p-8-16" style="background-color:#00000010 ;"> <div v-if="agent" class="cursor-pointer border-radius-8 p-8-16" style="background-color:#00000010 ;">
<el-dropdown @command="handleCommand"> <el-dropdown @command="handleCommand">
<div class="flex-row align-items-center"> <div class="flex-row align-items-center">
<img :src="require(`@/assets/image/${agentStatus}.png`)" alt="" class="mr-8"> <img :src="require(`@/assets/image/${agentStatus}.png`)" alt="" class="mr-8">
@ -224,9 +224,9 @@
<img :src="signUrl" width="125px" height="125px"/> <img :src="signUrl" width="125px" height="125px"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col v-if="PersonalInfo.signPic ==''" :span="16" class="line-height-10 color-86909C"> <el-col v-if="PersonalInfo.signPic ==''" :span="16" class="line-height-10 color-86909C pl-16 line-height-20" >
请使用微信扫码完成签字及刷脸认证 请使用微信扫码完成签字及刷脸认证<br>
<p>请保证个人信息中的姓名及身份证号信息是本人的真实信息</p> 请保证个人信息中的姓名及身份证号信息是本人的真实信息
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
@ -241,7 +241,7 @@
</template> </template>
<script> <script>
import api from "@/services/systemManage"; import api from "@/services/systemManage";
import {mapState} from 'vuex'
export default { export default {
components: { components: {
SideMenu: () => import('./SideMenu'), SideMenu: () => import('./SideMenu'),
@ -319,12 +319,23 @@ export default {
agentStatusName: '空闲', agentStatusName: '空闲',
} }
}, },
computed: {
...mapState({
agent: state => state.agent
}),
},
mounted() { mounted() {
if (JSON.parse(sessionStorage.getItem('userInfo'))) { if (JSON.parse(sessionStorage.getItem('userInfo'))) {
this.userInfo = JSON.parse(sessionStorage.getItem('userInfo')) this.userInfo = JSON.parse(sessionStorage.getItem('userInfo'))
} }
// console.log('',this.userInfo) // console.log('',this.userInfo)
// console.log(this.userInfo.showName) // console.log(this.userInfo.showName)
console.log('判断是否绑定坐席agent',this.agent)
// if (this.agent) {
// setTimeout(() => {
// this.getStatus()
// }, 2000)
// }
}, },
methods: { methods: {
// //
@ -414,6 +425,7 @@ export default {
} else if (command === 'rest') { } else if (command === 'rest') {
this.agentStatusName = '小休' this.agentStatusName = '小休'
} }
this.setStatus()
}, },
// //
handleClose() { handleClose() {
@ -437,6 +449,27 @@ export default {
}) })
}, },
//
async getStatus() {
console.log('进入获取座席状态')
try {
let res = await window.tccc.Agent.getStatus()
console.log('获取座席状态:', res)
} catch (error) {
this.$message.error('获取座席状态失败' + error.message)
console.log('获取座席状态失败',error.message)
}
},
//
async setStatus() {
try {
let res = await window.tccc.Agent.setStatus({status: this.agentStatus})
console.log('设置座席状态:', res)
} catch (err) {
this.$message.error('设置座席状态失败' + err.message)
console.log('设置座席状态失败',err.message)
}
}
} }
} }
</script> </script>

View File

@ -221,7 +221,7 @@ export default {
this.trtc = TRTC.create(); this.trtc = TRTC.create();
try { try {
await this.trtc.enterRoom({ await this.trtc.enterRoom({
roomId: this.roomId, strRoomId: this.roomId,
// sdkAppId: parseInt(this.sdkAppId, 10), // sdkAppId: parseInt(this.sdkAppId, 10),
sdkAppId: this.sdkAppId, sdkAppId: this.sdkAppId,
userId: this.userId, userId: this.userId,

View File

@ -32,26 +32,27 @@
<el-tag v-else-if="$util.getTimeContrast(item.bookingEndTime) && item.status.code == 4" size="small" type="warning">已取消</el-tag> <el-tag v-else-if="$util.getTimeContrast(item.bookingEndTime) && item.status.code == 4" size="small" type="warning">已取消</el-tag>
<el-tag v-else size="small" type="warning">已过期</el-tag> <el-tag v-else size="small" type="warning">已过期</el-tag>
</div> </div>
<div class="flex-row align-items-center"> <div class="flex-row align-items-center" v-if="$util.getTimeContrast(item.bookingEndTime)">
<!-- 进房 -->
<div v-if="$util.getTimeContrast(item.bookingEndTime)" >
<div class="f16 mr-8 cursor-pointer" <div class="f16 mr-8 cursor-pointer"
v-if="item.roomId && item.sdkAppId && item.userId && item.userSig && (item.status.code === 0 || item.status.code === 1)" v-if="item.roomId && item.sdkAppId && item.userId && item.userSig && (item.status.code === 0 || item.status.code === 1)"
@click="handleVideoCall(item)"> @click="handleVideoCall(item)">
<i class="el-icon-video-camera"></i> <i class="el-icon-video-camera"></i>
</div> </div>
</div>
<div class="f16 mr-8 cursor-pointer" <!-- 编辑 -->
v-if="item.status.code === 0 && timeComparison(item.bookingTime)" <div class="f16 mr-8 cursor-pointer"
@click="VideoEditDialog={id:item.id, bookingTime:item.bookingTime}"> v-if="item.status.code === 0"
<i class="el-icon-edit-outline"></i> @click="VideoEditDialog={id:item.id, bookingTime:item.bookingTime}">
</div> <i class="el-icon-edit-outline"></i>
<div class="f16 mr-8 cursor-pointer" </div>
v-if="item.status.code === 0 && timeComparison(item.bookingTime)"
@click="handleBackCase(item)"> <!-- 取消 -->
<i class="el-icon-delete"></i> <div class="f16 mr-8 cursor-pointer"
</div> v-if="item.status.code === 0"
@click="handleBackCase(item)">
<i class="el-icon-delete"></i>
</div>
</div> </div>
</div> </div>
<div class="flex-row justify-content-between align-items-center"> <div class="flex-row justify-content-between align-items-center">
@ -160,6 +161,7 @@ export default {
}).catch(() => {}); }).catch(() => {});
}, },
handleVideoCall(item) { handleVideoCall(item) {
if(!this.$parent.VideoCallDialog) { if(!this.$parent.VideoCallDialog) {
this.$parent.VideoCallDialog = { this.$parent.VideoCallDialog = {
id: item.id, id: item.id,

View File

@ -150,28 +150,28 @@
</div> </div>
<div class="case-pk-cont"> <div class="case-pk-cont">
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:0,title:'短信发送追踪'}"> <div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:0,title:'短信发送追踪'}">
<span>短信发送追踪</span><span><a>{{traceData.smsTrackingCount.failed ? traceData.smsTrackingCount.failed :'0'}}</a>/<a>{{traceData.smsTrackingCount.total}}</a></span> <span><i class="el-icon-message f16 mr-4"></i>短信发送追踪</span><span><a>{{traceData.smsTrackingCount.failed ? traceData.smsTrackingCount.failed :'0'}}</a>/<a>{{traceData.smsTrackingCount.total}}</a></span>
</div> </div>
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:1,title:'外呼事项追踪'}"> <div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:1,title:'外呼事项追踪'}">
<span>外呼事项追踪</span><span><a>{{traceData.intelligentCallTrackingCount.failed ? traceData.intelligentCallTrackingCount.failed :'0'}}</a>/<a>{{traceData.intelligentCallTrackingCount.total}}</a></span> <span><i class="el-icon-service f16 mr-4"></i>外呼事项追踪</span><span><a>{{traceData.intelligentCallTrackingCount.failed ? traceData.intelligentCallTrackingCount.failed :'0'}}</a>/<a>{{traceData.intelligentCallTrackingCount.total}}</a></span>
</div> </div>
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:2,title:'视频调解追踪'}"> <div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:2,title:'视频调解追踪'}">
<span>视频调解追踪</span><span><a>{{traceData.videoAppointmentTrackingCount.failed ? traceData.videoAppointmentTrackingCount.failed :'0'}}</a>/<a>{{traceData.videoAppointmentTrackingCount.total}}</a></span> <span><i class="el-icon-video-camera f16 mr-4"></i>视频调解追踪</span><span><a>{{traceData.videoAppointmentTrackingCount.failed ? traceData.videoAppointmentTrackingCount.failed :'0'}}</a>/<a>{{traceData.videoAppointmentTrackingCount.total}}</a></span>
</div> </div>
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:3,title:'文书生成追踪'}"> <div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:3,title:'文书生成追踪'}">
<span>文书生成追踪</span><span><a>{{traceData.documentGenerationTrackingCount.failed ? traceData.documentGenerationTrackingCount.failed :'0'}}</a>/<a>{{traceData.documentGenerationTrackingCount.total}}</a></span> <span><i class="el-icon-document-checked f16 mr-4"></i>文书生成追踪</span><span><a>{{traceData.documentGenerationTrackingCount.failed ? traceData.documentGenerationTrackingCount.failed :'0'}}</a>/<a>{{traceData.documentGenerationTrackingCount.total}}</a></span>
</div> </div>
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:4,title:'文书签字追踪'}"> <div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:4,title:'文书签字追踪'}">
<span>文书签字追踪</span><span><a>{{traceData.documentSignatureTrackingCount.failed ? traceData.documentSignatureTrackingCount.failed :'0'}}</a>/<a>{{traceData.documentSignatureTrackingCount.total}}</a></span> <span><i class="el-icon-reading f16 mr-4"></i>文书签字追踪</span><span><a>{{traceData.documentSignatureTrackingCount.failed ? traceData.documentSignatureTrackingCount.failed :'0'}}</a>/<a>{{traceData.documentSignatureTrackingCount.total}}</a></span>
</div> </div>
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:5,title:'文书签章追踪'}"> <div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:5,title:'文书签章追踪'}">
<span>文书签章追踪</span><span><a>{{traceData.electronicSealTrackingCount.failed ? traceData.electronicSealTrackingCount.failed :'0'}}</a>/<a>{{traceData.electronicSealTrackingCount.total}}</a></span> <span><i class="el-icon-coordinate f16 mr-4"></i>文书签章追踪</span><span><a>{{traceData.electronicSealTrackingCount.failed ? traceData.electronicSealTrackingCount.failed :'0'}}</a>/<a>{{traceData.electronicSealTrackingCount.total}}</a></span>
</div> </div>
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:6,title:'文书送达追踪'}"> <div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:6,title:'文书送达追踪'}">
<span>文书送达追踪</span><span><a>{{traceData.documentDeliveryTrackingCount.failed ? traceData.documentDeliveryTrackingCount.failed :'0'}}</a>/<a>{{traceData.documentDeliveryTrackingCount.total}}</a></span> <span><i class="el-icon-mobile-phone f16 mr-4"></i>文书送达追踪</span><span><a>{{traceData.documentDeliveryTrackingCount.failed ? traceData.documentDeliveryTrackingCount.failed :'0'}}</a>/<a>{{traceData.documentDeliveryTrackingCount.total}}</a></span>
</div> </div>
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:7,title:'还款凭证登记'}"> <div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:7,title:'还款凭证登记'}">
<span>还款凭证登记</span><span><a>{{traceData.repaymentRecordTrackingCount.failed ? traceData.repaymentRecordTrackingCount.failed :'0'}}</a>/<a>{{traceData.repaymentRecordTrackingCount.total}}</a></span> <span><i class="el-icon-school f16 mr-4"></i>还款凭证登记</span><span><a>{{traceData.repaymentRecordTrackingCount.failed ? traceData.repaymentRecordTrackingCount.failed :'0'}}</a>/<a>{{traceData.repaymentRecordTrackingCount.total}}</a></span>
</div> </div>
</div> </div>
</div> </div>
@ -632,6 +632,7 @@
.case-progress-cont{ .case-progress-cont{
background-color: #fff; background-color: #fff;
border-radius: 5px; border-radius: 5px;
font-size: 16px;
} }
.case-progress{ .case-progress{
background:url(../../assets/image/workbench/icon-bg.png) no-repeat; background:url(../../assets/image/workbench/icon-bg.png) no-repeat;
@ -656,14 +657,14 @@
.case-pro1{width: 155px;height: 105px;} .case-pro1{width: 155px;height: 105px;}
} }
.casework-1{ .casework-1{
background-color: #fff; background-color: #ec9dd82b;
border-radius: 8px; border-radius: 8px;
margin-top: 15px; margin-top: 15px;
} }
.casework2{ .casework2{
width: calc(100% - 850px); width: calc(100% - 850px);
.casework2-1{ .casework2-1{
background-color: #E1EDF4; background-color: #dbedf7;
height:578px; height:578px;
margin:4px 0 0 0; margin:4px 0 0 0;
@ -717,7 +718,7 @@
} }
.casework2-2{ .casework2-2{
background-color: #fff; background-color: #e2eb5321;
border-radius: 8px; border-radius: 8px;
margin-top: 15px; margin-top: 15px;
} }
@ -727,10 +728,11 @@
width: 400px; width: 400px;
margin:4px 0 0 0; margin:4px 0 0 0;
color: #4E5969; color: #4E5969;
font-size: 16px;
.pie-chart{ .pie-chart{
margin-top: 18px; margin-top: 18px;
padding: 18px; padding: 18px;
background-color: #fff; background-color: #ef806d42;
border-radius: 8px; border-radius: 8px;
.case-pk-title{ .case-pk-title{
@ -763,7 +765,7 @@
.item-trace{ .item-trace{
padding: 14px 18px; padding: 14px 18px;
height:575px ; height:575px ;
background-color: #fff; background-color: #d1f1dc4f;
border-radius: 8px; border-radius: 8px;
.case-pk-title{ .case-pk-title{
span:first-child{ span:first-child{
@ -801,6 +803,7 @@
a:first-child{ a:first-child{
color: #E8535A; color: #E8535A;
} }
span i{color: red;}
} }
} }
} }

View File

@ -11,6 +11,7 @@ const vuexPersisted = new CreatePersistedState({
token: state.token, //需要持久化的数据 token: state.token, //需要持久化的数据
routes: state.routes, routes: state.routes,
userinfo: state.userinfo, userinfo: state.userinfo,
agent: state.agent
}) })
}) })
@ -26,6 +27,7 @@ const store = new Vuex.Store({
routes: [], // 从后端获取的路由菜单 routes: [], // 从后端获取的路由菜单
brokerEndpoint: '', brokerEndpoint: '',
videoReminder: '', videoReminder: '',
agent: false, // 是否绑定坐席
}, },
plugins: [vuexPersisted], plugins: [vuexPersisted],
// 全局同步方法, 调用方法,this.$store.commit("xxx",'赋值数据') // 全局同步方法, 调用方法,this.$store.commit("xxx",'赋值数据')
@ -47,6 +49,9 @@ const store = new Vuex.Store({
}, },
setVideoReminder(state, data) { setVideoReminder(state, data) {
state.videoReminder = data; state.videoReminder = data;
},
setAgent(state, data) {
state.agent = data;
} }
}, },