通讯-- 通讯录
<!-- 通讯-- 通讯录 --> <template> <div class="telBar-wrap com-pop-wrap"> <div class="big-light"></div> <div class="small-light"></div> <div class="com-drag-header drag-ing" v-drag> <div class="close" @click="closePanel">×</div> </div> <span class="deg-1"></span> <span class="deg-2"></span> <span class="deg-3"></span> <span class="deg-4"></span> <div class="pop-outer"> <div class="com-pop-tab"> <div class="tab-item" :class="{'active': currentTab === 0}" @click="changeTab(0)">通讯录</div> <div class="tab-item" :class="{'active': currentTab === 1}" @click="changeTab(1)" v-if="eventDetailObj">总指挥部</div> <div class="tab-item" :class="{'active': currentTab === 2}" @click="changeTab(2)" v-if="eventDetailObj">现场指挥部</div> </div> <div class="fast-call" v-show="(currentTab === 1 || currentTab === 2) && fastData.length"> <div class="calling-button" :class="{'active': isFastCall}" @click="fastCall"> <span>一键呼叫</span> </div> </div> <div class="fast-panel com-pop-wrap" v-show="(currentTab === 1 || currentTab === 2) && fastData.length"> <span class="deg-1"></span> <span class="deg-2"></span> <span class="deg-3"></span> <span class="deg-4"></span> <div class="fast-inner"> <el-scrollbar class="custom-el-scrollbar" style="height: 880px;"> <div class="fast-list"> <div class="fast-item" v-for="(item, index) in fastData" :key="index" v-if="item.tel !== ''"> <div class="fast-close" v-show="!isFastCall" @click="removeFast(item.tel, item.name)">×</div> <div class="fast-name">{{item.org}}</div> <div class="fast-info"> <div class="name">{{item.type === 1 ? '主要领导' : '联络员'}}: <span class="big" style="color: #ffff5e;">{{item.name}}</span></div> <div class="job of-1">职务: <span class="big">{{item.job}}</span></div> <div class="number">{{item.tel | hidePhone}}</div> </div> </div> </div> </el-scrollbar> </div> </div> <div class="pop-inner"> <!-- 通讯录 --> <MailList v-if="currentTab === 0"></MailList> <!-- 总指挥部 --> <ZongCommand :type="currentTab" v-if="currentTab === 1 || currentTab === 2" @tel-change="handleFastChanged"></ZongCommand> </div> </div> </div> </template> <script lang="ts"> import { Component, Vue, Prop, Watch, Emit, Inject } from "vue-property-decorator"; import { telServer } from "@/api/installServer"; import MailList from "@/views/common/MailList.vue"; import ZongCommand from "@/views/common/ZongCommand.vue"; @Component({ name: "TelBar", components: { MailList, ZongCommand } }) export default class TelBar extends Vue { private currentTab: any = 0; private isFastCall: any = false; private fastData: any = []; private changeTab(index: any) { this.currentTab = index; } private closePanel() { this.$store.commit("baseModule/setShowTelPanel", false); } get eventDetailObj() { return this.$store.state.eventModule.currentResponseLevel; } private fastCall() { let arr: any = []; this.fastData.forEach((d: any) => { if (d.tel !== "") { arr.push(d.tel); } }); if (!this.isFastCall) { // 发起组呼 telServer .callGroupNumber({ calledNumber: arr.join(",") }) .then((res: any) => { console.log(res); }); } else { // 挂断组呼 telServer .brokenGroupNumber({ calledNumber: arr.join(",") }) .then((res: any) => { console.log(res); }); } this.isFastCall = !this.isFastCall; } private handleFastChanged(data: any) { this.fastData = data; } private removeFast(tel: any, name: any) { this.fastData = this.fastData.filter((res: any) => { return res.tel !== tel && res.name !== name; }); } } </script> <style lang="less" scoped> .telBar-wrap { position: absolute; left: 700px; top: 160px; width: 1600px; height: 910px; z-index: 3; .pop-outer { padding: 24px 0; .com-pop-tab { width: 1050px; margin: 0 auto; .tab-item { flex: 0 0 auto; width: 350px; flex-basis: 350px; } } .pop-inner { padding: 30px 30px 0; } .fast-call { position: absolute; right: 60px; top: 0; .calling-button { width: 170px; height: 56px; line-height: 56px; text-align: center; margin: 15px auto 0; font-size: 20px; cursor: pointer; background: url("../../assets/img/tel/btn_n.png") no-repeat center center; &.active { background-image: url("../../assets/img/tel/btn_p.png"); color: #ffff5e; &:before { background-image: url("../../assets/img/tel/icon_tel_p.png"); } } &:before { content: ""; display: inline-block; vertical-align: -4px; width: 20px; height: 20px; margin-right: 10px; background: url("../../assets/img/tel/icon_tel_n.png") no-repeat center center; } } } .fast-panel { position: absolute; left: calc(100% + 20px); top: 0; width: 460px; height: 100%; .fast-inner { .fast-list { display: flex; flex-wrap: wrap; padding-left: 10px; padding-top: 10px; .fast-item { flex: 0 0 auto; width: 204px; height: 180px; border: 2px solid #078495; font-size: 16px; color: #fff; margin-left: 10px; margin-top: 10px; position: relative; background: #042231; .fast-close { position: absolute; right: 0; top: 0; width: 42px; height: 42px; text-align: center; line-height: 32px; font-size: 30px; color: #00e3ff; cursor: pointer; opacity: 0.6; &:hover { opacity: 1; } } .fast-name { text-align: center; height: 42px; line-height: 42px; background-color: #073c57; border-bottom: 2px solid #078495; } .fast-info { line-height: 30px; padding: 20px; text-align: left; font-size: 16px; .big { font-size: 18px; } .number { font-weight: bold; } } } } } } } } </style>