From 21051d356bb8589ad088abb52492fd2a1909ed9e Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期六, 14 三月 2026 10:39:09 +0800
Subject: [PATCH] 测试完成
---
src/views/followvisit/record/detailpage/index.vue | 1169 +++++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 919 insertions(+), 250 deletions(-)
diff --git a/src/views/followvisit/record/detailpage/index.vue b/src/views/followvisit/record/detailpage/index.vue
index f41424d..d30067d 100644
--- a/src/views/followvisit/record/detailpage/index.vue
+++ b/src/views/followvisit/record/detailpage/index.vue
@@ -549,76 +549,96 @@
<!-- 浜哄伐澶勭悊 -->
<div class="manual-action">
<div class="Followuserinfos">
- <div>
+ <!-- 椤堕儴鎿嶄綔鍖哄煙 -->
+ <div class="section-header">
+ <h3><i class="el-icon-s-operation"></i> 浜哄伐澶勭悊</h3>
+ <div class="header-actions">
+ <!-- 鍩虹鎿嶄綔鎸夐挳缁� -->
+ <div class="action-group basic-actions">
+ <el-button
+ type="primary"
+ plain
+ @click="Editsingletasksonyic('')"
+ >
+ 淇濆瓨鍩虹淇℃伅
+ </el-button>
+
+ <!-- 鏂板锛氬欢缁姢鐞嗘寜閽� -->
+ <el-button
+ type="success"
+ plain
+ @click="handleContinuationCare"
+ v-if="showContinuationCareBtn"
+ >
+ 寤剁画鎶ょ悊
+ </el-button>
+
+ <el-button
+ type="primary"
+ round
+ @click="sendAgain"
+ v-if="form.isVisitAgain != 2"
+ >
+ 鍐嶆闅忚
+ </el-button>
+ </div>
+
+ <!-- 寮傚父鐘舵�侀�夋嫨鍣� -->
+ <div class="action-group tag-selector">
+ <el-select
+ v-model="selectedTag"
+ placeholder="璇烽�夋嫨寮傚父鐘舵��"
+ clearable
+ style="width: 150px; margin-right: 10px"
+ >
+ <el-option
+ v-for="item in tagOptions"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ <span style="display: flex; align-items: center">
+ <span
+ class="color-indicator"
+ :style="{ backgroundColor: item.color }"
+ ></span>
+ <span>{{ item.label }}</span>
+ </span>
+ </el-option>
+ </el-select>
+
+ <!-- 褰撳墠閫夋嫨鐨勯鑹叉寚绀哄櫒 -->
+ <div
+ v-if="selectedTag"
+ class="color-indicator selected-indicator"
+ :style="{ backgroundColor: getSelectedTagColor() }"
+ ></div>
+
+ <!-- 鏍囪璇存槑鎻愮ず -->
+ <el-tooltip
+ v-if="selectedTag"
+ effect="light"
+ :content="getSelectedDescription()"
+ placement="top"
+ >
+ <i class="el-icon-info tag-info-icon"></i>
+ </el-tooltip>
+ </div>
+ </div>
+ </div>
+
+ <!-- 琛ㄥ崟鍖哄煙 -->
+ <div class="form-content">
<el-form
ref="userform"
:model="form"
:rules="userrules"
- label-width="120px"
+ label-width="100px"
>
- <div class="headline">
- <div>浜哄伐澶勭悊</div>
- <div style="margin: 0 30px">
- <el-button
- type="primary"
- plain
- @click="Editsingletasksonyic('')"
- >淇濆瓨鍩虹淇℃伅</el-button
- >
- </div>
- <div>
- <el-button
- type="primary"
- round
- v-if="this.form.isVisitAgain != 2"
- @click="sendAgain()"
- >鍐嶆闅忚</el-button
- >
- </div>
- <div class="tag-selector-container">
- <el-select
- v-model="selectedTag"
- placeholder="璇烽�夋嫨寮傚父鐘舵��"
- clearable
- style="width: 150px; margin-right: 10px"
- >
- <el-option
- v-for="item in tagOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- <span style="display: flex; align-items: center">
- <span
- class="color-indicator"
- :style="{ backgroundColor: item.color }"
- ></span>
- <span>{{ item.label }}</span>
- </span>
- </el-option>
- </el-select>
-
- <!-- 褰撳墠閫夋嫨鐨勯鑹叉寚绀哄櫒 -->
- <div
- v-if="selectedTag"
- class="color-indicator selected-indicator"
- :style="{ backgroundColor: getSelectedTagColor() }"
- ></div>
-
- <!-- 鏍囪璇存槑鎻愮ず -->
- <el-tooltip
- v-if="selectedTag"
- effect="light"
- :content="getSelectedDescription()"
- placement="top"
- >
- <i class="el-icon-info tag-info-icon"></i>
- </el-tooltip>
- </div>
- </div>
+ <!-- 鑱旂郴淇℃伅琛� -->
<el-row>
- <el-col :span="14"
- ><el-form-item label="鑱旂郴鐢佃瘽">
+ <el-col :span="14">
+ <el-form-item label="鑱旂郴鐢佃瘽">
<el-input
placeholder="鑱旂郴鐢佃瘽缂哄け"
v-model="userform.telcode"
@@ -628,13 +648,16 @@
icon="el-icon-phone"
@click="handleCall(userform.telcode, 'tel')"
:disabled="!isValidPhone(userform.telcode)"
- ></el-button
- ></el-input> </el-form-item
- ></el-col>
+ ></el-button>
+ </el-input>
+ </el-form-item>
+ </el-col>
</el-row>
+
+ <!-- 鑱旂郴浜轰俊鎭 -->
<el-row>
- <el-col :span="14"
- ><el-form-item label="鑱旂郴浜虹數璇�">
+ <el-col :span="14">
+ <el-form-item label="鑱旂郴浜虹數璇�">
<el-input
placeholder="鑱旂郴浜虹數璇濈己澶�"
v-model="userform.relativetelcode"
@@ -646,17 +669,21 @@
handleCall(userform.relativetelcode, 'relative')
"
:disabled="!isValidPhone(userform.relativetelcode)"
- ></el-button
- ></el-input> </el-form-item
- ></el-col>
- <el-col :span="10"
- ><el-form-item label="鑱旂郴浜哄叧绯�">
+ ></el-button>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="9">
+ <el-form-item label="鍏崇郴">
<el-input
placeholder="鑱旂郴浜哄叧绯荤己澶�"
v-model="userform.relation"
- ></el-input> </el-form-item
- ></el-col>
+ ></el-input>
+ </el-form-item>
+ </el-col>
</el-row>
+
+ <!-- 閫氳瘽鎺у埗鍖哄煙 -->
<div class="call-controls">
<CallButton
ref="callButton"
@@ -664,32 +691,59 @@
style="display: none"
/>
- <div v-if="callStatus === 'connected'" class="hangup-btn">
+ <!-- 鎸傛柇鎸夐挳鏍峰紡浼樺寲 -->
+ <div v-if="callStatus === 'connected'" class="hangup-container">
<el-button
type="danger"
icon="el-icon-phone"
@click="endCurrentCall"
:loading="isEndingCall"
+ class="hangup-btn"
+ size="medium"
>
- 鎸傛柇鐢佃瘽
+ {{ isEndingCall ? "鎸傛柇涓�..." : "鎸傛柇鐢佃瘽" }}
</el-button>
+
+ <!-- 閫氳瘽璁℃椂鏄剧ず -->
+ <div class="call-timer" v-if="callStartTime">
+ 閫氳瘽鏃堕暱: {{ formatCallTime }}
+ </div>
</div>
- <div class="call-status" v-if="callStatus !== 'idle'">
+
+ <!-- 鐘舵�佹彁绀轰紭鍖� -->
+ <div class="call-status-container" v-if="callStatus !== 'idle'">
<el-alert
:title="callStatusText"
:type="callStatusType"
:closable="false"
show-icon
+ :class="['status-alert', `status-${callStatus}`]"
+ />
+ </div>
+
+ <!-- SIP娉ㄥ唽鐘舵�佹彁绀� -->
+ <div
+ v-if="isSipRegistering && orgname == '涓芥按甯備腑鍖婚櫌'"
+ class="sip-registering"
+ >
+ <el-alert
+ title="鍛煎彨搴ф満鍒濆鍖栦腑锛岃绋嶅��..."
+ type="info"
+ :closable="false"
+ show-icon
+ class="registering-alert"
/>
</div>
</div>
- <el-form-item label="闅忚鍐呭" v-if="orgname == '涓芥按甯備腑鍖婚櫌'">
- <el-input type="textarea" v-model="form.remark"></el-input>
- </el-form-item>
- <el-form-item label="闅忚璁板綍" v-else>
+
+ <!-- 闅忚鍐呭/璁板綍 -->
+ <el-form-item
+ :label="orgname == '涓芥按甯備腑鍖婚櫌' ? '闅忚鍐呭' : '闅忚璁板綍'"
+ >
<el-input type="textarea" v-model="form.remark"></el-input>
</el-form-item>
+ <!-- 闅忚鎯呭喌 -->
<el-form-item label="闅忚鎯呭喌" v-if="orgname == '涓芥按甯備腑鍖婚櫌'">
<el-radio-group v-model="form.taskSituation">
<el-radio
@@ -697,121 +751,136 @@
:label="city.value"
:value="city.value"
:key="city.value"
- >{{ city.label }}</el-radio
>
+ {{ city.label }}
+ </el-radio>
</el-radio-group>
</el-form-item>
+
+ <!-- 澶勭悊鎰忚 -->
<el-form-item label="澶勭悊鎰忚">
- <div>
+ <div class="opinion-buttons">
<el-button
plain
type="warning"
@click="Editsingletaskson('1')"
- >鏆備笉澶勭悊</el-button
>
+ 鏆備笉澶勭悊
+ </el-button>
<el-button
plain
type="success"
@click="Editsingletaskson('2')"
- >鐥呮儏绋冲畾</el-button
>
+ 鐥呮儏绋冲畾
+ </el-button>
<el-button
plain
type="primary"
@click="Editsingletaskson('3')"
- >閫氱煡灏辫瘖</el-button
>
- <el-button plain type="info" @click="Editsingletaskson('5')"
- >涓績闅忚</el-button
- >
- <el-button type="primary" round @click="sendAgainmsg"
- >鐭俊鍙戦��</el-button
- >
+ 閫氱煡灏辫瘖
+ </el-button>
+ <el-button plain type="info" @click="Editsingletaskson('5')">
+ 浜哄伐闅忚
+ </el-button>
+ <el-button type="primary" round @click="sendAgainmsg">
+ 鐭俊鍙戦��
+ </el-button>
</div>
</el-form-item>
</el-form>
+ </div>
- <div class="detailed">
- <h3>鎮h�呮。妗堜俊鎭�</h3>
- <el-form ref="userform" :model="userform" label-width="100px">
- <el-row :gutter="20">
- <el-col :span="12">
- <el-form-item label="鎮h�呭鍚�" prop="name">
- <el-input
- v-model="userform.name"
- placeholder="璇疯緭鍏ュ鍚�"
- maxlength="30"
- ></el-input> </el-form-item
- ></el-col>
- </el-row>
- <el-row :gutter="20">
- <el-col :span="12"
- ><el-form-item label="鎬у埆" prop="telcode">
- <el-select v-model="userform.sex" placeholder="璇烽�夋嫨">
- <el-option label="鐢�" :value="1"> </el-option>
- <el-option label="濂�" :value="2"> </el-option>
- </el-select> </el-form-item
- ></el-col>
- <el-col :span="12">
- <el-form-item label="骞撮緞" prop="name">
- <el-input
- v-model="userform.age"
- placeholder="璇疯緭鍏ュ鍚�"
- maxlength="20"
- ></el-input> </el-form-item
- ></el-col>
- </el-row>
+ <!-- 鎮h�呮。妗堜俊鎭� -->
+ <div class="detailed">
+ <h3>鎮h�呮。妗堜俊鎭�</h3>
+ <el-form ref="userform" :model="userform" label-width="100px">
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鎮h�呭鍚�" prop="name">
+ <el-input
+ v-model="userform.name"
+ placeholder="璇疯緭鍏ュ鍚�"
+ maxlength="30"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鎬у埆" prop="sex">
+ <el-select v-model="userform.sex" placeholder="璇烽�夋嫨">
+ <el-option label="鐢�" :value="1"> </el-option>
+ <el-option label="濂�" :value="2"> </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="骞撮緞" prop="age">
+ <el-input
+ v-model="userform.age"
+ placeholder="璇疯緭鍏ュ勾榫�"
+ maxlength="20"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
- <el-row :gutter="20">
- <el-col :span="12"
- ><el-form-item label="鑱旂郴鏂瑰紡" prop="telcode">
- <el-input
- v-model="userform.telcode"
- placeholder="璇疯緭鍏ヨ仈绯绘柟寮�"
- maxlength="20"
- /> </el-form-item
- ></el-col>
- <el-col :span="12">
- <el-form-item label="浜插睘鑱旂郴鏂瑰紡" prop="name">
- <el-input
- v-model="userform.relativetelcode"
- placeholder="璇疯緭鍏ュ鍚�"
- maxlength="20"
- ></el-input> </el-form-item
- ></el-col>
- </el-row>
- <el-row :gutter="20">
- <el-col :span="24">
- <el-form-item label="璇婃柇鍚嶇О" prop="name">
- <el-input
- v-model="form.leavediagname"
- placeholder="璇疯緭鍏ヨ瘖鏂�"
- maxlength="50"
- ></el-input> </el-form-item
- ></el-col>
- </el-row>
- <el-row :gutter="20">
- <el-col :span="24">
- <el-form-item label="鍑虹敓鍦�" prop="birthplace">
- <el-input
- v-model="userform.birthplace"
- placeholder="鍥姐�佺渷銆佸湴甯傘�佸尯鍘裤�佽閬撶瓑璇︾粏淇℃伅"
- maxlength="50"
- /> </el-form-item
- ></el-col>
- </el-row>
- <el-row :gutter="20">
- <el-col :span="24"
- ><el-form-item label="灞呬綇鍦�" prop="placeOfResidence">
- <el-input
- v-model="userform.placeOfResidence"
- placeholder="鍥姐�佺渷銆佸湴甯傘�佸尯鍘裤�佽閬撶瓑璇︾粏淇℃伅"
- maxlength="50"
- /> </el-form-item
- ></el-col>
- </el-row>
- </el-form>
- </div>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鑱旂郴鏂瑰紡" prop="telcode">
+ <el-input
+ v-model="userform.telcode"
+ placeholder="璇疯緭鍏ヨ仈绯绘柟寮�"
+ maxlength="20"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="浜插睘鑱旂郴鏂瑰紡" prop="relativetelcode">
+ <el-input
+ v-model="userform.relativetelcode"
+ placeholder="璇疯緭鍏ヤ翰灞炶仈绯绘柟寮�"
+ maxlength="20"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24">
+ <el-form-item label="璇婃柇鍚嶇О" prop="leavediagname">
+ <el-input
+ v-model="form.leavediagname"
+ placeholder="璇疯緭鍏ヨ瘖鏂�"
+ maxlength="50"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24">
+ <el-form-item label="鍑虹敓鍦�" prop="birthplace">
+ <el-input
+ v-model="userform.birthplace"
+ placeholder="鍥姐�佺渷銆佸湴甯傘�佸尯鍘裤�佽閬撶瓑璇︾粏淇℃伅"
+ maxlength="50"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="24">
+ <el-form-item label="灞呬綇鍦�" prop="placeOfResidence">
+ <el-input
+ v-model="userform.placeOfResidence"
+ placeholder="鍥姐�佺渷銆佸湴甯傘�佸尯鍘裤�佽閬撶瓑璇︾粏淇℃伅"
+ maxlength="50"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
</div>
</div>
</div>
@@ -992,14 +1061,14 @@
</el-form-item>
</el-col>
</el-row>
- <el-form-item label="闅忚鏂瑰紡" prop="resource">
+ <el-form-item label="闅忚绫诲瀷" prop="resource">
<el-radio-group v-model="form.resource">
<el-radio label="1">鏈梾鍖洪殢璁�</el-radio>
<el-radio label="2">闅忚涓績闅忚</el-radio>
</el-radio-group>
</el-form-item>
- <el-form-item label="闅忚璁板綍">
+ <el-form-item label="闅忚璁板綍" :required="form.resource == '2'">
<el-input type="textarea" v-model="form.remark"></el-input>
</el-form-item>
</el-form>
@@ -1133,11 +1202,16 @@
userid: "",
currentPhoneNumber: "",
callType: "", // 鐢ㄤ簬鍖哄垎鏄摢涓數璇�
+ isSipRegistering: true, // SIP娉ㄥ唽鐘舵��
// 宸叉湁鏁版嵁...
+ customCallStatus: "", // 鐢ㄤ簬瀛樺偍鑷畾涔夌姸鎬佹枃鏈�
callStatus: "idle", // idle, calling, connected, ended, failed
isEndingCall: false,
CaldialogVisible: false,
currentCall: null, // 褰撳墠閫氳瘽瀵硅薄
+ // 鏂板鍔熻兘鏁版嵁
+ showPatientInfo: true,
+ showContinuationCareBtn: false, // 鎺у埗寤剁画鎶ょ悊鎸夐挳鏄剧ず
// 璺敱鐩戝惉鐩稿叧
routeWatcher: null,
lastRoutePath: this.$route.path,
@@ -1353,6 +1427,7 @@
label: "涓�骞村悗",
},
],
+ statusTimer: null,
userform: {},
smsDialogVisible: false, // 鎺у埗鐭俊瀵硅瘽妗嗘樉绀�
smsContent: "", // 瀛樺偍鐭俊鍐呭
@@ -1369,9 +1444,18 @@
patid: null,
};
},
-
+ // 鍦ㄧ粍浠朵腑娣诲姞閿�姣佸墠鐨勬竻鐞�
+ beforeUnmount() {
+ if (this.statusTimer) {
+ clearTimeout(this.statusTimer);
+ this.statusTimer = null;
+ }
+ },
computed: {
callStatusText() {
+ if (this.customCallStatus) {
+ return this.customCallStatus;
+ }
const statusMap = {
idle: "鍑嗗鍛煎彨",
calling: `姝e湪鍛煎彨 ${this.currentPhoneNumber}...`,
@@ -1402,13 +1486,71 @@
this.visitCount = this.$route.query.visitCount;
this.serviceType = this.$route.query.serviceType;
this.orgname = localStorage.getItem("orgname");
+ if (this.orgname == "鐪佺珛鍚屽痉缈犺嫅闄㈠尯") {
+ this.showContinuationCareBtn = true;
+ }
+ if (this.orgname == "缂欎簯鍘夸腑鍖诲尰闄�") {
+ this.options = [
+ {
+ value: "鍗婁釜鏈堝悗",
+ label: "鍗婁釜鏈堝悗",
+ },
+ {
+ value: "涓�涓湀鍚�",
+ label: "涓�涓湀鍚�",
+ },
+ {
+ value: "涓や釜鏈堝悗",
+ label: "涓や釜鏈堝悗",
+ },
+ {
+ value: "涓変釜鏈堝悗",
+ label: "涓変釜鏈堝悗",
+ },
+ {
+ value: "鍏釜鏈堝悗",
+ label: "鍏釜鏈堝悗",
+ },
+ {
+ value: "12涓湀鍚�",
+ label: "12涓湀鍚�",
+ },
+ ];
+ }
this.getTaskservelist();
},
-
+ mounted() {
+ // 鐩戝惉瀛愮粍浠剁殑sipStatus灞炴�у彉鍖�
+ if (this.$refs.callButton) {
+ this.$watch(
+ () => this.$refs.callButton.sipStatus,
+ (newStatus) => {
+ if (this.statusTimer) {
+ clearTimeout(this.statusTimer);
+ this.statusTimer = null;
+ }
+ if (newStatus === "宸叉敞鍐�") {
+ this.statusTimer = setTimeout(() => {
+ this.isSipRegistering = false;
+ this.customCallStatus = ""; // 娉ㄥ唽鎴愬姛鍚庢竻绌鸿嚜瀹氫箟鎻愮ず
+ console.log("SIP娉ㄥ唽鎴愬姛锛岀姸鎬佸凡鏇存柊");
+ }, 2000);
+ this.isSipRegistering = false;
+ } else if (newStatus === "娉ㄥ唽澶辫触" || newStatus === "鏈繛鎺�") {
+ this.isSipRegistering = true;
+ this.customCallStatus = "鍛煎彨涓柇锛岃祫婧愰噸鏂板姞杞戒腑璇风◢绛�3s閲嶆柊銆�";
+ }
+ },
+ { immediate: true } // 绔嬪嵆鎵ц涓�娆′互鑾峰彇鍒濆鍊�
+ );
+ }
+ },
methods: {
// 鑾峰彇涓婚鏍峰紡绫�
getTopicClass(item) {
+ console.log(item.isabnormal, "getTopicClass");
+
// 鏍规嵁鐘舵�佸�艰繑鍥炲搴旂殑鏍峰紡绫�
if (item.isabnormal == 1) {
return "scriptTopic-isabnormal"; // 寮傚父 - 绾㈣壊
@@ -1438,16 +1580,16 @@
}).then((res) => {
if (res.code === 200) {
// 閽堝鍐嶆闅忚鏈嶅姟杩涜鍒犻櫎缁撴灉璧嬪��
- if (this.again && res.data.upScriptResult) {
- res.data.upScriptResult.forEach((itemA) => {
- const itemB = res.data.scriptResult.find(
- (item) => item.scriptContent === itemA.scriptContent
- );
- if (itemB) {
- itemB.scriptResult = itemA.scriptResult;
- }
- });
- }
+ // if (this.again && res.data.upScriptResult) {
+ // res.data.upScriptResult.forEach((itemA) => {
+ // const itemB = res.data.scriptResult.find(
+ // (item) => item.scriptContent === itemA.scriptContent
+ // );
+ // if (itemB) {
+ // itemB.scriptResult = itemA.scriptResult;
+ // }
+ // });
+ // }
this.tableDatatop = res.data.scriptResult;
this.tableDatatop.forEach((item) => {
@@ -1517,15 +1659,17 @@
// 鏍规嵁閫夋嫨鐨勯殢璁挎柟寮忚绠楅殢璁挎棩鏈�
if (value.includes("涓冨ぉ鍚�")) {
followupDate.setDate(dischargeDate.getDate() + 7);
- } else if (value.includes("15澶╁悗")) {
+ } else if (value.includes("15澶╁悗") || value.includes("鍗婁釜鏈堝悗")) {
followupDate.setDate(dischargeDate.getDate() + 15);
} else if (value.includes("涓�涓湀鍚�")) {
followupDate.setMonth(dischargeDate.getMonth() + 1);
+ } else if (value.includes("涓や釜鏈堝悗")) {
+ followupDate.setMonth(dischargeDate.getMonth() + 2);
} else if (value.includes("涓変釜鏈堝悗")) {
followupDate.setMonth(dischargeDate.getMonth() + 3);
} else if (value.includes("鍏釜鏈堝悗")) {
followupDate.setMonth(dischargeDate.getMonth() + 6);
- } else if (value.includes("涓�骞村悗")) {
+ } else if (value.includes("涓�骞村悗") || value.includes("12涓湀鍚�")) {
followupDate.setFullYear(dischargeDate.getFullYear() + 1);
}
@@ -1544,8 +1688,6 @@
},
// 妫�鏌ラ殢璁挎棩鏈熸槸鍚︽湁鏁�
checkFollowupDate(date) {
- console.log(date);
-
if (!date) {
this.form.date1 = "";
this.$refs.zcform.clearValidate(["date1"]);
@@ -1647,6 +1789,7 @@
scriptid: item.id,
excep: excep,
questiontext: item.scriptContent,
+ categoryid: item.categoryid,
answerps: item.answerps || null, // 娣诲姞闄勫姞淇℃伅
};
if (item.scriptType == 2 && item.scriptResult[0]) {
@@ -1672,7 +1815,13 @@
}
});
this.Editsingletasksonyic(6);
+ const orgName = localStorage.getItem("orgname");
+ console.log(orgName, "orgName");
+ if (this.form.isVisitAgain != 1 || orgName == "涓芥按甯備腑鍖婚櫌") {
+ this.Torouter();
+ return;
+ }
this.$modal
.confirm(
'浠诲姟淇濆瓨鎴愬姛鏄惁閽堝鎮h�咃細"' +
@@ -1694,33 +1843,36 @@
this.dialogFormVisible = true;
})
.catch(() => {
- if (this.form.serviceType == 13) {
- if (this.visitCount != 1) {
- this.$router.push({
- path: "/logisticsservice/zbAgain",
- });
- } else {
- this.$router.push({
- path: "/logisticsservice/record",
- });
- }
- } else if (this.form.serviceType == 2) {
- if (this.visitCount != 1) {
- this.$router.push({
- path: "/logisticsservice/again",
- });
- } else {
- this.$router.push({
- path: "/followvisit/discharge",
- });
- }
- }
+ this.Torouter();
});
})
.catch((error) => {
// 濡傛灉鏈変换浣曚竴涓紓姝ユ搷浣滃け璐ワ紝浼氳繘鍏ヨ繖閲�
console.error("鍙戠敓閿欒锛�", error);
});
+ },
+ Torouter() {
+ if (this.form.serviceType == 13) {
+ if (this.visitCount != 1) {
+ this.$router.push({
+ path: "/logisticsservice/zbAgain",
+ });
+ } else {
+ this.$router.push({
+ path: "/logisticsservice/record",
+ });
+ }
+ } else if (this.form.serviceType == 2) {
+ if (this.visitCount != 1) {
+ this.$router.push({
+ path: "/logisticsservice/again",
+ });
+ } else {
+ this.$router.push({
+ path: "/followvisit/discharge",
+ });
+ }
+ }
},
// 鐢佃瘽============================
// 楠岃瘉鐢佃瘽鍙风爜鏍煎紡骞惰繑鍥為敊璇俊鎭�
@@ -1763,22 +1915,34 @@
this.$message.error("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜");
return;
}
+ // 妫�鏌IP鏄惁宸叉敞鍐�
+
this.currentPhoneNumber = phone;
// 鏄惁鏅畞鍛煎彨
if (this.orgname == "鏅畞鐣叉棌鑷不鍘夸汉姘戝尰闄�") {
this.CaldialogVisible = true;
return;
}
-// 涓嬫柟鏄腑鍖婚櫌鍛煎彨
+ // 涓嬫柟鏄腑鍖婚櫌鍛煎彨
+ if (this.isSipRegistering) {
+ this.$message.warning("绯荤粺姝e湪鍒濆鍖栵紝璇风◢鍊�...");
+ return;
+ }
this.callType = type;
this.callStatus = "calling";
this.$nextTick(() => {
this.$refs.callButton.startCall();
- // 鐩戝惉閫氳瘽鐘舵�佸彉鍖�
this.$refs.callButton.$on("call-status-change", (status) => {
this.handleCallStatusChange(status);
+ // 鐩戝惉娉ㄥ唽鐘舵�佸彉鍖�
+ if (status.type === "registered") {
+ this.isSipRegistering = false;
+ }
+ if (status.type === "failed" || status.type === "disconnected") {
+ this.isSipRegistering = true;
+ }
});
});
},
@@ -1839,7 +2003,13 @@
param2: this.patid,
subId: this.id,
};
+ const orgName = localStorage.getItem("orgname");
+ console.log(orgName, "orgName");
+ if (this.form.isVisitAgain != 1 || orgName == "涓芥按甯備腑鍖婚櫌") {
+ this.Torouter();
+ return;
+ }
addPersonVoices(obj).then((res) => {
if (res.code == 200) {
this.$modal.msgSuccess("鏈嶅姟淇濆瓨鎴愬姛");
@@ -1864,27 +2034,7 @@
this.dialogFormVisible = true;
})
.catch(() => {
- if (this.form.serviceType == 13) {
- if (this.visitCount != 1) {
- this.$router.push({
- path: "/logisticsservice/zbAgain",
- });
- } else {
- this.$router.push({
- path: "/logisticsservice/record",
- });
- }
- } else if (form.serviceType == 2) {
- if (this.visitCount != 1) {
- this.$router.push({
- path: "/followvisit/again",
- });
- } else {
- this.$router.push({
- path: "/followvisit/discharge",
- });
- }
- }
+ this.Torouter();
});
}
});
@@ -2076,6 +2226,10 @@
this.formtidy();
this.dialogFormVisible = true;
});
+ } else {
+ document.querySelector("#app").scrollTo(0, 0);
+ this.formtidy();
+ this.dialogFormVisible = true;
}
} else {
document.querySelector("#app").scrollTo(0, 0);
@@ -2284,6 +2438,10 @@
this.$message.error("闅忚鏃堕棿涓嶈兘灏忎簬褰撳墠鏃堕棿");
return false;
}
+ if (this.form.resource == "2" && !this.form.remark) {
+ this.$message.error("褰撳墠閫夋嫨涓洪殢璁夸腑蹇冮殢璁块渶杈撳叆闅忚璁板綍");
+ return false;
+ }
this.form.remark =
this.form.remark + "銆�" + this.getCurrentTime() + "銆�";
let form = structuredClone(this.form);
@@ -2392,6 +2550,34 @@
// 鍒锋柊鏁版嵁
this.getTaskservelist();
},
+ // 寤剁画鎶ょ悊
+ handleContinuationCare() {
+ if (this.form.continueFlag != 2) {
+ this.$modal.confirm("鏄惁涓烘湰娆℃湇鍔″垱寤哄欢缁姢鐞嗭紵").then(() => {
+ this.$router.push({
+ path: "/followvisit/ContinueFordetails/",
+ query: {
+ taskid: this.taskid,
+ patid: this.patid,
+ id: this.id,
+ Voicetype: this.Voicetype,
+ visitCount: this.visitCount,
+ },
+ });
+ });
+ } else {
+ this.$router.push({
+ path: "/followvisit/ContinueFordetails/",
+ query: {
+ taskid: this.taskid,
+ patid: this.patid,
+ id: this.id,
+ Voicetype: this.Voicetype,
+ visitCount: this.visitCount,
+ },
+ });
+ }
+ },
},
// deactivated() {
// console.log(11);
@@ -2427,15 +2613,18 @@
.manual-action {
flex: 1;
min-width: 0;
- height: 100%; /* 纭繚楂樺害缁ф壙 */
+ height: 100%;
+ /* 纭繚楂樺害缁ф壙 */
}
.call-action {
width: 60%;
min-width: 0;
- height: 100%; /* 纭繚楂樺害缁ф壙 */
+ height: 100%;
+ /* 纭繚楂樺害缁ф壙 */
}
}
+
.numeric-input {
position: relative;
}
@@ -2452,6 +2641,7 @@
padding: 2px 6px;
border-radius: 4px;
}
+
.call-container {
padding: 20px;
background: #fff;
@@ -2481,11 +2671,13 @@
margin-top: 20px;
}
}
+
.merge-controls {
background: #f5f7fa;
border-radius: 4px;
margin-left: 20px;
}
+
.Followuserinfo {
margin: 10px 10px 0 10px;
align-items: center;
@@ -2519,8 +2711,10 @@
background: #ffff;
border: 1px solid #dcdfe6;
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04);
- height: 100%; /* 纭繚楂樺害缁ф壙 */
- min-height: 880px; /* 鏈�灏忛珮搴︿笌闅忚鍐呭涓�鑷� */
+ height: 100%;
+ /* 纭繚楂樺害缁ф壙 */
+ min-height: 880px;
+ /* 鏈�灏忛珮搴︿笌闅忚鍐呭涓�鑷� */
display: flex;
flex-direction: column;
@@ -2540,11 +2734,15 @@
.el-form {
flex: 1;
- overflow-y: auto; /* 鍐呭瓒呰繃楂樺害鏃舵樉绀烘粴鍔ㄦ潯 */
- max-height: calc(880px - 60px); /* 鍑忓幓padding */
- padding-right: 10px; /* 闃叉婊氬姩鏉¢伄鎸″唴瀹� */
+ overflow-y: auto;
+ /* 鍐呭瓒呰繃楂樺害鏃舵樉绀烘粴鍔ㄦ潯 */
+ max-height: calc(880px - 60px);
+ /* 鍑忓幓padding */
+ padding-right: 10px;
+ /* 闃叉婊氬姩鏉¢伄鎸″唴瀹� */
}
}
+
.append-input-container {
margin-top: 15px;
padding: 10px;
@@ -2552,6 +2750,7 @@
border-radius: 4px;
border: 1px solid #dcdfe6;
}
+
.borderdiv {
min-height: 60vh;
font-size: 20px;
@@ -2590,14 +2789,111 @@
}
}
}
+
.topic-dev[inert] {
opacity: 0.5;
pointer-events: none;
}
+/* 鎸傛柇瀹瑰櫒鏍峰紡 */
+.hangup-container {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 10px;
+ margin: 15px 0;
+}
+
+.hangup-btn {
+ width: 120px;
+ height: 40px;
+ font-size: 14px;
+ border-radius: 20px;
+ box-shadow: 0 2px 8px rgba(244, 67, 54, 0.3);
+ transition: all 0.3s ease;
+}
+
+.hangup-btn:hover:not(:disabled) {
+ transform: translateY(-2px);
+ box-shadow: 0 4px 12px rgba(244, 67, 54, 0.4);
+}
+
+/* 閫氳瘽璁℃椂鍣� */
+.call-timer {
+ font-size: 12px;
+ color: #666;
+ background: #f5f5f5;
+ padding: 4px 12px;
+ border-radius: 12px;
+ font-family: "Courier New", monospace;
+}
+
+/* 鐘舵�佹彁绀哄鍣� */
+.call-status-container {
+ margin: 10px 0;
+}
+
+.status-alert {
+ border-radius: 8px;
+ transition: all 0.3s ease;
+}
+
+.status-alert.status-calling {
+ border-left: 4px solid #e6a23c;
+}
+
+.status-alert.status-connected {
+ border-left: 4px solid #67c23a;
+ animation: pulse 2s infinite;
+}
+
+.status-alert.status-ended {
+ border-left: 4px solid #909399;
+}
+
+/* SIP娉ㄥ唽鎻愮ず */
+.sip-registering {
+ margin: 10px 0;
+}
+
+.registering-alert {
+ border-radius: 8px;
+ background-color: #f4f4f5;
+ border-left: 4px solid #909399;
+}
+
+/* 鍔ㄧ敾鏁堟灉 */
+@keyframes pulse {
+ 0% {
+ opacity: 1;
+ }
+ 50% {
+ opacity: 0.7;
+ }
+ 100% {
+ opacity: 1;
+ }
+}
+
+/* 鍝嶅簲寮忚璁� */
+@media (max-width: 768px) {
+ .hangup-container {
+ margin: 10px 0;
+ }
+
+ .hangup-btn {
+ width: 100%;
+ max-width: 200px;
+ }
+
+ .status-alert {
+ font-size: 12px;
+ }
+}
.CONTENT {
padding: 10px;
height: 100%;
- min-height: 738px; /* 璁剧疆鏈�灏忛珮搴� */
+ min-height: 738px;
+ /* 璁剧疆鏈�灏忛珮搴� */
.title {
font-size: 22px;
@@ -2612,8 +2908,10 @@
padding: 30px;
border: 1px solid #dcdfe6;
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04);
- max-height: 618px; /* 璁剧疆鏈�澶ч珮搴� */
- overflow-y: auto; /* 鍐呭瓒呰繃楂樺害鏃舵樉绀烘粴鍔ㄦ潯 */
+ max-height: 716px;
+ /* 璁剧疆鏈�澶ч珮搴� */
+ overflow-y: auto;
+ /* 鍐呭瓒呰繃楂樺害鏃舵樉绀烘粴鍔ㄦ潯 */
.topic-dev {
margin-bottom: 25px;
@@ -2669,7 +2967,8 @@
/* 鏂板锛氳鍛婄姸鎬佹牱寮� - 榛勮壊 */
.scriptTopic-warning {
- color: #d4be00; /* 鎮ㄦ寚瀹氱殑榛勮壊 */
+ color: #d4be00;
+ /* 鎮ㄦ寚瀹氱殑榛勮壊 */
}
/* 寮傚父閫夐」鏍峰紡 - 绾㈣壊鏄熷彿 (淇濇寔涓嶅彉) */
@@ -2697,7 +2996,8 @@
::v-deep.el-radio__label::after {
content: "*";
- color: #ffe202; /* 榛勮壊鏄熷彿 */
+ color: #ffe202;
+ /* 榛勮壊鏄熷彿 */
position: absolute;
right: -5px;
top: 0;
@@ -2723,6 +3023,7 @@
right: -5px;
top: 0;
}
+
.tag-selector-container {
display: flex;
align-items: center;
@@ -2759,9 +3060,11 @@
.tag-normal {
background-color: #7ff5e1;
}
+
.tag-abnormal {
background-color: #f75c5c;
}
+
.tag-warning {
background-color: #fbfb4a;
}
@@ -2771,6 +3074,7 @@
color: #909399;
cursor: pointer;
}
+
::v-deep.offside-value .el-radio__label {
color: #fff;
}
@@ -2820,6 +3124,7 @@
color: #080808 !important;
cursor: not-allowed;
}
+
/* 鍘熸湁鐨勬牱寮忎繚鎸佷笉鍙橈紝娣诲姞浠ヤ笅鍝嶅簲寮忎唬鐮� */
.Followupdetailspage {
@@ -2831,7 +3136,8 @@
.action-container {
display: flex;
- flex-direction: row; /* 榛樿妯悜鎺掑垪 */
+ flex-direction: row;
+ /* 榛樿妯悜鎺掑垪 */
gap: 20px;
margin: 0 10px 20px 10px;
@@ -2974,7 +3280,8 @@
/* 纭繚鍐呭鍦ㄧ缉鏀炬椂淇濇寔鍙鎬� */
.headline {
- font-size: clamp(18px, 2vw, 24px); /* 浣跨敤clamp鍑芥暟纭繚瀛椾綋澶у皬鍦ㄥ悎鐞嗚寖鍥村唴 */
+ font-size: clamp(18px, 2vw, 24px);
+ /* 浣跨敤clamp鍑芥暟纭繚瀛椾綋澶у皬鍦ㄥ悎鐞嗚寖鍥村唴 */
}
/* 涓虹Щ鍔ㄨ澶囦紭鍖栨粴鍔ㄤ綋楠� */
@@ -3009,4 +3316,366 @@
margin-bottom: 20px;
}
}
+/* 浜哄伐澶勭悊閮ㄥ垎鏍峰紡 */
+.manual-action {
+ flex: 1;
+ min-width: 0;
+ height: 100%;
+ overflow: hidden;
+
+ .Followuserinfos {
+ display: flex;
+ flex-direction: column;
+ gap: 20px;
+ padding: 20px;
+ background: #fff;
+ border-radius: 8px;
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+ height: 100%;
+ overflow-y: auto;
+ }
+}
+
+/* 澶撮儴鍖哄煙 */
+.section-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding-bottom: 15px;
+ border-bottom: 2px solid #f0f0f0;
+ margin-bottom: 20px;
+ flex-wrap: wrap;
+ gap: 15px;
+
+ h3 {
+ margin: 0;
+ color: #409eff;
+ font-size: 18px;
+ font-weight: 600;
+ display: flex;
+ align-items: center;
+ gap: 8px;
+
+ i {
+ font-size: 20px;
+ }
+ }
+
+ .header-actions {
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 15px;
+
+ .action-group {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ }
+ }
+}
+
+/* 鍩虹鎿嶄綔鎸夐挳 */
+.basic-actions {
+ .el-button {
+ min-width: 100px;
+ }
+}
+
+/* 寮傚父鐘舵�侀�夋嫨鍣� */
+.tag-selector {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+
+ .current-tag {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ padding: 6px 12px;
+ background: #f8f9fa;
+ border: 1px solid;
+ border-radius: 4px;
+ font-size: 12px;
+ transition: all 0.3s;
+
+ &:hover {
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+ }
+ }
+}
+
+.color-indicator {
+ width: 16px;
+ height: 16px;
+ border-radius: 3px;
+ margin-right: 8px;
+ display: inline-block;
+}
+
+.selected-indicator {
+ margin-left: 10px;
+ width: 20px;
+ height: 20px;
+}
+
+.tag-info-icon {
+ margin-left: 10px;
+ color: #909399;
+ cursor: pointer;
+ font-size: 16px;
+}
+
+/* 琛ㄥ崟鍖哄煙 */
+.form-content {
+ background: #f8f9fa;
+ border-radius: 8px;
+ padding: 20px;
+ margin-bottom: 20px;
+
+ .el-form {
+ .el-row {
+ margin: 0 -10px;
+ }
+
+ .el-col {
+ padding: 0 10px;
+ }
+ }
+}
+
+/* 閫氳瘽鎺у埗鍖哄煙 */
+.call-controls {
+ margin: 15px 0;
+
+ .hangup-container {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 10px;
+ margin: 15px 0;
+ }
+
+ .hangup-btn {
+ width: 120px;
+ height: 40px;
+ font-size: 14px;
+ border-radius: 20px;
+ box-shadow: 0 2px 8px rgba(244, 67, 54, 0.3);
+ transition: all 0.3s ease;
+ }
+
+ .hangup-btn:hover:not(:disabled) {
+ transform: translateY(-2px);
+ box-shadow: 0 4px 12px rgba(244, 67, 54, 0.4);
+ }
+
+ .call-timer {
+ font-size: 12px;
+ color: #666;
+ background: #f5f5f5;
+ padding: 4px 12px;
+ border-radius: 12px;
+ font-family: "Courier New", monospace;
+ }
+
+ .call-status-container {
+ margin: 10px 0;
+ }
+
+ .status-alert {
+ border-radius: 8px;
+ transition: all 0.3s ease;
+ }
+
+ .status-alert.status-calling {
+ border-left: 4px solid #e6a23c;
+ }
+
+ .status-alert.status-connected {
+ border-left: 4px solid #67c23a;
+ animation: pulse 2s infinite;
+ }
+
+ .status-alert.status-ended {
+ border-left: 4px solid #909399;
+ }
+
+ .sip-registering {
+ margin: 10px 0;
+ }
+
+ .registering-alert {
+ border-radius: 8px;
+ background-color: #f4f4f5;
+ border-left: 4px solid #909399;
+ }
+}
+
+/* 澶勭悊鎰忚鎸夐挳缁� */
+.opinion-buttons {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px;
+ align-items: center;
+
+ .el-button {
+ flex: 1;
+ min-width: 120px;
+ }
+}
+
+/* 鎮h�呮。妗堜俊鎭� */
+.detailed {
+ width: 100%;
+ border-radius: 8px;
+ padding: 20px;
+ margin-bottom: 20px;
+ background-color: #ddf0f8;
+ border: 1px solid #b3e0f2;
+
+ h3 {
+ margin: 0 0 20px 0;
+ color: #333;
+ font-size: 16px;
+ font-weight: 500;
+ display: flex;
+ align-items: center;
+ gap: 8px;
+
+ &:before {
+ content: "";
+ display: block;
+ width: 4px;
+ height: 16px;
+ background: #409eff;
+ border-radius: 2px;
+ }
+ }
+
+ .el-form {
+ .el-row {
+ margin: 0 -10px;
+ }
+
+ .el-col {
+ padding: 0 10px;
+ margin-bottom: 15px;
+ }
+ }
+}
+
+/* 鍔ㄧ敾鏁堟灉 */
+@keyframes pulse {
+ 0% {
+ opacity: 1;
+ }
+ 50% {
+ opacity: 0.7;
+ }
+ 100% {
+ opacity: 1;
+ }
+}
+
+/* 鍝嶅簲寮忚璁� */
+@media screen and (max-width: 1200px) {
+ .section-header {
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 15px;
+ }
+
+ .header-actions {
+ width: 100%;
+ justify-content: space-between;
+ }
+
+ .opinion-buttons {
+ .el-button {
+ min-width: calc(50% - 8px);
+ }
+ }
+}
+
+@media screen and (max-width: 768px) {
+ .Followuserinfos {
+ padding: 15px;
+ }
+
+ .form-content,
+ .detailed {
+ padding: 15px;
+ }
+
+ .header-actions {
+ flex-direction: column;
+ align-items: stretch;
+
+ .action-group {
+ flex-direction: column;
+ align-items: stretch;
+
+ .el-select {
+ width: 100%;
+ margin-right: 0;
+ }
+ }
+ }
+
+ .opinion-buttons {
+ flex-direction: column;
+
+ .el-button {
+ width: 100%;
+ }
+ }
+
+ .detailed {
+ .el-form {
+ .el-col {
+ width: 100%;
+ }
+ }
+ }
+}
+
+/* 婊氬姩鏉$編鍖� */
+.Followuserinfos {
+ &::-webkit-scrollbar {
+ width: 6px;
+ }
+
+ &::-webkit-scrollbar-track {
+ background: #f1f1f1;
+ border-radius: 3px;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ background: #c1c1c1;
+ border-radius: 3px;
+
+ &:hover {
+ background: #a8a8a8;
+ }
+ }
+}
+
+/* 鎸夐挳鍥炬爣浼樺寲 */
+.el-icon-phone {
+ transition: all 0.3s;
+}
+
+.el-button[disabled] .el-icon-phone {
+ color: #c0c4cc;
+}
+
+.el-button:not([disabled]) .el-icon-phone {
+ color: #409eff;
+}
+
+.el-button:not([disabled]):hover .el-icon-phone {
+ color: #66b1ff;
+ transform: scale(1.1);
+}
</style>
--
Gitblit v1.9.3