From 3c802eaab73b17e802226ad198aea8818a31c56b Mon Sep 17 00:00:00 2001 From: WXL (wul) <wl_5969728@163.com> Date: 星期二, 09 九月 2025 14:25:53 +0800 Subject: [PATCH] Merge branch 'SLTD-smartor' into HeNan-Smartor --- dist.zip | 0 vue.config.js | 3 src/views/followvisit/zbAgain/index.vue | 4 src/views/patient/patient/outpatient.vue | 344 ++ src/views/knowledge/questionnaire/compilequer/index.vue | 43 src/api/AiCentre/satisfaction.js | 7 src/views/followvisit/zysatisfaction/index.vue | 1965 +++++++++++++ src/views/patient/propaganda/QuestionnaireTask.vue | 5 src/views/satisfaction.vue | 379 ++ src/views/followvisit/mzsatisfaction/index.vue | 1972 +++++++++++++ src/views/followvisit/record/detailpage/index.vue | 1129 +++++-- src/views/followvisit/record/detailpage/MergeAndModify.vue | 449 +++ src/store/getters.js | 64 src/views/followvisit/discharge/outpatientService.vue | 5 src/api/AiCentre/external.js | 10 src/views/outsideChainwtnew.vue | 1 src/views/followvisit/complaint/index.vue | 1965 +++++++++++++ src/permission.js | 1 dist (2).zip | 0 src/views/followvisit/again/index.vue | 5 src/assets/order/BHostClient.exe | 0 src/router/index.js | 5 src/views/loginSSO.vue | 160 + src/views/followvisit/record/physical/index.vue | 1 src/views/followvisit/discharge/index.vue | 5 25 files changed, 8,022 insertions(+), 500 deletions(-) diff --git "a/dist \0502\051.zip" "b/dist \0502\051.zip" index b17439a..811121b 100644 --- "a/dist \0502\051.zip" +++ "b/dist \0502\051.zip" Binary files differ diff --git a/dist.zip b/dist.zip index 4bef5b1..a84776e 100644 --- a/dist.zip +++ b/dist.zip Binary files differ diff --git a/src/api/AiCentre/external.js b/src/api/AiCentre/external.js index cba2ebd..9288107 100644 --- a/src/api/AiCentre/external.js +++ b/src/api/AiCentre/external.js @@ -92,7 +92,7 @@ data: data }); } -// 鏂板鏈嶅姟 +// 鍐嶆闅忚鏈嶅姟 export function addserviceSubtask(data) { return request({ url: "/smartor/serviceSubtask/addSubTaskAgain", @@ -100,4 +100,12 @@ data: data }); } +// 鍐嶆闅忚鏈嶅姟 +export function addSubtask(data) { + return request({ + url: "/smartor/serviceSubtask/addSubTask", + method: "post", + data: data + }); +} diff --git a/src/api/AiCentre/satisfaction.js b/src/api/AiCentre/satisfaction.js index e7f6e43..1d72c6e 100644 --- a/src/api/AiCentre/satisfaction.js +++ b/src/api/AiCentre/satisfaction.js @@ -19,5 +19,12 @@ data: data }); } +// 缂撳瓨闂嵎 +export function WLgetDept(orgid) { + return request({ + url: "/getDept/" + orgid, + method: "get", + }); +} diff --git a/src/assets/order/BHostClient.exe b/src/assets/order/BHostClient.exe new file mode 100644 index 0000000..db7c9c7 --- /dev/null +++ b/src/assets/order/BHostClient.exe Binary files differ diff --git a/src/permission.js b/src/permission.js index 91b16b0..e864e35 100644 --- a/src/permission.js +++ b/src/permission.js @@ -17,6 +17,7 @@ "/xj", "/sf", "/satisfaction", + "/loginSSO", ]; router.beforeEach((to, from, next) => { NProgress.start(); diff --git a/src/router/index.js b/src/router/index.js index 6a10307..8fe8951 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -46,6 +46,11 @@ component: () => import('@/views/login'), hidden: true }, + { + path: '/loginSSO', + component: () => import('@/views/loginSSO'), + hidden: true + }, { path: '/sf', component: () => import('@/views/outsideChainnew'), diff --git a/src/store/getters.js b/src/store/getters.js index 12b6661..6e62049 100644 --- a/src/store/getters.js +++ b/src/store/getters.js @@ -679,14 +679,30 @@ listClass: "", }, }, - // { - // value: 5, - // label: "婊℃剰搴﹁皟鏌�", - // raw: { - // cssClass: "", - // listClass: "", - // }, - // }, + { + value: 6, + label: "浣忛櫌婊℃剰搴�", + raw: { + cssClass: "", + listClass: "", + }, + }, + { + value: 14, + label: "闂ㄨ瘖婊℃剰搴�", + raw: { + cssClass: "", + listClass: "", + }, + }, + { + value: 15, + label: "鎶曡瘔寤鸿", + raw: { + cssClass: "", + listClass: "", + }, + }, { value: 7, label: "鎮h�呮姤鍛�", @@ -719,22 +735,22 @@ // listClass: "", // }, // }, - { - value: 11, - label: "褰卞儚闅忚", - raw: { - cssClass: "", - listClass: "", - }, - }, - { - value: 12, - label: "蹇冪數闅忚", - raw: { - cssClass: "", - listClass: "", - }, - }, + // { + // value: 11, + // label: "褰卞儚闅忚", + // raw: { + // cssClass: "", + // listClass: "", + // }, + // }, + // { + // value: 12, + // label: "蹇冪數闅忚", + // raw: { + // cssClass: "", + // listClass: "", + // }, + // }, // { // value: "13", // label: "涓撶梾闅忚", diff --git a/src/views/followvisit/again/index.vue b/src/views/followvisit/again/index.vue index 69529da..3427512 100644 --- a/src/views/followvisit/again/index.vue +++ b/src/views/followvisit/again/index.vue @@ -1197,8 +1197,9 @@ }); }, affiliation() { - this.topqueryParams.drcode = store.getters.hisUserId; - this.topqueryParams.nurseId = store.getters.hisUserId; + + this.topqueryParams.managementDoctor = store.getters.hisUserId; + this.getList(1); }, onthatday() { diff --git a/src/views/followvisit/complaint/index.vue b/src/views/followvisit/complaint/index.vue new file mode 100644 index 0000000..3c01758 --- /dev/null +++ b/src/views/followvisit/complaint/index.vue @@ -0,0 +1,1965 @@ +<template> + <div class="app-container"> + <div class="leftvlue" style="margin-bottom: 20px"> + <el-row :gutter="10"> + <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index"> + <el-card + shadow="hover" + :body-style="item.router ? ' cursor: pointer' : 'cursor: default'" + > + <div style="padding: 8px" @click="$router.push(item.router)"> + <span>{{ item.name }}</span> + <div + style=" + text-align: center; + font-size: 18px; + margin-top: 10px; + font-weight: 600; + " + > + {{ item.value ? item.value : 0 }} + </div> + </div> + </el-card> + </el-col> + <el-col :span="2.5"> + <div class="ysfleftvlue"> + <el-card shadow="hover"> + <div style="padding: 8px"> + <span>琛ㄥ崟宸插彂閫�</span> + <div + style=" + text-align: center; + font-size: 18px; + margin-top: 10px; + font-weight: 600; + " + > + {{ yfsvalue }} + </div> + </div> + </el-card> + </div> + </el-col> + <el-col :span="2.5"> + <div class="errleftvlue"> + <el-card shadow="hover"> + <div style="padding: 8px"> + <span>寮傚父</span> + <div + style=" + text-align: center; + font-size: 18px; + margin-top: 10px; + font-weight: 600; + " + > + {{ ycvalue }} + </div> + </div> + </el-card> + </div> + </el-col> + </el-row> + </div> + <el-row :gutter="20"> + <!--鐢ㄦ埛鏁版嵁--> + <el-form + :model="topqueryParams" + ref="queryForm" + size="small" + :inline="true" + v-show="showSearch" + label-width="98px" + > + <el-form-item label="浠诲姟鍚嶇О"> + <el-input + v-model="topqueryParams.taskName" + placeholder="璇烽�夋嫨浠诲姟鍚嶇О" + ></el-input> + </el-form-item> + + <el-form-item label="鍑洪櫌鏃堕棿"> + <el-date-picker + v-model="dateRange" + style="width: 240px" + value-format="yyyy-MM-dd" + type="daterange" + range-separator="-" + start-placeholder="寮�濮嬫棩鏈�" + end-placeholder="缁撴潫鏃ユ湡" + ></el-date-picker> + </el-form-item> + + + <el-form-item label="鎮h�呭鍚�" prop="sendname"> + <el-input + v-model="topqueryParams.sendname" + placeholder="璇疯緭鍏ユ偅鑰呭鍚�" + ></el-input> + </el-form-item> + <el-form-item label="璇婃柇鍚嶇О" prop="leavediagname"> + <el-input + v-model="topqueryParams.leavediagname" + placeholder="璇疯緭鍏ヨ瘖鏂悕绉�" + ></el-input> + </el-form-item> + <el-form-item label="闅忚浜哄憳" prop="updateBy"> + <el-input + v-model="topqueryParams.updateBy" + placeholder="璇疯緭鍏ラ殢璁夸汉鍛�" + ></el-input> + </el-form-item> + <el-form-item label="涓绘不鍖荤敓" prop="drname"> + <el-input + v-model="topqueryParams.drname" + placeholder="璇疯緭鍏ヤ富娌诲尰鐢�" + ></el-input> + </el-form-item> + <el-form-item label="缁忕鍖荤敓" prop="managementDoctor"> + <el-input + v-model="topqueryParams.managementDoctor" + placeholder="璇疯緭鍏ヤ富娌诲尰鐢�" + ></el-input> + </el-form-item> + + <el-form-item label="鎮h�呰寖鍥�" prop="status"> + <el-cascader + v-model="topqueryParams.scopetype" + placeholder="榛樿鍏ㄩ儴" + :options="sourcetype" + :props="{ expandTrigger: 'hover' }" + @change="handleChange" + ></el-cascader> + </el-form-item> + + <el-form-item label="浠诲姟鐘舵��" prop="status"> + <el-select v-model="topqueryParams.sendstate" placeholder="璇烽�夋嫨"> + <el-option + v-for="item in topicoptions" + :key="item.value" + :label="item.label" + :value="item.value" + > + </el-option> + </el-select> + </el-form-item> + <el-form-item label="鎺掑簭鏂瑰紡" prop="status"> + <el-select v-model="topqueryParams.sort" placeholder="璇烽�夋嫨"> + <el-option + v-for="item in topicoptionssort" + :key="item.value" + :label="item.label" + :value="item.value" + > + </el-option> + </el-select> + </el-form-item> + + <el-form-item> + <el-button + type="primary" + icon="el-icon-search" + size="medium" + @click="handleQuery(1)" + >鎼滅储</el-button + > + <el-button icon="el-icon-refresh" size="medium" @click="resetQuery" + >閲嶇疆</el-button + > + </el-form-item> + </el-form> + <el-divider></el-divider> + <el-row :gutter="10" class="mb8"> + <el-col :span="1.5"> + <div class="documentf"> + <div class="document"> + <el-button + type="warning" + plain + icon="el-icon-upload2" + size="medium" + @click="handleExport" + >瀵煎嚭</el-button + > + </div> + </div> + </el-col> + <el-col :span="1.5"> + <el-button + type="primary" + plain + icon="el-icon-plus" + size="medium" + @click="handleAdd" + >鏂板</el-button + > + </el-col> + + <el-col :span="1.5"> + <div class="documentf"> + <div class="document"> + <el-button + type="warning" + plain + icon="el-icon-warning-outline" + size="medium" + @click="toleadExport(1)" + >鎵ц澶辫触</el-button + > + </div> + </div> + </el-col> + <el-col :span="1.5"> + <div class="documentf"> + <div class="document"> + <el-button + type="danger" + plain + icon="el-icon-warning" + size="medium" + @click="toleadExport(2)" + >缁撴灉寮傚父</el-button + > + </div> + </div> + </el-col> + <el-col :span="1.5"> + <div class="documentf"> + <div class="document"> + <el-button + type="success" + plain + size="medium" + @click="buidegetTasklist()" + >寰呭姙鏈嶅姟</el-button + > + </div> + </div> + </el-col> + <el-col :span="1.5"> + <div class="documentf"> + <div class="document"> + <el-button + type="primary" + plain + size="medium" + @click="affiliation()" + >鏈汉鎵�灞炴湇鍔�</el-button + > + </div> + </div> + </el-col> + <el-col :span="1.5"> + <div class="documentf"> + <div class="document"> + <el-button type="success" size="medium" @click="onthatday()" + >褰撴棩鏈嶅姟</el-button + > + </div> + </div> + </el-col> + + </el-row> + <el-table + v-loading="loading" + ref="userform" + :data="userList" + :row-class-name="tableRowClassName" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="50" align="center" /> + <el-table-column + label="浠诲姟鍚嶇О" + fixed + width="150" + show-overflow-tooltip + align="center" + key="taskName" + prop="taskName" + /> + <!-- <el-table-column label="搴忓彿" fixed align="center" key="id" prop="id" /> --> + <el-table-column + label="濮撳悕" + width="100" + align="center" + key="sendname" + prop="sendname" + > + <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 + label="浠诲姟鐘舵��" + align="center" + key="sendstate" + prop="sendstate" + width="120" + > + <template slot-scope="scope"> + <el-tooltip + class="item" + effect="dark" + :content="scope.row.remark" + placement="top-start" + > + <div v-if="scope.row.sendstate == 1"> + <el-tag type="primary" :disable-transitions="false" + >琛ㄥ崟宸查鍙�</el-tag + > + </div> + <div v-if="scope.row.sendstate == 2"> + <el-tag type="primary" :disable-transitions="false" + >寰呴殢璁�</el-tag + > + </div> + <div v-if="scope.row.sendstate == 3"> + <el-tag type="success" :disable-transitions="false" + >琛ㄥ崟宸插彂閫�</el-tag + > + </div> + <div v-if="scope.row.sendstate == 4"> + <el-tag type="info" :disable-transitions="false">涓嶆墽琛�</el-tag> + </div> + <div v-if="scope.row.sendstate == 5"> + <el-tag type="danger" :disable-transitions="false" + >鍙戦�佸け璐�</el-tag + > + </div> + <div v-if="scope.row.sendstate == 6"> + <el-tag type="success" :disable-transitions="false" + >宸插畬鎴�</el-tag + > + </div> + </el-tooltip> + </template> + </el-table-column> + <!-- <el-table-column + label="浠诲姟寮傚父璇存槑" + width="120" + align="center" + key="remark" + prop="remark" --> + /> + + <el-table-column + label="澶勭悊鎰忚" + align="center" + key="suggest" + prop="suggest" + width="120" + > + <template slot-scope="scope"> + <dict-tag + :options="dict.type.sys_suggest" + :value="scope.row.suggest" + /> + </template> + </el-table-column> + + <el-table-column + label="闅忚瀹屾垚鏃堕棿" + sortable + align="center" + prop="finishtime" + width="160" + > + <template slot-scope="scope"> + <span>{{ parseTime(scope.row.finishtime) }}</span> + </template> + </el-table-column> + <el-table-column + label="鍑洪櫌鏃ユ湡" + width="200" + align="center" + key="endtime" + prop="endtime" + > + <template slot-scope="scope"> + <span>{{ formatTime(scope.row.endtime) }}</span> + </template></el-table-column + > + <el-table-column + label="涓绘不鍖荤敓" + width="120" + align="center" + key="drname" + prop="drname" + /> + <el-table-column + label="闅忚浜哄憳" + align="center" + key="updateBy" + prop="updateBy" + width="120" + /> + <el-table-column + label="缁忕鍖荤敓" + align="center" + key="managementDoctor" + prop="managementDoctor" + width="120" + /> + <el-table-column + label="鍑洪櫌澶╂暟" + width="120" + align="center" + key="endDay" + prop="endDay" + > + <template slot-scope="scope"> + <span>{{ scope.row.endDay ? scope.row.endDay + "澶�" : "" }}</span> + </template> + </el-table-column> + <el-table-column + label="韬唤璇佸彿鐮�" + width="200" + align="center" + key="sfzh" + prop="sfzh" + /> + <el-table-column + label="鑱旂郴鐢佃瘽" + width="200" + align="center" + key="phone" + prop="phone" + /> + <el-table-column + label="璐d换鎶ゅ+" + width="120" + align="center" + key="nurseName" + prop="nurseName" + /> + + <!-- <el-table-column + label="鐥呭巻鍙�" + align="center" + sortable + key="medicalRecordNo" + prop="medicalRecordNo" + width="120" + /> --> + + <!-- <el-table-column label="骞撮緞" align="center" key="age" prop="age" /> --> + <!-- <el-table-column label="鎬у埆"width="100" align="center" key="sex" prop="sex" /> --> + <!-- <el-table-column label="搴婂彿" align="center" key="badNo" prop="badNo" /> --> + <el-table-column + label="绉戝" + align="center" + key="deptname" + prop="deptname" + width="120" + > + </el-table-column> + <el-table-column + label="鐥呭尯" + align="center" + key="leavehospitaldistrictname" + prop="leavehospitaldistrictname" + width="120" + > + </el-table-column> + + <el-table-column + label="璇婃柇鍚嶇О" + align="center" + key="leavediagname" + prop="leavediagname" + width="120" + :show-overflow-tooltip="true" + > + </el-table-column> + + <el-table-column + label="鎶曡瘔寤鸿妯℃澘鍚嶇О" + align="center" + key="templatename" + prop="templatename" + width="200" + /> + <el-table-column + label="浠诲姟鎵ц鏂瑰紡" + align="center" + key="preachform" + prop="preachform" + width="160" + :show-overflow-tooltip="true" + > + <template slot-scope="scope"> + <span v-for="item in scope.row.preachform">{{ item }}銆� </span> + </template> + </el-table-column> + <!-- <el-table-column + label="浠诲姟鍙戦�佹祦绋�" + align="center" + key="serviceSubtaskRecordList" + prop="serviceSubtaskRecordList" + width="160" + :show-overflow-tooltip="true" + > + <template slot-scope="scope"> + <span v-for="item in scope.row.serviceSubtaskRecordList" + >{{ item.remark }}銆� + </span> + </template> + </el-table-column> --> + <el-table-column + label="浠诲姟缁撴灉璇存槑" + width="220" + align="center" + key="remark" + prop="remark" + > + <template slot-scope="scope" v-if="scope.row.remark"> + <el-tooltip + :content="scope.row.remark" + placement="top" + effect="dark" + > + <el-tag + type="warning" + v-if="scope.row.sendstate != 5 && scope.row.sendstate != 4" + >{{ scope.row.remark }}</el-tag + > + <el-tag type="warning" v-else>{{ scope.row.remark }}</el-tag> + </el-tooltip> + </template> + </el-table-column> + <el-table-column + label="鎿嶄綔" + align="center" + fixed="right" + width="300" + class-name="small-padding fixed-width" + > + <template slot-scope="scope"> + <!-- <el-tooltip + class="item" + effect="dark" + content="鍐嶆闅忚" + placement="top" + > + <el-button + size="medium" + type="text" + v-if="scope.row.isVisitAgain!=2" + @click="followupvisit(scope.row)" + ><span class="button-bb" + ><i class="el-icon-s-promotion"></i>鍐嶆闅忚</span + ></el-button + > + </el-tooltip> + <el-tooltip + v-if="scope.row.sendstate == 1 || scope.row.sendstate == 2" + class="item" + effect="dark" + content="鏆傚仠鏈嶅姟" + placement="top" + > + <el-button + size="medium" + type="text" + @click="handlestop(scope.row)" + v-hasPermi="['system:user:edit']" + ><span class="button-sc" + ><i class="el-icon-remove-outline"></i>鏆傚仠鏈嶅姟</span + ></el-button + > + </el-tooltip> --> + <el-button size="medium" type="text" @click="Seedetails(scope.row)" + ><span class="button-zx" + ><i class="el-icon-s-order"></i>鏌ョ湅璇︽儏</span + ></el-button + > + <el-button + size="medium" + type="text" + @click="handleUpdate(scope.row)" + ><span class="button-textxga" + ><i class="el-icon-edit"></i>鎮h�呰繃婊�</span + ></el-button + > + </template> + </el-table-column> + </el-table> + + <pagination + v-show="total > 0" + :total="total" + :page.sync="topqueryParams.pageNum" + :limit.sync="topqueryParams.pageSize" + @pagination="getList" + /> + </el-row> + <!-- 婊℃剰搴﹀脊妗� --> + <el-dialog + title="闅忚婊℃剰搴﹁瘎鍒�" + :visible.sync="scoreDialogVisible" + width="80%" + :close-on-click-modal="false" + > + <el-table :data="selectedRows" border style="width: 100%"> + <el-table-column + label="濮撳悕" + width="100" + align="center" + prop="sendname" + /> + <el-table-column + label="浠诲姟鍚嶇О" + width="180" + align="center" + prop="taskName" + /> + <!-- 鏂板璇勫垎鍒� --> + <el-table-column + label="鐪熷疄鎬�(20)" + align="center" + key="authenticity" + prop="authenticity" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.authenticity" + :min="0" + :max="20" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="涓�鍛ㄥ唴瀹屾垚(20)" + align="center" + key="weekFinish" + prop="weekFinish" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.weekFinish" + :min="0" + :max="20" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="瑙勮寖鎬�(10)" + align="center" + key="standard" + prop="standard" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.standard" + :min="0" + :max="10" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="鍙婃椂鎬�(10)" + align="center" + key="timeliness" + prop="timeliness" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.timeliness" + :min="0" + :max="10" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="瀹f暀鎯呭喌(10)" + align="center" + key="library" + prop="library" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.library" + :min="0" + :max="10" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="鐜婊℃剰搴�(10)" + align="center" + key="environment" + prop="environment" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.environment" + :min="0" + :max="10" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="鍖荤敓婊℃剰搴�(10)" + align="center" + key="doctorSatisfaction" + prop="doctorSatisfaction" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.doctorSatisfaction" + :min="0" + :max="10" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="鎶ゅ+婊℃剰搴�(10)" + align="center" + key="nurseSatisfaction" + prop="nurseSatisfaction" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.nurseSatisfaction" + :min="0" + :max="10" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="鎬诲垎" + align="center" + key="total" + prop="total" + fixed="right" + > + <template slot-scope="scope"> + <span>{{ calculateTotal(scope.row) }}</span> + </template> + </el-table-column> + </el-table> + + <div slot="footer" class="dialog-footer"> + <el-button @click="scoreDialogVisible = false">鍙栨秷</el-button> + <el-button type="primary" @click="saveScores">淇濆瓨</el-button> + </div> + </el-dialog> + <!-- 娣诲姞鎴栦慨鏀瑰奖鍍忛殢璁垮璇濇 --> + <el-dialog + :title="amendtag ? '淇敼鎮h�呬俊鎭�' : '鏂板鎮h��'" + :visible.sync="Labelchange" + width="900px" + > + <el-form ref="form" :model="form" :rules="rules" label-width="100px"> + <el-row> + <el-col :span="8"> + <el-form-item label="濮撳悕" width="100" prop="name"> + <el-input + v-model="form.name" + placeholder="璇疯緭鍏ュ鍚�" + maxlength="30" + /> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="鎬у埆" width="100" prop="sex"> + <el-select v-model="form.sex" placeholder="璇烽�夋嫨鎬у埆"> + <el-option + v-for="dict in sextype" + :key="dict.value" + :label="dict.label" + :value="dict.value" + ></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="骞撮緞" prop="age"> + <el-input + v-model="form.age" + placeholder="璇疯緭鍏ュ勾榫�" + maxlength="30" + /> + </el-form-item> + </el-col> + </el-row> + <el-row > + <el-col :span="8"> + <el-form-item label="杩囨护鍖荤敓" width="100" prop="filterDrname"> + <el-input + v-model="form.filterDrname" + placeholder="璇疯緭鍏ュ尰鐢熷鍚�" + maxlength="30" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="杩囨护鍘熷洜"> + <el-input + v-model="form.notrequiredreason" + type="textarea" + placeholder="璇疯緭鍏ヨ繃婊ゅ師鍥�" + ></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button type="primary" @click="submitForm">纭� 瀹�</el-button> + <el-button @click="cancel">鍙� 娑�</el-button> + </div> + </el-dialog> + <!-- 淇敼鍙戦�佹椂闂村璇濇 --> + <el-dialog + title="鍙戦�佹椂闂磋缃�" + :visible.sync="modificationVisible" + width="45%" + > + <div style="margin-bottom: 20px; color: red"> + 缁熶竴淇敼褰撳ぉ鏈彂閫佺殑浠诲姟鏃堕棿 + </div> + + <el-form + :model="ruleForm" + :rules="rules" + ref="ruleForm" + label-width="120px" + class="demo-ruleForm" + > + <el-form-item label="鍙戦�佹棩鏈�"> + <el-date-picker + v-model="ruleForm.value1" + type="date" + placeholder="閫夋嫨鏃ユ湡" + > + </el-date-picker> + </el-form-item> + + <el-form-item label="鏃堕棿娈�" prop="type"> + <el-checkbox-group v-model="ruleForm.type"> + <el-checkbox label="涓婂崍" name="type"></el-checkbox> + <el-checkbox label="涓嬪崍" name="type"></el-checkbox> + <el-checkbox label="鏅氫笂" name="type"></el-checkbox> + </el-checkbox-group> + </el-form-item> + <el-form-item label="涓婂崍鏃堕棿鍖洪棿" required> + <el-time-picker + is-range + v-model="ruleForm.value2" + range-separator="鑷�" + start-placeholder="寮�濮嬫椂闂�" + end-placeholder="缁撴潫鏃堕棿" + placeholder="閫夋嫨鏃堕棿鑼冨洿" + > + </el-time-picker> + </el-form-item> + <el-form-item label="涓嬪崍鏃堕棿鍖洪棿" required> + <el-time-picker + is-range + v-model="ruleForm.value3" + range-separator="鑷�" + start-placeholder="寮�濮嬫椂闂�" + end-placeholder="缁撴潫鏃堕棿" + placeholder="閫夋嫨鏃堕棿鑼冨洿" + > + </el-time-picker> + </el-form-item> + <el-form-item label="鏅氫笂鏃堕棿鍖洪棿" required> + <el-time-picker + is-range + v-model="ruleForm.value4" + range-separator="鑷�" + start-placeholder="寮�濮嬫椂闂�" + end-placeholder="缁撴潫鏃堕棿" + placeholder="閫夋嫨鏃堕棿鑼冨洿" + > + </el-time-picker> + </el-form-item> + </el-form> + + <span slot="footer" class="dialog-footer"> + <el-button @click="modificationVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="modificationVisible = false" + >纭� 瀹�</el-button + > + </span> + </el-dialog> + <!-- 鍐嶆闅忚 --> + + </div> +</template> + +<script> +import { + delUser, + addUser, + updateUser, + resetUserPwd, + changeUserStatus, +} from "@/api/system/user"; +import { + getTaskservelist, + buidegetTasklist, + addserviceSubtask, + query360PatInfo, + addsatisfaction, +} from "@/api/AiCentre/index"; +import { alterpatient, particularpatient } from "@/api/patient/homepage"; +import Treeselect from "@riophae/vue-treeselect"; +import store from "@/store"; +import "@riophae/vue-treeselect/dist/vue-treeselect.css"; + +export default { + name: "Discharge", + dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], + components: { Treeselect }, + data() { + return { + // 閬僵灞� + loading: true, + // 閫変腑鏁扮粍 + ids: [], + // 闈炲崟涓鐢� + single: true, + // 闈炲涓鐢� + multiple: true, + // 鏄剧ず鎼滅储鏉′欢 + showSearch: true, + // 鎬绘潯鏁� + total: 0, + // 鐢ㄦ埛琛ㄦ牸鏁版嵁 + userList: null, + // 寮瑰嚭灞傛爣棰� + title: "鏂板褰卞儚闅忚", + // 鏄惁鏄剧ず淇敼銆佹坊鍔犲脊鍑哄眰 + addalteropen: false, + // 淇敼鍙戦�佹椂闂村璇濇 + modificationVisible: false, + // 閮ㄩ棬鍚嶇О + deptName: undefined, + // 榛樿瀵嗙爜 + initPassword: undefined, + // 鏃ユ湡鑼冨洿 + dateRange: [], + dateRangefs: [], + // 宀椾綅閫夐」 + postOptions: [], + ruleForm: { + type: [], + }, + zcform: {}, + dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」 + inputVisible: false, + Labelchange: false, + ycvalue: "", + yfsvalue: "", + inputValue: "", + preachform: "", + previewVisible: false, //褰卞儚闅忚棰勮寮规 + radio: "", + radios: [], + previewtype: 2, //棰勮褰卞儚闅忚绫诲瀷 + total: 0, // 鎬绘潯鏁� + // 婊℃剰搴﹁皟鏌ユ暟鎹� + scoreDialogVisible: false, + selectedRows: [], + + value: [], + list: [], + + sourcetype: [ + { + value: 1, + label: "绉戝", + children: [], + }, + { + value: 2, + label: "鐥呭尯", + children: [], + }, + { + value: 3, + label: "鍏ㄩ儴", + }, + ], + loading: false, + cardlist: [ + { + name: "鏈嶅姟鎬婚噺", + value: 0, + }, + // { + // name: "鎮h�呰繃婊�", + // value: 0, + // }, + { + name: "搴旈殢璁�", + value: 0, + }, + { + name: "鍙戦�佸け璐�", + value: 0, + }, + { + name: "寰呴殢璁�", + value: 0, + }, + // { + // name: "宸插彂閫�", + // value: 0, + // }, + + // { + // name: "琛ㄥ崟宸插彂閫�", + // value: 0, + // }, + ], + zcrules: { + date1: [ + { required: true, message: "璇烽�夋嫨闅忚鏂瑰紡", trigger: "change" }, + ], + resource: [ + { required: true, message: "璇烽�夋嫨闅忚鏃堕棿", trigger: "blur" }, + ], + }, + // 琛ㄥ崟鍙傛暟 + form: { + phonenumber: "", + totagid: "", + types: "", + nickName: "", + qystatus: "", + btstatus: "", + }, + topicoptionssort: [ + { + value: 0, + label: "鍑洪櫌鏃堕棿(姝e簭)", + }, + { + value: 1, + label: "鍑洪櫌鏃堕棿(鍊掑簭)", + }, + { + value: 2, + label: "鍙戦�佹椂闂�(姝e簭)", + }, + { + value: 3, + label: "鍙戦�佹椂闂�(鍊掑簭)", + }, + ], + // 鏌ヨ鍙傛暟 + topqueryParams: { + pageNum: 1, + pageSize: 10, + sendstate: 6, + sort: 2, //0 鍑洪櫌鏃堕棿(姝e簭) 1 鍑洪櫌鏃堕棿(鍊掑簭) 2 鍙戦�佹椂闂�(姝e簭) 3 鍙戦�佹椂闂�(鍊掑簭) + serviceType: 15, + searchscope: 3, + visitCount: 1, + scopetype: [], + leaveldeptcodes: [], + leavehospitaldistrictcodes: [], + }, + propss: { multiple: true }, + options: [], + + topicoptions: [ + { + value: null, + label: "鍏ㄩ儴", + }, + { + value: 1, + label: "琛ㄥ崟宸查鍙�", + }, + { + value: 2, + label: "寰呴殢璁�", + }, + { + value: 3, + label: "琛ㄥ崟宸插彂閫�", + }, + { + value: 4, + label: "涓嶆墽琛�", + }, + { + value: 5, + label: "鍙戦�佸け璐�", + }, + { + value: 6, + label: "宸插畬鎴�", + }, + ], + sextype: [ + { + value: 1, + label: "鐢�", + }, + { + value: 2, + label: "濂�", + }, + ], + topicoptionsyj: [ + { + value: 1, + label: "寮傚父", + }, + { + value: 0, + label: "姝e父", + }, + ], + 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", + }, + }, + }, + amendtag: false, + errtype: "", + leavehospitaldistrictcode: "", + serviceState: [], + checkboxlist: [], + // 琛ㄥ崟鏍¢獙 + rules: {}, + }; + }, + watch: {}, + created() { + this.serviceState = store.getters.serviceState; + this.checkboxlist = store.getters.checkboxlist; + this.errtype = this.$route.query.errtype; + this.leavehospitaldistrictcode = + this.$route.query.leavehospitaldistrictcode; + this.sourcetype[0].children = store.getters.belongDepts.map((dept) => { + return { + label: dept.deptName, + value: dept.deptCode, + }; + }); + this.sourcetype[1].children = store.getters.belongWards.map((dept) => { + return { + label: dept.districtName, + value: dept.districtCode, + }; + }); + if (this.errtype) { + this.toleadExport(2); + } else { + this.getList(1); + } + this.getConfigKey("sys.user.initPassword").then((response) => { + this.initPassword = response.msg; + }); + }, + activated() { + this.getList(1); + }, + methods: { + /** 鏌ヨ闅忚鏈嶅姟鍒楄〃 */ + getList(refresh) { + // 榛樿鍏ㄩ儴 + + if (this.topqueryParams.searchscope == 3) { + this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map( + (obj) => obj.deptCode + ); + this.topqueryParams.leavehospitaldistrictcodes = + store.getters.belongWards.map((obj) => obj.districtCode); + } + // 鎺ュ彈寮傚父璺宠浆 + if (this.errtype) { + this.topqueryParams.leavehospitaldistrictcodes.push( + this.leavehospitaldistrictcode + ); + console.log(this.topqueryParams.leavehospitaldistrictcodes, "11"); + } + this.loading = true; + if ( + this.topqueryParams.leavehospitaldistrictcodes[0] && + this.topqueryParams.leaveldeptcodes[0] + ) { + this.topqueryParams.deptOrDistrict = 2; + } else { + this.topqueryParams.deptOrDistrict = 1; + } + getTaskservelist(this.topqueryParams).then((response) => { + this.userList = response.rows[0].serviceSubtaskList; + this.total = response.total; + if (refresh) { + this.cardlist[0].value = + Number(response.rows[0].wzx) + Number(response.rows[0].ysf); + // this.cardlist[1].value = response.rows[0].wzx; + this.cardlist[1].value = response.rows[0].ysf; + this.ycvalue = response.rows[0].yc; + this.cardlist[2].value = response.rows[0].fssb; + this.cardlist[3].value = response.rows[0].dsf; + // this.cardlist[4].value = response.rows[0].yfs2; + this.yfsvalue = response.rows[0].yfs; + } + this.loading = false; + this.userList.forEach((item) => { + let idArray = null; + if (item.endtime) { + item.endDay = this.daysBetween(item.endtime); + } + + if (item.preachform) { + if (item.endtime) { + item.preachformson = item.preachform; + idArray = item.preachform.split(","); + } + + item.preachform = idArray.map((value) => { + // 鏌ユ壘id瀵瑰簲鐨勫璞� + const item = this.checkboxlist.find( + (item) => item.value == value + ); + // 濡傛灉鎵惧埌瀵瑰簲鐨刬d锛岃繑鍥瀕abel鍊硷紝鍚﹀垯杩斿洖null + return item ? item.label : null; + }); + } + }); + this.total = response.total; + }); + }, + affiliation() { + this.topqueryParams.drcode = store.getters.hisUserId; + this.topqueryParams.nurseId = store.getters.hisUserId; + this.topqueryParams.managementDoctor = store.getters.name; + this.getList(1); + }, + onthatday() { + this.topqueryParams.startSendDateTime = this.getCurrentDate(); + this.topqueryParams.endSendDateTime = this.getCurrentDate(); + this.getList(1); + }, + getCurrentDate() { + const now = new Date(); + return now.toISOString().slice(0, 10); // 鎴彇鍓�10涓瓧绗︼紝鍗� YYYY-MM-DD + }, + buidegetTasklist(type) { + if (this.topqueryParams.searchscope == 3) { + this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map( + (obj) => obj.deptCode + ); + this.topqueryParams.leavehospitaldistrictcodes = + store.getters.belongWards.map((obj) => obj.districtCode); + } + // 鎺ュ彈寮傚父璺宠浆 + if (this.errtype) { + this.topqueryParams.leavehospitaldistrictcodes.push( + this.leavehospitaldistrictcode + ); + } + let obj = { + pageNum: 1, + pageSize: 10, + leavehospitaldistrictcodes: + this.topqueryParams.leavehospitaldistrictcodes, + sendstates: [2, 3], + leaveldeptcodes: this.topqueryParams.leaveldeptcodes, + }; + buidegetTasklist(obj).then((response) => { + this.userList = response.rows[0].serviceSubtaskList; + this.total = response.total; + if (refresh) { + this.cardlist[0].value = + Number(response.rows[0].wzx) + Number(response.rows[0].ysf); + this.cardlist[1].value = response.rows[0].wzx; + this.cardlist[2].value = response.rows[0].ysf; + this.ycvalue = response.rows[0].yc; + this.cardlist[3].value = response.rows[0].fssb; + this.cardlist[4].value = response.rows[0].dsf; + // this.cardlist[5].value = response.rows[0].yfs2; + this.yfsvalue = response.rows[0].yfs; + } + this.loading = false; + this.userList.forEach((item) => { + let idArray = null; + if (item.endtime) { + item.endDay = this.daysBetween(item.endtime); + } + + if (item.preachform) { + if (item.endtime) { + item.preachformson = item.preachform; + idArray = item.preachform.split(","); + } + + item.preachform = idArray.map((value) => { + // 鏌ユ壘id瀵瑰簲鐨勫璞� + const item = this.checkboxlist.find( + (item) => item.value == value + ); + // 濡傛灉鎵惧埌瀵瑰簲鐨刬d锛岃繑鍥瀕abel鍊硷紝鍚﹀垯杩斿洖null + return item ? item.label : null; + }); + } + }); + this.total = response.total; + }); + }, + // 鏌ョ湅闂ㄨ瘖闅忚璇︽儏 + Referencequestion(row) { + this.previewVisible = true; + }, + // 娣诲姞寮规鎼滅储 + remoteMethod(query) { + if (query !== "") { + this.loading = true; + setTimeout(() => { + this.loading = false; + this.options = this.list.filter((item) => { + return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1; + }); + }, 200); + } else { + this.options = []; + } + }, + // 褰卞儚闅忚鐘舵�佷慨鏀� + handleStatusChange(row) { + let text = row.status === "0" ? "鍚敤" : "鍋滅敤"; + this.$modal + .confirm('纭瑕�"' + text + '""' + row.userName + '"鐢ㄦ埛鍚楋紵') + .then(function () { + return changeUserStatus(row.userId, row.status); + }) + .then(() => { + this.$modal.msgSuccess(text + "鎴愬姛"); + }) + .catch(function () { + row.status = row.status === "0" ? "1" : "0"; + }); + }, + + // 琛ㄥ崟閲嶇疆 + reset() { + this.form = { + userId: undefined, + deptId: undefined, + userName: undefined, + nickName: undefined, + password: undefined, + phonenumber: undefined, + email: undefined, + sex: undefined, + status: "0", + remark: undefined, + postIds: [], + roleIds: [], + }; + this.resetForm("form"); + }, + /** 鎼滅储鎸夐挳鎿嶄綔 */ + handleQuery(refresh) { + if (this.topqueryParams.searchscope == 3) { + this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map( + (obj) => obj.deptCode + ); + this.topqueryParams.leavehospitaldistrictcodes = + store.getters.belongWards.map((obj) => obj.districtCode); + } + this.topqueryParams.pageNum = 1; + this.topqueryParams.startOutHospTime = this.dateRange[0]; + this.topqueryParams.endOutHospTime = this.dateRange[1]; + this.topqueryParams.startSendDateTime = this.dateRangefs[0]; + this.topqueryParams.endSendDateTime = this.dateRangefs[1]; + this.getList(refresh); + }, + // 鎮h�呰寖鍥村鐞� + handleChange(value) { + let type = value[0]; + let code = value.slice(-1)[0]; + this.topqueryParams.leavehospitaldistrictcodes = []; + this.topqueryParams.leaveldeptcodes = []; + if (type == 1) { + this.topqueryParams.leaveldeptcodes.push(code); + this.topqueryParams.leavehospitaldistrictcodes = []; + this.topqueryParams.searchscope = 1; + } else if (type == 2) { + this.topqueryParams.leavehospitaldistrictcodes.push(code); + this.topqueryParams.leaveldeptcodes = []; + this.topqueryParams.searchscope = 2; + } else { + this.topqueryParams.searchscope = 3; + } + }, + /** 閲嶇疆鎸夐挳鎿嶄綔 */ + resetQuery() { + this.dateRange = []; + this.dateRangefs = []; + this.topqueryParams = { + pageNum: 1, + pageSize: 10, + sendstate: 6, + sort: 2, //0 鍑洪櫌鏃堕棿(姝e簭) 1 鍑洪櫌鏃堕棿(鍊掑簭) 2 鍙戦�佹椂闂�(姝e簭) 3 鍙戦�佹椂闂�(鍊掑簭) + serviceType: 15, + searchscope: 3, + visitCount: 1, + scopetype: [], + leaveldeptcodes: [], + leavehospitaldistrictcodes: [], + }; + this.handleQuery(1); + }, + handleSelectionChange(rows) { + this.selectedRows = rows.map((row) => { + // 鍒濆鍖栬瘎鍒嗗瓧娈� + return { + ...row, + authenticity: row.authenticity || 0, + weekFinish: row.weekFinish || 0, + standard: row.standard || 0, + timeliness: row.timeliness || 0, + library: row.library || 0, + environment: row.environment || 0, + doctorSatisfaction: row.doctorSatisfaction || 0, + nurseSatisfaction: row.nurseSatisfaction || 0, + }; + }); + + if (this.selectedRows.length > 0) { + this.multiple = false; + } else { + this.multiple = true; + } + }, + + // 璁$畻鎬诲垎 + calculateTotal(row) { + return ( + (row.authenticity || 0) + + (row.weekFinish || 0) + + (row.standard || 0) + + (row.timeliness || 0) + + (row.library || 0) + + (row.environment || 0) + + (row.doctorSatisfaction || 0) + + (row.nurseSatisfaction || 0) + ); + }, + + // 淇濆瓨璇勫垎 + saveScores() { + this.selectedRows.forEach((item) => { + item.createBy = null; + item.patName = item.sendname; + item.hospitaldistrictname = item.leavehospitaldistrictname; + }); + addsatisfaction(this.selectedRows).then((res) => { + if (res.code == 200) { + this.$message.success("璇勫垎淇濆瓨鎴愬姛"); + this.scoreDialogVisible = false; + this.selectedRows=[]; + this.$refs.userform.clearSelection() + } else { + this.$modal.msgWarning("璇勫垎淇濆瓨澶辫触"); + this.scoreDialogVisible = false; + this.selectedRows=[]; + this.$refs.userform.clearSelection() + } + }); + // 杩欓噷鍙互娣诲姞淇濆瓨閫昏緫锛屽璋冪敤API淇濆瓨璇勫垎 + }, + //鍒犻櫎閫夐」 + handleClose(tag) { + this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1); + }, + //瑙﹀彂鏂板杈撳叆 + showInput() { + this.inputVisible = true; + this.$nextTick((_) => { + this.$refs.saveTagInput.$refs.input.focus(); + }); + }, + //鑾峰彇澶卞幓鐒︾偣瑙﹀彂 + handleInputConfirm() { + let inputValue = this.inputValue; + if (inputValue) { + this.dynamicTags.push(inputValue); + } + this.inputVisible = false; + this.inputValue = ""; + }, + /** 鏂板鎸夐挳鎿嶄綔 */ + handleAdd() { + this.$router.push({ + path: "/followvisit/QuestionnaireTask", + query: { + type: 2, + serviceType: 15, + }, + }); + }, + //鎮h��360璺宠浆 + gettoken360(sfzh, drcode, drname) { + this.$modal.msgWarning('360鍔熻兘鏆傛湭寮�閫�'); + return; // 闃绘鍚庣画浠g爜鎵ц + 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鏌ヨ鏃犵粨鏋�"); + } + }); + }, + + /** 閲嶇疆瀵嗙爜鎸夐挳鎿嶄綔 */ + handleResetPwd(row) { + this.$prompt('璇疯緭鍏�"' + row.userName + '"鐨勬柊瀵嗙爜', "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + closeOnClickModal: false, + inputPattern: /^.{5,20}$/, + inputErrorMessage: "鐢ㄦ埛瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿", + }) + .then(({ value }) => { + resetUserPwd(row.userId, value).then((response) => { + this.$modal.msgSuccess("淇敼鎴愬姛锛屾柊瀵嗙爜鏄細" + value); + }); + }) + .catch(() => {}); + }, + // 鍙栨秷鎸夐挳 + cancel() { + this.Labelchange = false; + this.reset(); + }, + /** 鎻愪氦鎸夐挳 */ + submitForm: function () { + this.$refs["form"].validate((valid) => { + if (valid) { + this.form.isoperation = 2; + this.form.notrequiredFlag = 1; + alterpatient(this.form) + .then((response) => { + console.log(response); + }) + .then(() => { + this.getList(1); + this.$modal.msgSuccess("鎮h�呰繃婊ゆ垚鍔�"); + }); + + this.reset(); + this.Labelchange = false; + } + }); + }, + /** 鍒犻櫎鎸夐挳鎿嶄綔 */ + handleDelete(row) { + const userIds = row.userId || this.ids; + this.$modal + .confirm('鏄惁纭鍒犻櫎鐢ㄦ埛缂栧彿涓�"' + userIds + '"鐨勬暟鎹」锛�') + .then(function () { + return delUser(userIds); + }) + .then(() => { + this.getList(1); + this.$modal.msgSuccess("鍒犻櫎鎴愬姛"); + }) + .catch(() => {}); + }, + // 鍏ㄩ儴鍋滄 + AllStop() { + this.$modal + .confirm("鏄惁鍋滄鍏ㄩ儴浠诲姟锛�") + .then(function () { + return console.log("鍋滄鎴愬姛"); + }) + .then(() => { + this.getList(1); + this.$modal.msgWarning("鍋滄鎴愬姛"); + }) + .catch(() => {}); + }, + // 鍏ㄩ儴寮�濮� + AllStarted() { + this.$modal + .confirm("鏄惁寮�鍚叏閮ㄤ换鍔★紵") + .then(function () { + return console.log("寮�鍚垚鍔�"); + }) + .then(() => { + this.getList(1); + this.$modal.msgSuccess("寮�鍚垚鍔�"); + }) + .catch(() => {}); + }, + // 浠诲姟閲嶇疆 + TaskReset() { + this.$modal + .confirm("鏄惁閲嶇疆閫変腑鐨勪换鍔¢」锛�") + .then(function () { + return console.log("閫変腑鎴愬姛"); + }) + .then(() => { + this.getList(1); + this.$modal.msgSuccess("閲嶇疆鎴愬姛"); + }) + .catch(() => {}); + }, + // 璁剧疆鍙戦�佹椂闂� + Sendtimesetting() { + this.modificationVisible = true; + }, + // 璺宠浆璇︽儏椤� + Seedetails(row) { + let type = ""; + console.log(row, "rwo"); + if (row.preachformson) { + if (row.preachformson.includes("3")) { + type = 1; + } + } + this.$router.push({ + path: "/followvisit/record/detailpage/", + query: { + taskid: row.taskid, + patid: row.patid, + id: row.id, + Voicetype: type, + visitCount: this.topqueryParams.visitCount, + }, + }); + }, + + onSubmit() {}, + // 鏆傚仠鏈嶅姟 + handlestop(row) { + let objson = row; + this.$modal + .confirm( + '鏄惁纭鏆傚仠浠诲姟鍚嶇О涓�"' + + row.taskName + + '鎮h�呭悕绉颁负"' + + row.sendname + + '"鐨勬暟鎹」锛�' + ) + .then(() => { + getTaskservelist({ + patid: row.patid, + taskid: row.taskid, + }).then((res) => { + if (res.code == 200) { + objson.sendstate = 4; + objson.remark = "鏈嶅姟鏆傚仠"; + Editsingletaskson(objson).then((res) => { + if (res.code) { + this.$modal.msgSuccess("璁板綍鎴愬姛"); + this.getList(1); + } + }); + } + }); + }) + .catch(() => {}); + }, + // 鎮h�呰繃婊よЕ鍙� + handleUpdate(row) { + particularpatient(row.patid).then((response) => { + this.form = response.data; + this.form.filterDrname = store.getters.nickName; + }); + this.amendtag = true; + this.Labelchange = true; + }, + // 渚挎嵎鎸夐挳 + toleadExport(too) { + if (too == 1) { + this.topqueryParams.sendstate = 4; + this.topqueryParams.excep = null; + } else if (too == 2) { + this.topqueryParams.excep = 1; + } + this.handleQuery(); + }, + /** 瀵煎嚭鎸夐挳鎿嶄綔 */ + handleExport() { + this.topqueryParams.pageNum = null; + this.topqueryParams.pageSize = null; + this.download( + "smartor/serviceSubtask/patItemExport", + { + ...this.topqueryParams, + }, + `user_${new Date().getTime()}.xlsx` + ); + }, + // 寮傚父鍒楁覆鏌� + tableRowClassName({ row, rowIndex }) { + if (row.excep == 1) { + return "warning-row"; + } + return ""; + }, + + 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}`; + }, + }, +}; +</script> + +<style lang="scss" scoped> +.el-button--primary.is-plain { + color: #ffffff; + background: #409eff; + border-color: #4fabe9; +} + +.document { + // width: 100px; + height: 50px; +} +::v-deep.el-table .warning-row { + background: #eec4c4; +} + +.documentf { + display: flex; + justify-content: flex-end; +} + +.download { + text-align: center; + + .el-upload__tip { + font-size: 23px; + } + + .el-upload__text { + font-size: 23px; + } +} + +.uploading { + margin-top: 20px; + margin: 20px; + padding: 30px; + background: #ffffff; + border: 1px solid #dcdfe6; + -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), + 0 0 6px 0 rgba(0, 0, 0, 0.04); +} + +.el-tag + .el-tag { + margin-left: 10px; +} + +.button-new-tag { + margin-left: 10px; + height: 32px; + line-height: 30px; + padding-top: 0; + padding-bottom: 0; +} + +.input-new-tag { + width: 90px; + margin-left: 10px; + vertical-align: bottom; +} + +.drexamine { + display: flex; + align-items: center; + justify-content: center; + padding: 30px; + background: #daeaf5; + + img { + width: 100px; + height: 100px; + } +} + +.qrcode-dialo { + // text-align: center; + // display: flex; + margin: 20px; + padding: 30px; + background: #edf1f7; + border: 1px solid #dcdfe6; + -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), + 0 0 6px 0 rgba(0, 0, 0, 0.04); + + .topic-dev { + margin-bottom: 25px; + font-size: 20px !important; + + .dev-text { + margin-bottom: 10px; + } + } +} +::v-deep.leftvlue .el-card__body { + background: #d0e9fd; +} +::v-deep.leftvlue .el-card__body:hover { + background: #8dc8f8; + cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */ +} +::v-deep.errleftvlue .el-card__body { + background: #fdd0d7; +} +::v-deep.errleftvlue .el-card__body:hover { + background: #f88d96; + cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */ +} + +::v-deep.ysfleftvlue .el-card__body { + background: #d0fdd8; +} +::v-deep.ysfleftvlue .el-card__body:hover { + background: #8df8a4; + cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */ +} +.button-bb { + font-weight: 500; + background-color: #2ba05c; + padding: 5px; + border-radius: 1px; + color: #ffffff; +} +.button-xq { + font-weight: 500; + background-color: #409eff; + padding: 5px; + border-radius: 1px; + color: #ffffff; +} +.button-sc { + font-weight: 500; + background-color: #b3a21f; + padding: 5px; + border-radius: 1px; + color: #ffffff; +} +.button-zx { + background: #4fabe9; + padding: 5px; + border-radius: 1px; + color: #ffffff; +} + +::v-deep.el-radio-group { + span { + font-size: 24px; + } +} +.purple-button { + background-color: #7e22ce; + border-color: #7e22ce; + color: #fff; +} + +.purple-button:hover, +.purple-button:focus { + background-color: #9333ea; + border-color: #9333ea; +} + +.purple-button:active { + background-color: #6b21a8; + border-color: #6b21a8; +} + +.purple-button.is-disabled { + background-color: #d8b4fe; + border-color: #d8b4fe; + opacity: 1; /* 淇濇寔绂佺敤鐘舵�侀�忔槑搴� */ +} +// 閫夐」瀛椾綋鏀惧ぇ +// ::v-deep.el-checkbox-group { +// span { +// font-size: 24px; +// } +// } +</style> diff --git a/src/views/followvisit/discharge/index.vue b/src/views/followvisit/discharge/index.vue index 23cfc3a..38d9555 100644 --- a/src/views/followvisit/discharge/index.vue +++ b/src/views/followvisit/discharge/index.vue @@ -1408,9 +1408,8 @@ }); }, affiliation() { - this.topqueryParams.drcode = store.getters.hisUserId; - this.topqueryParams.nurseId = store.getters.hisUserId; - this.topqueryParams.managementDoctor = store.getters.name; + + this.topqueryParams.managementDoctor = store.getters.hisUserId; this.getList(1); }, onthatday() { diff --git a/src/views/followvisit/discharge/outpatientService.vue b/src/views/followvisit/discharge/outpatientService.vue index bdbf87b..f398f76 100644 --- a/src/views/followvisit/discharge/outpatientService.vue +++ b/src/views/followvisit/discharge/outpatientService.vue @@ -1181,8 +1181,9 @@ }); }, affiliation() { - this.topqueryParams.drcode = store.getters.hisUserId; - this.topqueryParams.nurseId = store.getters.hisUserId; + + this.topqueryParams.managementDoctor = store.getters.hisUserId; + this.getList(1); }, onthatday() { diff --git a/src/views/followvisit/mzsatisfaction/index.vue b/src/views/followvisit/mzsatisfaction/index.vue new file mode 100644 index 0000000..3f13a5c --- /dev/null +++ b/src/views/followvisit/mzsatisfaction/index.vue @@ -0,0 +1,1972 @@ +<template> + <div class="app-container"> + <div class="leftvlue" style="margin-bottom: 20px"> + <el-row :gutter="10"> + <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index"> + <el-card + shadow="hover" + :body-style="item.router ? ' cursor: pointer' : 'cursor: default'" + > + <div style="padding: 8px" @click="$router.push(item.router)"> + <span>{{ item.name }}</span> + <div + style=" + text-align: center; + font-size: 18px; + margin-top: 10px; + font-weight: 600; + " + > + {{ item.value ? item.value : 0 }} + </div> + </div> + </el-card> + </el-col> + <el-col :span="2.5"> + <div class="ysfleftvlue"> + <el-card shadow="hover"> + <div style="padding: 8px"> + <span>琛ㄥ崟宸插彂閫�</span> + <div + style=" + text-align: center; + font-size: 18px; + margin-top: 10px; + font-weight: 600; + " + > + {{ yfsvalue }} + </div> + </div> + </el-card> + </div> + </el-col> + <el-col :span="2.5"> + <div class="errleftvlue"> + <el-card shadow="hover"> + <div style="padding: 8px"> + <span>寮傚父</span> + <div + style=" + text-align: center; + font-size: 18px; + margin-top: 10px; + font-weight: 600; + " + > + {{ ycvalue }} + </div> + </div> + </el-card> + </div> + </el-col> + </el-row> + </div> + <el-row :gutter="20"> + <!--鐢ㄦ埛鏁版嵁--> + <el-form + :model="topqueryParams" + ref="queryForm" + size="small" + :inline="true" + v-show="showSearch" + label-width="98px" + > + <el-form-item label="浠诲姟鍚嶇О"> + <el-input + v-model="topqueryParams.taskName" + placeholder="璇烽�夋嫨浠诲姟鍚嶇О" + ></el-input> + </el-form-item> + + <el-form-item label="鍑洪櫌鏃堕棿"> + <el-date-picker + v-model="dateRange" + style="width: 240px" + value-format="yyyy-MM-dd" + type="daterange" + range-separator="-" + start-placeholder="寮�濮嬫棩鏈�" + end-placeholder="缁撴潫鏃ユ湡" + ></el-date-picker> + </el-form-item> + + <el-form-item label="鎮h�呭鍚�" prop="sendname"> + <el-input + v-model="topqueryParams.sendname" + placeholder="璇疯緭鍏ユ偅鑰呭鍚�" + ></el-input> + </el-form-item> + <el-form-item label="璇婃柇鍚嶇О" prop="leavediagname"> + <el-input + v-model="topqueryParams.leavediagname" + placeholder="璇疯緭鍏ヨ瘖鏂悕绉�" + ></el-input> + </el-form-item> + <el-form-item label="闅忚浜哄憳" prop="updateBy"> + <el-input + v-model="topqueryParams.updateBy" + placeholder="璇疯緭鍏ラ殢璁夸汉鍛�" + ></el-input> + </el-form-item> + <el-form-item label="涓绘不鍖荤敓" prop="drname"> + <el-input + v-model="topqueryParams.drname" + placeholder="璇疯緭鍏ヤ富娌诲尰鐢�" + ></el-input> + </el-form-item> + <el-form-item label="缁忕鍖荤敓" prop="managementDoctor"> + <el-input + v-model="topqueryParams.managementDoctor" + placeholder="璇疯緭鍏ヤ富娌诲尰鐢�" + ></el-input> + </el-form-item> + + <el-form-item label="鎮h�呰寖鍥�" prop="status"> + <el-cascader + v-model="topqueryParams.scopetype" + placeholder="榛樿鍏ㄩ儴" + :options="sourcetype" + :props="{ expandTrigger: 'hover' }" + @change="handleChange" + ></el-cascader> + </el-form-item> + + <el-form-item label="浠诲姟鐘舵��" prop="status"> + <el-select v-model="topqueryParams.sendstate" placeholder="璇烽�夋嫨"> + <el-option + v-for="item in topicoptions" + :key="item.value" + :label="item.label" + :value="item.value" + > + </el-option> + </el-select> + </el-form-item> + <el-form-item label="鎺掑簭鏂瑰紡" prop="status"> + <el-select v-model="topqueryParams.sort" placeholder="璇烽�夋嫨"> + <el-option + v-for="item in topicoptionssort" + :key="item.value" + :label="item.label" + :value="item.value" + > + </el-option> + </el-select> + </el-form-item> + + <el-form-item> + <el-button + type="primary" + icon="el-icon-search" + size="medium" + @click="handleQuery(1)" + >鎼滅储</el-button + > + <el-button icon="el-icon-refresh" size="medium" @click="resetQuery" + >閲嶇疆</el-button + > + </el-form-item> + </el-form> + <el-divider></el-divider> + <el-row :gutter="10" class="mb8"> + <el-col :span="1.5"> + <div class="documentf"> + <div class="document"> + <el-button + type="warning" + plain + icon="el-icon-upload2" + size="medium" + @click="handleExport" + >瀵煎嚭</el-button + > + </div> + </div> + </el-col> + <el-col :span="1.5"> + <el-button + type="primary" + plain + icon="el-icon-plus" + size="medium" + @click="handleAdd" + >鏂板</el-button + > + </el-col> + + <el-col :span="1.5"> + <div class="documentf"> + <div class="document"> + <el-button + type="warning" + plain + icon="el-icon-warning-outline" + size="medium" + @click="toleadExport(1)" + >鎵ц澶辫触</el-button + > + </div> + </div> + </el-col> + <el-col :span="1.5"> + <div class="documentf"> + <div class="document"> + <el-button + type="danger" + plain + icon="el-icon-warning" + size="medium" + @click="toleadExport(2)" + >缁撴灉寮傚父</el-button + > + </div> + </div> + </el-col> + <el-col :span="1.5"> + <div class="documentf"> + <div class="document"> + <el-button + type="success" + plain + size="medium" + @click="buidegetTasklist()" + >寰呭姙鏈嶅姟</el-button + > + </div> + </div> + </el-col> + <el-col :span="1.5"> + <div class="documentf"> + <div class="document"> + <el-button + type="primary" + plain + size="medium" + @click="affiliation()" + >鏈汉鎵�灞炴湇鍔�</el-button + > + </div> + </div> + </el-col> + <el-col :span="1.5"> + <div class="documentf"> + <div class="document"> + <el-button type="success" size="medium" @click="onthatday()" + >褰撴棩鏈嶅姟</el-button + > + </div> + </div> + </el-col> + + </el-row> + <el-table + v-loading="loading" + ref="userform" + :data="userList" + :row-class-name="tableRowClassName" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="50" align="center" /> + <el-table-column + label="浠诲姟鍚嶇О" + fixed + width="150" + show-overflow-tooltip + align="center" + key="taskName" + prop="taskName" + /> + <!-- <el-table-column label="搴忓彿" fixed align="center" key="id" prop="id" /> --> + <el-table-column + label="濮撳悕" + width="100" + align="center" + key="sendname" + prop="sendname" + > + <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 + label="浠诲姟鐘舵��" + align="center" + key="sendstate" + prop="sendstate" + width="120" + > + <template slot-scope="scope"> + <el-tooltip + class="item" + effect="dark" + :content="scope.row.remark" + placement="top-start" + > + <div v-if="scope.row.sendstate == 1"> + <el-tag type="primary" :disable-transitions="false" + >琛ㄥ崟宸查鍙�</el-tag + > + </div> + <div v-if="scope.row.sendstate == 2"> + <el-tag type="primary" :disable-transitions="false" + >寰呴殢璁�</el-tag + > + </div> + <div v-if="scope.row.sendstate == 3"> + <el-tag type="success" :disable-transitions="false" + >琛ㄥ崟宸插彂閫�</el-tag + > + </div> + <div v-if="scope.row.sendstate == 4"> + <el-tag type="info" :disable-transitions="false">涓嶆墽琛�</el-tag> + </div> + <div v-if="scope.row.sendstate == 5"> + <el-tag type="danger" :disable-transitions="false" + >鍙戦�佸け璐�</el-tag + > + </div> + <div v-if="scope.row.sendstate == 6"> + <el-tag type="success" :disable-transitions="false" + >宸插畬鎴�</el-tag + > + </div> + </el-tooltip> + </template> + </el-table-column> + <!-- <el-table-column + label="浠诲姟寮傚父璇存槑" + width="120" + align="center" + key="remark" + prop="remark" --> + /> + + <el-table-column + label="澶勭悊鎰忚" + align="center" + key="suggest" + prop="suggest" + width="120" + > + <template slot-scope="scope"> + <dict-tag + :options="dict.type.sys_suggest" + :value="scope.row.suggest" + /> + </template> + </el-table-column> + + <el-table-column + label="闅忚瀹屾垚鏃堕棿" + sortable + align="center" + prop="finishtime" + width="160" + > + <template slot-scope="scope"> + <span>{{ parseTime(scope.row.finishtime) }}</span> + </template> + </el-table-column> + <el-table-column + label="鍑洪櫌鏃ユ湡" + width="200" + align="center" + key="endtime" + prop="endtime" + > + <template slot-scope="scope"> + <span>{{ formatTime(scope.row.endtime) }}</span> + </template></el-table-column + > + <el-table-column + label="涓绘不鍖荤敓" + width="120" + align="center" + key="drname" + prop="drname" + /> + <el-table-column + label="闅忚浜哄憳" + align="center" + key="updateBy" + prop="updateBy" + width="120" + /> + <el-table-column + label="缁忕鍖荤敓" + align="center" + key="managementDoctor" + prop="managementDoctor" + width="120" + /> + <el-table-column + label="鍑洪櫌澶╂暟" + width="120" + align="center" + key="endDay" + prop="endDay" + > + <template slot-scope="scope"> + <span>{{ scope.row.endDay ? scope.row.endDay + "澶�" : "" }}</span> + </template> + </el-table-column> + <el-table-column + label="韬唤璇佸彿鐮�" + width="200" + align="center" + key="sfzh" + prop="sfzh" + /> + <el-table-column + label="鑱旂郴鐢佃瘽" + width="200" + align="center" + key="phone" + prop="phone" + /> + <el-table-column + label="璐d换鎶ゅ+" + width="120" + align="center" + key="nurseName" + prop="nurseName" + /> + + <!-- <el-table-column + label="鐥呭巻鍙�" + align="center" + sortable + key="medicalRecordNo" + prop="medicalRecordNo" + width="120" + /> --> + + <!-- <el-table-column label="骞撮緞" align="center" key="age" prop="age" /> --> + <!-- <el-table-column label="鎬у埆"width="100" align="center" key="sex" prop="sex" /> --> + <!-- <el-table-column label="搴婂彿" align="center" key="badNo" prop="badNo" /> --> + <el-table-column + label="绉戝" + align="center" + key="deptname" + prop="deptname" + width="120" + > + </el-table-column> + <el-table-column + label="鐥呭尯" + align="center" + key="leavehospitaldistrictname" + prop="leavehospitaldistrictname" + width="120" + > + </el-table-column> + + <el-table-column + label="璇婃柇鍚嶇О" + align="center" + key="leavediagname" + prop="leavediagname" + width="120" + :show-overflow-tooltip="true" + > + </el-table-column> + + <el-table-column + label="闂ㄨ瘖婊℃剰搴︽ā鏉垮悕绉�" + align="center" + key="templatename" + prop="templatename" + width="200" + /> + <el-table-column + label="浠诲姟鎵ц鏂瑰紡" + align="center" + key="preachform" + prop="preachform" + width="160" + :show-overflow-tooltip="true" + > + <template slot-scope="scope"> + <span v-for="item in scope.row.preachform">{{ item }}銆� </span> + </template> + </el-table-column> + <!-- <el-table-column + label="浠诲姟鍙戦�佹祦绋�" + align="center" + key="serviceSubtaskRecordList" + prop="serviceSubtaskRecordList" + width="160" + :show-overflow-tooltip="true" + > + <template slot-scope="scope"> + <span v-for="item in scope.row.serviceSubtaskRecordList" + >{{ item.remark }}銆� + </span> + </template> + </el-table-column> --> + <el-table-column + label="浠诲姟缁撴灉璇存槑" + width="220" + align="center" + key="remark" + prop="remark" + > + <template slot-scope="scope" v-if="scope.row.remark"> + <el-tooltip + :content="scope.row.remark" + placement="top" + effect="dark" + > + <el-tag + type="warning" + v-if="scope.row.sendstate != 5 && scope.row.sendstate != 4" + >{{ scope.row.remark }}</el-tag + > + <el-tag type="warning" v-else>{{ scope.row.remark }}</el-tag> + </el-tooltip> + </template> + </el-table-column> + <el-table-column + label="鎿嶄綔" + align="center" + fixed="right" + width="300" + class-name="small-padding fixed-width" + > + <template slot-scope="scope"> + <el-button size="medium" type="text" @click="Seedetails(scope.row)" + ><span class="button-zx" + ><i class="el-icon-s-order"></i>鏌ョ湅璇︽儏</span + ></el-button + > + <el-button + size="medium" + type="text" + @click="handleUpdate(scope.row)" + ><span class="button-textxga" + ><i class="el-icon-edit"></i>鎮h�呰繃婊�</span + ></el-button + > + </template> + </el-table-column> + </el-table> + + <pagination + v-show="total > 0" + :total="total" + :page.sync="topqueryParams.pageNum" + :limit.sync="topqueryParams.pageSize" + @pagination="getList" + /> + </el-row> + <!-- 婊℃剰搴﹀脊妗� --> + <el-dialog + title="闅忚婊℃剰搴﹁瘎鍒�" + :visible.sync="scoreDialogVisible" + width="80%" + :close-on-click-modal="false" + > + <el-table :data="selectedRows" border style="width: 100%"> + <el-table-column + label="濮撳悕" + width="100" + align="center" + prop="sendname" + /> + <el-table-column + label="浠诲姟鍚嶇О" + width="180" + align="center" + prop="taskName" + /> + <!-- 鏂板璇勫垎鍒� --> + <el-table-column + label="鐪熷疄鎬�(20)" + align="center" + key="authenticity" + prop="authenticity" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.authenticity" + :min="0" + :max="20" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="涓�鍛ㄥ唴瀹屾垚(20)" + align="center" + key="weekFinish" + prop="weekFinish" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.weekFinish" + :min="0" + :max="20" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="瑙勮寖鎬�(10)" + align="center" + key="standard" + prop="standard" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.standard" + :min="0" + :max="10" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="鍙婃椂鎬�(10)" + align="center" + key="timeliness" + prop="timeliness" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.timeliness" + :min="0" + :max="10" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="瀹f暀鎯呭喌(10)" + align="center" + key="library" + prop="library" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.library" + :min="0" + :max="10" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="鐜婊℃剰搴�(10)" + align="center" + key="environment" + prop="environment" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.environment" + :min="0" + :max="10" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="鍖荤敓婊℃剰搴�(10)" + align="center" + key="doctorSatisfaction" + prop="doctorSatisfaction" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.doctorSatisfaction" + :min="0" + :max="10" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="鎶ゅ+婊℃剰搴�(10)" + align="center" + key="nurseSatisfaction" + prop="nurseSatisfaction" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.nurseSatisfaction" + :min="0" + :max="10" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="鎬诲垎" + align="center" + key="total" + prop="total" + fixed="right" + > + <template slot-scope="scope"> + <span>{{ calculateTotal(scope.row) }}</span> + </template> + </el-table-column> + </el-table> + + <div slot="footer" class="dialog-footer"> + <el-button @click="scoreDialogVisible = false">鍙栨秷</el-button> + <el-button type="primary" @click="saveScores">淇濆瓨</el-button> + </div> + </el-dialog> + <!-- 娣诲姞鎴栦慨鏀瑰奖鍍忛殢璁垮璇濇 --> + <el-dialog + :title="amendtag ? '淇敼鎮h�呬俊鎭�' : '鏂板鎮h��'" + :visible.sync="Labelchange" + width="900px" + > + <el-form ref="form" :model="form" :rules="rules" label-width="100px"> + <el-row> + <el-col :span="8"> + <el-form-item label="濮撳悕" width="100" prop="name"> + <el-input + v-model="form.name" + placeholder="璇疯緭鍏ュ鍚�" + maxlength="30" + /> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="鎬у埆" width="100" prop="sex"> + <el-select v-model="form.sex" placeholder="璇烽�夋嫨鎬у埆"> + <el-option + v-for="dict in sextype" + :key="dict.value" + :label="dict.label" + :value="dict.value" + ></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="骞撮緞" prop="age"> + <el-input + v-model="form.age" + placeholder="璇疯緭鍏ュ勾榫�" + maxlength="30" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="杩囨护鍖荤敓" width="100" prop="filterDrname"> + <el-input + v-model="form.filterDrname" + placeholder="璇疯緭鍏ュ尰鐢熷鍚�" + maxlength="30" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="杩囨护鍘熷洜"> + <el-input + v-model="form.notrequiredreason" + type="textarea" + placeholder="璇疯緭鍏ヨ繃婊ゅ師鍥�" + ></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button type="primary" @click="submitForm">纭� 瀹�</el-button> + <el-button @click="cancel">鍙� 娑�</el-button> + </div> + </el-dialog> + <!-- 淇敼鍙戦�佹椂闂村璇濇 --> + <el-dialog + title="鍙戦�佹椂闂磋缃�" + :visible.sync="modificationVisible" + width="45%" + > + <div style="margin-bottom: 20px; color: red"> + 缁熶竴淇敼褰撳ぉ鏈彂閫佺殑浠诲姟鏃堕棿 + </div> + + <el-form + :model="ruleForm" + :rules="rules" + ref="ruleForm" + label-width="120px" + class="demo-ruleForm" + > + <el-form-item label="鍙戦�佹棩鏈�"> + <el-date-picker + v-model="ruleForm.value1" + type="date" + placeholder="閫夋嫨鏃ユ湡" + > + </el-date-picker> + </el-form-item> + + <el-form-item label="鏃堕棿娈�" prop="type"> + <el-checkbox-group v-model="ruleForm.type"> + <el-checkbox label="涓婂崍" name="type"></el-checkbox> + <el-checkbox label="涓嬪崍" name="type"></el-checkbox> + <el-checkbox label="鏅氫笂" name="type"></el-checkbox> + </el-checkbox-group> + </el-form-item> + <el-form-item label="涓婂崍鏃堕棿鍖洪棿" required> + <el-time-picker + is-range + v-model="ruleForm.value2" + range-separator="鑷�" + start-placeholder="寮�濮嬫椂闂�" + end-placeholder="缁撴潫鏃堕棿" + placeholder="閫夋嫨鏃堕棿鑼冨洿" + > + </el-time-picker> + </el-form-item> + <el-form-item label="涓嬪崍鏃堕棿鍖洪棿" required> + <el-time-picker + is-range + v-model="ruleForm.value3" + range-separator="鑷�" + start-placeholder="寮�濮嬫椂闂�" + end-placeholder="缁撴潫鏃堕棿" + placeholder="閫夋嫨鏃堕棿鑼冨洿" + > + </el-time-picker> + </el-form-item> + <el-form-item label="鏅氫笂鏃堕棿鍖洪棿" required> + <el-time-picker + is-range + v-model="ruleForm.value4" + range-separator="鑷�" + start-placeholder="寮�濮嬫椂闂�" + end-placeholder="缁撴潫鏃堕棿" + placeholder="閫夋嫨鏃堕棿鑼冨洿" + > + </el-time-picker> + </el-form-item> + </el-form> + + <span slot="footer" class="dialog-footer"> + <el-button @click="modificationVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="modificationVisible = false" + >纭� 瀹�</el-button + > + </span> + </el-dialog> + <!-- 鍐嶆闅忚 --> + <el-dialog title="鎮h�呭啀娆¢殢璁�" :visible.sync="dialogFormVisible"> + <el-form ref="zcform" :rules="zcrules" :model="zcform" label-width="80px"> + <el-form-item label="浠诲姟鍚嶇О"> + <el-input + style="width: 400px" + disabled + v-model="zcform.taskName" + ></el-input> + </el-form-item> + <el-form-item label="鎮h�呭悕绉�"> + <el-input + style="width: 400px" + disabled + v-model="zcform.sendname" + ></el-input> + </el-form-item> + <el-form-item label="骞撮緞"> + <el-input + style="width: 400px" + disabled + v-model="zcform.age" + ></el-input> + </el-form-item> + <el-form-item label="绉戝"> + <el-input + style="width: 400px" + disabled + v-model="zcform.deptname" + ></el-input> + </el-form-item> + <el-form-item label="鐥呭尯"> + <el-input + style="width: 400px" + disabled + v-model="zcform.leavehospitaldistrictname" + ></el-input> + </el-form-item> + + <el-form-item label="闅忚鏂瑰紡" prop="resource"> + <el-radio-group v-model="zcform.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-input + style="width: 400px" + disabled + v-model="zcform.endtime" + ></el-input> + </el-form-item> + <el-form-item label="闅忚瀹屾垚鏃堕棿" prop="date1"> + <el-date-picker + type="date" + placeholder="閫夋嫨鏃ユ湡" + v-model="zcform.date1" + style="width: 100%" + ></el-date-picker> + </el-form-item> + <el-form-item label="闅忚璁板綍"> + <el-input type="textarea" v-model="zcform.remark"></el-input> + </el-form-item> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button @click="dialogFormVisible = false">鍙� 娑�</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> +import { + delUser, + addUser, + updateUser, + resetUserPwd, + changeUserStatus, +} from "@/api/system/user"; +import { + getTaskservelist, + buidegetTasklist, + addserviceSubtask, + query360PatInfo, + addsatisfaction, +} from "@/api/AiCentre/index"; +import { alterpatient, particularpatient } from "@/api/patient/homepage"; +import Treeselect from "@riophae/vue-treeselect"; +import store from "@/store"; +import "@riophae/vue-treeselect/dist/vue-treeselect.css"; + +export default { + name: "Discharge", + dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], + components: { Treeselect }, + data() { + return { + // 閬僵灞� + loading: true, + // 閫変腑鏁扮粍 + ids: [], + // 闈炲崟涓鐢� + single: true, + // 闈炲涓鐢� + multiple: true, + // 鏄剧ず鎼滅储鏉′欢 + showSearch: true, + dialogFormVisible: false, + // 鎬绘潯鏁� + total: 0, + // 鐢ㄦ埛琛ㄦ牸鏁版嵁 + userList: null, + // 寮瑰嚭灞傛爣棰� + title: "鏂板褰卞儚闅忚", + // 鏄惁鏄剧ず淇敼銆佹坊鍔犲脊鍑哄眰 + addalteropen: false, + // 淇敼鍙戦�佹椂闂村璇濇 + modificationVisible: false, + // 閮ㄩ棬鍚嶇О + deptName: undefined, + // 榛樿瀵嗙爜 + initPassword: undefined, + // 鏃ユ湡鑼冨洿 + dateRange: [], + dateRangefs: [], + // 宀椾綅閫夐」 + postOptions: [], + ruleForm: { + type: [], + }, + zcform: {}, + dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」 + inputVisible: false, + Labelchange: false, + ycvalue: "", + yfsvalue: "", + inputValue: "", + preachform: "", + previewVisible: false, //褰卞儚闅忚棰勮寮规 + radio: "", + radios: [], + previewtype: 2, //棰勮褰卞儚闅忚绫诲瀷 + total: 0, // 鎬绘潯鏁� + // 婊℃剰搴﹁皟鏌ユ暟鎹� + scoreDialogVisible: false, + selectedRows: [], + + value: [], + list: [], + + sourcetype: [ + { + value: 1, + label: "绉戝", + children: [], + }, + { + value: 2, + label: "鐥呭尯", + children: [], + }, + { + value: 3, + label: "鍏ㄩ儴", + }, + ], + loading: false, + cardlist: [ + { + name: "鏈嶅姟鎬婚噺", + value: 0, + }, + // { + // name: "鎮h�呰繃婊�", + // value: 0, + // }, + { + name: "搴旈殢璁�", + value: 0, + }, + { + name: "鍙戦�佸け璐�", + value: 0, + }, + { + name: "寰呴殢璁�", + value: 0, + }, + // { + // name: "宸插彂閫�", + // value: 0, + // }, + + // { + // name: "琛ㄥ崟宸插彂閫�", + // value: 0, + // }, + ], + zcrules: { + date1: [ + { required: true, message: "璇烽�夋嫨闅忚鏂瑰紡", trigger: "change" }, + ], + resource: [ + { required: true, message: "璇烽�夋嫨闅忚鏃堕棿", trigger: "blur" }, + ], + }, + // 琛ㄥ崟鍙傛暟 + form: { + phonenumber: "", + totagid: "", + types: "", + nickName: "", + qystatus: "", + btstatus: "", + }, + topicoptionssort: [ + { + value: 0, + label: "鍑洪櫌鏃堕棿(姝e簭)", + }, + { + value: 1, + label: "鍑洪櫌鏃堕棿(鍊掑簭)", + }, + { + value: 2, + label: "鍙戦�佹椂闂�(姝e簭)", + }, + { + value: 3, + label: "鍙戦�佹椂闂�(鍊掑簭)", + }, + ], + // 鏌ヨ鍙傛暟 + topqueryParams: { + pageNum: 1, + pageSize: 10, + sendstate: 6, + sort: 2, //0 鍑洪櫌鏃堕棿(姝e簭) 1 鍑洪櫌鏃堕棿(鍊掑簭) 2 鍙戦�佹椂闂�(姝e簭) 3 鍙戦�佹椂闂�(鍊掑簭) + serviceType: 14, + searchscope: 3, + visitCount: 1, + scopetype: [], + leaveldeptcodes: [], + leavehospitaldistrictcodes: [], + }, + propss: { multiple: true }, + options: [], + + topicoptions: [ + { + value: null, + label: "鍏ㄩ儴", + }, + { + value: 1, + label: "琛ㄥ崟宸查鍙�", + }, + { + value: 2, + label: "寰呴殢璁�", + }, + { + value: 3, + label: "琛ㄥ崟宸插彂閫�", + }, + { + value: 4, + label: "涓嶆墽琛�", + }, + { + value: 5, + label: "鍙戦�佸け璐�", + }, + { + value: 6, + label: "宸插畬鎴�", + }, + ], + sextype: [ + { + value: 1, + label: "鐢�", + }, + { + value: 2, + label: "濂�", + }, + ], + topicoptionsyj: [ + { + value: 1, + label: "寮傚父", + }, + { + value: 0, + label: "姝e父", + }, + ], + 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", + }, + }, + }, + amendtag: false, + errtype: "", + leavehospitaldistrictcode: "", + serviceState: [], + checkboxlist: [], + // 琛ㄥ崟鏍¢獙 + rules: {}, + }; + }, + watch: {}, + created() { + this.serviceState = store.getters.serviceState; + this.checkboxlist = store.getters.checkboxlist; + this.errtype = this.$route.query.errtype; + this.leavehospitaldistrictcode = + this.$route.query.leavehospitaldistrictcode; + this.sourcetype[0].children = store.getters.belongDepts.map((dept) => { + return { + label: dept.deptName, + value: dept.deptCode, + }; + }); + this.sourcetype[1].children = store.getters.belongWards.map((dept) => { + return { + label: dept.districtName, + value: dept.districtCode, + }; + }); + if (this.errtype) { + this.toleadExport(2); + } else { + this.getList(1); + } + this.getConfigKey("sys.user.initPassword").then((response) => { + this.initPassword = response.msg; + }); + }, + activated() { + this.getList(1); + }, + methods: { + /** 鏌ヨ闅忚鏈嶅姟鍒楄〃 */ + getList(refresh) { + // 榛樿鍏ㄩ儴 + + if (this.topqueryParams.searchscope == 3) { + this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map( + (obj) => obj.deptCode + ); + this.topqueryParams.leavehospitaldistrictcodes = + store.getters.belongWards.map((obj) => obj.districtCode); + } + // 鎺ュ彈寮傚父璺宠浆 + if (this.errtype) { + this.topqueryParams.leavehospitaldistrictcodes.push( + this.leavehospitaldistrictcode + ); + console.log(this.topqueryParams.leavehospitaldistrictcodes, "11"); + } + this.loading = true; + if ( + this.topqueryParams.leavehospitaldistrictcodes[0] && + this.topqueryParams.leaveldeptcodes[0] + ) { + this.topqueryParams.deptOrDistrict = 2; + } else { + this.topqueryParams.deptOrDistrict = 1; + } + getTaskservelist(this.topqueryParams).then((response) => { + this.userList = response.rows[0].serviceSubtaskList; + this.total = response.total; + if (refresh) { + this.cardlist[0].value = + Number(response.rows[0].wzx) + Number(response.rows[0].ysf); + // this.cardlist[1].value = response.rows[0].wzx; + this.cardlist[1].value = response.rows[0].ysf; + this.ycvalue = response.rows[0].yc; + this.cardlist[2].value = response.rows[0].fssb; + this.cardlist[3].value = response.rows[0].dsf; + // this.cardlist[4].value = response.rows[0].yfs2; + this.yfsvalue = response.rows[0].yfs; + } + this.loading = false; + this.userList.forEach((item) => { + let idArray = null; + if (item.endtime) { + item.endDay = this.daysBetween(item.endtime); + } + + if (item.preachform) { + if (item.endtime) { + item.preachformson = item.preachform; + idArray = item.preachform.split(","); + } + + item.preachform = idArray.map((value) => { + // 鏌ユ壘id瀵瑰簲鐨勫璞� + const item = this.checkboxlist.find( + (item) => item.value == value + ); + // 濡傛灉鎵惧埌瀵瑰簲鐨刬d锛岃繑鍥瀕abel鍊硷紝鍚﹀垯杩斿洖null + return item ? item.label : null; + }); + } + }); + this.total = response.total; + }); + }, + affiliation() { + this.topqueryParams.drcode = store.getters.hisUserId; + this.topqueryParams.nurseId = store.getters.hisUserId; + this.topqueryParams.managementDoctor = store.getters.name; + this.getList(1); + }, + onthatday() { + this.topqueryParams.startSendDateTime = this.getCurrentDate(); + this.topqueryParams.endSendDateTime = this.getCurrentDate(); + this.getList(1); + }, + getCurrentDate() { + const now = new Date(); + return now.toISOString().slice(0, 10); // 鎴彇鍓�10涓瓧绗︼紝鍗� YYYY-MM-DD + }, + buidegetTasklist(type) { + if (this.topqueryParams.searchscope == 3) { + this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map( + (obj) => obj.deptCode + ); + this.topqueryParams.leavehospitaldistrictcodes = + store.getters.belongWards.map((obj) => obj.districtCode); + } + // 鎺ュ彈寮傚父璺宠浆 + if (this.errtype) { + this.topqueryParams.leavehospitaldistrictcodes.push( + this.leavehospitaldistrictcode + ); + } + let obj = { + pageNum: 1, + pageSize: 10, + leavehospitaldistrictcodes: + this.topqueryParams.leavehospitaldistrictcodes, + sendstates: [2, 3], + leaveldeptcodes: this.topqueryParams.leaveldeptcodes, + }; + buidegetTasklist(obj).then((response) => { + this.userList = response.rows[0].serviceSubtaskList; + this.total = response.total; + if (refresh) { + this.cardlist[0].value = + Number(response.rows[0].wzx) + Number(response.rows[0].ysf); + this.cardlist[1].value = response.rows[0].wzx; + this.cardlist[2].value = response.rows[0].ysf; + this.ycvalue = response.rows[0].yc; + this.cardlist[3].value = response.rows[0].fssb; + this.cardlist[4].value = response.rows[0].dsf; + // this.cardlist[5].value = response.rows[0].yfs2; + this.yfsvalue = response.rows[0].yfs; + } + this.loading = false; + this.userList.forEach((item) => { + let idArray = null; + if (item.endtime) { + item.endDay = this.daysBetween(item.endtime); + } + + if (item.preachform) { + if (item.endtime) { + item.preachformson = item.preachform; + idArray = item.preachform.split(","); + } + + item.preachform = idArray.map((value) => { + // 鏌ユ壘id瀵瑰簲鐨勫璞� + const item = this.checkboxlist.find( + (item) => item.value == value + ); + // 濡傛灉鎵惧埌瀵瑰簲鐨刬d锛岃繑鍥瀕abel鍊硷紝鍚﹀垯杩斿洖null + return item ? item.label : null; + }); + } + }); + this.total = response.total; + }); + }, + // 鏌ョ湅闂ㄨ瘖闅忚璇︽儏 + Referencequestion(row) { + this.previewVisible = true; + }, + // 娣诲姞寮规鎼滅储 + remoteMethod(query) { + if (query !== "") { + this.loading = true; + setTimeout(() => { + this.loading = false; + this.options = this.list.filter((item) => { + return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1; + }); + }, 200); + } else { + this.options = []; + } + }, + // 褰卞儚闅忚鐘舵�佷慨鏀� + handleStatusChange(row) { + let text = row.status === "0" ? "鍚敤" : "鍋滅敤"; + this.$modal + .confirm('纭瑕�"' + text + '""' + row.userName + '"鐢ㄦ埛鍚楋紵') + .then(function () { + return changeUserStatus(row.userId, row.status); + }) + .then(() => { + this.$modal.msgSuccess(text + "鎴愬姛"); + }) + .catch(function () { + row.status = row.status === "0" ? "1" : "0"; + }); + }, + + // 琛ㄥ崟閲嶇疆 + reset() { + this.form = { + userId: undefined, + deptId: undefined, + userName: undefined, + nickName: undefined, + password: undefined, + phonenumber: undefined, + email: undefined, + sex: undefined, + status: "0", + remark: undefined, + postIds: [], + roleIds: [], + }; + this.resetForm("form"); + }, + /** 鎼滅储鎸夐挳鎿嶄綔 */ + handleQuery(refresh) { + if (this.topqueryParams.searchscope == 3) { + this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map( + (obj) => obj.deptCode + ); + this.topqueryParams.leavehospitaldistrictcodes = + store.getters.belongWards.map((obj) => obj.districtCode); + } + this.topqueryParams.pageNum = 1; + this.topqueryParams.startOutHospTime = this.dateRange[0]; + this.topqueryParams.endOutHospTime = this.dateRange[1]; + this.topqueryParams.startSendDateTime = this.dateRangefs[0]; + this.topqueryParams.endSendDateTime = this.dateRangefs[1]; + this.getList(refresh); + }, + // 鎮h�呰寖鍥村鐞� + handleChange(value) { + let type = value[0]; + let code = value.slice(-1)[0]; + this.topqueryParams.leavehospitaldistrictcodes = []; + this.topqueryParams.leaveldeptcodes = []; + if (type == 1) { + this.topqueryParams.leaveldeptcodes.push(code); + this.topqueryParams.leavehospitaldistrictcodes = []; + this.topqueryParams.searchscope = 1; + } else if (type == 2) { + this.topqueryParams.leavehospitaldistrictcodes.push(code); + this.topqueryParams.leaveldeptcodes = []; + this.topqueryParams.searchscope = 2; + } else { + this.topqueryParams.searchscope = 3; + } + }, + /** 閲嶇疆鎸夐挳鎿嶄綔 */ + resetQuery() { + this.dateRange = []; + this.dateRangefs = []; + this.topqueryParams = { + pageNum: 1, + pageSize: 10, + sendstate: 6, + sort: 2, //0 鍑洪櫌鏃堕棿(姝e簭) 1 鍑洪櫌鏃堕棿(鍊掑簭) 2 鍙戦�佹椂闂�(姝e簭) 3 鍙戦�佹椂闂�(鍊掑簭) + serviceType: 14, + searchscope: 3, + visitCount: 1, + scopetype: [], + leaveldeptcodes: [], + leavehospitaldistrictcodes: [], + }; + this.handleQuery(1); + }, + handleSelectionChange(rows) { + this.selectedRows = rows.map((row) => { + // 鍒濆鍖栬瘎鍒嗗瓧娈� + return { + ...row, + authenticity: row.authenticity || 0, + weekFinish: row.weekFinish || 0, + standard: row.standard || 0, + timeliness: row.timeliness || 0, + library: row.library || 0, + environment: row.environment || 0, + doctorSatisfaction: row.doctorSatisfaction || 0, + nurseSatisfaction: row.nurseSatisfaction || 0, + }; + }); + + if (this.selectedRows.length > 0) { + this.multiple = false; + } else { + this.multiple = true; + } + }, + + // 璁$畻鎬诲垎 + calculateTotal(row) { + return ( + (row.authenticity || 0) + + (row.weekFinish || 0) + + (row.standard || 0) + + (row.timeliness || 0) + + (row.library || 0) + + (row.environment || 0) + + (row.doctorSatisfaction || 0) + + (row.nurseSatisfaction || 0) + ); + }, + + // 淇濆瓨璇勫垎 + saveScores() { + this.selectedRows.forEach((item) => { + item.createBy = null; + item.patName = item.sendname; + item.hospitaldistrictname = item.leavehospitaldistrictname; + }); + addsatisfaction(this.selectedRows).then((res) => { + if (res.code == 200) { + this.$message.success("璇勫垎淇濆瓨鎴愬姛"); + this.scoreDialogVisible = false; + this.selectedRows = []; + this.$refs.userform.clearSelection(); + } else { + this.$modal.msgWarning("璇勫垎淇濆瓨澶辫触"); + this.scoreDialogVisible = false; + this.selectedRows = []; + this.$refs.userform.clearSelection(); + } + }); + // 杩欓噷鍙互娣诲姞淇濆瓨閫昏緫锛屽璋冪敤API淇濆瓨璇勫垎 + }, + //鍒犻櫎閫夐」 + handleClose(tag) { + this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1); + }, + //瑙﹀彂鏂板杈撳叆 + showInput() { + this.inputVisible = true; + this.$nextTick((_) => { + this.$refs.saveTagInput.$refs.input.focus(); + }); + }, + //鑾峰彇澶卞幓鐒︾偣瑙﹀彂 + handleInputConfirm() { + let inputValue = this.inputValue; + if (inputValue) { + this.dynamicTags.push(inputValue); + } + this.inputVisible = false; + this.inputValue = ""; + }, + /** 鏂板鎸夐挳鎿嶄綔 */ + handleAdd() { + this.$router.push({ + path: "/followvisit/QuestionnaireTask", + query: { + type: 2, + serviceType: 14, + }, + }); + }, + //鎮h��360璺宠浆 + gettoken360(sfzh, drcode, drname) { + this.$modal.msgWarning("360鍔熻兘鏆傛湭寮�閫�"); + return; // 闃绘鍚庣画浠g爜鎵ц + 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鏌ヨ鏃犵粨鏋�"); + } + }); + }, + + /** 閲嶇疆瀵嗙爜鎸夐挳鎿嶄綔 */ + handleResetPwd(row) { + this.$prompt('璇疯緭鍏�"' + row.userName + '"鐨勬柊瀵嗙爜', "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + closeOnClickModal: false, + inputPattern: /^.{5,20}$/, + inputErrorMessage: "鐢ㄦ埛瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿", + }) + .then(({ value }) => { + resetUserPwd(row.userId, value).then((response) => { + this.$modal.msgSuccess("淇敼鎴愬姛锛屾柊瀵嗙爜鏄細" + value); + }); + }) + .catch(() => {}); + }, + // 鍙栨秷鎸夐挳 + cancel() { + this.Labelchange = false; + this.reset(); + }, + /** 鎻愪氦鎸夐挳 */ + submitForm: function () { + this.$refs["form"].validate((valid) => { + if (valid) { + this.form.isoperation = 2; + this.form.notrequiredFlag = 1; + alterpatient(this.form) + .then((response) => { + console.log(response); + }) + .then(() => { + this.getList(1); + this.$modal.msgSuccess("鎮h�呰繃婊ゆ垚鍔�"); + }); + + this.reset(); + this.Labelchange = false; + } + }); + }, + /** 鍒犻櫎鎸夐挳鎿嶄綔 */ + handleDelete(row) { + const userIds = row.userId || this.ids; + this.$modal + .confirm('鏄惁纭鍒犻櫎鐢ㄦ埛缂栧彿涓�"' + userIds + '"鐨勬暟鎹」锛�') + .then(function () { + return delUser(userIds); + }) + .then(() => { + this.getList(1); + this.$modal.msgSuccess("鍒犻櫎鎴愬姛"); + }) + .catch(() => {}); + }, + // 鍏ㄩ儴鍋滄 + AllStop() { + this.$modal + .confirm("鏄惁鍋滄鍏ㄩ儴浠诲姟锛�") + .then(function () { + return console.log("鍋滄鎴愬姛"); + }) + .then(() => { + this.getList(1); + this.$modal.msgWarning("鍋滄鎴愬姛"); + }) + .catch(() => {}); + }, + // 鍏ㄩ儴寮�濮� + AllStarted() { + this.$modal + .confirm("鏄惁寮�鍚叏閮ㄤ换鍔★紵") + .then(function () { + return console.log("寮�鍚垚鍔�"); + }) + .then(() => { + this.getList(1); + this.$modal.msgSuccess("寮�鍚垚鍔�"); + }) + .catch(() => {}); + }, + // 浠诲姟閲嶇疆 + TaskReset() { + this.$modal + .confirm("鏄惁閲嶇疆閫変腑鐨勪换鍔¢」锛�") + .then(function () { + return console.log("閫変腑鎴愬姛"); + }) + .then(() => { + this.getList(1); + this.$modal.msgSuccess("閲嶇疆鎴愬姛"); + }) + .catch(() => {}); + }, + // 璁剧疆鍙戦�佹椂闂� + Sendtimesetting() { + this.modificationVisible = true; + }, + // 璺宠浆璇︽儏椤� + Seedetails(row) { + let type = ""; + console.log(row, "rwo"); + if (row.preachformson) { + if (row.preachformson.includes("3")) { + type = 1; + } + } + this.$router.push({ + path: "/followvisit/record/detailpage/", + query: { + taskid: row.taskid, + patid: row.patid, + id: row.id, + Voicetype: type, + visitCount: this.topqueryParams.visitCount, + }, + }); + }, + + onSubmit() {}, + + // 鎮h�呰繃婊よЕ鍙� + handleUpdate(row) { + particularpatient(row.patid).then((response) => { + this.form = response.data; + this.form.filterDrname = store.getters.nickName; + }); + this.amendtag = true; + this.Labelchange = true; + }, + // 渚挎嵎鎸夐挳 + toleadExport(too) { + if (too == 1) { + this.topqueryParams.sendstate = 4; + this.topqueryParams.excep = null; + } else if (too == 2) { + this.topqueryParams.excep = 1; + } + this.handleQuery(); + }, + /** 瀵煎嚭鎸夐挳鎿嶄綔 */ + handleExport() { + this.topqueryParams.pageNum = null; + this.topqueryParams.pageSize = null; + this.download( + "smartor/serviceSubtask/patItemExport", + { + ...this.topqueryParams, + }, + `user_${new Date().getTime()}.xlsx` + ); + }, + // 寮傚父鍒楁覆鏌� + tableRowClassName({ row, rowIndex }) { + if (row.excep == 1) { + return "warning-row"; + } + return ""; + }, + + 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}`; + }, + }, +}; +</script> + +<style lang="scss" scoped> +.el-button--primary.is-plain { + color: #ffffff; + background: #409eff; + border-color: #4fabe9; +} + +.document { + // width: 100px; + height: 50px; +} +::v-deep.el-table .warning-row { + background: #eec4c4; +} + +.documentf { + display: flex; + justify-content: flex-end; +} + +.download { + text-align: center; + + .el-upload__tip { + font-size: 23px; + } + + .el-upload__text { + font-size: 23px; + } +} + +.uploading { + margin-top: 20px; + margin: 20px; + padding: 30px; + background: #ffffff; + border: 1px solid #dcdfe6; + -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), + 0 0 6px 0 rgba(0, 0, 0, 0.04); +} + +.el-tag + .el-tag { + margin-left: 10px; +} + +.button-new-tag { + margin-left: 10px; + height: 32px; + line-height: 30px; + padding-top: 0; + padding-bottom: 0; +} + +.input-new-tag { + width: 90px; + margin-left: 10px; + vertical-align: bottom; +} + +.drexamine { + display: flex; + align-items: center; + justify-content: center; + padding: 30px; + background: #daeaf5; + + img { + width: 100px; + height: 100px; + } +} + +.qrcode-dialo { + // text-align: center; + // display: flex; + margin: 20px; + padding: 30px; + background: #edf1f7; + border: 1px solid #dcdfe6; + -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), + 0 0 6px 0 rgba(0, 0, 0, 0.04); + + .topic-dev { + margin-bottom: 25px; + font-size: 20px !important; + + .dev-text { + margin-bottom: 10px; + } + } +} +::v-deep.leftvlue .el-card__body { + background: #d0e9fd; +} +::v-deep.leftvlue .el-card__body:hover { + background: #8dc8f8; + cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */ +} +::v-deep.errleftvlue .el-card__body { + background: #fdd0d7; +} +::v-deep.errleftvlue .el-card__body:hover { + background: #f88d96; + cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */ +} + +::v-deep.ysfleftvlue .el-card__body { + background: #d0fdd8; +} +::v-deep.ysfleftvlue .el-card__body:hover { + background: #8df8a4; + cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */ +} +.button-bb { + font-weight: 500; + background-color: #2ba05c; + padding: 5px; + border-radius: 1px; + color: #ffffff; +} +.button-xq { + font-weight: 500; + background-color: #409eff; + padding: 5px; + border-radius: 1px; + color: #ffffff; +} +.button-sc { + font-weight: 500; + background-color: #b3a21f; + padding: 5px; + border-radius: 1px; + color: #ffffff; +} +.button-zx { + background: #4fabe9; + padding: 5px; + border-radius: 1px; + color: #ffffff; +} + +::v-deep.el-radio-group { + span { + font-size: 24px; + } +} +.purple-button { + background-color: #7e22ce; + border-color: #7e22ce; + color: #fff; +} + +.purple-button:hover, +.purple-button:focus { + background-color: #9333ea; + border-color: #9333ea; +} + +.purple-button:active { + background-color: #6b21a8; + border-color: #6b21a8; +} + +.purple-button.is-disabled { + background-color: #d8b4fe; + border-color: #d8b4fe; + opacity: 1; /* 淇濇寔绂佺敤鐘舵�侀�忔槑搴� */ +} +// 閫夐」瀛椾綋鏀惧ぇ +// ::v-deep.el-checkbox-group { +// span { +// font-size: 24px; +// } +// } +</style> diff --git a/src/views/followvisit/record/detailpage/MergeAndModify.vue b/src/views/followvisit/record/detailpage/MergeAndModify.vue new file mode 100644 index 0000000..6449d1e --- /dev/null +++ b/src/views/followvisit/record/detailpage/MergeAndModify.vue @@ -0,0 +1,449 @@ +<template> + <div class="merge-questionnaire-container"> + <div class="merge-header"> + <h3>鍚堝苟缂栬緫闂嵎 (鍏� {{ services.length }} 涓湭瀹屾垚鏈嶅姟)</h3> + <el-tag + v-for="service in services" + :key="service.id" + type="info" + style="margin-right: 10px" + > + {{ service.taskName }} ({{ service.sendname }}) + </el-tag> + </div> + + <div class="merge-content"> + <div class="question-list"> + <div + v-for="(question, index) in mergedQuestions" + :key="question.uniqueKey" + class="question-item" + > + <!-- 棰樼洰灞曠ず - 涓庣埗缁勪欢淇濇寔涓�鑷� --> + <div + :class=" + question.isabnormal ? 'scriptTopic-isabnormal' : 'scriptTopic-dev' + " + > + <div class="dev-text"> + {{ index + 1 }}銆乕{{ + getQuestionType(question.scriptType) + }}]<span> {{ question.scriptContent }}</span> + </div> + + <!-- 鍗曢�� --> + <div class="dev-xx" v-if="question.scriptType == 1"> + <el-radio-group + v-model="question.mergedResult" + @change=" + handleOptionChange( + $event, + index, + question.svyLibTemplateTargetoptions, + question + ) + " + >11 + <el-radio + v-for="( + option, optIndex + ) in question.svyLibTemplateTargetoptions" + :key="optIndex" + :label="option.optioncontent" + :class="option.isabnormal ? 'red-star' : ''" + > + {{ option.optioncontent }} + </el-radio> + </el-radio-group> + </div> + + <!-- 澶氶�� --> + <div class="dev-xx" v-if="question.scriptType == 2"> + <el-checkbox-group + v-model="question.mergedResult" + @change="updateScore($event, index, question.options, question)" + > + <el-checkbox + v-for="(option, optIndex) in question.options" + :key="optIndex" + :label="option.optioncontent" + :class="option.isabnormal ? 'red-star' : ''" + > + {{ option.optioncontent }} + </el-checkbox> + </el-checkbox-group> + </div> + + <!-- 濉┖ --> + <div class="dev-xx" v-if="question.scriptType == 4"> + <el-input + type="textarea" + :rows="2" + placeholder="璇疯緭鍏ョ瓟妗�" + v-model="question.mergedResult" + clearable + /> + </div> + + <!-- 闄勫姞杈撳叆妗� --> + <div v-if="question.showAppendInput" class="append-input-container"> + <el-input + type="textarea" + :rows="2" + placeholder="璇疯緭鍏ュ叿浣撲俊鎭�" + v-model="question.answerps" + clearable + /> + </div> + + <!-- 鎻愮ず淇℃伅 --> + <div v-show="question.prompt"> + <el-alert :title="question.prompt" type="warning" /> + </div> + </div> + </div> + </div> + </div> + + <div class="merge-footer"> + <el-button @click="handleCancel">鍙栨秷</el-button> + <el-button type="primary" @click="handleSave" :loading="isSaving" + >淇濆瓨鍒版墍鏈夐棶鍗�</el-button + > + </div> + </div> +</template> + +<script> +import { + getsearchrResults, + serviceSubtaskDetailedit, + serviceSubtaskDetailadd, + Editsingletaskson, + getTaskservelist, + alterpatient, +} from "@/api/AiCentre/index"; + +export default { + props: { + selectedServices: { + type: Array, + required: true, + }, + patid: { + type: [String, Number], + required: true, + }, + }, + data() { + return { + services: [], + mergedQuestions: [], // 鍚堝苟鍚庣殑闂鏁版嵁 + isSaving: false, + }; + }, + created() { + this.loadServicesData(); + }, + methods: { + getQuestionType(type) { + const types = { 1: "鍗曢��", 2: "澶氶��", 4: "闂瓟" }; + return types[type] || "鏈煡"; + }, + + async loadServicesData() { + this.services = this.selectedServices; + + const loading = this.$loading({ + lock: true, + text: "姝e湪鍔犺浇鏈畬鎴愰棶鍗锋暟鎹�...", + spinner: "el-icon-loading", + background: "rgba(0, 0, 0, 0.7)", + }); + + try { + // 鍙姞杞芥湭瀹屾垚鐨勬湇鍔¢棶鍗锋暟鎹� + const requests = this.services.map((service) => + getsearchrResults({ + taskid: service.taskid, + patid: this.patid, + subId: service.id, + isFinish: false, // 纭繚鍙幏鍙栨湭瀹屾垚鐨勯棶鍗� + }) + ); + + const responses = await Promise.all(requests); + + // 鍚堝苟鎵�鏈夐棶棰橈紝鍘婚噸 + const allQuestions = []; + const questionMap = {}; + + responses.forEach((response, index) => { + if (response.code == 200 && response.data.scriptResult) { + response.data.scriptResult.forEach((q) => { + const key = `${q.scriptContent}_${q.scriptType}`; + if (!questionMap[key]) { + questionMap[key] = { + ...q, + uniqueKey: key, + mergedResult: q.scriptType == 2 ? [] : null, + originalServices: [], // 璁板綍鍘熷鏈嶅姟ID + }; + allQuestions.push(questionMap[key]); + } + questionMap[key].originalServices.push(this.services[index].id); + }); + } + }); + + // 鍒濆鍖栧悎骞剁粨鏋� + this.mergedQuestions = allQuestions.map((q) => ({ + ...q, + mergedResult: q.scriptType == 2 ? [] : q.scriptResult || null, + })); + console.log(this.mergedQuestions); + } catch (error) { + this.$message.error("鍔犺浇闂嵎鏁版嵁澶辫触: " + error.message); + } finally { + loading.close(); + } + }, + + // 澶勭悊閫夐」鍙樺寲 (涓庣埗缁勪欢淇濇寔涓�鑷�) + handleOptionChange(selectedOption, questionIndex, options, question) { + const selectedOptionObj = options.find( + (item) => item.optioncontent == selectedOption + ); + + // 璁剧疆寮傚父鐘舵�� + question.isabnormal = !!selectedOptionObj?.isabnormal; + + // 澶勭悊闄勫姞杈撳叆妗嗘樉绀� + question.showAppendInput = selectedOptionObj?.appendflag == 1; + if (!question.showAppendInput) { + question.answerps = ""; + } + + this.$forceUpdate(); + }, + + // 鏇存柊澶氶�夊垎鏁� (涓庣埗缁勪欢淇濇寔涓�鑷�) + updateScore(selectedValues, questionIndex, options, question) { + const abnormalOptions = options.filter((opt) => opt.isabnormal); + question.isabnormal = abnormalOptions.some((opt) => + selectedValues.includes(opt.optioncontent) + ); + this.$forceUpdate(); + }, + + handleCancel() { + this.$emit("cancel"); + }, + + async handleSave() { + this.isSaving = true; + + try { + const saveResults = []; + const updateServicePromises = []; + + // 1. 淇濆瓨鎵�鏈夐棶鍗烽棶棰� + for (const service of this.services) { + const serviceId = service.id; + const questionsToSave = this.mergedQuestions + .filter((q) => q.originalServices.includes(serviceId)) + .map((question) => ({ + scriptid: question.id, + scriptResultId: question.scriptResultId, + scriptType: question.scriptType, + questiontext: question.scriptContent, + asrtext: + question.scriptType == 2 + ? question.mergedResult.join("&") + : question.mergedResult, + answerps: question.answerps || null, + isabnormal: question.isabnormal || false, + })); + + // 淇濆瓨闂鏁版嵁 + for (const question of questionsToSave) { + const saveData = { + taskid: service.taskid, + patid: this.patid, + subId: serviceId, + ...question, + }; + + if (saveData.isabnormal) { + saveData.excep = 1; + } + + try { + const response = question.scriptResultId + ? await serviceSubtaskDetailedit(saveData) + : await serviceSubtaskDetailadd(saveData); + + saveResults.push({ + serviceId, + success: response.code === 200, + message: + response.message || + (response.code === 200 ? "淇濆瓨鎴愬姛" : "淇濆瓨澶辫触"), + }); + } catch (error) { + saveResults.push({ + serviceId, + success: false, + message: error.message || "淇濆瓨澶辫触", + }); + } + } + + // 2. 鏇存柊鏈嶅姟鐘舵�佷负宸插畬鎴� (sendstate = 6) + updateServicePromises.push(this.updateServiceStatus(serviceId)); + } + + // 绛夊緟鎵�鏈夋湇鍔$姸鎬佹洿鏂板畬鎴� + const updateResults = await Promise.all(updateServicePromises); + updateResults.forEach((result) => { + if (!result.success) { + saveResults.push({ + serviceId: result.serviceId, + success: false, + message: result.message || "鏈嶅姟鐘舵�佹洿鏂板け璐�", + }); + } + }); + + // 缁熻缁撴灉 + const successCount = saveResults.filter((r) => r.success).length; + const totalCount = saveResults.length; + + // 閫氱煡鐖剁粍浠� + this.$emit("save", { + successCount, + totalCount, + results: saveResults, + }); + + if (successCount === totalCount) { + this.$message.success("鎵�鏈夐棶鍗峰拰鏈嶅姟鐘舵�佹洿鏂版垚鍔�"); + } else { + this.$message.warning( + `鎴愬姛淇濆瓨 ${successCount} 椤癸紝澶辫触 ${totalCount - successCount} 椤筦 + ); + } + } catch (error) { + this.$message.error("淇濆瓨杩囩▼涓彂鐢熼敊璇�: " + error.message); + } finally { + this.isSaving = false; + } + }, + // 鏂板鏂规硶锛氭洿鏂版湇鍔$姸鎬� + async updateServiceStatus(serviceId) { + try { + // 鑾峰彇鏈嶅姟褰撳墠鏁版嵁 + const res = await getTaskservelist({ + patid: this.patid, + subId: serviceId, + }); + + if (res.code === 200) { + const serviceData = res.rows[0].serviceSubtaskList.find( + (item) => item.id === serviceId + ); + + if (serviceData) { + // 鏇存柊鏈嶅姟鐘舵�佷负宸插畬鎴� (sendstate = 6) + const updateRes = await Editsingletaskson({ + ...serviceData, + sendstate: 6, // 璁剧疆涓哄凡瀹屾垚鐘舵�� + remark: "閫氳繃鍚堝苟缂栬緫瀹屾垚", // 鍙�夛細娣诲姞澶囨敞 + }); + + return { + serviceId, + success: updateRes.code === 200, + message: updateRes.message || "鏈嶅姟鐘舵�佹洿鏂版垚鍔�", + }; + } + } + return { + serviceId, + success: false, + message: "鑾峰彇鏈嶅姟鏁版嵁澶辫触", + }; + } catch (error) { + return { + serviceId, + success: false, + message: error.message || "鏇存柊鏈嶅姟鐘舵�佸け璐�", + }; + } + }, + }, +}; +</script> + +<style scoped> +.merge-questionnaire-container { + display: flex; + flex-direction: column; + height: 100%; + padding: 20px; +} + +.merge-header { + margin-bottom: 20px; +} + +.merge-content { + flex: 1; + overflow-y: auto; +} + +.question-list { + padding: 10px; +} + +/* 涓庣埗缁勪欢涓�鑷寸殑棰樼洰鏍峰紡 */ +.scriptTopic-dev { + margin-bottom: 20px; + padding: 15px; + border: 1px solid #ebeef5; + border-radius: 4px; +} + +.scriptTopic-isabnormal { + margin-bottom: 20px; + padding: 15px; + border: 1px solid #f56c6c; + border-radius: 4px; + background-color: #fff6f6; +} + +.dev-text { + font-size: 16px; + margin-bottom: 15px; + color: #333; +} + +.dev-xx { + margin-left: 20px; +} + +.append-input-container { + margin-top: 15px; +} + +.red-star { + color: #f56c6c; +} + +.merge-footer { + margin-top: 20px; + text-align: right; + padding-top: 15px; + border-top: 1px solid #ebeef5; +} +</style> diff --git a/src/views/followvisit/record/detailpage/index.vue b/src/views/followvisit/record/detailpage/index.vue index 8000ea6..13a3136 100644 --- a/src/views/followvisit/record/detailpage/index.vue +++ b/src/views/followvisit/record/detailpage/index.vue @@ -27,6 +27,23 @@ 鍓嶅線CDSS鏌ヨ </el-link> </div> + <div class="merge-controls" v-if="Whetherall"> + <el-button + type="primary" + @click="toggleMergeMode" + :disabled="selectedServices.length < 2" + > + {{ isMergeMode ? "鍙栨秷鍚堝苟" : "鍚堝苟缂栬緫闂嵎" }} + </el-button> + <el-button + v-if="isMergeMode" + type="success" + @click="openMergeDialog" + :disabled="selectedServices.length < 2" + > + 寮�濮嬪悎骞� (宸查�� {{ selectedServices.length }} 涓湇鍔�) + </el-button> + </div> </div> <!-- <el-button type="success">闅忚鍚庣煭淇�</el-button> --> </div> @@ -36,7 +53,14 @@ :data="logsheetlist" :row-class-name="tableRowClassName" style="width: 100%" + @selection-change="handleSelectionChange" > + <el-table-column + type="selection" + width="55" + :selectable="checkSelectable" + v-if="Whetherall" + ></el-table-column> <el-table-column prop="sendname" align="center" @@ -213,118 +237,427 @@ </el-table> </div> </div> - <div class="Followuserinfos"> - <div> - <el-form - ref="userform" - :model="form" - :rules="userrules" - label-width="120px" - > + <!-- 娣诲姞鍚堝苟缂栬緫瀵硅瘽妗� --> + <el-dialog + title="鍚堝苟缂栬緫闂嵎" + :visible.sync="mergeDialogVisible" + width="80%" + top="5vh" + v-dialogDrag + > + <MergeAndModify + v-if="mergeDialogVisible" + :selected-services="selectedServices" + :patid="patid" + @save="handleMergeSave" + @cancel="mergeDialogVisible = false" + /> + </el-dialog> + <div class="action-container"> + <div class="call-action"> + <div class="call-container"> + <!-- <div class="call-header"> + <h2>涓�閿懠鍙姛鑳�</h2> + </div> --> + <div class="headline"> - <div>浜哄伐澶勭悊</div> - <el-row :gutter="20"> - <el-col :span="8" - ><el-form-item label="鑱旂郴鐢佃瘽"> - <el-input - 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="8" - ><el-form-item label="鑱旂郴浜虹數璇�"> - <el-input - 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> </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> + <div> + <el-tabs v-model="activeName" type="border-card"> + <el-tab-pane name="wj"> + <span class="mulsz" slot="label" + ><i class="el-icon-notebook-1"></i> 闂嵎闅忚缁撴灉</span + > + <div class="CONTENT"> + <div class="title">{{ taskname ? taskname : "闂嵎" }}</div> - <!-- 鎸傛柇鎸夐挳锛堜粎鍦ㄩ�氳瘽涓樉绀猴級 --> - <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> + <div class="preview-left" v-if="!Voicetype"> + <div + class="topic-dev" + v-for="(item, index) in tableDatatop" + :key="item.id" + > + <!-- 鍗曢�� --> + <div + :class=" + item.isabnormal + ? 'scriptTopic-isabnormal' + : 'scriptTopic-dev' + " + :key="index" + v-if="item.scriptType == 1 && !item.astrict" + > + <div class="dev-text"> + {{ index + 1 }}銆乕鍗曢�塢<span>{{ + item.scriptContent + }}</span> + </div> + <div class="dev-xx"> + <el-radio-group + v-model="item.scriptResult" + @change=" + handleOptionChange( + $event, + index, + item.svyLibTemplateTargetoptions, + item + ) + " + > + <el-radio + v-for="( + items, indexs + ) in item.svyLibTemplateTargetoptions" + :class="items.isabnormal ? 'red-star' : ''" + :key="indexs" + :label="items.optioncontent" + >{{ items.optioncontent }}</el-radio + > + </el-radio-group> + </div> + <div + v-if="item.showAppendInput||item.answerps" + class="append-input-container" + > + <el-input + type="textarea" + :rows="2" + placeholder="璇疯緭鍏ュ叿浣撲俊鎭�" + v-model="item.answerps" + clearable + ></el-input> + </div> + <div v-show="item.prompt"> + <el-alert :title="item.prompt" type="warning"> + </el-alert> + </div> + </div> + <!-- 澶氶�� --> + <div + :class=" + item.isabnormal + ? 'scriptTopic-isabnormal' + : 'scriptTopic-dev' + " + :key="index" + v-if="item.scriptType == 2 && !item.astrict" + > + <div class="dev-text"> + {{ index + 1 }}銆乕澶氶�塢<span>{{ + item.scriptContent + }}</span> + </div> + <div class="dev-xx"> + <el-checkbox-group + v-model="item.scriptResult" + @change="updateScore($event, index, item)" + > + <el-checkbox + :class="items.isabnormal ? 'red-star' : ''" + @change="$forceUpdate()" + v-for="( + items, indexs + ) in item.svyLibTemplateTargetoptions" + :key="indexs" + :label="items.optioncontent" + > + {{ items.optioncontent }} + </el-checkbox> + </el-checkbox-group> + </div> + <div v-show="item.prompt && item.scriptResult[0]"> + <el-alert :title="item.prompt" type="warning"> + </el-alert> + </div> + </div> + <!-- 濉┖ --> + <div + class="scriptTopic-dev" + :key="index" + v-if="item.scriptType == 4 && !item.astrict" + > + <div class="dev-text"> + {{ index + 1 }}銆乕闂瓟]<span>{{ + item.scriptContent + }}</span> + </div> + <div class="dev-xx"> + <el-input + type="textarea" + :rows="2" + placeholder="璇疯緭鍏ョ瓟妗�" + v-model="item.scriptResult" + clearable + > + </el-input> + </div> + </div> + </div> + </div> - <el-form-item label="澶勭悊鎰忚"> - <div> - <el-button plain type="warning" @click="Editsingletaskson('1')" - >鏆備笉澶勭悊</el-button - > - <el-button plain type="success" @click="Editsingletaskson('2')" - >鐥呮儏绋冲畾</el-button - > - <el-button plain type="primary" @click="Editsingletaskson('3')" - >閫氱煡灏辫瘖</el-button - > - <!-- <el-button type="danger" @click="Editsingletaskson('4')" - >澶辫</el-button - > --> - <el-button plain type="info" @click="Editsingletaskson('5')" - >涓績闅忚</el-button - > - <el-button - type="primary" - round - v-if="this.form.isVisitAgain != 2" - @click="sendAgain()" - >鍐嶆闅忚</el-button - > - </div> - </el-form-item> - </el-form> - <el-collapse> - <el-collapse-item title="鏌ョ湅褰撳墠鎮h�呬俊鎭�" name="1"> + <div class="preview-left" v-else> + <div + class="topic-dev" + v-for="(item, index) in tableDatatop" + :key="item.id" + > + <div v-if="item.targetvalue"> + <div class="dev-text"> + {{ index + 1 }}銆乕鍗曢�塢<span>{{ + item.questiontext + }}</span> + </div> + <div class="dev-xx"> + <el-radio-group + v-model="item.matchedtext" + @change=" + handleOptionChange( + $event, + index, + item.ivrTaskScriptTargetoptionList, + item + ) + " + > + <el-radio + v-for="(items, index) in item.scriptResult" + :key="items" + :label="items" + >{{ items }}</el-radio + > + </el-radio-group> + </div> + <div v-show="item.prompt"> + <el-alert :title="item.prompt" type="warning"> + </el-alert> + </div> + </div> + + <div class="scriptTopic-dev" :key="index" v-else> + <div class="dev-text"> + {{ index + 1 }}銆乕闂瓟]<span>{{ + item.questiontext + }}</span> + </div> + <div class="dev-xx"> + <el-input + type="textarea" + :rows="2" + placeholder="璇疯緭鍏ョ瓟妗�" + v-model="item.matchedtext" + clearable + > + </el-input> + </div> + </div> + </div> + </div> + <el-button + v-if="Voicetype" + type="primary" + @click="yuyingetdetail" + >淇濆瓨鏈嶅姟璇︽儏</el-button + > + <el-button v-else type="primary" @click="getdetail" + >淇濆瓨鏈嶅姟璇︽儏</el-button + > + </div> + </el-tab-pane> + + <el-tab-pane name="yy"> + <span class="mulsz" slot="label" + ><i class="el-icon-headset"></i> 璇煶闅忚璇︽儏</span + > + <div class="borderdiv"> + <div class="title">{{ taskname ? taskname : "闂嵎" }}</div> + <div + style=" + display: flex; + text-align: center; + align-items: center; + color: #59a0f0; + " + > + 瀹屾暣璇煶锛� + <mini-audio + :audio-source=" + voice ? voice : '@assets/order/example.mp3' + " + ></mini-audio> + </div> + <div class="preview-left"> + <div v-for="item in voiceDatatop"> + <div class="leftside"> + <i class="el-icon-phone-outline"></i + ><span>{{ item.questiontext }}</span> + </div> + <div class="offside"> + <i class="el-icon-user"></i> + <div class="offside-value"> + <el-input + type="textarea" + :autosize="{ minRows: 1 }" + v-model="item.asrtext" + ></el-input> + + <div> + <mini-audio + :audio-source=" + item.questionvoice + ? item.questionvoice + : '@assets/order/example.mp3' + " + ></mini-audio> + </div> + </div> + </div> + </div> + </div> + <el-button + v-if="Voicetype" + type="primary" + @click="yuyingetdetail" + >淇濆瓨闅忚璇︽儏</el-button + > + <el-button v-else type="primary" @click="getdetail" + >淇濆瓨闅忚璇︽儏</el-button + > + </div> + </el-tab-pane> + </el-tabs> + </div> + </div> + </div> + <div class="manual-action"> + <div class="Followuserinfos"> + <div> + <el-form + ref="userform" + :model="form" + :rules="userrules" + label-width="120px" + > + <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> + <el-row> + <el-col :span="14" + ><el-form-item label="鑱旂郴鐢佃瘽"> + <el-input + 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-row> + <el-row> + <el-col :span="14" + ><el-form-item label="鑱旂郴浜虹數璇�"> + <el-input + 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="10" + ><el-form-item label="鑱旂郴浜哄叧绯�"> + <el-input + placeholder="鑱旂郴浜哄叧绯荤己澶�" + v-model="userform.relation" + ></el-input> </el-form-item + ></el-col> + </el-row> + <div class="call-controls"> + <CallButton + ref="callButton" + :phoneNumber="currentPhoneNumber" + style="display: none" + /> + + <div v-if="callStatus === 'connected'" class="hangup-btn"> + <el-button + type="danger" + icon="el-icon-phone" + @click="endCurrentCall" + :loading="isEndingCall" + > + 鎸傛柇鐢佃瘽 + </el-button> + </div> + <div class="call-status" v-if="callStatus !== 'idle'"> + <el-alert + :title="callStatusText" + :type="callStatusType" + :closable="false" + show-icon + /> + </div> + </div> + <el-form-item label="闅忚璁板綍"> + <el-input type="textarea" v-model="form.remark"></el-input> + </el-form-item> + + <el-form-item label="澶勭悊鎰忚"> + <div> + <el-button + plain + type="warning" + @click="Editsingletaskson('1')" + >鏆備笉澶勭悊</el-button + > + <el-button + plain + type="success" + @click="Editsingletaskson('2')" + >鐥呮儏绋冲畾</el-button + > + <el-button + plain + type="primary" + @click="Editsingletaskson('3')" + >閫氱煡灏辫瘖</el-button + > + <el-button plain type="info" @click="Editsingletaskson('5')" + >涓績闅忚</el-button + > + </div> + </el-form-item> + </el-form> + <div class="detailed"> + <h3>鎮h�呮。妗堜俊鎭�</h3> <el-form ref="userform" :model="userform" label-width="100px"> <el-row :gutter="20"> <el-col :span="12"> @@ -374,261 +707,13 @@ /> </el-form-item ></el-col> </el-row> - <!-- <el-row :gutter="20"> - <el-col :span="24"> - <el-form-item label="鏍囩" prop="desc"> - <div class="xinz-inf"> - <el-tag - :key="tag.tagname" - type="success" - v-for="tag in dynamicTags" - :disable-transitions="false" - > - {{ tag.tagname }} - </el-tag> - </div> - </el-form-item> - </el-col> - </el-row> --> </el-form> </div> - </el-collapse-item> - </el-collapse> + </div> + </div> </div> </div> - <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" - ><i class="el-icon-notebook-1"></i> 闂嵎闅忚缁撴灉</span - > - <div class="CONTENT"> - <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 - ? 'scriptTopic-isabnormal' - : 'scriptTopic-dev' - " - :key="index" - v-if="item.scriptType == 1 && !item.astrict" - > - <div class="dev-text"> - {{ index + 1 }}銆乕鍗曢�塢<span>{{ item.scriptContent }}</span> - </div> - <div class="dev-xx"> - <el-radio-group - v-model="item.scriptResult" - @change=" - handleOptionChange( - $event, - index, - item.svyLibTemplateTargetoptions - ) - " - > - <el-radio - v-for="( - items, indexs - ) in item.svyLibTemplateTargetoptions" - :class="items.isabnormal ? 'red-star' : ''" - :key="indexs" - :label="items.optioncontent" - >{{ items.optioncontent }}</el-radio - > - </el-radio-group> - </div> - <div v-show="item.prompt"> - <el-alert :title="item.prompt" type="warning"> </el-alert> - </div> - </div> - <!-- 澶氶�� --> - <div - :class=" - item.isabnormal - ? 'scriptTopic-isabnormal' - : 'scriptTopic-dev' - " - :key="index" - v-if="item.scriptType == 2 && !item.astrict" - > - <div class="dev-text"> - {{ index + 1 }}銆乕澶氶�塢<span>{{ item.scriptContent }}</span> - </div> - <div class="dev-xx"> - <el-checkbox-group - v-model="item.scriptResult" - @change="updateScore($event, index, item)" - > - <el-checkbox - :class="items.isabnormal ? 'red-star' : ''" - @change="$forceUpdate()" - v-for="( - items, indexs - ) in item.svyLibTemplateTargetoptions" - :key="indexs" - :label="items.optioncontent" - > - {{ items.optioncontent }} - </el-checkbox> - </el-checkbox-group> - </div> - <div v-show="item.prompt && item.scriptResult[0]"> - <el-alert :title="item.prompt" type="warning"> </el-alert> - </div> - </div> - <!-- 濉┖ --> - <div - class="scriptTopic-dev" - :key="index" - v-if="item.scriptType == 4 && !item.astrict" - > - <div class="dev-text"> - {{ index + 1 }}銆乕闂瓟]<span>{{ item.scriptContent }}</span> - </div> - <div class="dev-xx"> - <el-input - type="textarea" - :rows="2" - placeholder="璇疯緭鍏ョ瓟妗�" - v-model="item.scriptResult" - clearable - > - </el-input> - </div> - </div> - </div> - </div> - - <div class="preview-left" v-else> - <div - class="topic-dev" - v-for="(item, index) in tableDatatop" - :key="item.id" - > - <div v-if="item.targetvalue"> - <div class="dev-text"> - {{ index + 1 }}銆乕鍗曢�塢<span>{{ item.questiontext }}</span> - </div> - <div class="dev-xx"> - <el-radio-group - v-model="item.matchedtext" - @change="handleOptionChange($event, index, item)" - > - <el-radio - v-for="(items, index) in item.scriptResult" - :key="items" - :label="items" - >{{ items }}</el-radio - > - </el-radio-group> - </div> - <div v-show="item.prompt"> - <el-alert :title="item.prompt" type="warning"> </el-alert> - </div> - </div> - - <div class="scriptTopic-dev" :key="index" v-else> - <div class="dev-text"> - {{ index + 1 }}銆乕闂瓟]<span>{{ item.questiontext }}</span> - </div> - <div class="dev-xx"> - <el-input - type="textarea" - :rows="2" - placeholder="璇疯緭鍏ョ瓟妗�" - v-model="item.matchedtext" - clearable - > - </el-input> - </div> - </div> - </div> - </div> - <el-button v-if="Voicetype" type="primary" @click="yuyingetdetail" - >淇濆瓨鏈嶅姟璇︽儏</el-button - > - <el-button v-else type="primary" @click="getdetail" - >淇濆瓨鏈嶅姟璇︽儏</el-button - > - </div> - </el-tab-pane> - - <el-tab-pane name="yy"> - <span class="mulsz" slot="label" - ><i class="el-icon-headset"></i> 璇煶闅忚璇︽儏</span - > - <div class="borderdiv"> - <div class="title">{{ taskname ? taskname : "闂嵎" }}</div> - <div - style=" - display: flex; - text-align: center; - align-items: center; - color: #59a0f0; - " - > - 瀹屾暣璇煶锛� - <mini-audio - :audio-source=" - voice ? voice : '@assets/order/example.mp3' - " - ></mini-audio> - </div> - <div class="preview-left"> - <div v-for="item in voiceDatatop"> - <div class="leftside"> - <i class="el-icon-phone-outline"></i - ><span>{{ item.questiontext }}</span> - </div> - <div class="offside"> - <i class="el-icon-user"></i> - <div class="offside-value"> - <el-input - type="textarea" - :autosize="{ minRows: 1 }" - v-model="item.asrtext" - ></el-input> - - <div> - <mini-audio - :audio-source=" - item.questionvoice - ? item.questionvoice - : '@assets/order/example.mp3' - " - ></mini-audio> - </div> - </div> - </div> - </div> - </div> - <el-button v-if="Voicetype" type="primary" @click="yuyingetdetail" - >淇濆瓨闅忚璇︽儏</el-button - > - <el-button v-else type="primary" @click="getdetail" - >淇濆瓨闅忚璇︽儏</el-button - > - </div> - </el-tab-pane> - </el-tabs> - </div> <el-dialog title="鎮h�呭啀娆¢殢璁�" v-dialogDrags @@ -797,9 +882,11 @@ listcontactinformation, } from "@/api/patient/homepage"; import CallButton from "@/components/CallButton"; +import MergeAndModify from "./MergeAndModify.vue"; export default { components: { CallButton, + MergeAndModify, }, dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], @@ -836,6 +923,9 @@ tableDatatop: [], //棰樼洰琛� voiceDatatop: [], //棰樼洰琛� dynamicTags: [], + isMergeMode: false, + mergeDialogVisible: false, + selectedServices: [], // 閫変腑鐨勬湇鍔″垪琛� zcrules: { resource: [ { required: true, message: "璇烽�夋嫨闅忚鏂瑰紡", trigger: "change" }, @@ -1071,8 +1161,7 @@ getuserinfo() { const queryParams = { pid: Number(this.patid), - allhosp: "0", - pageNum: 1, + allhosp: "0",//1浣忛櫌2闂ㄨ瘖3浣撴4鍑洪櫌 }; // 鎮h�呭熀纭�淇℃伅 messagelistpatient(queryParams).then((response) => { @@ -1195,6 +1284,7 @@ scriptid: item.id, excep: excep, questiontext: item.scriptContent, + answerps: item.answerps || null, // 娣诲姞闄勫姞淇℃伅 }; if (item.scriptType == 2 && item.scriptResult[0]) { obj.asrtext = item.scriptResult.join("&"); @@ -1241,7 +1331,7 @@ }) .catch(() => { if (this.form.serviceType == 13) { - if (this.visitCount!=1) { + if (this.visitCount != 1) { this.$router.push({ path: "/logisticsservice/zbAgain", }); @@ -1251,7 +1341,7 @@ }); } } else if (this.form.serviceType == 2) { - if (this.visitCount!=1) { + if (this.visitCount != 1) { this.$router.push({ path: "/logisticsservice/again", }); @@ -1268,6 +1358,7 @@ console.error("鍙戠敓閿欒锛�", error); }); }, + // 鐢佃瘽============================ // 楠岃瘉鐢佃瘽鍙风爜鏍煎紡骞惰繑鍥為敊璇俊鎭� validatePhoneNumber(phone) { if (!phone) { @@ -1299,7 +1390,6 @@ }; } }, - // 浣跨敤绀轰緥 isValidPhone(phone) { return this.validatePhoneNumber(phone).isValid; @@ -1323,7 +1413,6 @@ }); }); }, - // 澶勭悊閫氳瘽鐘舵�佸彉鍖� handleCallStatusChange(status) { console.log(status, "status"); @@ -1345,7 +1434,6 @@ this.$message.error(`鍛煎彨澶辫触: ${status.text}`); } }, - // 缁撴潫褰撳墠閫氳瘽 endCurrentCall() { if (!this.currentCall) return; @@ -1551,7 +1639,7 @@ }) .catch(() => {}); }, - handleOptionChange(a, b, c) { + aahandleOptionChange(a, b, c) { const result = c.find((item) => item.optioncontent == a); if (result.nextQuestion == 0) { this.tableDatatop = this.tableDatatop.reduce((acc, item, i) => { @@ -1578,6 +1666,98 @@ } else { this.tableDatatop[b].isabnormal = false; } + this.$forceUpdate(); + }, + // 鍦╩ethods閮ㄥ垎锛屼慨鏀筯andleOptionChange鏂规硶: + handleOptionChange(selectedOption, questionIndex, options, a) { + if (document.activeElement) { + document.activeElement.blur(); + } + + // 鎵惧埌琚�変腑鐨勯�夐」瀵硅薄 + const selectedOptionObj = options.find( + (item) => item.optioncontent == selectedOption + ); + + // 澶勭悊寮傚父鐘舵�侀珮浜� + this.tableDatatop[questionIndex].isabnormal = + !!selectedOptionObj.isabnormal; + // 澶勭悊闄勫姞杈撳叆妗嗘樉绀� + + this.tableDatatop[questionIndex].showAppendInput = + selectedOptionObj.appendflag == 1; + console.log(this.tableDatatop); + + // if (!this.tableDatatop[questionIndex].showAppendInput) { + // this.tableDatatop[questionIndex].answerps = ""; // 娓呴櫎闄勫姞淇℃伅 + // } + // 淇濆瓨褰撳墠棰樼洰涔嬪墠宸茬粡闅愯棌鐨勯鐩姸鎬� + const previouslyHiddenBeforeCurrent = this.tableDatatop + .slice(0, questionIndex) + .map((item, index) => (item.astrict ? index : -1)) + .filter((index) => index !== -1); + + // 淇濆瓨涔嬪墠鍥爊extQuestion=0鑰岄殣钘忕殑棰樼洰鑼冨洿 + const previouslyHiddenByEnd = this.tableDatatop + .map((item, index) => (item.hiddenByEnd ? index : -1)) + .filter((index) => index !== -1); + + // 濡傛灉branchFlag涓�1锛屽鐞嗛鐩烦杞� + if (a.branchFlag == 1) { + if (selectedOptionObj.nextQuestion == 0) { + // 缁撴潫闂瓟 - 闅愯棌鍚庨潰鎵�鏈夐鐩苟鏍囪 + this.tableDatatop = this.tableDatatop.map((item, index) => ({ + ...item, + astrict: index > questionIndex, + hiddenByEnd: index > questionIndex, // 鏍囪杩欎簺棰樼洰鏄缁撴潫闂瓟闅愯棌鐨� + })); + } else { + // 姝e父璺宠浆閫昏緫 + const nextQuestionIndex = selectedOptionObj.nextQuestion - 1; + + this.tableDatatop = this.tableDatatop.map((item, index) => { + // 淇濈暀褰撳墠棰樼洰涔嬪墠鐨勯殣钘忕姸鎬� + if (index < questionIndex) { + return { + ...item, + astrict: previouslyHiddenBeforeCurrent.includes(index), + hiddenByEnd: false, // 娓呴櫎缁撴潫鏍囪 + }; + } + + // 褰撳墠棰樼洰鎬绘槸鍙 + if (index === questionIndex) { + return { ...item, astrict: 0, hiddenByEnd: false }; + } + + // 鏄剧ず鐩爣涓嬩竴棰� + if (index === nextQuestionIndex) { + return { ...item, astrict: 0, hiddenByEnd: false }; + } + + // 濡傛灉鏄箣鍓嶈缁撴潫闂瓟闅愯棌鐨勯鐩紝鐜板湪搴旇鎭㈠鏄剧ず + if (item.hiddenByEnd) { + return { ...item, astrict: 0, hiddenByEnd: false }; + } + + // 闅愯棌褰撳墠棰樺拰鐩爣棰樹箣闂寸殑棰樼洰 + if (index > questionIndex && index < nextQuestionIndex) { + return { ...item, astrict: 1, hiddenByEnd: false }; + } + + // 鍏朵粬鎯呭喌淇濇寔鍘熺姸 + return item; + }); + } + } else { + // 濡傛灉娌℃湁璺宠浆锛屽彧闇�纭繚涓嬩竴棰樺彲瑙� + this.tableDatatop = this.tableDatatop.map((item, index) => ({ + ...item, + astrict: index === questionIndex + 1 ? 0 : item.astrict, + hiddenByEnd: index === questionIndex + 1 ? false : item.hiddenByEnd, + })); + } + this.$forceUpdate(); }, overdata() { @@ -1657,69 +1837,205 @@ return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; }, updateScore(a, b, c) {}, + // 鍚堝苟淇敼鐩稿叧============================= + toggleMergeMode() { + this.isMergeMode = !this.isMergeMode; + if (!this.isMergeMode) { + this.selectedServices = []; + } + }, + + handleSelectionChange(selection) { + this.selectedServices = selection + .filter( + (item) => !item.preachformson || !item.preachformson.includes("3") + ) + .map((item) => ({ + id: item.id, + taskid: item.taskid, + taskName: item.taskName, + sendname: item.sendname, + })); + }, + checkSelectable(row, index) { + // 褰� sendstate 涓� 6 鏃朵笉鍙�� + return row.sendstate !== 6; + }, + openMergeDialog() { + if (this.selectedServices.length < 2) { + this.$message.warning("璇疯嚦灏戦�夋嫨2涓棶鍗锋湇鍔¤繘琛屽悎骞�"); + return; + } + this.mergeDialogVisible = true; + }, + + handleMergeSave(mergedData) { + // 澶勭悊鍚堝苟淇濆瓨閫昏緫 + this.mergeDialogVisible = false; + this.isMergeMode = false; + this.selectedServices = []; + + // 鏄剧ず淇濆瓨缁撴灉 + if (mergedData.successCount == mergedData.totalCount) { + this.$message.success(`鎴愬姛淇濆瓨 ${mergedData.successCount} 涓棶鍗穈); + } else if (mergedData.successCount > 0) { + this.$message.warning( + `鎴愬姛淇濆瓨 ${mergedData.successCount} 涓棶鍗凤紝澶辫触 ${ + mergedData.totalCount - mergedData.successCount + } 涓猔 + ); + } else { + this.$message.error("鎵�鏈夐棶鍗蜂繚瀛樺け璐�"); + } + + // 鍒锋柊鏁版嵁 + this.getTaskservelist(); + }, }, }; </script> -<style lang="scss"> +<style lang="scss" scoped> .Followupdetailspage { margin: 10px; + display: flex; + flex-direction: column; + gap: 20px; +} + +.action-container { + display: flex; + gap: 20px; + margin: 0 10px 20px 10px; + + .manual-action { + flex: 1; + min-width: 0; + height: 100%; /* 纭繚楂樺害缁ф壙 */ + } + + .call-action { + width: 60%; + min-width: 0; + height: 100%; /* 纭繚楂樺害缁ф壙 */ + } +} + +.call-container { + padding: 20px; + background: #fff; + 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); + border-radius: 4px; + height: 100%; + + .call-header { + margin-bottom: 20px; + + h2 { + font-size: 20px; + color: #333; + margin: 0; + padding-bottom: 10px; + border-bottom: 1px solid #eee; + } + } + + .call-status { + margin-bottom: 20px; + } + + .hangup-btn { + text-align: center; + margin-top: 20px; + } +} +.merge-controls { + background: #f5f7fa; + border-radius: 4px; + margin-left: 20px; } .Followuserinfo { - margin: 20px 10px; + margin: 10px 10px 0 10px; align-items: center; padding: 30px; background: #ffff; border: 1px solid #dcdfe6; - -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), - 0 0 6px 0 rgba(0, 0, 0, 0.04); + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04); + .userinfo-text { font-size: 20px; margin-right: 20px; margin-bottom: 10px; } + .userinfo-value { color: rgb(15, 139, 211); + span { margin-right: 20px; } } } + ::v-deep.el-table .warning-row { background: #c4e2ee; } + .Followuserinfos { - margin: 20px 10px; align-items: center; padding: 30px; background: #ffff; border: 1px solid #dcdfe6; - -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), - 0 0 6px 0 rgba(0, 0, 0, 0.04); + 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; /* 鏈�灏忛珮搴︿笌闅忚鍐呭涓�鑷� */ + display: flex; + flex-direction: column; + .userinfo-text { font-size: 20px; margin-right: 20px; margin-bottom: 10px; } + .userinfo-value { color: rgb(15, 139, 211); + span { margin-right: 20px; } } + + .el-form { + flex: 1; + overflow-y: auto; /* 鍐呭瓒呰繃楂樺害鏃舵樉绀烘粴鍔ㄦ潯 */ + max-height: calc(880px - 60px); /* 鍑忓幓padding */ + padding-right: 10px; /* 闃叉婊氬姩鏉¢伄鎸″唴瀹� */ + } +} +.append-input-container { + margin-top: 15px; + padding: 10px; + background-color: #f5f7fa; + border-radius: 4px; + border: 1px solid #dcdfe6; } .borderdiv { min-height: 60vh; font-size: 20px; padding: 30px; + .title { font-size: 22px; font-weight: bold; margin-bottom: 20px; text-align: center; } + .leftside { margin: 30px 0; + span { width: 400px; margin-left: 20px; @@ -1729,9 +2045,11 @@ border-radius: 10px; } } + .offside { display: flex; flex-direction: row-reverse; + .offside-value { padding: 10px; background: rgb(217, 173, 253); @@ -1741,8 +2059,15 @@ } } } +.topic-dev[inert] { + opacity: 0.5; + pointer-events: none; +} .CONTENT { padding: 10px; + height: 100%; + min-height: 660px; /* 璁剧疆鏈�灏忛珮搴� */ + .title { font-size: 22px; font-weight: bold; @@ -1750,40 +2075,47 @@ text-align: center; } } + .preview-left { margin: 20px; - // margin: 20px; padding: 30px; - // background: #ffff; border: 1px solid #dcdfe6; - -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), - 0 0 6px 0 rgba(0, 0, 0, 0.04); + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04); + max-height: 580px; /* 璁剧疆鏈�澶ч珮搴� */ + overflow-y: auto; /* 鍐呭瓒呰繃楂樺害鏃舵樉绀烘粴鍔ㄦ潯 */ + .topic-dev { margin-bottom: 25px; font-size: 20px !important; + .dev-text { margin-bottom: 10px; } } } + .scriptTopic-isabnormal { color: red; } + .detailed { width: 88%; border-radius: 8px; padding: 30px; margin-bottom: 30px; background-color: #ddf0f8; + .bg-purple { margin-bottom: 20px; } + .spanvalue { display: inline-block; min-width: 200px; border-bottom: 1px solid rgb(172, 172, 172); } } + .headline { font-size: 24px; height: 40px; @@ -1791,79 +2123,94 @@ padding-left: 5px; margin-bottom: 10px; display: flex; - // justify-content: space-between; + .Add-details { font-size: 18px; color: #02a7f0; cursor: pointer; } } + .red-star { ::v-deep.el-radio__label { position: relative; - padding-right: 10px; /* 鏍规嵁闇�瑕佽皟鏁� */ + padding-right: 10px; } + ::v-deep.el-radio__label::after { content: "*"; color: red; position: absolute; - right: -5px; /* 鏍规嵁闇�瑕佽皟鏁� */ + right: -5px; top: 0; } + ::v-deep.el-input-group__textarea { - white-space: pre-wrap; /* 淇濇寔绌虹櫧绗﹀簭鍒楀苟姝e父鎹㈣ */ - word-break: break-all; /* 鍦ㄩ暱鍗曡瘝鎴朥RL鍦板潃鍐呴儴杩涜鎹㈣ */ + white-space: pre-wrap; + word-break: break-all; } + ::v-deep.el-checkbox__label { position: relative; - padding-right: 10px; /* 鏍规嵁闇�瑕佽皟鏁� */ + padding-right: 10px; } + ::v-deep.el-checkbox__label::after { content: "*"; color: red; position: absolute; - right: -5px; /* 鏍规嵁闇�瑕佽皟鏁� */ + right: -5px; top: 0; } } + ::v-deep.offside-value .el-radio__label { color: #fff; } + ::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; /* 榧犳爣鏍峰紡 */ + 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; /* 榧犳爣鏍峰紡 */ + background-color: #fff; + border-color: #dcdfe6; + color: #080808 !important; + cursor: not-allowed; } </style> diff --git a/src/views/followvisit/record/physical/index.vue b/src/views/followvisit/record/physical/index.vue index 77f5cbb..a035698 100644 --- a/src/views/followvisit/record/physical/index.vue +++ b/src/views/followvisit/record/physical/index.vue @@ -713,7 +713,6 @@ const queryParams = { pid: Number(this.patid), allhosp: "0", - pageNum: 1, }; // 鎮h�呭熀纭�淇℃伅 messagelistpatient(queryParams).then((response) => { diff --git a/src/views/followvisit/zbAgain/index.vue b/src/views/followvisit/zbAgain/index.vue index 1a8bbb8..92f8e52 100644 --- a/src/views/followvisit/zbAgain/index.vue +++ b/src/views/followvisit/zbAgain/index.vue @@ -1187,8 +1187,8 @@ }); }, affiliation() { - this.topqueryParams.drcode = store.getters.hisUserId; - this.topqueryParams.nurseId = store.getters.hisUserId; + + this.topqueryParams.managementDoctor = store.getters.hisUserId; this.getList(1); }, onthatday() { diff --git a/src/views/followvisit/zysatisfaction/index.vue b/src/views/followvisit/zysatisfaction/index.vue new file mode 100644 index 0000000..80e8dbe --- /dev/null +++ b/src/views/followvisit/zysatisfaction/index.vue @@ -0,0 +1,1965 @@ +<template> + <div class="app-container"> + <div class="leftvlue" style="margin-bottom: 20px"> + <el-row :gutter="10"> + <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index"> + <el-card + shadow="hover" + :body-style="item.router ? ' cursor: pointer' : 'cursor: default'" + > + <div style="padding: 8px" @click="$router.push(item.router)"> + <span>{{ item.name }}</span> + <div + style=" + text-align: center; + font-size: 18px; + margin-top: 10px; + font-weight: 600; + " + > + {{ item.value ? item.value : 0 }} + </div> + </div> + </el-card> + </el-col> + <el-col :span="2.5"> + <div class="ysfleftvlue"> + <el-card shadow="hover"> + <div style="padding: 8px"> + <span>琛ㄥ崟宸插彂閫�</span> + <div + style=" + text-align: center; + font-size: 18px; + margin-top: 10px; + font-weight: 600; + " + > + {{ yfsvalue }} + </div> + </div> + </el-card> + </div> + </el-col> + <el-col :span="2.5"> + <div class="errleftvlue"> + <el-card shadow="hover"> + <div style="padding: 8px"> + <span>寮傚父</span> + <div + style=" + text-align: center; + font-size: 18px; + margin-top: 10px; + font-weight: 600; + " + > + {{ ycvalue }} + </div> + </div> + </el-card> + </div> + </el-col> + </el-row> + </div> + <el-row :gutter="20"> + <!--鐢ㄦ埛鏁版嵁--> + <el-form + :model="topqueryParams" + ref="queryForm" + size="small" + :inline="true" + v-show="showSearch" + label-width="98px" + > + <el-form-item label="浠诲姟鍚嶇О"> + <el-input + v-model="topqueryParams.taskName" + placeholder="璇烽�夋嫨浠诲姟鍚嶇О" + ></el-input> + </el-form-item> + + <el-form-item label="鍑洪櫌鏃堕棿"> + <el-date-picker + v-model="dateRange" + style="width: 240px" + value-format="yyyy-MM-dd" + type="daterange" + range-separator="-" + start-placeholder="寮�濮嬫棩鏈�" + end-placeholder="缁撴潫鏃ユ湡" + ></el-date-picker> + </el-form-item> + + + <el-form-item label="鎮h�呭鍚�" prop="sendname"> + <el-input + v-model="topqueryParams.sendname" + placeholder="璇疯緭鍏ユ偅鑰呭鍚�" + ></el-input> + </el-form-item> + <el-form-item label="璇婃柇鍚嶇О" prop="leavediagname"> + <el-input + v-model="topqueryParams.leavediagname" + placeholder="璇疯緭鍏ヨ瘖鏂悕绉�" + ></el-input> + </el-form-item> + <el-form-item label="闅忚浜哄憳" prop="updateBy"> + <el-input + v-model="topqueryParams.updateBy" + placeholder="璇疯緭鍏ラ殢璁夸汉鍛�" + ></el-input> + </el-form-item> + <el-form-item label="涓绘不鍖荤敓" prop="drname"> + <el-input + v-model="topqueryParams.drname" + placeholder="璇疯緭鍏ヤ富娌诲尰鐢�" + ></el-input> + </el-form-item> + <el-form-item label="缁忕鍖荤敓" prop="managementDoctor"> + <el-input + v-model="topqueryParams.managementDoctor" + placeholder="璇疯緭鍏ヤ富娌诲尰鐢�" + ></el-input> + </el-form-item> + + <el-form-item label="鎮h�呰寖鍥�" prop="status"> + <el-cascader + v-model="topqueryParams.scopetype" + placeholder="榛樿鍏ㄩ儴" + :options="sourcetype" + :props="{ expandTrigger: 'hover' }" + @change="handleChange" + ></el-cascader> + </el-form-item> + + <el-form-item label="浠诲姟鐘舵��" prop="status"> + <el-select v-model="topqueryParams.sendstate" placeholder="璇烽�夋嫨"> + <el-option + v-for="item in topicoptions" + :key="item.value" + :label="item.label" + :value="item.value" + > + </el-option> + </el-select> + </el-form-item> + <el-form-item label="鎺掑簭鏂瑰紡" prop="status"> + <el-select v-model="topqueryParams.sort" placeholder="璇烽�夋嫨"> + <el-option + v-for="item in topicoptionssort" + :key="item.value" + :label="item.label" + :value="item.value" + > + </el-option> + </el-select> + </el-form-item> + + <el-form-item> + <el-button + type="primary" + icon="el-icon-search" + size="medium" + @click="handleQuery(1)" + >鎼滅储</el-button + > + <el-button icon="el-icon-refresh" size="medium" @click="resetQuery" + >閲嶇疆</el-button + > + </el-form-item> + </el-form> + <el-divider></el-divider> + <el-row :gutter="10" class="mb8"> + <el-col :span="1.5"> + <div class="documentf"> + <div class="document"> + <el-button + type="warning" + plain + icon="el-icon-upload2" + size="medium" + @click="handleExport" + >瀵煎嚭</el-button + > + </div> + </div> + </el-col> + <el-col :span="1.5"> + <el-button + type="primary" + plain + icon="el-icon-plus" + size="medium" + @click="handleAdd" + >鏂板</el-button + > + </el-col> + + <el-col :span="1.5"> + <div class="documentf"> + <div class="document"> + <el-button + type="warning" + plain + icon="el-icon-warning-outline" + size="medium" + @click="toleadExport(1)" + >鎵ц澶辫触</el-button + > + </div> + </div> + </el-col> + <el-col :span="1.5"> + <div class="documentf"> + <div class="document"> + <el-button + type="danger" + plain + icon="el-icon-warning" + size="medium" + @click="toleadExport(2)" + >缁撴灉寮傚父</el-button + > + </div> + </div> + </el-col> + <el-col :span="1.5"> + <div class="documentf"> + <div class="document"> + <el-button + type="success" + plain + size="medium" + @click="buidegetTasklist()" + >寰呭姙鏈嶅姟</el-button + > + </div> + </div> + </el-col> + <el-col :span="1.5"> + <div class="documentf"> + <div class="document"> + <el-button + type="primary" + plain + size="medium" + @click="affiliation()" + >鏈汉鎵�灞炴湇鍔�</el-button + > + </div> + </div> + </el-col> + <el-col :span="1.5"> + <div class="documentf"> + <div class="document"> + <el-button type="success" size="medium" @click="onthatday()" + >褰撴棩鏈嶅姟</el-button + > + </div> + </div> + </el-col> + + </el-row> + <el-table + v-loading="loading" + ref="userform" + :data="userList" + :row-class-name="tableRowClassName" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="50" align="center" /> + <el-table-column + label="浠诲姟鍚嶇О" + fixed + width="150" + show-overflow-tooltip + align="center" + key="taskName" + prop="taskName" + /> + <!-- <el-table-column label="搴忓彿" fixed align="center" key="id" prop="id" /> --> + <el-table-column + label="濮撳悕" + width="100" + align="center" + key="sendname" + prop="sendname" + > + <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 + label="浠诲姟鐘舵��" + align="center" + key="sendstate" + prop="sendstate" + width="120" + > + <template slot-scope="scope"> + <el-tooltip + class="item" + effect="dark" + :content="scope.row.remark" + placement="top-start" + > + <div v-if="scope.row.sendstate == 1"> + <el-tag type="primary" :disable-transitions="false" + >琛ㄥ崟宸查鍙�</el-tag + > + </div> + <div v-if="scope.row.sendstate == 2"> + <el-tag type="primary" :disable-transitions="false" + >寰呴殢璁�</el-tag + > + </div> + <div v-if="scope.row.sendstate == 3"> + <el-tag type="success" :disable-transitions="false" + >琛ㄥ崟宸插彂閫�</el-tag + > + </div> + <div v-if="scope.row.sendstate == 4"> + <el-tag type="info" :disable-transitions="false">涓嶆墽琛�</el-tag> + </div> + <div v-if="scope.row.sendstate == 5"> + <el-tag type="danger" :disable-transitions="false" + >鍙戦�佸け璐�</el-tag + > + </div> + <div v-if="scope.row.sendstate == 6"> + <el-tag type="success" :disable-transitions="false" + >宸插畬鎴�</el-tag + > + </div> + </el-tooltip> + </template> + </el-table-column> + <!-- <el-table-column + label="浠诲姟寮傚父璇存槑" + width="120" + align="center" + key="remark" + prop="remark" --> + /> + + <el-table-column + label="澶勭悊鎰忚" + align="center" + key="suggest" + prop="suggest" + width="120" + > + <template slot-scope="scope"> + <dict-tag + :options="dict.type.sys_suggest" + :value="scope.row.suggest" + /> + </template> + </el-table-column> + + <el-table-column + label="闅忚瀹屾垚鏃堕棿" + sortable + align="center" + prop="finishtime" + width="160" + > + <template slot-scope="scope"> + <span>{{ parseTime(scope.row.finishtime) }}</span> + </template> + </el-table-column> + <el-table-column + label="鍑洪櫌鏃ユ湡" + width="200" + align="center" + key="endtime" + prop="endtime" + > + <template slot-scope="scope"> + <span>{{ formatTime(scope.row.endtime) }}</span> + </template></el-table-column + > + <el-table-column + label="涓绘不鍖荤敓" + width="120" + align="center" + key="drname" + prop="drname" + /> + <el-table-column + label="闅忚浜哄憳" + align="center" + key="updateBy" + prop="updateBy" + width="120" + /> + <el-table-column + label="缁忕鍖荤敓" + align="center" + key="managementDoctor" + prop="managementDoctor" + width="120" + /> + <el-table-column + label="鍑洪櫌澶╂暟" + width="120" + align="center" + key="endDay" + prop="endDay" + > + <template slot-scope="scope"> + <span>{{ scope.row.endDay ? scope.row.endDay + "澶�" : "" }}</span> + </template> + </el-table-column> + <el-table-column + label="韬唤璇佸彿鐮�" + width="200" + align="center" + key="sfzh" + prop="sfzh" + /> + <el-table-column + label="鑱旂郴鐢佃瘽" + width="200" + align="center" + key="phone" + prop="phone" + /> + <el-table-column + label="璐d换鎶ゅ+" + width="120" + align="center" + key="nurseName" + prop="nurseName" + /> + + <!-- <el-table-column + label="鐥呭巻鍙�" + align="center" + sortable + key="medicalRecordNo" + prop="medicalRecordNo" + width="120" + /> --> + + <!-- <el-table-column label="骞撮緞" align="center" key="age" prop="age" /> --> + <!-- <el-table-column label="鎬у埆"width="100" align="center" key="sex" prop="sex" /> --> + <!-- <el-table-column label="搴婂彿" align="center" key="badNo" prop="badNo" /> --> + <el-table-column + label="绉戝" + align="center" + key="deptname" + prop="deptname" + width="120" + > + </el-table-column> + <el-table-column + label="鐥呭尯" + align="center" + key="leavehospitaldistrictname" + prop="leavehospitaldistrictname" + width="120" + > + </el-table-column> + + <el-table-column + label="璇婃柇鍚嶇О" + align="center" + key="leavediagname" + prop="leavediagname" + width="120" + :show-overflow-tooltip="true" + > + </el-table-column> + + <el-table-column + label="浣忛櫌婊℃剰搴︽ā鏉垮悕绉�" + align="center" + key="templatename" + prop="templatename" + width="200" + /> + <el-table-column + label="浠诲姟鎵ц鏂瑰紡" + align="center" + key="preachform" + prop="preachform" + width="160" + :show-overflow-tooltip="true" + > + <template slot-scope="scope"> + <span v-for="item in scope.row.preachform">{{ item }}銆� </span> + </template> + </el-table-column> + <!-- <el-table-column + label="浠诲姟鍙戦�佹祦绋�" + align="center" + key="serviceSubtaskRecordList" + prop="serviceSubtaskRecordList" + width="160" + :show-overflow-tooltip="true" + > + <template slot-scope="scope"> + <span v-for="item in scope.row.serviceSubtaskRecordList" + >{{ item.remark }}銆� + </span> + </template> + </el-table-column> --> + <el-table-column + label="浠诲姟缁撴灉璇存槑" + width="220" + align="center" + key="remark" + prop="remark" + > + <template slot-scope="scope" v-if="scope.row.remark"> + <el-tooltip + :content="scope.row.remark" + placement="top" + effect="dark" + > + <el-tag + type="warning" + v-if="scope.row.sendstate != 5 && scope.row.sendstate != 4" + >{{ scope.row.remark }}</el-tag + > + <el-tag type="warning" v-else>{{ scope.row.remark }}</el-tag> + </el-tooltip> + </template> + </el-table-column> + <el-table-column + label="鎿嶄綔" + align="center" + fixed="right" + width="300" + class-name="small-padding fixed-width" + > + <template slot-scope="scope"> + <!-- <el-tooltip + class="item" + effect="dark" + content="鍐嶆闅忚" + placement="top" + > + <el-button + size="medium" + type="text" + v-if="scope.row.isVisitAgain!=2" + @click="followupvisit(scope.row)" + ><span class="button-bb" + ><i class="el-icon-s-promotion"></i>鍐嶆闅忚</span + ></el-button + > + </el-tooltip> + <el-tooltip + v-if="scope.row.sendstate == 1 || scope.row.sendstate == 2" + class="item" + effect="dark" + content="鏆傚仠鏈嶅姟" + placement="top" + > + <el-button + size="medium" + type="text" + @click="handlestop(scope.row)" + v-hasPermi="['system:user:edit']" + ><span class="button-sc" + ><i class="el-icon-remove-outline"></i>鏆傚仠鏈嶅姟</span + ></el-button + > + </el-tooltip> --> + <el-button size="medium" type="text" @click="Seedetails(scope.row)" + ><span class="button-zx" + ><i class="el-icon-s-order"></i>鏌ョ湅璇︽儏</span + ></el-button + > + <el-button + size="medium" + type="text" + @click="handleUpdate(scope.row)" + ><span class="button-textxga" + ><i class="el-icon-edit"></i>鎮h�呰繃婊�</span + ></el-button + > + </template> + </el-table-column> + </el-table> + + <pagination + v-show="total > 0" + :total="total" + :page.sync="topqueryParams.pageNum" + :limit.sync="topqueryParams.pageSize" + @pagination="getList" + /> + </el-row> + <!-- 婊℃剰搴﹀脊妗� --> + <el-dialog + title="闅忚婊℃剰搴﹁瘎鍒�" + :visible.sync="scoreDialogVisible" + width="80%" + :close-on-click-modal="false" + > + <el-table :data="selectedRows" border style="width: 100%"> + <el-table-column + label="濮撳悕" + width="100" + align="center" + prop="sendname" + /> + <el-table-column + label="浠诲姟鍚嶇О" + width="180" + align="center" + prop="taskName" + /> + <!-- 鏂板璇勫垎鍒� --> + <el-table-column + label="鐪熷疄鎬�(20)" + align="center" + key="authenticity" + prop="authenticity" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.authenticity" + :min="0" + :max="20" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="涓�鍛ㄥ唴瀹屾垚(20)" + align="center" + key="weekFinish" + prop="weekFinish" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.weekFinish" + :min="0" + :max="20" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="瑙勮寖鎬�(10)" + align="center" + key="standard" + prop="standard" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.standard" + :min="0" + :max="10" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="鍙婃椂鎬�(10)" + align="center" + key="timeliness" + prop="timeliness" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.timeliness" + :min="0" + :max="10" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="瀹f暀鎯呭喌(10)" + align="center" + key="library" + prop="library" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.library" + :min="0" + :max="10" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="鐜婊℃剰搴�(10)" + align="center" + key="environment" + prop="environment" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.environment" + :min="0" + :max="10" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="鍖荤敓婊℃剰搴�(10)" + align="center" + key="doctorSatisfaction" + prop="doctorSatisfaction" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.doctorSatisfaction" + :min="0" + :max="10" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="鎶ゅ+婊℃剰搴�(10)" + align="center" + key="nurseSatisfaction" + prop="nurseSatisfaction" + width="150" + > + <template slot-scope="scope"> + <el-input-number + v-model="scope.row.nurseSatisfaction" + :min="0" + :max="10" + :step="1" + size="small" + /> + </template> + </el-table-column> + <el-table-column + label="鎬诲垎" + align="center" + key="total" + prop="total" + fixed="right" + > + <template slot-scope="scope"> + <span>{{ calculateTotal(scope.row) }}</span> + </template> + </el-table-column> + </el-table> + + <div slot="footer" class="dialog-footer"> + <el-button @click="scoreDialogVisible = false">鍙栨秷</el-button> + <el-button type="primary" @click="saveScores">淇濆瓨</el-button> + </div> + </el-dialog> + <!-- 娣诲姞鎴栦慨鏀瑰奖鍍忛殢璁垮璇濇 --> + <el-dialog + :title="amendtag ? '淇敼鎮h�呬俊鎭�' : '鏂板鎮h��'" + :visible.sync="Labelchange" + width="900px" + > + <el-form ref="form" :model="form" :rules="rules" label-width="100px"> + <el-row> + <el-col :span="8"> + <el-form-item label="濮撳悕" width="100" prop="name"> + <el-input + v-model="form.name" + placeholder="璇疯緭鍏ュ鍚�" + maxlength="30" + /> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="鎬у埆" width="100" prop="sex"> + <el-select v-model="form.sex" placeholder="璇烽�夋嫨鎬у埆"> + <el-option + v-for="dict in sextype" + :key="dict.value" + :label="dict.label" + :value="dict.value" + ></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="骞撮緞" prop="age"> + <el-input + v-model="form.age" + placeholder="璇疯緭鍏ュ勾榫�" + maxlength="30" + /> + </el-form-item> + </el-col> + </el-row> + <el-row > + <el-col :span="8"> + <el-form-item label="杩囨护鍖荤敓" width="100" prop="filterDrname"> + <el-input + v-model="form.filterDrname" + placeholder="璇疯緭鍏ュ尰鐢熷鍚�" + maxlength="30" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="杩囨护鍘熷洜"> + <el-input + v-model="form.notrequiredreason" + type="textarea" + placeholder="璇疯緭鍏ヨ繃婊ゅ師鍥�" + ></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button type="primary" @click="submitForm">纭� 瀹�</el-button> + <el-button @click="cancel">鍙� 娑�</el-button> + </div> + </el-dialog> + <!-- 淇敼鍙戦�佹椂闂村璇濇 --> + <el-dialog + title="鍙戦�佹椂闂磋缃�" + :visible.sync="modificationVisible" + width="45%" + > + <div style="margin-bottom: 20px; color: red"> + 缁熶竴淇敼褰撳ぉ鏈彂閫佺殑浠诲姟鏃堕棿 + </div> + + <el-form + :model="ruleForm" + :rules="rules" + ref="ruleForm" + label-width="120px" + class="demo-ruleForm" + > + <el-form-item label="鍙戦�佹棩鏈�"> + <el-date-picker + v-model="ruleForm.value1" + type="date" + placeholder="閫夋嫨鏃ユ湡" + > + </el-date-picker> + </el-form-item> + + <el-form-item label="鏃堕棿娈�" prop="type"> + <el-checkbox-group v-model="ruleForm.type"> + <el-checkbox label="涓婂崍" name="type"></el-checkbox> + <el-checkbox label="涓嬪崍" name="type"></el-checkbox> + <el-checkbox label="鏅氫笂" name="type"></el-checkbox> + </el-checkbox-group> + </el-form-item> + <el-form-item label="涓婂崍鏃堕棿鍖洪棿" required> + <el-time-picker + is-range + v-model="ruleForm.value2" + range-separator="鑷�" + start-placeholder="寮�濮嬫椂闂�" + end-placeholder="缁撴潫鏃堕棿" + placeholder="閫夋嫨鏃堕棿鑼冨洿" + > + </el-time-picker> + </el-form-item> + <el-form-item label="涓嬪崍鏃堕棿鍖洪棿" required> + <el-time-picker + is-range + v-model="ruleForm.value3" + range-separator="鑷�" + start-placeholder="寮�濮嬫椂闂�" + end-placeholder="缁撴潫鏃堕棿" + placeholder="閫夋嫨鏃堕棿鑼冨洿" + > + </el-time-picker> + </el-form-item> + <el-form-item label="鏅氫笂鏃堕棿鍖洪棿" required> + <el-time-picker + is-range + v-model="ruleForm.value4" + range-separator="鑷�" + start-placeholder="寮�濮嬫椂闂�" + end-placeholder="缁撴潫鏃堕棿" + placeholder="閫夋嫨鏃堕棿鑼冨洿" + > + </el-time-picker> + </el-form-item> + </el-form> + + <span slot="footer" class="dialog-footer"> + <el-button @click="modificationVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="modificationVisible = false" + >纭� 瀹�</el-button + > + </span> + </el-dialog> + <!-- 鍐嶆闅忚 --> + + </div> +</template> + +<script> +import { + delUser, + addUser, + updateUser, + resetUserPwd, + changeUserStatus, +} from "@/api/system/user"; +import { + getTaskservelist, + buidegetTasklist, + addserviceSubtask, + query360PatInfo, + addsatisfaction, +} from "@/api/AiCentre/index"; +import { alterpatient, particularpatient } from "@/api/patient/homepage"; +import Treeselect from "@riophae/vue-treeselect"; +import store from "@/store"; +import "@riophae/vue-treeselect/dist/vue-treeselect.css"; + +export default { + name: "Discharge", + dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], + components: { Treeselect }, + data() { + return { + // 閬僵灞� + loading: true, + // 閫変腑鏁扮粍 + ids: [], + // 闈炲崟涓鐢� + single: true, + // 闈炲涓鐢� + multiple: true, + // 鏄剧ず鎼滅储鏉′欢 + showSearch: true, + // 鎬绘潯鏁� + total: 0, + // 鐢ㄦ埛琛ㄦ牸鏁版嵁 + userList: null, + // 寮瑰嚭灞傛爣棰� + title: "鏂板褰卞儚闅忚", + // 鏄惁鏄剧ず淇敼銆佹坊鍔犲脊鍑哄眰 + addalteropen: false, + // 淇敼鍙戦�佹椂闂村璇濇 + modificationVisible: false, + // 閮ㄩ棬鍚嶇О + deptName: undefined, + // 榛樿瀵嗙爜 + initPassword: undefined, + // 鏃ユ湡鑼冨洿 + dateRange: [], + dateRangefs: [], + // 宀椾綅閫夐」 + postOptions: [], + ruleForm: { + type: [], + }, + zcform: {}, + dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」 + inputVisible: false, + Labelchange: false, + ycvalue: "", + yfsvalue: "", + inputValue: "", + preachform: "", + previewVisible: false, //褰卞儚闅忚棰勮寮规 + radio: "", + radios: [], + previewtype: 2, //棰勮褰卞儚闅忚绫诲瀷 + total: 0, // 鎬绘潯鏁� + // 婊℃剰搴﹁皟鏌ユ暟鎹� + scoreDialogVisible: false, + selectedRows: [], + + value: [], + list: [], + + sourcetype: [ + { + value: 1, + label: "绉戝", + children: [], + }, + { + value: 2, + label: "鐥呭尯", + children: [], + }, + { + value: 3, + label: "鍏ㄩ儴", + }, + ], + loading: false, + cardlist: [ + { + name: "鏈嶅姟鎬婚噺", + value: 0, + }, + // { + // name: "鎮h�呰繃婊�", + // value: 0, + // }, + { + name: "搴旈殢璁�", + value: 0, + }, + { + name: "鍙戦�佸け璐�", + value: 0, + }, + { + name: "寰呴殢璁�", + value: 0, + }, + // { + // name: "宸插彂閫�", + // value: 0, + // }, + + // { + // name: "琛ㄥ崟宸插彂閫�", + // value: 0, + // }, + ], + zcrules: { + date1: [ + { required: true, message: "璇烽�夋嫨闅忚鏂瑰紡", trigger: "change" }, + ], + resource: [ + { required: true, message: "璇烽�夋嫨闅忚鏃堕棿", trigger: "blur" }, + ], + }, + // 琛ㄥ崟鍙傛暟 + form: { + phonenumber: "", + totagid: "", + types: "", + nickName: "", + qystatus: "", + btstatus: "", + }, + topicoptionssort: [ + { + value: 0, + label: "鍑洪櫌鏃堕棿(姝e簭)", + }, + { + value: 1, + label: "鍑洪櫌鏃堕棿(鍊掑簭)", + }, + { + value: 2, + label: "鍙戦�佹椂闂�(姝e簭)", + }, + { + value: 3, + label: "鍙戦�佹椂闂�(鍊掑簭)", + }, + ], + // 鏌ヨ鍙傛暟 + topqueryParams: { + pageNum: 1, + pageSize: 10, + sendstate: 6, + sort: 2, //0 鍑洪櫌鏃堕棿(姝e簭) 1 鍑洪櫌鏃堕棿(鍊掑簭) 2 鍙戦�佹椂闂�(姝e簭) 3 鍙戦�佹椂闂�(鍊掑簭) + serviceType: 6, + searchscope: 3, + visitCount: 1, + scopetype: [], + leaveldeptcodes: [], + leavehospitaldistrictcodes: [], + }, + propss: { multiple: true }, + options: [], + + topicoptions: [ + { + value: null, + label: "鍏ㄩ儴", + }, + { + value: 1, + label: "琛ㄥ崟宸查鍙�", + }, + { + value: 2, + label: "寰呴殢璁�", + }, + { + value: 3, + label: "琛ㄥ崟宸插彂閫�", + }, + { + value: 4, + label: "涓嶆墽琛�", + }, + { + value: 5, + label: "鍙戦�佸け璐�", + }, + { + value: 6, + label: "宸插畬鎴�", + }, + ], + sextype: [ + { + value: 1, + label: "鐢�", + }, + { + value: 2, + label: "濂�", + }, + ], + topicoptionsyj: [ + { + value: 1, + label: "寮傚父", + }, + { + value: 0, + label: "姝e父", + }, + ], + 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", + }, + }, + }, + amendtag: false, + errtype: "", + leavehospitaldistrictcode: "", + serviceState: [], + checkboxlist: [], + // 琛ㄥ崟鏍¢獙 + rules: {}, + }; + }, + watch: {}, + created() { + this.serviceState = store.getters.serviceState; + this.checkboxlist = store.getters.checkboxlist; + this.errtype = this.$route.query.errtype; + this.leavehospitaldistrictcode = + this.$route.query.leavehospitaldistrictcode; + this.sourcetype[0].children = store.getters.belongDepts.map((dept) => { + return { + label: dept.deptName, + value: dept.deptCode, + }; + }); + this.sourcetype[1].children = store.getters.belongWards.map((dept) => { + return { + label: dept.districtName, + value: dept.districtCode, + }; + }); + if (this.errtype) { + this.toleadExport(2); + } else { + this.getList(1); + } + this.getConfigKey("sys.user.initPassword").then((response) => { + this.initPassword = response.msg; + }); + }, + activated() { + this.getList(1); + }, + methods: { + /** 鏌ヨ闅忚鏈嶅姟鍒楄〃 */ + getList(refresh) { + // 榛樿鍏ㄩ儴 + + if (this.topqueryParams.searchscope == 3) { + this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map( + (obj) => obj.deptCode + ); + this.topqueryParams.leavehospitaldistrictcodes = + store.getters.belongWards.map((obj) => obj.districtCode); + } + // 鎺ュ彈寮傚父璺宠浆 + if (this.errtype) { + this.topqueryParams.leavehospitaldistrictcodes.push( + this.leavehospitaldistrictcode + ); + console.log(this.topqueryParams.leavehospitaldistrictcodes, "11"); + } + this.loading = true; + if ( + this.topqueryParams.leavehospitaldistrictcodes[0] && + this.topqueryParams.leaveldeptcodes[0] + ) { + this.topqueryParams.deptOrDistrict = 2; + } else { + this.topqueryParams.deptOrDistrict = 1; + } + getTaskservelist(this.topqueryParams).then((response) => { + this.userList = response.rows[0].serviceSubtaskList; + this.total = response.total; + if (refresh) { + this.cardlist[0].value = + Number(response.rows[0].wzx) + Number(response.rows[0].ysf); + // this.cardlist[1].value = response.rows[0].wzx; + this.cardlist[1].value = response.rows[0].ysf; + this.ycvalue = response.rows[0].yc; + this.cardlist[2].value = response.rows[0].fssb; + this.cardlist[3].value = response.rows[0].dsf; + // this.cardlist[4].value = response.rows[0].yfs2; + this.yfsvalue = response.rows[0].yfs; + } + this.loading = false; + this.userList.forEach((item) => { + let idArray = null; + if (item.endtime) { + item.endDay = this.daysBetween(item.endtime); + } + + if (item.preachform) { + if (item.endtime) { + item.preachformson = item.preachform; + idArray = item.preachform.split(","); + } + + item.preachform = idArray.map((value) => { + // 鏌ユ壘id瀵瑰簲鐨勫璞� + const item = this.checkboxlist.find( + (item) => item.value == value + ); + // 濡傛灉鎵惧埌瀵瑰簲鐨刬d锛岃繑鍥瀕abel鍊硷紝鍚﹀垯杩斿洖null + return item ? item.label : null; + }); + } + }); + this.total = response.total; + }); + }, + affiliation() { + this.topqueryParams.drcode = store.getters.hisUserId; + this.topqueryParams.nurseId = store.getters.hisUserId; + this.topqueryParams.managementDoctor = store.getters.name; + this.getList(1); + }, + onthatday() { + this.topqueryParams.startSendDateTime = this.getCurrentDate(); + this.topqueryParams.endSendDateTime = this.getCurrentDate(); + this.getList(1); + }, + getCurrentDate() { + const now = new Date(); + return now.toISOString().slice(0, 10); // 鎴彇鍓�10涓瓧绗︼紝鍗� YYYY-MM-DD + }, + buidegetTasklist(type) { + if (this.topqueryParams.searchscope == 3) { + this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map( + (obj) => obj.deptCode + ); + this.topqueryParams.leavehospitaldistrictcodes = + store.getters.belongWards.map((obj) => obj.districtCode); + } + // 鎺ュ彈寮傚父璺宠浆 + if (this.errtype) { + this.topqueryParams.leavehospitaldistrictcodes.push( + this.leavehospitaldistrictcode + ); + } + let obj = { + pageNum: 1, + pageSize: 10, + leavehospitaldistrictcodes: + this.topqueryParams.leavehospitaldistrictcodes, + sendstates: [2, 3], + leaveldeptcodes: this.topqueryParams.leaveldeptcodes, + }; + buidegetTasklist(obj).then((response) => { + this.userList = response.rows[0].serviceSubtaskList; + this.total = response.total; + if (refresh) { + this.cardlist[0].value = + Number(response.rows[0].wzx) + Number(response.rows[0].ysf); + this.cardlist[1].value = response.rows[0].wzx; + this.cardlist[2].value = response.rows[0].ysf; + this.ycvalue = response.rows[0].yc; + this.cardlist[3].value = response.rows[0].fssb; + this.cardlist[4].value = response.rows[0].dsf; + // this.cardlist[5].value = response.rows[0].yfs2; + this.yfsvalue = response.rows[0].yfs; + } + this.loading = false; + this.userList.forEach((item) => { + let idArray = null; + if (item.endtime) { + item.endDay = this.daysBetween(item.endtime); + } + + if (item.preachform) { + if (item.endtime) { + item.preachformson = item.preachform; + idArray = item.preachform.split(","); + } + + item.preachform = idArray.map((value) => { + // 鏌ユ壘id瀵瑰簲鐨勫璞� + const item = this.checkboxlist.find( + (item) => item.value == value + ); + // 濡傛灉鎵惧埌瀵瑰簲鐨刬d锛岃繑鍥瀕abel鍊硷紝鍚﹀垯杩斿洖null + return item ? item.label : null; + }); + } + }); + this.total = response.total; + }); + }, + // 鏌ョ湅闂ㄨ瘖闅忚璇︽儏 + Referencequestion(row) { + this.previewVisible = true; + }, + // 娣诲姞寮规鎼滅储 + remoteMethod(query) { + if (query !== "") { + this.loading = true; + setTimeout(() => { + this.loading = false; + this.options = this.list.filter((item) => { + return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1; + }); + }, 200); + } else { + this.options = []; + } + }, + // 褰卞儚闅忚鐘舵�佷慨鏀� + handleStatusChange(row) { + let text = row.status === "0" ? "鍚敤" : "鍋滅敤"; + this.$modal + .confirm('纭瑕�"' + text + '""' + row.userName + '"鐢ㄦ埛鍚楋紵') + .then(function () { + return changeUserStatus(row.userId, row.status); + }) + .then(() => { + this.$modal.msgSuccess(text + "鎴愬姛"); + }) + .catch(function () { + row.status = row.status === "0" ? "1" : "0"; + }); + }, + + // 琛ㄥ崟閲嶇疆 + reset() { + this.form = { + userId: undefined, + deptId: undefined, + userName: undefined, + nickName: undefined, + password: undefined, + phonenumber: undefined, + email: undefined, + sex: undefined, + status: "0", + remark: undefined, + postIds: [], + roleIds: [], + }; + this.resetForm("form"); + }, + /** 鎼滅储鎸夐挳鎿嶄綔 */ + handleQuery(refresh) { + if (this.topqueryParams.searchscope == 3) { + this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map( + (obj) => obj.deptCode + ); + this.topqueryParams.leavehospitaldistrictcodes = + store.getters.belongWards.map((obj) => obj.districtCode); + } + this.topqueryParams.pageNum = 1; + this.topqueryParams.startOutHospTime = this.dateRange[0]; + this.topqueryParams.endOutHospTime = this.dateRange[1]; + this.topqueryParams.startSendDateTime = this.dateRangefs[0]; + this.topqueryParams.endSendDateTime = this.dateRangefs[1]; + this.getList(refresh); + }, + // 鎮h�呰寖鍥村鐞� + handleChange(value) { + let type = value[0]; + let code = value.slice(-1)[0]; + this.topqueryParams.leavehospitaldistrictcodes = []; + this.topqueryParams.leaveldeptcodes = []; + if (type == 1) { + this.topqueryParams.leaveldeptcodes.push(code); + this.topqueryParams.leavehospitaldistrictcodes = []; + this.topqueryParams.searchscope = 1; + } else if (type == 2) { + this.topqueryParams.leavehospitaldistrictcodes.push(code); + this.topqueryParams.leaveldeptcodes = []; + this.topqueryParams.searchscope = 2; + } else { + this.topqueryParams.searchscope = 3; + } + }, + /** 閲嶇疆鎸夐挳鎿嶄綔 */ + resetQuery() { + this.dateRange = []; + this.dateRangefs = []; + this.topqueryParams = { + pageNum: 1, + pageSize: 10, + sendstate: 6, + sort: 2, //0 鍑洪櫌鏃堕棿(姝e簭) 1 鍑洪櫌鏃堕棿(鍊掑簭) 2 鍙戦�佹椂闂�(姝e簭) 3 鍙戦�佹椂闂�(鍊掑簭) + serviceType: 6, + searchscope: 3, + visitCount: 1, + scopetype: [], + leaveldeptcodes: [], + leavehospitaldistrictcodes: [], + }; + this.handleQuery(1); + }, + handleSelectionChange(rows) { + this.selectedRows = rows.map((row) => { + // 鍒濆鍖栬瘎鍒嗗瓧娈� + return { + ...row, + authenticity: row.authenticity || 0, + weekFinish: row.weekFinish || 0, + standard: row.standard || 0, + timeliness: row.timeliness || 0, + library: row.library || 0, + environment: row.environment || 0, + doctorSatisfaction: row.doctorSatisfaction || 0, + nurseSatisfaction: row.nurseSatisfaction || 0, + }; + }); + + if (this.selectedRows.length > 0) { + this.multiple = false; + } else { + this.multiple = true; + } + }, + + // 璁$畻鎬诲垎 + calculateTotal(row) { + return ( + (row.authenticity || 0) + + (row.weekFinish || 0) + + (row.standard || 0) + + (row.timeliness || 0) + + (row.library || 0) + + (row.environment || 0) + + (row.doctorSatisfaction || 0) + + (row.nurseSatisfaction || 0) + ); + }, + + // 淇濆瓨璇勫垎 + saveScores() { + this.selectedRows.forEach((item) => { + item.createBy = null; + item.patName = item.sendname; + item.hospitaldistrictname = item.leavehospitaldistrictname; + }); + addsatisfaction(this.selectedRows).then((res) => { + if (res.code == 200) { + this.$message.success("璇勫垎淇濆瓨鎴愬姛"); + this.scoreDialogVisible = false; + this.selectedRows=[]; + this.$refs.userform.clearSelection() + } else { + this.$modal.msgWarning("璇勫垎淇濆瓨澶辫触"); + this.scoreDialogVisible = false; + this.selectedRows=[]; + this.$refs.userform.clearSelection() + } + }); + // 杩欓噷鍙互娣诲姞淇濆瓨閫昏緫锛屽璋冪敤API淇濆瓨璇勫垎 + }, + //鍒犻櫎閫夐」 + handleClose(tag) { + this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1); + }, + //瑙﹀彂鏂板杈撳叆 + showInput() { + this.inputVisible = true; + this.$nextTick((_) => { + this.$refs.saveTagInput.$refs.input.focus(); + }); + }, + //鑾峰彇澶卞幓鐒︾偣瑙﹀彂 + handleInputConfirm() { + let inputValue = this.inputValue; + if (inputValue) { + this.dynamicTags.push(inputValue); + } + this.inputVisible = false; + this.inputValue = ""; + }, + /** 鏂板鎸夐挳鎿嶄綔 */ + handleAdd() { + this.$router.push({ + path: "/followvisit/QuestionnaireTask", + query: { + type: 2, + serviceType: 6, + }, + }); + }, + //鎮h��360璺宠浆 + gettoken360(sfzh, drcode, drname) { + this.$modal.msgWarning('360鍔熻兘鏆傛湭寮�閫�'); + return; // 闃绘鍚庣画浠g爜鎵ц + 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鏌ヨ鏃犵粨鏋�"); + } + }); + }, + + /** 閲嶇疆瀵嗙爜鎸夐挳鎿嶄綔 */ + handleResetPwd(row) { + this.$prompt('璇疯緭鍏�"' + row.userName + '"鐨勬柊瀵嗙爜', "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + closeOnClickModal: false, + inputPattern: /^.{5,20}$/, + inputErrorMessage: "鐢ㄦ埛瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿", + }) + .then(({ value }) => { + resetUserPwd(row.userId, value).then((response) => { + this.$modal.msgSuccess("淇敼鎴愬姛锛屾柊瀵嗙爜鏄細" + value); + }); + }) + .catch(() => {}); + }, + // 鍙栨秷鎸夐挳 + cancel() { + this.Labelchange = false; + this.reset(); + }, + /** 鎻愪氦鎸夐挳 */ + submitForm: function () { + this.$refs["form"].validate((valid) => { + if (valid) { + this.form.isoperation = 2; + this.form.notrequiredFlag = 1; + alterpatient(this.form) + .then((response) => { + console.log(response); + }) + .then(() => { + this.getList(1); + this.$modal.msgSuccess("鎮h�呰繃婊ゆ垚鍔�"); + }); + + this.reset(); + this.Labelchange = false; + } + }); + }, + /** 鍒犻櫎鎸夐挳鎿嶄綔 */ + handleDelete(row) { + const userIds = row.userId || this.ids; + this.$modal + .confirm('鏄惁纭鍒犻櫎鐢ㄦ埛缂栧彿涓�"' + userIds + '"鐨勬暟鎹」锛�') + .then(function () { + return delUser(userIds); + }) + .then(() => { + this.getList(1); + this.$modal.msgSuccess("鍒犻櫎鎴愬姛"); + }) + .catch(() => {}); + }, + // 鍏ㄩ儴鍋滄 + AllStop() { + this.$modal + .confirm("鏄惁鍋滄鍏ㄩ儴浠诲姟锛�") + .then(function () { + return console.log("鍋滄鎴愬姛"); + }) + .then(() => { + this.getList(1); + this.$modal.msgWarning("鍋滄鎴愬姛"); + }) + .catch(() => {}); + }, + // 鍏ㄩ儴寮�濮� + AllStarted() { + this.$modal + .confirm("鏄惁寮�鍚叏閮ㄤ换鍔★紵") + .then(function () { + return console.log("寮�鍚垚鍔�"); + }) + .then(() => { + this.getList(1); + this.$modal.msgSuccess("寮�鍚垚鍔�"); + }) + .catch(() => {}); + }, + // 浠诲姟閲嶇疆 + TaskReset() { + this.$modal + .confirm("鏄惁閲嶇疆閫変腑鐨勪换鍔¢」锛�") + .then(function () { + return console.log("閫変腑鎴愬姛"); + }) + .then(() => { + this.getList(1); + this.$modal.msgSuccess("閲嶇疆鎴愬姛"); + }) + .catch(() => {}); + }, + // 璁剧疆鍙戦�佹椂闂� + Sendtimesetting() { + this.modificationVisible = true; + }, + // 璺宠浆璇︽儏椤� + Seedetails(row) { + let type = ""; + console.log(row, "rwo"); + if (row.preachformson) { + if (row.preachformson.includes("3")) { + type = 1; + } + } + this.$router.push({ + path: "/followvisit/record/detailpage/", + query: { + taskid: row.taskid, + patid: row.patid, + id: row.id, + Voicetype: type, + visitCount: this.topqueryParams.visitCount, + }, + }); + }, + + onSubmit() {}, + // 鏆傚仠鏈嶅姟 + handlestop(row) { + let objson = row; + this.$modal + .confirm( + '鏄惁纭鏆傚仠浠诲姟鍚嶇О涓�"' + + row.taskName + + '鎮h�呭悕绉颁负"' + + row.sendname + + '"鐨勬暟鎹」锛�' + ) + .then(() => { + getTaskservelist({ + patid: row.patid, + taskid: row.taskid, + }).then((res) => { + if (res.code == 200) { + objson.sendstate = 4; + objson.remark = "鏈嶅姟鏆傚仠"; + Editsingletaskson(objson).then((res) => { + if (res.code) { + this.$modal.msgSuccess("璁板綍鎴愬姛"); + this.getList(1); + } + }); + } + }); + }) + .catch(() => {}); + }, + // 鎮h�呰繃婊よЕ鍙� + handleUpdate(row) { + particularpatient(row.patid).then((response) => { + this.form = response.data; + this.form.filterDrname = store.getters.nickName; + }); + this.amendtag = true; + this.Labelchange = true; + }, + // 渚挎嵎鎸夐挳 + toleadExport(too) { + if (too == 1) { + this.topqueryParams.sendstate = 4; + this.topqueryParams.excep = null; + } else if (too == 2) { + this.topqueryParams.excep = 1; + } + this.handleQuery(); + }, + /** 瀵煎嚭鎸夐挳鎿嶄綔 */ + handleExport() { + this.topqueryParams.pageNum = null; + this.topqueryParams.pageSize = null; + this.download( + "smartor/serviceSubtask/patItemExport", + { + ...this.topqueryParams, + }, + `user_${new Date().getTime()}.xlsx` + ); + }, + // 寮傚父鍒楁覆鏌� + tableRowClassName({ row, rowIndex }) { + if (row.excep == 1) { + return "warning-row"; + } + return ""; + }, + + 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}`; + }, + }, +}; +</script> + +<style lang="scss" scoped> +.el-button--primary.is-plain { + color: #ffffff; + background: #409eff; + border-color: #4fabe9; +} + +.document { + // width: 100px; + height: 50px; +} +::v-deep.el-table .warning-row { + background: #eec4c4; +} + +.documentf { + display: flex; + justify-content: flex-end; +} + +.download { + text-align: center; + + .el-upload__tip { + font-size: 23px; + } + + .el-upload__text { + font-size: 23px; + } +} + +.uploading { + margin-top: 20px; + margin: 20px; + padding: 30px; + background: #ffffff; + border: 1px solid #dcdfe6; + -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), + 0 0 6px 0 rgba(0, 0, 0, 0.04); +} + +.el-tag + .el-tag { + margin-left: 10px; +} + +.button-new-tag { + margin-left: 10px; + height: 32px; + line-height: 30px; + padding-top: 0; + padding-bottom: 0; +} + +.input-new-tag { + width: 90px; + margin-left: 10px; + vertical-align: bottom; +} + +.drexamine { + display: flex; + align-items: center; + justify-content: center; + padding: 30px; + background: #daeaf5; + + img { + width: 100px; + height: 100px; + } +} + +.qrcode-dialo { + // text-align: center; + // display: flex; + margin: 20px; + padding: 30px; + background: #edf1f7; + border: 1px solid #dcdfe6; + -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), + 0 0 6px 0 rgba(0, 0, 0, 0.04); + + .topic-dev { + margin-bottom: 25px; + font-size: 20px !important; + + .dev-text { + margin-bottom: 10px; + } + } +} +::v-deep.leftvlue .el-card__body { + background: #d0e9fd; +} +::v-deep.leftvlue .el-card__body:hover { + background: #8dc8f8; + cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */ +} +::v-deep.errleftvlue .el-card__body { + background: #fdd0d7; +} +::v-deep.errleftvlue .el-card__body:hover { + background: #f88d96; + cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */ +} + +::v-deep.ysfleftvlue .el-card__body { + background: #d0fdd8; +} +::v-deep.ysfleftvlue .el-card__body:hover { + background: #8df8a4; + cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */ +} +.button-bb { + font-weight: 500; + background-color: #2ba05c; + padding: 5px; + border-radius: 1px; + color: #ffffff; +} +.button-xq { + font-weight: 500; + background-color: #409eff; + padding: 5px; + border-radius: 1px; + color: #ffffff; +} +.button-sc { + font-weight: 500; + background-color: #b3a21f; + padding: 5px; + border-radius: 1px; + color: #ffffff; +} +.button-zx { + background: #4fabe9; + padding: 5px; + border-radius: 1px; + color: #ffffff; +} + +::v-deep.el-radio-group { + span { + font-size: 24px; + } +} +.purple-button { + background-color: #7e22ce; + border-color: #7e22ce; + color: #fff; +} + +.purple-button:hover, +.purple-button:focus { + background-color: #9333ea; + border-color: #9333ea; +} + +.purple-button:active { + background-color: #6b21a8; + border-color: #6b21a8; +} + +.purple-button.is-disabled { + background-color: #d8b4fe; + border-color: #d8b4fe; + opacity: 1; /* 淇濇寔绂佺敤鐘舵�侀�忔槑搴� */ +} +// 閫夐」瀛椾綋鏀惧ぇ +// ::v-deep.el-checkbox-group { +// span { +// font-size: 24px; +// } +// } +</style> diff --git a/src/views/knowledge/questionnaire/compilequer/index.vue b/src/views/knowledge/questionnaire/compilequer/index.vue index bc81908..005f434 100644 --- a/src/views/knowledge/questionnaire/compilequer/index.vue +++ b/src/views/knowledge/questionnaire/compilequer/index.vue @@ -262,7 +262,7 @@ <el-option class="ruleFormaa" v-for="item in flatArray" - :key="item.deptCode" + :key="item.id" :label="item.label" :value="item.deptCode" > @@ -285,7 +285,7 @@ <el-option class="ruleFormaa" v-for="item in flatArray" - :key="item.deptCode" + :key="item.id" :label="item.label" :value="item.deptCode" > @@ -566,10 +566,10 @@ </el-form-item></el-col > <el-col :span="12" - ><el-form-item label="鏄惁鍙敤"> - <el-radio-group v-model="topicobj.isenable"> + ><el-form-item label="鏄惁闅愯棌"> + <el-radio-group v-model="topicobj.ishide"> <el-radio - v-for="(item, index) in usable" + v-for="(item, index) in hides" :label="item.value" >{{ item.label }}</el-radio > @@ -582,8 +582,8 @@ v-if="topicobj.scriptType == 1" > <el-radio-group v-model="topicobj.branchFlag"> - <el-radio :label="1">鏄�</el-radio> - <el-radio :label="0">鍚�</el-radio> + <el-radio label="1">鏄�</el-radio> + <el-radio label="0">鍚�</el-radio> </el-radio-group> </el-form-item> <el-form-item label="閫変腑鎻愮ず" v-if="topicobj.scriptType != 1"> @@ -656,6 +656,12 @@ <el-radio-group v-model="item.isabnormal"> <el-radio :label="1">鏄�</el-radio> <el-radio :label="0">鍚�</el-radio> + </el-radio-group> + </el-form-item> + <el-form-item label="鏄惁閫変腑鏀堕泦闄勫姞淇℃伅"> + <el-radio-group v-model="item.appendflag"> + <el-radio label="1">鏄�</el-radio> + <el-radio label="0">鍚�</el-radio> </el-radio-group> </el-form-item> </el-row> @@ -749,9 +755,7 @@ > <el-button type="primary" @click="laststep()">涓婁竴姝�</el-button> <el-button type="info" @click="closeFm('ruleForm')">鍏抽棴</el-button> - <el-button @click="toExamine('ruleForm')" - >淇濆瓨闂鏁版嵁</el-button - > + <el-button @click="toExamine('ruleForm')">淇濆瓨闂鏁版嵁</el-button> </div> <!-- 闂嵎棰勮 --> <div v-if="Editprogress == 3"> @@ -1215,8 +1219,8 @@ style="width: 100px; height: 100px" :src="item.picturePath" :preview-src-list=" - item.picturePath ? [item.picturePath] : [] - " + item.picturePath ? [item.picturePath] : [] + " > </el-image> </div> @@ -1299,6 +1303,7 @@ svyTemplateLibScripts: [], tempDetpRelevances: [], svyLibTemplateTagList: [], + suitway: [], scoreType: "4", isenable: "0", longTemp: "0", @@ -1404,6 +1409,10 @@ usable: [ { value: "0", label: "鍙敤" }, { value: "1", label: "鍋滅敤" }, + ], + hides: [ + { value: 0, label: "姝e父" }, + { value: 1, label: "闅愯棌" }, ], longtype: [ { value: "0", label: "鏅�氫换鍔�" }, @@ -1622,8 +1631,8 @@ this.confirmillness(); this.putbelongDepts(); this.$modal.closeLoading(); - // this.$router.go(-1); - window.location.reload(); + this.$router.go(-1); + // window.location.reload(); }); } else { this.ruleForm.isoperation = 1; @@ -1643,8 +1652,8 @@ // 棰樼洰鏍¢獙 toExamine() { // 閬嶅巻棰樼洰闆嗗悎 - for (let i = 0; i < this.ruleForm.svyTemplateLibScripts.length; i++) { - const question = this.ruleForm.svyTemplateLibScripts[i]; + for (let i = 0; i < this.ruleForm.svyTemplateLibScripts.length; i++) { + const question = this.ruleForm.svyTemplateLibScripts[i]; // 濡傛灉 scriptType 涓� 4锛屽垯璺宠繃褰撳墠棰樼洰 if (question.scriptType === 4) { @@ -1675,7 +1684,7 @@ // 濡傛灉鎵�鏈夐鐩兘鏍¢獙閫氳繃锛岃繑鍥� true console.log("鎵�鏈夐鐩牎楠岄�氳繃锛岄�夐」鍚嶇О鏃犻噸澶�"); - this.Departmenttreatment(); + this.Departmenttreatment(); }, // 绉戝/闄㈠尯澶勭悊 diff --git a/src/views/loginSSO.vue b/src/views/loginSSO.vue new file mode 100644 index 0000000..6cd082c --- /dev/null +++ b/src/views/loginSSO.vue @@ -0,0 +1,160 @@ +<template> + <div class="sso-redirect"> + <div class="loading-container"> + <el-alert + v-if="errorMessage" + :title="errorMessage" + type="error" + :closable="false" + show-icon + ></el-alert> + <div v-else class="loading-content"> + <i class="el-icon-loading"></i> + <p>鍗曠偣鐧诲綍涓紝璇风◢鍊�...</p> + </div> + </div> + </div> +</template> + +<script> +import { setToken } from "@/utils/auth"; + +export default { + name: "SSORedirect", + data() { + return { + errorMessage: "", + loading: true, + }; + }, + created() { + this.handleSSORedirect(); + }, + methods: { + // 鍖归厤orgid + mateOrgid(orgid) { + if (orgid == "30001002") { + localStorage.setItem("orgname", "娴欐睙鐪佺珛鍚屽痉鍖婚櫌缈犺嫅闄㈠尯"); + localStorage.setItem("ZuHuID", "1400361376454545408"); + localStorage.setItem("deptCode", "1017"); + } else if (orgid == "30001003") { + localStorage.setItem("orgname", "娴欐睙鐪佺珛鍚屽痉鍖婚櫌涔嬫睙闄㈠尯"); + localStorage.setItem("ZuHuID", "1400360867068907520"); + localStorage.setItem("deptCode", "01040201"); + } else if (orgid == "30001004") { + localStorage.setItem("orgname", "娴欐睙鐪佺珛鍚屽痉鍖婚櫌闂叉灄闄㈠尯"); + localStorage.setItem("ZuHuID", "1429338802177000002"); + localStorage.setItem("deptCode", ""); + } else if (orgid == "30001005") { + localStorage.setItem("orgname", "娴欐睙鐪佺珛鍚屽痉鍖婚櫌澶╃洰灞辫矾闄㈠尯"); + localStorage.setItem("ZuHuID", "1429338802177000003"); + localStorage.setItem("deptCode", ""); + } else if (orgid == "30001006") { + localStorage.setItem("orgname", "娴欐睙鐪佺珛鍚屽痉鍖婚櫌闈掑北婀栭櫌鍖�"); + localStorage.setItem("ZuHuID", "1429338802177000004"); + localStorage.setItem("deptCode", ""); + } else if (orgid == "30001007") { + localStorage.setItem("orgname", "娴嬭瘯闄㈠尯"); + localStorage.setItem("ZuHuID", "1429338802177000005"); + localStorage.setItem("deptCode", ""); + } + }, + async handleSSORedirect() { + try { + console.log(11); + // 浠嶶RL鍙傛暟涓幏鍙杢oken鍜屾満鏋勪俊鎭� + let { token, orgid, orgname, ZuHuID, deptCode } = this.$route.query; + // token = + // "eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6Ijc5MWVkODNlLWE2MWYtNDI2MS05ZDZlLTNhOTVjYTU2YjZhMiJ9.q6jrRj8fwtb3FOqqwaxIFDr824hf85DW8heCj4qWYgRE55Pn0vkmcujFsYMrz9qqo047Gl7lv3rnok8pk7SKYQ"; // 楠岃瘉蹇呰鍙傛暟 + // orgid = "30001002"; + if (!token) { + throw new Error("缂哄皯璁よ瘉浠ょ墝(token)"); + } + console.log(token); + console.log(orgid); + console.log(orgname); + // console.log(redirect,'redirect'); + + this.mateOrgid(orgid); + setToken(token); + this.$store.commit("SET_TOKEN", token); + + // 瀛樺偍鏈烘瀯淇℃伅鍒發ocalStorage + if (orgid) { + localStorage.setItem("orgid", orgid); + this.$store.dispatch("UpdateOrgId", orgid); + } + if (orgname) localStorage.setItem("orgname", orgname); + if (ZuHuID) localStorage.setItem("ZuHuID", ZuHuID); + if (deptCode) localStorage.setItem("deptCode", deptCode); + + // 鑾峰彇鐢ㄦ埛淇℃伅 + await this.$store.dispatch("GetInfo"); + + // 纭畾閲嶅畾鍚戣矾寰� + let redirectPath = "/index"; + // if (redirect) { + // console.log(redirect,'888'); + + // redirectPath = decodeURIComponent(redirect); + // } else { + // 鏍规嵁鐢ㄦ埛瑙掕壊鍐冲畾榛樿璺宠浆椤甸潰 + const roles = this.$store.state.user.roles; + const username = this.$store.state.user.name; + + if (roles.includes("admin") || username === "admin") { + redirectPath = "/index"; + } else { + redirectPath = "/followvisit/discharge"; + } + // } + + // 璺宠浆鍒扮洰鏍囬〉闈� + this.$router.replace({ path: redirectPath }); + } catch (error) { + console.error("SSO鐧诲綍澶辫触:", error); + this.errorMessage = `鍗曠偣鐧诲綍澶辫触: ${error.message || "鏈煡閿欒"}`; + this.loading = false; + + // 5绉掑悗璺宠浆鍒版櫘閫氱櫥褰曢〉 + setTimeout(() => { + this.$router.replace("/login"); + }, 5000); + } + }, + }, +}; +</script> + +<style scoped> +.sso-redirect { + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + background-color: #f5f7fa; +} + +.loading-container { + text-align: center; + padding: 20px; + background: white; + border-radius: 4px; + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); +} + +.loading-content { + padding: 20px; +} + +.el-icon-loading { + font-size: 40px; + color: #409eff; + margin-bottom: 10px; +} + +p { + margin: 0; + color: #606266; +} +</style> diff --git a/src/views/outsideChainwtnew.vue b/src/views/outsideChainwtnew.vue index 37858aa..178d0d6 100644 --- a/src/views/outsideChainwtnew.vue +++ b/src/views/outsideChainwtnew.vue @@ -19,6 +19,7 @@ class="topic-dev" v-for="(item, index) in questionList" :key="item.aaa" + v-if="!item.ishide" > <div class="scriptTopic-dev" :key="index" v-if="item.scriptType == 1"> <div class="dev-text"> diff --git a/src/views/patient/patient/outpatient.vue b/src/views/patient/patient/outpatient.vue index 06406f8..9b5729a 100644 --- a/src/views/patient/patient/outpatient.vue +++ b/src/views/patient/patient/outpatient.vue @@ -67,16 +67,16 @@ ></el-cascader> </el-form-item> <el-form-item label="灏辫瘖鏃ユ湡"> - <el-date-picker - v-model="dateRange" - style="width: 240px" - value-format="yyyy-MM-dd" - type="daterange" - range-separator="-" - start-placeholder="寮�濮嬫棩鏈�" - end-placeholder="缁撴潫鏃ユ湡" - ></el-date-picker> - <!-- <el-date-picker + <el-date-picker + v-model="dateRange" + style="width: 240px" + value-format="yyyy-MM-dd" + type="daterange" + range-separator="-" + start-placeholder="寮�濮嬫棩鏈�" + end-placeholder="缁撴潫鏃ユ湡" + ></el-date-picker> + <!-- <el-date-picker v-model="dateRange" type="datetimerange" value-format="yyyy-MM-dd HH:mm:ss" @@ -85,7 +85,7 @@ :default-time="['12:00:00']" > </el-date-picker> --> - </el-form-item> + </el-form-item> <el-row> <!-- <el-form-item label=" 灏辫瘖鏃ユ湡 " prop="admitdate"> <el-date-picker @@ -150,6 +150,18 @@ @click="handleDelete" v-hasPermi="['system:user:remove']" >鍒犻櫎</el-button + > + </el-col> + <el-col :span="1.5"> + <el-button + type="warning" + plain + icon="el-icon-plus" + size="medium" + :disabled="multiple" + @click="handleBatchAddTask" + > + 鎵归噺娣诲姞浠诲姟</el-button > </el-col> <el-col :span="19"> @@ -228,7 +240,13 @@ <el-button size="medium" type="text" - @click="gettoken360(scope.row.idcardno,scope.row.drcode,scope.row.drname)" + @click=" + gettoken360( + scope.row.idcardno, + scope.row.drcode, + scope.row.drname + ) + " ><span class="button-textsc">{{ scope.row.patname }}</span></el-button @@ -301,7 +319,23 @@ prop="drname" width="120" /> - + <el-table-column + label="鏄惁瀛樺湪浠诲姟" + align="center" + key="serverState" + prop="serverState" + width="100" + > + <template slot-scope="scope"> + <span + :style="{ + color: scope.row.serverState == 1 ? 'green' : 'gray', + }" + > + {{ scope.row.serverState == 1 ? "鏄�" : "鏃�" }} + </span> + </template> + </el-table-column> <el-table-column label="鎿嶄綔" fixed="right" @@ -337,7 +371,113 @@ /> </el-col> </el-row> + <el-dialog + title="鎵归噺娣诲姞浠诲姟" + :visible.sync="batchTaskVisible" + width="90%" + append-to-body + > + <el-row :gutter="20"> + <!-- 宸︿晶锛氶�変腑鎮h�呭垪琛� --> + <el-col :span="12"> + <div class="batch-patient-section"> + <h4>閫変腑鎮h�咃紙{{ selectedPatients.length }}浜猴級</h4> + <el-table + :data="selectedPatients" + border + style="width: 100%" + size="small" + > + <el-table-column prop="patname" label="濮撳悕" width="100" /> + <el-table-column prop="sex" label="鎬у埆" width="80"> + <template slot-scope="scope"> + {{ scope.row.sex === 1 ? "鐢�" : "濂�" }} + </template> + </el-table-column> + <el-table-column + label="灏辫瘖鏃堕棿" + align="center" + key="admitdate" + prop="admitdate" + > + <template slot-scope="scope"> + <span>{{ formatTime(scope.row.admitdate) }}</span> + </template> + </el-table-column> + <el-table-column prop="outhospno" label="鐥呮鍙�" /> + <el-table-column prop="deptname" label="绉戝" /> + </el-table> + </div> + </el-col> + <!-- 鍙充晶锛氫换鍔″垪琛� --> + <el-col :span="12"> + <div class="batch-task-section"> + <h4>浠诲姟鍒楄〃锛堣閫夋嫨1涓换鍔★級</h4> + <el-table + :data="taskList" + border + style="width: 100%" + size="small" + @current-change="handleTaskSelectionChange" + highlight-current-row + > + <el-table-column + label="浠诲姟鍚嶇О" + fixed + align="center" + key="taskName" + prop="taskName" + :show-overflow-tooltip="true" + /> + + <el-table-column + label="鏈嶅姟椤圭洰" + align="center" + key="templatename" + prop="templatename" + :show-overflow-tooltip="true" + /> + + <el-table-column + label="鍒涘缓浜�" + align="center" + key="createBy" + prop="createBy" + :show-overflow-tooltip="true" + /> + <el-table-column + label="鍒涘缓鏃堕棿" + sortable + align="center" + prop="createTime" + > + <template slot-scope="scope"> + <span>{{ formatTime(scope.row.createTime) }}</span> + </template> + </el-table-column> + <template #empty> + <div class="empty-message"> + <i class="el-icon-warning"></i> + <span>鎮h�呯瀹ゆ棤鍖归厤鏈嶅姟</span> + </div> + </template> + </el-table> + </div> + </el-col> + </el-row> + + <!-- 搴曢儴鎸夐挳 --> + <div slot="footer" class="dialog-footer"> + <el-button @click="batchTaskVisible = false">鍙� 娑�</el-button> + <el-button + type="primary" + :loading="batchLoading" + @click="submitBatchTask" + >鍒涘缓浠诲姟</el-button + > + </div> + </el-dialog> <!-- 鐢ㄦ埛瀵煎叆瀵硅瘽妗� --> <el-dialog :title="upload.title" @@ -383,6 +523,7 @@ </div> </el-upload> </div> + <!-- 瀵煎叆妫�鏌� --> <div class="uploading" v-else-if="dractive == 2"> <el-table :data="uploadingData" style="width: 100%"> @@ -446,7 +587,7 @@ import { getToken } from "@/utils/auth"; import Treeselect from "@riophae/vue-treeselect"; import "@riophae/vue-treeselect/dist/vue-treeselect.css"; -import { query360PatInfo } from "@/api/AiCentre/index"; +import { query360PatInfo, getTasklist, addSubtask } from "@/api/AiCentre/index"; import store from "@/store"; @@ -509,6 +650,12 @@ Labelchange: false, //淇敼鏂板寮圭獥 propss: { multiple: true }, optionstag: [], //鏍囩鍒楄〃 + batchTaskVisible: false, // 寮圭獥鍙鎬� + selectedPatients: [], // 閫変腑鐨勬偅鑰呭垪琛� + taskList: [], // 浠诲姟鍒楄〃 + selectedTask: null, // 閫変腑鐨勪换鍔″垪琛� + batchLoading: false, // 鎵归噺鎻愪氦鍔犺浇鐘舵�� + deptcode: "", Patientrange: [ { name: "鍏ㄩ儴", @@ -680,9 +827,9 @@ if (this.dateRange) { this.queryParams.beginTime = this.dateRange[0]; this.queryParams.endTime = this.dateRange[1]; - }else{ - this.queryParams.beginTime = ''; - this.queryParams.endTime = ''; + } else { + this.queryParams.beginTime = ""; + this.queryParams.endTime = ""; } listPatouthosp(this.queryParams).then((response) => { this.userList = response.rows; @@ -737,9 +884,9 @@ this.$modal.msgWarning('360鍔熻兘鏆傛湭寮�閫�'); return; // 闃绘鍚庣画浠g爜鎵ц this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh; - if (this.postData.XiaoXiTou.ZuHuMC=='涓芥按甯備腑鍖婚櫌') { - this.postData.YeWuXX.YongHuXX.YongHuID = '1400398571877961728'; - this.postData.YeWuXX.YongHuXX.YongHuXM = 'LSZYY'; + if (this.postData.XiaoXiTou.ZuHuMC == "涓芥按甯備腑鍖婚櫌") { + this.postData.YeWuXX.YongHuXX.YongHuID = "1400398571877961728"; + this.postData.YeWuXX.YongHuXX.YongHuXM = "LSZYY"; } query360PatInfo(this.postData).then((res) => { @@ -798,7 +945,7 @@ leaveldeptcodes: [], leavehospitaldistrictcodes: [], }; - this.handleQuery(); + this.handleQuery(); }, // 澶氶�夋閫変腑鏁版嵁 handleSelectionChange(selection) { @@ -915,6 +1062,124 @@ this.upload.open = false; this.dractive = 1; }, + /** 鎵归噺娣诲姞浠诲姟鎸夐挳鐐瑰嚮 */ + handleBatchAddTask() { + // 鏍¢獙鏄惁閫変腑鎮h�� + if (this.ids.length === 0) { + this.$modal.msgWarning("璇疯嚦灏戦�変腑1鍚嶆偅鑰�"); + return; + } + // 妫�鏌ラ�変腑鐨勬偅鑰呬腑鏄惁鏈夊凡鏈変换鍔$殑 + const hasTaskPatients = this.userList.filter( + (item) => this.ids.includes(item.patid) && item.serverState == 1 + ); + + if (hasTaskPatients.length > 0) { + const patientNames = hasTaskPatients.map((p) => p.patname).join("銆�"); + this.$modal.msgError( + `閫変腑鐨勬偅鑰� ${patientNames} 宸叉湁浠诲姟锛屾棤娉曢噸澶嶆坊鍔燻 + ); + return; + } + // 鑾峰彇閫変腑鎮h�呯殑绉戝淇℃伅锛堢敤浜庢牎楠屽悓涓�绉戝锛� + const patientDepts = new Set(); + let deptcode = ""; + this.ids.forEach((patId) => { + const patient = this.userList.find((item) => item.patid === patId); + if (patient) { + patientDepts.add(patient.deptname); + deptcode = patient.deptcode; + } + }); + + // 鏍¢獙鏄惁鍚屼竴绉戝 + if (patientDepts.size > 1) { + this.$modal.msgError("閫変腑鐨勬偅鑰呬笉灞炰簬鍚屼竴绉戝锛屾棤娉曟壒閲忔坊鍔犱换鍔�"); + return; + } + + // 鑾峰彇閫変腑鎮h�呭垪琛� + this.selectedPatients = this.userList.filter((item) => + this.ids.includes(item.patid) + ); + + // 鏄剧ず寮圭獥 + this.batchTaskVisible = true; + + // 鑾峰彇浠诲姟鍒楄〃 + this.loadTaskList(deptcode); + }, + + /** 鍔犺浇浠诲姟鍒楄〃 */ + loadTaskList(deptcode) { + this.batchLoading = true; + let topqueryParams = { + pageNum: 1, + pageSize: 10, + serviceType: 3, + type: 2, + deptcode: deptcode, + }; + getTasklist(topqueryParams).then((response) => { + this.taskList = response.rows; + this.batchLoading = false; + }); + }, + + /** 澶勭悊浠诲姟閫夋嫨鍙樺寲 */ + handleTaskSelectionChange(currentRow) { + this.selectedTask = currentRow; + }, + + // 閲嶅啓鎵归噺鎻愪氦鏂规硶 + async submitBatchTask() { + // 鏍¢獙鏄惁閫変腑浠诲姟 + if (!this.selectedTask) { + this.$modal.msgWarning("璇烽�夋嫨1涓换鍔�"); + return; + } + + this.batchLoading = true; + const successPatients = []; + const failedPatients = []; + + try { + // 閬嶅巻閫変腑鐨勬偅鑰咃紝閫愪釜璋冪敤鎺ュ彛 + for (const patient of this.selectedPatients) { + const params = { + taskId: this.selectedTask.taskId, + taskName: this.selectedTask.taskName, + serviceType: this.selectedTask.serviceType, + ...patient, + age: "", + }; + + try { + await addSubtask(params); + successPatients.push(patient.patname); + } catch (error) { + failedPatients.push(patient.patname); + } + } + + // 鏄剧ず澶勭悊缁撴灉 + let message = `鎴愬姛涓� ${successPatients.length} 鍚嶆偅鑰呮坊鍔犱换鍔; + if (failedPatients.length > 0) { + message += `锛�${failedPatients.length} 鍚嶆偅鑰呮坊鍔犲け璐; + } + this.$modal.msgSuccess(message); + + this.batchTaskVisible = false; + this.getList(); // 鍒锋柊鎮h�呭垪琛� + } catch (error) { + this.$modal.msgError("鎵归噺娣诲姞浠诲姟杩囩▼涓嚭閿�"); + } finally { + this.batchLoading = false; + } + }, + + /** 鎵归噺娣诲姞鎮h�呬换鍔℃帴鍙� */ + batchAddPatientTask(params) {}, }, }; </script> @@ -965,4 +1230,41 @@ .button-textsc { color: #28cfe6; } +.batch-patient-section, +.batch-task-section { + padding: 15px; + border: 1px solid #ebeef5; + border-radius: 4px; + margin-bottom: 15px; +} + +.el-table--enable-row-hover .el-table__body tr:hover > td { + background-color: #f5f7fa; +} +.el-table__body tr.current-row > td { + background-color: #e6f7ff; +} + +/* 绂佺敤鐘舵�佷笅鎸夐挳鏍峰紡 */ +.el-button.is-disabled { + cursor: not-allowed; +} +.batch-patient-section h4, +.batch-task-section h4 { + margin-top: 0; + margin-bottom: 15px; + color: #303133; + font-size: 16px; +} + +/* 琛ㄦ牸鏍峰紡浼樺寲 */ +.el-table { + margin-bottom: 10px; +} + +/* 寮圭獥搴曢儴鎸夐挳闂磋窛 */ +.dialog-footer { + text-align: right; + padding: 10px 20px 20px; +} </style> diff --git a/src/views/patient/propaganda/QuestionnaireTask.vue b/src/views/patient/propaganda/QuestionnaireTask.vue index 1e17b21..e8b1844 100644 --- a/src/views/patient/propaganda/QuestionnaireTask.vue +++ b/src/views/patient/propaganda/QuestionnaireTask.vue @@ -1286,7 +1286,7 @@ }, { label: "寰俊灏忕▼搴�", value: 6 }, ]; - } else if (this.form.serviceType == 6) { + } else if (this.form.serviceType == 6||this.form.serviceType == 14||this.form.serviceType == 15) { this.checkboxlist = [ { value: "3", @@ -1440,7 +1440,8 @@ this.deptcodesWards[0] || this.leavehospitaldistrictcodes[0] || this.diagglist[0] || - this.operationcodes[0] + this.operationcodes[0] || + this.form.longTask == 2 ) { } else { this.$modal.msgError("璇烽�夋嫨浠诲姟鍏宠仈鏉′欢"); diff --git a/src/views/satisfaction.vue b/src/views/satisfaction.vue index cedc116..26585af 100644 --- a/src/views/satisfaction.vue +++ b/src/views/satisfaction.vue @@ -1,5 +1,44 @@ <template> <div class="questionnaire" :class="'survey-type-' + surveyType"> + <!-- 鍔犺浇鐘舵�� --> + <div v-if="loading" class="loading-state"> + <div class="loading-spinner"> + <i class="el-icon-loading"></i> + <p>闂嵎鍔犺浇涓�...</p> + </div> + </div> + + <!-- 鏃犳暟鎹姸鎬� --> + <div v-else-if="isEmptyData" class="empty-state"> + <div class="empty-content"> + <i class="el-icon-document" style="font-size: 64px; color: #909399"></i> + <h3>鏆傛棤闂嵎鏁版嵁</h3> + <p>褰撳墠娌℃湁鍙敤鐨勯棶鍗凤紝璇疯仈绯荤鐞嗗憳鎴栫◢鍚庨噸璇�</p> + <el-button + type="primary" + @click="loadSurveyData" + icon="el-icon-refresh" + > + 閲嶆柊鍔犺浇 + </el-button> + </div> + </div> + + <!-- 閿欒鐘舵�� --> + <div v-else-if="hasError" class="error-state"> + <div class="error-content"> + <i class="el-icon-warning" style="font-size: 64px; color: #f56c6c"></i> + <h3>鏁版嵁鍔犺浇澶辫触</h3> + <p>{{ errorMessage }}</p> + <el-button + type="primary" + @click="loadSurveyData" + icon="el-icon-refresh" + > + 閲嶆柊灏濊瘯 + </el-button> + </div> + </div> <div class="CONTENT" v-if="!accomplish"> <div class="preview-left"> <div class="toptitle"> @@ -7,6 +46,31 @@ <div style="font-size: 22px; margin-bottom: 20px; line-height: 1.5"> {{ surveyDescription }} </div> + </div> + <div v-if="showDeptSelect" class="dept-select-container"> + <el-form> + <el-form> + <el-form-item label="閫夋嫨绉戝"> + <el-select + v-model="selectedDept" + filterable + clearable + placeholder="璇烽�夋嫨绉戝鎴栬緭鍏ュ叧閿瘝鎼滅储" + @change="handleDeptChange" + popper-class="dept-select-dropdown" + > + <el-option + v-for="dept in filteredDeptList" + :key="dept.code" + :label="`${dept.name} (${dept.code})`" + :value="dept.name" + > + <span>{{ dept.name }}</span> + </el-option> + </el-select> + </el-form-item> + </el-form> + </el-form> </div> <el-divider></el-divider> @@ -90,7 +154,7 @@ <el-input type="textarea" :rows="3" - placeholder="璇疯緭鍏ユ偍鐨勬剰瑙佹垨寤鸿" + placeholder="璇疯緭鍏�" v-model="item.scriptResult" clearable > @@ -113,7 +177,7 @@ <div class="CONTENT" v-else> <div class="preview-lefts"> <div class="completion-message"> - <div class="thank-you">{{ this.accomplish||'鎰熻阿鎮ㄧ殑閰嶅悎!' }}</div> + <div class="thank-you">{{ this.accomplish || "鎰熻阿鎮ㄧ殑閰嶅悎!" }}</div> <div class="feedback-message">{{ completionMessage }}</div> </div> </div> @@ -125,6 +189,7 @@ import { getScriptByCondition, saveMYDQuestionAnswer, + WLgetDept, } from "@/api/AiCentre/index"; export default { @@ -134,8 +199,14 @@ surveyTitle: "", surveyDescription: "", questionList: [], + deptList: [], completionMessage: "", accomplish: false, + showDeptSelect: false, + selectedDept: null, + deptSearchText: "", // 淇濈暀鐢ㄤ簬鏈湴杩囨护 + deptList: [], + filteredDeptList: [], // 鍔犲瘑鍚庣殑鍙傛暟 encryptedParams: { @@ -143,8 +214,13 @@ param2: "", param3: "", param4: "", + param5: "", + param6: "30001002", }, - + isEmptyData: false, // 鏂板锛氭棤鏁版嵁鐘舵�� + hasError: false, // 鏂板锛氶敊璇姸鎬� + loading: false, // 鏂板锛氬姞杞界姸鎬� + errorMessage: "", // 鏂板锛氶敊璇俊鎭� // 娴嬭瘯鏁版嵁 testData: { 1: { @@ -283,29 +359,87 @@ // 浠庤矾鐢卞弬鏁拌幏鍙栧姞瀵嗗悗鐨勫弬鏁� this.encryptedParams.param1 = this.$route.query.param1 || - "DBohZ1ARKfFmCdKrBKQ6JW3ddPTtDpgSaRZaKtxBMTJ4FngT06Vy-VskiwDYJJRwfvkHrPIZlkafgZybobGtKQ=="; + "WOAq2QZd43E-qg-96SvuIFsn-sdRVxQNH4M82XhpXp_Ux4PFrPaqSFXcKaeA6oxEgNhPisA86LvU9kTAEz4xvQ=="; this.encryptedParams.param2 = this.$route.query.param2 || - "WQXniB7BIlizOwOQ4KZqITNrqWpLU3SD5vXdHLeYaviA-1T5Dtk70IJWAHbtcDUuYz-2ObYuMj4YKHfWhlCLzw=="; - this.encryptedParams.param3 = this.$route.query.param3 || null; - this.encryptedParams.param4 = this.$route.query.param4 || "1"; // 榛樿涓洪棬璇� + "XWeBh42RLYlNsMcomgw9UXhUPySkRP5EneWSueSq8F84qwYznU9heXuSx4tUMUtDvRnuJ86moJivy-kWQX12Rg=="; + this.encryptedParams.param5 = this.$route.query.param3 || "2"; // 1=浣忛櫌, 2=闂ㄨ瘖, 3=鎶曡瘔寤鸿 + this.encryptedParams.param6 = this.$route.query.param4 || "30001002"; - this.surveyType = parseInt(this.encryptedParams.param4) || 1; + this.surveyType = parseInt(this.encryptedParams.param5) || 2; // 鍔犺浇闂嵎鏁版嵁 this.loadSurveyData(); + // 鑾峰彇绉戝鍒楄〃 + this.WLgetDept(); }, + WLgetDept() { + // 璋冪敤鎺ュ彛鑾峰彇绉戝鏁版嵁 + WLgetDept(this.encryptedParams.param6).then((res) => { + this.deptList = Object.entries(res.data).map(([code, name]) => ({ + code, + name, + })); + this.filteredDeptList = [...this.deptList]; - // 鍔犺浇璋冩煡鏁版嵁 + if (this.surveyType === 3) { + this.showDeptSelect = true; + } + }); + }, + filterDeptList() { + if (!this.deptSearchText) { + this.filteredDeptList = [...this.deptList]; + return; + } + + const searchText = this.deptSearchText.toLowerCase(); + this.filteredDeptList = this.deptList.filter( + (dept) => + dept.name.toLowerCase().includes(searchText) || + dept.code.toLowerCase().includes(searchText) + ); + }, // 鍔犺浇璋冩煡鏁版嵁 loadSurveyData() { + this.loading = true; + this.isEmptyData = false; + this.hasError = false; + this.errorMessage = ""; // 璋冪敤鎺ュ彛鑾峰彇闂嵎鏁版嵁 - getScriptByCondition(this.encryptedParams) + // 鏍规嵁闂嵎绫诲瀷璁剧疆涓嶅悓鐨勫弬鏁� + let encryptedParams = { + param1: this.encryptedParams.param1, + }; + + // 鏍规嵁surveyType璁剧疆涓嶅悓鐨勫弬鏁� + switch (this.surveyType) { + case 1: // 浣忛櫌 + encryptedParams.param2 = this.encryptedParams.param2; + break; + case 2: // 闂ㄨ瘖 + encryptedParams.param3 = this.encryptedParams.param2; + break; + case 3: // 鎶曡瘔寤鸿 + encryptedParams.param4 = this.encryptedParams.param2; + break; + default: + encryptedParams.param3 = this.encryptedParams.param2; + } + getScriptByCondition(encryptedParams) .then((res) => { if (res.code === 200) { if (res.data.result) { this.accomplish = res.data.result; - return + return; + } + if ( + !res.data.svyLibTemplateScriptVOS || + res.data.svyLibTemplateScriptVOS.length === 0 + ) { + this.isEmptyData = true; + this.$message.warning("鏆傛棤闂嵎鏁版嵁"); + return; } // 澶勭悊鎺ュ彛杩斿洖鐨勬暟鎹� this.questionList = res.data.svyLibTemplateScriptVOS.map((item) => { @@ -317,14 +451,14 @@ // 鏍规嵁surveyType璁剧疆鏍囬鍜屾弿杩� switch (this.surveyType) { - case 1: // 闂ㄨ瘖 + case 2: // 闂ㄨ瘖 this.surveyTitle = "闂ㄨ瘖婊℃剰搴﹁皟鏌�"; this.surveyDescription = "浜茬埍鐨勬偅鑰咃紝鎰熻阿鎮ㄩ�夋嫨鎴戜滑鐨勫尰鐤楁湇鍔°�備负浜嗕笉鏂彁鍗囨湇鍔¤川閲忥紝璇锋偍鑺卞嚑鍒嗛挓鏃堕棿濉啓姝ら棶鍗枫��"; this.completionMessage = "鎰熻阿鎮ㄥ疂璐电殑鎰忚锛佹垜浠皢涓嶆柇鏀硅繘闂ㄨ瘖鏈嶅姟璐ㄩ噺锛屼负鎮ㄦ彁渚涙洿濂界殑鍖荤枟鏈嶅姟浣撻獙銆�"; break; - case 2: // 浣忛櫌 + case 1: // 浣忛櫌 this.surveyTitle = "浣忛櫌婊℃剰搴﹁皟鏌�"; this.surveyDescription = "浜茬埍鐨勬偅鑰呭強瀹跺睘锛屾劅璋㈡偍閫夋嫨鍦ㄦ垜闄綇闄㈡不鐤椼�備负浜嗘彁鍗囦綇闄㈡湇鍔¤川閲忥紝璇锋偍濉啓姝ら棶鍗枫��"; @@ -343,15 +477,26 @@ } } else { // 鎺ュ彛鏃犳暟鎹垨澶辫触锛屼娇鐢ㄦ祴璇曟暟鎹� - this.useTestData(this.surveyType); + // this.useTestData(this.surveyType); } }) .catch(() => { + console.error("鏁版嵁鑾峰彇澶辫触:", error); + this.hasError = true; + this.errorMessage = + error.message || "闂嵎鏁版嵁鍔犺浇澶辫触锛岃妫�鏌ョ綉缁滆繛鎺ュ悗閲嶈瘯"; + this.$message.error("鏁版嵁鍔犺浇澶辫触"); // 鎺ュ彛璋冪敤澶辫触锛屼娇鐢ㄦ祴璇曟暟鎹� - this.useTestData(this.surveyType); + // this.useTestData(this.surveyType); + }) + .finally(() => { + this.loading = false; }); }, - + handleDeptChange(value) { + this.selectedDept = value; + // 鍙互鍦ㄨ繖閲屾坊鍔犲叾浠栧鐞嗛�昏緫 + }, // 浣跨敤娴嬭瘯鏁版嵁 useTestData(surveyType) { const type = [1, 2, 3].includes(surveyType) ? surveyType : 1; @@ -376,7 +521,7 @@ const res = await saveMYDQuestionAnswer(submitData); if (res.code === 200) { - this.accomplish = false; + this.accomplish = "闂嵎宸叉彁浜�"; this.$message.success("鎻愪氦鎴愬姛锛佹劅璋㈡偍鐨勫弽棣堛��"); } else { this.$message.error(res.msg || "鎻愪氦澶辫触锛岃绋嶅悗鍐嶈瘯"); @@ -401,26 +546,39 @@ }, // 鍑嗗鎻愪氦鏁版嵁 - // 鍑嗗鎻愪氦鏁版嵁 prepareSubmitData() { + // 鍒涘缓绉戝閫夋嫨闂瀵硅薄 + const deptQuestion = { + scriptId: "dept_selection", // 鑷畾涔塈D + scriptType: 4, // 4琛ㄧず闂瓟绫诲瀷 + scriptContent: "閫夋嫨鐨勭瀹�", + scriptResult: this.selectedDept || "", // 瀛樺偍閫夋嫨鐨勭瀹ゅ悕绉� + required: false, // 闈炲繀濉� + sort: 999, + nextScriptno: "1", + }; + return { taskId: this.encryptedParams.param1, serialnum: this.encryptedParams.param2 || this.encryptedParams.param3, - mzzy: this.surveyType, // 1=闂ㄨ瘖, 2=浣忛櫌, 3=鎶曡瘔寤鸿 - svyLibTemplateScriptVOS: this.questionList.map((item) => { - return { - scriptId: item.scriptId, - scriptType: item.scriptType, - scriptResult: - item.scriptType === 2 - ? (item.scriptResult || []).join("&") - : item.scriptResult || "", - nextScriptno: item.nextScriptno, - score: item.score, - prompt: item.prompt, - ...item, - }; - }), + mzzy: this.surveyType, + svyLibTemplateScriptVOS: [ + deptQuestion, // 灏嗙瀹ら�夋嫨浣滀负绗竴涓棶棰� + ...this.questionList.map((item) => { + return { + scriptId: item.scriptId, + scriptType: item.scriptType, + scriptResult: + item.scriptType === 2 + ? (item.scriptResult || []).join("&") + : item.scriptResult || "", + nextScriptno: item.nextScriptno, + score: item.score, + prompt: item.prompt, + ...item, + }; + }), + ], excep: this.checkAbnormalOptions() ? 1 : 0, }; }, @@ -518,7 +676,70 @@ --theme-gradient: linear-gradient(135deg, #e53e3e, #f6ad55); } } +.dept-select-container { + margin: 20px 0; + padding: 20px; + background-color: #f8fafc; + border-radius: 8px; + border: 1px solid #e2e8f0; +} +/* 璋冩暣涓嬫媺閫夐」鏍峰紡 */ +.el-select-dropdown__item { + display: flex; + justify-content: space-between; +} +/* 涓嬫媺妗嗘牱寮忚皟鏁� */ +::v-deep .dept-select-dropdown { + max-height: 400px; /* 闄愬埗鏈�澶ч珮搴� */ + overflow-y: auto; /* 娣诲姞婊氬姩鏉� */ + + .el-select-dropdown__item { + display: flex; + justify-content: space-between; + padding: 0 20px; + height: auto; + line-height: 36px; + + span { + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + /* 鍚嶇О閮ㄥ垎 */ + span:first-child { + width: 60%; + text-align: left; + } + + /* 缂栫爜閮ㄥ垎 */ + span:last-child { + width: 40%; + text-align: right; + } + } +} + +/* 绉诲姩绔�傞厤 */ +@media (max-width: 768px) { + ::v-deep .dept-select-dropdown { + max-width: 100vw; /* 闄愬埗鏈�澶у搴︿负瑙嗗彛瀹藉害 */ + width: auto !important; + left: 10px !important; + right: 10px !important; + + .el-select-dropdown__item { + span:first-child { + width: 50%; + } + span:last-child { + width: 50%; + } + } + } +} .CONTENT { max-width: 900px; margin: 0 auto; @@ -681,7 +902,99 @@ } } } +.loading-state { + display: flex; + justify-content: center; + align-items: center; + min-height: 60vh; + padding: 40px; + .loading-spinner { + text-align: center; + + .el-icon-loading { + font-size: 48px; + color: var(--primary-color); + margin-bottom: 16px; + animation: rotating 2s linear infinite; + } + + p { + color: #666; + font-size: 16px; + } + } +} + +.empty-state, +.error-state { + display: flex; + justify-content: center; + align-items: center; + min-height: 60vh; + padding: 40px; + + .empty-content, + .error-content { + text-align: center; + max-width: 400px; + + h3 { + color: #666; + font-size: 20px; + margin: 16px 0 12px; + font-weight: 500; + } + + p { + color: #999; + font-size: 14px; + margin-bottom: 24px; + line-height: 1.6; + } + } +} + +.error-state { + .error-content { + h3 { + color: #f56c6c; + } + } +} + +@keyframes rotating { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +/* 鍝嶅簲寮忚皟鏁� */ +@media (max-width: 768px) { + .loading-state, + .empty-state, + .error-state { + padding: 20px; + min-height: 50vh; + + .el-icon-loading, + .el-icon-document, + .el-icon-warning { + font-size: 40px !important; + } + + h3 { + font-size: 18px !important; + } + + p { + font-size: 13px !important; + } + } +} ::v-deep { .el-checkbox-group { display: flex; diff --git a/vue.config.js b/vue.config.js index 382765f..e16f02a 100644 --- a/vue.config.js +++ b/vue.config.js @@ -37,8 +37,9 @@ [process.env.VUE_APP_BASE_API]: { // target: `https://www.health-y.cn/lssf`, // target: `http://10.202.20.185:8095`, - // target: `http://9.208.2.190:8095`, + // target: `http://192.168.100.195:8095`, target:`http://localhost:8095`, + // target:`http://35z1t16164.qicp.vip`, // target: `http://192.168.100.193:8095`, // target: `http://192.168.101.166:8093`, // target: `http://192.168.191.181:8095`, -- Gitblit v1.9.3