From 2eff945fb9fc0d17b2098b26aba74ab192ec3727 Mon Sep 17 00:00:00 2001 From: WXL <1785969728@qq.com> Date: 星期三, 06 八月 2025 17:48:54 +0800 Subject: [PATCH] 测试完成 --- src/views/followvisit/record/detailpage/index.vue | 172 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 144 insertions(+), 28 deletions(-) diff --git a/src/views/followvisit/record/detailpage/index.vue b/src/views/followvisit/record/detailpage/index.vue index fb42e14..ab859d4 100644 --- a/src/views/followvisit/record/detailpage/index.vue +++ b/src/views/followvisit/record/detailpage/index.vue @@ -260,13 +260,37 @@ ></el-input> </el-form-item ></el-col> </el-row> + <div style="margin-left: 30px"> <el-button type="primary" plain @click="Editsingletasksonyic('')" >淇濆瓨鏈嶅姟</el-button > </div> </div> + <el-row :gutter="20" v-if="callStatus !== 'idle'"> + <el-col :span="24"> + <el-alert + :title="callStatusText" + :type="callStatusType" + :closable="false" + show-icon + /> + </el-col> + </el-row> + <!-- 鎸傛柇鎸夐挳锛堜粎鍦ㄩ�氳瘽涓樉绀猴級 --> + <el-row :gutter="20" v-if="callStatus === 'connected'"> + <el-col :span="24" style="text-align: center; margin-top: 10px"> + <el-button + type="danger" + icon="el-icon-phone" + @click="endCurrentCall" + :loading="isEndingCall" + > + 鎸傛柇鐢佃瘽 + </el-button> + </el-col> + </el-row> <el-form-item label="闅忚璁板綍"> <el-input type="textarea" v-model="form.remark"></el-input> </el-form-item> @@ -796,6 +820,10 @@ userid: "", currentPhoneNumber: "", callType: "", // 鐢ㄤ簬鍖哄垎鏄摢涓數璇� + // 宸叉湁鏁版嵁... + callStatus: "idle", // idle, calling, connected, ended, failed + isEndingCall: false, + currentCall: null, // 褰撳墠閫氳瘽瀵硅薄 input: "浠婂ぉ韬綋杩樹笉閿�", radio: "2", taskname: "", @@ -854,9 +882,9 @@ }, pickerOptions: { disabledDate(time) { - // 绂佺敤浠婂ぉ鍙婁箣鍓嶇殑鏃ユ湡 - return time.getTime() < Date.now() - 24 * 60 * 60 * 1000; - }, + // 绂佺敤浠婂ぉ鍙婁箣鍓嶇殑鏃ユ湡 + return time.getTime() < Date.now() - 24 * 60 * 60 * 1000; + }, shortcuts: [ { text: "涓冨ぉ鍚�", @@ -948,7 +976,28 @@ patid: null, }; }, - + computed: { + callStatusText() { + const statusMap = { + idle: "鍑嗗鍛煎彨", + calling: `姝e湪鍛煎彨 ${this.currentPhoneNumber}...`, + connected: `宸叉帴閫� ${this.currentPhoneNumber}`, + ended: "閫氳瘽宸茬粨鏉�", + failed: "鍛煎彨澶辫触", + }; + return statusMap[this.callStatus]; + }, + callStatusType() { + const typeMap = { + idle: "info", + calling: "warning", + connected: "success", + ended: "info", + failed: "error", + }; + return typeMap[this.callStatus]; + }, + }, created() { this.taskid = this.$route.query.taskid; this.id = this.$route.query.id; @@ -1217,28 +1266,95 @@ console.error("鍙戠敓閿欒锛�", error); }); }, - // 楠岃瘉鎵嬫満鍙锋牸寮� - isValidPhone(phone) { - return /^1[3-9]\d{9}$/.test(phone); - }, - // 鍛煎彨澶勭悊 + // 楠岃瘉鐢佃瘽鍙风爜鏍煎紡骞惰繑鍥為敊璇俊鎭� +validatePhoneNumber(phone) { + if (!phone) { + return { isValid: false, message: '璇疯緭鍏ョ數璇濆彿鐮�' }; + } + + // 鎵嬫満鍙锋鍒� + const mobileRegex = /^1[3-9]\d{9}$/; + + // 甯﹀尯鍙风殑鍥哄畾鐢佃瘽锛堝畬鏁存牸寮忥級 + const landlineFullRegex = /^0\d{2,3}-?\d{7,8}$/; + + // 涓嶅甫鍖哄彿鐨勫浐瀹氱數璇濓紙浠呮湰鍦板彿鐮侊級 + const landlineLocalRegex = /^\d{7,8}$/; + + if (mobileRegex.test(phone)) { + return { isValid: true, type: 'mobile' }; + } else if (landlineFullRegex.test(phone)) { + return { isValid: true, type: 'landline' }; + } else if (landlineLocalRegex.test(phone)) { + return { + isValid: false, + message: '鏈湴鍙风爜璇锋坊鍔犲尯鍙凤紙濡�028-1234567锛�' + }; + } else { + return { + isValid: false, + message: '璇疯緭鍏ユ纭殑鐢佃瘽鍙风爜锛堟墜鏈哄彿鎴栧甫鍖哄彿鐨勫浐瀹氱數璇濓級' + }; + } +}, + +// 浣跨敤绀轰緥 +isValidPhone(phone) { + return this.validatePhoneNumber(phone).isValid; +}, handleCall(phone, type) { - if (this.isValidPhone(phone)) { - this.currentPhoneNumber = phone; - this.callType = type; - - // 绛夊緟涓嬩竴涓猼ick纭繚鍊煎凡鏇存柊 - this.$nextTick(() => { - this.$refs.callButton.startCall(); - - // 鍙�夛細鏍规嵁涓嶅悓绫诲瀷鍋氫笉鍚屽鐞� - if (type === "tel") { - console.log("姝e湪鍛煎彨鎮h�呮湰浜�:", phone); - } else { - console.log("姝e湪鍛煎彨鑱旂郴浜�:", phone); - } - }); + if (!this.isValidPhone(phone)) { + this.$message.error("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜"); + return; } + + this.currentPhoneNumber = phone; + this.callType = type; + this.callStatus = "calling"; + + this.$nextTick(() => { + this.$refs.callButton.startCall(); + + // 鐩戝惉閫氳瘽鐘舵�佸彉鍖� + this.$refs.callButton.$on("call-status-change", (status) => { + this.handleCallStatusChange(status); + }); + }); + }, + + // 澶勭悊閫氳瘽鐘舵�佸彉鍖� + handleCallStatusChange(status) { + console.log(status,'status'); + + this.callStatus = status.type; + + if (status.type === "connected") { + this.currentCall = { + phone: this.currentPhoneNumber, + type: this.callType, + startTime: new Date(), + }; + } else if (status.type === "ended" || status.type === "failed") { + this.currentCall = null; + } + + // 鍙互鏍规嵁鐘舵�佹墽琛屽叾浠栨搷浣� + if (status.type === "failed") { + this.$message.error(`鍛煎彨澶辫触: ${status.text}`); + } + }, + + // 缁撴潫褰撳墠閫氳瘽 + endCurrentCall() { + if (!this.currentCall) return; + + this.isEndingCall = true; + this.$refs.callButton.endCall(); + + // 3绉掑悗閲嶇疆鐘舵�� + setTimeout(() => { + this.isEndingCall = false; + }, 3000); }, yuyingetdetail() { this.tableDatatop.forEach((item, index) => { @@ -1285,7 +1401,7 @@ }) .catch(() => { if (this.form.serviceType == 13) { - if (this.visitCount!=1) { + if (this.visitCount != 1) { this.$router.push({ path: "/logisticsservice/zbAgain", }); @@ -1295,7 +1411,7 @@ }); } } else if (form.serviceType == 2) { - if (this.visitCount!=1) { + if (this.visitCount != 1) { this.$router.push({ path: "/followvisit/again", }); @@ -1331,7 +1447,7 @@ this.form = res.rows[0].serviceSubtaskList.find( (item) => item.id == this.id ); - console.log(this.form.serviceType,'serviceType'); + console.log(this.form.serviceType, "serviceType"); this.logsheetlist = res.rows[0].serviceSubtaskList; this.templateid = this.logsheetlist[0].templateid; @@ -1500,7 +1616,7 @@ } // form.id = null; form.sendstate = 2; - console.log(form.serviceType,'form.serviceType'); + console.log(form.serviceType, "form.serviceType"); addserviceSubtask(form).then((res) => { if (res.code == 200) { -- Gitblit v1.9.3