From 4b221581b1d7b6c22e86af4e12c363ef482898c8 Mon Sep 17 00:00:00 2001 From: WXL (wul) <wl_5969728@163.com> Date: 星期三, 20 八月 2025 17:37:38 +0800 Subject: [PATCH] 随访详情及控制台错误优化 --- src/views/followvisit/record/detailpage/index.vue | 960 ++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 844 insertions(+), 116 deletions(-) diff --git a/src/views/followvisit/record/detailpage/index.vue b/src/views/followvisit/record/detailpage/index.vue index fc397df..0e292ce 100644 --- a/src/views/followvisit/record/detailpage/index.vue +++ b/src/views/followvisit/record/detailpage/index.vue @@ -1,6 +1,6 @@ <template> <!-- 鑱婅繛椤甸潰璁板綍 --> - <div class="Followupdetailspage"> + <div class="Followupdetailspage" id="app-container"> <div class="Followuserinfo"> <div> <div class="userinfo-text"> @@ -15,7 +15,7 @@ >鏌ョ湅鎮h�呭叏閮ㄦ湇鍔�</el-button > <el-button v-else type="success" @click="getTaskservelist(id)" - >鏌ョ湅鎮h�呮湰娆℃湇鍔′俊鎭�</el-button + >鍙睍绀烘湰娆℃湇鍔′俊鎭�</el-button > </div> <div style="margin-left: 20px; color: #59a0f0"> @@ -32,9 +32,33 @@ </div> </div> <div> - <el-table :data="logsheetlist" style="width: 100%"> - <el-table-column prop="sendname" align="center" label="濮撳悕" - width="100"> + <el-table + :data="logsheetlist" + :row-class-name="tableRowClassName" + style="width: 100%" + > + <el-table-column + prop="sendname" + align="center" + label="濮撳悕" + width="100" + > + <template slot-scope="scope"> + <el-button + size="medium" + type="text" + @click=" + gettoken360( + scope.row.sfzh, + scope.row.drcode, + scope.row.drname + ) + " + ><span class="button-textsc">{{ + scope.row.sendname + }}</span></el-button + > + </template> </el-table-column> <el-table-column prop="taskName" @@ -84,7 +108,7 @@ <el-table-column prop="finishtime" align="center" - label="瀹屾垚鏃堕棿" + label="闅忚瀹屾垚鏃堕棿" width="200" show-overflow-tooltip > @@ -152,6 +176,14 @@ show-overflow-tooltip > </el-table-column> + <el-table-column + prop="remark" + align="center" + label="鏈嶅姟璁板綍" + width="200" + show-overflow-tooltip + > + </el-table-column> <el-table-column prop="bankcardno" @@ -172,7 +204,6 @@ size="medium" type="text" @click="Seedetails(scope.row)" - v-hasPermi="['system:user:edit']" ><span class="button-zx" ><i class="el-icon-s-order"></i>鏌ョ湅</span ></el-button @@ -182,34 +213,84 @@ </el-table> </div> </div> - <div :class="form.serviceType == 2 ? 'Followuserinfo' : 'Followuserinfos'"> + <div class="Followuserinfos"> <div> - <el-form ref="form" :model="form" label-width="120px"> + <el-form + ref="userform" + :model="form" + :rules="userrules" + label-width="120px" + > <div class="headline"> <div>浜哄伐澶勭悊</div> <el-row :gutter="20"> - <el-col :span="12" + <el-col :span="8" ><el-form-item label="鑱旂郴鐢佃瘽"> <el-input - disabled placeholder="鑱旂郴鐢佃瘽缂哄け" v-model="userform.telcode" + > + <el-button + slot="append" + icon="el-icon-phone" + @click="handleCall(userform.telcode, 'tel')" + :disabled="!isValidPhone(userform.telcode)" + ></el-button ></el-input> </el-form-item ></el-col> - <el-col :span="12" + <el-col :span="8" ><el-form-item label="鑱旂郴浜虹數璇�"> <el-input - disabled placeholder="鑱旂郴浜虹數璇濈己澶�" v-model="userform.relativetelcode" + > + <el-button + slot="append" + icon="el-icon-phone" + @click="handleCall(userform.relativetelcode, 'relative')" + :disabled="!isValidPhone(userform.relativetelcode)" + ></el-button + ></el-input> </el-form-item + ></el-col> + <el-col :span="8" + ><el-form-item label="鑱旂郴浜哄叧绯�"> + <el-input + placeholder="鑱旂郴浜哄叧绯荤己澶�" + v-model="userform.relation" ></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> + <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> @@ -231,7 +312,11 @@ <el-button plain type="info" @click="Editsingletaskson('5')" >涓績闅忚</el-button > - <el-button type="primary" round @click="sendAgain()" + <el-button + type="primary" + round + v-if="this.form.isVisitAgain != 2" + @click="sendAgain()" >鍐嶆闅忚</el-button > </div> @@ -250,13 +335,23 @@ 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-input v-model="userform.telcode" placeholder="璇疯緭鍏ヨ仈绯绘柟寮�" - maxlength="30" + 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"> @@ -301,7 +396,15 @@ </el-collapse> </div> </div> - <div v-if="form.serviceType == 2"> + <div> + <h2>涓�閿懠鍙姛鑳�</h2> + <CallButton + ref="callButton" + :phoneNumber="currentPhoneNumber" + style="display: none" + /> + </div> + <div> <el-tabs v-model="activeName" type="border-card"> <el-tab-pane name="wj"> <span class="mulsz" slot="label" @@ -311,12 +414,12 @@ <div class="title">{{ taskname ? taskname : "闂嵎" }}</div> <div class="preview-left" v-if="!Voicetype"> - <!-- 鍗曢�� --> <div class="topic-dev" v-for="(item, index) in tableDatatop" :key="item.id" > + <!-- 鍗曢�� --> <div :class=" item.isabnormal @@ -324,7 +427,7 @@ : 'scriptTopic-dev' " :key="index" - v-if="item.scriptType == 1" + v-if="item.scriptType == 1 && !item.astrict" > <div class="dev-text"> {{ index + 1 }}銆乕鍗曢�塢<span>{{ item.scriptContent }}</span> @@ -332,14 +435,20 @@ <div class="dev-xx"> <el-radio-group v-model="item.scriptResult" - @change="handleOptionChange($event, index, item)" + @change=" + handleOptionChange( + $event, + index, + item.svyLibTemplateTargetoptions + ) + " > <el-radio v-for="( - items, index + items, indexs ) in item.svyLibTemplateTargetoptions" :class="items.isabnormal ? 'red-star' : ''" - :key="index" + :key="indexs" :label="items.optioncontent" >{{ items.optioncontent }}</el-radio > @@ -357,7 +466,7 @@ : 'scriptTopic-dev' " :key="index" - v-if="item.scriptType == 2" + v-if="item.scriptType == 2 && !item.astrict" > <div class="dev-text"> {{ index + 1 }}銆乕澶氶�塢<span>{{ item.scriptContent }}</span> @@ -388,7 +497,7 @@ <div class="scriptTopic-dev" :key="index" - v-if="item.scriptType == 4" + v-if="item.scriptType == 4 && !item.astrict" > <div class="dev-text"> {{ index + 1 }}銆乕闂瓟]<span>{{ item.scriptContent }}</span> @@ -478,7 +587,7 @@ 瀹屾暣璇煶锛� <mini-audio :audio-source=" - voice ? voice : 'https://example.com/example.mp3' + voice ? voice : '@assets/order/example.mp3' " ></mini-audio> </div> @@ -502,7 +611,7 @@ :audio-source=" item.questionvoice ? item.questionvoice - : 'https://example.com/example.mp3' + : '@assets/order/example.mp3' " ></mini-audio> </div> @@ -520,8 +629,12 @@ </el-tab-pane> </el-tabs> </div> - <el-dialog title="鎮h�呭啀娆¢殢璁�" :visible.sync="dialogFormVisible"> - <el-form ref="form" :model="form" label-width="80px"> + <el-dialog + title="鎮h�呭啀娆¢殢璁�" + v-dialogDrags + :visible.sync="dialogFormVisible" + > + <el-form ref="zcform" :rules="zcrules" :model="form" label-width="80px"> <el-form-item label="浠诲姟鍚嶇О"> <el-input style="width: 400px" @@ -553,30 +666,111 @@ v-model="form.leavehospitaldistrictname" ></el-input> </el-form-item> + <el-form-item label="鍑洪櫌鏃堕棿"> + <el-input + style="width: 400px" + disabled + v-model="form.endtime" + ></el-input> + </el-form-item> + <div class="headline">涓婃闅忚</div> + <el-divider></el-divider> + <el-row> + <el-col :span="12"> + <el-form-item label="闅忚鏂瑰紡"> + <el-select + v-model="form.visitType2" + filterable + allow-create + default-first-option + disabled + placeholder="璇烽�夋嫨闅忚鏂瑰紡" + class="custom-disabled" + > + <el-option + v-for="item in options" + :key="item.value" + :label="item.label" + :value="item.value" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="闅忚鏃堕棿"> + <el-date-picker + type="date" + disabled + placeholder="閫夋嫨鏃ユ湡" + :picker-options="pickerOptions" + align="right" + v-model="form.date2" + class="custom-disabled" + ></el-date-picker> + </el-form-item> + </el-col> + </el-row> - <el-form-item label="闅忚鏂瑰紡"> + <el-form-item label="闅忚璁板綍"> + <el-input + class="custom-disabled" + type="textarea" + disabled + v-model="form.remark2" + ></el-input> + </el-form-item> + <div class="headline">涓嬫闅忚</div> + <el-divider></el-divider> + <el-row> + <el-col :span="12"> + <el-form-item label="闅忚鏂瑰紡" prop="date1"> + <el-select + v-model="form.visitType" + filterable + allow-create + default-first-option + @change="visitChange" + placeholder="璇烽�夋嫨闅忚鏂瑰紡(渚濆嚭闄㈡椂闂存妧璁$畻)" + > + <el-option + v-for="item in options" + :key="item.value" + :label="item.label" + :value="item.value" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="闅忚鏃堕棿" prop="date1"> + <el-date-picker + type="date" + placeholder="閫夋嫨鏃ユ湡" + :picker-options="pickerOptions" + align="right" + v-model="form.date1" + class="custom-disabled" + ></el-date-picker> + </el-form-item> + </el-col> + </el-row> + <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-switch v-model="zcform.delivery"></el-switch> - </el-form-item> --> - <el-form-item label="闅忚鏃堕棿"> - <el-date-picker - type="date" - placeholder="閫夋嫨鏃ユ湡" - v-model="form.date1" - style="width: 100%" - ></el-date-picker> - </el-form-item> + <el-form-item label="闅忚璁板綍"> <el-input type="textarea" v-model="form.remark"></el-input> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> - <el-button @click="dialogFormVisible = false">鍙� 娑�</el-button> + <el-button type="warning" @click="dialogFormVisible = false" + >鍙� 娑�</el-button + > <el-button type="primary" @click="setupsubtask">纭鍒涘缓鏈嶅姟</el-button> </div> </el-dialog> @@ -595,29 +789,184 @@ serviceSubtaskDetailadd, updatePersonVoices, addPersonVoices, + query360PatInfo, } from "@/api/AiCentre/index"; -import { messagelistpatient } from "@/api/patient/homepage"; +import { + messagelistpatient, + alterpatient, + listcontactinformation, +} from "@/api/patient/homepage"; +import CallButton from "@/components/CallButton"; export default { + components: { + CallButton, + }, + dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], data() { + const validatePhone = (rule, value, callback) => { + if (!value) { + return callback(new Error("璇疯緭鍏ヨ仈绯荤數璇�")); + } + setTimeout(() => { + if (!/^1[3-9]\d{9}$/.test(value)) { + callback(new Error("璇疯緭鍏ユ纭殑11浣嶆墜鏈哄彿鐮�")); + } else { + callback(); + } + }, 300); + }; return { userid: "", + currentPhoneNumber: "", + callType: "", // 鐢ㄤ簬鍖哄垎鏄摢涓數璇� + // 宸叉湁鏁版嵁... + callStatus: "idle", // idle, calling, connected, ended, failed + isEndingCall: false, + currentCall: null, // 褰撳墠閫氳瘽瀵硅薄 input: "浠婂ぉ韬綋杩樹笉閿�", radio: "2", taskname: "", activeName: "wj", voice: "", templateid: "", + again: "", zcform: {}, form: {}, tableDatatop: [], //棰樼洰琛� voiceDatatop: [], //棰樼洰琛� dynamicTags: [], - + zcrules: { + resource: [ + { required: true, message: "璇烽�夋嫨闅忚鏂瑰紡", trigger: "change" }, + ], + date1: [{ required: true, message: "璇烽�夋嫨闅忚鏃堕棿", trigger: "blur" }], + }, + userrules: { + telcode: [{ validator: validatePhone, trigger: "blur" }], + relativetelcode: [{ validator: validatePhone, trigger: "blur" }], + }, + url: "http://9.208.2.190:8090/smartor/serviceExternal/query360PatInfo", + postData: { + XiaoXiTou: { + FaSongFCSJC: "ZJHES", + FaSongJGID: localStorage.getItem("orgid"), + FaSongJGMC: localStorage.getItem("orgname"), + FaSongSJ: "2025-01-09聽17:29:36", + FaSongXTJC: "SUIFANGXT", + FaSongXTMC: "闅忚绯荤粺", + XiaoXiID: "5FA92AFB-9833-4608-87C7-F56A654AC171", + XiaoXiLX: "SC_LC_360STCX", + XiaoXiMC: "360聽瑙嗗浘鏌ヨ", + ZuHuID: localStorage.getItem("ZuHuID"), + ZuHuMC: localStorage.getItem("orgname"), + }, + YeWuXX: { + BingRenXX: { + ZhengJianHM: "", + ZhengJianLXDM: "01", + ZhengJianLXMC: "灞呮皯韬唤璇�", + ZuZhiJGID: localStorage.getItem("orgid"), + ZuZhiJGMC: localStorage.getItem("orgname"), + }, + YongHuXX: { + XiTongID: "SUIFANGXT", + XiTongMC: "闅忚绯荤粺", + YongHuID: "1400466972205912064", + YongHuXM: "JNRMYY", + ZuZhiJGID: localStorage.getItem("orgid"), + ZuZhiJGMC: localStorage.getItem("orgname"), + idp: "lyra", + }, + }, + }, + pickerOptions: { + disabledDate(time) { + // 绂佺敤浠婂ぉ鍙婁箣鍓嶇殑鏃ユ湡 + return time.getTime() < Date.now() - 24 * 60 * 60 * 1000; + }, + shortcuts: [ + { + text: "涓冨ぉ鍚�", + onClick(picker) { + const date = new Date(); + date.setTime(date.getTime() + 3600 * 1000 * 24 * 7); + picker.$emit("pick", date); + }, + }, + { + text: "15澶╁悗", + onClick(picker) { + const date = new Date(); + date.setTime(date.getTime() + 3600 * 1000 * 24 * 15); + picker.$emit("pick", date); + }, + }, + { + text: "涓�涓湀鍚�", + onClick(picker) { + const date = new Date(); + date.setTime(date.getTime() + 3600 * 1000 * 24 * 30); + picker.$emit("pick", date); + }, + }, + { + text: "涓変釜鏈堝悗", + onClick(picker) { + const date = new Date(); + date.setTime(date.getTime() + 3600 * 1000 * 24 * 90); + picker.$emit("pick", date); + }, + }, + { + text: "鍏釜鏈堝悗", + onClick(picker) { + const date = new Date(); + date.setTime(date.getTime() + 3600 * 1000 * 24 * 180); + picker.$emit("pick", date); + }, + }, + { + text: "涓�骞村悗", + onClick(picker) { + const date = new Date(); + date.setTime(date.getTime() + 3600 * 1000 * 24 * 365); + picker.$emit("pick", date); + }, + }, + ], + }, + options: [ + { + value: "涓冨ぉ鍚�", + label: "涓冨ぉ鍚�", + }, + { + value: "15澶╁悗", + label: "15澶╁悗", + }, + { + value: "涓�涓湀鍚�", + label: "涓�涓湀鍚�", + }, + { + value: "涓変釜鏈堝悗", + label: "涓変釜鏈堝悗", + }, + { + value: "鍏釜鏈堝悗", + label: "鍏釜鏈堝悗", + }, + { + value: "涓�骞村悗", + label: "涓�骞村悗", + }, + ], userform: {}, - Whetherall: false, //鏄惁鍏ㄩ儴璁板綍灞曠ず + Whetherall: true, //鏄惁鍏ㄩ儴璁板綍灞曠ず dialogFormVisible: false, Voicetype: 0, //鏄惁涓鸿闊虫湇鍔� + visitCount: null, logsheetlist: [], topicobj: {}, sendname: null, @@ -627,16 +976,39 @@ 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; this.sendname = this.$route.query.sendname; this.patid = this.$route.query.patid; + this.again = this.$route.query.again; this.Voicetype = this.$route.query.Voicetype; + this.visitCount = this.$route.query.visitCount; this.serviceType = this.$route.query.serviceType; - this.getTaskservelist(this.id); + this.getTaskservelist(); }, methods: { @@ -649,10 +1021,21 @@ isFinish: false, }).then((res) => { if (res.code === 200) { - this.tableDatatop = res.data.scriptResult.script; - this.tableDatatop.forEach((item) => { - console.log(item.scriptResultId, "scriptResultId"); + // 閽堝鍐嶆闅忚鏈嶅姟杩涜鍒犻櫎缁撴灉璧嬪�� + 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) => { + if (item.scriptType == 2) item.scriptResult = []; if (item.scriptResultId && item.scriptType != 2) { item.isoption = 3; item.scriptResult = item.scriptResult; @@ -663,6 +1046,22 @@ }); this.taskname = res.data.taskName; this.overdata(); + } + }); + }, + //鎮h��360璺宠浆 + gettoken360(sfzh, drcode, drname) { + this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh; + if (this.postData.XiaoXiTou.ZuHuMC == "涓芥按甯備腑鍖婚櫌") { + this.postData.YeWuXX.YongHuXX.YongHuID = "1400398571877961728"; + this.postData.YeWuXX.YongHuXX.YongHuXM = "LSZYY"; + } + query360PatInfo(this.postData).then((res) => { + if (res.data.url) { + window.open(res.data.url, "_blank"); + // this.linkUrl = res.data.url; + } else { + this.$modal.msgWarning("360鏌ヨ鏃犵粨鏋�"); } }); }, @@ -677,10 +1076,48 @@ messagelistpatient(queryParams).then((response) => { if (response.rows[0]) { this.userform = response.rows[0]; - this.dynamicTags = response.rows[0].tagList.map(this.processElement); + // this.dynamicTags = response.rows[0].tagList.map(this.processElement); + } + }); + listcontactinformation({ patid: this.patid }).then((response) => { + this.tableData = response.rows; + if (this.tableData.length) { + this.userform.relativetelcode = this.tableData[0].contactway; + this.userform.relation = this.tableData[0].relation; } }); }, + // 鍐嶆闅忚鏃堕棿閫夊彇 + visitChange(value) { + // 鏍规嵁閫夋嫨鐨勯殢璁挎柟寮忚缃椂闂� + const now = new Date(); + if (value.includes("涓冨ぉ鍚�")) { + this.form.date1 = new Date( + Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 7 + ); + } else if (value.includes("15澶╁悗")) { + this.form.date1 = new Date( + Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 15 + ); + } else if (value.includes("涓�涓湀鍚�")) { + this.form.date1 = new Date( + Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 30 + ); + } else if (value.includes("涓変釜鏈堝悗")) { + this.form.date1 = new Date( + Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 90 + ); + } else if (value.includes("鍏釜鏈堝悗")) { + this.form.date1 = new Date( + Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 180 + ); + } else if (value.includes("涓�骞村悗")) { + this.form.date1 = new Date( + Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 365 + ); + } + }, + // 鑾峰彇璇煶鏁版嵁 getPersonVoices(id) { let obj = { @@ -688,14 +1125,12 @@ patid: this.patid, subId: id ? id : this.id, }; - console.log(this.voiceDatatop, "111"); getPersonVoices(obj).then((res) => { - console.log("222"); if (res.code == 200) { this.voiceDatatop = res.data.serviceSubtaskDetails; this.voice = res.data.voice; - // // this.activeName = "yy"; + this.activeName = "yy"; this.taskname = res.data.taskName; // 闂嵎灞曠ず鏁版嵁澶勭悊 this.tableDatatop = res.data.filteredDetails; @@ -706,6 +1141,7 @@ item.scriptResult = []; } }); + if (!this.tableDatatop.length) { this.puttaskid(this.templateid); } @@ -733,13 +1169,13 @@ item.scriptResult = []; } }); - console.log(this.tableDatatop, "this.tableDatatop"); } }); }, // 鍖绘姢浜哄憳瀛樺偍鏁版嵁 getdetail() { let excep = ""; + const promises = []; this.tableDatatop.forEach((item) => { var objs = item.svyLibTemplateTargetoptions.find( (items) => items.optioncontent == item.scriptResult @@ -749,13 +1185,13 @@ excep = 1; } } - let obj = { asrtext: null, patid: this.patid, subId: this.id, taskid: this.taskid, scriptid: item.id, + excep: excep, questiontext: item.scriptContent, }; if (item.scriptType == 2 && item.scriptResult[0]) { @@ -765,27 +1201,163 @@ } if (item.isoption == 3) { - serviceSubtaskDetailedit(obj).then((res) => { - if (res.code == 200) { - } else { - this.$modal.error("淇敼澶辫触"); - } - }); + promises.push(serviceSubtaskDetailedit(obj)); } else { - serviceSubtaskDetailadd(obj).then((res) => { - if (res.code == 200) { - console.log(res); - } else { - this.$modal.error("淇敼澶辫触"); - } - }); + promises.push(serviceSubtaskDetailadd(obj)); } }); - this.Editsingletasksonyic(excep); + // 浣跨敤 Promise.all 绛夊緟鎵�鏈夊紓姝ユ搷浣滃畬鎴� + Promise.all(promises) + .then((results) => { + // 鎵�鏈夊紓姝ユ搷浣滄垚鍔熷畬鎴愬悗鐨勯�昏緫 + results.forEach((res) => { + if (res.code !== 200) { + this.$modal.error("淇敼澶辫触"); + } + }); + this.Editsingletasksonyic(6); + + this.$modal + .confirm( + '浠诲姟淇濆瓨鎴愬姛鏄惁閽堝鎮h�咃細"' + + this.logsheetlist[0].sendname + + '"鍐嶆闅忚锛�', + "纭", + { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + showCancelButton: true, + dangerouslyUseHTMLString: true, + confirmButtonClass: "custom-confirm-button", // 鑷畾涔夌‘璁ゆ寜閽殑绫诲悕 + cancelButtonClass: "custom-cancel-button", // 鑷畾涔夊彇娑堟寜閽殑绫诲悕 + } + ) + .then(() => { + document.querySelector("#app").scrollTo(0, 0); + this.formtidy(); + 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", + }); + } + } + }); + }) + .catch((error) => { + // 濡傛灉鏈変换浣曚竴涓紓姝ユ搷浣滃け璐ワ紝浼氳繘鍏ヨ繖閲� + console.error("鍙戠敓閿欒锛�", error); + }); + }, + // 楠岃瘉鐢佃瘽鍙风爜鏍煎紡骞惰繑鍥為敊璇俊鎭� + 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.$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) => { - console.log(item.scriptResult, "scriptResult"); item.scriptResult = item.scriptResult.join("&"); item.templatequestionnum = index + 1; item.subId = this.id; @@ -807,13 +1379,60 @@ addPersonVoices(obj).then((res) => { if (res.code == 200) { this.$modal.msgSuccess("鏈嶅姟淇濆瓨鎴愬姛"); + this.$modal + .confirm( + '浠诲姟淇濆瓨鎴愬姛鏄惁閽堝鎮h�咃細"' + + this.userform.name + + '"鍐嶆闅忚锛�', + "纭", + { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + showCancelButton: true, + dangerouslyUseHTMLString: true, + confirmButtonClass: "custom-confirm-button", // 鑷畾涔夌‘璁ゆ寜閽殑绫诲悕 + cancelButtonClass: "custom-cancel-button", // 鑷畾涔夊彇娑堟寜閽殑绫诲悕 + } + ) + .then(() => { + document.querySelector("#app").scrollTo(0, 0); + this.formtidy(); + 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", + }); + } + } + }); } }); }, - + // 鍐嶆闅忚鏁版嵁鏇存浛 + formtidy() { + this.form.visitType2 = this.form.visitType; + this.form.date2 = this.form.longSendTime; + this.form.remark2 = this.form.remark; + }, // 鑾峰彇鎮h�呰褰� getTaskservelist(id) { - this.id = id; if (id) { this.Whetherall = false; } else { @@ -823,15 +1442,28 @@ getTaskservelist({ patid: this.patid, subId: id, - deptOrDistrict:2, }).then((res) => { if (res.code == 200) { - this.form = res.rows[0].serviceSubtaskList[0]; - console.log(this.form,'this.form'); + this.form = res.rows[0].serviceSubtaskList.find( + (item) => item.id == this.id + ); + console.log(this.form.serviceType, "serviceType"); + this.logsheetlist = res.rows[0].serviceSubtaskList; this.templateid = this.logsheetlist[0].templateid; + const targetDate = new Date(this.form.longSendTime); // 鐩爣鏃ユ湡 + const now = new Date(); // 褰撳墠鏃堕棿 + if (now < targetDate && this.form.sendstate == 2) { + this.$confirm("褰撳墠鏈嶅姟鏈埌鍙戦�佹椂闂磋璋ㄦ厧淇敼", "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning", + }) + .then(() => {}) + .catch(() => {}); + } + this.getuserinfo(); } -this.getuserinfo(); if (this.Voicetype) { this.getPersonVoices(); } else { @@ -844,42 +1476,59 @@ getTaskservelist({ patid: this.patid, subId: this.id, - deptOrDistrict:2, }).then((res) => { if (res.code == 200) { objson = res.rows[0].serviceSubtaskList[0]; objson.suggest = son; Editsingletaskson(objson).then((res) => { if (res.code) { - this.$modal.msgSuccess("璁板綍鎴愬姛"); - this.getTaskservelist(this.id); + this.$modal.msgSuccess("鏈嶅姟璁板綍鎴愬姛"); + this.getTaskservelist(); } }); } }); }, - Editsingletasksonyic(excep) { + Editsingletasksonyic(sendstate) { let objson = {}; getTaskservelist({ patid: this.patid, subId: this.id, - deptOrDistrict:2, }).then((res) => { if (res.code == 200) { - objson = res.rows[0].serviceSubtaskList[0]; - objson.excep = excep; + objson = res.rows[0].serviceSubtaskList.find( + (item) => item.id == this.id + ); objson.remark = this.form.remark; + if (sendstate) objson.sendstate = sendstate; Editsingletaskson(objson).then((res) => { if (res.code) { this.$modal.msgSuccess("鏈嶅姟淇敼鎴愬姛"); - this.getTaskservelist(this.id); + alterpatient(this.userform).then((res) => { + if (res.code == 200) { + this.$modal.msgSuccess("鍩虹淇℃伅淇濆瓨鎴愬姛"); + } else { + this.$modal.msgError("鍩虹淇℃伅淇敼澶辫触"); + } + }); + this.getTaskservelist(); } }); } }); }, + // 寮傚父鍒楁覆鏌� + tableRowClassName({ row, rowIndex }) { + if (row.id == this.id) { + return "warning-row"; + } + return ""; + }, // 璋冭捣鍐嶆鍙戦�� sendAgain() { + document.querySelector("#app").scrollTo(0, 0); + // scrollTo(0, 0) + this.formtidy(); this.dialogFormVisible = true; }, // 鏌ョ湅璇︽儏 @@ -887,18 +1536,32 @@ this.$modal .confirm('鏄惁鏌ョ湅浠诲姟涓�"' + row.taskName + '"鐨勬湇鍔¤鎯呮暟鎹紵') .then(() => { + if (row.preachformson) { + if (row.preachformson.includes("3")) { + this.Voicetype = 1; + } + } this.taskid = row.taskid; this.id = row.id; this.patid = row.patid; - this.Voicetype = row.type; this.serviceType = row.serviceType; - this.getTaskservelist(this.id); + this.getTaskservelist(); }) .catch(() => {}); }, handleOptionChange(a, b, c) { - console.log(this.tableDatatop[b], "this.tableDatatop[b]"); - + const result = c.find((item) => item.optioncontent == a); + if (result.nextQuestion == 0) { + this.tableDatatop = this.tableDatatop.reduce((acc, item, i) => { + acc.push(i > b ? { ...item, astrict: 1 } : item); + return acc; + }, []); + } else { + this.tableDatatop = this.tableDatatop.reduce((acc, item, i) => { + acc.push(i > b ? { ...item, astrict: 0 } : item); + return acc; + }, []); + } if (this.Voicetype) { var obj = this.tableDatatop[b].ivrTaskScriptTargetoptionList.find( (item) => item.optioncontent == a @@ -917,8 +1580,6 @@ }, overdata() { this.tableDatatop.forEach((item, index) => { - console.log(item.svyLibTemplateTargetoptions); - var obj = item.svyLibTemplateTargetoptions.find( (items) => items.optioncontent == item.scriptResult ); @@ -934,36 +1595,71 @@ }, // 鍒涘缓鍐嶆闅忚鏈嶅姟 setupsubtask() { - let form = structuredClone(this.form); - form.longSendTime = this.formatTime(form.date1); - if (form.resource) { - if (form.resource == 2) { - form.serviceType = 10; + this.$refs["zcform"].validate((valid) => { + if (valid) { + if (this.form.date1 && new Date(this.form.date1) < new Date()) { + this.$message.error("闅忚鏃堕棿涓嶈兘灏忎簬褰撳墠鏃堕棿"); + return false; + } + this.form.remark = + this.form.remark + "銆�" + this.getCurrentTime() + "銆�"; + let form = structuredClone(this.form); + form.longSendTime = this.formatTime(form.date1); + form.finishtime = ""; + if (form.resource) { + if (form.resource == 2) { + form.visitDeptCode = localStorage.getItem("deptCode"); + form.visitDeptName = "闅忚涓績"; + } else { + form.visitDeptCode = form.deptcode; + form.visitDeptName = form.deptname; + } + } else { + this.$modal.msgError("鏈�夋嫨闅忚鏂瑰紡"); + return; + } + // form.id = null; + form.sendstate = 2; + console.log(form.serviceType, "form.serviceType"); + + addserviceSubtask(form).then((res) => { + if (res.code == 200) { + this.$modal.msgSuccess("鍒涘缓鎴愬姛"); + if (form.serviceType == 13) { + this.$router.push({ + path: "/logisticsservice/zbAgain", + }); + } else if (form.serviceType == 2) { + this.$router.push({ + path: "/logisticsservice/again", + }); + } + } else { + this.$modal.msgError("鍒涘缓澶辫触"); + } + document.querySelector("#app").scrollTo(0, 0); + this.dialogFormVisible = false; + }); } - } else { - this.$modal.msgError("鏈�夋嫨闅忚鏂瑰紡"); - } - form.id = null; - form.sendstate = 2; - addserviceSubtask(form).then((res) => { - if (res.code == 200) { - this.$modal.msgSuccess("鍒涘缓鎴愬姛"); - } else { - this.$modal.msgError("鍒涘缓澶辫触"); - } - this.dialogFormVisible = false; }); }, - updateScore(a, b, c) { - console.log(a); - console.log(b); - console.log(c); + getCurrentTime() { + const now = new Date(); + const year = now.getFullYear(); + const month = String(now.getMonth() + 1).padStart(2, "0"); + const day = String(now.getDate()).padStart(2, "0"); + const hours = String(now.getHours()).padStart(2, "0"); + const minutes = String(now.getMinutes()).padStart(2, "0"); + const seconds = String(now.getSeconds()).padStart(2, "0"); + + return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; }, + updateScore(a, b, c) {}, }, }; </script> -<style lang="scss" scoped> +<style lang="scss"> .Followupdetailspage { margin: 10px; } @@ -987,10 +1683,12 @@ } } } +::v-deep.el-table .warning-row { + background: #c4e2ee; +} .Followuserinfos { margin: 20px 10px; align-items: center; - height: 300px; padding: 30px; background: #ffff; border: 1px solid #dcdfe6; @@ -1132,8 +1830,38 @@ ::v-deep.el-link.el-link--default { color: #02a7f0 !important; } +.el-message-box__btns button:nth-child(2) { + margin-left: 10px; + background-color: #f57676; + border-color: #f57676; +} +.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); +} .mulsz { font-size: 25px; margin-top: 20px; } +.el-input.is-disabled .el-input__inner { + background-color: #fff; /* 鑳屾櫙棰滆壊 */ + border-color: #dcdfe6; /* 杈规棰滆壊 */ + color: #080808 !important; /* 鏂囧瓧棰滆壊 */ + cursor: not-allowed; /* 榧犳爣鏍峰紡 */ +} +.el-textarea.is-disabled .el-textarea__inner { + background-color: #fff; /* 鑳屾櫙棰滆壊 */ + border-color: #dcdfe6; /* 杈规棰滆壊 */ + color: #080808 !important; /* 鏂囧瓧棰滆壊 */ + cursor: not-allowed; /* 榧犳爣鏍峰紡 */ +} </style> -- Gitblit v1.9.3