mediate-manage-web/src/components/VoiceCallDialog.vue
tdg930622 fd74167f55 tj
2025-01-20 15:38:27 +08:00

311 lines
9.2 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div :class="zoomActive ? 'voiceCall-content-big' : 'voiceCall-content-small'">
<!-- -->
<div v-if="zoomActive" class="cover"></div>
<div v-if="zoomActive" class="big-layout">
<div class="big-header flex-row justify-content-end">
<div class="big-header-btn bg-color-light flex-row align-items-center border-radius-4 cursor-pointer"
@click="toggleZoom">
<span class="mr-4">{{ zoomActive ? '缩小' : '放大' }}</span>
<svg-icon
:icon-class="zoomActive ? `zoom-1` : 'zoom-2'"
className="tabs-svg" />
</div>
</div>
<div class="pb-32 big-middle">
<div class="pb-32 f24 f-weight600 text-center">{{ incomingCallPhone }}</div>
<div class="flex-row justify-content-center">
<div class="big-middle-up mr-16 text-center cursor-pointer" v-if="!answerSts" @click="handleAccept">
<svg-icon icon-class="up-telephone" className="tabs-svg" />
<div class="f12">接听</div>
</div>
<div class="big-middle-hang ml-16 text-center cursor-pointer" @click="handleHungUp">
<svg-icon icon-class="hang-telephone" className="tabs-svg" />
<div class="f12">拒接</div>
</div>
</div>
</div>
<div class="pt-32 big-bottom">
<el-form label-position="top">
<el-row :gutter="10">
<el-col :span="7">
<el-form-item label="电话号码">
<el-input
clearable
placeholder="请输入"
v-model="queryParam.phone">
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="姓名">
<el-input
clearable
placeholder="请输入"
v-model="queryParam.name">
</el-input>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="身份证">
<el-input
clearable
placeholder="请输入"
v-model="queryParam.idCard">
</el-input>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="操作">
<el-button type="primary" @click="getCaseList">查询</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div v-if="tableData.length">
<el-scrollbar style="height: 224px;">
<div class="p-8 mt-8 bottom-case-list border-radius-8" v-for="(item, index) in tableData" :key="index">
<div class="flex-row justify-content-between align-items-center bor-bottom-E5E6EB pr-16">
<div v-for="(itemS,indexS) in item.debtorEntityList.filter(itemX => itemX.role == 'DEBTOR' && itemX.type == '本人')" :key="indexS">
{{indexS === 0 ?'':','}}{{itemS.name}}
</div>
<el-button type="text" @click="handleRelevance(item)">关联并进入案件</el-button>
</div>
<div class="flex-row p-8">
<div class="width-50 f12">
<div class="color-86909C">案件号</div>
<div>{{item.caseNo}} </div>
</div>
<div class="width-25 f12">
<div class="color-86909C">调解员</div>
<div>{{item.mediatorName}}</div>
</div>
<div class="width-25 f12">
<div class="color-86909C">逾期金额</div>
<div>{{item.moneyAmount}}</div>
</div>
</div>
</div>
</el-scrollbar>
</div>
<div v-else class="flex-row justify-content-between align-items-center p-16 big-bottom-empty">
<div class="color-FF7D00"><i class="el-icon-warning f16 color-FF7D00"></i>未找到相关案件</div>
<div class="color-4E5969 flex-row align-items-center cursor-pointer" @click="handleMarkers">
<svg-icon icon-class="bmld" className="tabs-svg-bmld" />
<span>标记为不明来电</span>
</div>
</div>
</div>
</div>
<!-- -->
<div v-else class="small-layout flex-row justify-content-between align-items-center pl-32 pr-32">
<div class="f24 f-weight600 mr-16">{{ incomingCallPhone }}</div>
<div class="mr-16 cursor-pointer" v-if="!answerSts" @click="handleAccept"><svg-icon icon-class="up-telephone" className="tabs-svg-phone" /></div>
<div class="mr-16 cursor-pointer" @click="handleHungUp"><svg-icon icon-class="hang-telephone" className="tabs-svg-phone" /></div>
<div class="big-header-btn bg-color-light flex-row align-items-center border-radius-4 cursor-pointer"
@click="toggleZoom">
<span class="mr-4">{{ zoomActive ? '缩小' : '放大' }}</span>
<svg-icon :icon-class="zoomActive ? `zoom-1` : 'zoom-2'" className="tabs-svg-zoom" />
</div>
</div>
</div>
</template>
<script>
import voiceCall from "@/services/voiceCall";
export default {
name: "VoiceCallDialog",
props: {
acceptDialog: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
zoomActive: true,// 布局状态
incomingCallPhone: '',
answerSts: false,// 接听状态
queryParam: {
phone: '',
name: '',
idCard: ''
},
tableData: [],
total:0,
}
},
mounted() {
this.initLoad()
},
methods: {
initLoad() {
let phoneNumber = this.acceptDialog.phone;
phoneNumber = phoneNumber.slice(4);
this.incomingCallPhone = phoneNumber;
this.queryParam.phone = phoneNumber;
this.getCaseList();
},
toggleZoom() {
this.zoomActive = !this.zoomActive;
},
getCaseList() {
voiceCall.caseMatchList(this.queryParam).then(res => {
if (!res.code) {
this.tableData = res;
}
})
},
// 呼入接听
async handleAccept() {
try {
// console.log({ sessionId: this.acceptDialog.sessionId }, '---主动接听')
await window.tccc.Call.accept({ sessionId: this.acceptDialog.sessionId })
this.answerSts = true;
} catch (error) {
console.error(`呼入接听:${error.message}`)
}
},
// 挂断
async handleHungUp() {
try {
// console.log({ sessionId: this.acceptDialog.sessionId }, '---主动挂断')
await window.tccc.Call.hungUp({ sessionId: this.acceptDialog.sessionId })
this.$emit('update:acceptDialog', null)
} catch (error) {
console.error(`挂断:${error.message}`)
}
},
// 标记来电
async handleMarkers() {
try {
let jsonData = {
callingSessionId: this.acceptDialog.sessionId,
phone: this.incomingCallPhone,
}
voiceCall.markUnknow(jsonData).then(res => {
this.$message.success('标记成功!')
})
} catch (error) {
console.error(`${error}`)
}
},
// 关联案件-详情
async handleRelevance(item) {
try {
voiceCall.caseMatch({caseId: item.id, callingSessionId: this.acceptDialog.sessionId}).then(res => {
// console.log(res,'---关联案件')
this.$router.push(`/mediation-page?sourcePage=sourcePage&caseId=${item.id}`);
})
} catch (error) {
console.error(`${error}`)
}
}
}
}
</script>
<style scoped lang="scss">
.bor-bottom-E5E6EB{
border-bottom: solid 1px #E5E6EB;
}
.voiceCall-content-big{
z-index: 8000;
margin: 0;
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
overflow: auto;
.cover {
z-index: 8001;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.5);
}
.big-layout{
z-index: 8002;
position: relative;
width: 560px;
//height: 390px;
padding: 24px;
margin: 15vh auto 50px;
background-color: #fff;
border-radius: 16px;
.big-header{
.big-header-btn{
background-color: #e4e7ed;
padding: 6px 10px;
.tabs-svg{
width: 16px;
height: 16px;
}
}
}
.big-middle{
border-bottom: 1px solid #E5E6EB;
.tabs-svg{
width: 40px;
height: 40px;
}
}
.big-bottom{
.bottom-case-list{
background-color: #F2F3F5;
.width-50{
width: 50%;
}
.width-25{
width: 25%;
}
}
.big-bottom-empty{
background: #FFF7E8;
border: 1px solid #FF7D0080;
.tabs-svg-bmld{
width: 16px;
height: 16px;
}
}
}
}
}
.voiceCall-content-small{
position: absolute;
top: 0;
left: 50%;
height: 56px;
width: 460px;
margin-left: -230px;
.small-layout{
height: 56px;
border-radius: 16px;
background-color: #dcdfe6;
.tabs-svg-phone{
width: 40px;
height: 40px;
}
.big-header-btn{
background-color: #ffffff;
padding: 6px 10px;
.tabs-svg{
width: 16px;
height: 16px;
}
}
}
}
</style>