From 6e7f546cc37ed57e7e2eda4fdfc32fa2b3e0160c Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期二, 20 十月 2026 17:41:10 +0800
Subject: [PATCH] 测试完成
---
src/views/patient/archives/generateConfig/index.vue | 814 ++++++++++++++++++++++++++++
src/views/sfstatistics/percentage/components/SecondFollowUp.vue | 290 ++++++---
dist (2).zip | 0
vue.config.js | 4
随访通用10.19 (2).zip | 0
src/api/smartor/specificArchiveGenerateConfig.js | 42 +
src/views/sfstatistics/percentage/components/FirstFollowUp.vue | 333 +++++++----
src/views/patient/propaganda/QuestionnaireTask.vue | 41 +
src/views/followvisit/record/detailpage/index.vue | 78 ++
src/views/patient/patient/behospitalized.vue | 23
src/api/AiCentre/EChartsdata.js | 7
随访通用10.19.zip | 0
src/views/patient/propaganda/particty.vue | 41 +
src/views/outsideChainwtnew.vue | 36 +
src/views/patient/follow/index.vue | 17
15 files changed, 1,466 insertions(+), 260 deletions(-)
diff --git "a/dist \0502\051.zip" "b/dist \0502\051.zip"
new file mode 100644
index 0000000..ba4aac3
--- /dev/null
+++ "b/dist \0502\051.zip"
Binary files differ
diff --git a/src/api/AiCentre/EChartsdata.js b/src/api/AiCentre/EChartsdata.js
index 68c6352..135dd6f 100644
--- a/src/api/AiCentre/EChartsdata.js
+++ b/src/api/AiCentre/EChartsdata.js
@@ -82,6 +82,13 @@
method: "get",
});
}
+// 闂嵎寰俊鎺ㄩ��
+export function weChatSubTask(Id) {
+ return request({
+ url: "/smartor/serviceSubtask/weChatSubTask/" + Id,
+ method: "get",
+ });
+}
// 鍙戦�佺煭淇�
export function getCurrentUserServiceSubtaskCount(data) {
return request({
diff --git a/src/api/smartor/specificArchiveGenerateConfig.js b/src/api/smartor/specificArchiveGenerateConfig.js
new file mode 100644
index 0000000..ff37aca
--- /dev/null
+++ b/src/api/smartor/specificArchiveGenerateConfig.js
@@ -0,0 +1,42 @@
+import request from '@/utils/request'
+
+/**
+ * 涓撶妗f鐢熸垚閰嶇疆
+ * 鏂囨。锛氥�婁笓绉戞。妗堢敓鎴愰厤缃帴鍙f枃妗c��2026-10-19锛堝叡 3 涓帴鍙o級
+ * 搴撹〃锛歱at_specific_archive_generate_config锛堜笓绉戞。妗堢敓鎴愰厤缃〃锛�
+ *
+ * 閫氱敤绾﹀畾锛�
+ * 1. 涓変釜鎺ュ彛鍧囦负 POST锛岃姹備綋 Content-Type: application/json銆�
+ * 2. deptCodes / icd10Codes 鍦ㄦ暟鎹簱涓庡疄浣撲腑鍧囦负 String锛岃姹傛椂椤讳紶
+ * 杞箟鍚庣殑 JSON 瀛楃涓诧紙濡� "[\"D001\",\"D002\"]"锛夛紝涓嶈兘鐩存帴浼� JSON 鏁扮粍銆�
+ * 3. 鍒楄〃鏌ヨ鍥哄畾杩囨护 del_flag = '0'锛屽凡鍒犻櫎閰嶇疆涓嶄細杩斿洖銆�
+ * 4. orgid / campusid 鐢卞悗绔寜鐧诲綍鐢ㄦ埛鑷姩娉ㄥ叆锛屽墠绔笉鐢ㄤ紶銆�
+ * 5. 鏃堕棿鑼冨洿绛涢�夊彧鑳介�氳繃 params.beginTime / params.endTime 浼狅紝鎸� create_time 杩囨护銆�
+ */
+
+// 鏌ヨ涓撶妗f鐢熸垚閰嶇疆鍒楄〃
+export function listSpecificArchiveGenerateConfig(query) {
+ return request({
+ url: '/smartor/specificArchiveGenerateConfig/selectPatSpecificArchiveGenerateConfigList',
+ method: 'post',
+ data: query
+ })
+}
+
+// 鏂板鎴栦慨鏀逛笓绉戞。妗堢敓鎴愰厤缃紙鏈� id 涓旇褰曞瓨鍦ㄥ垯鏇存柊锛屽惁鍒欐柊澧烇級
+export function saveSpecificArchiveGenerateConfig(data) {
+ return request({
+ url: '/smartor/specificArchiveGenerateConfig/insertOrUpdatePatSpecificArchiveGenerateConfig',
+ method: 'post',
+ data: data
+ })
+}
+
+// 鎵归噺鍒犻櫎涓撶妗f鐢熸垚閰嶇疆锛堟寜 id 鏁扮粍閫昏緫鍒犻櫎 del_flag = '1'锛�
+export function batchDeleteSpecificArchiveGenerateConfig(ids) {
+ return request({
+ url: '/smartor/specificArchiveGenerateConfig/batchDelete',
+ method: 'post',
+ data: Array.isArray(ids) ? ids : String(ids).split(',')
+ })
+}
diff --git a/src/views/followvisit/record/detailpage/index.vue b/src/views/followvisit/record/detailpage/index.vue
index af3f348..d52a2b9 100644
--- a/src/views/followvisit/record/detailpage/index.vue
+++ b/src/views/followvisit/record/detailpage/index.vue
@@ -408,9 +408,20 @@
type="primary"
round
@click="smsSubTask"
- v-if="orgname != '鐪佺珛鍚屽痉缈犺嫅闄㈠尯'"
+ v-if="
+ orgname != '鐪佺珛鍚屽痉缈犺嫅闄㈠尯' &&
+ orgname != '涓芥按甯備腑鍖婚櫌'
+ "
>
闂嵎鐭俊鎺ㄩ��
+ </el-button>
+ <el-button
+ type="primary"
+ round
+ @click="weChatSubTask"
+ v-if="orgname == '涓芥按甯備腑鍖婚櫌'"
+ >
+ 闂嵎寰俊鎺ㄩ��
</el-button>
</span>
</div>
@@ -1169,9 +1180,9 @@
title="鎮h�呭啀娆¢殢璁�"
v-dialogDrags
:visible.sync="dialogFormVisible"
- width="700px"
+ width="900px"
>
- <el-form ref="zcform" :rules="zcrules" :model="form" label-width="80px">
+ <el-form ref="zcform" :rules="zcrules" :model="form" label-width="120px">
<!-- 鍩虹鏈嶅姟淇℃伅 - 榛樿鎶樺彔 -->
<el-collapse v-model="activeNames" @change="handleCollapseChange">
<el-collapse-item title="鍩虹鏈嶅姟淇℃伅" name="basic">
@@ -1271,6 +1282,13 @@
<!-- 涓嬫闅忚淇℃伅 - 榛樿灞曞紑 -->
<el-collapse-item title="涓嬫闅忚" name="next">
+ <el-form-item label="鍐嶆闅忚浠诲姟">
+ <el-input
+ disabled
+ v-model="nextTaskName"
+ placeholder="鍐嶆闅忚浠诲姟"
+ ></el-input>
+ </el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="闅忚鏂瑰紡" prop="visitType">
@@ -1317,6 +1335,12 @@
</el-form-item>
<el-form-item label="闅忚璁板綍" :required="form.resource == '2'">
<el-input type="textarea" v-model="form.remark"></el-input>
+ </el-form-item>
+ <el-form-item label="鍖荤敓澶勭悊鎰忚" prop="doctorOpinion">
+ <el-input
+ type="textarea"
+ v-model="form.doctorOpinion"
+ ></el-input>
</el-form-item>
</el-collapse-item>
</el-collapse>
@@ -1365,8 +1389,10 @@
query360PatInfonh,
sendMsg,
smsSubTask,
+ weChatSubTask,
getconfigKey,
} from "@/api/AiCentre/index";
+import { getIvrtask } from "@/api/smartor/ivrtask";
import {
messagelistpatient,
alterpatient,
@@ -1516,6 +1542,7 @@
input: "浠婂ぉ韬綋杩樹笉閿�",
radio: "2",
taskname: "",
+ nextTaskName: "",
activeName: "wj",
voice: "",
templateid: "",
@@ -1611,6 +1638,9 @@
},
trigger: "change",
},
+ ],
+ doctorOpinion: [
+ { required: true, message: "璇疯緭鍏ュ尰鐢熷鐞嗘剰瑙�", trigger: "blur" },
],
},
userrules: {
@@ -2329,6 +2359,22 @@
console.log(err);
});
},
+ weChatSubTask() {
+ this.$modal
+ .confirm("鏄惁鍚戞偅鑰呴�氳繃寰俊鎺ㄩ�侀棶鍗峰唴瀹癸紵")
+ .then(() => {
+ weChatSubTask(this.id).then((res) => {
+ if (String(res.code) === "200") {
+ this.$modal.msgSuccess(res.msg || "鍙戦�佹垚鍔�");
+ } else {
+ this.$modal.msgError(res.message || res.msg || "鍙戦�佸け璐�");
+ }
+ });
+ })
+ .catch((err) => {
+ console.log(err);
+ });
+ },
handleConfirmReplace() {
// 閬嶅巻鎵�鏈夐鐩紙tableDatatop锛�
this.tableDatatop.forEach((item) => {
@@ -2589,6 +2635,7 @@
console.log(this.form.templatename, "templatename");
this.form.remark = this.form.remark || "";
+ this.form.doctorOpinion = this.form.doctorOpinion || "";
this.logsheetlist = res.rows[0].serviceSubtaskList;
this.templateid = this.form.templateid;
this.selectedTag = this.form.excep;
@@ -2778,8 +2825,29 @@
return tag ? tag.description : "";
},
+ // 鑾峰彇鍐嶆闅忚浠诲姟淇℃伅锛堜笅娆¢殢璁块儴鍒嗗睍绀猴級
+ fetchNextTaskInfo() {
+ const taskid = this.form.taskid || this.taskid;
+ if (!taskid) {
+ this.nextTaskName = "";
+ return;
+ }
+ getIvrtask(taskid).then((r) => {
+ const task = r.data || {};
+ const nextid = task.nexttaskid;
+ if (nextid) {
+ getIvrtask(nextid).then((r2) => {
+ this.nextTaskName =
+ (r2.data && r2.data.taskName) || task.nexttaskname || "";
+ });
+ } else {
+ this.nextTaskName = task.nexttaskname || "";
+ }
+ });
+ },
// 璋冭捣鍐嶆鍙戦��
sendAgain() {
+ this.fetchNextTaskInfo();
getTaskservelist({
patid: this.patid,
visitCount: 2,
@@ -3720,14 +3788,14 @@
margin-top: 20px;
}
-.el-input.is-disabled .el-input__inner {
+::v-deep .el-input.is-disabled .el-input__inner {
background-color: #fff;
border-color: #dcdfe6;
color: #080808 !important;
cursor: not-allowed;
}
-.el-textarea.is-disabled .el-textarea__inner {
+::v-deep .el-textarea.is-disabled .el-textarea__inner {
background-color: #fff;
border-color: #dcdfe6;
color: #080808 !important;
diff --git a/src/views/outsideChainwtnew.vue b/src/views/outsideChainwtnew.vue
index f37bec9..8b61ffa 100644
--- a/src/views/outsideChainwtnew.vue
+++ b/src/views/outsideChainwtnew.vue
@@ -417,6 +417,12 @@
// 鍚庣绉侀挜
privateKey:
" MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAtDOpbUQhcEoYy77agRhIHmAzs7H+KHJhN56gTTI9fWq23j77nI055MFV3oQQziIrNUTNaPpEQhZXBpI0+f9K9QIDAQABAkB3n0fcWfrcoMN/FU3VnrnZOEF6CzFNxkgU9P8y36QECWKZ9JhYQkNpKrMC9oXlN3VSaRigV7B+L/I/a0Rs1W+tAiEA4jx7xcXJ4y4BNwAmVHt6NNiEkzIwWnwC/0qsEu8NsOsCIQDL6MMn1D2uznC6OuOWpxDCkBh1JL1NzZTZeH2G+hj7nwIgKGAC9tjFnvWm4dn0/T7MIIJDpsFeP8fCAS2iZ/6hwuECIAS/eLvWr1EAsZNEh8QcQ8GkBU3E+ztyjAK8UX/xFt/VAiBf79/1tDErX4/DChecM8w3c3DhbBcjuE3fHZn7p6/UKg==",
+ // 婊℃剰搴�/寤夋磥棰樼殑榛樿閫夐」锛堜粎鍦ㄩ鐩湭濉啓鏃剁敓鏁堬級
+ defaultAnswers: [
+ { keyword: "鎮ㄥ鍖绘姢浜哄憳鐨勬弧鎰忓害涓�", answer: "浼�" },
+ { keyword: "鎮ㄥ鍖婚櫌鐜銆佽鏂界瓑鏁翠綋鐨勬弧鎰忓害涓�", answer: "浼�" },
+ { keyword: "鏄惁鏈夊尰鎶や汉鍛樹富鍔ㄧ储瑕佺孩鍖呫�侀敠鏃楁垨琛ㄦ壃淇�", answer: "鏃�" },
+ ],
formData: {
question1: "",
question2: "",
@@ -611,6 +617,8 @@
item.scriptResult = item.scriptResult.split("&");
}
});
+ // 榛樿鍕鹃�夋弧鎰忓害/寤夋磥棰橈紙宸蹭綔绛旂殑涓嶄細琚鐩栵級
+ this.applyDefaultAnswers(this.questionList);
this.loading = false;
return;
@@ -644,6 +652,8 @@
item.scriptResult = [];
}
});
+ // 榛樿鍕鹃�夋弧鎰忓害/寤夋磥棰�
+ this.applyDefaultAnswers(this.questionList);
this.loading = false;
}
})
@@ -651,6 +661,32 @@
this.loading = false;
});
},
+ // 缁欐寚瀹氶鐩缃粯璁ら�夐」锛堜粎鍦ㄦ湭濉啓鏃剁敓鏁堬級
+ applyDefaultAnswers(list) {
+ if (!Array.isArray(list)) return;
+ list.forEach((item) => {
+ if (item.scriptType != 1) return;
+ // 宸叉湁绛旀鏃朵笉瑕嗙洊
+ if (
+ item.scriptResult !== undefined &&
+ item.scriptResult !== null &&
+ item.scriptResult !== ""
+ ) {
+ return;
+ }
+ const content = (item.scriptContent || "").trim();
+ const matched = this.defaultAnswers.find((d) =>
+ content.includes(d.keyword)
+ );
+ if (!matched) return;
+ const option = (item.svyTaskTemplateTargetoptions || []).find(
+ (o) => (o.optioncontent || "").trim() === matched.answer
+ );
+ if (option) {
+ item.scriptResult = option.optioncontent;
+ }
+ });
+ },
// 鍔犲瘑鍑芥暟
encrypt(txt) {
const encryptor = new JSEncrypt();
diff --git a/src/views/patient/archives/generateConfig/index.vue b/src/views/patient/archives/generateConfig/index.vue
new file mode 100644
index 0000000..6570053
--- /dev/null
+++ b/src/views/patient/archives/generateConfig/index.vue
@@ -0,0 +1,814 @@
+<template>
+ <div class="generateConfig-management">
+ <div class="main-content">
+ <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="88px"
+ >
+ <el-form-item label="閮ㄩ棬绫诲瀷" prop="deptType">
+ <el-select
+ v-model="queryParams.deptType"
+ placeholder="璇烽�夋嫨閮ㄩ棬绫诲瀷"
+ clearable
+ style="width: 160px"
+ >
+ <el-option
+ v-for="item in DEPT_TYPE_OPTIONS"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ </el-form-item>
+
+ <el-form-item label="閮ㄩ棬鍒嗙被" prop="deptCategory">
+ <el-select
+ v-model="queryParams.deptCategory"
+ placeholder="璇烽�夋嫨閮ㄩ棬鍒嗙被"
+ clearable
+ style="width: 160px"
+ >
+ <el-option
+ v-for="item in DEPT_CATEGORY_OPTIONS"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ </el-form-item>
+
+ <el-form-item label="妗f绫诲瀷" prop="archiveType">
+ <el-select
+ v-model="queryParams.archiveType"
+ placeholder="璇烽�夋嫨妗f绫诲瀷"
+ clearable
+ style="width: 160px"
+ >
+ <el-option
+ v-for="item in queryArchiveTypeOptions"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ </el-form-item>
+
+ <el-form-item label="鍒涘缓鏃堕棿">
+ <el-date-picker
+ v-model="dateRange"
+ type="daterange"
+ value-format="yyyy-MM-dd"
+ range-separator="鑷�"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡"
+ style="width: 240px"
+ />
+ </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-form-item>
+ </el-form>
+
+ <el-divider></el-divider>
+
+ <el-row :gutter="10" class="mb8">
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-plus"
+ size="medium"
+ @click="handleAdd"
+ >鏂板</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="danger"
+ plain
+ icon="el-icon-delete"
+ size="medium"
+ :disabled="multiple"
+ @click="handleDelete"
+ >鍒犻櫎</el-button
+ >
+ </el-col>
+ </el-row>
+
+ <el-table
+ v-loading="loading"
+ :data="configList"
+ :border="true"
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="50" align="center" />
+
+ <el-table-column label="閮ㄩ棬绫诲瀷" align="center" width="100">
+ <template slot-scope="scope">
+ <el-tag
+ :type="scope.row.deptType === '1' ? 'primary' : 'warning'"
+ size="small"
+ >
+ {{ deptTypeLabel(scope.row.deptType) }}
+ </el-tag>
+ </template>
+ </el-table-column>
+
+ <el-table-column label="閮ㄩ棬鍒嗙被" align="center" width="100">
+ <template slot-scope="scope">
+ <el-tag size="small">
+ {{ deptCategoryLabel(scope.row.deptCategory) }}
+ </el-tag>
+ </template>
+ </el-table-column>
+
+ <el-table-column
+ label="妗f绫诲瀷"
+ align="center"
+ width="140"
+ :show-overflow-tooltip="true"
+ >
+ <template slot-scope="scope">
+ {{ archiveTypeLabel(scope.row) }}
+ </template>
+ </el-table-column>
+
+ <el-table-column
+ label="绉戝/鐥呭尯"
+ align="center"
+ min-width="180"
+ :show-overflow-tooltip="true"
+ >
+ <template slot-scope="scope">
+ <span v-if="formatDeptCodes(scope.row)">
+ {{ formatDeptCodes(scope.row) }}
+ </span>
+ <span v-else style="color: #c0c4cc">鈥�</span>
+ </template>
+ </el-table-column>
+
+ <el-table-column
+ label="璇婃柇缂栫爜"
+ align="center"
+ min-width="160"
+ :show-overflow-tooltip="true"
+ >
+ <template slot-scope="scope">
+ <span v-if="formatIcd10Codes(scope.row)">
+ {{ formatIcd10Codes(scope.row) }}
+ </span>
+ <span v-else style="color: #c0c4cc">鈥�</span>
+ </template>
+ </el-table-column>
+
+ <el-table-column
+ label="澶囨敞"
+ align="center"
+ prop="remark"
+ min-width="160"
+ :show-overflow-tooltip="true"
+ />
+
+ <el-table-column
+ label="鍒涘缓鏃堕棿"
+ align="center"
+ prop="createTime"
+ width="160"
+ />
+
+ <el-table-column
+ label="鎿嶄綔"
+ fixed="right"
+ align="center"
+ width="160"
+ class-name="small-padding fixed-width"
+ >
+ <template slot-scope="scope">
+ <el-button
+ size="medium"
+ type="text"
+ @click="handleUpdate(scope.row)"
+ >
+ <span class="button-textxg">
+ <i class="el-icon-edit"></i>淇敼
+ </span>
+ </el-button>
+ <el-button
+ size="medium"
+ type="text"
+ @click="handleDelete(scope.row)"
+ >
+ <span class="button-textsc">
+ <i class="el-icon-delete"></i>鍒犻櫎
+ </span>
+ </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-col>
+ </el-row>
+ </div>
+
+ <!-- 娣诲姞/淇敼閰嶇疆寮规 -->
+ <el-dialog
+ :title="dialogTitle"
+ :visible.sync="dialogVisible"
+ width="45%"
+ :close-on-click-modal="false"
+ @close="cancelForm"
+ >
+ <el-form
+ :model="form"
+ :rules="rules"
+ ref="formRef"
+ label-width="100px"
+ size="medium"
+ >
+ <el-form-item label="閮ㄩ棬绫诲瀷" prop="deptType">
+ <el-radio-group v-model="form.deptType" @change="handleDeptTypeChange">
+ <el-radio
+ v-for="item in DEPT_TYPE_OPTIONS"
+ :key="item.value"
+ :label="item.value"
+ >
+ {{ item.label }}
+ </el-radio>
+ </el-radio-group>
+ </el-form-item>
+
+ <el-form-item label="閮ㄩ棬鍒嗙被" prop="deptCategory">
+ <el-select
+ v-model="form.deptCategory"
+ placeholder="璇烽�夋嫨閮ㄩ棬鍒嗙被"
+ clearable
+ style="width: 100%"
+ @change="handleDeptCategoryChange"
+ >
+ <el-option
+ v-for="item in DEPT_CATEGORY_OPTIONS"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ </el-form-item>
+
+ <el-form-item label="妗f绫诲瀷" prop="archiveType">
+ <el-select
+ v-model="form.archiveType"
+ placeholder="璇峰厛閫夋嫨閮ㄩ棬鍒嗙被"
+ clearable
+ style="width: 100%"
+ >
+ <el-option
+ v-for="item in currentArchiveTypeOptions"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ </el-form-item>
+
+ <el-form-item label="绉戝/鐥呭尯" prop="deptCodes">
+ <el-select
+ v-model="form.deptCodes"
+ multiple
+ filterable
+ clearable
+ :placeholder="
+ form.deptType === '2' ? '璇烽�夋嫨鐥呭尯' : '璇烽�夋嫨绉戝'
+ "
+ style="width: 100%"
+ >
+ <el-option
+ v-for="item in currentDeptOptions"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ <div class="form-tip">鎸夋墍閫夐儴闂ㄧ被鍨嬭嚜鍔ㄥ垏鎹㈢瀹� / 鐥呭尯閫夐」</div>
+ </el-form-item>
+
+ <el-form-item label="璇婃柇缂栫爜" prop="icdList">
+ <div style="margin-bottom: 8px">
+ <el-button type="warning" size="small" @click="openIcdDialog"
+ >娣诲姞鐤剧梾璇婃柇</el-button
+ >
+ </div>
+ <el-tag
+ v-for="item in form.icdList"
+ :key="item.icdid"
+ type="warning"
+ closable
+ :disable-transitions="false"
+ @close="removeIcd(item)"
+ >
+ {{ item.icdname }}
+ </el-tag>
+ <div class="form-tip">浠庣柧鐥呰瘖鏂〃涓�夋嫨锛屾寜 ICD10 缂栫爜鍖归厤鎮h��</div>
+ </el-form-item>
+
+ <el-form-item label="澶囨敞" prop="remark">
+ <el-input
+ v-model="form.remark"
+ type="textarea"
+ :rows="3"
+ placeholder="璇疯緭鍏ュ娉�"
+ maxlength="500"
+ show-word-limit
+ />
+ </el-form-item>
+ </el-form>
+ <div slot="footer" class="dialog-footer">
+ <el-button @click="cancelForm">鍙� 娑�</el-button>
+ <el-button type="primary" @click="submitForm" :loading="submitLoading"
+ >纭� 瀹�</el-button
+ >
+ </div>
+ </el-dialog>
+
+ <!-- 鐤剧梾璇婃柇琛ㄩ�夋嫨寮规锛堜笌浠诲姟閰嶇疆銆岄�傜敤鐤剧梾閫夋嫨銆嶄竴鑷达級 -->
+ <Optional-Form
+ ref="icdDialog"
+ :dialogVisiblepatient="icdDialogVisible"
+ :overallCase="form.icdList"
+ @addoption="icdDialogVisible = false"
+ @kkoption="icdDialogVisible = true"
+ />
+ </div>
+</template>
+
+<script>
+import {
+ listSpecificArchiveGenerateConfig,
+ saveSpecificArchiveGenerateConfig,
+ batchDeleteSpecificArchiveGenerateConfig,
+} from "@/api/smartor/specificArchiveGenerateConfig";
+import { getillnesslist } from "@/api/AiCentre/index";
+import OptionalForm from "@/components/OptionalForm";
+
+// 閮ㄩ棬绫诲瀷锛�1 绉戝锛�2 鐥呭尯
+const DEPT_TYPE_OPTIONS = [
+ { value: "1", label: "绉戝" },
+ { value: "2", label: "鐥呭尯" },
+];
+
+// 閮ㄩ棬鍒嗙被锛�1 濡囩锛�2 鍎跨
+const DEPT_CATEGORY_OPTIONS = [
+ { value: "1", label: "濡囩" },
+ { value: "2", label: "鍎跨" },
+];
+
+// 妗f绫诲瀷锛堟寜閮ㄩ棬鍒嗙被鍖哄垎锛屽绉戜笌鍎跨鍚勮嚜浠� 1 寮�濮嬬紪鍙凤級
+const ARCHIVE_TYPE_OPTIONS = {
+ "1": [
+ { value: "1", label: "鏃╁瓡鍏崇埍" },
+ { value: "2", label: "鍥寸粷缁忔湡MHI" },
+ ],
+ "2": [
+ { value: "1", label: "钀ュ吇鎬х柧鐥�" },
+ { value: "2", label: "瀛︿範鍥伴毦" },
+ { value: "3", label: "楂樺嵄鍎夸笓妗�" },
+ ],
+};
+
+export default {
+ name: "GenerateConfig",
+ components: { OptionalForm },
+ data() {
+ // 绉戝/鐥呭尯缂栫爜 涓� 璇婃柇缂栫爜 鑷冲皯濉啓涓�椤癸紝鍚﹀垯璇ヨ鍒欐棤娉曞尮閰嶄换浣曟偅鑰�
+ const validateDeptOrIcd = (rule, value, callback) => {
+ const codes = (this.form.deptCodes || []).length;
+ const icd = (this.form.icdList || []).length;
+ if (!codes && !icd) {
+ callback(new Error("绉戝/鐥呭尯鍜岃瘖鏂紪鐮佽嚦灏戝~鍐欎竴椤�"));
+ } else {
+ callback();
+ }
+ };
+
+ return {
+ // 甯搁噺
+ DEPT_TYPE_OPTIONS,
+ DEPT_CATEGORY_OPTIONS,
+
+ // 閬僵灞�
+ loading: false,
+ // 鎻愪氦鎸夐挳 loading
+ submitLoading: false,
+ // 閫変腑鏁扮粍
+ ids: [],
+ // 闈炲涓鐢�
+ multiple: true,
+ // 鏄剧ず鎼滅储鏉′欢
+ showSearch: true,
+ // 鎬绘潯鏁�
+ total: 0,
+ // 琛ㄦ牸鏁版嵁
+ configList: [],
+ // 寮规鏍囬
+ dialogTitle: "",
+ // 寮规鍙鎬�
+ dialogVisible: false,
+ // 鍒涘缓鏃堕棿鑼冨洿
+ dateRange: [],
+ // 璇婃柇缂栫爜閫夋嫨寮规
+ icdDialogVisible: false,
+ // ICD10 缂栫爜 -> 鍚嶇О鏄犲皠锛堢敤浜庡洖鏄句笌鍒楄〃鍚嶇О灞曠ず锛�
+ icdCodeMap: {},
+ // 鏌ヨ鍙傛暟
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ deptType: "",
+ deptCategory: "",
+ archiveType: "",
+ },
+ // 琛ㄥ崟
+ form: {
+ id: "",
+ deptType: "1",
+ deptCategory: "",
+ archiveType: "",
+ deptCodes: [],
+ icdList: [],
+ remark: "",
+ },
+ // 琛ㄥ崟鏍¢獙
+ rules: {
+ deptType: [
+ { required: true, message: "璇烽�夋嫨閮ㄩ棬绫诲瀷", trigger: "change" },
+ ],
+ deptCategory: [
+ { required: true, message: "璇烽�夋嫨閮ㄩ棬鍒嗙被", trigger: "change" },
+ ],
+ archiveType: [
+ { required: true, message: "璇烽�夋嫨妗f绫诲瀷", trigger: "change" },
+ ],
+ deptCodes: [{ validator: validateDeptOrIcd, trigger: "change" }],
+ icdList: [{ validator: validateDeptOrIcd, trigger: "change" }],
+ },
+ };
+ },
+ computed: {
+ // 绉戝閫夐」锛堜粠 store getters 鑾峰彇锛�
+ departmentOptions() {
+ return (this.$store.getters.belongDepts || []).map((dept) => ({
+ label: dept.deptName,
+ value: dept.deptCode,
+ }));
+ },
+ // 鐥呭尯閫夐」锛堜粠 store getters 鑾峰彇锛�
+ wardOptions() {
+ console.log(this.$store.getters.belongWards);
+
+ return (this.$store.getters.belongWards || []).map((ward) => ({
+ label: ward.districtName,
+ value: ward.districtCode,
+ }));
+ },
+ // 琛ㄥ崟閲屾寜閮ㄩ棬绫诲瀷鍒囨崲鐨勭瀹�/鐥呭尯閫夐」
+ currentDeptOptions() {
+ console.log(this.wardOptions);
+ console.log(this.departmentOptions);
+
+ return this.form.deptType == "2" ? this.wardOptions : this.departmentOptions;
+ },
+ // 琛ㄥ崟閲屾寜閮ㄩ棬鍒嗙被鍒囨崲鐨勬。妗堢被鍨嬮�夐」
+ currentArchiveTypeOptions() {
+ return ARCHIVE_TYPE_OPTIONS[this.form.deptCategory] || [];
+ },
+ // 鏌ヨ鏉′欢閲岀殑妗f绫诲瀷閫夐」锛堜笉鍖哄垎鍒嗙被锛屽叏閲忓悎骞跺幓閲嶏級
+ queryArchiveTypeOptions() {
+ const all = Object.keys(ARCHIVE_TYPE_OPTIONS).reduce((acc, k) => {
+ return acc.concat(ARCHIVE_TYPE_OPTIONS[k]);
+ }, []);
+ const seen = {};
+ return all.filter((item) => {
+ if (seen[item.value]) return false;
+ seen[item.value] = true;
+ return true;
+ });
+ },
+ },
+ created() {
+ this.getList();
+ this.loadIcdList();
+ },
+ methods: {
+ /** 鏌ヨ鍒楄〃 */
+ getList() {
+ this.loading = true;
+ const query = { ...this.queryParams };
+ if (this.dateRange && this.dateRange.length === 2) {
+ query.params = {
+ beginTime: this.dateRange[0],
+ endTime: this.dateRange[1],
+ };
+ }
+ listSpecificArchiveGenerateConfig(query)
+ .then((response) => {
+ this.configList = response.rows;
+ this.total = response.total;
+ })
+ .finally(() => {
+ this.loading = false;
+ });
+ },
+
+ /** 鎼滅储鎸夐挳鎿嶄綔 */
+ handleQuery() {
+ this.queryParams.pageNum = 1;
+ this.getList();
+ },
+
+ /** 閲嶇疆鎸夐挳鎿嶄綔 */
+ resetQuery() {
+ this.resetForm("queryForm");
+ this.dateRange = [];
+ this.handleQuery();
+ },
+
+ // 澶氶�夋閫変腑鏁版嵁
+ handleSelectionChange(selection) {
+ this.ids = selection.map((item) => item.id);
+ this.multiple = !selection.length;
+ },
+
+ /** 鏂板鎸夐挳鎿嶄綔 */
+ handleAdd() {
+ this.resetFormData();
+ this.dialogTitle = "鏂板涓撶妗f鐢熸垚閰嶇疆";
+ this.dialogVisible = true;
+ },
+
+ /** 淇敼鎸夐挳鎿嶄綔 */
+ handleUpdate(row) {
+ this.resetFormData();
+ this.dialogTitle = "淇敼涓撶妗f鐢熸垚閰嶇疆";
+ this.dialogVisible = true;
+ this.form = {
+ id: row.id,
+ deptType: row.deptType || "1",
+ deptCategory: row.deptCategory || "",
+ archiveType: row.archiveType || "",
+ deptCodes: this.parseJsonArray(row.deptCodes),
+ icdList: this.resolveIcdCodes(row.icd10Codes),
+ remark: row.remark || "",
+ };
+ },
+
+ /** 閮ㄩ棬绫诲瀷鍙樺寲锛氬垏鎹㈢瀹�/鐥呭尯閫夐」锛屾竻绌哄凡閫夌紪鐮� */
+ handleDeptTypeChange() {
+ this.form.deptCodes = [];
+ },
+
+ /** 閮ㄩ棬鍒嗙被鍙樺寲锛氬垏鎹㈡。妗堢被鍨嬮�夐」锛屾竻绌哄凡閫夋。妗堢被鍨� */
+ handleDeptCategoryChange() {
+ this.form.archiveType = "";
+ },
+
+ /** 鍔犺浇 ICD10 瀛楀吀锛岀敤浜庤瘖鏂紪鐮佸洖鏄句笌鍒楄〃鍚嶇О灞曠ず */
+ loadIcdList() {
+ getillnesslist({ pageNum: 1, pageSize: 1000 }).then((res) => {
+ const map = {};
+ (res.rows || []).forEach((item) => {
+ map[item.icdcode] = {
+ icdid: item.icdid,
+ icdname: item.icdname,
+ icdcode: item.icdcode,
+ };
+ });
+ this.icdCodeMap = map;
+ });
+ },
+
+ /** 鎵撳紑鐤剧梾璇婃柇琛ㄩ�夋嫨寮规 */
+ openIcdDialog() {
+ this.$refs.icdDialog && this.$refs.icdDialog.handleAddpatient();
+ },
+
+ /** 绉婚櫎宸查�夎瘖鏂� */
+ removeIcd(item) {
+ this.form.icdList = this.form.icdList.filter(
+ (d) => d.icdid !== item.icdid
+ );
+ },
+
+ /** 鍚庣 JSON 缂栫爜鏁扮粍 -> 璇婃柇瀵硅薄鏁扮粍锛堢敤浜庡洖鏄撅級 */
+ resolveIcdCodes(val) {
+ const codes = this.parseJsonArray(val);
+ return codes.map((code) =>
+ this.icdCodeMap[code]
+ ? { ...this.icdCodeMap[code] }
+ : { icdid: code, icdname: code, icdcode: code }
+ );
+ },
+
+ /** 鎻愪氦琛ㄥ崟 */
+ submitForm() {
+ this.$refs.formRef.validate((valid) => {
+ if (!valid) return;
+ this.submitLoading = true;
+ const data = {
+ id: this.form.id || undefined,
+ deptType: this.form.deptType,
+ deptCategory: this.form.deptCategory,
+ archiveType: this.form.archiveType,
+ remark: this.form.remark || "",
+ };
+ // 鍚庣瑕佹眰 deptCodes / icd10Codes 浼犺浆涔夊悗鐨� JSON 瀛楃涓诧紱
+ // 娉ㄦ剰锛氭洿鏂版椂浼� null 鐨勫瓧娈典笉鍙備笌鏇存柊锛堜繚鎸佸師鍊硷級锛�
+ // 鍥犳娓呯┖鏃堕』浼犵┖ JSON 鏁扮粍 "[]" 鎵嶈兘鐪熸娓呮帀銆�
+ data.deptCodes =
+ this.form.deptCodes && this.form.deptCodes.length
+ ? JSON.stringify(this.form.deptCodes)
+ : "[]";
+ data.icd10Codes =
+ this.form.icdList && this.form.icdList.length
+ ? JSON.stringify(this.form.icdList.map((d) => d.icdcode))
+ : "[]";
+
+ saveSpecificArchiveGenerateConfig(data)
+ .then((response) => {
+ if (response.code === 200) {
+ this.$modal.msgSuccess("鎿嶄綔鎴愬姛");
+ this.dialogVisible = false;
+ this.getList();
+ } else {
+ this.$modal.msgError(response.msg || "鎿嶄綔澶辫触");
+ }
+ })
+ .finally(() => {
+ this.submitLoading = false;
+ });
+ });
+ },
+
+ /** 鍙栨秷琛ㄥ崟 */
+ cancelForm() {
+ this.dialogVisible = false;
+ this.resetFormData();
+ this.$nextTick(() => {
+ if (this.$refs.formRef) {
+ this.$refs.formRef.clearValidate();
+ }
+ });
+ },
+
+ /** 閲嶇疆琛ㄥ崟鏁版嵁 */
+ resetFormData() {
+ this.form = {
+ id: "",
+ deptType: "1",
+ deptCategory: "",
+ archiveType: "",
+ deptCodes: [],
+ icdList: [],
+ remark: "",
+ };
+ },
+
+ /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+ handleDelete(row) {
+ const ids = row && row.id != null ? [row.id] : this.ids;
+ if (!ids.length) return;
+ this.$modal
+ .confirm("鏄惁纭鍒犻櫎閫変腑鐨勪笓绉戞。妗堢敓鎴愰厤缃暟鎹」锛�")
+ .then(() => {
+ return batchDeleteSpecificArchiveGenerateConfig(ids);
+ })
+ .then((response) => {
+ if (response.code === 200) {
+ this.getList();
+ this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+ } else {
+ this.$modal.msgError(response.msg || "鍒犻櫎澶辫触");
+ }
+ })
+ .catch(() => {});
+ },
+
+ /** 閮ㄩ棬绫诲瀷 label */
+ deptTypeLabel(val) {
+ const item = DEPT_TYPE_OPTIONS.find((o) => o.value === String(val));
+ return item ? item.label : val || "鈥�";
+ },
+
+ /** 閮ㄩ棬鍒嗙被 label */
+ deptCategoryLabel(val) {
+ const item = DEPT_CATEGORY_OPTIONS.find((o) => o.value === String(val));
+ return item ? item.label : val || "鈥�";
+ },
+
+ /** 妗f绫诲瀷 label锛堜緷璧栭儴闂ㄥ垎绫伙級 */
+ archiveTypeLabel(row) {
+ const opts = ARCHIVE_TYPE_OPTIONS[String(row.deptCategory)] || [];
+ const item = opts.find((o) => o.value === String(row.archiveType));
+ return item ? item.label : row.archiveType || "鈥�";
+ },
+
+ /** 绉戝/鐥呭尯缂栫爜 -> 鍚嶇О */
+ formatDeptCodes(row) {
+ const codes = this.parseJsonArray(row.deptCodes);
+ if (!codes.length) return "";
+ const source =
+ String(row.deptType) === "2" ? this.wardOptions : this.departmentOptions;
+ const map = {};
+ source.forEach((o) => (map[o.value] = o.label));
+ return codes.map((c) => map[c] || c).join("銆�");
+ },
+
+ /** 璇婃柇缂栫爜 -> 鍚嶇О鎷兼帴锛堝瓧鍏哥己澶辨椂鍥為��鏄剧ず缂栫爜锛� */
+ formatIcd10Codes(row) {
+ const codes = this.parseJsonArray(row.icd10Codes);
+ return codes
+ .map((c) => {
+ const item = this.icdCodeMap[c];
+ return item ? item.icdname : c;
+ })
+ .join("銆�");
+ },
+
+ /** 瑙f瀽鍚庣杩斿洖鐨� JSON 瀛楃涓诧紙deptCodes / icd10Codes锛� */
+ parseJsonArray(val) {
+ if (!val) return [];
+ if (Array.isArray(val)) return val;
+ try {
+ const arr = JSON.parse(val);
+ return Array.isArray(arr) ? arr : [];
+ } catch (e) {
+ return [];
+ }
+ },
+ },
+};
+</script>
+
+<style lang="scss" scoped>
+.generateConfig-management {
+ padding: 20px;
+}
+
+.main-content {
+ padding: 30px;
+ background: #fff;
+ 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);
+}
+
+.mb8 {
+ margin-bottom: 8px;
+}
+
+.form-tip {
+ width: 100%;
+ font-size: 12px;
+ color: #909399;
+ line-height: 1.5;
+ margin-top: 4px;
+}
+
+.dialog-footer {
+ text-align: right;
+}
+
+// 鎸夐挳鏂囧瓧棰滆壊
+.button-textxg {
+ color: rgb(35, 81, 233);
+}
+
+.button-textsc {
+ color: rgb(235, 23, 23);
+}
+</style>
diff --git a/src/views/patient/follow/index.vue b/src/views/patient/follow/index.vue
index 1970d37..ffe4cdf 100644
--- a/src/views/patient/follow/index.vue
+++ b/src/views/patient/follow/index.vue
@@ -29,6 +29,18 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
+ <el-form-item label="寤烘。鏃ユ湡">
+ <el-date-picker
+ v-model="dateRange"
+ style="width: 240px"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ type="datetimerange"
+ range-separator="-"
+ start-placeholder="寮�濮嬫椂闂�"
+ end-placeholder="缁撴潫鏃堕棿"
+ :default-time="['00:00:00', '23:59:59']"
+ ></el-date-picker>
+ </el-form-item>
<!-- <el-form-item label="鎮h�呰寖鍥�" prop="tagId">
<el-select
@@ -362,6 +374,8 @@
status: undefined,
tagIds: undefined,
telcode: undefined,
+ createTime: undefined,
+ endTime: undefined,
},
// 琛ㄥ崟鏍¢獙
rules: {},
@@ -446,10 +460,13 @@
/** 鎼滅储鎸夐挳鎿嶄綔 */
handleQuery() {
this.queryParams.pageNum = 1;
+ this.queryParams.createTime = this.dateRange[0];
+ this.queryParams.endTime = this.dateRange[1];
this.getList();
},
/** 閲嶇疆鎸夐挳鎿嶄綔 */
resetQuery() {
+ this.dateRange = [];
(this.queryParams = {
pageNum: 1,
pageSize: 10,
diff --git a/src/views/patient/patient/behospitalized.vue b/src/views/patient/patient/behospitalized.vue
index 555eb68..f1f22c6 100644
--- a/src/views/patient/patient/behospitalized.vue
+++ b/src/views/patient/patient/behospitalized.vue
@@ -819,13 +819,34 @@
/** 鏌ヨ鎮h�呭垪琛� */
getList() {
this.loading = true;
- listpatient(this.queryParams).then((response) => {
+ listpatient(this.buildListQueryParams()).then((response) => {
console.log(response);
this.userList = response.rows;
this.total = response.total;
this.loading = false;
});
},
+ /**
+ * 缁勮 listpatient 鍏ュ弬锛�
+ * cry = 0 涓旂櫥褰曟満鏋勪负銆岀渷绔嬪悓寰风繝鑻戦櫌鍖� / 鍗楀崕澶у闄勫睘绗竴鍖婚櫌銆嶆椂锛�
+ * 绉戝/鐥呭尯瀛楁 leaveldeptcodes銆乴eavehospitaldistrictcodes 闇�鎹㈡垚
+ * deptcodeList銆乭ospitaldistrictcodeList銆�
+ */
+ buildListQueryParams() {
+ const params = { ...this.queryParams };
+ const orgname = localStorage.getItem("orgname");
+ const needRename =
+ params.cry === 0 &&
+ (orgname === "鐪佺珛鍚屽痉缈犺嫅闄㈠尯" ||
+ orgname === "鍗楀崕澶у闄勫睘绗竴鍖婚櫌");
+ if (needRename) {
+ params.deptcodeList = params.leaveldeptcodes;
+ params.hospitaldistrictcodeList = params.leavehospitaldistrictcodes;
+ delete params.leaveldeptcodes;
+ delete params.leavehospitaldistrictcodes;
+ }
+ return params;
+ },
/** 琛ㄦ牸琛屾牱寮� */
tableRowClassName({ row, rowIndex }) {
if (rowIndex % 2 === 0) {
diff --git a/src/views/patient/propaganda/QuestionnaireTask.vue b/src/views/patient/propaganda/QuestionnaireTask.vue
index ec22748..4235af7 100644
--- a/src/views/patient/propaganda/QuestionnaireTask.vue
+++ b/src/views/patient/propaganda/QuestionnaireTask.vue
@@ -347,7 +347,7 @@
<el-input
style="width: 300px"
:disabled="true"
- v-model="nextTaskName"
+ v-model="nexttaskname"
placeholder="璇风偣鍑诲彸渚ч�夋嫨浠诲姟"
/>
<el-button
@@ -956,6 +956,30 @@
</el-table>
</el-row>
</div>
+ </div>
+ </div>
+ <div class="examine-jic">
+ <div class="headline">
+ <div>浜屾闅忚浠诲姟閰嶇疆</div>
+ </div>
+ <div class="jic-value">
+ <el-form label-width="125px">
+ <el-form-item label="浜屾闅忚浠诲姟">
+ <el-input
+ style="width: 300px"
+ :disabled="true"
+ v-model="nexttaskname"
+ placeholder="璇风偣鍑诲彸渚ч�夋嫨浠诲姟"
+ />
+ <el-button
+ style="margin-left: 10px"
+ type="primary"
+ icon="el-icon-edit"
+ circle
+ @click="openNextTaskDialog"
+ ></el-button>
+ </el-form-item>
+ </el-form>
</div>
</div>
</div>
@@ -1661,6 +1685,7 @@
patTaskRelevances: [],
nexttaskflag: "0",
nexttaskid: null,
+ nexttaskname: "",
sendType: 1,
longTask: 0,
templatename: "",
@@ -1738,7 +1763,7 @@
nextTaskList: [],
nextTaskTotal: 0,
nextTaskQuery: { pageNum: 1, pageSize: 10, taskName: "" },
- nextTaskName: "",
+ nexttaskname: "",
// 妯℃澘鎼滅储
templateOptions: [],
templateLoading: false,
@@ -1906,6 +1931,7 @@
patTaskRelevances: [],
nexttaskflag: "0",
nexttaskid: null,
+ nexttaskname: "",
sendType: 1,
sendDay: 5,
templatename: "",
@@ -1937,10 +1963,11 @@
this.form = res.data;
// 鍥炴樉鍐嶆闅忚鍏宠仈浠诲姟
if (this.form.nexttaskflag == null) this.form.nexttaskflag = "0";
- this.nextTaskName = "";
+ this.nexttaskname = "";
if (this.form.nexttaskid) {
getIvrtask(this.form.nexttaskid).then((r) => {
- this.nextTaskName = (r.data && r.data.taskName) || "";
+ this.nexttaskname = (r.data && r.data.taskName) || "";
+ this.form.nexttaskname = (r.data && r.data.taskName) || "";
});
}
// 濡傛灉杩斿洖浜� serviceTaskScheduleVO锛岃В鏋愭槑缁嗕腑鐨� content
@@ -2047,7 +2074,8 @@
this.time4 = "";
this.form.nexttaskflag = "0";
this.form.nexttaskid = null;
- this.nextTaskName = "";
+ this.form.nexttaskname = "";
+ this.nexttaskname = "";
// 閲嶇疆浠诲姟缁�
this.form.serviceTaskScheduleVO = {
scheduleStyle: 0,
@@ -2431,7 +2459,8 @@
},
selectNextTask(row) {
this.form.nexttaskid = row.taskid;
- this.nextTaskName = row.taskName;
+ this.form.nexttaskname = row.taskName;
+ this.nexttaskname = row.taskName;
this.nextTaskDialogVisible = false;
},
diff --git a/src/views/patient/propaganda/particty.vue b/src/views/patient/propaganda/particty.vue
index d8d60eb..16482f9 100644
--- a/src/views/patient/propaganda/particty.vue
+++ b/src/views/patient/propaganda/particty.vue
@@ -345,7 +345,7 @@
<el-input
style="width: 300px"
:disabled="true"
- v-model="nextTaskName"
+ v-model="nexttaskname"
placeholder="璇风偣鍑诲彸渚ч�夋嫨浠诲姟"
/>
<el-button
@@ -955,6 +955,30 @@
</el-table>
</el-row>
</div>
+ </div>
+ </div>
+ <div class="examine-jic">
+ <div class="headline">
+ <div>浜屾闅忚浠诲姟閰嶇疆</div>
+ </div>
+ <div class="jic-value">
+ <el-form label-width="125px">
+ <el-form-item label="浜屾闅忚浠诲姟">
+ <el-input
+ style="width: 300px"
+ :disabled="true"
+ v-model="nexttaskname"
+ placeholder="璇风偣鍑诲彸渚ч�夋嫨浠诲姟"
+ />
+ <el-button
+ style="margin-left: 10px"
+ type="primary"
+ icon="el-icon-edit"
+ circle
+ @click="openNextTaskDialog"
+ ></el-button>
+ </el-form-item>
+ </el-form>
</div>
</div>
</div>
@@ -1672,6 +1696,7 @@
patTaskRelevances: [],
nexttaskflag: "0",
nexttaskid: null,
+ nexttaskname: "",
sendType: 3,
longTask: 0,
templatename: "",
@@ -1752,7 +1777,7 @@
nextTaskList: [],
nextTaskTotal: 0,
nextTaskQuery: { pageNum: 1, pageSize: 10, taskName: "" },
- nextTaskName: "",
+ nexttaskname: "",
// 妯℃澘鎼滅储
templateOptions: [],
templateLoading: false,
@@ -1930,6 +1955,7 @@
patTaskRelevances: [],
nexttaskflag: "0",
nexttaskid: null,
+ nexttaskname: "",
sendType: 1,
sendDay: 5,
templatename: "",
@@ -1961,10 +1987,11 @@
this.form = res.data;
// 鍥炴樉鍐嶆闅忚鍏宠仈浠诲姟
if (this.form.nexttaskflag == null) this.form.nexttaskflag = "0";
- this.nextTaskName = "";
+ this.nexttaskname = "";
if (this.form.nexttaskid) {
getIvrtask(this.form.nexttaskid).then((r) => {
- this.nextTaskName = (r.data && r.data.taskName) || "";
+ this.nexttaskname = (r.data && r.data.taskName) || "";
+ this.form.nexttaskname = (r.data && r.data.taskName) || "";
});
}
// 濡傛灉杩斿洖浜� serviceTaskScheduleVO锛屽垯瑙f瀽鏄庣粏涓殑 content
@@ -2073,7 +2100,8 @@
this.time4 = "";
this.form.nexttaskflag = "0";
this.form.nexttaskid = null;
- this.nextTaskName = "";
+ this.form.nexttaskname = "";
+ this.nexttaskname = "";
// 閲嶇疆浠诲姟缁�
this.form.serviceTaskScheduleVO = {
scheduleStyle: 0,
@@ -2454,7 +2482,8 @@
},
selectNextTask(row) {
this.form.nexttaskid = row.taskid;
- this.nextTaskName = row.taskName;
+ this.form.nexttaskname = row.taskName;
+ this.nexttaskname = row.taskName;
this.nextTaskDialogVisible = false;
},
diff --git a/src/views/sfstatistics/percentage/components/FirstFollowUp.vue b/src/views/sfstatistics/percentage/components/FirstFollowUp.vue
index 70425f2..0b65267 100644
--- a/src/views/sfstatistics/percentage/components/FirstFollowUp.vue
+++ b/src/views/sfstatistics/percentage/components/FirstFollowUp.vue
@@ -597,8 +597,8 @@
<el-table-column
label="鍙戦�佸畬鎴�"
align="center"
- key="manualSuccess"
- prop="manualSuccess"
+ key="manual"
+ prop="manual"
:render-header="Tooltipfswc"
>
<template slot-scope="scope">
@@ -608,20 +608,20 @@
@click="
handleViewDetails(
scope.row,
- 'manualSuccessInfo',
+ 'manualInfo',
'鍙戦�佸畬鎴愪汉宸ラ殢璁垮垪琛�'
)
"
>
- <span class="button-zx">{{ scope.row.manualSuccess }}</span>
+ <span class="button-zx">{{ scope.row.manual }}</span>
</el-button>
</template>
</el-table-column>
<el-table-column
label="鏈�缁堝畬鎴�"
align="center"
- key="manualAgainSuccess"
- prop="manualAgainSuccess"
+ key="manualSuccess"
+ prop="manualSuccess"
:render-header="Tooltipzzwc"
>
<template slot-scope="scope">
@@ -631,13 +631,13 @@
@click="
handleViewDetails(
scope.row,
- 'manualAgainSuccessInfo',
+ 'manualSuccessInfo',
'鏈�缁堝畬鎴愪汉宸ラ殢璁垮垪琛�'
)
"
>
<span class="button-zx">{{
- scope.row.manualAgainSuccess
+ scope.row.manualSuccess
}}</span>
</el-button>
</template>
@@ -651,8 +651,8 @@
<el-table-column
label="鍙戦�佸畬鎴�"
align="center"
- key="voiceSuccess"
- prop="voiceSuccess"
+ key="voice"
+ prop="voice"
:render-header="Tooltipfswc"
>
<template slot-scope="scope">
@@ -662,20 +662,20 @@
@click="
handleViewDetails(
scope.row,
- 'voiceSuccessInfo',
+ 'voiceInfo',
'鍙戦�佸畬鎴愯闊抽殢璁垮垪琛�'
)
"
>
- <span class="button-zx">{{ scope.row.voiceSuccess }}</span>
+ <span class="button-zx">{{ scope.row.voice }}</span>
</el-button>
</template>
</el-table-column>
<el-table-column
label="鏈�缁堝畬鎴�"
align="center"
- key="voiceAgainSuccess"
- prop="voiceAgainSuccess"
+ key="voiceSuccess"
+ prop="voiceSuccess"
:render-header="Tooltipzzwc"
>
<template slot-scope="scope">
@@ -685,13 +685,13 @@
@click="
handleViewDetails(
scope.row,
- 'voiceAgainSuccessInfo',
+ 'voiceSuccessInfo',
'鏈�缁堝畬鎴愯闊抽殢璁垮垪琛�'
)
"
>
<span class="button-zx">{{
- scope.row.voiceAgainSuccess
+ scope.row.voiceSuccess
}}</span>
</el-button>
</template>
@@ -705,8 +705,8 @@
<el-table-column
label="鍙戦�佸畬鎴�"
align="center"
- key="smsSuccess"
- prop="smsSuccess"
+ key="sms"
+ prop="sms"
:render-header="Tooltipfswc"
>
<template slot-scope="scope">
@@ -716,20 +716,20 @@
@click="
handleViewDetails(
scope.row,
- 'smsSuccessInfo',
+ 'smsInfo',
'鍙戦�佸畬鎴愮煭淇¢殢璁垮垪琛�'
)
"
>
- <span class="button-zx">{{ scope.row.smsSuccess }}</span>
+ <span class="button-zx">{{ scope.row.sms }}</span>
</el-button>
</template>
</el-table-column>
<el-table-column
label="鏈�缁堝畬鎴�"
align="center"
- key="smsAgainSuccess"
- prop="smsAgainSuccess"
+ key="smsSuccess"
+ prop="smsSuccess"
:render-header="Tooltipzzwc"
>
<template slot-scope="scope">
@@ -739,13 +739,13 @@
@click="
handleViewDetails(
scope.row,
- 'smsAgainSuccessInfo',
+ 'smsSuccessInfo',
'鏈�缁堝畬鎴愮煭淇¢殢璁垮垪琛�'
)
"
>
<span class="button-zx">{{
- scope.row.smsAgainSuccess
+ scope.row.smsSuccess
}}</span>
</el-button>
</template>
@@ -759,8 +759,8 @@
<el-table-column
label="鍙戦�佸畬鎴�"
align="center"
- key="weChatSuccess"
- prop="weChatSuccess"
+ key="weChat"
+ prop="weChat"
:render-header="Tooltipfswc"
>
<template slot-scope="scope">
@@ -770,20 +770,20 @@
@click="
handleViewDetails(
scope.row,
- 'wechatSuccessInfo',
+ 'weChatInfo',
'鍙戦�佸畬鎴愬井淇¢殢璁垮垪琛�'
)
"
>
- <span class="button-zx">{{ scope.row.weChatSuccess }}</span>
+ <span class="button-zx">{{ scope.row.weChat }}</span>
</el-button>
</template>
</el-table-column>
<el-table-column
label="鏈�缁堝畬鎴�"
align="center"
- key="weChatAgainSuccess"
- prop="weChatAgainSuccess"
+ key="weChatSuccess"
+ prop="weChatSuccess"
:render-header="Tooltipzzwc"
>
<template slot-scope="scope">
@@ -793,13 +793,13 @@
@click="
handleViewDetails(
scope.row,
- 'wechatAgainSuccessInfo',
+ 'weChatSuccessInfo',
'鏈�缁堝畬鎴愬井淇¢殢璁垮垪琛�'
)
"
>
<span class="button-zx">{{
- scope.row.weChatAgainSuccess
+ scope.row.weChatSuccess
}}</span>
</el-button>
</template>
@@ -1835,91 +1835,156 @@
right: { style: "thin", color: { argb: "FFD0D0D0" } },
},
};
- const titleText = `${serviceTypeName}缁熻琛╛${sheetNameSuffix}`;
- // 娣诲姞鏍囬琛�
- worksheet.mergeCells(1, 1, 1, 16);
- const titleCell = worksheet.getCell(1, 1);
- titleCell.value = titleText; // 浣跨敤鍔ㄦ�佹爣棰�
- titleCell.style = titleStyle;
- worksheet.getRow(1).height = 35;
+ // 鏄惁涓虹洰鏍囧尰闄紙浜哄伐/璇煶/鐭俊/寰俊 鎸� 鍙戦�佸畬鎴�/鏈�缁堝畬鎴� 鍒嗙骇灞曠ず锛�
+ const graded = this.isTargetHospital;
- // 琛ㄥご
- const secondRowHeaders = [
+ const baseHeaders = [
"",
"鍑洪櫌鐥呭尯",
"绉戝",
"鍑洪櫌浜烘",
"鏃犻渶闅忚浜烘",
"搴旈殢璁夸汉娆�",
+ ];
+ const coreHeaders = [
"闇�闅忚",
"寰呴殢璁�",
"闅忚鎴愬姛",
"闅忚澶辫触",
- "鎴愬姛鐜�", // 鏂板
- "闅忚鐜�", // 鍘熶綅缃悗绉�
- "鍙婃椂鐜�", // 鍙婃椂鐜囧悗绉�
- "浜哄伐",
- "璇煶", // 淇锛氬簲璇ユ槸璇煶
- "鐭俊", // 鐭俊
- "寰俊", // 寰俊
+ "鎴愬姛鐜�",
+ "闅忚鐜�",
+ "鍙婃椂鐜�",
];
+ const methodGroups = this.getMethodColumns();
- secondRowHeaders.forEach((header, index) => {
- const cell = worksheet.getCell(3, index + 1);
- cell.value = header;
- cell.style = headerStyle;
- });
+ const baseCount = baseHeaders.length; // 6
+ const coreCount = coreHeaders.length; // 7
+ const methodLeafCount = methodGroups.reduce(
+ (sum, g) => sum + g.fields.length,
+ 0
+ ); // 8 鎴� 4
+ const totalCols = baseCount + coreCount + methodLeafCount; // 21 鎴� 17
+ const coreStartCol = baseCount + 1; // 7
+ const methodStartCol = baseCount + coreCount + 1; // 14
- // 鍚堝苟鍗曞厓鏍�
- for (let i = 1; i <= 6; i++) {
- worksheet.mergeCells(2, i, 3, i);
- const cell = worksheet.getCell(2, i);
- cell.style = headerStyle;
+ const titleText = `${serviceTypeName}缁熻琛╛${sheetNameSuffix}`;
+ // 娣诲姞鏍囬琛�
+ worksheet.mergeCells(1, 1, 1, totalCols);
+ const titleCell = worksheet.getCell(1, 1);
+ titleCell.value = titleText;
+ titleCell.style = titleStyle;
+ worksheet.getRow(1).height = 35;
+
+ if (graded) {
+ // 琛ㄥご鍗� 3 琛岋紙绗�2/3/4琛岋級锛屾暟鎹粠绗�5琛屽紑濮�
+ const headerEndRow = 4;
+
+ // 绗�2琛岋細鍩虹鍒楃旱鍚戝悎骞� + 闅忚鍒嗙粍妯悜鍚堝苟
+ for (let i = 1; i <= baseCount; i++) {
+ worksheet.mergeCells(2, i, headerEndRow, i);
+ const cell = worksheet.getCell(2, i);
+ cell.value = baseHeaders[i - 1];
+ cell.style = headerStyle;
+ }
+ worksheet.mergeCells(2, coreStartCol, 2, totalCols);
+ worksheet.getCell(2, coreStartCol).value = serviceTypeName;
+ worksheet.getCell(2, coreStartCol).style = headerStyle;
+
+ // 绗�3琛岋細闅忚鏍稿績鍒楃旱鍚戝悎骞� + 闅忚鏂瑰紡鍒嗙粍妯悜鍚堝苟
+ for (let k = 0; k < coreCount; k++) {
+ const col = coreStartCol + k;
+ worksheet.mergeCells(3, col, headerEndRow, col);
+ const cell = worksheet.getCell(3, col);
+ cell.value = coreHeaders[k];
+ cell.style = headerStyle;
+ }
+ let mc = methodStartCol;
+ methodGroups.forEach((g) => {
+ if (g.fields.length > 1) {
+ worksheet.mergeCells(3, mc, 3, mc + g.fields.length - 1);
+ }
+ const cell = worksheet.getCell(3, mc);
+ cell.value = g.label;
+ cell.style = headerStyle;
+ mc += g.fields.length;
+ });
+
+ // 绗�4琛岋細闅忚鏂瑰紡瀛愬垪锛堝彂閫佸畬鎴�/鏈�缁堝畬鎴愶級
+ mc = methodStartCol;
+ methodGroups.forEach((g) => {
+ g.fields.forEach((field, idx) => {
+ const cell = worksheet.getCell(4, mc + idx);
+ cell.value = g.sub[idx];
+ cell.style = headerStyle;
+ });
+ mc += g.fields.length;
+ });
+
+ worksheet.getRow(2).height = 28;
+ worksheet.getRow(3).height = 24;
+ worksheet.getRow(4).height = 24;
+ } else {
+ // 琛ㄥご鍗� 2 琛岋紙绗�2/3琛岋級锛屾暟鎹粠绗�4琛屽紑濮�
+ const headerEndRow = 3;
+
+ for (let i = 1; i <= baseCount; i++) {
+ worksheet.mergeCells(2, i, headerEndRow, i);
+ const cell = worksheet.getCell(2, i);
+ cell.value = baseHeaders[i - 1];
+ cell.style = headerStyle;
+ }
+ worksheet.mergeCells(2, coreStartCol, 2, totalCols);
+ worksheet.getCell(2, coreStartCol).value = serviceTypeName;
+ worksheet.getCell(2, coreStartCol).style = headerStyle;
+
+ // 绗�3琛岋細闅忚鏍稿績鍒� + 闅忚鏂瑰紡鍒�
+ for (let k = 0; k < coreCount; k++) {
+ const cell = worksheet.getCell(3, coreStartCol + k);
+ cell.value = coreHeaders[k];
+ cell.style = headerStyle;
+ }
+ let mc = methodStartCol;
+ methodGroups.forEach((g) => {
+ const cell = worksheet.getCell(3, mc);
+ cell.value = g.label;
+ cell.style = headerStyle;
+ mc += 1;
+ });
+
+ worksheet.getRow(2).height = 28;
+ worksheet.getRow(3).height = 25;
}
- worksheet.getCell(2, 1).value = "";
- worksheet.getCell(2, 2).value = "鍑洪櫌鐥呭尯";
- worksheet.getCell(2, 3).value = "绉戝";
- worksheet.getCell(2, 4).value = "鍑洪櫌浜烘";
- worksheet.getCell(2, 5).value = "鏃犻渶闅忚浜烘";
- worksheet.getCell(2, 6).value = "搴旈殢璁夸汉娆�";
-
- worksheet.mergeCells(2, 7, 2, 16); // 浠�7鍚堝苟鍒�16锛堝師鏉ユ槸7-15锛�
- worksheet.getCell(2, 7).value = serviceTypeName; // 鎴栭�傚綋鎴彇
- worksheet.getCell(2, 7).style = headerStyle;
-
- worksheet.getRow(2).height = 28;
- worksheet.getRow(3).height = 25;
-
// 鏁版嵁琛�
+ const dataStartRow = graded ? 5 : 4;
this.tableData.forEach((item, rowIndex) => {
- const dataRow = worksheet.addRow(
- [
- "",
- item.leavehospitaldistrictname || "",
- item.deptname || "",
- item.dischargeCount || 0,
- item.nonFollowUp || 0,
- item.followUpNeeded || 0,
- item.needFollowUp || 0,
- item.pendingFollowUp || 0,
- item.followUpSuccess || 0,
- item.followUpFail || 0,
- // 鎴愬姛鐜� - 闇�瑕佸姩鎬佽绠�
- this.calculateSuccessRate(
- item.followUpSuccess,
- item.needFollowUp,
- item.pendingFollowUp
- ),
- item.followUpRate || "0%", // 闅忚鐜�
- item.rate ? (Number(item.rate) * 100).toFixed(2) + "%" : "0%", // 鍙婃椂鐜�
- item.manual || 0,
- item.voice || 0, // 璇煶
- item.sms || 0, // 鐭俊
- item.weChat || 0, // 寰俊
- ],
- rowIndex + 4
- );
+ const rowValues = [
+ "",
+ item.leavehospitaldistrictname || "",
+ item.deptname || "",
+ item.dischargeCount || 0,
+ item.nonFollowUp || 0,
+ item.followUpNeeded || 0,
+ item.needFollowUp || 0,
+ item.pendingFollowUp || 0,
+ item.followUpSuccess || 0,
+ item.followUpFail || 0,
+ // 鎴愬姛鐜� - 闇�瑕佸姩鎬佽绠�
+ this.calculateSuccessRate(
+ item.followUpSuccess,
+ item.needFollowUp,
+ item.pendingFollowUp
+ ),
+ item.followUpRate || "0%", // 闅忚鐜�
+ item.rate ? (Number(item.rate) * 100).toFixed(2) + "%" : "0%", // 鍙婃椂鐜�
+ ];
+ methodGroups.forEach((g) => {
+ g.fields.forEach((field) => {
+ rowValues.push(item[field] || 0);
+ });
+ });
+
+ const dataRow = worksheet.addRow(rowValues, rowIndex + dataStartRow);
dataRow.eachCell((cell) => {
cell.style = cellStyle;
});
@@ -1938,24 +2003,27 @@
summaryRow.height = 28;
// 鍒楀
- worksheet.columns = [
- { width: 8 },
- { width: 20 },
- { width: 15 },
- { width: 12 },
- { width: 12 },
- { width: 12 },
- { width: 10 },
- { width: 10 },
- { width: 10 },
- { width: 10 },
- { width: 12 }, // 鎴愬姛鐜�
- { width: 12 }, // 闅忚鐜�
- { width: 12 }, // 鍙婃椂鐜�
- { width: 8 }, // 浜哄伐
- { width: 8 }, // 璇煶
- { width: 8 }, // 鐭俊
- { width: 8 }, // 寰俊
+ const widths = [8, 20, 15, 12, 12, 12, 10, 10, 10, 10, 12, 12, 12];
+ methodGroups.forEach((g) => {
+ g.fields.forEach(() => widths.push(8));
+ });
+ worksheet.columns = widths.map((width) => ({ width }));
+ },
+ getMethodColumns() {
+ // 闅忚鏂瑰紡鍒楅厤缃細鐩爣鍖婚櫌鎸夆�滃彂閫佸畬鎴�/鏈�缁堝畬鎴愨�濆垎绾у睍绀�
+ if (this.isTargetHospital) {
+ return [
+ { label: "浜哄伐", fields: ["manual", "manualSuccess"], sub: ["鍙戦�佸畬鎴�", "鏈�缁堝畬鎴�"] },
+ { label: "璇煶", fields: ["voice", "voiceSuccess"], sub: ["鍙戦�佸畬鎴�", "鏈�缁堝畬鎴�"] },
+ { label: "鐭俊", fields: ["sms", "smsSuccess"], sub: ["鍙戦�佸畬鎴�", "鏈�缁堝畬鎴�"] },
+ { label: "寰俊", fields: ["weChat", "weChatSuccess"], sub: ["鍙戦�佸畬鎴�", "鏈�缁堝畬鎴�"] },
+ ];
+ }
+ return [
+ { label: "浜哄伐", fields: ["manual"], sub: ["浜哄伐"] },
+ { label: "璇煶", fields: ["voice"], sub: ["璇煶"] },
+ { label: "鐭俊", fields: ["sms"], sub: ["鐭俊"] },
+ { label: "寰俊", fields: ["weChat"], sub: ["寰俊"] },
];
},
@@ -1974,11 +2042,14 @@
"0%", // 10: 鎴愬姛鐜�
"0%", // 11: 闅忚鐜�
"0%", // 12: 鍙婃椂鐜�
- 0, // 13: manual
- 0, // 14: voice
- 0, // 15: sms
- 0, // 16: weChat
];
+
+ const methodFields = this.getMethodColumns().reduce(
+ (arr, g) => arr.concat(g.fields),
+ []
+ );
+ const methodStartIndex = 13;
+ methodFields.forEach(() => summaries.push(0));
this.tableData.forEach((item) => {
summaries[3] += Number(item.dischargeCount) || 0;
@@ -1988,10 +2059,9 @@
summaries[7] += Number(item.pendingFollowUp) || 0;
summaries[8] += Number(item.followUpSuccess) || 0;
summaries[9] += Number(item.followUpFail) || 0;
- summaries[13] += Number(item.manual) || 0;
- summaries[14] += Number(item.voice) || 0;
- summaries[15] += Number(item.sms) || 0;
- summaries[16] += Number(item.weChat) || 0;
+ methodFields.forEach((field, i) => {
+ summaries[methodStartIndex + i] += Number(item[field]) || 0;
+ });
});
// 鎴愬姛鐜囪绠�
@@ -2030,7 +2100,10 @@
}
// 鏍煎紡鍖栨暟瀛�
- [3, 4, 5, 6, 7, 8, 9, 13, 14, 15, 16].forEach((index) => {
+ const numericIndices = [3, 4, 5, 6, 7, 8, 9].concat(
+ methodFields.map((_, i) => methodStartIndex + i)
+ );
+ numericIndices.forEach((index) => {
summaries[index] = this.formatNumber(summaries[index]);
});
@@ -2064,14 +2137,14 @@
}
// 鍑洪櫌鏃堕棿鑼冨洿
if (queryParams.hospitalEndTime) {
- this.patientqueryParams.hospitalstarttime =
+ this.patientqueryParams.hospitalStartTime =
queryParams.hospitalStartTime;
- this.patientqueryParams.hospitalendtime = queryParams.hospitalEndTime;
+ this.patientqueryParams.hospitalEndTime = queryParams.hospitalEndTime;
} else {
- this.patientqueryParams.hospitalstarttime = this.parseTime(
+ this.patientqueryParams.hospitalStartTime = this.parseTime(
queryParams.dateRangecy[0]
);
- this.patientqueryParams.hospitalendtime = this.parseTime(
+ this.patientqueryParams.hospitalEndTime = this.parseTime(
queryParams.dateRangecy[1]
);
}
diff --git a/src/views/sfstatistics/percentage/components/SecondFollowUp.vue b/src/views/sfstatistics/percentage/components/SecondFollowUp.vue
index d3abd40..6646e88 100644
--- a/src/views/sfstatistics/percentage/components/SecondFollowUp.vue
+++ b/src/views/sfstatistics/percentage/components/SecondFollowUp.vue
@@ -561,8 +561,8 @@
<el-table-column
label="鍙戦�佸畬鎴�"
align="center"
- key="manualSuccess"
- prop="manualSuccess"
+ key="manualAgain"
+ prop="manualAgain"
:render-header="Tooltipfswc"
>
<template slot-scope="scope">
@@ -572,12 +572,12 @@
@click="
handleViewDetails(
scope.row,
- 'manualSuccessInfo',
+ 'manualAgainInfo',
'鍙戦�佸畬鎴愪汉宸ラ殢璁垮垪琛�'
)
"
>
- <span class="button-zx">{{ scope.row.manualSuccess }}</span>
+ <span class="button-zx">{{ scope.row.manualAgain }}</span>
</el-button>
</template>
</el-table-column>
@@ -615,8 +615,8 @@
<el-table-column
label="鍙戦�佸畬鎴�"
align="center"
- key="voiceSuccess"
- prop="voiceSuccess"
+ key="voiceAgain"
+ prop="voiceAgain"
:render-header="Tooltipfswc"
>
<template slot-scope="scope">
@@ -626,12 +626,12 @@
@click="
handleViewDetails(
scope.row,
- 'voiceSuccessInfo',
+ 'voiceAgainInfo',
'鍙戦�佸畬鎴愯闊抽殢璁垮垪琛�'
)
"
>
- <span class="button-zx">{{ scope.row.voiceSuccess }}</span>
+ <span class="button-zx">{{ scope.row.voiceAgain }}</span>
</el-button>
</template>
</el-table-column>
@@ -669,8 +669,8 @@
<el-table-column
label="鍙戦�佸畬鎴�"
align="center"
- key="smsSuccess"
- prop="smsSuccess"
+ key="smsAgain"
+ prop="smsAgain"
:render-header="Tooltipfswc"
>
<template slot-scope="scope">
@@ -680,12 +680,12 @@
@click="
handleViewDetails(
scope.row,
- 'smsSuccessInfo',
+ 'smsAgainInfo',
'鍙戦�佸畬鎴愮煭淇¢殢璁垮垪琛�'
)
"
>
- <span class="button-zx">{{ scope.row.smsSuccess }}</span>
+ <span class="button-zx">{{ scope.row.smsAgain }}</span>
</el-button>
</template>
</el-table-column>
@@ -723,8 +723,8 @@
<el-table-column
label="鍙戦�佸畬鎴�"
align="center"
- key="weChatSuccess"
- prop="weChatSuccess"
+ key="weChatAgain"
+ prop="weChatAgain"
:render-header="Tooltipfswc"
>
<template slot-scope="scope">
@@ -734,12 +734,12 @@
@click="
handleViewDetails(
scope.row,
- 'wechatSuccessInfo',
+ 'weChatAgainInfo',
'鍙戦�佸畬鎴愬井淇¢殢璁垮垪琛�'
)
"
>
- <span class="button-zx">{{ scope.row.weChatSuccess }}</span>
+ <span class="button-zx">{{ scope.row.weChatAgain }}</span>
</el-button>
</template>
</el-table-column>
@@ -1745,92 +1745,154 @@
},
};
- const titleText = `鍐嶆${serviceTypeName}缁熻琛╛${sheetNameSuffix}`;
- // 娣诲姞鏍囬琛�
- worksheet.mergeCells(1, 1, 1, 16);
- const titleCell = worksheet.getCell(1, 1);
- titleCell.value = titleText; // 浣跨敤鍔ㄦ�佹爣棰�
- titleCell.style = titleStyle;
- worksheet.getRow(1).height = 35;
+ // 鏄惁涓虹洰鏍囧尰闄紙浜哄伐/璇煶/鐭俊/寰俊 鎸� 鍙戦�佸畬鎴�/鏈�缁堝畬鎴� 鍒嗙骇灞曠ず锛�
+ const graded = this.isTargetHospital;
- // 琛ㄥご
- // 琛ㄥご闇�瑕佸鍔犳垚鍔熺巼鍒�
- const secondRowHeaders = [
+ const baseHeaders = [
"",
"鍑洪櫌鐥呭尯",
"绉戝",
"鍑洪櫌浜烘",
"鏃犻渶闅忚浜烘",
"搴旈殢璁夸汉娆�",
+ ];
+ const coreHeaders = [
"闇�闅忚",
"寰呴殢璁�",
"闅忚鎴愬姛",
"闅忚澶辫触",
- "鎴愬姛鐜�", // 鎴愬姛鐜囧簲璇ュ湪闅忚澶辫触鍚庨潰
- "闅忚鐜�", // 闅忚鐜囧湪鎴愬姛鐜囧悗闈�
- "浜哄伐",
- "璇煶", // 淇锛氬簲璇ユ槸璇煶锛屼笉鏄煭淇�
- "鐭俊", // 鐭俊
- "寰俊", // 寰俊
+ "鎴愬姛鐜�",
+ "闅忚鐜�",
];
+ const methodGroups = this.getMethodColumns();
- secondRowHeaders.forEach((header, index) => {
- const cell = worksheet.getCell(3, index + 1);
- cell.value = header;
- cell.style = headerStyle;
- });
+ const baseCount = baseHeaders.length; // 6
+ const coreCount = coreHeaders.length; // 6
+ const methodLeafCount = methodGroups.reduce(
+ (sum, g) => sum + g.fields.length,
+ 0
+ ); // 8 鎴� 4
+ const totalCols = baseCount + coreCount + methodLeafCount; // 20 鎴� 16
+ const coreStartCol = baseCount + 1; // 7
+ const methodStartCol = baseCount + coreCount + 1; // 13
- // 鏇存柊鍚堝苟鍗曞厓鏍肩殑鑼冨洿
- for (let i = 1; i <= 6; i++) {
- worksheet.mergeCells(2, i, 3, i);
- const cell = worksheet.getCell(2, i);
- cell.style = headerStyle;
+ const titleText = `鍐嶆${serviceTypeName}缁熻琛╛${sheetNameSuffix}`;
+ // 娣诲姞鏍囬琛�
+ worksheet.mergeCells(1, 1, 1, totalCols);
+ const titleCell = worksheet.getCell(1, 1);
+ titleCell.value = titleText;
+ titleCell.style = titleStyle;
+ worksheet.getRow(1).height = 35;
+
+ if (graded) {
+ // 琛ㄥご鍗� 3 琛岋紙绗�2/3/4琛岋級锛屾暟鎹粠绗�5琛屽紑濮�
+ const headerEndRow = 4;
+
+ // 绗�2琛岋細鍩虹鍒楃旱鍚戝悎骞� + 闅忚鍒嗙粍妯悜鍚堝苟
+ for (let i = 1; i <= baseCount; i++) {
+ worksheet.mergeCells(2, i, headerEndRow, i);
+ const cell = worksheet.getCell(2, i);
+ cell.value = baseHeaders[i - 1];
+ cell.style = headerStyle;
+ }
+ worksheet.mergeCells(2, coreStartCol, 2, totalCols);
+ worksheet.getCell(2, coreStartCol).value = "鍐嶆鍑洪櫌闅忚";
+ worksheet.getCell(2, coreStartCol).style = headerStyle;
+
+ // 绗�3琛岋細闅忚鏍稿績鍒楃旱鍚戝悎骞� + 闅忚鏂瑰紡鍒嗙粍妯悜鍚堝苟
+ for (let k = 0; k < coreCount; k++) {
+ const col = coreStartCol + k;
+ worksheet.mergeCells(3, col, headerEndRow, col);
+ const cell = worksheet.getCell(3, col);
+ cell.value = coreHeaders[k];
+ cell.style = headerStyle;
+ }
+ let mc = methodStartCol;
+ methodGroups.forEach((g) => {
+ if (g.fields.length > 1) {
+ worksheet.mergeCells(3, mc, 3, mc + g.fields.length - 1);
+ }
+ const cell = worksheet.getCell(3, mc);
+ cell.value = g.label;
+ cell.style = headerStyle;
+ mc += g.fields.length;
+ });
+
+ // 绗�4琛岋細闅忚鏂瑰紡瀛愬垪锛堝彂閫佸畬鎴�/鏈�缁堝畬鎴愶級
+ mc = methodStartCol;
+ methodGroups.forEach((g) => {
+ g.fields.forEach((field, idx) => {
+ const cell = worksheet.getCell(4, mc + idx);
+ cell.value = g.sub[idx];
+ cell.style = headerStyle;
+ });
+ mc += g.fields.length;
+ });
+
+ worksheet.getRow(2).height = 28;
+ worksheet.getRow(3).height = 24;
+ worksheet.getRow(4).height = 24;
+ } else {
+ // 琛ㄥご鍗� 2 琛岋紙绗�2/3琛岋級锛屾暟鎹粠绗�4琛屽紑濮�
+ const headerEndRow = 3;
+
+ for (let i = 1; i <= baseCount; i++) {
+ worksheet.mergeCells(2, i, headerEndRow, i);
+ const cell = worksheet.getCell(2, i);
+ cell.value = baseHeaders[i - 1];
+ cell.style = headerStyle;
+ }
+ worksheet.mergeCells(2, coreStartCol, 2, totalCols);
+ worksheet.getCell(2, coreStartCol).value = "鍐嶆鍑洪櫌闅忚";
+ worksheet.getCell(2, coreStartCol).style = headerStyle;
+
+ // 绗�3琛岋細闅忚鏍稿績鍒� + 闅忚鏂瑰紡鍒�
+ for (let k = 0; k < coreCount; k++) {
+ const cell = worksheet.getCell(3, coreStartCol + k);
+ cell.value = coreHeaders[k];
+ cell.style = headerStyle;
+ }
+ let mc = methodStartCol;
+ methodGroups.forEach((g) => {
+ const cell = worksheet.getCell(3, mc);
+ cell.value = g.label;
+ cell.style = headerStyle;
+ mc += 1;
+ });
+
+ worksheet.getRow(2).height = 28;
+ worksheet.getRow(3).height = 25;
}
- worksheet.getCell(2, 1).value = "";
- worksheet.getCell(2, 2).value = "鍑洪櫌鐥呭尯";
- worksheet.getCell(2, 3).value = "绉戝";
- worksheet.getCell(2, 4).value = "鍑洪櫌浜烘";
- worksheet.getCell(2, 5).value = "鏃犻渶闅忚浜烘";
- worksheet.getCell(2, 6).value = "搴旈殢璁夸汉娆�";
-
- // 娉ㄦ剰锛氱敱浜庡鍔犱簡鎴愬姛鐜囧垪锛屽悎骞跺垪鏁拌澧炲姞
- worksheet.mergeCells(2, 7, 2, 16); // 浠�7鍚堝苟鍒�16锛堝師鏉ユ槸7-14锛�
- worksheet.getCell(2, 7).value = "鍐嶆鍑洪櫌闅忚";
- worksheet.getCell(2, 7).style = headerStyle;
-
- worksheet.getRow(2).height = 28;
- worksheet.getRow(3).height = 25;
-
// 鏁版嵁琛�
+ const dataStartRow = graded ? 5 : 4;
this.tableData.forEach((item, rowIndex) => {
- const dataRow = worksheet.addRow(
- [
- "",
- item.leavehospitaldistrictname || "",
- item.deptname || "",
- item.dischargeCount || 0,
- item.nonFollowUp || 0,
- item.followUpNeeded || 0,
- item.needFollowUpAgain || 0,
- item.pendingFollowUpAgain || 0,
- item.followUpSuccessAgain || 0,
- item.followUpFailAgain || 0,
- // 鎴愬姛鐜� - 闇�瑕佸姩鎬佽绠�
- this.calculateSuccessRate(
- item.followUpSuccessAgain,
- item.needFollowUpAgain,
- item.pendingFollowUpAgain
- ),
- item.followUpRateAgain || "0%", // 闅忚鐜�
- item.manualAgain || 0,
- item.voiceAgain || 0,
- item.smsAgain || 0,
- item.weChatAgain || 0,
- ],
- rowIndex + 4
- );
+ const rowValues = [
+ "",
+ item.leavehospitaldistrictname || "",
+ item.deptname || "",
+ item.dischargeCount || 0,
+ item.nonFollowUp || 0,
+ item.followUpNeeded || 0,
+ item.needFollowUpAgain || 0,
+ item.pendingFollowUpAgain || 0,
+ item.followUpSuccessAgain || 0,
+ item.followUpFailAgain || 0,
+ // 鎴愬姛鐜� - 闇�瑕佸姩鎬佽绠�
+ this.calculateSuccessRate(
+ item.followUpSuccessAgain,
+ item.needFollowUpAgain,
+ item.pendingFollowUpAgain
+ ),
+ item.followUpRateAgain || "0%", // 闅忚鐜�
+ ];
+ methodGroups.forEach((g) => {
+ g.fields.forEach((field) => {
+ rowValues.push(item[field] || 0);
+ });
+ });
+ const dataRow = worksheet.addRow(rowValues, rowIndex + dataStartRow);
dataRow.eachCell((cell) => {
cell.style = cellStyle;
});
@@ -1849,24 +1911,27 @@
summaryRow.height = 28;
// 鍒楀
- // 淇鍒楀
- worksheet.columns = [
- { width: 8 },
- { width: 20 },
- { width: 15 },
- { width: 12 },
- { width: 12 },
- { width: 12 },
- { width: 10 },
- { width: 10 },
- { width: 10 },
- { width: 10 },
- { width: 12 }, // 鎴愬姛鐜�
- { width: 12 }, // 闅忚鐜�
- { width: 8 }, // 浜哄伐
- { width: 8 }, // 璇煶
- { width: 8 }, // 鐭俊
- { width: 8 }, // 寰俊
+ const widths = [8, 20, 15, 12, 12, 12, 10, 10, 10, 10, 12, 12];
+ methodGroups.forEach((g) => {
+ g.fields.forEach(() => widths.push(8));
+ });
+ worksheet.columns = widths.map((width) => ({ width }));
+ },
+ getMethodColumns() {
+ // 闅忚鏂瑰紡鍒楅厤缃細鐩爣鍖婚櫌鎸夆�滃彂閫佸畬鎴�/鏈�缁堝畬鎴愨�濆垎绾у睍绀�
+ if (this.isTargetHospital) {
+ return [
+ { label: "浜哄伐", fields: ["manualAgain", "manualAgainSuccess"], sub: ["鍙戦�佸畬鎴�", "鏈�缁堝畬鎴�"] },
+ { label: "璇煶", fields: ["voiceAgain", "voiceAgainSuccess"], sub: ["鍙戦�佸畬鎴�", "鏈�缁堝畬鎴�"] },
+ { label: "鐭俊", fields: ["smsAgain", "smsAgainSuccess"], sub: ["鍙戦�佸畬鎴�", "鏈�缁堝畬鎴�"] },
+ { label: "寰俊", fields: ["weChatAgain", "weChatAgainSuccess"], sub: ["鍙戦�佸畬鎴�", "鏈�缁堝畬鎴�"] },
+ ];
+ }
+ return [
+ { label: "浜哄伐", fields: ["manualAgain"], sub: ["浜哄伐"] },
+ { label: "璇煶", fields: ["voiceAgain"], sub: ["璇煶"] },
+ { label: "鐭俊", fields: ["smsAgain"], sub: ["鐭俊"] },
+ { label: "寰俊", fields: ["weChatAgain"], sub: ["寰俊"] },
];
},
@@ -1884,11 +1949,14 @@
0, // 9: followUpFailAgain
"0%", // 10: 鎴愬姛鐜�
"0%", // 11: 闅忚鐜�
- 0, // 12: manualAgain
- 0, // 13: voiceAgain
- 0, // 14: smsAgain
- 0, // 15: weChatAgain
];
+
+ const methodFields = this.getMethodColumns().reduce(
+ (arr, g) => arr.concat(g.fields),
+ []
+ );
+ const methodStartIndex = 12;
+ methodFields.forEach(() => summaries.push(0));
this.tableData.forEach((item) => {
summaries[3] += Number(item.dischargeCount) || 0;
@@ -1898,10 +1966,9 @@
summaries[7] += Number(item.pendingFollowUpAgain) || 0;
summaries[8] += Number(item.followUpSuccessAgain) || 0;
summaries[9] += Number(item.followUpFailAgain) || 0;
- summaries[12] += Number(item.manualAgain) || 0;
- summaries[13] += Number(item.voiceAgain) || 0;
- summaries[14] += Number(item.smsAgain) || 0;
- summaries[15] += Number(item.weChatAgain) || 0;
+ methodFields.forEach((field, i) => {
+ summaries[methodStartIndex + i] += Number(item[field]) || 0;
+ });
});
// 鎴愬姛鐜囪绠�
@@ -1929,7 +1996,10 @@
}
// 鏍煎紡鍖栨暟瀛�
- [3, 4, 5, 6, 7, 8, 9, 12, 13, 14, 15].forEach((index) => {
+ const numericIndices = [3, 4, 5, 6, 7, 8, 9].concat(
+ methodFields.map((_, i) => methodStartIndex + i)
+ );
+ numericIndices.forEach((index) => {
summaries[index] = this.formatNumber(summaries[index]);
});
diff --git a/vue.config.js b/vue.config.js
index 414e500..fd08b34 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -36,14 +36,14 @@
// 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: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`,
// target:`http://35z1t16164.qicp.vip`,
// target: `http://192.168.100.172:8095`,
- target: `http://192.168.100.10:8089`,//鍗楀崕
+ // target: `http://192.168.100.10:8089`,//鍗楀崕
// target: `https://9.208.38.93:8092/`,
changeOrigin: true,
pathRewrite: {
diff --git "a/\351\232\217\350\256\277\351\200\232\347\224\25010.19 \0502\051.zip" "b/\351\232\217\350\256\277\351\200\232\347\224\25010.19 \0502\051.zip"
new file mode 100644
index 0000000..a87e91c
--- /dev/null
+++ "b/\351\232\217\350\256\277\351\200\232\347\224\25010.19 \0502\051.zip"
Binary files differ
diff --git "a/\351\232\217\350\256\277\351\200\232\347\224\25010.19.zip" "b/\351\232\217\350\256\277\351\200\232\347\224\25010.19.zip"
new file mode 100644
index 0000000..3004d60
--- /dev/null
+++ "b/\351\232\217\350\256\277\351\200\232\347\224\25010.19.zip"
Binary files differ
--
Gitblit v1.9.3