From 51461f369f0b0ad1da96346afee5637302f1525b Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期二, 18 八月 2026 16:38:47 +0800
Subject: [PATCH] 提交
---
src/views/followvisit/discharge/index.vue.bak | 2769 +++++++++++++++++++
src/views/sfstatistics/percentage/components/SecondFollowUp.vue | 225 -
src/views/sfstatistics/percentage/index copy.vue | 1460 ++++++++--
vue.config.js | 4
src/api/AiCentre/Qtemplate.js | 15
src/views/patient/patient/outpatient.vue | 2
src/views/sfstatistics/percentage/satisfaction.vue | 5
src/views/sfstatistics/percentage/components/FirstFollowUp.vue | 315 -
src/views/Satisfaction/diseaseStatistics/components/FirstFollowUp.vue | 225 -
随访通用8.14.zip | 0
src/views/patient/propaganda/QuestionnaireTask.vue | 170
src/api/followvisit/advice.js | 45
src/views/SatisfactionRelay.vue | 4
/dev/null | 0
src/views/Satisfaction/sfstatistics/components/SatisfactionStatistics.vue | 2
src/views/followvisit/record/detailpage/index.vue | 18
src/views/sfstatistics/percentage/index.vue | 7
src/views/Satisfaction/diseaseStatistics/index.vue | 2
src/views/followvisit/record/detailpage/components/AdviceList.vue | 315 ++
src/views/patient/propaganda/particty.vue | 154
随访通用8.17.zip | 0
src/views/followvisit/discharge/index copy.vue | 2472 +++++++++++++++++
src/views/outsideChainwtnew.vue | 129
23 files changed, 7,406 insertions(+), 932 deletions(-)
diff --git a/src/api/AiCentre/Qtemplate.js b/src/api/AiCentre/Qtemplate.js
index e36895b..7323579 100644
--- a/src/api/AiCentre/Qtemplate.js
+++ b/src/api/AiCentre/Qtemplate.js
@@ -195,6 +195,13 @@
data: data,
});
}
+export function taskmedicallist(data) {
+ return request({
+ url: "/smartor/taskmedical/list",
+ method: "post",
+ data: data,
+ });
+}
//浠诲姟缁勭瀹ょ梾鍖烘ā鏉垮叧鑱旀煡璇�
export function rwztaskdepthospgetsonlist(data) {
@@ -225,6 +232,14 @@
method: "get",
});
}
+// 鍒犻櫎浠诲姟鑽搧鍏宠仈
+export function taskmedicaldel(data) {
+ return request({
+ url: `/smartor/taskmedical/remove`,
+ method: "post",
+ data: data,
+ });
+}
// 鍒犻櫎浠诲姟鎵嬫湳鍏宠仈
export function taskoperhospgetsondel(id) {
return request({
diff --git a/src/api/followvisit/advice.js b/src/api/followvisit/advice.js
new file mode 100644
index 0000000..d1d8f21
--- /dev/null
+++ b/src/api/followvisit/advice.js
@@ -0,0 +1,45 @@
+import request from '@/utils/request'
+
+// 鏌ヨ闅忚寤鸿鍒楄〃锛堝垎椤靛弬鏁拌蛋 URL query锛岃繃婊ゆ潯浠惰蛋 body锛�
+export function listAdvice(data, query) {
+ return request({
+ url: '/system/serviceSubtaskAdvice/list',
+ method: 'post',
+ params: query,
+ data: data
+ })
+}
+
+// 鏌ヨ闅忚寤鸿璇︽儏
+export function getAdvice(id) {
+ return request({
+ url: '/system/serviceSubtaskAdvice/' + id,
+ method: 'get'
+ })
+}
+
+// 鏂板闅忚寤鸿
+export function addAdvice(data) {
+ return request({
+ url: '/system/serviceSubtaskAdvice/add',
+ method: 'post',
+ data: data
+ })
+}
+
+// 淇敼闅忚寤鸿
+export function updateAdvice(data) {
+ return request({
+ url: '/system/serviceSubtaskAdvice/edit',
+ method: 'post',
+ data: data
+ })
+}
+
+// 鎵归噺鍒犻櫎闅忚寤鸿锛堥�昏緫鍒犻櫎锛�
+export function delAdvice(ids) {
+ return request({
+ url: '/system/serviceSubtaskAdvice/remove/' + ids,
+ method: 'get'
+ })
+}
diff --git a/src/views/Satisfaction/diseaseStatistics/components/FirstFollowUp.vue b/src/views/Satisfaction/diseaseStatistics/components/FirstFollowUp.vue
index 978e85d..fa5340b 100644
--- a/src/views/Satisfaction/diseaseStatistics/components/FirstFollowUp.vue
+++ b/src/views/Satisfaction/diseaseStatistics/components/FirstFollowUp.vue
@@ -432,163 +432,19 @@
},
customSort(data) {
- const order = [
- "涓�",
- "浜�",
- "涓�",
- "鍥�",
- "浜�",
- "鍏�",
- "涓�",
- "鍏�",
- "涔�",
- "鍗�",
- "鍗佷竴",
- "鍗佷簩",
- "鍗佷笁",
- "鍗佸洓",
- "鍗佷簲",
- "鍗佸叚",
- "鍗佷竷",
- "鍗佸叓",
- "鍗佷節",
- "浜屽崄",
- "浜屽崄涓�",
- "浜屽崄浜�",
- "浜屽崄涓�",
- "浜屽崄鍥�",
- "浜屽崄浜�",
- "浜屽崄鍏�",
- "浜屽崄涓�",
- "浜屽崄鍏�",
- "浜屽崄涔�",
- "涓夊崄",
- "涓夊崄涓�",
- "涓夊崄浜�",
- "涓夊崄涓�",
- "涓夊崄鍥�",
- "涓夊崄浜�",
- "涓夊崄鍏�",
- "涓夊崄涓�",
- "涓夊崄鍏�",
- "涓夊崄涔�",
- "鍥涘崄",
- "鍥涘崄涓�",
- "鍥涘崄浜�",
- "鍥涘崄涓�",
- "鍥涘崄鍥�",
- "鍥涘崄浜�",
- ];
-
- return data.sort((a, b) => {
- const getIndex = (name) => {
- if (!name || typeof name !== "string") return -1;
- const chineseMatch = name.match(/^([涓�浜屼笁鍥涗簲鍏竷鍏節鍗乚+)/);
- if (chineseMatch && chineseMatch[1]) {
- return order.indexOf(chineseMatch[1]);
- }
- const arabicMatch = name.match(/^(\d+)/);
- if (arabicMatch && arabicMatch[1]) {
- const num = parseInt(arabicMatch[1], 10);
- if (num >= 1 && num <= 45) {
- return num - 1;
- }
- }
- return -1;
- };
-
- const indexA = getIndex(a.leavehospitaldistrictname);
- const indexB = getIndex(b.leavehospitaldistrictname);
-
- if (indexA === -1 && indexB === -1) {
- return (a.leavehospitaldistrictname || "").localeCompare(
- b.leavehospitaldistrictname || ""
- );
- }
- if (indexA === -1) return 1;
- if (indexB === -1) return -1;
- return indexA - indexB;
- });
+ return data.sort((a, b) =>
+ this.compareWardName(
+ a.leavehospitaldistrictname,
+ b.leavehospitaldistrictname
+ )
+ );
},
sortChineseNumber(aRow, bRow) {
- const a = aRow.leavehospitaldistrictname;
- const b = bRow.leavehospitaldistrictname;
-
- const chineseNumMap = {
- 涓�: 1,
- 浜�: 2,
- 涓�: 3,
- 鍥�: 4,
- 浜�: 5,
- 鍏�: 6,
- 涓�: 7,
- 鍏�: 8,
- 涔�: 9,
- 鍗�: 10,
- 鍗佷竴: 11,
- 鍗佷簩: 12,
- 鍗佷笁: 13,
- 鍗佸洓: 14,
- 鍗佷簲: 15,
- 鍗佸叚: 16,
- 鍗佷竷: 17,
- 鍗佸叓: 18,
- 鍗佷節: 19,
- 浜屽崄: 20,
- 浜屽崄涓�: 21,
- 浜屽崄浜�: 22,
- 浜屽崄涓�: 23,
- 浜屽崄鍥�: 24,
- 浜屽崄浜�: 25,
- 浜屽崄鍏�: 26,
- 浜屽崄涓�: 27,
- 浜屽崄鍏�: 28,
- 浜屽崄涔�: 29,
- 涓夊崄: 30,
- 涓夊崄涓�: 31,
- 涓夊崄浜�: 32,
- 涓夊崄涓�: 33,
- 涓夊崄鍥�: 34,
- 涓夊崄浜�: 35,
- 涓夊崄鍏�: 36,
- 涓夊崄涓�: 37,
- 涓夊崄鍏�: 38,
- 涓夊崄涔�: 39,
- 鍥涘崄: 40,
- 鍥涘崄涓�: 41,
- 鍥涘崄浜�: 42,
- 鍥涘崄涓�: 43,
- 鍥涘崄鍥�: 44,
- 鍥涘崄浜�: 45,
- };
-
- const getNumberFromText = (text) => {
- if (!text || typeof text !== "string") return -1;
- const match = text.match(/^([涓�浜屼笁鍥涗簲鍏竷鍏節鍗乚+)/);
- if (match && match[1]) {
- const chineseNum = match[1];
- return chineseNumMap[chineseNum] !== undefined
- ? chineseNumMap[chineseNum]
- : -1;
- }
- const arabicMatch = text.match(/^(\d+)/);
- if (arabicMatch && arabicMatch[1]) {
- const num = parseInt(arabicMatch[1], 10);
- return num >= 1 && num <= 45 ? num : -1;
- }
- return -1;
- };
-
- const numA = getNumberFromText(a);
- const numB = getNumberFromText(b);
-
- if (numA === -1 && numB === -1) {
- return (a || "").localeCompare(b || "");
- }
- if (numA === -1) return 1;
- if (numB === -1) return -1;
- return numA - numB;
+ return this.compareWardName(
+ aRow.leavehospitaldistrictname,
+ bRow.leavehospitaldistrictname
+ );
},
getRowKey(row) {
@@ -812,6 +668,67 @@
return Number.isInteger(num) ? num.toString() : num.toFixed(0);
},
+ // ===== 鐥呭尯鍚嶆帓搴忥紙鏀寔 1-B10 / 2-A2 绛� 鏁板瓧-瀛楁瘝鏁板瓧 鏍煎紡锛� =====
+ // 瑙f瀽鐥呭尯鍚嶏紝杩斿洖鎺掑簭閿� { group, letter, number }
+ parseWardKey(name) {
+ if (!name || typeof name !== "string") return null;
+ const trimmed = name.trim();
+
+ // 鏍煎紡1锛氭暟瀛�-瀛楁瘝鏁板瓧锛屽 1-B10銆�2-A2銆�1-A11
+ const dashMatch = trimmed.match(/^(\d+)-([A-Za-z]+)(\d+)/);
+ if (dashMatch) {
+ return {
+ group: parseInt(dashMatch[1], 10),
+ letter: dashMatch[2].toUpperCase(),
+ number: parseInt(dashMatch[3], 10),
+ };
+ }
+
+ // 鏍煎紡2锛氫腑鏂囨暟瀛楀紑澶达紝濡� 涓�鐥呭尯銆佸崄涓�鐥呭尯銆佷簩鍗佷竴鐥呭尯
+ const cnMatch = trimmed.match(/^([涓�浜屼笁鍥涗簲鍏竷鍏節鍗乚+)/);
+ if (cnMatch && cnMatch[1]) {
+ const num = this.chineseToNumber(cnMatch[1]);
+ if (num > 0) return { group: num, letter: "", number: 0 };
+ }
+
+ // 鏍煎紡3锛氶樋鎷変集鏁板瓧寮�澶达紝濡� 1鐥呭尯銆�12鐥呭尯
+ const numMatch = trimmed.match(/^(\d+)/);
+ if (numMatch && numMatch[1]) {
+ return { group: parseInt(numMatch[1], 10), letter: "", number: 0 };
+ }
+
+ return null;
+ },
+
+ // 涓枃鏁板瓧杞樋鎷変集鏁板瓧锛堟敮鎸� 涓� ~ 涔濆崄涔濓級
+ chineseToNumber(str) {
+ const digits = { 涓�: 1, 浜�: 2, 涓�: 3, 鍥�: 4, 浜�: 5, 鍏�: 6, 涓�: 7, 鍏�: 8, 涔�: 9 };
+ if (!str) return -1;
+ if (str === "鍗�") return 10;
+ if (str.startsWith("鍗�")) return 10 + (digits[str[1]] || 0);
+ if (str.includes("鍗�")) {
+ const parts = str.split("鍗�");
+ const tens = digits[parts[0]] || 0;
+ const ones = digits[parts[1]] || 0;
+ return tens * 10 + ones;
+ }
+ return digits[str] !== undefined ? digits[str] : -1;
+ },
+
+ // 鐥呭尯鍚嶆瘮杈冨櫒锛氭暟瀛楁 鈫� 瀛楁瘝娈� 鈫� 鏁板瓧娈�
+ compareWardName(nameA, nameB) {
+ const ka = this.parseWardKey(nameA);
+ const kb = this.parseWardKey(nameB);
+
+ if (!ka && !kb) return (nameA || "").localeCompare(nameB || "", "zh-CN");
+ if (!ka) return 1;
+ if (!kb) return -1;
+
+ if (ka.group !== kb.group) return ka.group - kb.group;
+ if (ka.letter !== kb.letter) return ka.letter.localeCompare(kb.letter);
+ return ka.number - kb.number;
+ },
+
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.tagid);
},
diff --git a/src/views/Satisfaction/diseaseStatistics/index.vue b/src/views/Satisfaction/diseaseStatistics/index.vue
index a4a1fc3..349e413 100644
--- a/src/views/Satisfaction/diseaseStatistics/index.vue
+++ b/src/views/Satisfaction/diseaseStatistics/index.vue
@@ -14,6 +14,7 @@
<el-select
v-model="queryParams.statisticaltype"
placeholder="璇烽�夋嫨缁熻绫诲瀷"
+ @change="handleQuery"
>
<el-option
v-for="item in Statisticallist"
@@ -407,6 +408,7 @@
},
handleQuery() {
+ if (!this.queryParams.dateRange) this.queryParams.dateRange = [];
this.queryParams.startTime = this.parseTime(
this.queryParams.dateRange[0]
);
diff --git a/src/views/Satisfaction/sfstatistics/components/SatisfactionStatistics.vue b/src/views/Satisfaction/sfstatistics/components/SatisfactionStatistics.vue
index 3ff1958..59623b3 100644
--- a/src/views/Satisfaction/sfstatistics/components/SatisfactionStatistics.vue
+++ b/src/views/Satisfaction/sfstatistics/components/SatisfactionStatistics.vue
@@ -16,6 +16,8 @@
v-model="queryParams.type"
placeholder="璇烽�夋嫨缁熻绫诲瀷"
clearable
+ @change="handleSearch"
+
style="width: 100%"
>
<el-option label="闂嵎绫诲瀷" :value="2" />
diff --git a/src/views/SatisfactionRelay.vue b/src/views/SatisfactionRelay.vue
index 63a591b..5608863 100644
--- a/src/views/SatisfactionRelay.vue
+++ b/src/views/SatisfactionRelay.vue
@@ -41,8 +41,10 @@
};
scanGenerateSubtask(params).then(res => {
return
- if (res.code === 200 ) {
+ if (res.code == 200 ) {
+ console.log(res.msg);
window.location.href = res.msg;
+
} else {
this.$message.error('鑾峰彇闂嵎閾炬帴澶辫触锛�' + (res.msg || '鏈煡閿欒'));
}
diff --git a/src/views/followvisit/discharge/index copy.vue b/src/views/followvisit/discharge/index copy.vue
new file mode 100644
index 0000000..4e30b82
--- /dev/null
+++ b/src/views/followvisit/discharge/index copy.vue
@@ -0,0 +1,2472 @@
+<template>
+ <div class="app-container">
+ <statistics-cards
+ :cardlist="cardlist"
+ :ycvalue="ycvalue"
+ :jgvalue="jgvalue"
+ :show-warning-condition="orgname == '鐪佺珛鍚屽痉缈犺嫅闄㈠尯'"
+ />
+ <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="搴旈殢璁挎椂闂�">
+ <el-date-picker
+ v-model="dateRangefs"
+ 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="鏃ユ湡闄愬埗" prop="status">
+ <el-select v-model="endOut" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in endOuts"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鎮h�呰寖鍥�" prop="status">
+ <el-cascader
+ v-model="topqueryParams.scopetype"
+ placeholder="榛樿鍏ㄩ儴"
+ :options="sourcetype"
+ :props="{ expandTrigger: 'hover' }"
+ @change="handleChange"
+ filterable
+ clearable
+ ></el-cascader>
+ </el-form-item>
+
+ <el-form-item label="闅忚鐘舵��" prop="status">
+ <el-cascader
+ v-model="serviceStatusValue"
+ placeholder="璇烽�夋嫨"
+ :options="serviceStatusOptions"
+ :props="cascaderProps"
+ @change="handleServiceStatusChange"
+ clearable
+ ></el-cascader>
+ </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"
+ 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, 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, 1)"
+ >缁撴灉寮傚父</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" 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-col :span="1.5" v-if="orgname == '鏅畞鐣叉棌鑷不鍘夸汉姘戝尰闄�'">
+ <div class="documentf">
+ <div class="document">
+ <el-tooltip
+ content="璇峰厛閫変腑鏈嶅姟"
+ placement="top"
+ :disabled="!multiple"
+ >
+ <div class="tooltip-wrapper">
+ <el-button
+ type="primary"
+ :disabled="multiple"
+ class="purple-button"
+ @click="scoreDialogVisible = true"
+ >
+ 婊℃剰搴﹁皟鏌�
+ </el-button>
+ </div>
+ </el-tooltip>
+ </div>
+ </div>
+ </el-col>
+ </el-row>
+ <el-table
+ v-loading="loading"
+ ref="userform"
+ :data="userList"
+ :row-class-name="tableRowClassName"
+ @selection-change="handleSelectionChange"
+ @select-all="handleSelectAll"
+ >
+ <!-- 鍗$墖鍒楄〃妯″紡 -->
+ </el-table>
+ <div v-loading="loading" class="card-list">
+ <div style="margin-bottom:12px" v-if="userList.length > 0">
+ <el-checkbox v-model="checkAll" @change="handleCheckAllChange">鍏ㄩ��</el-checkbox>
+ <span v-if="getSelectedCount() > 0" style="color:#909399;font-size:13px;margin-left:8px">
+ 宸查�� <b style="color:#409eff">{{ getSelectedCount() }}</b> 鏉�
+ <el-button type="text" size="mini" @click="clearAllSelection" style="margin-left:4px">娓呴櫎</el-button>
+ </span>
+ </div>
+
+ <div v-for="row in userList" :key="row.id" class="follow-card" :class="rowClassName(row)">
+ <el-checkbox class="card-check" :value="isRowSelected(row)" @change="toggleRowSelection(row)" />
+
+ <!-- 鏍囬琛岋細浠诲姟鍚嶇О + 鏃堕棿绾� + 闅忚鐘舵�� + 鎿嶄綔 -->
+ <div class="card-head">
+ <span class="card-task-name">{{ row.taskName || '-' }}</span>
+ <span class="time-inline">
+ <em>鍑洪櫌</em>{{ formatTime(row.endtime) }}
+ <i>鈫�</i>
+ <em>搴旇</em>{{ formatTime(row.visitTime) }}
+ <i>鈫�</i>
+ <em>瀹屾垚</em>{{ parseTime(row.finishtime) }}
+ </span>
+ <span class="visit-status">
+ <el-tag v-if="row.sendstateView==1" type="primary" size="small" effect="dark">寰呴殢璁�</el-tag>
+ <el-tag v-else-if="row.sendstateView==2" type="success" size="small" effect="dark">宸插畬鎴�</el-tag>
+ <el-tag v-else-if="row.sendstateView==3" type="warning" size="small" effect="dark">鏃犻渶闅忚</el-tag>
+ </span>
+ <span class="card-actions">
+ <el-button size="mini" type="text" icon="el-icon-s-order" @click="Seedetails(row)">璇︽儏</el-button>
+ <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(row)">杩囨护</el-button>
+ <el-button size="mini" type="text" icon="el-icon-sort" @click="handleTransferOpen(row)">鍙樻洿绉�/鍖�</el-button>
+ </span>
+ </div>
+
+ <!-- 涓讳綋锛氫笁鏍� -->
+ <div class="card-body">
+ <div class="card-columns">
+ <!-- 鈶犳偅鑰呬俊鎭� -->
+ <div class="card-col">
+ <div class="block block-blue">
+ <div class="block-title"><i class="el-icon-user-solid"></i>鎮h�呬俊鎭�</div>
+ <div class="block-row">
+ <span class="name-link" @click="gettoken360(row.sfzh,row.drcode,row.drname,row.patid)">{{ row.sendname||'-' }}</span>
+ <span class="sub">{{ row.sex==1?'鐢�':row.sex==2?'濂�':'-' }}</span>
+ <span class="sub">{{ row.phone||'-' }}</span>
+ <span class="sub">鍑洪櫌{{ row.endDay?row.endDay+'澶�':'-' }}</span>
+ </div>
+ <div class="block-row sub-text" v-if="row.sfzh">韬唤璇�: {{ row.sfzh }}</div>
+ <div class="block-row" v-if="row.leavediagname"><span class="diag-tag">璇婃柇</span>{{ row.leavediagname }}</div>
+ </div>
+ </div>
+ <!-- 鈶$瀹ょ梾鍖� 路 鍖绘姢 -->
+ <div class="card-col">
+ <div class="block block-green">
+ <div class="block-title"><i class="el-icon-office-building"></i>绉戝鐥呭尯 路 鍖绘姢</div>
+ <div class="block-row">绉戝: {{ row.deptname||'-' }} / 鐥呭尯: {{ row.leavehospitaldistrictname||'-' }}</div>
+ <div class="block-row">
+ 涓绘不: {{ row.drname||'-' }}
+ <span class="sub">缁忕: {{ row.managementDoctor||'-' }}</span>
+ <span class="sub">鎶ゅ+: {{ row.nurseName||'-' }}</span>
+ </div>
+ <div class="block-row sub-text" v-if="orgname!='涓芥按甯備腑鍖婚櫌'">闅忚浜哄憳: {{ row.updateBy||'-' }}</div>
+ </div>
+ </div>
+ <!-- 鈶㈡墽琛岃鎯� -->
+ <div class="card-col">
+ <div class="block block-gray">
+ <div class="block-title"><i class="el-icon-s-management"></i>鎵ц璇︽儏</div>
+ <div class="meta-grid">
+ <span v-if="row.sendstate||row.sendstate===0">
+ <em>鐘舵��</em>
+ <el-tag v-if="row.sendstate==1" size="mini">宸查鍙�</el-tag>
+ <el-tag v-else-if="row.sendstate==2" type="primary" size="mini">寰呴殢璁�</el-tag>
+ <el-tag v-else-if="row.sendstate==3" size="mini">宸插彂閫�</el-tag>
+ <el-tag v-else-if="row.sendstate==4" type="info" size="mini">涓嶆墽琛�</el-tag>
+ <el-tag v-else-if="row.sendstate==5" type="danger" size="mini">澶辫触</el-tag>
+ <el-tag v-else-if="row.sendstate==6" type="success" size="mini">宸插畬鎴�</el-tag>
+ <el-tag v-else-if="row.sendstate==7" type="danger" size="mini">瓒呮椂</el-tag>
+ </span>
+ <span v-if="row.currentPreachform||(row.preachform&&row.preachform.length)"><em>鎵ц</em>{{ row.currentPreachform||row.preachform.join('銆�') }}</span>
+ <span v-if="row.templatename"><em>妯℃澘</em>{{ row.templatename }}</span>
+ <span v-if="row.suggest"><em>鎰忚</em><dict-tag :options="dict.type.sys_suggest" :value="row.suggest"/></span>
+ <span v-if="row.remark"><em>璇存槑</em>{{ row.remark }}</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div v-if="userList.length===0&&!loading" style="text-align:center;padding:80px 0;color:#999">
+ <i class="el-icon-document" style="font-size:48px;display:block;margin-bottom:16px"></i>鏆傛棤鏁版嵁
+ </div>
+ </div>
+ <el-table v-if="false"></el-table>
+ <!-- end 鍗$墖鍒楄〃 -->
+
+ <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>
+ <!-- 鎻愰啋鏂囧瓧 -->
+ <div class="filter-warning">
+ <i class="el-icon-warning-outline"></i>
+ 璇ュ姛鑳介�傜敤浜庢浜°�佸垪鍏ュ尰闄㈤粦鍚嶅崟銆佹槑纭嫆缁濋殢璁跨瓑鎮h�呯殑杩囨护鎺掗櫎锛岃繃婊ゅ悗璇ユ偅鑰呮墍鏈夎繘琛屼腑浠诲姟鍏ㄩ儴鍋滄涓旀棤娉曞尮閰嶆柊鐨勯殢璁夸换鍔★紝璇疯皑鎱庢搷浣滐紒
+ </div>
+ </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="鎮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>
+ <el-button type="primary" @click="setupsubtask">纭鍒涘缓鏈嶅姟</el-button>
+ </div>
+ </el-dialog>
+
+ <!-- 鍙樻洿绉戝/鐥呭尯寮圭獥 -->
+ <el-dialog
+ title="鍙樻洿绉戝/鐥呭尯"
+ :visible.sync="transferDialogVisible"
+ width="480px"
+ :close-on-click-modal="false"
+ >
+ <el-form :model="transferForm" label-width="100px">
+ <el-form-item label="褰撳墠绉戝">
+ <span>{{ transferForm.currentDeptName || "-" }}</span>
+ </el-form-item>
+ <el-form-item label="褰撳墠鐥呭尯">
+ <span>{{ transferForm.currentWardName || "-" }}</span>
+ </el-form-item>
+ <el-form-item label="鐩爣绉戝">
+ <el-cascader
+ v-model="transferDeptValue"
+ :options="deptOptionsks"
+ :props="cascaderPropsa"
+ placeholder="璇烽�夋嫨鐩爣绉戝"
+ filterable
+ clearable
+ style="width: 100%"
+ @change="handleDeptCascaderChange"
+ />
+ </el-form-item>
+ <el-form-item label="鐩爣鐥呭尯">
+ <el-cascader
+ v-model="transferWardValue"
+ :options="deptOptionsbq"
+ :props="cascaderPropsa"
+ placeholder="璇烽�夋嫨鐩爣鐥呭尯"
+ filterable
+ clearable
+ style="width: 100%"
+ @change="handleWardCascaderChange"
+ />
+ </el-form-item>
+ </el-form>
+ <div slot="footer" class="dialog-footer">
+ <el-button @click="transferDialogVisible = false">鍙� 娑�</el-button>
+ <el-button
+ type="primary"
+ :loading="transferLoading"
+ @click="handleTransferSubmit"
+ >
+ 纭鍙樻洿
+ </el-button>
+ </div>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ delUser,
+ addUser,
+ updateUser,
+ resetUserPwd,
+ changeUserStatus,
+ deptTreeSelect,
+} from "@/api/system/user";
+import {
+ getTaskservelist,
+ buidegetTasklist,
+ addserviceSubtask,
+ query360PatInfo,
+ addsatisfaction,
+ transferDept,
+ query360PatInfonh,
+} from "@/api/AiCentre/index";
+import { alterpatient, particularpatient } from "@/api/patient/homepage";
+import Treeselect from "@riophae/vue-treeselect";
+import StatisticsCards from "@/components/StatisticsCards";
+
+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, StatisticsCards },
+ data() {
+ return {
+ // 閬僵灞�
+ loading: true,
+ // 閫変腑鏁扮粍
+ ids: [],
+ // 闈炲崟涓鐢�
+ single: true,
+ // 闈炲涓鐢�
+ multiple: true,
+ // 鏄剧ず鎼滅储鏉′欢
+ showSearch: true,
+ dialogFormVisible: false,
+ // 鎬绘潯鏁�
+ total: 0,
+ // 鐢ㄦ埛琛ㄦ牸鏁版嵁
+ userList: null,
+ // 寮瑰嚭灞傛爣棰�
+ title: "鏂板褰卞儚闅忚",
+ // 鏄惁鏄剧ず淇敼銆佹坊鍔犲脊鍑哄眰
+ addalteropen: false,
+
+ // 閮ㄩ棬鍚嶇О
+ deptName: undefined,
+ // 榛樿瀵嗙爜
+ initPassword: undefined,
+ // 鏃ユ湡鑼冨洿
+ dateRange: [],
+ dateRangefs: [],
+ // 宀椾綅閫夐」
+ postOptions: [],
+ ruleForm: {
+ type: [],
+ },
+ zcform: {},
+ dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
+ inputVisible: false,
+ Labelchange: false,
+ ycvalue: 0,
+ jgvalue: "",
+ yfsvalue: "",
+ inputValue: "",
+ preachform: "",
+ previewVisible: false, //褰卞儚闅忚棰勮寮规
+ isRestoring: false,
+ radio: "",
+ radios: [],
+ previewtype: 2, //棰勮褰卞儚闅忚绫诲瀷
+ total: 0, // 鎬绘潯鏁�
+ // 婊℃剰搴﹁皟鏌ユ暟鎹�
+ scoreDialogVisible: false,
+ selectedRows: [],
+ selectedRowMap: new Map(), // key: row.id, value: row 鏁版嵁
+
+ // 绾ц仈閫夋嫨鍣ㄧ粦瀹氬��
+ serviceStatusValue: 10,
+ cascaderProps: {
+ expandTrigger: "hover", // 鎮仠灞曞紑
+ checkStrictly: true, // 鉁� 鍏抽敭锛氬厑璁搁�変腑浠绘剰涓�绾�
+ emitPath: false, // 鉁� 鍙繑鍥為�変腑鐨勫�硷紝涓嶈繑鍥炶矾寰勬暟缁�
+ },
+ // 鏈嶅姟鐘舵�侀�夐」锛堜竴绾у拰浜岀骇鍊间笉鍐茬獊锛�
+ serviceStatusOptions: [
+ {
+ value: null,
+ label: "鍏ㄩ儴",
+ },
+ {
+ value: 10, // 涓�绾э細寰呴殢璁�
+ label: "寰呴殢璁�",
+ children: [
+ { value: 1, label: "琚鍙�" },
+ { value: 2, label: "寰呭彂閫�" },
+ { value: 3, label: "宸插彂閫�" },
+ { value: 5, label: "鍙戦�佸け璐�" },
+ { value: 7, label: "瓒呮椂" },
+ ],
+ },
+ {
+ value: 20, // 涓�绾э細宸插畬鎴�
+ label: "宸插畬鎴�",
+ children: [{ value: 6, label: "宸插畬鎴�" }],
+ },
+ {
+ value: 30, // 涓�绾э細鏃犻渶闅忚
+ label: "鏃犻渶闅忚",
+ children: [{ value: 4, label: "涓嶆墽琛�" }],
+ },
+ ],
+ value: [],
+ list: [],
+
+ sourcetype: [
+ {
+ value: 1,
+ label: "绉戝",
+ children: [],
+ },
+ {
+ value: 2,
+ label: "鐥呭尯",
+ children: [],
+ },
+ {
+ value: 3,
+ label: "鍏ㄩ儴",
+ },
+ ],
+ loading: false,
+ cardlist: [
+ {
+ name: "鎮h�呮湇鍔℃�婚噺",
+ 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: "",
+ },
+ // endOut: 1,
+ endOut:
+ localStorage.getItem("orgname") == "鏅畞鐣叉棌鑷不鍘夸汉姘戝尰闄�" ? 0 : 1, //0 鍑洪櫌鏃堕棿(姝e簭) 1 鍑洪櫌鏃堕棿(鍊掑簭) 2 鍙戦�佹椂闂�(姝e簭) 3 鍙戦�佹椂闂�(鍊掑簭) 7搴旈殢璁挎棩鏈�(鍊掑簭) 搴旈殢璁挎棩鏈�(姝e簭)
+ endOuts: [
+ {
+ value: 0,
+ label: "鎴鑷冲綋鏃ユ湇鍔�",
+ },
+ {
+ value: 1,
+ label: "鍏ㄩ儴鏈嶅姟",
+ },
+ ],
+ topicoptionssort: [
+ {
+ value: 0,
+ label: "鍑洪櫌鏃堕棿(姝e簭)",
+ },
+ {
+ value: 1,
+ label: "鍑洪櫌鏃堕棿(鍊掑簭)",
+ },
+ {
+ value: 2,
+ label: "鍙戦�佹椂闂�(姝e簭)",
+ },
+ {
+ value: 3,
+ label: "鍙戦�佹椂闂�(鍊掑簭)",
+ },
+ {
+ value: 7,
+ label: "搴旈殢璁挎棩鏈�(姝e簭)",
+ },
+ {
+ value: 8,
+ label: "搴旈殢璁挎棩鏈�(鍊掑簭)",
+ },
+ {
+ value: 9,
+ label: "鎸夌収鎮h�呮帓搴�",
+ },
+ ],
+ // 鏌ヨ鍙傛暟
+ topqueryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ sendstateView: 1,
+ sort:
+ localStorage.getItem("orgname") == "涓芥按甯備腑鍖婚櫌"
+ ? 8
+ : localStorage.getItem("orgname") == "鏅畞鐣叉棌鑷不鍘夸汉姘戝尰闄�"
+ ? 2
+ : 1, //0 鍑洪櫌鏃堕棿(姝e簭) 1 鍑洪櫌鏃堕棿(鍊掑簭) 2 鍙戦�佹椂闂�(姝e簭) 3 鍙戦�佹椂闂�(鍊掑簭) 7搴旈殢璁挎棩鏈�(鍊掑簭) 搴旈殢璁挎棩鏈�(姝e簭)
+ serviceType: 2,
+ sendstate: null,
+ searchscope: 3,
+ visitCount: 1,
+ scopetype: [],
+ managementDoctor:
+ localStorage.getItem("orgname") == "缂欎簯鍘夸汉姘戝尰闄�"
+ ? store.getters.nickName
+ : "",
+ leaveldeptcodes: [],
+ leavehospitaldistrictcodes: [],
+ },
+ orgname: "",
+ propss: { multiple: true },
+ options: [],
+
+ topicoptions: [
+ {
+ value: null,
+ label: "鍏ㄩ儴",
+ },
+ {
+ value: 1,
+ label: "寰呴殢璁�",
+ },
+ {
+ value: 2,
+ label: "闅忚涓�",
+ },
+ {
+ value: 3,
+ label: "鏈畬鎴�",
+ },
+ {
+ value: 4,
+ label: "宸插畬鎴�",
+ },
+ {
+ value: 5,
+ label: "鏃犻渶闅忚",
+ },
+ ],
+
+ sextype: [
+ {
+ value: 1,
+ label: "鐢�",
+ },
+ {
+ value: 2,
+ label: "濂�",
+ },
+ ],
+ topicoptionsyj: [
+ {
+ value: 1,
+ label: "寮傚父",
+ },
+ {
+ value: 2,
+ 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: localStorage.getItem("YongHuID"),
+ YongHuXM: localStorage.getItem("YongHuXM"),
+ ZuZhiJGID: localStorage.getItem("orgid"),
+ ZuZhiJGMC: localStorage.getItem("orgname"),
+ idp: "lyra",
+ },
+ },
+ },
+ amendtag: false,
+ errtype: "",
+ leavehospitaldistrictcode: "",
+ serviceState: [],
+ checkboxlist: [],
+ // 鍙樻洿绉戝/鐥呭尯
+ transferDialogVisible: false,
+ transferForm: {
+ subId: null,
+ leavelDeptCode: "",
+ leavelDeptName: "",
+ leavehospitaldistrictcode: "",
+ leavehospitaldistrictname: "",
+ },
+ deptOptionsks: [],
+ deptOptionsbq: [],
+ transferDeptValue: [],
+ transferWardValue: [],
+ cascaderPropsa: {
+ value: "deptCode",
+ label: "label",
+ checkStrictly: true,
+ },
+ transferLoading: false,
+ // 琛ㄥ崟鏍¢獙
+ rules: {},
+ };
+ },
+ watch: {
+ // 鐩戝惉璺敱鍙傛暟鍙樺寲
+ "$route.query": {
+ handler(newQuery, oldQuery) {
+ if (newQuery?.errtype !== oldQuery?.errtype) {
+ console.log(22);
+ this.loadData();
+ }
+ },
+ immediate: true,
+ },
+ },
+ computed: {
+ checkAll: {
+ get() {
+ return this.userList.length > 0 && this.selectedRows.length === this.userList.length;
+ },
+ set(val) {
+ if (val) {
+ this.selectedRows = [...this.userList];
+ this.userList.forEach(r => this.selectedRowMap.set(r.id, r));
+ } else {
+ this.selectedRows = [];
+ this.selectedRowMap.clear();
+ }
+ },
+ },
+ isRowSelected() {
+ return (row) => this.selectedRows.some((r) => r.id === row.id);
+ },
+ rowClassName() {
+ return (row) => this.tableRowClassName({ row });
+ },
+ },
+ created() {
+ this.serviceState = store.getters.serviceState;
+ this.checkboxlist = store.getters.checkboxlist;
+ this.orgname = localStorage.getItem("orgname");
+ 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 == 1) {
+ this.toleadExport(2);
+ } else if (this.errtype == 2) {
+ // 寰呴殢璁�
+ this.toleadExport(3);
+ } else if (this.errtype == 3) {
+ // 澶辫触
+ this.toleadExport(4);
+ } else if (this.errtype == 4) {
+ // 寮傚父
+ this.toleadExport(2);
+ } else if (this.errtype == 5) {
+ // 鍏ㄩ儴
+ this.toleadExport(5);
+ } else {
+ this.getList(1);
+ }
+ this.getConfigKey("sys.user.initPassword").then((response) => {
+ this.initPassword = response.msg;
+ });
+ },
+ activated() {
+ this.errtype = this.$route.query.errtype;
+ if (this.errtype == 1) {
+ this.toleadExport(2);
+ } else if (this.errtype == 2) {
+ // 寰呴殢璁�
+ this.toleadExport(3);
+ } else if (this.errtype == 3) {
+ // 澶辫触
+ this.toleadExport(4);
+ } else if (this.errtype == 4) {
+ // 寮傚父
+ this.toleadExport(2);
+ } else if (this.errtype == 5) {
+ // 鍏ㄩ儴
+ this.toleadExport(5);
+ } else {
+ this.getList(1);
+ }
+ },
+ methods: {
+ /** 鏌ヨ闅忚鏈嶅姟鍒楄〃 */
+ async 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.endOut == 0) {
+ this.topqueryParams.endSendDateTime = this.formatDateToYYYYMMDDHHMMSS(
+ this.getEndOfDay()
+ );
+ }
+
+ // 鎺ュ彈寮傚父璺宠浆
+ if (this.errtype) {
+ this.topqueryParams.leavehospitaldistrictcodes.push(
+ this.leavehospitaldistrictcode
+ );
+ }
+
+ this.loading = true;
+
+ if (
+ this.topqueryParams.leavehospitaldistrictcodes[0] &&
+ this.topqueryParams.leaveldeptcodes[0]
+ ) {
+ this.topqueryParams.deptOrDistrict = 2;
+ } else {
+ this.topqueryParams.deptOrDistrict = 1;
+ }
+
+ if (!this.followupAuthority()) {
+ this.$message.warning("鏈厤缃瀹�/鐥呭尯鐩稿叧鏉冮檺涓嶅彲鏌ヨ");
+ this.loading = false;
+ return Promise.reject(new Error("鏃犳潈闄愭煡璇�"));
+ }
+
+ try {
+ const response = await getTaskservelist(this.topqueryParams);
+
+ // 鉁� 绗竴姝ワ細鍏堥攣瀹氭仮澶嶇姸鎬�
+ this.isRestoring = true;
+
+ // 鉁� 绗簩姝ワ細鍐嶆洿鏂版暟鎹紙杩欎細瑙﹀彂 selection-change锛屼絾琚攣浣忎簡锛�
+ this.userList = response.rows[0].serviceSubtaskList;
+ this.total = response.total;
+
+ // 鉁� 绗笁姝ワ細鎭㈠閫変腑鐘舵��
+ // this.restoreSelection();
+ this.$nextTick(() => {
+ this.restoreSelection();
+ });
+
+ // 鉁� 绗洓姝ワ細澶勭悊鍏朵粬鏁版嵁
+ if (refresh) {
+ this.cardlist[0].value =
+ Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0;
+ this.cardlist[1].value = response.rows[0].wxsf || 0;
+ this.ycvalue = Number(response.rows[0].yc) || 0;
+ this.jgvalue = response.rows[0].jg;
+ this.cardlist[2].value = response.rows[0].xsf || 0;
+ this.cardlist[3].value = response.rows[0].dsf || 0;
+ this.cardlist[4].value = response.rows[0].ywc || 0;
+ this.yfsvalue = response.rows[0].yfs;
+ }
+
+ // 鉁� 绗簲姝ワ細澶勭悊 preachform 绛夊叾浠栨暟鎹�
+ this.userList.forEach((item) => {
+ let idArray = null;
+ if (item.endtime) {
+ item.endDay = this.daysBetween(item.endtime);
+ }
+
+ if (item.preachform) {
+ item.preachformson = item.preachform;
+ idArray = item.preachform.split(",");
+
+ item.preachform = idArray.map((value) => {
+ const item = this.checkboxlist.find(
+ (item) => item.value == value
+ );
+ return item ? item.label : null;
+ });
+ }
+ if (item.currentPreachform) {
+ item.currentPreachform = this.checkboxlist.find(
+ (item) => item.value == item.currentPreachform
+ )?.value;
+ console.log(item.currentPreachform, "mi");
+ }
+ });
+
+ this.total = response.total;
+ this.loading = false;
+
+ // 鉁� 绗叚姝ワ細瑙i攣
+ this.$nextTick(() => {
+ this.isRestoring = false;
+ });
+ } catch (error) {
+ console.error("鑾峰彇鍒楄〃澶辫触:", error);
+ this.loading = false;
+ this.isRestoring = false;
+ }
+ },
+ loadData() {
+ this.errtype = this.$route.query.errtype;
+ if (this.errtype == 1) {
+ this.toleadExport(2);
+ } else if (this.errtype == 2) {
+ // 寰呴殢璁�
+ this.toleadExport(3);
+ } else if (this.errtype == 3) {
+ // 澶辫触
+ this.toleadExport(4);
+ } else if (this.errtype == 4) {
+ // 寮傚父
+ this.toleadExport(2);
+ } else if (this.errtype == 5) {
+ // 鍏ㄩ儴
+ this.toleadExport(5);
+ } else {
+ this.getList(1);
+ }
+ },
+ Tooltipy(h, { column }) {
+ return h(
+ "el-tooltip",
+ {
+ props: {
+ content: "浠诲姟閰嶇疆澶氱琛ュ伩绫诲瀷鏃讹紝鏈�鏂版墽琛岀被鍨嬬殑搴旈殢璁挎椂闂�",
+ placement: "top",
+ effect: "dark",
+ },
+ },
+ [h("span", column.label)]
+ );
+ },
+ Tooltipks(h, { column }) {
+ return h(
+ "el-tooltip",
+ {
+ props: {
+ content: "浠诲姟瀛樺湪澶氱琛ュ伩绫诲瀷鏃剁殑棣栨搴旈殢璁挎椂闂�",
+ placement: "top",
+ effect: "dark",
+ },
+ },
+ [h("span", column.label)]
+ );
+ },
+ // 鏃堕棿
+ getEndOfDay() {
+ const date = new Date(); // 鍒涘缓涓�涓〃绀哄綋鍓嶆椂闂寸殑Date瀵硅薄
+ date.setHours(23, 59, 59, 0); // 灏嗘椂闂磋缃负23:59:59.000
+ return date;
+ },
+ formatDateToYYYYMMDDHHMMSS(date) {
+ const year = date.getFullYear();
+ const month = String(date.getMonth() + 1).padStart(2, "0"); // 鏈堜唤琛ラ浂
+ const day = String(date.getDate()).padStart(2, "0"); // 鏃ユ湡琛ラ浂
+ const hours = String(date.getHours()).padStart(2, "0");
+ const minutes = String(date.getMinutes()).padStart(2, "0");
+ const seconds = String(date.getSeconds()).padStart(2, "0");
+
+ return `${year}-${month}-${day}`;
+ },
+ affiliation() {
+ this.resetQuerykj();
+ this.topqueryParams.managementDoctorCode = store.getters.hisUserId;
+ this.getList(1);
+ },
+ onthatday() {
+ this.resetQuerykj();
+
+ 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 (type) {
+ this.resetQuerykj();
+ }
+ 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;
+ this.cardlist[0].value =
+ Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0;
+ this.cardlist[1].value = response.rows[0].wzx;
+ this.cardlist[2].value = response.rows[0].ysf;
+ this.ycvalue = Number(response.rows[0].yc) || 0;
+ this.jgvalue = response.rows[0].jg;
+ 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;
+ // 鍒ゆ柇鏄笉鏄伐浣滃彴蹇嵎鏌ヨ
+ if (this.errtype != 2) {
+ 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) {
+ console.log("閫夋嫨鐨勬偅鑰呰寖鍥�:", value);
+
+ // 娓呯┖涔嬪墠鐨勬煡璇㈠弬鏁�
+ this.topqueryParams.leavehospitaldistrictcodes = [];
+ this.topqueryParams.leaveldeptcodes = [];
+ this.topqueryParams.searchscope = null;
+
+ if (!value || value.length === 0) {
+ return;
+ }
+
+ let type = value[0];
+ let code = value.slice(-1)[0];
+
+ 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;
+ }
+ },
+ // 鏈嶅姟鐘舵�佸彉鏇村鐞�
+ handleServiceStatusChange(value) {
+ // 娓呯┖閫夋嫨
+ if (value === null || value === undefined || value === "") {
+ this.topqueryParams.sendstateView = null;
+ this.topqueryParams.sendstate = null;
+ return;
+ }
+ console.log(value, "value");
+
+ // 涓�绾ц妭鐐圭殑鍊硷紙澶т簬绛変簬10锛�
+ if (value >= 10) {
+ // 閫変腑浜嗕竴绾�
+ switch (value) {
+ case 10:
+ this.topqueryParams.sendstateView = 1; // 寰呴殢璁�
+ break;
+ case 20:
+ this.topqueryParams.sendstateView = 2; // 宸插畬鎴�
+ break;
+ case 30:
+ this.topqueryParams.sendstateView = 3; // 鏃犻渶闅忚
+ break;
+ }
+ this.topqueryParams.sendstate = null;
+ } else {
+ // 閫変腑浜嗕簩绾э紙鍏蜂綋鐘舵�侊級
+ this.topqueryParams.sendstateView = null;
+ this.topqueryParams.sendstate = value;
+ }
+ },
+ /** 閲嶇疆鎸夐挳鎿嶄綔 */
+ resetQuery() {
+ this.dateRange = [];
+ this.dateRangefs = [];
+ this.serviceStatusValue = 10;
+ this.topqueryParams = {
+ pageNum: 1,
+ pageSize: 10,
+ sendstateView: 1,
+ sort: 2, //0 鍑洪櫌鏃堕棿(姝e簭) 1 鍑洪櫌鏃堕棿(鍊掑簭) 2 鍙戦�佹椂闂�(姝e簭) 3 鍙戦�佹椂闂�(鍊掑簭)
+ serviceType: 2,
+ searchscope: 3,
+ visitCount: 1,
+ scopetype: [],
+ leaveldeptcodes: [],
+ leavehospitaldistrictcodes: [],
+ };
+ this.handleQuery(1);
+ },
+ /** 閲嶇疆鎸夐挳鎿嶄綔 */
+ resetQuerykj() {
+ this.dateRange = [];
+ this.dateRangefs = [];
+ this.serviceStatusValue = null;
+ this.topqueryParams = {
+ pageNum: 1,
+ pageSize: 10,
+ sendstateView: null,
+ sort: 2, //0 鍑洪櫌鏃堕棿(姝e簭) 1 鍑洪櫌鏃堕棿(鍊掑簭) 2 鍙戦�佹椂闂�(姝e簭) 3 鍙戦�佹椂闂�(鍊掑簭)
+ serviceType: 2,
+ searchscope: 3,
+ visitCount: 1,
+ scopetype: [],
+ leaveldeptcodes: [],
+ leavehospitaldistrictcodes: [],
+ };
+ },
+ handleSelectionChange(rows) {
+ // 鉁� 濡傛灉鏄仮澶嶉�変腑鐘舵�佽Е鍙戠殑锛岀洿鎺ヨ繑鍥�
+ if (this.isRestoring) {
+ console.log("姝e湪鎭㈠閫変腑鐘舵�侊紝璺宠繃 handleSelectionChange");
+ return;
+ }
+
+ console.log("handleSelectionChange 琚Е鍙戯紝閫変腑琛屾暟:", rows.length);
+
+ // 鍙仛娣诲姞鎿嶄綔
+ rows.forEach((row) => {
+ this.selectedRowMap.set(row.id, {
+ ...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,
+ });
+ });
+
+ this.selectedRows = Array.from(this.selectedRowMap.values());
+ this.multiple = this.selectedRows.length === 0;
+ },
+
+ // 璁$畻鎬诲垎
+ 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: 2,
+ },
+ });
+ },
+ //鎮h��360璺宠浆
+ gettoken360(sfzh, drcode, drname, id) {
+ const orgname = localStorage.getItem("orgname");
+ if (orgname == "鍗楀崕澶у闄勫睘绗竴鍖婚櫌") {
+ query360PatInfonh(id).then((res) => {
+ if (res.data) {
+ window.open(res.data, "_blank");
+ } else {
+ this.$modal.msgWarning("360鏌ヨ鏃犵粨鏋�");
+ }
+ });
+ return;
+ } else if (
+ orgname == "绗竴浜烘皯鍖婚櫌婀栨花闄㈠尯" ||
+ orgname == "绗竴浜烘皯鍖婚櫌鍚村北闄㈠尯"
+ ) {
+ let url = `http://192.200.81.189:9100/blj/view?BINGRENID=${id}&YONGHUID=DBA`;
+ window.open(url, "_blank");
+ return;
+ }
+
+ this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh;
+
+ 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(() => {});
+ },
+
+ // 璺宠浆璇︽儏椤�
+ Seedetails(row) {
+ let type = "";
+ console.log(row, "rwo");
+ if (row.type == 1) {
+ 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,
+ },
+ });
+ },
+ // 鍐嶆闅忚
+ followupvisit(row) {
+ this.zcform = row;
+ this.zcform.endtime = this.formatTime(this.zcform.endtime);
+ this.dialogFormVisible = true;
+ },
+ 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, type) {
+ if (type) {
+ this.resetQuerykj();
+ }
+
+ if (too == 1) {
+ this.topqueryParams.sendstate = 4;
+ this.topqueryParams.excep = null;
+ } else if (too == 2) {
+ this.topqueryParams.excep = 1;
+ this.topqueryParams.sendstate = null;
+ } else if (too == 3) {
+ this.topqueryParams.endSendDateTime = this.formatDateToYYYYMMDDHHMMSS(
+ this.getEndOfDay()
+ );
+
+ this.topqueryParams.excep = null;
+ this.topqueryParams.sendstate = 2;
+ this.topqueryParams.scopetype = null;
+ } else if (too == 4) {
+ this.topqueryParams.excep = null;
+ this.topqueryParams.sendstate = 5;
+ this.topqueryParams.scopetype = null;
+ } else if (too == 5) {
+ this.topqueryParams.excep = null;
+ this.topqueryParams.sendstate = null;
+ this.topqueryParams.scopetype = null;
+ }
+ this.handleQuery(1);
+ },
+ /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+ handleExport() {
+ const originalPageNum = this.topqueryParams.pageNum;
+ const originalPageSize = this.topqueryParams.pageSize;
+ this.topqueryParams.pageNum = null;
+ this.topqueryParams.pageSize = null;
+ this.topqueryParams.subIdList = this.selectedRows.map((item) => item.id);
+ this.download(
+ "smartor/serviceSubtask/patItemExport",
+ {
+ ...this.topqueryParams,
+ },
+ `user_${new Date().getTime()}.xlsx`
+ ).finally(() => {
+ // 瀵煎嚭鍚庢仮澶嶅垎椤靛弬鏁�
+ this.topqueryParams.pageNum = originalPageNum;
+ this.topqueryParams.pageSize = originalPageSize;
+ this.getList();
+ });
+ },
+ // 寮傚父鍒楁覆鏌�
+ tableRowClassName({ row, rowIndex }) {
+ if (row.excep == 1) {
+ return "warning-row";
+ } else if (row.excep == 2) {
+ return "remind-row";
+ }
+ return "";
+ },
+ restoreSelection() {
+ if (!this.$refs.userform) {
+ console.log("琛ㄦ牸寮曠敤涓嶅瓨鍦�");
+ return;
+ }
+
+ console.log("鎵ц restoreSelection");
+
+ // 娓呴櫎褰撳墠椤电殑鎵�鏈夐�変腑鐘舵��
+ this.$refs.userform.clearSelection();
+
+ // 鎵惧嚭褰撳墠椤典腑鍝簺琛屾槸琚�変腑鐨�
+ const toBeSelected = this.userList.filter((row) =>
+ this.selectedRowMap.has(row.id)
+ );
+
+ console.log("闇�瑕佹仮澶嶇殑琛屾暟:", toBeSelected.length);
+
+ // 閲嶆柊閫変腑杩欎簺琛�
+ toBeSelected.forEach((row) => {
+ this.$refs.userform.toggleRowSelection(row, true);
+ });
+ },
+ // 鉁� 澶勭悊琛ㄥご鍏ㄩ�変簨浠�
+ // 鍗$墖妯″紡-鍒囨崲鍗曡閫変腑
+ toggleRowSelection(row) {
+ const idx = this.selectedRows.findIndex((r) => r.id === row.id);
+ if (idx > -1) {
+ this.selectedRows.splice(idx, 1);
+ this.selectedRowMap.delete(row.id);
+ } else {
+ this.selectedRows.push(row);
+ this.selectedRowMap.set(row.id, row);
+ }
+ },
+ // 鍗$墖妯″紡-鍏ㄩ�夊垏鎹�
+ handleCheckAllChange(val) {
+ if (val) {
+ this.selectedRows = [...this.userList];
+ this.userList.forEach(r => this.selectedRowMap.set(r.id, r));
+ } else {
+ this.selectedRows = [];
+ this.selectedRowMap.clear();
+ }
+ },
+
+ handleSelectAll(selection) {
+ console.log("鍏ㄩ�変簨浠惰Е鍙戯紝閫変腑琛屾暟:", selection.length);
+
+ // 濡傛灉 selection 闀垮害绛変簬褰撳墠椤佃鏁帮紝璇存槑鏄叏閫�
+ if (selection.length === this.userList.length) {
+ // 鍏ㄩ�夊綋鍓嶉〉
+ this.userList.forEach((row) => {
+ this.selectedRowMap.set(row.id, {
+ ...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,
+ });
+ });
+ } else {
+ // 鍙栨秷鍏ㄩ�夛細娓呴櫎褰撳墠椤电殑閫変腑鐘舵��
+ this.userList.forEach((row) => {
+ this.selectedRowMap.delete(row.id);
+ });
+ }
+
+ // 鏇存柊 selectedRows
+ this.selectedRows = Array.from(this.selectedRowMap.values());
+ this.multiple = this.selectedRows.length === 0;
+ },
+
+ // 娓呴櫎鎵�鏈夐�変腑
+ clearAllSelection() {
+ this.selectedRowMap.clear();
+ this.selectedRows = [];
+ this.multiple = true;
+
+ if (this.$refs.userform) {
+ this.$refs.userform.clearSelection();
+ }
+ },
+
+ // 鑾峰彇閫変腑鏁伴噺
+ getSelectedCount() {
+ return this.selectedRowMap.size;
+ },
+ // 鍒涘缓鍐嶆闅忚鏈嶅姟
+ setupsubtask() {
+ this.$refs["zcform"].validate((valid) => {
+ if (valid) {
+ this.zcform.remark =
+ this.zcform.remark + "銆�" + this.getCurrentTime() + "銆�";
+ let form = structuredClone(this.zcform);
+ form.visitTime = this.formatTime(form.date1);
+ form.finishtime = "";
+ if (form.resource) {
+ if (form.resource == 2) {
+ form.serviceType = 13;
+ }
+ } else {
+ this.$modal.msgError("鏈�夋嫨闅忚鏂瑰紡");
+ }
+ form.id = null;
+ form.sendstate = 2;
+ form.preachform = form.preachformson;
+ form.longTask = 0;
+ addserviceSubtask(form).then((res) => {
+ if (res.code == 200) {
+ this.$modal.msgSuccess("鍒涘缓鎴愬姛");
+ } else {
+ this.$modal.msgError("鍒涘缓澶辫触");
+ }
+ this.dialogFormVisible = false;
+ });
+ }
+ });
+ },
+ 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}`;
+ },
+
+ // ---------- 鍙樻洿绉戝/鐥呭尯 ----------
+ handleTransferOpen(row) {
+ if (!this.deptOptionsks.length) {
+ deptTreeSelect(1).then((res) => {
+ this.deptOptionsks = res.data || [];
+ });
+ deptTreeSelect(2).then((res) => {
+ this.deptOptionsbq = res.data || [];
+ });
+ }
+ this.transferForm = {
+ subId: row.id || row.subtaskid,
+ leavelDeptCode: "",
+ leavelDeptName: "",
+ leavehospitaldistrictcode: "",
+ leavehospitaldistrictname: "",
+ currentDeptName: row.deptname || row.deptName || "",
+ currentWardName:
+ row.leavehospitaldistrictname || row.leavehospitaldistrictName || "",
+ };
+ this.transferDeptValue = [];
+ this.transferWardValue = [];
+ this.transferDialogVisible = true;
+ },
+ handleDeptCascaderChange(val) {
+ if (val && val.length) {
+ this.transferForm.leavelDeptCode = val[val.length - 1];
+ // 浠庨�夐」鏍戜腑鏌ユ壘瀵瑰簲鍚嶇О
+ const node = this.findCascaderNode(this.deptOptionsks, this.transferForm.leavelDeptCode);
+ this.transferForm.leavelDeptName = node ? node.label : '';
+ } else {
+ this.transferForm.leavelDeptCode = '';
+ this.transferForm.leavelDeptName = '';
+ }
+ },
+ handleWardCascaderChange(val) {
+ if (val && val.length) {
+ this.transferForm.leavehospitaldistrictcode = val[val.length - 1];
+ const node = this.findCascaderNode(this.deptOptionsbq, this.transferForm.leavehospitaldistrictcode);
+ this.transferForm.leavehospitaldistrictname = node ? node.label : '';
+ } else {
+ this.transferForm.leavehospitaldistrictcode = '';
+ this.transferForm.leavehospitaldistrictname = '';
+ }
+ },
+ findCascaderNode(options, code) {
+ for (const item of options) {
+ if (item.deptCode === code || item.value === code) return item;
+ if (item.children) {
+ const found = this.findCascaderNode(item.children, code);
+ if (found) return found;
+ }
+ }
+ return null;
+ },
+ handleTransferSubmit() {
+ const hasDept = !!this.transferForm.leavelDeptCode;
+ const hasWard = !!this.transferForm.leavehospitaldistrictcode;
+ if (!hasDept && !hasWard) {
+ this.$modal.msgError("璇疯嚦灏戦�夋嫨鐩爣绉戝鎴栫洰鏍囩梾鍖�");
+ return;
+ }
+ console.log(this.transferForm);
+
+ // 缁勮鍙樻洿鎻愮ず鏂囨湰
+ const deptName = this.transferForm.leavelDeptName || "涓嶅彉";
+ const wardName = this.transferForm.leavehospitaldistrictname || "涓嶅彉";
+ const tip = `纭灏嗙瀹ゅ彉鏇翠负"${deptName}"銆佺梾鍖哄彉鏇翠负"${wardName}"锛焋;
+ this.$modal
+ .confirm(tip, "鍙樻洿纭")
+ .then(() => {
+ this.transferLoading = true;
+ transferDept(this.transferForm)
+ .then((res) => {
+ if (res.code === 200) {
+ this.$modal.msgSuccess("绉戝/鐥呭尯鍙樻洿鎴愬姛");
+ this.transferDialogVisible = false;
+ this.getList();
+ } else {
+ this.$modal.msgError(res.msg || "鍙樻洿澶辫触");
+ }
+ })
+ .catch(() => {
+ this.$modal.msgError("鍙樻洿澶辫触锛岃閲嶈瘯");
+ })
+ .finally(() => {
+ this.transferLoading = false;
+ });
+ })
+ .catch(() => {});
+ },
+ },
+};
+</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;
+}
+::v-deep.el-table .remind-row {
+ background: #fcf5aa;
+}
+
+.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: #f2f8ff;
+ color: #324a9b;
+}
+::v-deep.leftvlue .el-card__body:hover {
+ background: #3664d9;
+ color: #fff;
+ cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */
+}
+::v-deep.errleftvlue .el-card__body {
+ background: #fdd0d7;
+}
+::v-deep.errleftvlue .el-card__body:hover {
+ background: #f88d96;
+ cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */
+}
+::v-deep.jgleftvlue .el-card__body:hover {
+ background: #f7f075;
+ cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */
+}
+
+::v-deep.ysfleftvlue .el-card__body {
+ background: #d0fdd8;
+}
+::v-deep.ysfleftvlue .el-card__body:hover {
+ background: #0abc54;
+ 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: #324a9b;
+ 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;
+}
+.button-textxga {
+ color: #de7897;
+}
+.button-textxgc {
+ color: #9054e4;
+}
+.purple-button.is-disabled {
+ background-color: #d8b4fe;
+ border-color: #d8b4fe;
+ opacity: 1; /* 淇濇寔绂佺敤鐘舵�侀�忔槑搴� */
+}
+.statistics-tooltip {
+ background: #ffffff !important;
+ color: #1976d2 !important;
+ border: 1px solid #bbdefb !important;
+ border-radius: 8px !important;
+ padding: 10px 14px !important;
+ font-size: 13px !important;
+ line-height: 1.6 !important;
+ box-shadow: 0 4px 12px rgba(25, 118, 210, 0.15) !important;
+}
+.statistics-tooltip .popper__arrow {
+ border-bottom-color: #bbdefb !important;
+}
+
+.statistics-tooltip .popper__arrow::after {
+ border-bottom-color: #ffffff !important;
+}
+// 閫夐」瀛椾綋鏀惧ぇ
+// ::v-deep.el-checkbox-group {
+// span {
+// font-size: 24px;
+// }
+// }
+.filter-warning {
+ margin-top: 8px;
+ padding: 10px 14px;
+ background: #fff7e6;
+ border: 1px solid #ffe58f;
+ border-radius: 6px;
+ color: #d46b08;
+ font-size: 18px;
+ line-height: 1.6;
+ display: flex;
+ align-items: flex-start;
+ gap: 6px;
+}
+
+.filter-warning .el-icon-warning-outline {
+ font-size: 16px;
+ color: #faad14;
+ flex-shrink: 0;
+ margin-top: 2px;
+}
+
+::v-deep .el-table__row.selected-row:hover > td {
+ background-color: #e6f7ff !important;
+}
+
+/* 閫変腑淇℃伅鏄剧ず */
+.selected-info {
+ padding: 10px 0;
+ font-size: 14px;
+ color: #666;
+}
+// ===== 鍗$墖鍒楄〃鏍峰紡 =====
+.card-list { padding: 0 4px; }
+.follow-card {
+ position: relative; background: #fff; border-radius: 8px; padding: 12px 16px 8px;
+ margin-bottom: 12px; border: 1px solid #ebeef5; transition: box-shadow .2s;
+ &:hover { box-shadow: 0 2px 10px rgba(0,0,0,.06); }
+ &.warning-row { border-left: 3px solid #e6a23c; }
+ &.remind-row { border-left: 3px solid #409eff; }
+}
+.card-check { position: absolute; top: 12px; left: 10px; z-index: 1; }
+.card-head {
+ display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
+ padding: 0 0 6px 28px; margin-bottom: 6px; border-bottom: 1px dashed #ebeef5;
+ .card-task-name { font-size: 15px; font-weight: 700; color: #303133; white-space: nowrap; }
+ .visit-status { flex-shrink: 0; }
+ .card-actions { flex-shrink: 0; margin-left: auto; display: flex; gap: 2px;
+ .el-button { font-size: 11px; padding: 2px 6px; }
+ }
+}
+
+// 鍐呰仈鏃堕棿绾�
+.time-inline {
+ font-size: 11px; color: #606266; white-space: nowrap;
+ em { font-style: normal; color: #909399; margin-right: 2px; }
+ i { color: #c0c4cc; margin: 0 4px; font-style: normal; }
+}
+
+// 涓ゆ爮
+.card-columns { display: flex; gap: 10px; padding-left: 28px; }
+.card-col { flex: 1; min-width: 0; display: flex; }
+
+// 鑹插潡
+.block { border-radius: 6px; padding: 7px 10px; font-size: 13px; flex: 1; }
+.block-title { font-size: 11px; font-weight: 600; margin-bottom: 3px; i { margin-right: 4px; } }
+.block-row { color: #303133; line-height: 1.6; font-size: 13px; }
+.sub-text { color: #909399; font-size: 12px; }
+.block-blue { background: #ecf5ff; .block-title { color: #409eff; } }
+.block-green { background: #edf7f0; .block-title { color: #67c23a; } }
+.block-gray { background: #f5f7fa; .block-title { color: #909399; font-size: 11px; } }
+
+.sub { color: #909399; font-size: 12px; margin-left: 8px; }
+.diag-tag { display: inline-block; font-size: 11px; color: #e6a23c; background: #fdf6ec; padding: 1px 6px; border-radius: 3px; margin-right: 6px; }
+.name-link { color: #409eff; cursor: pointer; font-weight: 600; &:hover { text-decoration: underline; } }
+
+.meta-grid { display: flex; flex-wrap: wrap; gap: 3px 10px; font-size: 11px; color: #606266;
+ span { white-space: nowrap; }
+ em { font-style: normal; color: #909399; margin-right: 2px; }
+}
+
+.card-check-all { margin-bottom: 10px; }
+</style>
diff --git a/src/views/followvisit/discharge/index.vue.bak b/src/views/followvisit/discharge/index.vue.bak
new file mode 100644
index 0000000..dc7e7ec
--- /dev/null
+++ b/src/views/followvisit/discharge/index.vue.bak
@@ -0,0 +1,2769 @@
+<template>
+ <div class="app-container">
+ <statistics-cards
+ :cardlist="cardlist"
+ :ycvalue="ycvalue"
+ :jgvalue="jgvalue"
+ :show-warning-condition="orgname == '鐪佺珛鍚屽痉缈犺嫅闄㈠尯'"
+ />
+ <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="搴旈殢璁挎椂闂�">
+ <el-date-picker
+ v-model="dateRangefs"
+ 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="鏃ユ湡闄愬埗" prop="status">
+ <el-select v-model="endOut" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in endOuts"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鎮h�呰寖鍥�" prop="status">
+ <el-cascader
+ v-model="topqueryParams.scopetype"
+ placeholder="榛樿鍏ㄩ儴"
+ :options="sourcetype"
+ :props="{ expandTrigger: 'hover' }"
+ @change="handleChange"
+ filterable
+ clearable
+ ></el-cascader>
+ </el-form-item>
+
+ <el-form-item label="闅忚鐘舵��" prop="status">
+ <el-cascader
+ v-model="serviceStatusValue"
+ placeholder="璇烽�夋嫨"
+ :options="serviceStatusOptions"
+ :props="cascaderProps"
+ @change="handleServiceStatusChange"
+ clearable
+ ></el-cascader>
+ </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"
+ 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, 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, 1)"
+ >缁撴灉寮傚父</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" 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-col :span="1.5" v-if="orgname == '鏅畞鐣叉棌鑷不鍘夸汉姘戝尰闄�'">
+ <div class="documentf">
+ <div class="document">
+ <el-tooltip
+ content="璇峰厛閫変腑鏈嶅姟"
+ placement="top"
+ :disabled="!multiple"
+ >
+ <div class="tooltip-wrapper">
+ <el-button
+ type="primary"
+ :disabled="multiple"
+ class="purple-button"
+ @click="scoreDialogVisible = true"
+ >
+ 婊℃剰搴﹁皟鏌�
+ </el-button>
+ </div>
+ </el-tooltip>
+ </div>
+ </div>
+ </el-col>
+ </el-row>
+ <div class="selected-info">
+ 宸查�変腑
+ <span style="color: #409eff; font-weight: bold">{{
+ getSelectedCount()
+ }}</span>
+ 鏉℃暟鎹�
+ <el-button
+ v-if="getSelectedCount() > 0"
+ type="text"
+ @click="clearAllSelection"
+ >
+ 娓呴櫎閫変腑
+ </el-button>
+ </div>
+ <el-table
+ v-loading="loading"
+ ref="userform"
+ :data="userList"
+ :row-class-name="tableRowClassName"
+ @selection-change="handleSelectionChange"
+ @select-all="handleSelectAll"
+ >
+ <!-- 鍗$墖鍒楄〃妯″紡 -->
+ </el-table>
+ <div v-loading="loading" class="card-list">
+ <div style="margin-bottom:12px" v-if="userList.length > 0">
+ <el-checkbox v-model="checkAll" @change="handleCheckAllChange">鍏ㄩ��</el-checkbox>
+ </div>
+
+ <div v-for="row in userList" :key="row.id" class="follow-card" :class="rowClassName(row)">
+ <el-checkbox class="card-check" :value="isRowSelected(row)" @change="toggleRowSelection(row)" />
+
+ <div class="card-head">
+ <span class="card-task-name">{{ row.taskName || '-' }}</span>
+ <span>
+ <el-tag v-if="row.sendstateView==1" type="primary" size="small">寰呴殢璁�</el-tag>
+ <el-tag v-else-if="row.sendstateView==2" type="success" size="small">宸插畬鎴�</el-tag>
+ <el-tag v-else-if="row.sendstateView==3" type="warning" size="small">鏃犻渶闅忚</el-tag>
+ <el-tag v-if="row.sendstate==1" type="info" size="small" style="margin-left:6px">宸查鍙�</el-tag>
+ <el-tag v-else-if="row.sendstate==6" type="success" size="small" style="margin-left:6px">宸插畬鎴�</el-tag>
+ <el-tag v-else-if="row.sendstate==5" type="danger" size="small" style="margin-left:6px">澶辫触</el-tag>
+ </span>
+ </div>
+
+ <div class="card-body">
+ <div class="card-row">
+ <span class="card-cell"><b class="c-label">鎮h��</b><span class="name-link" @click="gettoken360(row.sfzh,row.drcode,row.drname,row.patid)">{{ row.sendname||'-' }}</span></span>
+ <span class="card-cell"><b class="c-label">鎬у埆</b>{{ row.sex==1?'鐢�':row.sex==2?'濂�':'-' }}</span>
+ <span class="card-cell"><b class="c-label">鐢佃瘽</b>{{ row.phone||'-' }}</span>
+ <span class="card-cell"><b class="c-label">鍑洪櫌</b>{{ row.endDay?row.endDay+'澶�':'-' }}</span>
+ </div>
+ <div class="card-row">
+ <span class="card-cell"><b class="c-label">绉戝</b>{{ row.deptname||'-' }}</span>
+ <span class="card-cell"><b class="c-label">鐥呭尯</b>{{ row.leavehospitaldistrictname||'-' }}</span>
+ <span class="card-cell"><b class="c-label">涓绘不鍖荤敓</b>{{ row.drname||'-' }}</span>
+ <span class="card-cell" v-if="orgname!='涓芥按甯備腑鍖婚櫌'"><b class="c-label">闅忚浜哄憳</b>{{ row.updateBy||'-' }}</span>
+ </div>
+ <div class="card-row" v-if="row.leavediagname">
+ <span class="card-cell full"><b class="c-label">璇婃柇</b>{{ row.leavediagname }}</span>
+ </div>
+ <div class="card-row time-row">
+ <span class="card-cell"><b class="c-label">鍑洪櫌</b>{{ formatTime(row.endtime) }}</span>
+ <span class="time-arrow">鈫�</span>
+ <span class="card-cell"><b class="c-label">搴旈殢璁�</b>{{ formatTime(row.visitTime) }}</span>
+ <span class="time-arrow">鈫�</span>
+ <span class="card-cell"><b class="c-label">瀹屾垚</b>{{ parseTime(row.finishtime) }}</span>
+ </div>
+ <div class="card-row" v-if="row.currentPreachform||row.templatename">
+ <span class="card-cell"><b class="c-label">鎵ц鏂瑰紡</b>{{ row.currentPreachform||(row.preachform&&row.preachform.join('銆�'))||'-' }}</span>
+ <span class="card-cell full" v-if="row.templatename"><b class="c-label">妯℃澘</b>{{ row.templatename }}</span>
+ </div>
+ <div class="card-row" v-if="row.suggest||row.remark">
+ <span class="card-cell" v-if="row.suggest"><b class="c-label">澶勭悊鎰忚</b><dict-tag :options="dict.type.sys_suggest" :value="row.suggest"/></span>
+ <span class="card-cell full" v-if="row.remark"><b class="c-label">缁撴灉璇存槑</b>{{ row.remark }}</span>
+ </div>
+ </div>
+
+ <div class="card-footer">
+ <el-button size="small" type="text" icon="el-icon-s-order" @click="Seedetails(row)">鏌ョ湅璇︽儏</el-button>
+ <el-button size="small" type="text" icon="el-icon-edit" @click="handleUpdate(row)">鎮h�呰繃婊�</el-button>
+ <el-button size="small" type="text" icon="el-icon-sort" @click="handleTransferOpen(row)">鍙樻洿绉�/鍖�</el-button>
+ </div>
+ </div>
+ <div v-if="userList.length===0&&!loading" style="text-align:center;padding:80px 0;color:#999">
+ <i class="el-icon-document" style="font-size:48px;display:block;margin-bottom:16px"></i>鏆傛棤鏁版嵁
+ </div>
+ </div>
+ <el-table v-if="false"></el-table>
+ <!-- end 鍗$墖鍒楄〃 -->
+ <el-table-column type="selection" width="50" align="center" v-if="false" />
+ <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,
+ scope.row.patid
+ )
+ "
+ ><span class="button-textsc">{{
+ scope.row.sendname
+ }}</span></el-button
+ >
+ </template>
+ </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="sendstateView"
+ prop="sendstateView"
+ width="120"
+ >
+ <template slot-scope="scope">
+ <el-tooltip
+ class="item"
+ effect="dark"
+ :content="scope.row.remark"
+ placement="top-start"
+ popper-class="statistics-tooltip"
+ >
+ <div v-if="scope.row.sendstateView == 1">
+ <el-tag type="primary" :disable-transitions="false"
+ >寰呴殢璁�</el-tag
+ >
+ </div>
+ <div v-if="scope.row.sendstateView == 2">
+ <el-tag type="success" :disable-transitions="false"
+ >宸插畬鎴�</el-tag
+ >
+ </div>
+ <div v-if="scope.row.sendstateView == 3">
+ <el-tag type="warning" :disable-transitions="false"
+ >鏃犻渶闅忚</el-tag
+ >
+ </div>
+ </el-tooltip>
+ </template>
+ </el-table-column>
+
+ <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="浠诲姟鎵ц鏂瑰紡"
+ 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="currentPreachform"
+ prop="currentPreachform"
+ width="160"
+ :show-overflow-tooltip="true"
+ >
+ </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="146"
+ 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="146"
+ align="center"
+ key="longSendTime"
+ prop="longSendTime"
+ :render-header="Tooltipks"
+ >
+ <template slot-scope="scope">
+ <span>{{ formatTime(scope.row.longSendTime) }}</span>
+ </template></el-table-column
+ >
+ <el-table-column
+ label="搴旈殢璁挎棩鏈�"
+ width="146"
+ align="center"
+ key="visitTime"
+ prop="visitTime"
+ :render-header="Tooltipy"
+ >
+ <template slot-scope="scope">
+ <span>{{ formatTime(scope.row.visitTime) }}</span>
+ </template></el-table-column
+ >
+
+ <!-- 鍘� -->
+ <el-table-column
+ label="涓绘不鍖荤敓"
+ width="120"
+ align="center"
+ key="drname"
+ prop="drname"
+ />
+ <el-table-column
+ label="璐d换鎶ゅ+"
+ width="120"
+ align="center"
+ key="nurseName"
+ prop="nurseName"
+ />
+ <el-table-column
+ label="缁忕鍖荤敓"
+ align="center"
+ key="managementDoctor"
+ prop="managementDoctor"
+ width="120"
+ />
+ <el-table-column
+ v-if="orgname != '涓芥按甯備腑鍖婚櫌'"
+ label="闅忚浜哄憳"
+ align="center"
+ key="updateBy"
+ prop="updateBy"
+ width="120"
+ />
+ <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>
+ <div v-if="scope.row.sendstate == 7">
+ <el-tag type="danger" :disable-transitions="false">瓒呮椂</el-tag>
+ </div>
+ </el-tooltip>
+ </template>
+ </el-table-column>
+ <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="phone"
+ prop="phone"
+ />
+ <el-table-column
+ label="韬唤璇佸彿鐮�"
+ width="200"
+ align="center"
+ key="sfzh"
+ prop="sfzh"
+ />
+
+ <!-- <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="templatename"
+ prop="templatename"
+ width="200"
+ />
+
+ <!-- <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
+ >
+ <el-button
+ size="medium"
+ type="text"
+ v-if="orgname == '鍗楀崕澶у闄勫睘绗竴鍖婚櫌'"
+ @click="handleTransferOpen(scope.row)"
+ ><span class="button-textxgc"
+ ><i class="el-icon-sort"></i>鍙樻洿绉�/鍖�</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>
+ <!-- 鎻愰啋鏂囧瓧 -->
+ <div class="filter-warning">
+ <i class="el-icon-warning-outline"></i>
+ 璇ュ姛鑳介�傜敤浜庢浜°�佸垪鍏ュ尰闄㈤粦鍚嶅崟銆佹槑纭嫆缁濋殢璁跨瓑鎮h�呯殑杩囨护鎺掗櫎锛岃繃婊ゅ悗璇ユ偅鑰呮墍鏈夎繘琛屼腑浠诲姟鍏ㄩ儴鍋滄涓旀棤娉曞尮閰嶆柊鐨勯殢璁夸换鍔★紝璇疯皑鎱庢搷浣滐紒
+ </div>
+ </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="鎮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>
+ <el-button type="primary" @click="setupsubtask">纭鍒涘缓鏈嶅姟</el-button>
+ </div>
+ </el-dialog>
+
+ <!-- 鍙樻洿绉戝/鐥呭尯寮圭獥 -->
+ <el-dialog
+ title="鍙樻洿绉戝/鐥呭尯"
+ :visible.sync="transferDialogVisible"
+ width="480px"
+ :close-on-click-modal="false"
+ >
+ <el-form :model="transferForm" label-width="100px">
+ <el-form-item label="褰撳墠绉戝">
+ <span>{{ transferForm.currentDeptName || "-" }}</span>
+ </el-form-item>
+ <el-form-item label="褰撳墠鐥呭尯">
+ <span>{{ transferForm.currentWardName || "-" }}</span>
+ </el-form-item>
+ <el-form-item label="鐩爣绉戝">
+ <el-cascader
+ v-model="transferDeptValue"
+ :options="deptOptionsks"
+ :props="cascaderPropsa"
+ placeholder="璇烽�夋嫨鐩爣绉戝"
+ filterable
+ clearable
+ style="width: 100%"
+ @change="handleDeptCascaderChange"
+ />
+ </el-form-item>
+ <el-form-item label="鐩爣鐥呭尯">
+ <el-cascader
+ v-model="transferWardValue"
+ :options="deptOptionsbq"
+ :props="cascaderPropsa"
+ placeholder="璇烽�夋嫨鐩爣鐥呭尯"
+ filterable
+ clearable
+ style="width: 100%"
+ @change="handleWardCascaderChange"
+ />
+ </el-form-item>
+ </el-form>
+ <div slot="footer" class="dialog-footer">
+ <el-button @click="transferDialogVisible = false">鍙� 娑�</el-button>
+ <el-button
+ type="primary"
+ :loading="transferLoading"
+ @click="handleTransferSubmit"
+ >
+ 纭鍙樻洿
+ </el-button>
+ </div>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ delUser,
+ addUser,
+ updateUser,
+ resetUserPwd,
+ changeUserStatus,
+ deptTreeSelect,
+} from "@/api/system/user";
+import {
+ getTaskservelist,
+ buidegetTasklist,
+ addserviceSubtask,
+ query360PatInfo,
+ addsatisfaction,
+ transferDept,
+ query360PatInfonh,
+} from "@/api/AiCentre/index";
+import { alterpatient, particularpatient } from "@/api/patient/homepage";
+import Treeselect from "@riophae/vue-treeselect";
+import StatisticsCards from "@/components/StatisticsCards";
+
+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, StatisticsCards },
+ data() {
+ return {
+ // 閬僵灞�
+ loading: true,
+ // 閫変腑鏁扮粍
+ ids: [],
+ // 闈炲崟涓鐢�
+ single: true,
+ // 闈炲涓鐢�
+ multiple: true,
+ // 鏄剧ず鎼滅储鏉′欢
+ showSearch: true,
+ dialogFormVisible: false,
+ // 鎬绘潯鏁�
+ total: 0,
+ // 鐢ㄦ埛琛ㄦ牸鏁版嵁
+ userList: null,
+ // 寮瑰嚭灞傛爣棰�
+ title: "鏂板褰卞儚闅忚",
+ // 鏄惁鏄剧ず淇敼銆佹坊鍔犲脊鍑哄眰
+ addalteropen: false,
+
+ // 閮ㄩ棬鍚嶇О
+ deptName: undefined,
+ // 榛樿瀵嗙爜
+ initPassword: undefined,
+ // 鏃ユ湡鑼冨洿
+ dateRange: [],
+ dateRangefs: [],
+ // 宀椾綅閫夐」
+ postOptions: [],
+ ruleForm: {
+ type: [],
+ },
+ zcform: {},
+ dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
+ inputVisible: false,
+ Labelchange: false,
+ ycvalue: 0,
+ jgvalue: "",
+ yfsvalue: "",
+ inputValue: "",
+ preachform: "",
+ previewVisible: false, //褰卞儚闅忚棰勮寮规
+ isRestoring: false,
+ radio: "",
+ radios: [],
+ previewtype: 2, //棰勮褰卞儚闅忚绫诲瀷
+ total: 0, // 鎬绘潯鏁�
+ // 婊℃剰搴﹁皟鏌ユ暟鎹�
+ scoreDialogVisible: false,
+ selectedRows: [],
+ selectedRowMap: new Map(), // key: row.id, value: row 鏁版嵁
+
+ // 绾ц仈閫夋嫨鍣ㄧ粦瀹氬��
+ serviceStatusValue: 10,
+ cascaderProps: {
+ expandTrigger: "hover", // 鎮仠灞曞紑
+ checkStrictly: true, // 鉁� 鍏抽敭锛氬厑璁搁�変腑浠绘剰涓�绾�
+ emitPath: false, // 鉁� 鍙繑鍥為�変腑鐨勫�硷紝涓嶈繑鍥炶矾寰勬暟缁�
+ },
+ // 鏈嶅姟鐘舵�侀�夐」锛堜竴绾у拰浜岀骇鍊间笉鍐茬獊锛�
+ serviceStatusOptions: [
+ {
+ value: null,
+ label: "鍏ㄩ儴",
+ },
+ {
+ value: 10, // 涓�绾э細寰呴殢璁�
+ label: "寰呴殢璁�",
+ children: [
+ { value: 1, label: "琚鍙�" },
+ { value: 2, label: "寰呭彂閫�" },
+ { value: 3, label: "宸插彂閫�" },
+ { value: 5, label: "鍙戦�佸け璐�" },
+ { value: 7, label: "瓒呮椂" },
+ ],
+ },
+ {
+ value: 20, // 涓�绾э細宸插畬鎴�
+ label: "宸插畬鎴�",
+ children: [{ value: 6, label: "宸插畬鎴�" }],
+ },
+ {
+ value: 30, // 涓�绾э細鏃犻渶闅忚
+ label: "鏃犻渶闅忚",
+ children: [{ value: 4, label: "涓嶆墽琛�" }],
+ },
+ ],
+ value: [],
+ list: [],
+
+ sourcetype: [
+ {
+ value: 1,
+ label: "绉戝",
+ children: [],
+ },
+ {
+ value: 2,
+ label: "鐥呭尯",
+ children: [],
+ },
+ {
+ value: 3,
+ label: "鍏ㄩ儴",
+ },
+ ],
+ loading: false,
+ cardlist: [
+ {
+ name: "鎮h�呮湇鍔℃�婚噺",
+ 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: "",
+ },
+ // endOut: 1,
+ endOut:
+ localStorage.getItem("orgname") == "鏅畞鐣叉棌鑷不鍘夸汉姘戝尰闄�" ? 0 : 1, //0 鍑洪櫌鏃堕棿(姝e簭) 1 鍑洪櫌鏃堕棿(鍊掑簭) 2 鍙戦�佹椂闂�(姝e簭) 3 鍙戦�佹椂闂�(鍊掑簭) 7搴旈殢璁挎棩鏈�(鍊掑簭) 搴旈殢璁挎棩鏈�(姝e簭)
+ endOuts: [
+ {
+ value: 0,
+ label: "鎴鑷冲綋鏃ユ湇鍔�",
+ },
+ {
+ value: 1,
+ label: "鍏ㄩ儴鏈嶅姟",
+ },
+ ],
+ topicoptionssort: [
+ {
+ value: 0,
+ label: "鍑洪櫌鏃堕棿(姝e簭)",
+ },
+ {
+ value: 1,
+ label: "鍑洪櫌鏃堕棿(鍊掑簭)",
+ },
+ {
+ value: 2,
+ label: "鍙戦�佹椂闂�(姝e簭)",
+ },
+ {
+ value: 3,
+ label: "鍙戦�佹椂闂�(鍊掑簭)",
+ },
+ {
+ value: 7,
+ label: "搴旈殢璁挎棩鏈�(姝e簭)",
+ },
+ {
+ value: 8,
+ label: "搴旈殢璁挎棩鏈�(鍊掑簭)",
+ },
+ {
+ value: 9,
+ label: "鎸夌収鎮h�呮帓搴�",
+ },
+ ],
+ // 鏌ヨ鍙傛暟
+ topqueryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ sendstateView: 1,
+ sort:
+ localStorage.getItem("orgname") == "涓芥按甯備腑鍖婚櫌"
+ ? 8
+ : localStorage.getItem("orgname") == "鏅畞鐣叉棌鑷不鍘夸汉姘戝尰闄�"
+ ? 2
+ : 1, //0 鍑洪櫌鏃堕棿(姝e簭) 1 鍑洪櫌鏃堕棿(鍊掑簭) 2 鍙戦�佹椂闂�(姝e簭) 3 鍙戦�佹椂闂�(鍊掑簭) 7搴旈殢璁挎棩鏈�(鍊掑簭) 搴旈殢璁挎棩鏈�(姝e簭)
+ serviceType: 2,
+ sendstate: null,
+ searchscope: 3,
+ visitCount: 1,
+ scopetype: [],
+ managementDoctor:
+ localStorage.getItem("orgname") == "缂欎簯鍘夸汉姘戝尰闄�"
+ ? store.getters.nickName
+ : "",
+ leaveldeptcodes: [],
+ leavehospitaldistrictcodes: [],
+ },
+ orgname: "",
+ propss: { multiple: true },
+ options: [],
+
+ topicoptions: [
+ {
+ value: null,
+ label: "鍏ㄩ儴",
+ },
+ {
+ value: 1,
+ label: "寰呴殢璁�",
+ },
+ {
+ value: 2,
+ label: "闅忚涓�",
+ },
+ {
+ value: 3,
+ label: "鏈畬鎴�",
+ },
+ {
+ value: 4,
+ label: "宸插畬鎴�",
+ },
+ {
+ value: 5,
+ label: "鏃犻渶闅忚",
+ },
+ ],
+
+ sextype: [
+ {
+ value: 1,
+ label: "鐢�",
+ },
+ {
+ value: 2,
+ label: "濂�",
+ },
+ ],
+ topicoptionsyj: [
+ {
+ value: 1,
+ label: "寮傚父",
+ },
+ {
+ value: 2,
+ 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: localStorage.getItem("YongHuID"),
+ YongHuXM: localStorage.getItem("YongHuXM"),
+ ZuZhiJGID: localStorage.getItem("orgid"),
+ ZuZhiJGMC: localStorage.getItem("orgname"),
+ idp: "lyra",
+ },
+ },
+ },
+ amendtag: false,
+ errtype: "",
+ leavehospitaldistrictcode: "",
+ serviceState: [],
+ checkboxlist: [],
+ // 鍙樻洿绉戝/鐥呭尯
+ transferDialogVisible: false,
+ transferForm: {
+ subId: null,
+ leavelDeptCode: "",
+ leavelDeptName: "",
+ leavehospitaldistrictcode: "",
+ leavehospitaldistrictname: "",
+ },
+ deptOptionsks: [],
+ deptOptionsbq: [],
+ transferDeptValue: [],
+ transferWardValue: [],
+ cascaderPropsa: {
+ value: "deptCode",
+ label: "label",
+ checkStrictly: true,
+ },
+ transferLoading: false,
+ // 琛ㄥ崟鏍¢獙
+ rules: {},
+ };
+ },
+ watch: {
+ // 鐩戝惉璺敱鍙傛暟鍙樺寲
+ "$route.query": {
+ handler(newQuery, oldQuery) {
+ if (newQuery?.errtype !== oldQuery?.errtype) {
+ console.log(22);
+ this.loadData();
+ }
+ },
+ immediate: true,
+ },
+ },
+ created() {
+ this.serviceState = store.getters.serviceState;
+ this.checkboxlist = store.getters.checkboxlist;
+ this.orgname = localStorage.getItem("orgname");
+ 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 == 1) {
+ this.toleadExport(2);
+ } else if (this.errtype == 2) {
+ // 寰呴殢璁�
+ this.toleadExport(3);
+ } else if (this.errtype == 3) {
+ // 澶辫触
+ this.toleadExport(4);
+ } else if (this.errtype == 4) {
+ // 寮傚父
+ this.toleadExport(2);
+ } else if (this.errtype == 5) {
+ // 鍏ㄩ儴
+ this.toleadExport(5);
+ } else {
+ this.getList(1);
+ }
+ this.getConfigKey("sys.user.initPassword").then((response) => {
+ this.initPassword = response.msg;
+ });
+ },
+ activated() {
+ this.errtype = this.$route.query.errtype;
+ if (this.errtype == 1) {
+ this.toleadExport(2);
+ } else if (this.errtype == 2) {
+ // 寰呴殢璁�
+ this.toleadExport(3);
+ } else if (this.errtype == 3) {
+ // 澶辫触
+ this.toleadExport(4);
+ } else if (this.errtype == 4) {
+ // 寮傚父
+ this.toleadExport(2);
+ } else if (this.errtype == 5) {
+ // 鍏ㄩ儴
+ this.toleadExport(5);
+ } else {
+ this.getList(1);
+ }
+ },
+ methods: {
+ /** 鏌ヨ闅忚鏈嶅姟鍒楄〃 */
+ async 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.endOut == 0) {
+ this.topqueryParams.endSendDateTime = this.formatDateToYYYYMMDDHHMMSS(
+ this.getEndOfDay()
+ );
+ }
+
+ // 鎺ュ彈寮傚父璺宠浆
+ if (this.errtype) {
+ this.topqueryParams.leavehospitaldistrictcodes.push(
+ this.leavehospitaldistrictcode
+ );
+ }
+
+ this.loading = true;
+
+ if (
+ this.topqueryParams.leavehospitaldistrictcodes[0] &&
+ this.topqueryParams.leaveldeptcodes[0]
+ ) {
+ this.topqueryParams.deptOrDistrict = 2;
+ } else {
+ this.topqueryParams.deptOrDistrict = 1;
+ }
+
+ if (!this.followupAuthority()) {
+ this.$message.warning("鏈厤缃瀹�/鐥呭尯鐩稿叧鏉冮檺涓嶅彲鏌ヨ");
+ this.loading = false;
+ return Promise.reject(new Error("鏃犳潈闄愭煡璇�"));
+ }
+
+ try {
+ const response = await getTaskservelist(this.topqueryParams);
+
+ // 鉁� 绗竴姝ワ細鍏堥攣瀹氭仮澶嶇姸鎬�
+ this.isRestoring = true;
+
+ // 鉁� 绗簩姝ワ細鍐嶆洿鏂版暟鎹紙杩欎細瑙﹀彂 selection-change锛屼絾琚攣浣忎簡锛�
+ this.userList = response.rows[0].serviceSubtaskList;
+ this.total = response.total;
+
+ // 鉁� 绗笁姝ワ細鎭㈠閫変腑鐘舵��
+ // this.restoreSelection();
+ this.$nextTick(() => {
+ this.restoreSelection();
+ });
+
+ // 鉁� 绗洓姝ワ細澶勭悊鍏朵粬鏁版嵁
+ if (refresh) {
+ this.cardlist[0].value =
+ Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0;
+ this.cardlist[1].value = response.rows[0].wxsf || 0;
+ this.ycvalue = Number(response.rows[0].yc) || 0;
+ this.jgvalue = response.rows[0].jg;
+ this.cardlist[2].value = response.rows[0].xsf || 0;
+ this.cardlist[3].value = response.rows[0].dsf || 0;
+ this.cardlist[4].value = response.rows[0].ywc || 0;
+ this.yfsvalue = response.rows[0].yfs;
+ }
+
+ // 鉁� 绗簲姝ワ細澶勭悊 preachform 绛夊叾浠栨暟鎹�
+ this.userList.forEach((item) => {
+ let idArray = null;
+ if (item.endtime) {
+ item.endDay = this.daysBetween(item.endtime);
+ }
+
+ if (item.preachform) {
+ item.preachformson = item.preachform;
+ idArray = item.preachform.split(",");
+
+ item.preachform = idArray.map((value) => {
+ const item = this.checkboxlist.find(
+ (item) => item.value == value
+ );
+ return item ? item.label : null;
+ });
+ }
+ if (item.currentPreachform) {
+ item.currentPreachform = this.checkboxlist.find(
+ (item) => item.value == item.currentPreachform
+ )?.value;
+ console.log(item.currentPreachform, "mi");
+ }
+ });
+
+ this.total = response.total;
+ this.loading = false;
+
+ // 鉁� 绗叚姝ワ細瑙i攣
+ this.$nextTick(() => {
+ this.isRestoring = false;
+ });
+ } catch (error) {
+ console.error("鑾峰彇鍒楄〃澶辫触:", error);
+ this.loading = false;
+ this.isRestoring = false;
+ }
+ },
+ loadData() {
+ this.errtype = this.$route.query.errtype;
+ if (this.errtype == 1) {
+ this.toleadExport(2);
+ } else if (this.errtype == 2) {
+ // 寰呴殢璁�
+ this.toleadExport(3);
+ } else if (this.errtype == 3) {
+ // 澶辫触
+ this.toleadExport(4);
+ } else if (this.errtype == 4) {
+ // 寮傚父
+ this.toleadExport(2);
+ } else if (this.errtype == 5) {
+ // 鍏ㄩ儴
+ this.toleadExport(5);
+ } else {
+ this.getList(1);
+ }
+ },
+ Tooltipy(h, { column }) {
+ return h(
+ "el-tooltip",
+ {
+ props: {
+ content: "浠诲姟閰嶇疆澶氱琛ュ伩绫诲瀷鏃讹紝鏈�鏂版墽琛岀被鍨嬬殑搴旈殢璁挎椂闂�",
+ placement: "top",
+ effect: "dark",
+ },
+ },
+ [h("span", column.label)]
+ );
+ },
+ Tooltipks(h, { column }) {
+ return h(
+ "el-tooltip",
+ {
+ props: {
+ content: "浠诲姟瀛樺湪澶氱琛ュ伩绫诲瀷鏃剁殑棣栨搴旈殢璁挎椂闂�",
+ placement: "top",
+ effect: "dark",
+ },
+ },
+ [h("span", column.label)]
+ );
+ },
+ // 鏃堕棿
+ getEndOfDay() {
+ const date = new Date(); // 鍒涘缓涓�涓〃绀哄綋鍓嶆椂闂寸殑Date瀵硅薄
+ date.setHours(23, 59, 59, 0); // 灏嗘椂闂磋缃负23:59:59.000
+ return date;
+ },
+ formatDateToYYYYMMDDHHMMSS(date) {
+ const year = date.getFullYear();
+ const month = String(date.getMonth() + 1).padStart(2, "0"); // 鏈堜唤琛ラ浂
+ const day = String(date.getDate()).padStart(2, "0"); // 鏃ユ湡琛ラ浂
+ const hours = String(date.getHours()).padStart(2, "0");
+ const minutes = String(date.getMinutes()).padStart(2, "0");
+ const seconds = String(date.getSeconds()).padStart(2, "0");
+
+ return `${year}-${month}-${day}`;
+ },
+ affiliation() {
+ this.resetQuerykj();
+ this.topqueryParams.managementDoctorCode = store.getters.hisUserId;
+ this.getList(1);
+ },
+ onthatday() {
+ this.resetQuerykj();
+
+ 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 (type) {
+ this.resetQuerykj();
+ }
+ 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;
+ this.cardlist[0].value =
+ Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0;
+ this.cardlist[1].value = response.rows[0].wzx;
+ this.cardlist[2].value = response.rows[0].ysf;
+ this.ycvalue = Number(response.rows[0].yc) || 0;
+ this.jgvalue = response.rows[0].jg;
+ 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;
+ // 鍒ゆ柇鏄笉鏄伐浣滃彴蹇嵎鏌ヨ
+ if (this.errtype != 2) {
+ 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) {
+ console.log("閫夋嫨鐨勬偅鑰呰寖鍥�:", value);
+
+ // 娓呯┖涔嬪墠鐨勬煡璇㈠弬鏁�
+ this.topqueryParams.leavehospitaldistrictcodes = [];
+ this.topqueryParams.leaveldeptcodes = [];
+ this.topqueryParams.searchscope = null;
+
+ if (!value || value.length === 0) {
+ return;
+ }
+
+ let type = value[0];
+ let code = value.slice(-1)[0];
+
+ 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;
+ }
+ },
+ // 鏈嶅姟鐘舵�佸彉鏇村鐞�
+ handleServiceStatusChange(value) {
+ // 娓呯┖閫夋嫨
+ if (value === null || value === undefined || value === "") {
+ this.topqueryParams.sendstateView = null;
+ this.topqueryParams.sendstate = null;
+ return;
+ }
+ console.log(value, "value");
+
+ // 涓�绾ц妭鐐圭殑鍊硷紙澶т簬绛変簬10锛�
+ if (value >= 10) {
+ // 閫変腑浜嗕竴绾�
+ switch (value) {
+ case 10:
+ this.topqueryParams.sendstateView = 1; // 寰呴殢璁�
+ break;
+ case 20:
+ this.topqueryParams.sendstateView = 2; // 宸插畬鎴�
+ break;
+ case 30:
+ this.topqueryParams.sendstateView = 3; // 鏃犻渶闅忚
+ break;
+ }
+ this.topqueryParams.sendstate = null;
+ } else {
+ // 閫変腑浜嗕簩绾э紙鍏蜂綋鐘舵�侊級
+ this.topqueryParams.sendstateView = null;
+ this.topqueryParams.sendstate = value;
+ }
+ },
+ /** 閲嶇疆鎸夐挳鎿嶄綔 */
+ resetQuery() {
+ this.dateRange = [];
+ this.dateRangefs = [];
+ this.serviceStatusValue = 10;
+ this.topqueryParams = {
+ pageNum: 1,
+ pageSize: 10,
+ sendstateView: 1,
+ sort: 2, //0 鍑洪櫌鏃堕棿(姝e簭) 1 鍑洪櫌鏃堕棿(鍊掑簭) 2 鍙戦�佹椂闂�(姝e簭) 3 鍙戦�佹椂闂�(鍊掑簭)
+ serviceType: 2,
+ searchscope: 3,
+ visitCount: 1,
+ scopetype: [],
+ leaveldeptcodes: [],
+ leavehospitaldistrictcodes: [],
+ };
+ this.handleQuery(1);
+ },
+ /** 閲嶇疆鎸夐挳鎿嶄綔 */
+ resetQuerykj() {
+ this.dateRange = [];
+ this.dateRangefs = [];
+ this.serviceStatusValue = null;
+ this.topqueryParams = {
+ pageNum: 1,
+ pageSize: 10,
+ sendstateView: null,
+ sort: 2, //0 鍑洪櫌鏃堕棿(姝e簭) 1 鍑洪櫌鏃堕棿(鍊掑簭) 2 鍙戦�佹椂闂�(姝e簭) 3 鍙戦�佹椂闂�(鍊掑簭)
+ serviceType: 2,
+ searchscope: 3,
+ visitCount: 1,
+ scopetype: [],
+ leaveldeptcodes: [],
+ leavehospitaldistrictcodes: [],
+ };
+ },
+ handleSelectionChange(rows) {
+ // 鉁� 濡傛灉鏄仮澶嶉�変腑鐘舵�佽Е鍙戠殑锛岀洿鎺ヨ繑鍥�
+ if (this.isRestoring) {
+ console.log("姝e湪鎭㈠閫変腑鐘舵�侊紝璺宠繃 handleSelectionChange");
+ return;
+ }
+
+ console.log("handleSelectionChange 琚Е鍙戯紝閫変腑琛屾暟:", rows.length);
+
+ // 鍙仛娣诲姞鎿嶄綔
+ rows.forEach((row) => {
+ this.selectedRowMap.set(row.id, {
+ ...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,
+ });
+ });
+
+ this.selectedRows = Array.from(this.selectedRowMap.values());
+ this.multiple = this.selectedRows.length === 0;
+ },
+
+ // 璁$畻鎬诲垎
+ 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: 2,
+ },
+ });
+ },
+ //鎮h��360璺宠浆
+ gettoken360(sfzh, drcode, drname, id) {
+ const orgname = localStorage.getItem("orgname");
+ if (orgname == "鍗楀崕澶у闄勫睘绗竴鍖婚櫌") {
+ query360PatInfonh(id).then((res) => {
+ if (res.data) {
+ window.open(res.data, "_blank");
+ } else {
+ this.$modal.msgWarning("360鏌ヨ鏃犵粨鏋�");
+ }
+ });
+ return;
+ } else if (
+ orgname == "绗竴浜烘皯鍖婚櫌婀栨花闄㈠尯" ||
+ orgname == "绗竴浜烘皯鍖婚櫌鍚村北闄㈠尯"
+ ) {
+ let url = `http://192.200.81.189:9100/blj/view?BINGRENID=${id}&YONGHUID=DBA`;
+ window.open(url, "_blank");
+ return;
+ }
+
+ this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh;
+
+ 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(() => {});
+ },
+
+ // 璺宠浆璇︽儏椤�
+ Seedetails(row) {
+ let type = "";
+ console.log(row, "rwo");
+ if (row.type == 1) {
+ 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,
+ },
+ });
+ },
+ // 鍐嶆闅忚
+ followupvisit(row) {
+ this.zcform = row;
+ this.zcform.endtime = this.formatTime(this.zcform.endtime);
+ this.dialogFormVisible = true;
+ },
+ 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, type) {
+ if (type) {
+ this.resetQuerykj();
+ }
+
+ if (too == 1) {
+ this.topqueryParams.sendstate = 4;
+ this.topqueryParams.excep = null;
+ } else if (too == 2) {
+ this.topqueryParams.excep = 1;
+ this.topqueryParams.sendstate = null;
+ } else if (too == 3) {
+ this.topqueryParams.endSendDateTime = this.formatDateToYYYYMMDDHHMMSS(
+ this.getEndOfDay()
+ );
+
+ this.topqueryParams.excep = null;
+ this.topqueryParams.sendstate = 2;
+ this.topqueryParams.scopetype = null;
+ } else if (too == 4) {
+ this.topqueryParams.excep = null;
+ this.topqueryParams.sendstate = 5;
+ this.topqueryParams.scopetype = null;
+ } else if (too == 5) {
+ this.topqueryParams.excep = null;
+ this.topqueryParams.sendstate = null;
+ this.topqueryParams.scopetype = null;
+ }
+ this.handleQuery(1);
+ },
+ /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+ handleExport() {
+ const originalPageNum = this.topqueryParams.pageNum;
+ const originalPageSize = this.topqueryParams.pageSize;
+ this.topqueryParams.pageNum = null;
+ this.topqueryParams.pageSize = null;
+ this.topqueryParams.subIdList = this.selectedRows.map((item) => item.id);
+ this.download(
+ "smartor/serviceSubtask/patItemExport",
+ {
+ ...this.topqueryParams,
+ },
+ `user_${new Date().getTime()}.xlsx`
+ ).finally(() => {
+ // 瀵煎嚭鍚庢仮澶嶅垎椤靛弬鏁�
+ this.topqueryParams.pageNum = originalPageNum;
+ this.topqueryParams.pageSize = originalPageSize;
+ this.getList();
+ });
+ },
+ // 寮傚父鍒楁覆鏌�
+ tableRowClassName({ row, rowIndex }) {
+ if (row.excep == 1) {
+ return "warning-row";
+ } else if (row.excep == 2) {
+ return "remind-row";
+ }
+ return "";
+ },
+ restoreSelection() {
+ if (!this.$refs.userform) {
+ console.log("琛ㄦ牸寮曠敤涓嶅瓨鍦�");
+ return;
+ }
+
+ console.log("鎵ц restoreSelection");
+
+ // 娓呴櫎褰撳墠椤电殑鎵�鏈夐�変腑鐘舵��
+ this.$refs.userform.clearSelection();
+
+ // 鎵惧嚭褰撳墠椤典腑鍝簺琛屾槸琚�変腑鐨�
+ const toBeSelected = this.userList.filter((row) =>
+ this.selectedRowMap.has(row.id)
+ );
+
+ console.log("闇�瑕佹仮澶嶇殑琛屾暟:", toBeSelected.length);
+
+ // 閲嶆柊閫変腑杩欎簺琛�
+ toBeSelected.forEach((row) => {
+ this.$refs.userform.toggleRowSelection(row, true);
+ });
+ },
+ // 鉁� 澶勭悊琛ㄥご鍏ㄩ�変簨浠�
+ handleSelectAll(selection) {
+ console.log("鍏ㄩ�変簨浠惰Е鍙戯紝閫変腑琛屾暟:", selection.length);
+
+ // 濡傛灉 selection 闀垮害绛変簬褰撳墠椤佃鏁帮紝璇存槑鏄叏閫�
+ if (selection.length === this.userList.length) {
+ // 鍏ㄩ�夊綋鍓嶉〉
+ this.userList.forEach((row) => {
+ this.selectedRowMap.set(row.id, {
+ ...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,
+ });
+ });
+ } else {
+ // 鍙栨秷鍏ㄩ�夛細娓呴櫎褰撳墠椤电殑閫変腑鐘舵��
+ this.userList.forEach((row) => {
+ this.selectedRowMap.delete(row.id);
+ });
+ }
+
+ // 鏇存柊 selectedRows
+ this.selectedRows = Array.from(this.selectedRowMap.values());
+ this.multiple = this.selectedRows.length === 0;
+ },
+
+ // 娓呴櫎鎵�鏈夐�変腑
+ clearAllSelection() {
+ this.selectedRowMap.clear();
+ this.selectedRows = [];
+ this.multiple = true;
+
+ if (this.$refs.userform) {
+ this.$refs.userform.clearSelection();
+ }
+ },
+
+ // 鑾峰彇閫変腑鏁伴噺
+ getSelectedCount() {
+ return this.selectedRowMap.size;
+ },
+ // 鍒涘缓鍐嶆闅忚鏈嶅姟
+ setupsubtask() {
+ this.$refs["zcform"].validate((valid) => {
+ if (valid) {
+ this.zcform.remark =
+ this.zcform.remark + "銆�" + this.getCurrentTime() + "銆�";
+ let form = structuredClone(this.zcform);
+ form.visitTime = this.formatTime(form.date1);
+ form.finishtime = "";
+ if (form.resource) {
+ if (form.resource == 2) {
+ form.serviceType = 13;
+ }
+ } else {
+ this.$modal.msgError("鏈�夋嫨闅忚鏂瑰紡");
+ }
+ form.id = null;
+ form.sendstate = 2;
+ form.preachform = form.preachformson;
+ form.longTask = 0;
+ addserviceSubtask(form).then((res) => {
+ if (res.code == 200) {
+ this.$modal.msgSuccess("鍒涘缓鎴愬姛");
+ } else {
+ this.$modal.msgError("鍒涘缓澶辫触");
+ }
+ this.dialogFormVisible = false;
+ });
+ }
+ });
+ },
+ 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}`;
+ },
+
+ // ---------- 鍙樻洿绉戝/鐥呭尯 ----------
+ handleTransferOpen(row) {
+ if (!this.deptOptionsks.length) {
+ deptTreeSelect(1).then((res) => {
+ this.deptOptionsks = res.data || [];
+ });
+ deptTreeSelect(2).then((res) => {
+ this.deptOptionsbq = res.data || [];
+ });
+ }
+ this.transferForm = {
+ subId: row.id || row.subtaskid,
+ leavelDeptCode: "",
+ leavelDeptName: "",
+ leavehospitaldistrictcode: "",
+ leavehospitaldistrictname: "",
+ currentDeptName: row.deptname || row.deptName || "",
+ currentWardName:
+ row.leavehospitaldistrictname || row.leavehospitaldistrictName || "",
+ };
+ this.transferDeptValue = [];
+ this.transferWardValue = [];
+ this.transferDialogVisible = true;
+ },
+ handleDeptCascaderChange(val) {
+ if (val && val.length) {
+ this.transferForm.leavelDeptCode = val[val.length - 1];
+ // 浠庨�夐」鏍戜腑鏌ユ壘瀵瑰簲鍚嶇О
+ const node = this.findCascaderNode(this.deptOptionsks, this.transferForm.leavelDeptCode);
+ this.transferForm.leavelDeptName = node ? node.label : '';
+ } else {
+ this.transferForm.leavelDeptCode = '';
+ this.transferForm.leavelDeptName = '';
+ }
+ },
+ handleWardCascaderChange(val) {
+ if (val && val.length) {
+ this.transferForm.leavehospitaldistrictcode = val[val.length - 1];
+ const node = this.findCascaderNode(this.deptOptionsbq, this.transferForm.leavehospitaldistrictcode);
+ this.transferForm.leavehospitaldistrictname = node ? node.label : '';
+ } else {
+ this.transferForm.leavehospitaldistrictcode = '';
+ this.transferForm.leavehospitaldistrictname = '';
+ }
+ },
+ findCascaderNode(options, code) {
+ for (const item of options) {
+ if (item.deptCode === code || item.value === code) return item;
+ if (item.children) {
+ const found = this.findCascaderNode(item.children, code);
+ if (found) return found;
+ }
+ }
+ return null;
+ },
+ handleTransferSubmit() {
+ const hasDept = !!this.transferForm.leavelDeptCode;
+ const hasWard = !!this.transferForm.leavehospitaldistrictcode;
+ if (!hasDept && !hasWard) {
+ this.$modal.msgError("璇疯嚦灏戦�夋嫨鐩爣绉戝鎴栫洰鏍囩梾鍖�");
+ return;
+ }
+ console.log(this.transferForm);
+
+ // 缁勮鍙樻洿鎻愮ず鏂囨湰
+ const deptName = this.transferForm.leavelDeptName || "涓嶅彉";
+ const wardName = this.transferForm.leavehospitaldistrictname || "涓嶅彉";
+ const tip = `纭灏嗙瀹ゅ彉鏇翠负"${deptName}"銆佺梾鍖哄彉鏇翠负"${wardName}"锛焋;
+ this.$modal
+ .confirm(tip, "鍙樻洿纭")
+ .then(() => {
+ this.transferLoading = true;
+ transferDept(this.transferForm)
+ .then((res) => {
+ if (res.code === 200) {
+ this.$modal.msgSuccess("绉戝/鐥呭尯鍙樻洿鎴愬姛");
+ this.transferDialogVisible = false;
+ this.getList();
+ } else {
+ this.$modal.msgError(res.msg || "鍙樻洿澶辫触");
+ }
+ })
+ .catch(() => {
+ this.$modal.msgError("鍙樻洿澶辫触锛岃閲嶈瘯");
+ })
+ .finally(() => {
+ this.transferLoading = false;
+ });
+ })
+ .catch(() => {});
+ },
+ },
+};
+</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;
+}
+::v-deep.el-table .remind-row {
+ background: #fcf5aa;
+}
+
+.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: #f2f8ff;
+ color: #324a9b;
+}
+::v-deep.leftvlue .el-card__body:hover {
+ background: #3664d9;
+ color: #fff;
+ cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */
+}
+::v-deep.errleftvlue .el-card__body {
+ background: #fdd0d7;
+}
+::v-deep.errleftvlue .el-card__body:hover {
+ background: #f88d96;
+ cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */
+}
+::v-deep.jgleftvlue .el-card__body:hover {
+ background: #f7f075;
+ cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */
+}
+
+::v-deep.ysfleftvlue .el-card__body {
+ background: #d0fdd8;
+}
+::v-deep.ysfleftvlue .el-card__body:hover {
+ background: #0abc54;
+ 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: #324a9b;
+ 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;
+}
+.button-textxga {
+ color: #de7897;
+}
+.button-textxgc {
+ color: #9054e4;
+}
+.purple-button.is-disabled {
+ background-color: #d8b4fe;
+ border-color: #d8b4fe;
+ opacity: 1; /* 淇濇寔绂佺敤鐘舵�侀�忔槑搴� */
+}
+.statistics-tooltip {
+ background: #ffffff !important;
+ color: #1976d2 !important;
+ border: 1px solid #bbdefb !important;
+ border-radius: 8px !important;
+ padding: 10px 14px !important;
+ font-size: 13px !important;
+ line-height: 1.6 !important;
+ box-shadow: 0 4px 12px rgba(25, 118, 210, 0.15) !important;
+}
+.statistics-tooltip .popper__arrow {
+ border-bottom-color: #bbdefb !important;
+}
+
+.statistics-tooltip .popper__arrow::after {
+ border-bottom-color: #ffffff !important;
+}
+// 閫夐」瀛椾綋鏀惧ぇ
+// ::v-deep.el-checkbox-group {
+// span {
+// font-size: 24px;
+// }
+// }
+.filter-warning {
+ margin-top: 8px;
+ padding: 10px 14px;
+ background: #fff7e6;
+ border: 1px solid #ffe58f;
+ border-radius: 6px;
+ color: #d46b08;
+ font-size: 18px;
+ line-height: 1.6;
+ display: flex;
+ align-items: flex-start;
+ gap: 6px;
+}
+
+.filter-warning .el-icon-warning-outline {
+ font-size: 16px;
+ color: #faad14;
+ flex-shrink: 0;
+ margin-top: 2px;
+}
+
+::v-deep .el-table__row.selected-row:hover > td {
+ background-color: #e6f7ff !important;
+}
+
+/* 閫変腑淇℃伅鏄剧ず */
+.selected-info {
+ padding: 10px 0;
+ font-size: 14px;
+ color: #666;
+}
+</style>
diff --git a/src/views/followvisit/record/detailpage/components/AdviceList.vue b/src/views/followvisit/record/detailpage/components/AdviceList.vue
new file mode 100644
index 0000000..5139560
--- /dev/null
+++ b/src/views/followvisit/record/detailpage/components/AdviceList.vue
@@ -0,0 +1,315 @@
+<template>
+ <div class="advice-list">
+ <!-- 鎼滅储鏍� -->
+ <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="70px">
+ <el-form-item label="寤鸿绫诲瀷" prop="adviceType">
+ <el-select v-model="queryParams.adviceType" placeholder="鍏ㄩ儴绫诲瀷" clearable style="width: 140px">
+ <el-option label="鎶曡瘔" value="1" />
+ <el-option label="寤鸿" value="2" />
+ <el-option label="琛ㄦ壃" value="3" />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍐呭" prop="content">
+ <el-input v-model="queryParams.content" placeholder="璇疯緭鍏ュ唴瀹瑰叧閿瓧" clearable style="width: 180px" />
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+ <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+ </el-form-item>
+ </el-form>
+
+ <!-- 鎿嶄綔鏍� -->
+ <el-row :gutter="10" class="mb8">
+ <el-col :span="1.5">
+ <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">鏂板</el-button>
+ </el-col>
+ <el-col :span="1.5">
+ <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete">鍒犻櫎</el-button>
+ </el-col>
+ <el-col :span="1.5">
+ <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">瀵煎嚭</el-button>
+ </el-col>
+ </el-row>
+
+ <!-- 琛ㄦ牸 -->
+ <el-table v-loading="loading" :data="adviceList" @selection-change="handleSelectionChange">
+ <el-table-column type="selection" width="50" align="center" />
+ <el-table-column label="寤鸿绫诲瀷" align="center" prop="adviceType" width="100">
+ <template slot-scope="scope">
+ <el-tag :type="adviceTypeTag(scope.row.adviceType)" size="small">
+ {{ adviceTypeText(scope.row.adviceType) }}
+ </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column label="鍐呭" align="center" prop="content" min-width="200" :show-overflow-tooltip="true" />
+ <el-table-column label="娑夊強绉戝" align="center" prop="deptCodes" width="140" :show-overflow-tooltip="true">
+ <template slot-scope="scope">{{ getDeptNames(scope.row.deptCodes) }}</template>
+ </el-table-column>
+ <el-table-column label="娑夊強鐥呭尯" align="center" prop="wardCodes" width="140" :show-overflow-tooltip="true">
+ <template slot-scope="scope">{{ getWardNames(scope.row.wardCodes) }}</template>
+ </el-table-column>
+ <el-table-column label="澶囨敞" align="center" prop="remark" min-width="150" :show-overflow-tooltip="true" />
+ <el-table-column label="鍒涘缓鑰�" align="center" prop="createBy" width="100" />
+ <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="160" />
+ <el-table-column label="鎿嶄綔" align="center" width="120" class-name="small-padding fixed-width">
+ <template slot-scope="scope">
+ <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">淇敼</el-button>
+ <el-button size="mini" type="text" icon="el-icon-delete" style="color: #f56c6c" @click="handleDelete(scope.row)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <pagination
+ v-show="total > 0"
+ :total="total"
+ :page.sync="queryParams.pageNum"
+ :limit.sync="queryParams.pageSize"
+ @pagination="getList"
+ />
+
+ <!-- 鏂板/缂栬緫寮圭獥 -->
+ <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body :close-on-click-modal="false">
+ <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+ <el-form-item label="寤鸿绫诲瀷" prop="adviceType">
+ <el-radio-group v-model="form.adviceType">
+ <el-radio label="1">鎶曡瘔</el-radio>
+ <el-radio label="2">寤鸿</el-radio>
+ <el-radio label="3">琛ㄦ壃</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="娑夊強绉戝" prop="deptCodes">
+ <el-select v-model="form.deptCodes" multiple filterable clearable placeholder="璇烽�夋嫨娑夊強绉戝" style="width: 100%">
+ <el-option v-for="d in deptOptions" :key="d.value" :label="d.label" :value="d.value" />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="娑夊強鐥呭尯" prop="wardCodes">
+ <el-select v-model="form.wardCodes" multiple filterable clearable placeholder="璇烽�夋嫨娑夊強鐥呭尯" style="width: 100%">
+ <el-option v-for="w in wardOptions" :key="w.value" :label="w.label" :value="w.value" />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="娑夊強浜哄憳" prop="involvedUsers">
+ <el-input v-model="form.involvedUsers" placeholder="娑夊強浜哄憳浠g爜锛屽涓敤閫楀彿鍒嗛殧" />
+ </el-form-item>
+ <el-form-item label="鍐呭" prop="content">
+ <el-input type="textarea" :rows="3" v-model="form.content" placeholder="璇疯緭鍏ユ姇璇�/寤鸿/琛ㄦ壃鍐呭" />
+ </el-form-item>
+ <el-form-item label="澶囨敞" prop="remark">
+ <el-input type="textarea" :rows="2" v-model="form.remark" placeholder="璇疯緭鍏ュ娉�" />
+ </el-form-item>
+ </el-form>
+ <div slot="footer" class="dialog-footer">
+ <el-button @click="open = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+ </div>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import { listAdvice, getAdvice, addAdvice, updateAdvice, delAdvice } from "@/api/followvisit/advice";
+import store from "@/store";
+
+export default {
+ name: "AdviceList",
+ props: {
+ // 浠诲姟ID锛堝疄浣� subid锛�
+ subid: { type: [Number, String], default: null },
+ // 鏈嶅姟ID锛堝疄浣� taskid锛�
+ taskid: { type: [Number, String], default: null },
+ // 鐥呬汉ID
+ patid: { type: [Number, String], default: null }
+ },
+ data() {
+ return {
+ loading: false,
+ adviceList: [],
+ total: 0,
+ ids: [],
+ single: true,
+ multiple: true,
+ title: "",
+ open: false,
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ adviceType: undefined,
+ content: undefined
+ },
+ form: {},
+ rules: {
+ adviceType: [{ required: true, message: "璇烽�夋嫨寤鸿绫诲瀷", trigger: "change" }],
+ content: [{ required: true, message: "璇疯緭鍏ュ唴瀹�", trigger: "blur" }]
+ }
+ };
+ },
+ computed: {
+ deptOptions() {
+ return (store.getters.belongDepts || []).map(d => ({ label: d.deptName, value: d.deptCode }));
+ },
+ wardOptions() {
+ return (store.getters.belongWards || []).map(w => ({ label: w.districtName, value: w.districtCode }));
+ }
+ },
+ created() {
+ this.getList();
+ },
+ methods: {
+ adviceTypeText(t) {
+ const map = { "1": "鎶曡瘔", "2": "寤鸿", "3": "琛ㄦ壃" };
+ return map[t] || "鏈煡";
+ },
+ adviceTypeTag(t) {
+ const map = { "1": "danger", "2": "primary", "3": "success" };
+ return map[t] || "info";
+ },
+ getDeptNames(codes) {
+ if (!codes) return "-";
+ const arr = codes.split(",").filter(Boolean);
+ const names = arr.map(c => {
+ const found = this.deptOptions.find(d => d.value == c);
+ return found ? found.label : c;
+ });
+ return names.join("銆�") || "-";
+ },
+ getWardNames(codes) {
+ if (!codes) return "-";
+ const arr = codes.split(",").filter(Boolean);
+ const names = arr.map(c => {
+ const found = this.wardOptions.find(w => w.value == c);
+ return found ? found.label : c;
+ });
+ return names.join("銆�") || "-";
+ },
+
+ getList() {
+ this.loading = true;
+ // 鍒嗛〉鍙傛暟璧� query锛岃繃婊ゆ潯浠惰蛋 body
+ const body = {
+ subid: this.subid || undefined,
+ taskid: this.taskid || undefined,
+ patid: this.patid || undefined,
+ adviceType: this.queryParams.adviceType || undefined,
+ content: this.queryParams.content || undefined
+ };
+ const query = {
+ pageNum: this.queryParams.pageNum,
+ pageSize: this.queryParams.pageSize
+ };
+ listAdvice(body, query).then(res => {
+ this.adviceList = res.rows || [];
+ this.total = res.total || 0;
+ this.loading = false;
+ }).catch(() => { this.loading = false; });
+ },
+ handleQuery() {
+ this.queryParams.pageNum = 1;
+ this.getList();
+ },
+ resetQuery() {
+ this.queryParams.adviceType = undefined;
+ this.queryParams.content = undefined;
+ this.handleQuery();
+ },
+ handleSelectionChange(selection) {
+ this.ids = selection.map(item => item.id);
+ this.single = selection.length !== 1;
+ this.multiple = !selection.length;
+ },
+ reset() {
+ this.form = {
+ id: undefined,
+ adviceType: "1",
+ deptCodes: [],
+ wardCodes: [],
+ involvedUsers: "",
+ content: "",
+ remark: ""
+ };
+ },
+ handleAdd() {
+ this.reset();
+ this.title = "鏂板鎶曡瘔寤鸿";
+ this.open = true;
+ },
+ handleUpdate(row) {
+ this.reset();
+ this.title = "淇敼鎶曡瘔寤鸿";
+ getAdvice(row.id).then(res => {
+ const data = res.data || {};
+ this.form = {
+ id: data.id,
+ adviceType: data.adviceType || "1",
+ deptCodes: data.deptCodes ? data.deptCodes.split(",").filter(Boolean) : [],
+ wardCodes: data.wardCodes ? data.wardCodes.split(",").filter(Boolean) : [],
+ involvedUsers: data.involvedUsers || "",
+ content: data.content || "",
+ remark: data.remark || ""
+ };
+ this.open = true;
+ });
+ },
+ submitForm() {
+ this.$refs["form"].validate(valid => {
+ if (!valid) return;
+ const data = {
+ id: this.form.id,
+ subid: this.subid,
+ taskid: this.taskid,
+ patid: this.patid,
+ adviceType: this.form.adviceType,
+ deptCodes: this.form.deptCodes.join(","),
+ wardCodes: this.form.wardCodes.join(","),
+ involvedUsers: this.form.involvedUsers,
+ content: this.form.content,
+ remark: this.form.remark,
+ delFlag: "0"
+ };
+ const api = this.form.id ? updateAdvice(data) : addAdvice(data);
+ api.then(res => {
+ if (res.code === 200) {
+ this.$modal.msgSuccess(this.form.id ? "淇敼鎴愬姛" : "鏂板鎴愬姛");
+ this.open = false;
+ this.getList();
+ } else {
+ this.$modal.msgError(res.msg || "鎿嶄綔澶辫触");
+ }
+ });
+ });
+ },
+ handleDelete(row) {
+ const ids = row.id ? [row.id] : this.ids;
+ if (!ids.length) {
+ this.$modal.msgWarning("璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁");
+ return;
+ }
+ this.$modal.confirm("鏄惁纭鍒犻櫎鎵�閫夋姇璇夊缓璁紵").then(() => {
+ return delAdvice(ids.join(","));
+ }).then(res => {
+ if (res.code === 200) {
+ this.getList();
+ this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+ }
+ }).catch(() => {});
+ },
+ handleExport() {
+ this.download(
+ "/system/serviceSubtaskAdvice/export",
+ {
+ subid: this.subid,
+ taskid: this.taskid,
+ patid: this.patid,
+ adviceType: this.queryParams.adviceType,
+ content: this.queryParams.content
+ },
+ `闅忚寤鸿鏁版嵁_${new Date().getTime()}.xlsx`
+ );
+ }
+ }
+};
+</script>
+
+<style lang="scss" scoped>
+.advice-list {
+ padding: 10px 0;
+}
+</style>
diff --git a/src/views/followvisit/record/detailpage/index.vue b/src/views/followvisit/record/detailpage/index.vue
index e776ec9..3932f7e 100644
--- a/src/views/followvisit/record/detailpage/index.vue
+++ b/src/views/followvisit/record/detailpage/index.vue
@@ -1077,6 +1077,13 @@
</div>
</div>
</div>
+ <!-- 鎶曡瘔寤鸿 -->
+ <el-card class="advice-card">
+ <div slot="header" class="clearfix">
+ <span class="detail-title">鎶曡瘔寤鸿</span>
+ </div>
+ <AdviceList :subid="taskid" :taskid="id" :patid="patid" />
+ </el-card>
<!-- 鐭俊鍙戦�佸璇濇 -->
<el-dialog title="鐭俊鍙戦��" :visible.sync="smsDialogVisible">
<!-- 娉ㄦ剰杩欓噷浣跨敤浜� smsDialogVisible 浠ュ尯鍒嗗凡鏈夌殑 dialogFormVisible -->
@@ -1317,12 +1324,14 @@
import CallButton from "@/components/CallButton";
import TemplateSelector from "@/components/optionalModule";
import MergeAndModify from "./MergeAndModify.vue";
+import AdviceList from "./components/AdviceList.vue";
import CallCenterLs from "@/components/CallCenterLs";
import store from "@/store";
export default {
components: {
CallButton,
MergeAndModify,
+ AdviceList,
CallCenterLs,
TemplateSelector,
},
@@ -4145,4 +4154,13 @@
padding: 20px 15px;
background-color: #fff;
}
+
+.advice-card {
+ margin: 0 10px 20px 10px;
+ .detail-title {
+ font-size: 16px;
+ font-weight: 600;
+ color: #303133;
+ }
+}
</style>
diff --git a/src/views/outsideChainwtnew.vue b/src/views/outsideChainwtnew.vue
index 4d5e662..5dd3cb3 100644
--- a/src/views/outsideChainwtnew.vue
+++ b/src/views/outsideChainwtnew.vue
@@ -1,5 +1,15 @@
<template>
<div class="questionnaire-optimized">
+ <!-- 鎻愪氦涓殑鍏ㄥ睆鍔犺浇閬僵锛堝ぇ瀛椾綋锛岄�傝�佸寲锛� -->
+ <div v-if="submitting" class="submit-loading-mask">
+ <div class="submit-loading-box">
+ <div class="submit-loading-spinner"></div>
+ <div class="submit-loading-title">闂嵎鎻愪氦涓�</div>
+ <div class="submit-loading-tip">璇风◢鍊欙紝姝e湪涓婁紶鎮ㄧ殑绛旀...</div>
+ <div class="submit-loading-warn">璇蜂笉瑕佸叧闂垨鍒锋柊椤甸潰</div>
+ </div>
+ </div>
+
<div v-if="loading && !accomplish" class="loading-container">
<div class="loading-content">
<i class="el-icon-loading loading-icon"></i>
@@ -317,8 +327,9 @@
type="primary"
@click="cache(true)"
class="submit-button"
+ :loading="submitting"
>
- 鎻愪氦闂嵎
+ {{ submitting ? "鎻愪氦涓�..." : "鎻愪氦闂嵎" }}
</el-button>
</div>
</div>
@@ -372,6 +383,7 @@
dialogVisible: false,
Endornot: true,
accomplish: false,
+ submitting: false, // 鎻愪氦涓殑鍔犺浇鐘舵��
dimensionTypes: [
{
value: 1,
@@ -662,19 +674,31 @@
// }
// });
form.serviceSubtaskDetailList = arr;
- Submitaquestionnaire(form).then((res) => {
- if (res.code == 200) {
- if (this.jsy) {
- this.dialogVisible = true;
+ Submitaquestionnaire(form)
+ .then((res) => {
+ this.submitting = false;
+ if (res.code == 200) {
+ if (this.jsy) {
+ this.dialogVisible = true;
+ }
+ this.accomplish = true;
+ this.$modal.msgSuccess("鎻愪氦鎴愬姛");
+ } else {
+ this.$modal.msgError(res.msg || "鎻愪氦澶辫触锛岃閲嶈瘯");
}
- this.accomplish = true;
- this.$modal.msgSuccess("鎻愪氦鎴愬姛");
- }
- });
+ })
+ .catch(() => {
+ this.submitting = false;
+ this.$modal.msgError("鎻愪氦澶辫触锛岃閲嶈瘯");
+ });
},
// 缂撳瓨
cache(subm) {
console.log("杩涘叆缂撳瓨");
+ // 鎻愪氦鍦烘櫙锛氬紑鍚姞杞界姸鎬侊紝闃叉閲嶅鐐瑰嚮
+ if (subm === true) {
+ this.submitting = true;
+ }
let form = {
param1: this.taskid,
param2: this.patid,
@@ -720,13 +744,26 @@
});
form.svyTaskTemplateScriptVOS = arr;
form.type = 2;
- Cachequestionnaire(form).then((res) => {
- if (res.code == 200) {
- if (subm) {
- this.submitForm();
+ Cachequestionnaire(form)
+ .then((res) => {
+ if (res.code == 200) {
+ if (subm) {
+ this.submitForm();
+ }
+ } else {
+ // 缂撳瓨澶辫触锛氭仮澶嶆彁浜ょ姸鎬�
+ if (subm) {
+ this.submitting = false;
+ this.$modal.msgError("鎻愪氦澶辫触锛岃閲嶈瘯");
+ }
}
- }
- });
+ })
+ .catch(() => {
+ if (subm) {
+ this.submitting = false;
+ this.$modal.msgError("鎻愪氦澶辫触锛岃閲嶈瘯");
+ }
+ });
},
// 鑾峰彇鍙棰樼洰鐨勬纭簭鍙凤紙瑙e喅璺抽鍚庡簭鍙蜂笉杩炵画鐨勯棶棰橈級
getVisibleQuestionIndex(index) {
@@ -1316,6 +1353,68 @@
min-height: 70vh;
}
+/* ===== 鎻愪氦涓細閫傝�佸寲鍏ㄥ睆鍔犺浇閬僵 ===== */
+.submit-loading-mask {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: rgba(0, 0, 0, 0.55);
+ z-index: 3000;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 20px;
+}
+
+.submit-loading-box {
+ background: #ffffff;
+ border-radius: 20px;
+ padding: 48px 56px;
+ text-align: center;
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
+ max-width: 85vw;
+ box-sizing: border-box;
+}
+
+.submit-loading-spinner {
+ width: 72px;
+ height: 72px;
+ margin: 0 auto 24px;
+ border: 8px solid #e8eef5;
+ border-top-color: #175997;
+ border-right-color: #2a77c9;
+ border-radius: 50%;
+ animation: submit-spin 1s linear infinite;
+}
+
+@keyframes submit-spin {
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+.submit-loading-title {
+ font-size: 28px;
+ font-weight: 700;
+ color: #175997;
+ margin-bottom: 14px;
+}
+
+.submit-loading-tip {
+ font-size: 20px;
+ color: #303a47;
+ line-height: 1.6;
+}
+
+.submit-loading-warn {
+ margin-top: 18px;
+ font-size: 17px;
+ color: #e6a23c;
+ font-weight: 500;
+}
+
.loading-content {
text-align: center;
padding: 40px;
diff --git a/src/views/patient/patient/outpatient.vue b/src/views/patient/patient/outpatient.vue
index 5e18d72..c277633 100644
--- a/src/views/patient/patient/outpatient.vue
+++ b/src/views/patient/patient/outpatient.vue
@@ -986,7 +986,7 @@
},
// 澶氶�夋閫変腑鏁版嵁
handleSelectionChange(selection) {
- this.ids = selection.map((item) => item.patid);
+ this.ids = selection.map((item) => item.id);
this.single = selection.length != 1;
this.multiple = !selection.length;
},
diff --git a/src/views/patient/propaganda/QuestionnaireTask.vue b/src/views/patient/propaganda/QuestionnaireTask.vue
index 763a462..43ed363 100644
--- a/src/views/patient/propaganda/QuestionnaireTask.vue
+++ b/src/views/patient/propaganda/QuestionnaireTask.vue
@@ -214,32 +214,98 @@
<!-- 鑽搧鍏宠仈 -->
<el-row v-if="form.appltype == 6">
- <el-col :span="20">
- <el-form-item label="鍏宠仈鑽搧" prop="region">
- <el-select
- v-model="medicalCodes"
- @remove-tag="removeMedical"
- style="width: 400px"
- size="medium"
- multiple
- filterable
- remote
- reserve-keyword
- :remote-method="remoteSearchMedical"
- placeholder="璇疯緭鍏ヨ嵂鍝佸悕绉版悳绱�"
- loading-text="鎼滅储涓�..."
- >
- <el-option
- v-for="item in medicalOptions"
- :key="item.id"
- :label="
- item.itemName + ' (' + item.manufacturerName + ')'
- "
- :value="item.itemCode"
- />
- </el-select>
- </el-form-item>
- </el-col>
+ <el-form-item label="鍏宠仈鑽搧" prop="region">
+ <el-select
+ v-model="medicalCodes"
+ @remove-tag="removeMedical"
+ style="width: 400px"
+ size="medium"
+ multiple
+ filterable
+ remote
+ reserve-keyword
+ :remote-method="remoteSearchMedical"
+ placeholder="璇疯緭鍏ヨ嵂鍝佸悕绉版悳绱�"
+ loading-text="鎼滅储涓�..."
+ >
+ <el-option
+ v-for="item in medicalOptions"
+ :key="item.itemCode"
+ :label="
+ item.itemName + ' (' + item.manufacturerName + ')'
+ "
+ :value="item.itemCode"
+ />
+ </el-select>
+ </el-form-item>
+ <div
+ style="
+ margin-bottom: 20px;
+ padding: 8px 12px;
+ background-color: #f0f9ff;
+ border-left: 4px solid #409eff;
+ "
+ >
+ <p style="margin: 0; color: #606266; font-size: 13px">
+ <i
+ class="el-icon-info"
+ style="color: #409eff; margin-right: 6px"
+ ></i>
+ 閽堝鍚屼竴鑽搧鍦ㄥ绉戝/鐥呭尯涓嬪瓨鍦ㄧ殑鎯呭喌锛屽彲閫夋嫨鎬ч厤缃浐瀹氱瀹�/鐥呭尯
+ </p>
+ </div>
+ <el-row :gutter="20" style="margin-top: 20px">
+ <el-col :span="12">
+ <el-form-item label="鍏宠仈绉戝" prop="diseaseDept">
+ <el-select
+ v-model="diseaseDept"
+ style="width: 100%"
+ clearable
+ filterable
+ placeholder="璇烽�夋嫨绉戝锛堝彲閫夛級"
+ value-key="deptCode"
+ @change="handleDiseaseDeptChange"
+ >
+ <el-option
+ v-for="item in belongDepts"
+ :key="item.deptCode"
+ :label="item.deptName"
+ :value="item"
+ ></el-option>
+ </el-select>
+ <div v-if="diseaseDept" class="selected-info">
+ 宸查�夋嫨: {{ diseaseDept.deptName }} ({{
+ diseaseDept.deptCode
+ }})
+ </div>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍏宠仈鐥呭尯" prop="diseaseWard">
+ <el-select
+ v-model="diseaseWard"
+ style="width: 100%"
+ clearable
+ filterable
+ placeholder="璇烽�夋嫨鐥呭尯锛堝彲閫夛級"
+ value-key="districtCode"
+ @change="handleDiseaseWardChange"
+ >
+ <el-option
+ v-for="item in belongWards"
+ :key="item.districtCode"
+ :label="item.districtName"
+ :value="item"
+ ></el-option>
+ </el-select>
+ <div v-if="diseaseWard" class="selected-info">
+ 宸查�夋嫨: {{ diseaseWard.districtName }} ({{
+ diseaseWard.districtCode
+ }})
+ </div>
+ </el-form-item>
+ </el-col>
+ </el-row>
</el-row>
<!-- 绉戝鍏宠仈 -->
@@ -1280,6 +1346,7 @@
getTaskpatientQC,
taskoperhospgetsondel,
taskdiaghospgetsondel,
+ taskmedicaldel,
getillnesslist,
getbaseopera,
Externallist,
@@ -1296,6 +1363,7 @@
getQtemplateclassify,
taskdepthospgetsondel,
taskdepthospgetsonlist,
+ taskmedicallist,
taskdiaggetlist,
rwztaskdepthospgetsonlist,
rwztaskdiaggetlist,
@@ -1813,21 +1881,6 @@
districtCode: this.form.leavehospitaldistrictcode,
districtName: this.form.leavehospitaldistrictname,
};
- // 鑽搧鍏宠仈鍥炴樉
- if (this.form.medicalCode) {
- this.medicalCodes = this.form.medicalCode
- .split(",")
- .filter(Boolean);
- // 鍔犺浇宸查�夎嵂鍝佺殑閫夐」鍒楄〃锛堢敤浜庡睍绀� label锛�
- const codes = this.form.medicalCode;
- listMedication({
- itemCode: codes,
- pageNum: 1,
- pageSize: 200,
- }).then((res) => {
- this.medicalOptions = res.rows || [];
- });
- }
this.overallCase = this.form.patTaskRelevances.concat();
this.checkList = this.form.preachform
? this.form.preachform.split(",")
@@ -2057,6 +2110,8 @@
listDept() {
this.leavehospitaldistrictcodes = [];
this.deptcodesWards = [];
+ this.medicalCodes = [];
+ this.medicalOptions = [];
// this.queryParamsdept.taskId = this.form.taskid;
this.queryParamsdept.taskId = this.form.taskid;
@@ -2101,6 +2156,22 @@
this.hosplist.push(item);
this.leavehospitaldistrictcodes.push(item.deptCode);
}
+ });
+ }
+ });
+ // 鑾峰彇鍏宠仈鑽搧
+ taskmedicallist(this.queryParamsdept).then((res) => {
+ if (res.code == 200) {
+ let arr = res.rows || [];
+ arr.forEach((item) => {
+ const code = item.itemCode || item.medicalCode;
+ this.medicalCodes.push(code);
+ this.medicalOptions.push({
+ ...item,
+ itemCode: code,
+ itemName: item.itemName || item.medicalName,
+ manufacturerName: item.manufacturerName || item.medicalCompany
+ });
});
}
});
@@ -2199,9 +2270,14 @@
}
);
},
- // 鍒犻櫎宸查�夎嵂鍝�
+ // 鍒犻櫎宸查�夎嵂鍝侊紙鍗曠嫭鎺ュ彛锛�
removeMedical(code) {
- this.medicalCodes = this.medicalCodes.filter((c) => c !== code);
+ taskmedicaldel({ medicalCode: code, taskId: this.form.taskid }).then((res) => {
+ if (res.code == 200) {
+ this.medicalCodes = this.medicalCodes.filter((c) => c !== code);
+ this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+ }
+ });
},
// ---------- 鎮h�呴�夋嫨 ----------
@@ -2761,8 +2837,12 @@
this.form.icd10name = this.diagglist
.map((item) => item.icdname)
.join(",");
- // 鐤剧梾/鎵嬫湳鍏宠仈鐨勭瀹�/鐥呭尯鏍¢獙
- if (this.form.appltype == 3 || this.form.appltype == 4) {
+ // 鐤剧梾/鎵嬫湳/鑽搧鍏宠仈鐨勭瀹�/鐥呭尯鏍¢獙
+ if (
+ this.form.appltype == 3 ||
+ this.form.appltype == 4 ||
+ this.form.appltype == 6
+ ) {
const hasDept = this.diseaseDept?.deptCode;
const hasWard = this.diseaseWard?.districtCode;
if (!hasDept && !hasWard) {
diff --git a/src/views/patient/propaganda/particty.vue b/src/views/patient/propaganda/particty.vue
index e169997..46d0f82 100644
--- a/src/views/patient/propaganda/particty.vue
+++ b/src/views/patient/propaganda/particty.vue
@@ -211,30 +211,96 @@
<!-- 鑽搧鍏宠仈 -->
<el-row v-if="form.appltype == 6">
- <el-col :span="20">
- <el-form-item label="鍏宠仈鑽搧" prop="region">
- <el-select
- v-model="medicalCodes"
- @remove-tag="removeMedical"
- style="width: 400px"
- size="medium"
- multiple
- filterable
- remote
- reserve-keyword
- :remote-method="remoteSearchMedical"
- placeholder="璇疯緭鍏ヨ嵂鍝佸悕绉版悳绱�"
- loading-text="鎼滅储涓�..."
- >
- <el-option
- v-for="item in medicalOptions"
- :key="item.id"
- :label="item.itemName + ' (' + item.manufacturerName + ')'"
- :value="item.itemCode"
- />
- </el-select>
- </el-form-item>
- </el-col>
+ <el-form-item label="鍏宠仈鑽搧" prop="region">
+ <el-select
+ v-model="medicalCodes"
+ @remove-tag="removeMedical"
+ style="width: 400px"
+ size="medium"
+ multiple
+ filterable
+ remote
+ reserve-keyword
+ :remote-method="remoteSearchMedical"
+ placeholder="璇疯緭鍏ヨ嵂鍝佸悕绉版悳绱�"
+ loading-text="鎼滅储涓�..."
+ >
+ <el-option
+ v-for="item in medicalOptions"
+ :key="item.id"
+ :label="item.itemName + ' (' + item.manufacturerName + ')'"
+ :value="item.itemCode"
+ />
+ </el-select>
+ </el-form-item>
+ <div
+ style="
+ margin-bottom: 20px;
+ padding: 8px 12px;
+ background-color: #f0f9ff;
+ border-left: 4px solid #409eff;
+ "
+ >
+ <p style="margin: 0; color: #606266; font-size: 13px">
+ <i
+ class="el-icon-info"
+ style="color: #409eff; margin-right: 6px"
+ ></i>
+ 閽堝鍚屼竴鑽搧鍦ㄥ绉戝/鐥呭尯涓嬪瓨鍦ㄧ殑鎯呭喌锛屽彲閫夋嫨鎬ч厤缃浐瀹氱瀹�/鐥呭尯
+ </p>
+ </div>
+ <el-row :gutter="20" style="margin-top: 20px">
+ <el-col :span="12">
+ <el-form-item label="鍏宠仈绉戝" prop="diseaseDept">
+ <el-select
+ v-model="diseaseDept"
+ style="width: 100%"
+ clearable
+ filterable
+ placeholder="璇烽�夋嫨绉戝锛堝彲閫夛級"
+ value-key="deptCode"
+ @change="handleDiseaseDeptChange"
+ >
+ <el-option
+ v-for="item in belongDepts"
+ :key="item.deptCode"
+ :label="item.deptName"
+ :value="item"
+ ></el-option>
+ </el-select>
+ <div v-if="diseaseDept" class="selected-info">
+ 宸查�夋嫨: {{ diseaseDept.deptName }} ({{
+ diseaseDept.deptCode
+ }})
+ </div>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍏宠仈鐥呭尯" prop="diseaseWard">
+ <el-select
+ v-model="diseaseWard"
+ style="width: 100%"
+ clearable
+ filterable
+ placeholder="璇烽�夋嫨鐥呭尯锛堝彲閫夛級"
+ value-key="districtCode"
+ @change="handleDiseaseWardChange"
+ >
+ <el-option
+ v-for="item in belongWards"
+ :key="item.districtCode"
+ :label="item.districtName"
+ :value="item"
+ ></el-option>
+ </el-select>
+ <div v-if="diseaseWard" class="selected-info">
+ 宸查�夋嫨: {{ diseaseWard.districtName }} ({{
+ diseaseWard.districtCode
+ }})
+ </div>
+ </el-form-item>
+ </el-col>
+ </el-row>
</el-row>
<!-- 绉戝鍏宠仈 -->
@@ -1300,10 +1366,12 @@
taskdepthospgetsondel,
taskoperhospgetsondel,
taskdiaghospgetsondel,
+ taskmedicaldel,
taskdiaggetlist,
taskopergetlist,
rwztaskdepthospgetsonlist,
rwztaskdiaggetlist,
+ taskmedicallist,
getQtemplatelist,
} from "@/api/AiCentre/index";
import { listMedication } from "@/api/knowledge/drug";
@@ -1835,13 +1903,6 @@
this.form.patTaskRelevances = this.form.patTaskRelevances
? this.form.patTaskRelevances
: [];
- // 鑽搧鍏宠仈鍥炴樉
- if (this.form.medicalCode) {
- this.medicalCodes = this.form.medicalCode.split(",").filter(Boolean);
- listMedication({ itemCode: this.form.medicalCode, pageNum: 1, pageSize: 200 }).then((res) => {
- this.medicalOptions = res.rows || [];
- });
- }
this.overallCase = this.form.patTaskRelevances.concat();
this.checkList = this.form.preachform
? this.form.preachform.split(",")
@@ -2070,6 +2131,8 @@
listDept() {
this.leavehospitaldistrictcodes = [];
this.deptcodesWards = [];
+ this.medicalCodes = [];
+ this.medicalOptions = [];
this.queryParamsdept.taskId = this.form.taskid;
if (this.form.appltype == 5) {
@@ -2132,6 +2195,22 @@
});
}
this.illnesscodes.push(item.icd10code);
+ });
+ }
+ });
+ // 鑾峰彇鍏宠仈鑽搧
+ taskmedicallist(this.queryParamsdept).then((res) => {
+ if (res.code == 200) {
+ let arr = res.rows || [];
+ arr.forEach((item) => {
+ const code = item.itemCode || item.medicalCode;
+ this.medicalCodes.push(code);
+ this.medicalOptions.push({
+ ...item,
+ itemCode: code,
+ itemName: item.itemName || item.medicalName,
+ manufacturerName: item.manufacturerName || item.medicalCompany
+ });
});
}
});
@@ -2207,7 +2286,12 @@
});
},
removeMedical(code) {
- this.medicalCodes = this.medicalCodes.filter((c) => c !== code);
+ taskmedicaldel({ itemCode: code, taskid: this.form.taskid }).then((res) => {
+ if (res.code == 200) {
+ this.medicalCodes = this.medicalCodes.filter((c) => c !== code);
+ this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+ }
+ });
},
// ---------- 鎮h�呴�夋嫨 ----------
@@ -2786,12 +2870,12 @@
this.form.icd10name = this.diagglist
.map((item) => item.icdname)
.join(",");
- // 鐤剧梾/鎵嬫湳鍏宠仈鐨勭瀹�/鐥呭尯鏍¢獙
- if (this.form.appltype == 3 || this.form.appltype == 4) {
+ // 鐤剧梾/鎵嬫湳/鑽搧鍏宠仈鐨勭瀹�/鐥呭尯鏍¢獙
+ if (this.form.appltype == 3 || this.form.appltype == 4 || this.form.appltype == 6) {
const hasDept = this.diseaseDept?.deptCode;
const hasWard = this.diseaseWard?.districtCode;
if (!hasDept && !hasWard) {
- this.$modal.msgError("褰撳墠鐤剧梾闇�鍏宠仈绉戝鎴栫梾鍖�");
+ this.$modal.msgError("闇�鍏宠仈绉戝鎴栫梾鍖�");
this.submitLoading = false;
return;
}
diff --git a/src/views/sfstatistics/percentage/components/FirstFollowUp.vue b/src/views/sfstatistics/percentage/components/FirstFollowUp.vue
index d766ae3..67d329f 100644
--- a/src/views/sfstatistics/percentage/components/FirstFollowUp.vue
+++ b/src/views/sfstatistics/percentage/components/FirstFollowUp.vue
@@ -793,202 +793,19 @@
},
customSort(data) {
- const order = [
- "涓�",
- "浜�",
- "涓�",
- "鍥�",
- "浜�",
- "鍏�",
- "涓�",
- "鍏�",
- "涔�",
- "鍗�",
- "鍗佷竴",
- "鍗佷簩",
- "鍗佷笁",
- "鍗佸洓",
- "鍗佷簲",
- "鍗佸叚",
- "鍗佷竷",
- "鍗佸叓",
- "鍗佷節",
- "浜屽崄",
- "浜屽崄涓�",
- "浜屽崄浜�",
- "浜屽崄涓�",
- "浜屽崄鍥�",
- "浜屽崄浜�",
- "浜屽崄鍏�",
- "浜屽崄涓�",
- "浜屽崄鍏�",
- "浜屽崄涔�",
- "涓夊崄",
- "涓夊崄涓�",
- "涓夊崄浜�",
- "涓夊崄涓�",
- "涓夊崄鍥�",
- "涓夊崄浜�",
- "涓夊崄鍏�",
- "涓夊崄涓�",
- "涓夊崄鍏�",
- "涓夊崄涔�",
- "鍥涘崄",
- "鍥涘崄涓�",
- "鍥涘崄浜�",
- "鍥涘崄涓�",
- "鍥涘崄鍥�",
- "鍥涘崄浜�",
- ];
-
- return data.sort((a, b) => {
- const getIndex = (name) => {
- if (!name || typeof name !== "string") return -1;
- const chineseMatch = name.match(/^([涓�浜屼笁鍥涗簲鍏竷鍏節鍗乚+)/);
- if (chineseMatch && chineseMatch[1]) {
- return order.indexOf(chineseMatch[1]);
- }
- const arabicMatch = name.match(/^(\d+)/);
- if (arabicMatch && arabicMatch[1]) {
- const num = parseInt(arabicMatch[1], 10);
- if (num >= 1 && num <= 45) {
- return num - 1;
- }
- }
- return -1;
- };
-
- const indexA = getIndex(a.leavehospitaldistrictname);
- const indexB = getIndex(b.leavehospitaldistrictname);
-
- if (indexA === -1 && indexB === -1) {
- return (a.leavehospitaldistrictname || "").localeCompare(
- b.leavehospitaldistrictname || ""
- );
- }
- if (indexA === -1) return 1;
- if (indexB === -1) return -1;
- return indexA - indexB;
- });
- },
- Tooltipcgl(h, { column }) {
- return h(
- "el-tooltip",
- {
- props: {
- content: "闅忚鎴愬姛/(闇�闅忚-寰呴殢璁�)",
- placement: "top",
- effect: "dark",
- },
- },
- [h("span", column.label)]
+ return data.sort((a, b) =>
+ this.compareWardName(
+ a.leavehospitaldistrictname,
+ b.leavehospitaldistrictname
+ )
);
},
- Tooltipjsl(h, { column }) {
- return h(
- "el-tooltip",
- {
- props: {
- content:
- "(鍑洪櫌鏃堕棿+浠诲姟鍛ㄦ湡)灏忎簬瀹屾垚鏃堕棿鍗充负瓒呮椂;(闇�闅忚-瓒呮椂)/闇�闅忚",
- placement: "top",
- effect: "dark",
- },
- },
- [h("span", column.label)]
- );
- },
- Tooltipsfl(h, { column }) {
- return h(
- "el-tooltip",
- {
- props: {
- content: "(闅忚鎴愬姛+棣栨闅忚澶辫触)/棣栨搴旈殢璁�",
- placement: "top",
- effect: "dark",
- },
- },
- [h("span", column.label)]
- );
- },
+
sortChineseNumber(aRow, bRow) {
- const a = aRow.leavehospitaldistrictname;
- const b = bRow.leavehospitaldistrictname;
-
- const chineseNumMap = {
- 涓�: 1,
- 浜�: 2,
- 涓�: 3,
- 鍥�: 4,
- 浜�: 5,
- 鍏�: 6,
- 涓�: 7,
- 鍏�: 8,
- 涔�: 9,
- 鍗�: 10,
- 鍗佷竴: 11,
- 鍗佷簩: 12,
- 鍗佷笁: 13,
- 鍗佸洓: 14,
- 鍗佷簲: 15,
- 鍗佸叚: 16,
- 鍗佷竷: 17,
- 鍗佸叓: 18,
- 鍗佷節: 19,
- 浜屽崄: 20,
- 浜屽崄涓�: 21,
- 浜屽崄浜�: 22,
- 浜屽崄涓�: 23,
- 浜屽崄鍥�: 24,
- 浜屽崄浜�: 25,
- 浜屽崄鍏�: 26,
- 浜屽崄涓�: 27,
- 浜屽崄鍏�: 28,
- 浜屽崄涔�: 29,
- 涓夊崄: 30,
- 涓夊崄涓�: 31,
- 涓夊崄浜�: 32,
- 涓夊崄涓�: 33,
- 涓夊崄鍥�: 34,
- 涓夊崄浜�: 35,
- 涓夊崄鍏�: 36,
- 涓夊崄涓�: 37,
- 涓夊崄鍏�: 38,
- 涓夊崄涔�: 39,
- 鍥涘崄: 40,
- 鍥涘崄涓�: 41,
- 鍥涘崄浜�: 42,
- 鍥涘崄涓�: 43,
- 鍥涘崄鍥�: 44,
- 鍥涘崄浜�: 45,
- };
-
- const getNumberFromText = (text) => {
- if (!text || typeof text !== "string") return -1;
- const match = text.match(/^([涓�浜屼笁鍥涗簲鍏竷鍏節鍗乚+)/);
- if (match && match[1]) {
- const chineseNum = match[1];
- return chineseNumMap[chineseNum] !== undefined
- ? chineseNumMap[chineseNum]
- : -1;
- }
- const arabicMatch = text.match(/^(\d+)/);
- if (arabicMatch && arabicMatch[1]) {
- const num = parseInt(arabicMatch[1], 10);
- return num >= 1 && num <= 45 ? num : -1;
- }
- return -1;
- };
-
- const numA = getNumberFromText(a);
- const numB = getNumberFromText(b);
-
- if (numA === -1 && numB === -1) {
- return (a || "").localeCompare(b || "");
- }
- if (numA === -1) return 1;
- if (numB === -1) return -1;
- return numA - numB;
+ return this.compareWardName(
+ aRow.leavehospitaldistrictname,
+ bRow.leavehospitaldistrictname
+ );
},
getRowKey(row) {
@@ -1125,7 +942,46 @@
return sums;
},
-
+ Tooltipcgl(h, { column }) {
+ return h(
+ "el-tooltip",
+ {
+ props: {
+ content: "闅忚鎴愬姛/(闇�闅忚-寰呴殢璁�)",
+ placement: "top",
+ effect: "dark",
+ },
+ },
+ [h("span", column.label)]
+ );
+ },
+ Tooltipjsl(h, { column }) {
+ return h(
+ "el-tooltip",
+ {
+ props: {
+ content:
+ "(鍑洪櫌鏃堕棿+浠诲姟鍛ㄦ湡)灏忎簬瀹屾垚鏃堕棿鍗充负瓒呮椂;(闇�闅忚-瓒呮椂)/闇�闅忚",
+ placement: "top",
+ effect: "dark",
+ },
+ },
+ [h("span", column.label)]
+ );
+ },
+ Tooltipsfl(h, { column }) {
+ return h(
+ "el-tooltip",
+ {
+ props: {
+ content: "(闅忚鎴愬姛+棣栨闅忚澶辫触)/棣栨搴旈殢璁�",
+ placement: "top",
+ effect: "dark",
+ },
+ },
+ [h("span", column.label)]
+ );
+ },
getInnerSummaries(param) {
const { columns, data } = param;
const sums = [];
@@ -1212,6 +1068,77 @@
return Number.isInteger(num) ? num.toString() : num.toFixed(0);
},
+ // ===== 鐥呭尯鍚嶆帓搴忥紙鏀寔 1-B10 / 2-A2 绛� 鏁板瓧-瀛楁瘝鏁板瓧 鏍煎紡锛� =====
+ // 瑙f瀽鐥呭尯鍚嶏紝杩斿洖鎺掑簭閿� { group, letter, number }
+ parseWardKey(name) {
+ if (!name || typeof name !== "string") return null;
+ const trimmed = name.trim();
+
+ // 鏍煎紡1锛氭暟瀛�-瀛楁瘝鏁板瓧锛屽 1-B10銆�2-A2銆�1-A11
+ const dashMatch = trimmed.match(/^(\d+)-([A-Za-z]+)(\d+)/);
+ if (dashMatch) {
+ return {
+ group: parseInt(dashMatch[1], 10),
+ letter: dashMatch[2].toUpperCase(),
+ number: parseInt(dashMatch[3], 10),
+ };
+ }
+
+ // 鏍煎紡2锛氫腑鏂囨暟瀛楀紑澶达紝濡� 涓�鐥呭尯銆佸崄涓�鐥呭尯銆佷簩鍗佷竴鐥呭尯
+ const cnMatch = trimmed.match(/^([涓�浜屼笁鍥涗簲鍏竷鍏節鍗乚+)/);
+ if (cnMatch && cnMatch[1]) {
+ const num = this.chineseToNumber(cnMatch[1]);
+ if (num > 0) return { group: num, letter: "", number: 0 };
+ }
+
+ // 鏍煎紡3锛氶樋鎷変集鏁板瓧寮�澶达紝濡� 1鐥呭尯銆�12鐥呭尯
+ const numMatch = trimmed.match(/^(\d+)/);
+ if (numMatch && numMatch[1]) {
+ return { group: parseInt(numMatch[1], 10), letter: "", number: 0 };
+ }
+
+ return null;
+ },
+
+ // 涓枃鏁板瓧杞樋鎷変集鏁板瓧锛堟敮鎸� 涓� ~ 涔濆崄涔濓級
+ chineseToNumber(str) {
+ const digits = {
+ 涓�: 1,
+ 浜�: 2,
+ 涓�: 3,
+ 鍥�: 4,
+ 浜�: 5,
+ 鍏�: 6,
+ 涓�: 7,
+ 鍏�: 8,
+ 涔�: 9,
+ };
+ if (!str) return -1;
+ if (str === "鍗�") return 10;
+ if (str.startsWith("鍗�")) return 10 + (digits[str[1]] || 0);
+ if (str.includes("鍗�")) {
+ const parts = str.split("鍗�");
+ const tens = digits[parts[0]] || 0;
+ const ones = digits[parts[1]] || 0;
+ return tens * 10 + ones;
+ }
+ return digits[str] !== undefined ? digits[str] : -1;
+ },
+
+ // 鐥呭尯鍚嶆瘮杈冨櫒锛氭暟瀛楁 鈫� 瀛楁瘝娈� 鈫� 鏁板瓧娈�
+ compareWardName(nameA, nameB) {
+ const ka = this.parseWardKey(nameA);
+ const kb = this.parseWardKey(nameB);
+
+ if (!ka && !kb) return (nameA || "").localeCompare(nameB || "", "zh-CN");
+ if (!ka) return 1;
+ if (!kb) return -1;
+
+ if (ka.group !== kb.group) return ka.group - kb.group;
+ if (ka.letter !== kb.letter) return ka.letter.localeCompare(kb.letter);
+ return ka.number - kb.number;
+ },
+
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.tagid);
},
diff --git a/src/views/sfstatistics/percentage/components/SecondFollowUp.vue b/src/views/sfstatistics/percentage/components/SecondFollowUp.vue
index ed11442..88fe70e 100644
--- a/src/views/sfstatistics/percentage/components/SecondFollowUp.vue
+++ b/src/views/sfstatistics/percentage/components/SecondFollowUp.vue
@@ -766,163 +766,19 @@
},
customSort(data) {
- const order = [
- "涓�",
- "浜�",
- "涓�",
- "鍥�",
- "浜�",
- "鍏�",
- "涓�",
- "鍏�",
- "涔�",
- "鍗�",
- "鍗佷竴",
- "鍗佷簩",
- "鍗佷笁",
- "鍗佸洓",
- "鍗佷簲",
- "鍗佸叚",
- "鍗佷竷",
- "鍗佸叓",
- "鍗佷節",
- "浜屽崄",
- "浜屽崄涓�",
- "浜屽崄浜�",
- "浜屽崄涓�",
- "浜屽崄鍥�",
- "浜屽崄浜�",
- "浜屽崄鍏�",
- "浜屽崄涓�",
- "浜屽崄鍏�",
- "浜屽崄涔�",
- "涓夊崄",
- "涓夊崄涓�",
- "涓夊崄浜�",
- "涓夊崄涓�",
- "涓夊崄鍥�",
- "涓夊崄浜�",
- "涓夊崄鍏�",
- "涓夊崄涓�",
- "涓夊崄鍏�",
- "涓夊崄涔�",
- "鍥涘崄",
- "鍥涘崄涓�",
- "鍥涘崄浜�",
- "鍥涘崄涓�",
- "鍥涘崄鍥�",
- "鍥涘崄浜�",
- ];
-
- return data.sort((a, b) => {
- const getIndex = (name) => {
- if (!name || typeof name !== "string") return -1;
- const chineseMatch = name.match(/^([涓�浜屼笁鍥涗簲鍏竷鍏節鍗乚+)/);
- if (chineseMatch && chineseMatch[1]) {
- return order.indexOf(chineseMatch[1]);
- }
- const arabicMatch = name.match(/^(\d+)/);
- if (arabicMatch && arabicMatch[1]) {
- const num = parseInt(arabicMatch[1], 10);
- if (num >= 1 && num <= 45) {
- return num - 1;
- }
- }
- return -1;
- };
-
- const indexA = getIndex(a.leavehospitaldistrictname);
- const indexB = getIndex(b.leavehospitaldistrictname);
-
- if (indexA === -1 && indexB === -1) {
- return (a.leavehospitaldistrictname || "").localeCompare(
- b.leavehospitaldistrictname || ""
- );
- }
- if (indexA === -1) return 1;
- if (indexB === -1) return -1;
- return indexA - indexB;
- });
+ return data.sort((a, b) =>
+ this.compareWardName(
+ a.leavehospitaldistrictname,
+ b.leavehospitaldistrictname
+ )
+ );
},
sortChineseNumber(aRow, bRow) {
- const a = aRow.leavehospitaldistrictname;
- const b = bRow.leavehospitaldistrictname;
-
- const chineseNumMap = {
- 涓�: 1,
- 浜�: 2,
- 涓�: 3,
- 鍥�: 4,
- 浜�: 5,
- 鍏�: 6,
- 涓�: 7,
- 鍏�: 8,
- 涔�: 9,
- 鍗�: 10,
- 鍗佷竴: 11,
- 鍗佷簩: 12,
- 鍗佷笁: 13,
- 鍗佸洓: 14,
- 鍗佷簲: 15,
- 鍗佸叚: 16,
- 鍗佷竷: 17,
- 鍗佸叓: 18,
- 鍗佷節: 19,
- 浜屽崄: 20,
- 浜屽崄涓�: 21,
- 浜屽崄浜�: 22,
- 浜屽崄涓�: 23,
- 浜屽崄鍥�: 24,
- 浜屽崄浜�: 25,
- 浜屽崄鍏�: 26,
- 浜屽崄涓�: 27,
- 浜屽崄鍏�: 28,
- 浜屽崄涔�: 29,
- 涓夊崄: 30,
- 涓夊崄涓�: 31,
- 涓夊崄浜�: 32,
- 涓夊崄涓�: 33,
- 涓夊崄鍥�: 34,
- 涓夊崄浜�: 35,
- 涓夊崄鍏�: 36,
- 涓夊崄涓�: 37,
- 涓夊崄鍏�: 38,
- 涓夊崄涔�: 39,
- 鍥涘崄: 40,
- 鍥涘崄涓�: 41,
- 鍥涘崄浜�: 42,
- 鍥涘崄涓�: 43,
- 鍥涘崄鍥�: 44,
- 鍥涘崄浜�: 45,
- };
-
- const getNumberFromText = (text) => {
- if (!text || typeof text !== "string") return -1;
- const match = text.match(/^([涓�浜屼笁鍥涗簲鍏竷鍏節鍗乚+)/);
- if (match && match[1]) {
- const chineseNum = match[1];
- return chineseNumMap[chineseNum] !== undefined
- ? chineseNumMap[chineseNum]
- : -1;
- }
- const arabicMatch = text.match(/^(\d+)/);
- if (arabicMatch && arabicMatch[1]) {
- const num = parseInt(arabicMatch[1], 10);
- return num >= 1 && num <= 45 ? num : -1;
- }
- return -1;
- };
-
- const numA = getNumberFromText(a);
- const numB = getNumberFromText(b);
-
- if (numA === -1 && numB === -1) {
- return (a || "").localeCompare(b || "");
- }
- if (numA === -1) return 1;
- if (numB === -1) return -1;
- return numA - numB;
+ return this.compareWardName(
+ aRow.leavehospitaldistrictname,
+ bRow.leavehospitaldistrictname
+ );
},
getRowKey(row) {
@@ -1125,6 +981,67 @@
return Number.isInteger(num) ? num.toString() : num.toFixed(0);
},
+ // ===== 鐥呭尯鍚嶆帓搴忥紙鏀寔 1-B10 / 2-A2 绛� 鏁板瓧-瀛楁瘝鏁板瓧 鏍煎紡锛� =====
+ // 瑙f瀽鐥呭尯鍚嶏紝杩斿洖鎺掑簭閿� { group, letter, number }
+ parseWardKey(name) {
+ if (!name || typeof name !== "string") return null;
+ const trimmed = name.trim();
+
+ // 鏍煎紡1锛氭暟瀛�-瀛楁瘝鏁板瓧锛屽 1-B10銆�2-A2銆�1-A11
+ const dashMatch = trimmed.match(/^(\d+)-([A-Za-z]+)(\d+)/);
+ if (dashMatch) {
+ return {
+ group: parseInt(dashMatch[1], 10),
+ letter: dashMatch[2].toUpperCase(),
+ number: parseInt(dashMatch[3], 10),
+ };
+ }
+
+ // 鏍煎紡2锛氫腑鏂囨暟瀛楀紑澶达紝濡� 涓�鐥呭尯銆佸崄涓�鐥呭尯銆佷簩鍗佷竴鐥呭尯
+ const cnMatch = trimmed.match(/^([涓�浜屼笁鍥涗簲鍏竷鍏節鍗乚+)/);
+ if (cnMatch && cnMatch[1]) {
+ const num = this.chineseToNumber(cnMatch[1]);
+ if (num > 0) return { group: num, letter: "", number: 0 };
+ }
+
+ // 鏍煎紡3锛氶樋鎷変集鏁板瓧寮�澶达紝濡� 1鐥呭尯銆�12鐥呭尯
+ const numMatch = trimmed.match(/^(\d+)/);
+ if (numMatch && numMatch[1]) {
+ return { group: parseInt(numMatch[1], 10), letter: "", number: 0 };
+ }
+
+ return null;
+ },
+
+ // 涓枃鏁板瓧杞樋鎷変集鏁板瓧锛堟敮鎸� 涓� ~ 涔濆崄涔濓級
+ chineseToNumber(str) {
+ const digits = { 涓�: 1, 浜�: 2, 涓�: 3, 鍥�: 4, 浜�: 5, 鍏�: 6, 涓�: 7, 鍏�: 8, 涔�: 9 };
+ if (!str) return -1;
+ if (str === "鍗�") return 10;
+ if (str.startsWith("鍗�")) return 10 + (digits[str[1]] || 0);
+ if (str.includes("鍗�")) {
+ const parts = str.split("鍗�");
+ const tens = digits[parts[0]] || 0;
+ const ones = digits[parts[1]] || 0;
+ return tens * 10 + ones;
+ }
+ return digits[str] !== undefined ? digits[str] : -1;
+ },
+
+ // 鐥呭尯鍚嶆瘮杈冨櫒锛氭暟瀛楁 鈫� 瀛楁瘝娈� 鈫� 鏁板瓧娈�
+ compareWardName(nameA, nameB) {
+ const ka = this.parseWardKey(nameA);
+ const kb = this.parseWardKey(nameB);
+
+ if (!ka && !kb) return (nameA || "").localeCompare(nameB || "", "zh-CN");
+ if (!ka) return 1;
+ if (!kb) return -1;
+
+ if (ka.group !== kb.group) return ka.group - kb.group;
+ if (ka.letter !== kb.letter) return ka.letter.localeCompare(kb.letter);
+ return ka.number - kb.number;
+ },
+
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.tagid);
},
diff --git a/src/views/sfstatistics/percentage/index copy.vue b/src/views/sfstatistics/percentage/index copy.vue
index 15f46c8..dc2d0ad 100644
--- a/src/views/sfstatistics/percentage/index copy.vue
+++ b/src/views/sfstatistics/percentage/index copy.vue
@@ -5,234 +5,568 @@
<el-row :gutter="20">
<!--鏍囩鏁版嵁-->
<el-col :span="24" :xs="24">
- <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
- label-width="98px">
+ <el-form
+ :model="queryParams"
+ ref="queryForm"
+ size="small"
+ :inline="true"
+ v-show="showSearch"
+ label-width="98px"
+ >
<el-form-item label="缁熻绫诲瀷" prop="userName">
- <el-select v-model="queryParams.statisticaltype" placeholder="璇烽�夋嫨缁熻绫诲瀷">
- <el-option v-for="item in Statisticallist" :key="item.value" :label="item.label" :value="item.value">
+ <el-select
+ v-model="queryParams.statisticaltype"
+ placeholder="璇烽�夋嫨缁熻绫诲瀷"
+ >
+ <el-option
+ v-for="item in Statisticallist"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
</el-option>
</el-select>
- <el-select style="margin-left: 10px" v-if="queryParams.statisticaltype == 1"
- v-model="queryParams.leavehospitaldistrictcodes" size="medium" multiple filterable
- placeholder="璇烽�夋嫨鐥呭尯">
- <el-option v-for="item in flatArrayhospit" :key="item.value" :label="item.label" :value="item.value">
+ <el-select
+ style="margin-left: 10px"
+ v-if="queryParams.statisticaltype == 1"
+ v-model="queryParams.leavehospitaldistrictcodes"
+ size="medium"
+ multiple
+ filterable
+ placeholder="璇烽�夋嫨鐥呭尯"
+ >
+ <el-option
+ v-for="item in flatArrayhospit"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
</el-option>
</el-select>
- <el-select v-else-if="queryParams.statisticaltype == 2" v-model="queryParams.deptcodes" size="medium"
- multiple filterable placeholder="璇烽�夋嫨绉戝">
- <el-option v-for="item in flatArraydept" :key="item.value" :label="item.label" :value="item.value">
+ <el-select
+ v-else-if="queryParams.statisticaltype == 2"
+ v-model="queryParams.deptcodes"
+ size="medium"
+ multiple
+ filterable
+ placeholder="璇烽�夋嫨绉戝"
+ >
+ <el-option
+ v-for="item in flatArraydept"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
</el-option>
</el-select>
</el-form-item>
<el-form-item label="鏈嶅姟绫诲瀷" prop="userName">
- <el-select v-model="queryParams.serviceType" multiple placeholder="璇烽�夋嫨">
- <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+ <el-select
+ v-model="queryParams.serviceType"
+ multiple
+ placeholder="璇烽�夋嫨"
+ >
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
</el-option>
</el-select>
</el-form-item>
- <el-form-item label-width="200" label="搴旈殢璁挎椂闂磋寖鍥�" prop="userName">
- <el-date-picker v-model="queryParams.dateRange" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
- range-separator="鑷�" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡"
- :default-time="['00:00:00', '23:59:59']">
+ <el-form-item
+ label-width="200"
+ label="搴旈殢璁挎椂闂磋寖鍥�"
+ prop="userName"
+ >
+ <el-date-picker
+ v-model="queryParams.dateRange"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ type="daterange"
+ range-separator="鑷�"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡"
+ :default-time="['00:00:00', '23:59:59']"
+ >
</el-date-picker>
</el-form-item>
<el-form-item>
- <el-button type="primary" icon="el-icon-search" size="medium" @click="handleQuery">鎼滅储</el-button>
- <el-button icon="el-icon-refresh" size="medium" @click="resetQuery">閲嶇疆</el-button>
+ <el-button
+ type="primary"
+ icon="el-icon-search"
+ size="medium"
+ @click="handleQuery"
+ >鎼滅储</el-button
+ >
+ <el-button
+ icon="el-icon-refresh"
+ size="medium"
+ @click="resetQuery"
+ >閲嶇疆</el-button
+ >
</el-form-item>
- <el-button type="warning" plain icon="el-icon-download" size="medium" @click="exportTable">瀵煎嚭</el-button>
- <el-button type="primary" plain icon="el-icon-data-line" size="medium"
- @click="showChartDialog">缁熻瓒嬪娍鍥�</el-button>
+ <el-button
+ type="warning"
+ plain
+ icon="el-icon-download"
+ size="medium"
+ @click="exportTable"
+ >瀵煎嚭</el-button
+ >
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-data-line"
+ size="medium"
+ @click="showChartDialog"
+ >缁熻瓒嬪娍鍥�</el-button
+ >
</el-form>
<!-- 鏂板锛歍ab鏍囩椤� -->
<el-tabs v-model="activeTab" @tab-click="handleTabClick">
<el-tab-pane label="棣栨闅忚" name="first">
<div class="your-table-container">
- <el-table ref="exportTable" id="exportTableid" v-loading="loading" :data="firstFollowUpList"
- :border="true" @selection-change="handleSelectionChange" @expand-change="handleRowClick"
- :row-key="getRowKey" show-summary :summary-method="getSummaries" :expand-row-keys="expands">
+ <el-table
+ ref="exportTable"
+ id="exportTableid"
+ v-loading="loading"
+ :data="firstFollowUpList"
+ :border="true"
+ @selection-change="handleSelectionChange"
+ @expand-change="handleRowClick"
+ :row-key="getRowKey"
+ show-summary
+ :summary-method="getSummaries"
+ :expand-row-keys="expands"
+ >
<!-- 灞曞紑琛岀澶村垪 -->
<el-table-column type="expand">
<template slot-scope="props">
- <el-table :data="props.row.doctorStats" border style="width: 95%; margin: 0 auto"
- class="inner-table" show-summary :summary-method="getInnerSummaries">
- <el-table-column label="鍖荤敓濮撳悕" prop="drname" align="center" />
- <el-table-column label="绉戝" width="120" prop="deptname" align="center" />
- <el-table-column label="鍑洪櫌浜烘" prop="dischargeCount" align="center" />
- <el-table-column label="鍑洪櫌浜烘" align="center" key="dischargeCount" prop="dischargeCount">
+ <el-table
+ :data="props.row.doctorStats"
+ border
+ style="width: 95%; margin: 0 auto"
+ class="inner-table"
+ show-summary
+ :summary-method="getInnerSummaries"
+ >
+ <el-table-column
+ label="鍖荤敓濮撳悕"
+ prop="drname"
+ align="center"
+ />
+ <el-table-column
+ label="绉戝"
+ width="120"
+ prop="deptname"
+ align="center"
+ />
+ <el-table-column
+ label="鍑洪櫌浜烘"
+ prop="dischargeCount"
+ align="center"
+ />
+ <el-table-column
+ label="鍑洪櫌浜烘"
+ align="center"
+ key="dischargeCount"
+ prop="dischargeCount"
+ >
</el-table-column>
- <el-table-column label="鏃犻渶闅忚浜烘" align="center" width="100" key="nonFollowUp"
- prop="nonFollowUp">
+ <el-table-column
+ label="鏃犻渶闅忚浜烘"
+ align="center"
+ width="100"
+ key="nonFollowUp"
+ prop="nonFollowUp"
+ >
</el-table-column>
- <el-table-column label="搴旈殢璁夸汉娆�" align="center" width="100" key="followUpNeeded"
- prop="followUpNeeded">
+ <el-table-column
+ label="搴旈殢璁夸汉娆�"
+ align="center"
+ width="100"
+ key="followUpNeeded"
+ prop="followUpNeeded"
+ >
</el-table-column>
<el-table-column align="center" label="棣栨鍑洪櫌闅忚">
- <el-table-column label="闇�闅忚" align="center" key="needFollowUp" prop="needFollowUp">
+ <el-table-column
+ label="闇�闅忚"
+ align="center"
+ key="needFollowUp"
+ prop="needFollowUp"
+ >
</el-table-column>
- <el-table-column label="寰呴殢璁�" align="center" key="pendingFollowUp" prop="pendingFollowUp">
+ <el-table-column
+ label="寰呴殢璁�"
+ align="center"
+ key="pendingFollowUp"
+ prop="pendingFollowUp"
+ >
</el-table-column>
- <el-table-column label="闅忚鎴愬姛" align="center" key="followUpSuccess" prop="followUpSuccess">
+ <el-table-column
+ label="闅忚鎴愬姛"
+ align="center"
+ key="followUpSuccess"
+ prop="followUpSuccess"
+ >
</el-table-column>
- <el-table-column label="闅忚澶辫触" align="center" key="followUpFail" prop="followUpFail">
+ <el-table-column
+ label="闅忚澶辫触"
+ align="center"
+ key="followUpFail"
+ prop="followUpFail"
+ >
</el-table-column>
- <el-table-column label="闅忚鐜�" align="center" width="120" key="followUpRate"
- prop="followUpRate">
+ <el-table-column
+ label="闅忚鐜�"
+ align="center"
+ width="120"
+ key="followUpRate"
+ prop="followUpRate"
+ >
</el-table-column>
- <el-table-column v-if="orgname != '涓芥按甯備腑鍖婚櫌'" label="鍙婃椂鐜�" align="center" width="120"
- key="rate" prop="rate">
+ <el-table-column
+ v-if="orgname != '涓芥按甯備腑鍖婚櫌'"
+ label="鍙婃椂鐜�"
+ align="center"
+ width="120"
+ key="rate"
+ prop="rate"
+ >
<template slot-scope="scope">
- <el-button size="medium" type="text" @click="Seedetails(scope.row)"><span
- class="button-zx">{{
+ <el-button
+ size="medium"
+ type="text"
+ @click="Seedetails(scope.row)"
+ ><span class="button-zx"
+ >{{
(Number(scope.row.rate) * 100).toFixed(2)
- }}%</span></el-button>
+ }}%</span
+ ></el-button
+ >
</template>
</el-table-column>
- <el-table-column label="浜哄伐" align="center" key="manual" prop="manual">
+ <el-table-column
+ label="浜哄伐"
+ align="center"
+ key="manual"
+ prop="manual"
+ >
</el-table-column>
- <el-table-column label="鐭俊" align="center" key="sms" prop="sms">
+ <el-table-column
+ label="鐭俊"
+ align="center"
+ key="sms"
+ prop="sms"
+ >
</el-table-column>
- <el-table-column label="寰俊" align="center" key="weChat" prop="weChat">
+ <el-table-column
+ label="寰俊"
+ align="center"
+ key="weChat"
+ prop="weChat"
+ >
</el-table-column>
</el-table-column>
</el-table>
</template>
</el-table-column>
- <el-table-column label="鍑洪櫌鐥呭尯" align="center" sortable key="leavehospitaldistrictname"
- prop="leavehospitaldistrictname" width="150" :show-overflow-tooltip="true"
- :sort-method="sortChineseNumber" />
- <el-table-column label="绉戝" align="center" key="deptname" prop="deptname"
- :show-overflow-tooltip="true" />
- <el-table-column label="鍑洪櫌浜烘" align="center" key="dischargeCount" prop="dischargeCount">
+ <el-table-column
+ label="鍑洪櫌鐥呭尯"
+ align="center"
+ sortable
+ key="leavehospitaldistrictname"
+ prop="leavehospitaldistrictname"
+ width="150"
+ :show-overflow-tooltip="true"
+ :sort-method="sortChineseNumber"
+ />
+ <el-table-column
+ label="绉戝"
+ align="center"
+ key="deptname"
+ prop="deptname"
+ :show-overflow-tooltip="true"
+ />
+ <el-table-column
+ label="鍑洪櫌浜烘"
+ align="center"
+ key="dischargeCount"
+ prop="dischargeCount"
+ >
</el-table-column>
- <el-table-column label="鏃犻渶闅忚浜烘" align="center" width="100" key="nonFollowUp" prop="nonFollowUp">
+ <el-table-column
+ label="鏃犻渶闅忚浜烘"
+ align="center"
+ width="100"
+ key="nonFollowUp"
+ prop="nonFollowUp"
+ >
</el-table-column>
- <el-table-column label="搴旈殢璁夸汉娆�" align="center" width="100" key="followUpNeeded"
- prop="followUpNeeded">
+ <el-table-column
+ label="搴旈殢璁夸汉娆�"
+ align="center"
+ width="100"
+ key="followUpNeeded"
+ prop="followUpNeeded"
+ >
</el-table-column>
<el-table-column align="center" label="棣栨鍑洪櫌闅忚">
- <el-table-column label="闇�闅忚" align="center" key="needFollowUp" prop="needFollowUp">
+ <el-table-column
+ label="闇�闅忚"
+ align="center"
+ key="needFollowUp"
+ prop="needFollowUp"
+ >
<template slot-scope="scope">
- <el-button size="medium" type="text" @click="
- viewDetails(
- scope.row.needFollowUpInfo,
- scope.row.leavehospitaldistrictname +
- '闇�闅忚鍒楄〃'
- )
- "><span class="button-zx">{{
+ <el-button
+ size="medium"
+ type="text"
+ @click="
+ viewDetails(
+ scope.row.needFollowUpInfo,
+ scope.row.leavehospitaldistrictname +
+ '闇�闅忚鍒楄〃'
+ )
+ "
+ ><span class="button-zx">{{
scope.row.needFollowUp
- }}</span></el-button>
+ }}</span></el-button
+ >
</template>
</el-table-column>
- <el-table-column label="寰呴殢璁�" align="center" key="pendingFollowUp" prop="pendingFollowUp">
+ <el-table-column
+ label="寰呴殢璁�"
+ align="center"
+ key="pendingFollowUp"
+ prop="pendingFollowUp"
+ >
<template slot-scope="scope">
- <el-button size="medium" type="text" @click="
- viewDetails(
- scope.row.pendingFollowUpInfo,
- scope.row.leavehospitaldistrictname +
- '寰呴殢璁垮垪琛�'
- )
- "><span class="button-zx">{{
+ <el-button
+ size="medium"
+ type="text"
+ @click="
+ viewDetails(
+ scope.row.pendingFollowUpInfo,
+ scope.row.leavehospitaldistrictname +
+ '寰呴殢璁垮垪琛�'
+ )
+ "
+ ><span class="button-zx">{{
scope.row.pendingFollowUp
- }}</span></el-button>
+ }}</span></el-button
+ >
</template>
</el-table-column>
- <el-table-column label="闅忚鎴愬姛" align="center" key="followUpSuccess" prop="followUpSuccess">
+ <el-table-column
+ label="闅忚鎴愬姛"
+ align="center"
+ key="followUpSuccess"
+ prop="followUpSuccess"
+ >
<template slot-scope="scope">
- <el-button size="medium" type="text" @click="
- viewDetails(
- scope.row.followUpSuccessInfo,
- scope.row.leavehospitaldistrictname +
- '闅忚鎴愬姛鍒楄〃'
- )
- "><span class="button-zx">{{
+ <el-button
+ size="medium"
+ type="text"
+ @click="
+ viewDetails(
+ scope.row.followUpSuccessInfo,
+ scope.row.leavehospitaldistrictname +
+ '闅忚鎴愬姛鍒楄〃'
+ )
+ "
+ ><span class="button-zx">{{
scope.row.followUpSuccess
- }}</span></el-button>
+ }}</span></el-button
+ >
</template>
</el-table-column>
- <el-table-column label="闅忚澶辫触" align="center" key="followUpFail" prop="followUpFail">
+ <el-table-column
+ label="闅忚澶辫触"
+ align="center"
+ key="followUpFail"
+ prop="followUpFail"
+ >
<template slot-scope="scope">
- <el-button size="medium" type="text" @click="
- viewDetails(
- scope.row.followUpFailInfo,
- scope.row.leavehospitaldistrictname +
- '闅忚澶辫触鍒楄〃'
- )
- "><span class="button-zx">{{
+ <el-button
+ size="medium"
+ type="text"
+ @click="
+ viewDetails(
+ scope.row.followUpFailInfo,
+ scope.row.leavehospitaldistrictname +
+ '闅忚澶辫触鍒楄〃'
+ )
+ "
+ ><span class="button-zx">{{
scope.row.followUpFail
- }}</span></el-button>
+ }}</span></el-button
+ >
</template>
</el-table-column>
- <el-table-column label="闅忚鐜�" align="center" width="120" key="followUpRate" prop="followUpRate">
+ <el-table-column
+ label="闅忚鐜�"
+ align="center"
+ width="120"
+ key="followUpRate"
+ prop="followUpRate"
+ >
</el-table-column>
- <el-table-column v-if="orgname != '涓芥按甯備腑鍖婚櫌'" label="鍙婃椂鐜�" align="center" width="120" key="rate"
- prop="rate">
+ <el-table-column
+ v-if="orgname != '涓芥按甯備腑鍖婚櫌'"
+ label="鍙婃椂鐜�"
+ align="center"
+ width="120"
+ key="rate"
+ prop="rate"
+ >
<template slot-scope="scope">
- <el-button size="medium" type="text" @click="Seedetails(scope.row)"><span class="button-zx">{{
- (Number(scope.row.rate) * 100).toFixed(2)
- }}%</span></el-button>
+ <el-button
+ size="medium"
+ type="text"
+ @click="Seedetails(scope.row)"
+ ><span class="button-zx"
+ >{{
+ (Number(scope.row.rate) * 100).toFixed(2)
+ }}%</span
+ ></el-button
+ >
</template>
</el-table-column>
- <el-table-column label="浜哄伐" align="center" key="manual" prop="manual">
+ <el-table-column
+ label="浜哄伐"
+ align="center"
+ key="manual"
+ prop="manual"
+ >
<template slot-scope="scope">
- <el-button size="medium" type="text" @click="
- viewDetails(
- scope.row.manualInfo,
- scope.row.leavehospitaldistrictname +
- '浜哄伐闅忚鍒楄〃'
- )
- "><span class="button-zx">{{
+ <el-button
+ size="medium"
+ type="text"
+ @click="
+ viewDetails(
+ scope.row.manualInfo,
+ scope.row.leavehospitaldistrictname +
+ '浜哄伐闅忚鍒楄〃'
+ )
+ "
+ ><span class="button-zx">{{
scope.row.manual
- }}</span></el-button>
+ }}</span></el-button
+ >
</template>
</el-table-column>
- <el-table-column label="鐭俊" align="center" key="sms" prop="sms">
+ <el-table-column
+ label="鐭俊"
+ align="center"
+ key="sms"
+ prop="sms"
+ >
<template slot-scope="scope">
- <el-button size="medium" type="text" @click="
- viewDetails(
- scope.row.smsInfo,
- scope.row.leavehospitaldistrictname +
- '鐭俊闅忚鍒楄〃'
- )
- "><span class="button-zx">{{
+ <el-button
+ size="medium"
+ type="text"
+ @click="
+ viewDetails(
+ scope.row.smsInfo,
+ scope.row.leavehospitaldistrictname +
+ '鐭俊闅忚鍒楄〃'
+ )
+ "
+ ><span class="button-zx">{{
scope.row.sms
- }}</span></el-button>
+ }}</span></el-button
+ >
</template>
</el-table-column>
- <el-table-column label="寰俊" align="center" key="weChat" prop="weChat">
+ <el-table-column
+ label="寰俊"
+ align="center"
+ key="weChat"
+ prop="weChat"
+ >
<template slot-scope="scope">
- <el-button size="medium" type="text" @click="
- viewDetails(
- scope.row.weChatInfo,
- scope.row.leavehospitaldistrictname +
- '寰俊闅忚鍒楄〃'
- )
- "><span class="button-zx">{{
+ <el-button
+ size="medium"
+ type="text"
+ @click="
+ viewDetails(
+ scope.row.weChatInfo,
+ scope.row.leavehospitaldistrictname +
+ '寰俊闅忚鍒楄〃'
+ )
+ "
+ ><span class="button-zx">{{
scope.row.weChat
- }}</span></el-button>
+ }}</span></el-button
+ >
</template>
</el-table-column>
</el-table-column>
<!-- 闅忚鎯呭喌鍒楋紙浠呬附姘村競涓尰闄㈡樉绀猴級 -->
- <el-table-column v-if="orgname == '涓芥按甯備腑鍖婚櫌'||orgname == '鏅畞鐣叉棌鑷不鍘夸汉姘戝尰闄�'" align="center" label="闅忚鎯呭喌">
- <el-table-column label="姝e父璇煶" align="center" width="100" key="taskSituation1"
- prop="taskSituation1">
- </el-table-column><el-table-column label="鎮h�呮嫆鎺ユ垨鎷掕" align="center" width="100" key="taskSituation2"
- prop="taskSituation2">
- </el-table-column><el-table-column label="闈㈣鎴栬�呮帴璇�" align="center" width="100" key="taskSituation3"
- prop="taskSituation3">
- </el-table-column><el-table-column label="寰俊闅忚" align="center" width="100" key="taskSituation4"
- prop="taskSituation4">
- </el-table-column><el-table-column label="闅忚鐢佃瘽涓嶆纭�" align="center" width="100" key="taskSituation5"
- prop="taskSituation5">
- </el-table-column><el-table-column label="鍏朵粬鎯呭喌涓嶅疁闅忚" align="center" width="100"
- key="taskSituation6" prop="taskSituation6">
+ <el-table-column
+ v-if="
+ orgname == '涓芥按甯備腑鍖婚櫌' ||
+ orgname == '鏅畞鐣叉棌鑷不鍘夸汉姘戝尰闄�'
+ "
+ align="center"
+ label="闅忚鎯呭喌"
+ >
+ <el-table-column
+ label="姝e父璇煶"
+ align="center"
+ width="100"
+ key="taskSituation1"
+ prop="taskSituation1"
+ >
+ </el-table-column
+ ><el-table-column
+ label="鎮h�呮嫆鎺ユ垨鎷掕"
+ align="center"
+ width="100"
+ key="taskSituation2"
+ prop="taskSituation2"
+ >
+ </el-table-column
+ ><el-table-column
+ label="闈㈣鎴栬�呮帴璇�"
+ align="center"
+ width="100"
+ key="taskSituation3"
+ prop="taskSituation3"
+ >
+ </el-table-column
+ ><el-table-column
+ label="寰俊闅忚"
+ align="center"
+ width="100"
+ key="taskSituation4"
+ prop="taskSituation4"
+ >
+ </el-table-column
+ ><el-table-column
+ label="闅忚鐢佃瘽涓嶆纭�"
+ align="center"
+ width="100"
+ key="taskSituation5"
+ prop="taskSituation5"
+ >
+ </el-table-column
+ ><el-table-column
+ label="鍏朵粬鎯呭喌涓嶅疁闅忚"
+ align="center"
+ width="100"
+ key="taskSituation6"
+ prop="taskSituation6"
+ >
</el-table-column>
</el-table-column>
</el-table>
@@ -241,161 +575,341 @@
<el-tab-pane label="鍐嶆闅忚" name="second">
<div class="your-table-container">
- <el-table ref="exportTableSecond" id="exportTableidSecond" v-loading="loadingSecond"
- :data="secondFollowUpList" :border="true" @selection-change="handleSelectionChangeSecond"
- @expand-change="handleRowClickSecond" :row-key="getRowKey" show-summary
- :summary-method="getSummariesSecond" :expand-row-keys="expandsSecond">
+ <el-table
+ ref="exportTableSecond"
+ id="exportTableidSecond"
+ v-loading="loadingSecond"
+ :data="secondFollowUpList"
+ :border="true"
+ @selection-change="handleSelectionChangeSecond"
+ @expand-change="handleRowClickSecond"
+ :row-key="getRowKey"
+ show-summary
+ :summary-method="getSummariesSecond"
+ :expand-row-keys="expandsSecond"
+ >
<!-- 灞曞紑琛岀澶村垪 -->
<el-table-column type="expand">
<template slot-scope="props">
- <el-table :data="props.row.doctorStats" border style="width: 95%; margin: 0 auto"
- class="inner-table" show-summary :summary-method="getInnerSummariesSecond">
- <el-table-column label="鍖荤敓濮撳悕" prop="drname" align="center" />
- <el-table-column label="绉戝" width="120" prop="deptname" align="center" />
- <el-table-column label="鍑洪櫌浜烘" prop="dischargeCount" align="center" />
- <el-table-column label="鍑洪櫌浜烘" align="center" key="dischargeCount" prop="dischargeCount">
+ <el-table
+ :data="props.row.doctorStats"
+ border
+ style="width: 95%; margin: 0 auto"
+ class="inner-table"
+ show-summary
+ :summary-method="getInnerSummariesSecond"
+ >
+ <el-table-column
+ label="鍖荤敓濮撳悕"
+ prop="drname"
+ align="center"
+ />
+ <el-table-column
+ label="绉戝"
+ width="120"
+ prop="deptname"
+ align="center"
+ />
+ <el-table-column
+ label="鍑洪櫌浜烘"
+ prop="dischargeCount"
+ align="center"
+ />
+ <el-table-column
+ label="鍑洪櫌浜烘"
+ align="center"
+ key="dischargeCount"
+ prop="dischargeCount"
+ >
</el-table-column>
- <el-table-column label="鏃犻渶闅忚浜烘" align="center" width="100" key="nonFollowUp"
- prop="nonFollowUp">
+ <el-table-column
+ label="鏃犻渶闅忚浜烘"
+ align="center"
+ width="100"
+ key="nonFollowUp"
+ prop="nonFollowUp"
+ >
</el-table-column>
- <el-table-column label="搴旈殢璁夸汉娆�" align="center" width="100" key="followUpNeeded"
- prop="followUpNeeded">
+ <el-table-column
+ label="搴旈殢璁夸汉娆�"
+ align="center"
+ width="100"
+ key="followUpNeeded"
+ prop="followUpNeeded"
+ >
</el-table-column>
<el-table-column align="center" label="鍐嶆鍑洪櫌闅忚">
- <el-table-column label="闇�闅忚" align="center" key="needFollowUpAgain"
- prop="needFollowUpAgain">
+ <el-table-column
+ label="闇�闅忚"
+ align="center"
+ key="needFollowUpAgain"
+ prop="needFollowUpAgain"
+ >
</el-table-column>
- <el-table-column label="寰呴殢璁�" align="center" key="pendingFollowUpAgain"
- prop="pendingFollowUpAgain">
+ <el-table-column
+ label="寰呴殢璁�"
+ align="center"
+ key="pendingFollowUpAgain"
+ prop="pendingFollowUpAgain"
+ >
</el-table-column>
- <el-table-column label="闅忚鎴愬姛" align="center" key="followUpSuccessAgain"
- prop="followUpSuccessAgain">
+ <el-table-column
+ label="闅忚鎴愬姛"
+ align="center"
+ key="followUpSuccessAgain"
+ prop="followUpSuccessAgain"
+ >
</el-table-column>
- <el-table-column label="闅忚澶辫触" align="center" key="followUpFailAgain"
- prop="followUpFailAgain">
+ <el-table-column
+ label="闅忚澶辫触"
+ align="center"
+ key="followUpFailAgain"
+ prop="followUpFailAgain"
+ >
</el-table-column>
- <el-table-column label="闅忚鐜�" align="center" width="120" key="followUpRateAgain"
- prop="followUpRateAgain">
+ <el-table-column
+ label="闅忚鐜�"
+ align="center"
+ width="120"
+ key="followUpRateAgain"
+ prop="followUpRateAgain"
+ >
</el-table-column>
- <el-table-column label="浜哄伐" align="center" key="manualAgain" prop="manualAgain">
+ <el-table-column
+ label="浜哄伐"
+ align="center"
+ key="manualAgain"
+ prop="manualAgain"
+ >
</el-table-column>
- <el-table-column label="鐭俊" align="center" key="smsAgain" prop="smsAgain">
+ <el-table-column
+ label="鐭俊"
+ align="center"
+ key="smsAgain"
+ prop="smsAgain"
+ >
</el-table-column>
- <el-table-column label="寰俊" align="center" key="weChatAgain" prop="weChatAgain">
+ <el-table-column
+ label="寰俊"
+ align="center"
+ key="weChatAgain"
+ prop="weChatAgain"
+ >
</el-table-column>
</el-table-column>
</el-table>
</template>
</el-table-column>
- <el-table-column label="鍑洪櫌鐥呭尯" align="center" sortable key="leavehospitaldistrictname"
- prop="leavehospitaldistrictname" width="150" :show-overflow-tooltip="true"
- :sort-method="sortChineseNumber" />
- <el-table-column label="绉戝" align="center" key="deptname" prop="deptname"
- :show-overflow-tooltip="true" />
- <el-table-column label="鍑洪櫌浜烘" align="center" key="dischargeCount" prop="dischargeCount">
+ <el-table-column
+ label="鍑洪櫌鐥呭尯"
+ align="center"
+ sortable
+ key="leavehospitaldistrictname"
+ prop="leavehospitaldistrictname"
+ width="150"
+ :show-overflow-tooltip="true"
+ :sort-method="sortChineseNumber"
+ />
+ <el-table-column
+ label="绉戝"
+ align="center"
+ key="deptname"
+ prop="deptname"
+ :show-overflow-tooltip="true"
+ />
+ <el-table-column
+ label="鍑洪櫌浜烘"
+ align="center"
+ key="dischargeCount"
+ prop="dischargeCount"
+ >
</el-table-column>
- <el-table-column label="鏃犻渶闅忚浜烘" align="center" width="100" key="nonFollowUp" prop="nonFollowUp">
+ <el-table-column
+ label="鏃犻渶闅忚浜烘"
+ align="center"
+ width="100"
+ key="nonFollowUp"
+ prop="nonFollowUp"
+ >
</el-table-column>
- <el-table-column label="搴旈殢璁夸汉娆�" align="center" width="100" key="followUpNeeded"
- prop="followUpNeeded">
+ <el-table-column
+ label="搴旈殢璁夸汉娆�"
+ align="center"
+ width="100"
+ key="followUpNeeded"
+ prop="followUpNeeded"
+ >
</el-table-column>
<el-table-column align="center" label="鍐嶆鍑洪櫌闅忚">
- <el-table-column label="闇�闅忚" align="center" key="needFollowUpAgain" prop="needFollowUpAgain">
+ <el-table-column
+ label="闇�闅忚"
+ align="center"
+ key="needFollowUpAgain"
+ prop="needFollowUpAgain"
+ >
<template slot-scope="scope">
- <el-button size="medium" type="text" @click="
- viewDetails(
- scope.row.needFollowUpAgainInfo,
- scope.row.leavehospitaldistrictname +
- '鍐嶆闅忚闇�闅忚鍒楄〃'
- )
- "><span class="button-zx">{{
+ <el-button
+ size="medium"
+ type="text"
+ @click="
+ viewDetails(
+ scope.row.needFollowUpAgainInfo,
+ scope.row.leavehospitaldistrictname +
+ '鍐嶆闅忚闇�闅忚鍒楄〃'
+ )
+ "
+ ><span class="button-zx">{{
scope.row.needFollowUpAgain
- }}</span></el-button>
+ }}</span></el-button
+ >
</template>
</el-table-column>
- <el-table-column label="寰呴殢璁�" align="center" key="pendingFollowUpAgain"
- prop="pendingFollowUpAgain">
+ <el-table-column
+ label="寰呴殢璁�"
+ align="center"
+ key="pendingFollowUpAgain"
+ prop="pendingFollowUpAgain"
+ >
<template slot-scope="scope">
- <el-button size="medium" type="text" @click="
- viewDetails(
- scope.row.pendingFollowUpAgainInfo,
- scope.row.leavehospitaldistrictname +
- '鍐嶆闅忚寰呴殢璁垮垪琛�'
- )
- "><span class="button-zx">{{
+ <el-button
+ size="medium"
+ type="text"
+ @click="
+ viewDetails(
+ scope.row.pendingFollowUpAgainInfo,
+ scope.row.leavehospitaldistrictname +
+ '鍐嶆闅忚寰呴殢璁垮垪琛�'
+ )
+ "
+ ><span class="button-zx">{{
scope.row.pendingFollowUpAgain
- }}</span></el-button>
+ }}</span></el-button
+ >
</template>
</el-table-column>
- <el-table-column label="闅忚鎴愬姛" align="center" key="followUpSuccessAgain"
- prop="followUpSuccessAgain">
+ <el-table-column
+ label="闅忚鎴愬姛"
+ align="center"
+ key="followUpSuccessAgain"
+ prop="followUpSuccessAgain"
+ >
<template slot-scope="scope">
- <el-button size="medium" type="text" @click="
- viewDetails(
- scope.row.followUpSuccessAgainInfo,
- scope.row.leavehospitaldistrictname +
- '鍐嶆闅忚闅忚鎴愬姛鍒楄〃'
- )
- "><span class="button-zx">{{
+ <el-button
+ size="medium"
+ type="text"
+ @click="
+ viewDetails(
+ scope.row.followUpSuccessAgainInfo,
+ scope.row.leavehospitaldistrictname +
+ '鍐嶆闅忚闅忚鎴愬姛鍒楄〃'
+ )
+ "
+ ><span class="button-zx">{{
scope.row.followUpSuccessAgain
- }}</span></el-button>
+ }}</span></el-button
+ >
</template>
</el-table-column>
- <el-table-column label="闅忚澶辫触" align="center" key="followUpFailAgain" prop="followUpFailAgain">
+ <el-table-column
+ label="闅忚澶辫触"
+ align="center"
+ key="followUpFailAgain"
+ prop="followUpFailAgain"
+ >
<template slot-scope="scope">
- <el-button size="medium" type="text" @click="
- viewDetails(
- scope.row.followUpFailAgainInfo,
- scope.row.leavehospitaldistrictname +
- '鍐嶆闅忚闅忚澶辫触鍒楄〃'
- )
- "><span class="button-zx">{{
+ <el-button
+ size="medium"
+ type="text"
+ @click="
+ viewDetails(
+ scope.row.followUpFailAgainInfo,
+ scope.row.leavehospitaldistrictname +
+ '鍐嶆闅忚闅忚澶辫触鍒楄〃'
+ )
+ "
+ ><span class="button-zx">{{
scope.row.followUpFailAgain
- }}</span></el-button>
+ }}</span></el-button
+ >
</template>
</el-table-column>
- <el-table-column label="闅忚鐜�" align="center" width="120" key="followUpRateAgain"
- prop="followUpRateAgain">
+ <el-table-column
+ label="闅忚鐜�"
+ align="center"
+ width="120"
+ key="followUpRateAgain"
+ prop="followUpRateAgain"
+ >
</el-table-column>
- <el-table-column label="浜哄伐" align="center" key="manualAgain" prop="manualAgain">
+ <el-table-column
+ label="浜哄伐"
+ align="center"
+ key="manualAgain"
+ prop="manualAgain"
+ >
<template slot-scope="scope">
- <el-button size="medium" type="text" @click="
- viewDetails(
- scope.row.manualAgainInfo,
- scope.row.leavehospitaldistrictname +
- '鍐嶆闅忚浜哄伐闅忚鍒楄〃'
- )
- "><span class="button-zx">{{
+ <el-button
+ size="medium"
+ type="text"
+ @click="
+ viewDetails(
+ scope.row.manualAgainInfo,
+ scope.row.leavehospitaldistrictname +
+ '鍐嶆闅忚浜哄伐闅忚鍒楄〃'
+ )
+ "
+ ><span class="button-zx">{{
scope.row.manualAgain
- }}</span></el-button>
+ }}</span></el-button
+ >
</template>
</el-table-column>
- <el-table-column label="鐭俊" align="center" key="smsAgain" prop="smsAgain">
+ <el-table-column
+ label="鐭俊"
+ align="center"
+ key="smsAgain"
+ prop="smsAgain"
+ >
<template slot-scope="scope">
- <el-button size="medium" type="text" @click="
- viewDetails(
- scope.row.smsAgainInfo,
- scope.row.leavehospitaldistrictname +
- '鍐嶆闅忚鐭俊闅忚鍒楄〃'
- )
- "><span class="button-zx">{{
+ <el-button
+ size="medium"
+ type="text"
+ @click="
+ viewDetails(
+ scope.row.smsAgainInfo,
+ scope.row.leavehospitaldistrictname +
+ '鍐嶆闅忚鐭俊闅忚鍒楄〃'
+ )
+ "
+ ><span class="button-zx">{{
scope.row.smsAgain
- }}</span></el-button>
+ }}</span></el-button
+ >
</template>
</el-table-column>
- <el-table-column label="寰俊" align="center" key="weChatAgain" prop="weChatAgain">
+ <el-table-column
+ label="寰俊"
+ align="center"
+ key="weChatAgain"
+ prop="weChatAgain"
+ >
<template slot-scope="scope">
- <el-button size="medium" type="text" @click="
- viewDetails(
- scope.row.weChatAgainInfo,
- scope.row.leavehospitaldistrictname +
- '鍐嶆闅忚寰俊闅忚鍒楄〃'
- )
- "><span class="button-zx">{{
+ <el-button
+ size="medium"
+ type="text"
+ @click="
+ viewDetails(
+ scope.row.weChatAgainInfo,
+ scope.row.leavehospitaldistrictname +
+ '鍐嶆闅忚寰俊闅忚鍒楄〃'
+ )
+ "
+ ><span class="button-zx">{{
scope.row.weChatAgain
- }}</span></el-button>
+ }}</span></el-button
+ >
</template>
</el-table-column>
</el-table-column>
@@ -408,7 +922,12 @@
</div>
</div>
<!-- 缁熻瓒嬪娍鍥惧脊绐� -->
- <el-dialog title="闅忚缁熻瓒嬪娍鍥�" :visible.sync="chartDialogVisible" width="80%" :close-on-click-modal="false">
+ <el-dialog
+ title="闅忚缁熻瓒嬪娍鍥�"
+ :visible.sync="chartDialogVisible"
+ width="80%"
+ :close-on-click-modal="false"
+ >
<div class="chart-container">
<el-row :gutter="20">
<el-col :span="12">
@@ -422,105 +941,256 @@
</el-row>
</div>
</el-dialog>
- <el-dialog title="鏈強鏃堕殢璁挎偅鑰呮湇鍔�" :visible.sync="SeedetailsVisible" v-loading="Seedloading" width="70%"
- :close-on-click-modal="false">
+ <el-dialog
+ title="鏈強鏃堕殢璁挎偅鑰呮湇鍔�"
+ :visible.sync="SeedetailsVisible"
+ v-loading="Seedloading"
+ width="70%"
+ :close-on-click-modal="false"
+ >
<div class="examine-jic">
<div class="jic-value">
<el-row :gutter="20">
<!--鐢ㄦ埛鏁版嵁-->
- <el-form :model="patientqueryParams" ref="queryForm" size="small" :inline="true" label-width="98px">
+ <el-form
+ :model="patientqueryParams"
+ ref="queryForm"
+ size="small"
+ :inline="true"
+ label-width="98px"
+ >
<el-form-item label="鎮h�咃細">
- <el-input v-model="patientqueryParams.name" @keyup.enter.native="handleQuery"></el-input>
+ <el-input
+ v-model="patientqueryParams.name"
+ @keyup.enter.native="handleQuery"
+ ></el-input>
</el-form-item>
<el-form-item label="鎮h�呰瘖鏂細">
- <el-input v-model="patientqueryParams.leavediagname" @keyup.enter.native="handleQuery"></el-input>
+ <el-input
+ v-model="patientqueryParams.leavediagname"
+ @keyup.enter.native="handleQuery"
+ ></el-input>
</el-form-item>
<el-form-item>
- <el-button type="primary" icon="el-icon-search" size="medium" @click="handleQuery">鎼滅储</el-button>
- <el-button icon="el-icon-refresh" size="medium" @click="resetQuery">鍙栨秷鍒涘缓</el-button>
+ <el-button
+ type="primary"
+ icon="el-icon-search"
+ size="medium"
+ @click="handleQuery"
+ >鎼滅储</el-button
+ >
+ <el-button
+ icon="el-icon-refresh"
+ size="medium"
+ @click="resetQuery"
+ >鍙栨秷鍒涘缓</el-button
+ >
</el-form-item>
</el-form>
<!-- 閫夋嫨鎮h�呭垪琛� -->
<el-table :data="logsheetlist" style="width: 100%">
- <el-table-column prop="sendname" align="center" label="濮撳悕" width="100">
+ <el-table-column
+ prop="sendname"
+ align="center"
+ label="濮撳悕"
+ width="100"
+ >
</el-table-column>
- <el-table-column prop="taskName" align="center" width="200" show-overflow-tooltip label="浠诲姟鍚嶇О">
+ <el-table-column
+ prop="taskName"
+ align="center"
+ width="200"
+ show-overflow-tooltip
+ label="浠诲姟鍚嶇О"
+ >
</el-table-column>
- <el-table-column prop="sendstate" align="center" width="200" label="浠诲姟鐘舵��">
+ <el-table-column
+ prop="sendstate"
+ align="center"
+ width="200"
+ label="浠诲姟鐘舵��"
+ >
<template slot-scope="scope">
<div v-if="scope.row.sendstate == 1">
- <el-tag type="primary" :disable-transitions="false">琛ㄥ崟宸查鍙�</el-tag>
+ <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>
+ <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>
+ <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>
+ <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>
+ <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>
+ <el-tag type="success" :disable-transitions="false"
+ >宸插畬鎴�</el-tag
+ >
</div>
</template>
</el-table-column>
- <el-table-column prop="visitTime" align="center" label="搴旈殢璁挎椂闂�" width="200" show-overflow-tooltip>
+ <el-table-column
+ prop="visitTime"
+ align="center"
+ label="搴旈殢璁挎椂闂�"
+ width="200"
+ show-overflow-tooltip
+ >
</el-table-column>
- <el-table-column prop="finishtime" align="center" label="闅忚瀹屾垚鏃堕棿" width="200" show-overflow-tooltip>
+ <el-table-column
+ prop="finishtime"
+ align="center"
+ label="闅忚瀹屾垚鏃堕棿"
+ width="200"
+ show-overflow-tooltip
+ >
</el-table-column>
- <el-table-column label="鍑洪櫌鏃ユ湡" width="200" align="center" key="endtime" prop="endtime">
+ <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="璐d换鎶ゅ+" width="120" align="center" key="nurseName" prop="nurseName" />
- <el-table-column label="涓绘不鍖荤敓" width="120" align="center" key="drname" prop="drname" />
+ </template></el-table-column
+ >
+ <el-table-column
+ label="璐d换鎶ゅ+"
+ width="120"
+ align="center"
+ key="nurseName"
+ prop="nurseName"
+ />
+ <el-table-column
+ label="涓绘不鍖荤敓"
+ width="120"
+ align="center"
+ key="drname"
+ prop="drname"
+ />
- <el-table-column label="缁撴灉鐘舵��" align="center" key="excep" prop="excep" width="120">
+ <el-table-column
+ label="缁撴灉鐘舵��"
+ align="center"
+ key="excep"
+ prop="excep"
+ width="120"
+ >
<template slot-scope="scope">
- <dict-tag :options="dict.type.sys_yujing" :value="scope.row.excep" />
+ <dict-tag
+ :options="dict.type.sys_yujing"
+ :value="scope.row.excep"
+ />
</template>
</el-table-column>
- <el-table-column label="澶勭悊鎰忚" align="center" key="suggest" prop="suggest" width="120">
+ <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" />
+ <dict-tag
+ :options="dict.type.sys_suggest"
+ :value="scope.row.suggest"
+ />
</template>
</el-table-column>
- <el-table-column prop="templatename" align="center" label="鏈嶅姟妯℃澘" width="200" show-overflow-tooltip>
+ <el-table-column
+ prop="templatename"
+ align="center"
+ label="鏈嶅姟妯℃澘"
+ width="200"
+ show-overflow-tooltip
+ >
</el-table-column>
- <el-table-column prop="remark" align="center" label="鏈嶅姟璁板綍" width="200" show-overflow-tooltip>
+ <el-table-column
+ prop="remark"
+ align="center"
+ label="鏈嶅姟璁板綍"
+ width="200"
+ show-overflow-tooltip
+ >
</el-table-column>
- <el-table-column prop="bankcardno" align="center" label="鍛煎彨鐘舵��" width="210">
+ <el-table-column
+ prop="bankcardno"
+ align="center"
+ label="鍛煎彨鐘舵��"
+ width="210"
+ >
</el-table-column>
- <el-table-column label="鎿嶄綔" fixed="right" align="center" width="200"
- class-name="small-padding fixed-width">
+ <el-table-column
+ label="鎿嶄綔"
+ fixed="right"
+ align="center"
+ width="200"
+ class-name="small-padding fixed-width"
+ >
<template slot-scope="scope">
- <el-button size="medium" type="text" @click="SeedetailsgGo(scope.row)"><span class="button-zx"><i
- class="el-icon-s-order"></i>鏌ョ湅</span></el-button>
+ <el-button
+ size="medium"
+ type="text"
+ @click="SeedetailsgGo(scope.row)"
+ ><span class="button-zx"
+ ><i class="el-icon-s-order"></i>鏌ョ湅</span
+ ></el-button
+ >
</template>
</el-table-column>
</el-table>
</el-row>
- <pagination v-show="patienttotal > 0 && this.patientqueryParams.allhosp != 6" :total="patienttotal"
- :page.sync="patientqueryParams.pn" :limit.sync="patientqueryParams.ps" @pagination="Seedetailstion" />
+ <pagination
+ v-show="patienttotal > 0 && this.patientqueryParams.allhosp != 6"
+ :total="patienttotal"
+ :page.sync="patientqueryParams.pn"
+ :limit.sync="patientqueryParams.ps"
+ @pagination="Seedetailstion"
+ />
</div>
</div>
</el-dialog>
<!-- 鍚勭被璇︽儏 -->
- <el-dialog :title="infotitle" :visible.sync="infotitleVisible" v-loading="infotitloading" width="70%"
- :close-on-click-modal="false">
+ <el-dialog
+ :title="infotitle"
+ :visible.sync="infotitleVisible"
+ v-loading="infotitloading"
+ width="70%"
+ :close-on-click-modal="false"
+ >
<div style="margin-bottom: 16px; display: flex; align-items: center">
<span style="margin-right: 10px; font-weight: bold">鎮h�呭鍚嶆煡璇�:</span>
- <el-input v-model="searchName" placeholder="璇疯緭鍏ユ偅鑰呭鍚嶈繘琛岀瓫閫�" clearable style="width: 300px" @input="handleSearch"
- @clear="handleSearch">
+ <el-input
+ v-model="searchName"
+ placeholder="璇疯緭鍏ユ偅鑰呭鍚嶈繘琛岀瓫閫�"
+ clearable
+ style="width: 300px"
+ @input="handleSearch"
+ @clear="handleSearch"
+ >
</el-input>
- <span style="margin-left: 10px; color: rgb(35, 81, 233); font-size: 16px">
+ <span
+ style="margin-left: 10px; color: rgb(35, 81, 233); font-size: 16px"
+ >
鍏� {{ infotitlelist.length }} 鏉¤褰�
</span>
</div>
@@ -528,75 +1198,196 @@
<div class="jic-value">
<el-row :gutter="20">
<!-- 閫夋嫨鎮h�呭垪琛� -->
- <div class="data-list" ref="dataList" @scroll="handleScroll" v-loading="infotitloading">
- <el-table :data="currentDisplayList" height="660" style="width: 100%">
- <el-table-column prop="sendname" align="center" label="濮撳悕" width="100">
+ <div
+ class="data-list"
+ ref="dataList"
+ @scroll="handleScroll"
+ v-loading="infotitloading"
+ >
+ <el-table
+ :data="currentDisplayList"
+ height="660"
+ style="width: 100%"
+ >
+ <el-table-column
+ prop="sendname"
+ align="center"
+ label="濮撳悕"
+ width="100"
+ >
</el-table-column>
- <el-table-column prop="taskName" align="center" width="200" show-overflow-tooltip label="浠诲姟鍚嶇О">
+ <el-table-column
+ prop="taskName"
+ align="center"
+ width="200"
+ show-overflow-tooltip
+ label="浠诲姟鍚嶇О"
+ >
</el-table-column>
- <el-table-column prop="sendstate" align="center" width="200" label="浠诲姟鐘舵��">
+ <el-table-column
+ prop="sendstate"
+ align="center"
+ width="200"
+ label="浠诲姟鐘舵��"
+ >
<template slot-scope="scope">
<div v-if="scope.row.sendstate == 1">
- <el-tag type="primary" :disable-transitions="false">琛ㄥ崟宸查鍙�</el-tag>
+ <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>
+ <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>
+ <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>
+ <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>
+ <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>
+ <el-tag type="success" :disable-transitions="false"
+ >宸插畬鎴�</el-tag
+ >
</div>
</template>
</el-table-column>
- <el-table-column label="浠诲姟鎵ц鏂瑰紡" align="center" key="preachform" prop="preachform" width="160"
- :show-overflow-tooltip="true">
+ <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 v-for="item in scope.row.preachform"
+ >{{ item }}銆�
</span>
</template>
</el-table-column>
- <el-table-column prop="visitTime" align="center" label="搴旈殢璁挎椂闂�" width="200" show-overflow-tooltip>
+ <el-table-column
+ prop="visitTime"
+ align="center"
+ label="搴旈殢璁挎椂闂�"
+ width="200"
+ show-overflow-tooltip
+ >
</el-table-column>
- <el-table-column prop="finishtime" align="center" label="闅忚瀹屾垚鏃堕棿" width="200" show-overflow-tooltip>
+ <el-table-column
+ prop="finishtime"
+ align="center"
+ label="闅忚瀹屾垚鏃堕棿"
+ width="200"
+ show-overflow-tooltip
+ >
</el-table-column>
- <el-table-column label="鍑洪櫌鏃ユ湡" width="200" align="center" key="endtime" prop="endtime">
+ <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="璐d换鎶ゅ+" width="120" align="center" key="nurseName" prop="nurseName" />
- <el-table-column label="涓绘不鍖荤敓" width="120" align="center" key="drname" prop="drname" />
+ </template></el-table-column
+ >
+ <el-table-column
+ label="璐d换鎶ゅ+"
+ width="120"
+ align="center"
+ key="nurseName"
+ prop="nurseName"
+ />
+ <el-table-column
+ label="涓绘不鍖荤敓"
+ width="120"
+ align="center"
+ key="drname"
+ prop="drname"
+ />
- <el-table-column label="缁撴灉鐘舵��" align="center" key="excep" prop="excep" width="120">
+ <el-table-column
+ label="缁撴灉鐘舵��"
+ align="center"
+ key="excep"
+ prop="excep"
+ width="120"
+ >
<template slot-scope="scope">
- <dict-tag :options="dict.type.sys_yujing" :value="scope.row.excep" />
+ <dict-tag
+ :options="dict.type.sys_yujing"
+ :value="scope.row.excep"
+ />
</template>
</el-table-column>
- <el-table-column label="澶勭悊鎰忚" align="center" key="suggest" prop="suggest" width="120">
+ <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" />
+ <dict-tag
+ :options="dict.type.sys_suggest"
+ :value="scope.row.suggest"
+ />
</template>
</el-table-column>
- <el-table-column prop="templatename" align="center" label="鏈嶅姟妯℃澘" width="200" show-overflow-tooltip>
+ <el-table-column
+ prop="templatename"
+ align="center"
+ label="鏈嶅姟妯℃澘"
+ width="200"
+ show-overflow-tooltip
+ >
</el-table-column>
- <el-table-column prop="remark" align="center" label="鏈嶅姟璁板綍" width="200" show-overflow-tooltip>
+ <el-table-column
+ prop="remark"
+ align="center"
+ label="鏈嶅姟璁板綍"
+ width="200"
+ show-overflow-tooltip
+ >
</el-table-column>
- <el-table-column prop="bankcardno" align="center" label="鍛煎彨鐘舵��" width="210">
+ <el-table-column
+ prop="bankcardno"
+ align="center"
+ label="鍛煎彨鐘舵��"
+ width="210"
+ >
</el-table-column>
- <el-table-column label="鎿嶄綔" fixed="right" align="center" width="200"
- class-name="small-padding fixed-width">
+ <el-table-column
+ label="鎿嶄綔"
+ fixed="right"
+ align="center"
+ width="200"
+ class-name="small-padding fixed-width"
+ >
<template slot-scope="scope">
- <el-button size="medium" type="text" @click="SeedetailsgGo(scope.row)"><span class="button-zx"><i
- class="el-icon-s-order"></i>鏌ョ湅</span></el-button>
+ <el-button
+ size="medium"
+ type="text"
+ @click="SeedetailsgGo(scope.row)"
+ ><span class="button-zx"
+ ><i class="el-icon-s-order"></i>鏌ョ湅</span
+ ></el-button
+ >
</template>
</el-table-column>
</el-table>
@@ -1323,12 +2114,18 @@
Seedetails(row) {
this.SeedetailsVisible = true;
this.Seedloading = true;
- this.patientqueryParams.starttime = this.parseTime(
- this.queryParams.dateRange[0]
- );
- this.patientqueryParams.endtime = this.parseTime(
- this.queryParams.dateRange[1]
- );
+ if (queryParams.dateRange) {
+ this.patientqueryParams.starttime = this.parseTime(
+ this.queryParams.dateRange[0]
+ );
+ this.patientqueryParams.endtime = this.parseTime(
+ this.queryParams.dateRange[1]
+ );
+ } else {
+ this.patientqueryParams.endtime = null;
+ this.patientqueryParams.starttime = null;
+ }
+
this.patientqueryParams.deptcode = row.deptcode;
selectTimelyRate(this.patientqueryParams).then((response) => {
this.logsheetlist = response.data.detail;
@@ -1545,7 +2342,7 @@
this.getList();
this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
})
- .catch(() => { });
+ .catch(() => {});
},
// 瀵煎嚭鏂规硶
@@ -2791,9 +3588,21 @@
}
// 鐧惧垎姣斿瓧娈电壒娈婃牱寮�
-.your-table-container ::v-deep .el-table__footer .el-table__cell[data-field="followUpRate"] .cell,
-.your-table-container ::v-deep .el-table__footer .el-table__cell[data-field="rate"] .cell,
-.your-table-container ::v-deep .el-table__footer .el-table__cell[data-field="followUpRateAgain"] .cell {
+.your-table-container
+ ::v-deep
+ .el-table__footer
+ .el-table__cell[data-field="followUpRate"]
+ .cell,
+.your-table-container
+ ::v-deep
+ .el-table__footer
+ .el-table__cell[data-field="rate"]
+ .cell,
+.your-table-container
+ ::v-deep
+ .el-table__footer
+ .el-table__cell[data-field="followUpRateAgain"]
+ .cell {
color: #e6a23c !important;
font-weight: 700 !important;
}
@@ -2822,7 +3631,6 @@
/* 鍐呭眰鍖荤敓琛ㄦ牸鏍峰紡 */
.inner-table {
-
// 琛ㄥご鑳屾櫙鑹�
::v-deep .el-table__header-wrapper {
background-color: #f0f7ff !important;
diff --git a/src/views/sfstatistics/percentage/index.vue b/src/views/sfstatistics/percentage/index.vue
index 9a068e7..d6254f3 100644
--- a/src/views/sfstatistics/percentage/index.vue
+++ b/src/views/sfstatistics/percentage/index.vue
@@ -14,6 +14,7 @@
<el-select
v-model="queryParams.statisticaltype"
placeholder="璇烽�夋嫨缁熻绫诲瀷"
+ @change="handleQuery"
>
<el-option
v-for="item in Statisticallist"
@@ -254,8 +255,8 @@
options: this.$store.getters.tasktypes,
queryParams: {
serviceType: [2],
- dateRange: this.getLastMonthRange(),
- dateRangecy: [],
+ dateRange: [],
+ dateRangecy: this.getLastMonthRange(),
statisticaltype:
localStorage.getItem("orgname") == "缂欎簯鍘夸汉姘戝尰闄�" ||
localStorage.getItem("orgname") == "鏅畞鐣叉棌鑷不鍘夸汉姘戝尰闄�"
@@ -395,6 +396,8 @@
},
handleQuery() {
+ if (!this.queryParams.dateRange) this.queryParams.dateRange = [];
+ if (!this.queryParams.dateRangecy) this.queryParams.dateRange = [];
this.queryParams.startTime = this.parseTime(
this.queryParams.dateRange[0]
);
diff --git a/src/views/sfstatistics/percentage/satisfaction.vue b/src/views/sfstatistics/percentage/satisfaction.vue
index 3858b3b..c409b36 100644
--- a/src/views/sfstatistics/percentage/satisfaction.vue
+++ b/src/views/sfstatistics/percentage/satisfaction.vue
@@ -17,6 +17,7 @@
<el-select
v-model="queryParams.statisticaltype"
placeholder="璇烽�夋嫨缁熻绫诲瀷"
+ @change="handleQuery"
>
<el-option
v-for="item in Statisticallist"
@@ -186,7 +187,7 @@
</template> -->
</el-table-column>
<el-table-column
- v-if="orgname == '鏅畞鐣叉棌鑷不鍘夸汉姘戝尰闄�'"
+ v-if="orgname == '鏅畞鐣叉棌鑷不鍘夸汉姘戝尰闄�'"
label="鍙婃椂鐜�"
align="center"
key="rate"
@@ -553,7 +554,6 @@
</template>
<script>
-
import store from "@/store";
import {
getSfStatisticsJoy,
@@ -982,7 +982,6 @@
this.single = selection.length != 1;
this.multiple = !selection.length;
},
-
/** 瀵煎嚭鎸夐挳鎿嶄綔 */
/** 瀵煎嚭鎸夐挳鎿嶄綔 */
diff --git a/vue.config.js b/vue.config.js
index fd08b34..7f985b0 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -36,8 +36,8 @@
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
// target: `https://www.health-y.cn/lssf`,
- target: `http://192.168.100.10:8096`,
- // target: `http://192.168.100.10:8094`,//鐪佺珛鍚屽痉
+ // target: `http://192.168.100.10:8096`,
+ target: `http://192.168.100.10:8094`,//鐪佺珛鍚屽痉
// target: `http://192.168.100.10:8095`,//鏂板崕
// target: `http://192.168.100.10:8098`,//甯備竴
// target:`http://localhost:8095`,
diff --git "a/\351\232\217\350\256\277\351\200\232\347\224\250.zip" "b/\351\232\217\350\256\277\351\200\232\347\224\250.zip"
deleted file mode 100644
index e119a81..0000000
--- "a/\351\232\217\350\256\277\351\200\232\347\224\250.zip"
+++ /dev/null
Binary files differ
diff --git "a/\351\232\217\350\256\277\351\200\232\347\224\2508.10.zip" "b/\351\232\217\350\256\277\351\200\232\347\224\2508.10.zip"
deleted file mode 100644
index 719643c..0000000
--- "a/\351\232\217\350\256\277\351\200\232\347\224\2508.10.zip"
+++ /dev/null
Binary files differ
diff --git "a/\351\232\217\350\256\277\351\200\232\347\224\2508.11.zip" "b/\351\232\217\350\256\277\351\200\232\347\224\2508.14.zip"
similarity index 81%
rename from "\351\232\217\350\256\277\351\200\232\347\224\2508.11.zip"
rename to "\351\232\217\350\256\277\351\200\232\347\224\2508.14.zip"
index a119b53..ea19429 100644
--- "a/\351\232\217\350\256\277\351\200\232\347\224\2508.11.zip"
+++ "b/\351\232\217\350\256\277\351\200\232\347\224\2508.14.zip"
Binary files differ
diff --git "a/\351\232\217\350\256\277\351\200\232\347\224\250 \0502\051.zip" "b/\351\232\217\350\256\277\351\200\232\347\224\2508.17.zip"
similarity index 80%
rename from "\351\232\217\350\256\277\351\200\232\347\224\250 \0502\051.zip"
rename to "\351\232\217\350\256\277\351\200\232\347\224\2508.17.zip"
index 1614893..c240972 100644
--- "a/\351\232\217\350\256\277\351\200\232\347\224\250 \0502\051.zip"
+++ "b/\351\232\217\350\256\277\351\200\232\347\224\2508.17.zip"
Binary files differ
diff --git "a/\351\232\217\350\256\277\351\200\232\347\224\2508.7.zip" "b/\351\232\217\350\256\277\351\200\232\347\224\2508.7.zip"
deleted file mode 100644
index b73b3be..0000000
--- "a/\351\232\217\350\256\277\351\200\232\347\224\2508.7.zip"
+++ /dev/null
Binary files differ
--
Gitblit v1.9.3