From c441e5f3cb734b5db5e893536f267b13814796f5 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期三, 11 三月 2026 10:12:06 +0800
Subject: [PATCH] 青岛推送
---
src/api/businessApi/allocation.js | 34
src/api/businessApi/ethicalReview.js | 34
src/views/business/OrganUtilization/index.vue | 1
src/views/business/decide/DecideInfo.vue | 280 ++-
src/views/business/allocation/index.vue | 154 +
src/utils/ruoyi.js | 282 ++--
src/views/business/affirm/index.vue | 1
src/views/business/assess/assessInfo copy.vue | 1306 ++++++++++++++++++++
src/views/business/decide/index.vue | 9
src/views/business/maintain/index.vue | 1
src/views/business/appear/index.vue | 1
src/views/business/assess/index.vue | 17
src/views/business/transfer/index.vue | 1
src/views/login.vue | 15
src/views/business/GetWitness/index.vue | 1
src/main.js | 3
src/views/business/assess/components/OrganAssessmentForm.vue | 257 ++-
src/views/business/affirm/affirmInfo.vue | 2
src/views/business/maintain/maintainInfo.vue | 23
src/views/business/ethicalReview/index.vue | 305 ++--
src/views/business/assess/assessInfo.vue | 1091 ++++++++++++----
21 files changed, 3,056 insertions(+), 762 deletions(-)
diff --git a/src/api/businessApi/allocation.js b/src/api/businessApi/allocation.js
index e69de29..dc6f7fd 100644
--- a/src/api/businessApi/allocation.js
+++ b/src/api/businessApi/allocation.js
@@ -0,0 +1,34 @@
+import request from '@/utils/request'
+
+// 妗堜緥鍒楄〃鍙婅鎯�
+export function allocationList(data) {
+ return request({
+ url: '/project/donateorganBase/getDonateorganBaseInfoList',
+ method: 'post',
+ data: data
+ })
+}
+// 姝讳骸淇℃伅淇敼
+export function allocationadd(data) {
+ return request({
+ url: '/project/donateorganBase/add',
+ method: 'post',
+ data: data
+ })
+}
+// 姝讳骸淇℃伅淇敼
+export function allocationedit(data) {
+ return request({
+ url: '/project/donateorganBase/edit',
+ method: 'post',
+ data: data
+ })
+}
+// 姝讳骸淇℃伅璇︽儏
+export function donateorganBaseinfoInfo(id) {
+ return request({
+ url: '/project/donateorganBase/getInfo/' + id,
+ method: 'get'
+ })
+}
+
diff --git a/src/api/businessApi/ethicalReview.js b/src/api/businessApi/ethicalReview.js
index e69de29..527747d 100644
--- a/src/api/businessApi/ethicalReview.js
+++ b/src/api/businessApi/ethicalReview.js
@@ -0,0 +1,34 @@
+import request from '@/utils/request'
+
+// 妗堜緥鍒楄〃鍙婅鎯�
+export function reviewinitiateBaseInfoList(data) {
+ return request({
+ url: '/project/ethicalreviewinitiate/reviewinitiateBaseInfoList',
+ method: 'post',
+ data: data
+ })
+}
+// 姝讳骸淇℃伅淇敼
+export function ethicalreviewadd(data) {
+ return request({
+ url: '/project/ethicalreviewinitiate/add',
+ method: 'post',
+ data: data
+ })
+}
+// 姝讳骸淇℃伅淇敼
+export function ethicalreviewedit(data) {
+ return request({
+ url: '/project/ethicalreviewinitiate/edit',
+ method: 'post',
+ data: data
+ })
+}
+// 姝讳骸淇℃伅璇︽儏
+export function ethicalinfoInfo(id) {
+ return request({
+ url: '/project/deathinfo/getInfo/' + id,
+ method: 'get'
+ })
+}
+
diff --git a/src/main.js b/src/main.js
index 74bada1..4ddfc07 100644
--- a/src/main.js
+++ b/src/main.js
@@ -25,7 +25,7 @@
import './permission' // permission control
import { getDicts } from "@/api/system/dict/data";
import { getConfigKey } from "@/api/system/config";
-import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/ruoyi";
+import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels,donatebaseinfoEdit, handleTree } from "@/utils/ruoyi";
import { formatTime } from "@/utils/index";
import dataV from '@jiaminghi/data-view';//dataV
// 鍒嗛〉缁勪欢
@@ -66,6 +66,7 @@
Vue.prototype.getDicts = getDicts
Vue.prototype.getConfigKey = getConfigKey
Vue.prototype.parseTime = parseTime
+Vue.prototype.donatebaseinfoEdit = donatebaseinfoEdit
Vue.prototype.formatTime = formatTime
Vue.prototype.resetForm = resetForm
Vue.prototype.addDateRange = addDateRange
diff --git a/src/utils/ruoyi.js b/src/utils/ruoyi.js
index 63bd379..ef61200 100644
--- a/src/utils/ruoyi.js
+++ b/src/utils/ruoyi.js
@@ -1,3 +1,5 @@
+import { updateDonatebaseinfo } from "@/api/project/donatebaseinfo";
+
/**
* 閫氱敤js鏂规硶灏佽澶勭悊
* Copyright (c) 2019 ruoyi
@@ -5,131 +7,145 @@
// 鏃ユ湡鏍煎紡鍖�
export function parseTime(time, pattern) {
- if (arguments.length === 0 || !time) {
- return null
- }
- const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
- let date
- if (typeof time === 'object') {
- date = time
- } else {
- if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
- time = parseInt(time)
- } else if (typeof time === 'string') {
- time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm),'');
- }
- if ((typeof time === 'number') && (time.toString().length === 10)) {
- time = time * 1000
- }
- date = new Date(time)
- }
- const formatObj = {
- y: date.getFullYear(),
- m: date.getMonth() + 1,
- d: date.getDate(),
- h: date.getHours(),
- i: date.getMinutes(),
- s: date.getSeconds(),
- a: date.getDay()
- }
- const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
- let value = formatObj[key]
- // Note: getDay() returns 0 on Sunday
- if (key === 'a') { return ['鏃�', '涓�', '浜�', '涓�', '鍥�', '浜�', '鍏�'][value] }
- if (result.length > 0 && value < 10) {
- value = '0' + value
- }
- return value || 0
- })
- return time_str
+ if (arguments.length === 0 || !time) {
+ return null;
+ }
+ const format = pattern || "{y}-{m}-{d} {h}:{i}:{s}";
+ let date;
+ if (typeof time === "object") {
+ date = time;
+ } else {
+ if (typeof time === "string" && /^[0-9]+$/.test(time)) {
+ time = parseInt(time);
+ } else if (typeof time === "string") {
+ time = time
+ .replace(new RegExp(/-/gm), "/")
+ .replace("T", " ")
+ .replace(new RegExp(/\.[\d]{3}/gm), "");
+ }
+ if (typeof time === "number" && time.toString().length === 10) {
+ time = time * 1000;
+ }
+ date = new Date(time);
+ }
+ const formatObj = {
+ y: date.getFullYear(),
+ m: date.getMonth() + 1,
+ d: date.getDate(),
+ h: date.getHours(),
+ i: date.getMinutes(),
+ s: date.getSeconds(),
+ a: date.getDay()
+ };
+ const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
+ let value = formatObj[key];
+ // Note: getDay() returns 0 on Sunday
+ if (key === "a") {
+ return ["鏃�", "涓�", "浜�", "涓�", "鍥�", "浜�", "鍏�"][value];
+ }
+ if (result.length > 0 && value < 10) {
+ value = "0" + value;
+ }
+ return value || 0;
+ });
+ return time_str;
}
-
+export function donatebaseinfoEdit(data) {
+ updateDonatebaseinfo(data);
+}
// 琛ㄥ崟閲嶇疆
export function resetForm(refName) {
- if (this.$refs[refName]) {
- this.$refs[refName].resetFields();
- }
+ if (this.$refs[refName]) {
+ this.$refs[refName].resetFields();
+ }
}
// 娣诲姞鏃ユ湡鑼冨洿
export function addDateRange(params, dateRange, propName) {
- let search = params;
- search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {};
- dateRange = Array.isArray(dateRange) ? dateRange : [];
- if (typeof (propName) === 'undefined') {
- search.params['beginTime'] = dateRange[0];
- search.params['endTime'] = dateRange[1];
- } else {
- search.params['begin' + propName] = dateRange[0];
- search.params['end' + propName] = dateRange[1];
- }
- return search;
+ let search = params;
+ search.params =
+ typeof search.params === "object" &&
+ search.params !== null &&
+ !Array.isArray(search.params)
+ ? search.params
+ : {};
+ dateRange = Array.isArray(dateRange) ? dateRange : [];
+ if (typeof propName === "undefined") {
+ search.params["beginTime"] = dateRange[0];
+ search.params["endTime"] = dateRange[1];
+ } else {
+ search.params["begin" + propName] = dateRange[0];
+ search.params["end" + propName] = dateRange[1];
+ }
+ return search;
}
// 鍥炴樉鏁版嵁瀛楀吀
export function selectDictLabel(datas, value) {
- var actions = [];
- Object.keys(datas).some((key) => {
- if (datas[key].value == ('' + value)) {
- actions.push(datas[key].label);
- return true;
- }
- })
- return actions.join('');
+ var actions = [];
+ Object.keys(datas).some(key => {
+ if (datas[key].value == "" + value) {
+ actions.push(datas[key].label);
+ return true;
+ }
+ });
+ return actions.join("");
}
// 鍥炴樉鏁版嵁瀛楀吀锛堝瓧绗︿覆鏁扮粍锛�
export function selectDictLabels(datas, value, separator) {
- var actions = [];
- var currentSeparator = undefined === separator ? "," : separator;
- var temp = value.split(currentSeparator);
- Object.keys(value.split(currentSeparator)).some((val) => {
- Object.keys(datas).some((key) => {
- if (datas[key].dictValue == ('' + temp[val])) {
- actions.push(datas[key].dictLabel + currentSeparator);
- }
- })
- })
- return actions.join('').substring(0, actions.join('').length - 1);
+ var actions = [];
+ var currentSeparator = undefined === separator ? "," : separator;
+ var temp = value.split(currentSeparator);
+ Object.keys(value.split(currentSeparator)).some(val => {
+ Object.keys(datas).some(key => {
+ if (datas[key].dictValue == "" + temp[val]) {
+ actions.push(datas[key].dictLabel + currentSeparator);
+ }
+ });
+ });
+ return actions.join("").substring(0, actions.join("").length - 1);
}
// 瀛楃涓叉牸寮忓寲(%s )
export function sprintf(str) {
- var args = arguments, flag = true, i = 1;
- str = str.replace(/%s/g, function () {
- var arg = args[i++];
- if (typeof arg === 'undefined') {
- flag = false;
- return '';
- }
- return arg;
- });
- return flag ? str : '';
+ var args = arguments,
+ flag = true,
+ i = 1;
+ str = str.replace(/%s/g, function() {
+ var arg = args[i++];
+ if (typeof arg === "undefined") {
+ flag = false;
+ return "";
+ }
+ return arg;
+ });
+ return flag ? str : "";
}
// 杞崲瀛楃涓诧紝undefined,null绛夎浆鍖栦负""
export function praseStrEmpty(str) {
- if (!str || str == "undefined" || str == "null") {
- return "";
- }
- return str;
+ if (!str || str == "undefined" || str == "null") {
+ return "";
+ }
+ return str;
}
// 鏁版嵁鍚堝苟
export function mergeRecursive(source, target) {
- for (var p in target) {
- try {
- if (target[p].constructor == Object) {
- source[p] = mergeRecursive(source[p], target[p]);
- } else {
- source[p] = target[p];
- }
- } catch(e) {
- source[p] = target[p];
- }
+ for (var p in target) {
+ try {
+ if (target[p].constructor == Object) {
+ source[p] = mergeRecursive(source[p], target[p]);
+ } else {
+ source[p] = target[p];
+ }
+ } catch (e) {
+ source[p] = target[p];
}
- return source;
-};
+ }
+ return source;
+}
/**
* 鏋勯�犳爲鍨嬬粨鏋勬暟鎹�
@@ -139,45 +155,45 @@
* @param {*} children 瀛╁瓙鑺傜偣瀛楁 榛樿 'children'
*/
export function handleTree(data, id, parentId, children) {
- let config = {
- id: id || 'id',
- parentId: parentId || 'parentId',
- childrenList: children || 'children'
- };
+ let config = {
+ id: id || "id",
+ parentId: parentId || "parentId",
+ childrenList: children || "children"
+ };
- var childrenListMap = {};
- var nodeIds = {};
- var tree = [];
+ var childrenListMap = {};
+ var nodeIds = {};
+ var tree = [];
- for (let d of data) {
- let parentId = d[config.parentId];
- if (childrenListMap[parentId] == null) {
- childrenListMap[parentId] = [];
- }
- nodeIds[d[config.id]] = d;
- childrenListMap[parentId].push(d);
- }
+ for (let d of data) {
+ let parentId = d[config.parentId];
+ if (childrenListMap[parentId] == null) {
+ childrenListMap[parentId] = [];
+ }
+ nodeIds[d[config.id]] = d;
+ childrenListMap[parentId].push(d);
+ }
- for (let d of data) {
- let parentId = d[config.parentId];
- if (nodeIds[parentId] == null) {
- tree.push(d);
- }
- }
+ for (let d of data) {
+ let parentId = d[config.parentId];
+ if (nodeIds[parentId] == null) {
+ tree.push(d);
+ }
+ }
- for (let t of tree) {
- adaptToChildrenList(t);
- }
+ for (let t of tree) {
+ adaptToChildrenList(t);
+ }
- function adaptToChildrenList(o) {
- if (childrenListMap[o[config.id]] !== null) {
- o[config.childrenList] = childrenListMap[o[config.id]];
- }
- if (o[config.childrenList]) {
- for (let c of o[config.childrenList]) {
- adaptToChildrenList(c);
- }
- }
- }
- return tree;
+ function adaptToChildrenList(o) {
+ if (childrenListMap[o[config.id]] !== null) {
+ o[config.childrenList] = childrenListMap[o[config.id]];
+ }
+ if (o[config.childrenList]) {
+ for (let c of o[config.childrenList]) {
+ adaptToChildrenList(c);
+ }
+ }
+ }
+ return tree;
}
diff --git a/src/views/business/GetWitness/index.vue b/src/views/business/GetWitness/index.vue
index dbb492d..47467b1 100644
--- a/src/views/business/GetWitness/index.vue
+++ b/src/views/business/GetWitness/index.vue
@@ -162,6 +162,7 @@
label="鎿嶄綔"
align="center"
width="210"
+ fixed="right"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
diff --git a/src/views/business/OrganUtilization/index.vue b/src/views/business/OrganUtilization/index.vue
index cf5066a..5483757 100644
--- a/src/views/business/OrganUtilization/index.vue
+++ b/src/views/business/OrganUtilization/index.vue
@@ -147,6 +147,7 @@
</el-table-column>
<el-table-column
label="鎿嶄綔"
+ fixed="right"
align="center"
width="210"
class-name="small-padding fixed-width"
diff --git a/src/views/business/affirm/affirmInfo.vue b/src/views/business/affirm/affirmInfo.vue
index ce4013d..2d9be0c 100644
--- a/src/views/business/affirm/affirmInfo.vue
+++ b/src/views/business/affirm/affirmInfo.vue
@@ -809,7 +809,7 @@
if (response.code === 200) {
this.$message.success("淇濆瓨鎴愬姛");
- this.$router.push("/case/confirmation");
+ this.$router.push("/case/affirm");
} else {
this.$message.error("淇濆瓨澶辫触锛�" + (response.msg || "鏈煡閿欒"));
}
diff --git a/src/views/business/affirm/index.vue b/src/views/business/affirm/index.vue
index a60d695..4866a74 100644
--- a/src/views/business/affirm/index.vue
+++ b/src/views/business/affirm/index.vue
@@ -203,6 +203,7 @@
label="鎿嶄綔"
align="center"
width="120"
+ fixed="right"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
diff --git a/src/views/business/allocation/index.vue b/src/views/business/allocation/index.vue
index 3afda44..17bbc59 100644
--- a/src/views/business/allocation/index.vue
+++ b/src/views/business/allocation/index.vue
@@ -8,19 +8,28 @@
:inline="true"
label-width="100px"
>
- <el-form-item label="浣忛櫌鍙�" prop="hospitalNo">
+ <el-form-item label="浣忛櫌鍙�" prop="inpatientno">
<el-input
- v-model="queryParams.hospitalNo"
+ v-model="queryParams.inpatientno"
placeholder="璇疯緭鍏ヤ綇闄㈠彿"
clearable
style="width: 200px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="鎹愮尞鑰呭鍚�" prop="donorName">
+ <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
<el-input
- v-model="queryParams.donorName"
+ v-model="queryParams.name"
placeholder="璇疯緭鍏ユ崘鐚�呭鍚�"
+ clearable
+ style="width: 200px"
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+ <el-form-item label="妗堜緥缂栧彿" prop="caseNo">
+ <el-input
+ v-model="queryParams.caseNo"
+ placeholder="璇疯緭鍏ユ渚嬬紪鍙�"
clearable
style="width: 200px"
@keyup.enter.native="handleQuery"
@@ -33,9 +42,25 @@
clearable
style="width: 200px"
>
- <el-option label="宸插垎閰�" value="allocated" />
- <el-option label="寰呭垎閰�" value="pending" />
+ <el-option label="鍏ㄩ儴" value="" />
+ <el-option
+ v-for="dict in dict.type.allocation_Status"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
</el-select>
+ </el-form-item>
+ <el-form-item label="鍒嗛厤鏃堕棿鑼冨洿" prop="allocationTimeRange">
+ <el-date-picker
+ v-model="queryParams.allocationTimeRange"
+ type="daterange"
+ range-separator="鑷�"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡"
+ value-format="yyyy-MM-dd"
+ style="width: 240px"
+ />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"
@@ -60,13 +85,13 @@
@click="handleUpdate"
>淇敼</el-button
>
- <el-button
+ <!-- <el-button
type="danger"
icon="el-icon-delete"
- :disabled="multiple"
+ :disabled="single"
@click="handleDelete"
>鍒犻櫎</el-button
- >
+ > -->
</el-col>
<el-col :span="8" style="text-align: right">
<el-tooltip content="鍒锋柊" placement="top">
@@ -85,31 +110,62 @@
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column
- label="浣忛櫌鍙�"
+ label="妗堜緥缂栧彿"
align="center"
- prop="hospitalNo"
+ prop="caseNo"
width="120"
/>
<el-table-column
- label="鎹愮尞鑰呭鍚�"
+ label="鎹愮尞鑰呯紪鍙�"
align="center"
- prop="donorName"
+ prop="donorno"
width="120"
/>
- <el-table-column label="鎬у埆" align="center" prop="gender" width="80">
+ <el-table-column
+ label="濮撳悕"
+ align="center"
+ prop="name"
+ width="100"
+ />
+ <el-table-column
+ label="浣忛櫌鍙�"
+ align="center"
+ prop="inpatientno"
+ width="120"
+ />
+ <el-table-column label="鎬у埆" align="center" prop="sex" width="80">
<template slot-scope="scope">
<dict-tag
:options="dict.type.sys_user_sex"
- :value="parseInt(scope.row.gender)"
+ :value="scope.row.sex"
/>
</template>
</el-table-column>
<el-table-column label="骞撮緞" align="center" prop="age" width="80" />
<el-table-column
+ label="琛�鍨�"
+ align="center"
+ prop="bloodtype"
+ width="80"
+ />
+ <el-table-column
+ label="璇佷欢鍙风爜"
+ align="center"
+ prop="idcardno"
+ width="180"
+ />
+ <el-table-column
label="鐤剧梾璇婃柇"
align="center"
- prop="diagnosis"
+ prop="diagnosisname"
min-width="180"
+ show-overflow-tooltip
+ />
+ <el-table-column
+ label="鍖荤枟鏈烘瀯"
+ align="center"
+ prop="treatmenthospitalname"
+ min-width="150"
show-overflow-tooltip
/>
<el-table-column
@@ -119,9 +175,10 @@
width="100"
>
<template slot-scope="scope">
- <el-tag :type="scope.row.allocationStatus === 'allocated' ? 'success' : 'warning'">
- {{ scope.row.allocationStatus === 'allocated' ? '宸插垎閰�' : '寰呭垎閰�' }}
- </el-tag>
+ <dict-tag
+ :options="dict.type.allocation_Status"
+ :value="scope.row.allocationStatus"
+ />
</template>
</el-table-column>
<el-table-column
@@ -141,7 +198,7 @@
<el-table-column
label="鐧昏浜�"
align="center"
- prop="registrant"
+ prop="registrationName"
width="100"
/>
<el-table-column
@@ -162,6 +219,7 @@
label="鎿嶄綔"
align="center"
width="210"
+ fixed="right"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
@@ -185,6 +243,7 @@
icon="el-icon-delete"
style="color: #F56C6C"
@click="handleDelete(scope.row)"
+ :disabled="scope.row.allocationStatus === '2'"
>鍒犻櫎</el-button
>
</template>
@@ -204,19 +263,21 @@
</template>
<script>
-import { listOrganAllocation, delOrganAllocation } from "./organAllocation";
+import { allocationList, } from "@/api/businessApi";
import Pagination from "@/components/Pagination";
export default {
name: "OrganAllocationList",
components: { Pagination },
- dicts: ["sys_user_sex"],
+ dicts: ["sys_user_sex", "allocation_Status"],
data() {
return {
// 閬僵灞�
loading: true,
// 閫変腑鏁扮粍
ids: [],
+ // 閫変腑鐨勮鏁版嵁
+ selectedRows: [],
// 闈炲崟涓鐢�
single: true,
// 闈炲涓鐢�
@@ -229,9 +290,11 @@
queryParams: {
pageNum: 1,
pageSize: 10,
- hospitalNo: undefined,
- donorName: undefined,
- allocationStatus: undefined
+ inpatientno: undefined,
+ name: undefined,
+ caseNo: undefined,
+ allocationStatus: undefined,
+ allocationTimeRange: []
}
};
},
@@ -242,13 +305,28 @@
// 鏌ヨ鍣ㄥ畼鍒嗛厤鍒楄〃
getList() {
this.loading = true;
- listOrganAllocation(this.queryParams)
+
+ // 澶勭悊鏌ヨ鍙傛暟
+ const params = {
+ ...this.queryParams
+ };
+
+ // 绉婚櫎鍒嗛〉鍙傛暟浠ュ鐨勯澶栧弬鏁�
+ delete params.allocationTimeRange;
+
+ // 濡傛灉鏈夋椂闂磋寖鍥村弬鏁�
+ if (this.queryParams.allocationTimeRange && this.queryParams.allocationTimeRange.length === 2) {
+ params.allocationTimeStart = this.queryParams.allocationTimeRange[0] + ' 00:00:00';
+ params.allocationTimeEnd = this.queryParams.allocationTimeRange[1] + ' 23:59:59';
+ }
+
+ allocationList(params)
.then(response => {
if (response.code === 200) {
- this.organAllocationList = response.data.rows;
- this.total = response.data.total;
+ this.organAllocationList = response.data || [];
+ this.total = response.total || 0;
} else {
- this.$message.error("鑾峰彇鏁版嵁澶辫触");
+ this.$message.error(response.msg || "鑾峰彇鏁版嵁澶辫触");
}
this.loading = false;
})
@@ -270,7 +348,8 @@
},
// 澶氶�夋閫変腑鏁版嵁
handleSelectionChange(selection) {
- this.ids = selection.map(item => item.id);
+ this.ids = selection.map(item => item.infoid);
+ this.selectedRows = selection;
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
@@ -278,7 +357,7 @@
handleView(row) {
this.$router.push({
path: "/case/allocationInfo",
- query: { id: row.id }
+ query: { id: row.infoid }
});
},
// 鏂板鎸夐挳鎿嶄綔
@@ -287,7 +366,7 @@
},
// 淇敼鎸夐挳鎿嶄綔
handleUpdate(row) {
- const id = row.id || this.ids[0];
+ const id = row.infoid || this.ids[0];
this.$router.push({
path: "/case/allocationInfo",
query: { id: id }
@@ -295,19 +374,26 @@
},
// 鍒犻櫎鎸夐挳鎿嶄綔
handleDelete(row) {
- const ids = row.id ? [row.id] : this.ids;
+ const selectedRow = row || (this.selectedRows.length === 1 ? this.selectedRows[0] : null);
+ if (!selectedRow) {
+ this.$message.warning("璇烽�夋嫨涓�鏉¤褰�");
+ return;
+ }
+
this.$confirm("鏄惁纭鍒犻櫎閫変腑鐨勬暟鎹」锛�", "璀﹀憡", {
confirmButtonText: "纭畾",
cancelButtonText: "鍙栨秷",
type: "warning"
})
.then(() => {
- return delOrganAllocation(ids);
+ // return allocationdelete([selectedRow.infoid]);
})
.then(response => {
if (response.code === 200) {
this.$message.success("鍒犻櫎鎴愬姛");
this.getList();
+ } else {
+ this.$message.error(response.msg || "鍒犻櫎澶辫触");
}
})
.catch(() => {});
diff --git a/src/views/business/appear/index.vue b/src/views/business/appear/index.vue
index f905c3e..550ecda 100644
--- a/src/views/business/appear/index.vue
+++ b/src/views/business/appear/index.vue
@@ -139,6 +139,7 @@
<el-table-column
label="鎿嶄綔"
align="center"
+ fixed="right"
class-name="small-padding fixed-width"
width="200"
>
diff --git a/src/views/business/assess/assessInfo copy.vue b/src/views/business/assess/assessInfo copy.vue
new file mode 100644
index 0000000..eeed0d1
--- /dev/null
+++ b/src/views/business/assess/assessInfo copy.vue
@@ -0,0 +1,1306 @@
+<template>
+ <div class="assessment-detail">
+ <el-card class="basic-info-card">
+ <div slot="header" class="clearfix">
+ <span>妗堜緥鍩烘湰淇℃伅</span>
+ <el-button
+ style="float: right; padding: 3px 0"
+ type="text"
+ @click="handleAttachmentPreview"
+ >
+ <i class="el-icon-folder-opened"></i> 鏌ョ湅闄勪欢
+ </el-button>
+ </div>
+
+ <el-descriptions :column="2" border>
+ <el-descriptions-item label="浣忛櫌鍙�">{{
+ assessmentData.caseNo
+ }}</el-descriptions-item>
+ <el-descriptions-item label="娼滃湪鎹愮尞鑰呭鍚�">{{
+ assessmentData.name || assessmentData.donorName
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鎬у埆">
+ <dict-tag
+ :options="dict.type.sys_user_sex"
+ :value="assessmentData.sex"
+ />
+ </el-descriptions-item>
+ <el-descriptions-item label="骞撮緞"
+ >{{ assessmentData.age }}宀�</el-descriptions-item
+ >
+ <el-descriptions-item label="琛�鍨�">
+ {{ assessmentData.bloodtype }}
+ </el-descriptions-item>
+ <el-descriptions-item label="璇佷欢鍙风爜">{{
+ assessmentData.idcardno
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鐤剧梾璇婃柇">{{
+ assessmentData.diagnosisname
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鎵�鍦ㄥ尰鐤楁満鏋�">{{
+ assessmentData.treatmenthospitalname
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鍗忚皟鍛�">{{
+ assessmentData.coordinatorName
+ }}</el-descriptions-item>
+ <el-descriptions-item label="璇勪及鏃堕棿">{{
+ assessmentData.assessTime
+ }}</el-descriptions-item>
+ <el-descriptions-item label="璇勪及鐘舵��">
+ <el-tag :type="statusFilter(assessmentData.assessState)">
+ {{ statusTextFilter(assessmentData.assessState) }}
+ </el-tag>
+ </el-descriptions-item>
+ </el-descriptions>
+ </el-card>
+
+ <el-card class="organ-assessment-card">
+ <div slot="header" class="clearfix">
+ <span>鍣ㄥ畼璇勪及琛�</span>
+ <el-button
+ v-if="isCoordinator && allOrgansAssessed"
+ style="float: right; margin-left: 10px"
+ type="primary"
+ size="mini"
+ @click="handleCompleteAssessment"
+ :loading="saveLoading"
+ >
+ 纭瀹屾垚璇勪及
+ </el-button>
+ <span v-if="!isCoordinator" class="jstitle">
+ 褰撳墠瑙掕壊锛歿{ currentDepartment }}璇勪及浜哄憳
+ </span>
+ </div>
+
+ <!-- 鎹愮尞鍐冲畾琛ㄥ崟 -->
+ <el-form>
+ <el-form-item label-width="100px" label="鎹愮尞鍐冲畾">
+ <el-checkbox-group
+ v-model="organdecisionValues"
+ @change="handleOrganDecisionChange"
+ :disabled="!isEdit"
+ >
+ <el-checkbox
+ v-for="dict in dict.type.sys_Organ"
+ :key="dict.value"
+ :label="dict.value"
+ >{{ dict.label }}
+ </el-checkbox>
+ </el-checkbox-group>
+ <el-input
+ v-if="showOtherInput"
+ v-model="organdecisionOther"
+ placeholder="璇疯緭鍏ュ叾浠栨崘鐚喅瀹氱殑鍏蜂綋鍐呭"
+ style="margin-top: 10px; width: 300px;"
+ :readonly="!isEdit"
+ @input="handleOtherDecisionInput"
+ ></el-input>
+ </el-form-item>
+ </el-form>
+
+ <!-- 鍣ㄥ畼璇勪及琛ㄦ牸 -->
+ <el-table
+ :data="filteredOrganAssessmentList"
+ v-loading="assessmentLoading"
+ style="width: 100%"
+ :row-class-name="getRowClassName"
+ :expand-row-keys="expandedRowKeys"
+ @expand-change="handleExpandChange"
+ row-key="organno"
+ empty-text="褰撳墠鎹愮尞鍐冲畾涓嬫殏鏃犻渶瑕佽瘎浼扮殑鍣ㄥ畼"
+ >
+ <el-table-column type="expand">
+ <template slot-scope="scope">
+ <div class="organ-expand-content" v-if="scope.row.expanded">
+ <el-tabs
+ v-model="scope.row.activeTab"
+ type="card"
+ class="organ-detail-tabs"
+ @tab-click="handleTabClick(scope.row, $event)"
+ >
+ <!-- 鍔ㄦ�佺敓鎴愯瘎浼癟ab -->
+ <el-tab-pane
+ v-for="(assessment, index) in scope.row.assessments"
+ :key="`${scope.row.organno}_${index}`"
+ :label="`绗�${index + 1}娆¤瘎浼癭"
+ :name="`assessment_${index}`"
+ >
+ <organ-assessment-form
+ :organ-data="scope.row"
+ :assessment-data="assessment"
+ :assessment-index="index"
+ :readonly="!canAssessOrgan(scope.row)"
+ @update-assessment="handleUpdateAssessment"
+ @delete-assessment="handleDeleteAssessment"
+ />
+ </el-tab-pane>
+
+ <!-- 娣诲姞璇勪及鎸夐挳 -->
+ <el-tab-pane
+ name="add"
+ v-if="canAssessOrgan(scope.row) && isEdit"
+ >
+ <template slot="label">
+ <el-button
+ type="text"
+ icon="el-icon-plus"
+ @click.stop="handleAddNewAssessment(scope.row)"
+ size="mini"
+ >
+ 鏂板璇勪及
+ </el-button>
+ </template>
+ <div class="add-assessment-prompt">
+ <el-empty description="鐐瑰嚮涓婃柟鎸夐挳娣诲姞鏂扮殑璇勪及"></el-empty>
+ </div>
+ </el-tab-pane>
+
+ <!-- 璇勪及姹囨�籘ab -->
+ <el-tab-pane label="璇勪及姹囨��" name="summary">
+ <div class="assessment-summary">
+ <el-descriptions title="璇勪及缁撴灉姹囨��" :column="2" border>
+ <el-descriptions-item label="鍣ㄥ畼绫诲瀷">{{
+ getOrganLabel(scope.row.organno)
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鑾峰彇鏈烘瀯">{{
+ scope.row.gainhospitalname
+ }}</el-descriptions-item>
+ <el-descriptions-item label="璇勪及娆℃暟" :span="2">
+ <el-tag type="info"
+ >{{ scope.row.assessments.length }}娆�</el-tag
+ >
+ </el-descriptions-item>
+ <el-descriptions-item label="鏈�鏂拌瘎浼版椂闂�" :span="2">
+ {{ getLatestAssessmentTime(scope.row) || "-" }}
+ </el-descriptions-item>
+ </el-descriptions>
+
+ <!-- 璇勪及璇︽儏姹囨�� -->
+ <el-card header="璇勪及璇︽儏" style="margin-top: 20px;">
+ <el-descriptions :column="1" border>
+ <el-descriptions-item label="鑾峰彇鍓嶆椿妫�">
+ <el-tag
+ :type="
+ scope.row.isbiopsybefore === '1'
+ ? 'success'
+ : 'info'
+ "
+ >
+ {{ scope.row.isbiopsybefore === "1" ? "鏄�" : "鍚�" }}
+ </el-tag>
+ </el-descriptions-item>
+ <el-descriptions-item label="鑾峰彇鍚庢椿妫�">
+ <el-tag
+ :type="
+ scope.row.isbiopsyafter === '1'
+ ? 'success'
+ : 'info'
+ "
+ >
+ {{ scope.row.isbiopsyafter === "1" ? "鏄�" : "鍚�" }}
+ </el-tag>
+ </el-descriptions-item>
+ <el-descriptions-item label="杈圭紭鍣ㄥ畼">
+ <el-tag
+ :type="
+ scope.row.ismarginalorgan === '1'
+ ? 'warning'
+ : 'info'
+ "
+ >
+ {{
+ scope.row.ismarginalorgan === "1" ? "鏄�" : "鍚�"
+ }}
+ </el-tag>
+ </el-descriptions-item>
+ <el-descriptions-item label="鐥呭師鑿岄槼鎬�">
+ <el-tag
+ :type="
+ scope.row.ispathogenpositive === '1'
+ ? 'danger'
+ : 'info'
+ "
+ >
+ {{
+ scope.row.ispathogenpositive === "1" ? "鏄�" : "鍚�"
+ }}
+ </el-tag>
+ </el-descriptions-item>
+ </el-descriptions>
+ </el-card>
+ </div>
+ </el-tab-pane>
+ </el-tabs>
+ </div>
+ </template>
+ </el-table-column>
+
+ <el-table-column label="鍣ㄥ畼绫诲瀷" align="center" prop="organname">
+ <template slot-scope="scope">
+ {{ getOrganLabel(scope.row.organno) }}
+ </template>
+ </el-table-column>
+
+ <el-table-column label="鍣ㄥ畼缂栧彿" align="center" prop="organnumber" />
+
+ <el-table-column
+ label="鑾峰彇鏈烘瀯"
+ align="center"
+ prop="gainhospitalname"
+ show-overflow-tooltip
+ />
+
+ <!-- 鍔ㄦ�佹樉绀鸿瘎浼扮姸鎬佸垪 -->
+ <el-table-column
+ v-for="(assessment, index) in getMaxAssessmentCount()"
+ :key="index"
+ :label="`绗�${index + 1}娆¤瘎浼癭"
+ align="center"
+ width="120"
+ >
+ <template slot-scope="scope">
+ <el-tag
+ v-if="scope.row.assessments[index]"
+ :type="getAssessmentTagType(scope.row.assessments[index].status)"
+ size="small"
+ >
+ {{ getAssessmentStatusText(scope.row.assessments[index].status) }}
+ </el-tag>
+ <el-tag v-else type="info" size="small">鏈瘎浼�</el-tag>
+ </template>
+ </el-table-column>
+
+ <el-table-column label="鏁翠綋鐘舵��" align="center" width="100">
+ <template slot-scope="scope">
+ <el-tag
+ :type="
+ getOrganOverallStatus(scope.row) === 'completed'
+ ? 'success'
+ : getOrganOverallStatus(scope.row) === 'assessing'
+ ? 'primary'
+ : 'warning'
+ "
+ size="small"
+ >
+ {{ getOrganOverallStatusText(scope.row) }}
+ </el-tag>
+ </template>
+ </el-table-column>
+
+ <el-table-column
+ label="鎿嶄綔"
+ align="center"
+ width="150"
+ class-name="small-padding fixed-width"
+ >
+ <template slot-scope="scope">
+ <el-button
+ v-if="canAssessOrgan(scope.row) && isEdit"
+ size="mini"
+ type="text"
+ @click="handleToggleExpand(scope.row)"
+ >
+ {{
+ expandedRowKeys.includes(scope.row.organno) ? "鏀惰捣" : "璇︽儏"
+ }}
+ </el-button>
+ <el-button
+ v-else-if="!isEdit"
+ size="mini"
+ type="text"
+ @click="handleToggleExpand(scope.row)"
+ >
+ {{
+ expandedRowKeys.includes(scope.row.organno) ? "鏀惰捣" : "鏌ョ湅"
+ }}
+ </el-button>
+ <el-button v-else size="mini" type="text" disabled
+ >鏃犳潈闄�</el-button
+ >
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-card>
+
+ <!-- 鏁翠綋淇濆瓨鎸夐挳 -->
+ <div class="footer-actions" v-if="isEdit">
+ <el-button type="primary" @click="handleSaveAll" :loading="saveLoading"
+ >淇濆瓨璇勪及琛�</el-button
+ >
+ <el-button @click="handleCancel">鍙栨秷</el-button>
+ </div>
+
+ <!-- 鏂囦欢棰勮寮圭獥 -->
+ <FilePreviewDialog
+ :visible="attachmentVisible"
+ :file="currentPreviewFile"
+ @close="attachmentVisible = false"
+ />
+ </div>
+</template>
+
+<script>
+import {
+ evaluateBaseInfolist,
+ assessedit,
+ assessAdd
+} from "@/api/businessApi/index";
+import FilePreviewDialog from "@/components/FilePreviewDialog";
+import OrganAssessmentForm from "./components/OrganAssessmentForm.vue";
+
+export default {
+ name: "AssessmentDetail",
+ components: { OrganAssessmentForm, FilePreviewDialog },
+ dicts: ["sys_user_sex", "sys_Organ", "sys_0_1"],
+ data() {
+ return {
+ // 鏄惁缂栬緫妯″紡
+ isEdit: false,
+ // 鍔犺浇鐘舵��
+ assessmentLoading: false,
+ saveLoading: false,
+ // 鏁版嵁ID
+ infoid: undefined,
+ assessmentId: undefined,
+ // 涓昏鏁版嵁
+ assessmentData: {},
+ organAssessmentList: [], // 鎵�鏈夊櫒瀹樻暟鎹�
+ // 灞曞紑琛岀浉鍏�
+ expandedRowKeys: [],
+ // 闄勪欢鐩稿叧
+ currentPreviewFile: null,
+ attachmentVisible: false,
+ // 鎹愮尞鍐冲畾鐩稿叧
+ organdecisionValues: [], // 瀛樺偍瀛楀吀value
+ organdecisionOther: "",
+ // 璁板綍鎹愮尞鍐冲畾鍙樺寲鍓嶇殑鍊�
+ prevOrgandecisionValues: [],
+ // 鍣ㄥ畼绫诲瀷鏄犲皠鍏崇郴
+ organDecisionMapping: {
+ // 浣跨敤瀛楀吀value浣滀负key
+ C38: ["C38"], // 蹇冭剰 -> 蹇冭剰
+ C22: ["C22"], // 鍏ㄨ倽 -> 鍏ㄨ倽
+ C22L: ["C22L"], // 宸﹀崐鑲� -> 宸﹀崐鑲�
+ C22L0: ["C22L0"], // 宸﹀鍙� -> 宸﹀鍙�
+ C22R: ["C22R"], // 鍙冲崐鑲� -> 鍙冲崐鑲�
+ C22R0: ["C22R0"], // 鍙充笁鍙� -> 鍙充笁鍙�
+ C64: ["C64L", "C64R"], // 鍙岃偩 -> 宸﹁偩, 鍙宠偩
+ C64L: ["C64L"], // 宸﹁偩 -> 宸﹁偩
+ C64R: ["C64R"], // 鍙宠偩 -> 鍙宠偩
+ C34: ["C34L", "C34R"], // 鍏ㄨ偤 -> 宸﹁偤, 鍙宠偤
+ C34L: ["C34L"], // 宸﹁偤 -> 宸﹁偤
+ C34R: ["C34R"], // 鍙宠偤 -> 鍙宠偤
+ C17: ["C17"], // 灏忚偁 -> 灏忚偁
+ C25: ["C25"], // 鑳拌吅 -> 鑳拌吅
+ C00: [], // 閬椾綋 -> 涓嶆槧灏勫叿浣撳櫒瀹橈紙閬椾綋鏄暣浣擄級
+ C69L: ["C69L"], // 宸︾溂瑙掕啘 -> 宸︾溂瑙掕啘
+ C69R: ["C69R"], // 鍙崇溂瑙掕啘 -> 鍙崇溂瑙掕啘
+ C01: [] // 鍏朵粬 -> 涓嶆槧灏勫叿浣撳櫒瀹�
+ },
+ // 鐢ㄦ埛淇℃伅
+ currentUser: {
+ id: "001",
+ name: "寮犲尰鐢�",
+ department: "蹇冭剰绉�",
+ role: "coordinator" // coordinator, doctor
+ },
+ // 璁板綍琚垹闄ょ殑鍣ㄥ畼璇勪及
+ deletedOrganAssessments: [],
+ // 鐢ㄤ簬杩借釜tab婵�娲荤姸鎬�
+ activeTabMap: new Map()
+ };
+ },
+ computed: {
+ isCoordinator() {
+ return this.currentUser.role === "coordinator";
+ },
+ currentDepartment() {
+ return this.currentUser.department;
+ },
+ // 鏍规嵁鎹愮尞鍐冲畾杩囨护鍚庣殑鍣ㄥ畼鍒楄〃
+ filteredOrganAssessmentList() {
+ if (!this.organdecisionValues || this.organdecisionValues.length === 0) {
+ return [];
+ }
+
+ // 鑾峰彇鎵�鏈夐�変腑鐨勫櫒瀹樼被鍨�
+ const selectedOrgans = new Set();
+ this.organdecisionValues.forEach(decision => {
+ const organs = this.organDecisionMapping[decision] || [];
+ organs.forEach(organ => selectedOrgans.add(organ));
+ });
+
+ // 杩囨护鍣ㄥ畼璇勪及鍒楄〃锛屾帓闄よ鍒犻櫎鐨勫櫒瀹樿瘎浼�
+ return this.organAssessmentList.filter(
+ organ =>
+ selectedOrgans.has(organ.organno) &&
+ organ.delFlag !== "1" &&
+ !this.deletedOrganAssessments.includes(organ.organno)
+ );
+ },
+ // 妫�鏌ユ墍鏈夎繃婊ゅ悗鐨勫櫒瀹樻槸鍚﹂兘宸茶瘎浼�
+ allOrgansAssessed() {
+ return this.filteredOrganAssessmentList.every(
+ organ =>
+ organ.assessments &&
+ organ.assessments.length > 0 &&
+ organ.assessments.every(
+ assessment => assessment.status === "assessed"
+ )
+ );
+ },
+ // 鑾峰彇鍣ㄥ畼瀛楀吀
+ organDict() {
+ return this.dict.type.sys_Organ || [];
+ },
+ // 鍒ゆ柇鏄惁闇�瑕佹樉绀哄叾浠栬緭鍏ユ
+ showOtherInput() {
+ return this.organdecisionValues.includes("C01"); // 瀛楀吀涓叾浠栫殑value
+ }
+ },
+ watch: {
+ // 鐩戝惉鎹愮尞鍐冲畾鍙樺寲锛岀敤浜庡鏉傞�昏緫澶勭悊
+ organdecisionValues: {
+ handler(newVal, oldVal) {
+ this.handleComplexDecisionChange(newVal, oldVal);
+ },
+ deep: true
+ }
+ },
+ created() {
+ this.infoid = this.$route.query.infoid;
+ this.assessmentId = this.$route.query.id;
+ this.isEdit = this.$route.query.assess === "true";
+ this.getAssessmentDetail();
+ },
+ methods: {
+ // 鏍规嵁瀛楀吀value鑾峰彇label
+ getOrganLabel(organValue) {
+ const dictItem = this.organDict.find(item => item.value === organValue);
+ return dictItem ? dictItem.label : organValue;
+ },
+
+ // Tab鐐瑰嚮浜嬩欢
+ handleTabClick(organ, tab) {
+ if (tab.name !== "add") {
+ this.activeTabMap.set(organ.organno, tab.name);
+ }
+ },
+
+ // 澶勭悊璇勪及鏇存柊
+ handleUpdateAssessment(data) {
+ const { organData, assessmentData, assessmentIndex } = data;
+ if (organData.assessments[assessmentIndex]) {
+ this.$set(organData.assessments, assessmentIndex, {
+ ...organData.assessments[assessmentIndex],
+ ...assessmentData
+ });
+ }
+ },
+
+ // 鏁翠綋淇濆瓨鏂规硶
+ async handleSaveAll() {
+ this.saveLoading = true;
+ try {
+ // 1. 鍑嗗涓昏瘎浼拌〃鏁版嵁
+ const saveData = {
+ // 鏍规嵁 id 鏄惁瀛樺湪鍐冲畾鏄洿鏂拌繕鏄柊澧�
+ id: this.assessmentData.id || undefined,
+ infoid: this.infoid,
+ caseNo: this.assessmentData.caseNo,
+ donorno: this.assessmentData.donorno,
+ treatmenthospitalname: this.assessmentData.treatmenthospitalname,
+ treatmenthospitalno: this.assessmentData.treatmenthospitalno,
+ sex: this.assessmentData.sex,
+ age: this.assessmentData.age,
+ bloodtype: this.assessmentData.bloodtype,
+ idcardno: this.assessmentData.idcardno,
+ diagnosisname: this.assessmentData.diagnosisname,
+ coordinatorName: this.assessmentData.coordinatorName,
+ assessTime:
+ this.assessmentData.assessTime || new Date().toISOString(),
+ assessState: this.assessmentData.assessState,
+ assessannex: this.assessmentData.assessannex,
+ // 鎹愮尞鍐冲畾淇℃伅
+ organdecision: this.organdecisionValues.join(","),
+ organdecisionOther: this.organdecisionOther,
+ // 鍣ㄥ畼璇勪及鍒楄〃
+ serviceMedicalevaluationorganList: this.organAssessmentList.map(
+ organ => ({
+ id: organ.id,
+ infoid: organ.infoid,
+ donorno: organ.donorno,
+ organno: organ.organno,
+ organname: this.getOrganLabel(organ.organno), // 淇濆瓨label
+ organnumber: organ.organnumber,
+ gainhospitalno: organ.gainhospitalno,
+ gainhospitalname: organ.gainhospitalname,
+ isbiopsybefore: organ.isbiopsybefore,
+ isbiopsyafter: organ.isbiopsyafter,
+ ismarginalorgan: organ.ismarginalorgan,
+ ispathogenpositive: organ.ispathogenpositive,
+ ispnf: organ.ispnf,
+ isdgf: organ.isdgf,
+ delFlag: organ.delFlag || "0", // 淇濆瓨鍒犻櫎鏍囧織
+ // 灏� assessments 鏁扮粍搴忓垪鍖栧埌 assesscontent 瀛楁
+ assesscontent: JSON.stringify(organ.assessments)
+ })
+ )
+ };
+
+ // 2. 鏍规嵁 id 鍒ゆ柇璋冪敤鍝釜 API
+ const saveMethod = this.assessmentData.id ? assessedit : assessAdd;
+ const response = await saveMethod(saveData);
+
+ if (response.code === 200) {
+ this.$message.success("璇勪及琛ㄤ繚瀛樻垚鍔燂紒");
+ // 淇濆瓨鎴愬姛鍚庯紝鏇存柊鏈湴鐨� assessmentData.id锛堝浜庢柊澧炴儏鍐碉級
+ if (!this.assessmentData.id && response.data && response.data.id) {
+ this.assessmentData.id = response.data.id;
+ }
+ } else {
+ this.$message.error("淇濆瓨澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+ }
+ } catch (error) {
+ console.error("淇濆瓨璇勪及琛ㄥけ璐�:", error);
+ this.$message.error("淇濆瓨澶辫触锛岃閲嶈瘯");
+ } finally {
+ this.saveLoading = false;
+ }
+ },
+
+ // 鍙栨秷鎸夐挳浜嬩欢
+ handleCancel() {
+ this.$router.go(-1);
+ },
+
+ // 鎹愮尞鍐冲畾鍙樻洿澶勭悊
+ async handleOrganDecisionChange(newDecision) {
+ // 璁板綍鍙樻洿鍓嶇殑鍊�
+ const oldDecision = [...this.prevOrgandecisionValues];
+
+ // 鑷姩澶勭悊鐩稿叧閫昏緫
+ this.autoHandleDecisionChange(newDecision);
+
+ // 澶勭悊绉婚櫎鐨勫喅绛�
+ const removedDecisions = oldDecision.filter(
+ item => !newDecision.includes(item)
+ );
+
+ // 瀵规瘡涓Щ闄ょ殑鍐冲畾澶勭悊鐩稿叧鍣ㄥ畼鍒犻櫎
+ for (const decision of removedDecisions) {
+ await this.handleRemovedDecision(decision);
+ }
+
+ // 鏇存柊鍙樻洿鍓嶇殑璁板綍
+ this.prevOrgandecisionValues = [...newDecision];
+
+ // 寮哄埗閲嶆柊娓叉煋
+ this.$forceUpdate();
+
+ // 濡傛灉浠庢湁閫夋嫨鍙樹负鏃犻�夋嫨锛屾竻绌哄睍寮�鐘舵��
+ if (newDecision.length === 0) {
+ this.expandedRowKeys = [];
+ }
+ },
+
+ // 鍏朵粬鎹愮尞鍐冲畾杈撳叆澶勭悊
+ handleOtherDecisionInput(value) {
+ // 杈撳叆鏃朵笉鍋氬崟鐙繚瀛橈紝绛夊緟鏁翠綋淇濆瓨
+ },
+
+ // 鑷姩澶勭悊鍐冲畾鍙樻洿閫昏緫
+ autoHandleDecisionChange(newDecision) {
+ // 濡傛灉閫夋嫨浜�"鍙岃偩"(value: C64)锛岃嚜鍔ㄥ彇娑堝崟鐙殑"宸﹁偩"(value: C64L)鍜�"鍙宠偩"(value: C64R)閫夋嫨
+ if (newDecision.includes("C64")) {
+ this.organdecisionValues = newDecision.filter(
+ item => item !== "C64L" && item !== "C64R"
+ );
+ }
+ // 濡傛灉閫夋嫨浜�"宸﹁偩"鎴�"鍙宠偩"锛屽彇娑�"鍙岃偩"閫夋嫨
+ else if (newDecision.includes("C64L") || newDecision.includes("C64R")) {
+ this.organdecisionValues = newDecision.filter(item => item !== "C64");
+ }
+
+ // 濡傛灉閫夋嫨浜�"鍏ㄨ偤"(value: C34)锛岃嚜鍔ㄥ彇娑堝崟鐙殑"宸﹁偤"(value: C34L)鍜�"鍙宠偤"(value: C34R)閫夋嫨
+ if (newDecision.includes("C34")) {
+ this.organdecisionValues = newDecision.filter(
+ item => item !== "C34L" && item !== "C34R"
+ );
+ }
+ // 濡傛灉閫夋嫨浜�"宸﹁偤"鎴�"鍙宠偤"锛屽彇娑�"鍏ㄨ偤"閫夋嫨
+ else if (newDecision.includes("C34L") || newDecision.includes("C34R")) {
+ this.organdecisionValues = newDecision.filter(item => item !== "C34");
+ }
+
+ // 澶勭悊鍏朵粬浜掓枼閫昏緫
+ this.handleExclusiveDecisions();
+ },
+
+ // 澶勭悊浜掓枼鐨勬崘鐚喅瀹�
+ handleExclusiveDecisions() {
+ // 閬椾綋鎹愮尞(value: 10)涓庡叾浠栧櫒瀹樻崘鐚簰鏂ワ紙鏍规嵁涓氬姟闇�姹傝皟鏁达級
+ if (this.organdecisionValues.includes("10")) {
+ // 鍙互璁剧疆鍙繚鐣欓仐浣撴崘鐚紝鎴栬�呮牴鎹笟鍔¢渶姹傚鐞�
+ }
+ },
+
+ // 澶嶆潅鍐崇瓥鍙樺寲澶勭悊
+ handleComplexDecisionChange(newVal, oldVal) {
+ // 澶勭悊鏂板鐨勯�夋嫨
+ const addedDecisions = newVal.filter(item => !oldVal.includes(item));
+
+ // 瀵规柊澧炲姞鐨勯�夋嫨杩涜鐗规畩澶勭悊
+ addedDecisions.forEach(decision => {
+ this.handleNewDecision(decision);
+ });
+ },
+
+ // 澶勭悊鏂板鐨勬崘鐚喅瀹�
+ handleNewDecision(decision) {
+ // 鏍规嵁鏄犲皠鍏崇郴鑷姩鍒涘缓瀵瑰簲鐨勫櫒瀹樿瘎浼伴」
+ this.autoCreateOrganAssessments(decision);
+ },
+
+ // 鑷姩鍒涘缓鍣ㄥ畼璇勪及椤�
+ autoCreateOrganAssessments(decision) {
+ const organsToCreate = this.organDecisionMapping[decision];
+
+ if (organsToCreate && organsToCreate.length > 0) {
+ organsToCreate.forEach(organValue => {
+ this.ensureOrganExists(organValue);
+ });
+
+ // 鏄剧ず鍒涘缓鎻愮ず
+ if (organsToCreate.length > 0) {
+ this.$message.success(
+ `宸蹭负銆�${this.getOrganLabel(decision)}銆戝垱寤�${
+ organsToCreate.length
+ }涓瘎浼伴」`
+ );
+ }
+ } else {
+ console.warn(
+ `鎹愮尞鍐冲畾銆�${this.getOrganLabel(decision)}銆戞病鏈夐厤缃櫒瀹樻槧灏勫叧绯籤
+ );
+ }
+ },
+
+ // 澶勭悊绉婚櫎鐨勬崘鐚喅瀹�
+ async handleRemovedDecision(decision) {
+ const relatedOrgans = this.organDecisionMapping[decision] || [];
+
+ for (const organValue of relatedOrgans) {
+ // 鏌ユ壘瀵瑰簲鐨勫櫒瀹樿瘎浼伴」
+ const organIndex = this.organAssessmentList.findIndex(
+ organ => organ.organno === organValue && organ.delFlag !== "1"
+ );
+
+ if (organIndex !== -1) {
+ const organ = this.organAssessmentList[organIndex];
+ const organLabel = this.getOrganLabel(organValue);
+
+ try {
+ await this.$confirm(
+ `鎹愮尞鍐冲畾"${this.getOrganLabel(
+ decision
+ )}"宸插彇娑堬紝鏄惁鍒犻櫎瀵瑰簲鐨�${organLabel}璇勪及璁板綍锛焋,
+ "纭鍒犻櫎",
+ {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ }
+ );
+
+ // 鏍囪涓哄垹闄�
+ this.$set(this.organAssessmentList[organIndex], "delFlag", "1");
+ this.deletedOrganAssessments.push(organValue);
+
+ // 浠庡睍寮�琛屼腑绉婚櫎
+ const keyIndex = this.expandedRowKeys.indexOf(organValue);
+ if (keyIndex > -1) {
+ this.expandedRowKeys.splice(keyIndex, 1);
+ }
+
+ this.$message.success(`${organLabel}璇勪及璁板綍宸叉爣璁板垹闄);
+ } catch (cancelError) {
+ // 鐢ㄦ埛鍙栨秷鍒犻櫎锛屾仮澶嶉�夋嫨
+ if (!this.organdecisionValues.includes(decision)) {
+ this.organdecisionValues.push(decision);
+ }
+ this.$message.info(`宸插彇娑堝垹闄�${organLabel}璇勪及璁板綍`);
+ }
+ }
+ }
+ },
+
+ // 纭繚鍣ㄥ畼瀛樺湪锛堝甫閲嶅妫�鏌ワ級
+ ensureOrganExists(organValue) {
+ // 妫�鏌ユ槸鍚﹀凡瀛樺湪鍚岀紪鍙风殑鍣ㄥ畼璇勪及椤�
+ const exists = this.organAssessmentList.some(
+ organ => organ.organno === organValue && organ.delFlag !== "1"
+ );
+
+ if (!exists) {
+ // 鍒涘缓鏂扮殑鍣ㄥ畼璇勪及椤�
+ const newOrgan = {
+ id: null,
+ organno: organValue, // 浣跨敤瀛楀吀value
+ organname: this.getOrganLabel(organValue), // 浣跨敤瀛楀吀label
+ gainhospitalname: "寰呭垎閰嶆満鏋�",
+ isbiopsybefore: "0",
+ isbiopsyafter: "0",
+ ismarginalorgan: "0",
+ ispathogenpositive: "0",
+ assessments: [this.getDefaultAssessment(0)],
+ activeTab: "assessment_0", // 缁熶竴浣跨敤activeTab
+ expanded: false,
+ createTime: new Date().toISOString(),
+ delFlag: "0"
+ };
+
+ this.organAssessmentList = [...this.organAssessmentList, newOrgan];
+ return true;
+ }
+ return false;
+ },
+
+ // 鑾峰彇璇勪及璇︽儏
+ async getAssessmentDetail() {
+ this.assessmentLoading = true;
+ try {
+ const response = await evaluateBaseInfolist({ infoid: this.infoid });
+
+ if (response.code === 200) {
+ this.handleResponseData(response);
+ } else {
+ this.$message.error("鑾峰彇璇︽儏澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+ }
+ } catch (error) {
+ console.error("鑾峰彇璇勪及璇︽儏澶辫触:", error);
+ this.$message.error("鑾峰彇璇︽儏澶辫触");
+ } finally {
+ this.assessmentLoading = false;
+ }
+ },
+
+ // 澶勭悊鎺ュ彛鍝嶅簲鏁版嵁
+ handleResponseData(response) {
+ let detailData = null;
+
+ // 鏍规嵁鎺ュ彛瀹為檯杩斿洖鐨勬暟鎹粨鏋勮繘琛岃皟鏁�
+ if (response.data) {
+ if (Array.isArray(response.data)) {
+ detailData = response.data[0] || {};
+ } else if (response.data.rows && Array.isArray(response.data.rows)) {
+ detailData = response.data.rows[0] || {};
+ } else if (Array.isArray(response.data.list)) {
+ detailData = response.data.list[0] || {};
+ } else {
+ detailData = response.data;
+ }
+ } else {
+ detailData = response;
+ }
+
+ // 鏄犲皠瀛楁鍒拌瘎浼版暟鎹�
+ this.assessmentData = {
+ id: detailData.id || this.assessmentId,
+ infoid: detailData.infoid || this.infoid,
+ caseNo: detailData.caseNo || "",
+ name: detailData.name || detailData.donorName || "",
+ sex: detailData.sex || "",
+ age: detailData.age || "",
+ bloodtype: detailData.bloodtype || "",
+ idcardno: detailData.idcardno || "",
+ diagnosisname: detailData.diagnosisname || "",
+ treatmenthospitalname: detailData.treatmenthospitalname || "",
+ coordinatorName: detailData.coordinatorName || "",
+ assessTime: detailData.assessTime || "",
+ assessState: detailData.assessState || "1",
+ assessannex: detailData.assessannex || ""
+ };
+
+ // 澶勭悊鎹愮尞鍐冲畾鏁版嵁
+ if (detailData.organdecision) {
+ const decisionArray = Array.isArray(detailData.organdecision)
+ ? detailData.organdecision
+ : (detailData.organdecision || "").split(",").filter(item => item);
+
+ this.organdecisionValues = decisionArray;
+ this.prevOrgandecisionValues = [...decisionArray]; // 鍒濆鍖杙revOrgandecisionValues
+ this.organdecisionOther = detailData.organdecisionOther || "";
+ }
+
+ // 澶勭悊鍣ㄥ畼璇勪及鏁版嵁
+ this.processOrganAssessmentData(detailData);
+ },
+
+ // 澶勭悊鍣ㄥ畼璇勪及鏁版嵁
+ processOrganAssessmentData(detailData) {
+ let organList = [];
+
+ // 浠庢帴鍙f暟鎹腑鑾峰彇鍣ㄥ畼璇勪及鍒楄〃
+ if (detailData.serviceMedicalevaluationorganList) {
+ if (Array.isArray(detailData.serviceMedicalevaluationorganList)) {
+ organList = detailData.serviceMedicalevaluationorganList;
+ }
+ }
+
+ // 杞崲鍣ㄥ畼鏁版嵁鏍煎紡锛屾敮鎸佸娆¤瘎浼�
+ this.organAssessmentList = organList.map(organ => {
+ let assessments = [];
+
+ // 瑙f瀽assesscontent瀛楁涓殑澶氭璇勪及鏁版嵁
+ if (organ.assesscontent) {
+ try {
+ const assessData =
+ typeof organ.assesscontent === "string"
+ ? JSON.parse(organ.assesscontent)
+ : organ.assesscontent;
+ console.log(assessData, "assessData");
+
+ if (Array.isArray(assessData)) {
+ // 杩囨护鎺夊凡鍒犻櫎鐨勮瘎浼�
+ const validAssessments = assessData.filter(
+ item => item.delFlag !== "1"
+ );
+ console.log(validAssessments,'validAssessments');
+
+ // assessments.push(
+ // ...validAssessments.map((item, index) => ({
+ // ...item,
+ // index: index,
+ // status: item.status || "assessed",
+ // delFlag: item.delFlag || "0"
+ // }))
+ // );
+ assessments = validAssessments;
+ }
+ } catch (error) {
+ console.warn("瑙f瀽璇勪及鍐呭澶辫触:", error);
+ assessments.push(this.getDefaultAssessment(0));
+ }
+ } else {
+ assessments.push(this.getDefaultAssessment(0));
+ }
+
+ const organno = organ.organno;
+ const activeTab = this.activeTabMap.has(organno)
+ ? this.activeTabMap.get(organno)
+ : assessments.length > 0
+ ? "assessment_0"
+ : "summary";
+
+ return {
+ ...organ,
+ // 纭繚organname浣跨敤瀛楀吀label
+ organname: this.getOrganLabel(organ.organno) || organ.organname,
+ assessments: assessments,
+ activeTab: activeTab,
+ expanded: false,
+ delFlag: organ.delFlag || "0"
+ };
+ });
+ console.log(this.organAssessmentList, "this.organAssessmentList");
+ },
+
+ // 鑾峰彇榛樿璇勪及鏁版嵁缁撴瀯
+ getDefaultAssessment(index) {
+ return {
+ index: index,
+ status: "pending",
+ assessmentTime: "",
+ assessor: "",
+ functionStatus: "",
+ assessmentOpinion: "",
+ clinicalData: {},
+ labResults: {},
+ createTime: new Date().toISOString(),
+ delFlag: "0"
+ };
+ },
+
+ // 璁$畻鏈�澶ц瘎浼版鏁�
+ getMaxAssessmentCount() {
+ const maxCount = Math.max(
+ ...this.organAssessmentList
+ .filter(organ => organ.delFlag !== "1")
+ .map(organ => (organ.assessments ? organ.assessments.length : 0))
+ );
+ return Math.max(maxCount, 1);
+ },
+
+ // 鑾峰彇鍣ㄥ畼鏁翠綋鐘舵��
+ getOrganOverallStatus(organ) {
+ if (!organ.assessments || organ.assessments.length === 0) {
+ return "pending";
+ }
+
+ const validAssessments = organ.assessments.filter(a => a.delFlag !== "1");
+ if (validAssessments.length === 0) {
+ return "pending";
+ }
+
+ const allAssessed = validAssessments.every(
+ assessment => assessment.status === "assessed"
+ );
+ const someAssessed = validAssessments.some(
+ assessment => assessment.status === "assessed"
+ );
+
+ if (allAssessed) return "completed";
+ if (someAssessed) return "assessing";
+ return "pending";
+ },
+
+ getOrganOverallStatusText(organ) {
+ const status = this.getOrganOverallStatus(organ);
+ const statusMap = {
+ pending: "寰呰瘎浼�",
+ assessing: "璇勪及涓�",
+ completed: "宸插畬鎴�"
+ };
+ return statusMap[status] || "鏈煡";
+ },
+
+ // 鍒囨崲灞曞紑琛�
+ handleToggleExpand(row) {
+ const key = row.organno;
+ const index = this.expandedRowKeys.indexOf(key);
+
+ if (index > -1) {
+ this.expandedRowKeys.splice(index, 1);
+ row.expanded = false;
+ } else {
+ this.expandedRowKeys = [key];
+ this.organAssessmentList.forEach(item => {
+ item.expanded = item.organno === key;
+ });
+ }
+ },
+
+ // 灞曞紑琛屽彉鍖�
+ handleExpandChange(row, expandedRows) {
+ this.expandedRowKeys = expandedRows.map(item => item.organno);
+ this.organAssessmentList.forEach(item => {
+ item.expanded = this.expandedRowKeys.includes(item.organno);
+ });
+ },
+
+ // 娣诲姞鏂拌瘎浼�
+ handleAddNewAssessment(organ) {
+ const newAssessment = {
+ ...this.getDefaultAssessment(organ.assessments.length),
+ assessor: this.currentUser.name
+ };
+
+ organ.assessments.push(newAssessment);
+ // 鍒囨崲鍒版柊娣诲姞鐨勮瘎浼皌ab
+ organ.activeTab = `assessment_${organ.assessments.length - 1}`;
+ this.activeTabMap.set(organ.organno, organ.activeTab);
+
+ this.$message.success("宸叉坊鍔犳柊鐨勮瘎浼�");
+ },
+
+ // 澶勭悊璇勪及鏇存柊浜嬩欢
+ handleUpdateAssessment(data) {
+ const { organData, assessmentData, assessmentIndex } = data;
+ if (organData.assessments[assessmentIndex]) {
+ this.$set(organData.assessments, assessmentIndex, {
+ ...organData.assessments[assessmentIndex],
+ ...assessmentData
+ });
+ }
+ },
+
+ // 澶勭悊鍒犻櫎璇勪及浜嬩欢
+ handleDeleteAssessment(data) {
+ const { organData, assessmentIndex } = data;
+ this.deleteOrganAssessment(organData, assessmentIndex);
+ },
+
+ // 鍒犻櫎鍣ㄥ畼璇勪及
+ async deleteOrganAssessment(organ, assessmentIndex) {
+ try {
+ await this.$confirm(
+ `纭鍒犻櫎绗�${assessmentIndex + 1}娆¤瘎浼拌褰曞悧锛焋,
+ "纭鍒犻櫎",
+ {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ }
+ );
+
+ // 鏍囪璇勪及涓哄垹闄�
+ if (organ.assessments[assessmentIndex]) {
+ this.$set(organ.assessments[assessmentIndex], "delFlag", "1");
+
+ // 杩囨护鎺夊凡鍒犻櫎鐨勮瘎浼�
+ organ.assessments = organ.assessments.filter(
+ item => item.delFlag !== "1"
+ );
+
+ // 閲嶆柊璁$畻璇勪及绱㈠紩
+ organ.assessments.forEach((assessment, index) => {
+ assessment.index = index;
+ });
+
+ // 濡傛灉鍒犻櫎鍚庢病鏈夎瘎浼颁簡锛屾樉绀烘眹鎬婚〉
+ if (organ.assessments.length === 0) {
+ organ.activeTab = "summary";
+ this.activeTabMap.set(organ.organno, "summary");
+ } else if (organ.activeTab === `assessment_${assessmentIndex}`) {
+ // 濡傛灉褰撳墠婵�娲荤殑灏辨槸琚垹闄ょ殑tab锛屽垏鎹㈠埌鍓嶄竴涓�
+ const newIndex = Math.max(0, assessmentIndex - 1);
+ organ.activeTab = `assessment_${newIndex}`;
+ this.activeTabMap.set(organ.organno, `assessment_${newIndex}`);
+ } else if (organ.activeTab === "summary") {
+ this.activeTabMap.set(organ.organno, "summary");
+ }
+
+ this.$message.success("璇勪及璁板綍宸插垹闄�");
+ }
+ } catch (cancelError) {
+ // 鐢ㄦ埛鍙栨秷鍒犻櫎
+ this.$message.info("宸插彇娑堝垹闄�");
+ }
+ },
+
+ // 鑾峰彇鏈�鏂拌瘎浼版椂闂�
+ getLatestAssessmentTime(organ) {
+ if (!organ.assessments || organ.assessments.length === 0) return null;
+
+ const assessed = organ.assessments.filter(
+ a => a.assessmentTime && a.delFlag !== "1"
+ );
+ if (assessed.length === 0) return null;
+
+ return assessed.sort(
+ (a, b) => new Date(b.assessmentTime) - new Date(a.assessmentTime)
+ )[0].assessmentTime;
+ },
+
+ // 鑾峰彇璇勪及鐘舵�佹爣绛剧被鍨�
+ getAssessmentTagType(status) {
+ const typeMap = {
+ pending: "warning",
+ assessing: "primary",
+ assessed: "success"
+ };
+ return typeMap[status] || "info";
+ },
+
+ // 鑾峰彇璇勪及鐘舵�佹枃鏈�
+ getAssessmentStatusText(status) {
+ const textMap = {
+ pending: "寰呰瘎浼�",
+ assessing: "璇勪及涓�",
+ assessed: "宸茶瘎浼�"
+ };
+ return textMap[status] || "鏈煡";
+ },
+
+ // 妫�鏌ヨ瘎浼版潈闄�
+ canAssessOrgan(organ) {
+ if (this.isCoordinator) return true;
+ if (!this.isEdit) return false;
+ return (
+ organ.gainhospitalname &&
+ organ.gainhospitalname.includes(this.currentDepartment)
+ );
+ },
+
+ // 鑾峰彇琛岀被鍚�
+ getRowClassName({ row }) {
+ return this.canAssessOrgan(row) ? "assessable-row" : "non-assessable-row";
+ },
+
+ // 鐘舵�佽繃婊ゅ櫒
+ statusFilter(status) {
+ const statusMap = {
+ "1": "warning",
+ "2": "primary",
+ "3": "success"
+ };
+ return statusMap[status] || "info";
+ },
+
+ statusTextFilter(status) {
+ const statusMap = {
+ "1": "寰呰瘎浼�",
+ "2": "璇勪及涓�",
+ "3": "宸插畬鎴�"
+ };
+ return statusMap[status] || "鏈煡";
+ },
+
+ // 鏌ョ湅闄勪欢
+ handleAttachmentPreview() {
+ if (this.assessmentData.assessannex) {
+ try {
+ const annexData =
+ typeof this.assessmentData.assessannex === "string"
+ ? JSON.parse(this.assessmentData.assessannex)
+ : this.assessmentData.assessannex;
+
+ if (Array.isArray(annexData) && annexData.length > 0) {
+ this.currentPreviewFile = annexData[0];
+ this.attachmentVisible = true;
+ } else {
+ this.$message.info("鏆傛棤闄勪欢鍙瑙�");
+ }
+ } catch (error) {
+ this.$message.info("闄勪欢鏁版嵁鏍煎紡閿欒");
+ }
+ } else {
+ this.$message.info("鏆傛棤闄勪欢");
+ }
+ },
+
+ // 瀹屾垚璇勪及
+ async handleCompleteAssessment() {
+ try {
+ await this.$confirm(
+ "纭瀹屾垚鎵�鏈夊櫒瀹樿瘎浼板悧锛熷畬鎴愬悗灏嗘棤娉曚慨鏀�",
+ "纭鎿嶄綔",
+ {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ }
+ );
+
+ // 鏇存柊璇勪及鐘舵�佷负宸插畬鎴�
+ const updateData = {
+ ...this.assessmentData,
+ assessState: "3",
+ assessTime: new Date().toISOString()
+ };
+
+ const response = await assessedit(updateData);
+
+ if (response.code === 200) {
+ this.$message.success("璇勪及瀹屾垚纭鎴愬姛");
+ this.assessmentData.assessState = "3";
+ this.isEdit = false;
+ } else {
+ this.$message.error("鎿嶄綔澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+ }
+ } catch (error) {
+ if (error !== "cancel") {
+ console.error("瀹屾垚璇勪及澶辫触:", error);
+ this.$message.error("鎿嶄綔澶辫触");
+ }
+ }
+ }
+ }
+};
+</script>
+
+<style scoped>
+.assessment-detail {
+ padding: 20px;
+}
+
+.basic-info-card {
+ margin-bottom: 20px;
+}
+
+.organ-assessment-card {
+ margin-bottom: 20px;
+}
+
+/* 灞曞紑琛屾牱寮� */
+.organ-expand-content {
+ padding: 20px;
+ background: #fafafa;
+ border-radius: 4px;
+ margin: 10px 0;
+}
+
+.organ-detail-tabs {
+ background: white;
+ border-radius: 4px;
+ padding: 20px;
+}
+
+.add-assessment-prompt {
+ text-align: center;
+ padding: 40px 0;
+}
+
+.assessment-summary {
+ padding: 10px;
+}
+
+/* 搴曢儴淇濆瓨鎸夐挳鏍峰紡 */
+.footer-actions {
+ margin-top: 20px;
+ text-align: center;
+ padding: 20px;
+ border-top: 1px solid #eaeaea;
+}
+
+/* 鍝嶅簲寮忚璁� */
+@media (max-width: 768px) {
+ .assessment-detail {
+ padding: 10px;
+ }
+
+ .organ-expand-content {
+ padding: 10px;
+ }
+}
+
+::v-deep .assessable-row {
+ background-color: #f0f9ff;
+}
+
+::v-deep .non-assessable-row {
+ background-color: #fafafa;
+}
+
+.jstitle {
+ float: right;
+ font-size: 18px !important;
+ font-weight: 600;
+ color: #2645f7;
+ font-size: 12px;
+}
+
+/* 琛ㄦ牸灞曞紑鍥炬爣鏍峰紡 */
+::v-deep .el-table__expand-icon {
+ cursor: pointer;
+}
+
+::v-deep .el-table__expanded-cell {
+ padding: 0 !important;
+}
+
+/* 纭繚鎻忚堪鍒楄〃鏍囩瀹藉害涓�鑷� */
+::v-deep .el-descriptions__label {
+ width: 120px;
+ background-color: #f5f7fa;
+ font-weight: bold;
+}
+
+.fixed-width .el-button {
+ margin: 0 2px;
+}
+
+/* 鎹愮尞鍐冲畾鏍峰紡浼樺寲 */
+.organ-decision-info {
+ margin: 10px 0;
+ padding: 10px;
+ background-color: #f8f9fa;
+ border-radius: 4px;
+ border-left: 4px solid #409eff;
+}
+
+.decision-tag {
+ margin: 2px 5px;
+}
+</style>
diff --git a/src/views/business/assess/assessInfo.vue b/src/views/business/assess/assessInfo.vue
index e1d7ddf..36cdba3 100644
--- a/src/views/business/assess/assessInfo.vue
+++ b/src/views/business/assess/assessInfo.vue
@@ -76,19 +76,19 @@
<el-form>
<el-form-item label-width="100px" label="鎹愮尞鍐冲畾">
<el-checkbox-group
- v-model="organdecision"
+ v-model="organdecisionValues"
@change="handleOrganDecisionChange"
:disabled="!isEdit"
>
<el-checkbox
- v-for="item in organselection"
- :key="item"
- :label="item"
- >{{ item }}
+ v-for="dict in dict.type.sys_Organ"
+ :key="dict.value"
+ :label="dict.value"
+ >{{ dict.label }}
</el-checkbox>
</el-checkbox-group>
<el-input
- v-if="organdecision.includes('鍏朵粬')"
+ v-if="showOtherInput"
v-model="organdecisionOther"
placeholder="璇疯緭鍏ュ叾浠栨崘鐚喅瀹氱殑鍏蜂綋鍐呭"
style="margin-top: 10px; width: 300px;"
@@ -113,23 +113,26 @@
<template slot-scope="scope">
<div class="organ-expand-content" v-if="scope.row.expanded">
<el-tabs
- v-model="scope.row.activeAssessmentTab"
+ v-model="scope.row.activeTab"
type="card"
class="organ-detail-tabs"
+ @tab-click="handleTabClick(scope.row, $event)"
>
<!-- 鍔ㄦ�佺敓鎴愯瘎浼癟ab -->
<el-tab-pane
- v-for="(assessment, index) in scope.row.assessments"
- :key="index"
+ v-for="(assessment, index) in getOrganAssessments(scope.row)"
+ :key="`${scope.row.organno}_${index}`"
:label="`绗�${index + 1}娆¤瘎浼癭"
- :name="`assessment_${index}`"
+ :name="index"
>
<organ-assessment-form
:organ-data="scope.row"
- :assessment-data="assessment"
:assessment-index="index"
:readonly="!canAssessOrgan(scope.row)"
- @add-assessment="handleAddAssessment"
+ :current-user="currentUser"
+ @update-assessment="handleUpdateAssessment"
+ @delete-assessment="handleDeleteAssessment"
+ @save-assessment="handleSaveAssessment"
/>
</el-tab-pane>
@@ -154,86 +157,163 @@
</el-tab-pane>
<!-- 璇勪及姹囨�籘ab -->
- <el-tab-pane label="璇勪及姹囨��" name="summary">
- <div class="assessment-summary">
- <el-descriptions title="璇勪及缁撴灉姹囨��" :column="2" border>
- <el-descriptions-item label="鍣ㄥ畼绫诲瀷">{{
- scope.row.organname
- }}</el-descriptions-item>
- <el-descriptions-item label="鑾峰彇鏈烘瀯">{{
- scope.row.gainhospitalname
- }}</el-descriptions-item>
- <el-descriptions-item label="璇勪及娆℃暟" :span="2">
- <el-tag type="info"
- >{{ scope.row.assessments.length }}娆�</el-tag
- >
- </el-descriptions-item>
- <el-descriptions-item label="鏈�鏂拌瘎浼版椂闂�" :span="2">
- {{ getLatestAssessmentTime(scope.row) || "-" }}
- </el-descriptions-item>
- </el-descriptions>
+ <el-tab-pane label="璇勪及姹囨��" name="summary">
+ <div class="assessment-summary">
+ <!-- 鍩烘湰淇℃伅姹囨�� -->
+ <el-descriptions title="鍩烘湰淇℃伅姹囨��" :column="2" border>
+ <el-descriptions-item label="鍣ㄥ畼绫诲瀷">
+ <span class="summary-item">{{ getOrganLabel(scope.row.organno) }}</span>
+ </el-descriptions-item>
+ <el-descriptions-item label="鑾峰彇鏈烘瀯">
+ <span class="summary-item">{{ scope.row.gainhospitalname }}</span>
+ </el-descriptions-item>
+ <el-descriptions-item label="璇勪及娆℃暟" :span="2">
+ <el-tag type="info" size="medium">
+ {{ getAssessmentCount(scope.row) }}娆�
+ </el-tag>
+ </el-descriptions-item>
+ <el-descriptions-item label="鏈�鏂拌瘎浼版椂闂�" :span="2">
+ <span class="highlight-text">{{ getLatestAssessmentTime(scope.row) || "-" }}</span>
+ </el-descriptions-item>
+ </el-descriptions>
- <!-- 璇勪及璇︽儏姹囨�� -->
- <el-card header="璇勪及璇︽儏" style="margin-top: 20px;">
- <el-descriptions :column="1" border>
- <el-descriptions-item label="鑾峰彇鍓嶆椿妫�">
- <el-tag
- :type="
- scope.row.isbiopsybefore === '1'
- ? 'success'
- : 'info'
- "
- >
- {{ scope.row.isbiopsybefore === "1" ? "鏄�" : "鍚�" }}
- </el-tag>
- </el-descriptions-item>
- <el-descriptions-item label="鑾峰彇鍚庢椿妫�">
- <el-tag
- :type="
- scope.row.isbiopsyafter === '1'
- ? 'success'
- : 'info'
- "
- >
- {{ scope.row.isbiopsyafter === "1" ? "鏄�" : "鍚�" }}
- </el-tag>
- </el-descriptions-item>
- <el-descriptions-item label="杈圭紭鍣ㄥ畼">
- <el-tag
- :type="
- scope.row.ismarginalorgan === '1'
- ? 'warning'
- : 'info'
- "
- >
- {{
- scope.row.ismarginalorgan === "1" ? "鏄�" : "鍚�"
- }}
- </el-tag>
- </el-descriptions-item>
- <el-descriptions-item label="鐥呭師鑿岄槼鎬�">
- <el-tag
- :type="
- scope.row.ispathogenpositive === '1'
- ? 'danger'
- : 'info'
- "
- >
- {{
- scope.row.ispathogenpositive === "1" ? "鏄�" : "鍚�"
- }}
- </el-tag>
- </el-descriptions-item>
- </el-descriptions>
- </el-card>
- </div>
- </el-tab-pane>
+ <!-- 璇勪及璇︽儏姹囨�� -->
+ <el-card header="璇勪及璇︽儏鍒楄〃" style="margin-top: 20px;" class="assessment-detail-card">
+ <div v-if="getOrganAssessments(scope.row).length === 0" class="no-assessment">
+ <el-empty description="鏆傛棤璇勪及璁板綍"></el-empty>
+ </div>
+
+ <div v-else>
+ <!-- 姣忔璇勪及璇︽儏 -->
+ <div v-for="(assessment, index) in getOrganAssessments(scope.row)"
+ :key="index"
+ class="assessment-item">
+ <el-card shadow="hover" class="assessment-card">
+ <div slot="header" class="clearfix">
+ <span class="assessment-title">绗瑊{ index + 1 }}娆¤瘎浼�</span>
+ <el-tag
+ :type="getAssessmentTagType(assessment.status)"
+ size="small"
+ class="status-tag"
+ >
+ {{ getAssessmentStatusText(assessment.status) }}
+ </el-tag>
+ </div>
+
+ <el-descriptions :column="2" border class="detail-descriptions">
+ <el-descriptions-item label="璇勪及鏃堕棿" :span="2">
+ <span class="time-text">{{ assessment.assessmentTime || "-" }}</span>
+ </el-descriptions-item>
+
+ <el-descriptions-item label="璇勪及浜�">
+ <el-tag type="info" size="small">
+ {{ assessment.assessor || "鏈~鍐�" }}
+ </el-tag>
+ </el-descriptions-item>
+
+ <el-descriptions-item label="鍔熻兘鐘舵��">
+ <el-tag
+ :type="getFunctionStatusTagType(assessment.functionStatus)"
+ size="small"
+ >
+ {{ getFunctionStatusText(assessment.functionStatus) }}
+ </el-tag>
+ </el-descriptions-item>
+
+ <el-descriptions-item label="璇勪及鎰忚" :span="2">
+ <div class="opinion-content">
+ {{ assessment.assessmentOpinion || "鏆傛棤璇勪及鎰忚" }}
+ </div>
+ </el-descriptions-item>
+
+ <el-descriptions-item label="闄勪欢鏁伴噺" :span="2" v-if="assessment.attachments && assessment.attachments.length > 0">
+ <el-tag type="success" size="small">
+ {{ assessment.attachments.length }}涓�
+ </el-tag>
+ <el-button
+ type="text"
+ size="mini"
+ @click="showAttachmentList(assessment.attachments, index + 1)"
+ style="margin-left: 10px;"
+ >
+ 鏌ョ湅闄勪欢鍒楄〃
+ </el-button>
+ </el-descriptions-item>
+ </el-descriptions>
+ </el-card>
+ </div>
+ </div>
+ </el-card>
+
+ <!-- 鍣ㄥ畼鍩烘湰淇℃伅鍗$墖 -->
+ <el-card header="鍣ㄥ畼淇℃伅" style="margin-top: 20px;" class="organ-info-card">
+ <el-descriptions :column="2" border>
+ <el-descriptions-item label="鑾峰彇鍓嶆椿妫�">
+ <el-tag
+ :type="
+ scope.row.isbiopsybefore === '1'
+ ? 'success'
+ : 'info'
+ "
+ size="small"
+ >
+ {{ scope.row.isbiopsybefore === "1" ? "鏄�" : "鍚�" }}
+ </el-tag>
+ </el-descriptions-item>
+ <el-descriptions-item label="鑾峰彇鍚庢椿妫�">
+ <el-tag
+ :type="
+ scope.row.isbiopsyafter === '1'
+ ? 'success'
+ : 'info'
+ "
+ size="small"
+ >
+ {{ scope.row.isbiopsyafter === "1" ? "鏄�" : "鍚�" }}
+ </el-tag>
+ </el-descriptions-item>
+ <el-descriptions-item label="杈圭紭鍣ㄥ畼">
+ <el-tag
+ :type="
+ scope.row.ismarginalorgan === '1'
+ ? 'warning'
+ : 'info'
+ "
+ size="small"
+ >
+ {{
+ scope.row.ismarginalorgan === "1" ? "鏄�" : "鍚�"
+ }}
+ </el-tag>
+ </el-descriptions-item>
+ <el-descriptions-item label="鐥呭師鑿岄槼鎬�">
+ <el-tag
+ :type="
+ scope.row.ispathogenpositive === '1'
+ ? 'danger'
+ : 'info'
+ "
+ size="small"
+ >
+ {{
+ scope.row.ispathogenpositive === "1" ? "鏄�" : "鍚�"
+ }}
+ </el-tag>
+ </el-descriptions-item>
+ </el-descriptions>
+ </el-card>
+ </div>
+</el-tab-pane>
</el-tabs>
</div>
</template>
</el-table-column>
- <el-table-column label="鍣ㄥ畼绫诲瀷" align="center" prop="organname" />
+ <el-table-column label="鍣ㄥ畼绫诲瀷" align="center" prop="organname">
+ <template slot-scope="scope">
+ {{ getOrganLabel(scope.row.organno) }}
+ </template>
+ </el-table-column>
<el-table-column label="鍣ㄥ畼缂栧彿" align="center" prop="organnumber" />
@@ -246,19 +326,27 @@
<!-- 鍔ㄦ�佹樉绀鸿瘎浼扮姸鎬佸垪 -->
<el-table-column
- v-for="(assessment, index) in getMaxAssessmentCount()"
+ v-for="index in getMaxAssessmentCount()"
:key="index"
- :label="`绗�${index + 1}娆¤瘎浼癭"
+ :label="`绗�${index}娆¤瘎浼癭"
align="center"
width="120"
>
<template slot-scope="scope">
<el-tag
- v-if="scope.row.assessments[index]"
- :type="getAssessmentTagType(scope.row.assessments[index].status)"
+ v-if="getOrganAssessments(scope.row)[index - 1]"
+ :type="
+ getAssessmentTagType(
+ getOrganAssessments(scope.row)[index - 1].status
+ )
+ "
size="small"
>
- {{ getAssessmentStatusText(scope.row.assessments[index].status) }}
+ {{
+ getAssessmentStatusText(
+ getOrganAssessments(scope.row)[index - 1].status
+ )
+ }}
</el-tag>
<el-tag v-else type="info" size="small">鏈瘎浼�</el-tag>
</template>
@@ -318,7 +406,9 @@
<!-- 鏁翠綋淇濆瓨鎸夐挳 -->
<div class="footer-actions" v-if="isEdit">
- <el-button type="primary" @click="handleSaveAll" :loading="saveLoading">淇濆瓨璇勪及琛�</el-button>
+ <el-button type="primary" @click="handleSaveAll" :loading="saveLoading"
+ >淇濆瓨璇勪及琛�</el-button
+ >
<el-button @click="handleCancel">鍙栨秷</el-button>
</div>
@@ -363,42 +453,44 @@
currentPreviewFile: null,
attachmentVisible: false,
// 鎹愮尞鍐冲畾鐩稿叧
- organdecision: [],
+ organdecisionValues: [], // 瀛樺偍瀛楀吀value
organdecisionOther: "",
- organselection: [
- "鑲濊剰",
- "鍙岃偩",
- "宸﹁偩",
- "鍙宠偩",
- "蹇冭剰",
- "鑲鸿剰",
- "鑳拌吅",
- "灏忚偁",
- "鍙岀溂缁勭粐",
- "閬椾綋",
- "鍏朵粬"
- ],
+ // 璁板綍鎹愮尞鍐冲畾鍙樺寲鍓嶇殑鍊�
+ prevOrgandecisionValues: [],
// 鍣ㄥ畼绫诲瀷鏄犲皠鍏崇郴
organDecisionMapping: {
- 鑲濊剰: ["鑲濊剰"],
- 鍙岃偩: ["宸﹁偩", "鍙宠偩"],
- 宸﹁偩: ["宸﹁偩"],
- 鍙宠偩: ["鍙宠偩"],
- 蹇冭剰: ["蹇冭剰"],
- 鑲鸿剰: ["鑲鸿剰"],
- 鑳拌吅: ["鑳拌吅"],
- 灏忚偁: ["灏忚偁"],
- 鍙岀溂缁勭粐: ["瑙掕啘"],
- 閬椾綋: ["鐨偆", "楠ㄩ", "鍏朵粬缁勭粐"],
- 鍏朵粬: [] // 鍏朵粬绫诲瀷涓嶆槧灏勫叿浣撳櫒瀹�
+ C38: ["C38"], // 蹇冭剰 -> 蹇冭剰
+ C22: ["C22"], // 鍏ㄨ倽 -> 鍏ㄨ倽
+ C22L: ["C22L"], // 宸﹀崐鑲� -> 宸﹀崐鑲�
+ C22L0: ["C22L0"], // 宸﹀鍙� -> 宸﹀鍙�
+ C22R: ["C22R"], // 鍙冲崐鑲� -> 鍙冲崐鑲�
+ C22R0: ["C22R0"], // 鍙充笁鍙� -> 鍙充笁鍙�
+ C64: ["C64L", "C64R"], // 鍙岃偩 -> 宸﹁偩, 鍙宠偩
+ C64L: ["C64L"], // 宸﹁偩 -> 宸﹁偩
+ C64R: ["C64R"], // 鍙宠偩 -> 鍙宠偩
+ C34: ["C34L", "C34R"], // 鍏ㄨ偤 -> 宸﹁偤, 鍙宠偤
+ C34L: ["C34L"], // 宸﹁偤 -> 宸﹁偤
+ C34R: ["C34R"], // 鍙宠偤 -> 鍙宠偤
+ C17: ["C17"], // 灏忚偁 -> 灏忚偁
+ C25: ["C25"], // 鑳拌吅 -> 鑳拌吅
+ C00: [], // 閬椾綋 -> 涓嶆槧灏勫叿浣撳櫒瀹橈紙閬椾綋鏄暣浣擄級
+ C69L: ["C69L"], // 宸︾溂瑙掕啘 -> 宸︾溂瑙掕啘
+ C69R: ["C69R"], // 鍙崇溂瑙掕啘 -> 鍙崇溂瑙掕啘
+ C01: [] // 鍏朵粬 -> 涓嶆槧灏勫叿浣撳櫒瀹�
},
// 鐢ㄦ埛淇℃伅
currentUser: {
id: "001",
name: "寮犲尰鐢�",
department: "蹇冭剰绉�",
- role: "doctor" // coordinator, doctor
- }
+ role: "coordinator"
+ },
+ // 璁板綍琚垹闄ょ殑鍣ㄥ畼璇勪及
+ deletedOrganAssessments: [],
+ // 鐢ㄤ簬杩借釜tab婵�娲荤姸鎬�
+ activeTabMap: new Map(),
+ // 鍒锋柊key
+ refreshKey: 0
};
},
computed: {
@@ -410,37 +502,46 @@
},
// 鏍规嵁鎹愮尞鍐冲畾杩囨护鍚庣殑鍣ㄥ畼鍒楄〃
filteredOrganAssessmentList() {
- if (!this.organdecision || this.organdecision.length === 0) {
+ if (!this.organdecisionValues || this.organdecisionValues.length === 0) {
return [];
}
- // 鑾峰彇鎵�鏈夐�変腑鐨勫櫒瀹樼被鍨�
const selectedOrgans = new Set();
- this.organdecision.forEach(decision => {
+ this.organdecisionValues.forEach(decision => {
const organs = this.organDecisionMapping[decision] || [];
organs.forEach(organ => selectedOrgans.add(organ));
});
- // 杩囨护鍣ㄥ畼璇勪及鍒楄〃
- return this.organAssessmentList.filter(organ =>
- selectedOrgans.has(organ.organname)
+ return this.organAssessmentList.filter(
+ organ =>
+ selectedOrgans.has(organ.organno) &&
+ organ.delFlag !== "1" &&
+ !this.deletedOrganAssessments.includes(organ.organno)
);
},
// 妫�鏌ユ墍鏈夎繃婊ゅ悗鐨勫櫒瀹樻槸鍚﹂兘宸茶瘎浼�
allOrgansAssessed() {
- return this.filteredOrganAssessmentList.every(
- organ =>
- organ.assessments &&
- organ.assessments.length > 0 &&
- organ.assessments.every(
- assessment => assessment.status === "assessed"
- )
- );
+ return this.filteredOrganAssessmentList.every(organ => {
+ const assessments = this.getOrganAssessments(organ);
+ return (
+ assessments &&
+ assessments.length > 0 &&
+ assessments.every(assessment => assessment.status === "assessed")
+ );
+ });
+ },
+ // 鑾峰彇鍣ㄥ畼瀛楀吀
+ organDict() {
+ return this.dict.type.sys_Organ || [];
+ },
+ // 鍒ゆ柇鏄惁闇�瑕佹樉绀哄叾浠栬緭鍏ユ
+ showOtherInput() {
+ return this.organdecisionValues.includes("C01");
}
},
watch: {
// 鐩戝惉鎹愮尞鍐冲畾鍙樺寲锛岀敤浜庡鏉傞�昏緫澶勭悊
- organdecision: {
+ organdecisionValues: {
handler(newVal, oldVal) {
this.handleComplexDecisionChange(newVal, oldVal);
},
@@ -454,13 +555,124 @@
this.getAssessmentDetail();
},
methods: {
+ // 鏍规嵁瀛楀吀value鑾峰彇label
+ getOrganLabel(organValue) {
+ const dictItem = this.organDict.find(item => item.value === organValue);
+ return dictItem ? dictItem.label : organValue;
+ },
+
+ // Tab鐐瑰嚮浜嬩欢
+ handleTabClick(organ, tab) {
+ if (tab.name !== "add") {
+ this.activeTabMap.set(organ.organno, tab.name);
+ }
+ },
+// 鑾峰彇鍔熻兘鐘舵�佹爣绛剧被鍨�
+ getFunctionStatusTagType(status) {
+ const typeMap = {
+ "1": "success", // 姝e父
+ "2": "warning", // 杞诲害寮傚父
+ "3": "danger", // 閲嶅害寮傚父
+ "4": "info" // 鏃犳硶璇勪及
+ };
+ return typeMap[status] || "info";
+ },
+
+ // 鑾峰彇鍔熻兘鐘舵�佹枃鏈�
+ getFunctionStatusText(status) {
+ const textMap = {
+ "1": "姝e父",
+ "2": "杞诲害寮傚父",
+ "3": "閲嶅害寮傚父",
+ "4": "鏃犳硶璇勪及"
+ };
+ return textMap[status] || "鏈瘎浼�";
+ },
+
+ // 鏄剧ず闄勪欢鍒楄〃
+ showAttachmentList(attachments, assessmentNumber) {
+ if (!attachments || attachments.length === 0) {
+ this.$message.info(`绗�${assessmentNumber}娆¤瘎浼版殏鏃犻檮浠禶);
+ return;
+ }
+
+ this.$alert(
+ `<div>
+ <h4>绗�${assessmentNumber}娆¤瘎浼伴檮浠跺垪琛�</h4>
+ <ul style="list-style: none; padding-left: 0;">
+ ${attachments.map((item, index) => `
+ <li style="margin: 5px 0; padding: 5px; background: #f5f7fa; border-radius: 4px;">
+ <i class="el-icon-document"></i>
+ <span style="margin-left: 8px;">${item.fileName}</span>
+ <el-button
+ type="text"
+ size="mini"
+ onclick="window.open('${item.path || item.fileUrl}')"
+ style="margin-left: 10px;"
+ >
+ 涓嬭浇
+ </el-button>
+ </li>
+ `).join('')}
+ </ul>
+ </div>`,
+ '闄勪欢鍒楄〃',
+ {
+ dangerouslyUseHTMLString: true,
+ showConfirmButton: false,
+ showCancelButton: true,
+ cancelButtonText: '鍏抽棴'
+ }
+ );
+ },
+ // 鑾峰彇鍣ㄥ畼鐨勮瘎浼板垪琛�
+ getOrganAssessments(organ) {
+ if (!organ.assesscontent) return [];
+ try {
+ const assessData =
+ typeof organ.assesscontent === "string"
+ ? JSON.parse(organ.assesscontent)
+ : organ.assesscontent;
+
+ if (Array.isArray(assessData)) {
+ return assessData.filter(item => item.delFlag !== "1");
+ }
+ return [];
+ } catch (error) {
+ console.warn("瑙f瀽璇勪及鍐呭澶辫触:", error);
+ return [];
+ }
+ },
+
+ // 鑾峰彇璇勪及鏁伴噺
+ getAssessmentCount(organ) {
+ return this.getOrganAssessments(organ).length;
+ },
+
+ // 澶勭悊璇勪及鏇存柊
+ handleUpdateAssessment(data) {
+ const { organData, assessmentData, assessmentIndex } = data;
+ const assessments = this.getOrganAssessments(organData);
+
+ if (assessments[assessmentIndex]) {
+ // 鍒涘缓鏂扮殑璇勪及鏁扮粍
+ const newAssessments = [...assessments];
+ newAssessments[assessmentIndex] = {
+ ...assessments[assessmentIndex],
+ ...assessmentData
+ };
+
+ // 鏇存柊 assesscontent
+ this.$set(organData, "assesscontent", JSON.stringify(newAssessments));
+ this.$forceUpdate();
+ }
+ },
+
// 鏁翠綋淇濆瓨鏂规硶
async handleSaveAll() {
this.saveLoading = true;
try {
- // 1. 鍑嗗涓昏瘎浼拌〃鏁版嵁
const saveData = {
- // 鏍规嵁 id 鏄惁瀛樺湪鍐冲畾鏄洿鏂拌繕鏄柊澧�
id: this.assessmentData.id || undefined,
infoid: this.infoid,
caseNo: this.assessmentData.caseNo,
@@ -473,49 +685,49 @@
idcardno: this.assessmentData.idcardno,
diagnosisname: this.assessmentData.diagnosisname,
coordinatorName: this.assessmentData.coordinatorName,
- assessTime: this.assessmentData.assessTime || new Date().toISOString(),
+ assessTime:
+ this.assessmentData.assessTime || new Date().toISOString(),
assessState: this.assessmentData.assessState,
assessannex: this.assessmentData.assessannex,
- // 鎹愮尞鍐冲畾淇℃伅
- organdecision: this.organdecision.join(','),
+ organdecision: this.organdecisionValues.join(","),
organdecisionOther: this.organdecisionOther,
- // 鍣ㄥ畼璇勪及鍒楄〃
- serviceMedicalevaluationorgans: this.organAssessmentList.map(organ => ({
- id: organ.id,
- infoid: organ.infoid,
- donorno: organ.donorno,
- organno: organ.organno,
- organname: organ.organname,
- organnumber: organ.organnumber,
- gainhospitalno: organ.gainhospitalno,
- gainhospitalname: organ.gainhospitalname,
- isbiopsybefore: organ.isbiopsybefore,
- isbiopsyafter: organ.isbiopsyafter,
- ismarginalorgan: organ.ismarginalorgan,
- ispathogenpositive: organ.ispathogenpositive,
- ispnf: organ.ispnf,
- isdgf: organ.isdgf,
- // 灏� assessments 鏁扮粍搴忓垪鍖栧埌 assesscontent 瀛楁
- assesscontent: JSON.stringify(organ.assessments)
- }))
+ serviceMedicalevaluationorganList: this.organAssessmentList.map(
+ organ => ({
+ id: organ.id,
+ infoid: organ.infoid,
+ donorno: organ.donorno,
+ organno: organ.organno,
+ organname: this.getOrganLabel(organ.organno),
+ organnumber: organ.organnumber,
+ gainhospitalno: organ.gainhospitalno,
+ gainhospitalname: organ.gainhospitalname,
+ isbiopsybefore: organ.isbiopsybefore,
+ isbiopsyafter: organ.isbiopsyafter,
+ ismarginalorgan: organ.ismarginalorgan,
+ ispathogenpositive: organ.ispathogenpositive,
+ ispnf: organ.ispnf,
+ isdgf: organ.isdgf,
+ delFlag: organ.delFlag || "0",
+ assesscontent: organ.assesscontent || "[]"
+ })
+ )
};
- // 2. 鏍规嵁 id 鍒ゆ柇璋冪敤鍝釜 API
const saveMethod = this.assessmentData.id ? assessedit : assessAdd;
const response = await saveMethod(saveData);
if (response.code === 200) {
- this.$message.success('璇勪及琛ㄤ繚瀛樻垚鍔燂紒');
- // 淇濆瓨鎴愬姛鍚庯紝鏇存柊鏈湴鐨� assessmentData.id锛堝浜庢柊澧炴儏鍐碉級
+ this.$message.success("璇勪及琛ㄤ繚瀛樻垚鍔燂紒");
if (!this.assessmentData.id && response.data && response.data.id) {
this.assessmentData.id = response.data.id;
}
+ this.refreshKey += 1; // 瑙﹀彂閲嶆柊娓叉煋
} else {
- this.$message.error('淇濆瓨澶辫触锛�' + (response.msg || '鏈煡閿欒'));
+ this.$message.error("淇濆瓨澶辫触锛�" + (response.msg || "鏈煡閿欒"));
}
} catch (error) {
- console.error('淇濆瓨璇勪及琛ㄥけ璐�:', error);
- this.$message.error('淇濆瓨澶辫触锛岃閲嶈瘯');
+ console.error("淇濆瓨璇勪及琛ㄥけ璐�:", error);
+ this.$message.error("淇濆瓨澶辫触锛岃閲嶈瘯");
} finally {
this.saveLoading = false;
}
@@ -527,12 +739,21 @@
},
// 鎹愮尞鍐冲畾鍙樻洿澶勭悊
- handleOrganDecisionChange(newDecision) {
- // 鑷姩澶勭悊鐩稿叧閫昏緫
+ async handleOrganDecisionChange(newDecision) {
+ const oldDecision = [...this.prevOrgandecisionValues];
this.autoHandleDecisionChange(newDecision);
- // 寮哄埗閲嶆柊娓叉煋
+
+ const removedDecisions = oldDecision.filter(
+ item => !newDecision.includes(item)
+ );
+
+ for (const decision of removedDecisions) {
+ await this.handleRemovedDecision(decision);
+ }
+
+ this.prevOrgandecisionValues = [...newDecision];
this.$forceUpdate();
- // 濡傛灉浠庢湁閫夋嫨鍙樹负鏃犻�夋嫨锛屾竻绌哄睍寮�鐘舵��
+
if (newDecision.length === 0) {
this.expandedRowKeys = [];
}
@@ -545,25 +766,36 @@
// 鑷姩澶勭悊鍐冲畾鍙樻洿閫昏緫
autoHandleDecisionChange(newDecision) {
- // 濡傛灉閫夋嫨浜�"鍙岃偩"锛岃嚜鍔ㄥ彇娑堝崟鐙殑"宸﹁偩"鍜�"鍙宠偩"閫夋嫨
- if (newDecision.includes("鍙岃偩")) {
- this.organdecision = newDecision.filter(
- item => item !== "宸﹁偩" && item !== "鍙宠偩"
+ // 濡傛灉閫夋嫨浜�"鍙岃偩"(value: C64)锛岃嚜鍔ㄥ彇娑堝崟鐙殑"宸﹁偩"(value: C64L)鍜�"鍙宠偩"(value: C64R)閫夋嫨
+ if (newDecision.includes("C64")) {
+ this.organdecisionValues = newDecision.filter(
+ item => item !== "C64L" && item !== "C64R"
);
}
// 濡傛灉閫夋嫨浜�"宸﹁偩"鎴�"鍙宠偩"锛屽彇娑�"鍙岃偩"閫夋嫨
- else if (newDecision.includes("宸﹁偩") || newDecision.includes("鍙宠偩")) {
- this.organdecision = newDecision.filter(item => item !== "鍙岃偩");
+ else if (newDecision.includes("C64L") || newDecision.includes("C64R")) {
+ this.organdecisionValues = newDecision.filter(item => item !== "C64");
}
- // 澶勭悊浜掓枼閫昏緫
+ // 濡傛灉閫夋嫨浜�"鍏ㄨ偤"(value: C34)锛岃嚜鍔ㄥ彇娑堝崟鐙殑"宸﹁偤"(value: C34L)鍜�"鍙宠偤"(value: C34R)閫夋嫨
+ if (newDecision.includes("C34")) {
+ this.organdecisionValues = newDecision.filter(
+ item => item !== "C34L" && item !== "C34R"
+ );
+ }
+ // 濡傛灉閫夋嫨浜�"宸﹁偤"鎴�"鍙宠偤"锛屽彇娑�"鍏ㄨ偤"閫夋嫨
+ else if (newDecision.includes("C34L") || newDecision.includes("C34R")) {
+ this.organdecisionValues = newDecision.filter(item => item !== "C34");
+ }
+
+ // 澶勭悊鍏朵粬浜掓枼閫昏緫
this.handleExclusiveDecisions();
},
// 澶勭悊浜掓枼鐨勬崘鐚喅瀹�
handleExclusiveDecisions() {
- // 閬椾綋鎹愮尞涓庡叾浠栧櫒瀹樻崘鐚簰鏂ワ紙鏍规嵁涓氬姟闇�姹傝皟鏁达級
- if (this.organdecision.includes("閬椾綋")) {
+ // 閬椾綋鎹愮尞(value: 10)涓庡叾浠栧櫒瀹樻崘鐚簰鏂ワ紙鏍规嵁涓氬姟闇�姹傝皟鏁达級
+ if (this.organdecisionValues.includes("10")) {
// 鍙互璁剧疆鍙繚鐣欓仐浣撴崘鐚紝鎴栬�呮牴鎹笟鍔¢渶姹傚鐞�
}
},
@@ -596,52 +828,91 @@
const organsToCreate = this.organDecisionMapping[decision];
if (organsToCreate && organsToCreate.length > 0) {
- organsToCreate.forEach(organName => {
- this.ensureOrganExists(organName);
+ organsToCreate.forEach(organValue => {
+ this.ensureOrganExists(organValue);
});
// 鏄剧ず鍒涘缓鎻愮ず
if (organsToCreate.length > 0) {
this.$message.success(
- `宸蹭负銆�${decision}銆戝垱寤�${organsToCreate.length}涓瘎浼伴」`
+ `宸蹭负銆�${this.getOrganLabel(decision)}銆戝垱寤�${
+ organsToCreate.length
+ }涓瘎浼伴」`
);
}
} else {
- console.warn(`鎹愮尞鍐冲畾銆�${decision}銆戞病鏈夐厤缃櫒瀹樻槧灏勫叧绯籤);
+ console.warn(
+ `鎹愮尞鍐冲畾銆�${this.getOrganLabel(decision)}銆戞病鏈夐厤缃櫒瀹樻槧灏勫叧绯籤
+ );
}
},
// 澶勭悊绉婚櫎鐨勬崘鐚喅瀹�
- handleRemovedDecision(decision) {
- // 鏍规嵁涓氬姟闇�姹傛坊鍔犳竻鐞嗛�昏緫
+ async handleRemovedDecision(decision) {
const relatedOrgans = this.organDecisionMapping[decision] || [];
- relatedOrgans.forEach(organ => {
- // 鍙互鍦ㄨ繖閲屾坊鍔犳竻鐞嗙浉鍏冲櫒瀹樿瘎浼扮殑閫昏緫
- });
+
+ for (const organValue of relatedOrgans) {
+ const organIndex = this.organAssessmentList.findIndex(
+ organ => organ.organno === organValue && organ.delFlag !== "1"
+ );
+
+ if (organIndex !== -1) {
+ const organ = this.organAssessmentList[organIndex];
+ const organLabel = this.getOrganLabel(organValue);
+
+ try {
+ await this.$confirm(
+ `鎹愮尞鍐冲畾"${this.getOrganLabel(
+ decision
+ )}"宸插彇娑堬紝鏄惁鍒犻櫎瀵瑰簲鐨�${organLabel}璇勪及璁板綍锛焋,
+ "纭鍒犻櫎",
+ {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ }
+ );
+
+ this.$set(this.organAssessmentList[organIndex], "delFlag", "1");
+ this.deletedOrganAssessments.push(organValue);
+
+ const keyIndex = this.expandedRowKeys.indexOf(organValue);
+ if (keyIndex > -1) {
+ this.expandedRowKeys.splice(keyIndex, 1);
+ }
+
+ this.$message.success(`${organLabel}璇勪及璁板綍宸叉爣璁板垹闄);
+ } catch (cancelError) {
+ if (!this.organdecisionValues.includes(decision)) {
+ this.organdecisionValues.push(decision);
+ }
+ this.$message.info(`宸插彇娑堝垹闄�${organLabel}璇勪及璁板綍`);
+ }
+ }
+ }
},
- // 纭繚鍣ㄥ畼瀛樺湪锛堝甫閲嶅妫�鏌ワ級
- ensureOrganExists(organName) {
- // 妫�鏌ユ槸鍚﹀凡瀛樺湪鍚屽悕鍣ㄥ畼璇勪及椤�
+ // 纭繚鍣ㄥ畼瀛樺湪
+ ensureOrganExists(organValue) {
const exists = this.organAssessmentList.some(
- organ => organ.organname === organName
+ organ => organ.organno === organValue && organ.delFlag !== "1"
);
if (!exists) {
- // 鍒涘缓鏂扮殑鍣ㄥ畼璇勪及椤�
const newOrgan = {
- id: `organ_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
- organno: `ORG${Date.now()}`,
- organname: organName,
+ id: null,
+ organno: organValue,
+ organname: this.getOrganLabel(organValue),
gainhospitalname: "寰呭垎閰嶆満鏋�",
isbiopsybefore: "0",
isbiopsyafter: "0",
ismarginalorgan: "0",
ispathogenpositive: "0",
- assessments: [this.getDefaultAssessment(0)],
- activeAssessmentTab: "assessment_0",
+ assesscontent: JSON.stringify([this.getDefaultAssessment(0)]),
+ activeTab: 0,
expanded: false,
- createTime: new Date().toISOString()
+ createTime: new Date().toISOString(),
+ delFlag: "0"
};
this.organAssessmentList = [...this.organAssessmentList, newOrgan];
@@ -673,7 +944,6 @@
handleResponseData(response) {
let detailData = null;
- // 鏍规嵁鎺ュ彛瀹為檯杩斿洖鐨勬暟鎹粨鏋勮繘琛岃皟鏁�
if (response.data) {
if (Array.isArray(response.data)) {
detailData = response.data[0] || {};
@@ -688,7 +958,6 @@
detailData = response;
}
- // 鏄犲皠瀛楁鍒拌瘎浼版暟鎹�
this.assessmentData = {
id: detailData.id || this.assessmentId,
infoid: detailData.infoid || this.infoid,
@@ -706,15 +975,16 @@
assessannex: detailData.assessannex || ""
};
- // 澶勭悊鎹愮尞鍐冲畾鏁版嵁
if (detailData.organdecision) {
- this.organdecision = Array.isArray(detailData.organdecision)
+ const decisionArray = Array.isArray(detailData.organdecision)
? detailData.organdecision
- : (detailData.organdecision || "").split(",");
+ : (detailData.organdecision || "").split(",").filter(item => item);
+
+ this.organdecisionValues = decisionArray;
+ this.prevOrgandecisionValues = [...decisionArray];
this.organdecisionOther = detailData.organdecisionOther || "";
}
- // 澶勭悊鍣ㄥ畼璇勪及鏁版嵁
this.processOrganAssessmentData(detailData);
},
@@ -722,46 +992,43 @@
processOrganAssessmentData(detailData) {
let organList = [];
- // 浠庢帴鍙f暟鎹腑鑾峰彇鍣ㄥ畼璇勪及鍒楄〃
- if (detailData.serviceMedicalevaluationorgans) {
- if (Array.isArray(detailData.serviceMedicalevaluationorgans)) {
- organList = detailData.serviceMedicalevaluationorgans;
+ if (detailData.serviceMedicalevaluationorganList) {
+ if (Array.isArray(detailData.serviceMedicalevaluationorganList)) {
+ organList = detailData.serviceMedicalevaluationorganList;
}
}
- // 杞崲鍣ㄥ畼鏁版嵁鏍煎紡锛屾敮鎸佸娆¤瘎浼�
this.organAssessmentList = organList.map(organ => {
- const assessments = [];
+ const organno = organ.organno;
- // 瑙f瀽assesscontent瀛楁涓殑澶氭璇勪及鏁版嵁
- if (organ.assesscontent) {
+ // 濡傛灉 assesscontent 鏄瓧绗︿覆锛岀‘淇濆畠鏄湁鏁堢殑 JSON
+ if (organ.assesscontent && typeof organ.assesscontent === "string") {
try {
- const assessData = typeof organ.assesscontent === "string"
- ? JSON.parse(organ.assesscontent)
- : organ.assesscontent;
-
- if (Array.isArray(assessData)) {
- assessments.push(
- ...assessData.map((item, index) => ({
- ...item,
- index: index,
- status: item.status || "assessed"
- }))
- );
- }
+ JSON.parse(organ.assesscontent);
} catch (error) {
- console.warn("瑙f瀽璇勪及鍐呭澶辫触:", error);
- assessments.push(this.getDefaultAssessment(0));
+ console.warn(
+ "鏃犳晥鐨� assesscontent锛岄噸缃负绌烘暟缁�:",
+ organ.assesscontent
+ );
+ organ.assesscontent = "[]";
}
- } else {
- assessments.push(this.getDefaultAssessment(0));
+ } else if (!organ.assesscontent) {
+ organ.assesscontent = "[]";
}
+
+ const assessments = this.getOrganAssessments(organ);
+ const activeTab = this.activeTabMap.has(organno)
+ ? this.activeTabMap.get(organno)
+ : assessments.length > 0
+ ? 0
+ : "summary";
return {
...organ,
- assessments: assessments,
- activeAssessmentTab: assessments.length > 0 ? "assessment_0" : "summary",
- expanded: false
+ organname: this.getOrganLabel(organ.organno) || organ.organname,
+ activeTab: activeTab,
+ expanded: false,
+ delFlag: organ.delFlag || "0"
};
});
},
@@ -777,30 +1044,37 @@
assessmentOpinion: "",
clinicalData: {},
labResults: {},
- createTime: new Date().toISOString()
+ createTime: new Date().toISOString(),
+ delFlag: "0"
};
},
// 璁$畻鏈�澶ц瘎浼版鏁�
getMaxAssessmentCount() {
const maxCount = Math.max(
- ...this.organAssessmentList.map(organ =>
- organ.assessments ? organ.assessments.length : 0
- )
+ ...this.organAssessmentList
+ .filter(organ => organ.delFlag !== "1")
+ .map(organ => this.getAssessmentCount(organ))
);
return Math.max(maxCount, 1);
},
// 鑾峰彇鍣ㄥ畼鏁翠綋鐘舵��
getOrganOverallStatus(organ) {
- if (!organ.assessments || organ.assessments.length === 0) {
+ const assessments = this.getOrganAssessments(organ);
+ if (assessments.length === 0) {
return "pending";
}
- const allAssessed = organ.assessments.every(
+ const validAssessments = assessments.filter(a => a.delFlag !== "1");
+ if (validAssessments.length === 0) {
+ return "pending";
+ }
+
+ const allAssessed = validAssessments.every(
assessment => assessment.status === "assessed"
);
- const someAssessed = organ.assessments.some(
+ const someAssessed = validAssessments.some(
assessment => assessment.status === "assessed"
);
@@ -845,28 +1119,130 @@
// 娣诲姞鏂拌瘎浼�
handleAddNewAssessment(organ) {
+ const assessments = this.getOrganAssessments(organ);
const newAssessment = {
- ...this.getDefaultAssessment(organ.assessments.length),
+ ...this.getDefaultAssessment(assessments.length),
assessor: this.currentUser.name
};
- organ.assessments.push(newAssessment);
- organ.activeAssessmentTab = `assessment_${organ.assessments.length - 1}`;
+ const newAssessments = [...assessments, newAssessment];
+ this.$set(organ, "assesscontent", JSON.stringify(newAssessments));
+
+ organ.activeTab = assessments.length;
+ this.activeTabMap.set(organ.organno, assessments.length);
this.$message.success("宸叉坊鍔犳柊鐨勮瘎浼�");
},
- // 澶勭悊娣诲姞璇勪及浜嬩欢
- handleAddAssessment(data) {
- const { organData } = data;
- this.handleAddNewAssessment(organData);
+ // 澶勭悊鍒犻櫎璇勪及浜嬩欢
+ handleDeleteAssessment(data) {
+ const { organData, assessmentIndex } = data;
+ this.deleteOrganAssessment(organData, assessmentIndex);
+ },
+ // 澶勭悊璇勪及淇濆瓨
+ handleSaveAssessment(data) {
+ const { organData, assessmentData, assessmentIndex } = data;
+ const assessments = this.getOrganAssessments(organData);
+
+ console.log("淇濆瓨璇勪及鏁版嵁:", data);
+
+ if (assessments[assessmentIndex]) {
+ // 鍒涘缓鏂扮殑璇勪及鏁扮粍
+ const newAssessments = [...assessments];
+ newAssessments[assessmentIndex] = {
+ ...assessments[assessmentIndex],
+ ...assessmentData,
+ status: "assessed", // 鏍囪涓哄凡璇勪及
+ assessmentTime: new Date().toISOString(), // 璁剧疆璇勪及鏃堕棿
+ delFlag: "0" // 纭繚鍒犻櫎鏍囧織
+ };
+
+ // 鏇存柊 assesscontent
+ this.$set(organData, "assesscontent", JSON.stringify(newAssessments));
+
+ // 寮哄埗閲嶆柊娓叉煋
+ this.$forceUpdate();
+
+ this.$message.success("璇勪及淇濆瓨鎴愬姛");
+
+ // 妫�鏌ユ槸鍚﹂渶瑕佽嚜鍔ㄥ垏鎹㈠埌涓嬩竴涓瘎浼�
+ this.checkAndSwitchTab(organData, assessmentIndex);
+ }
+ },
+
+ // 妫�鏌ュ苟鑷姩鍒囨崲tab
+ checkAndSwitchTab(organData, currentIndex) {
+ const assessments = this.getOrganAssessments(organData);
+ if (currentIndex < assessments.length - 1) {
+ // 濡傛灉杩樻湁涓嬩竴涓瘎浼帮紝鑷姩鍒囨崲鍒颁笅涓�涓�
+ organData.activeTab = currentIndex + 1;
+ this.activeTabMap.set(organData.organno, currentIndex + 1);
+ } else {
+ // 濡傛灉娌℃湁涓嬩竴涓瘎浼帮紝鍒囨崲鍒版眹鎬婚〉
+ organData.activeTab = "summary";
+ this.activeTabMap.set(organData.organno, "summary");
+ }
+ },
+
+ // 鍒犻櫎鍣ㄥ畼璇勪及
+ async deleteOrganAssessment(organ, assessmentIndex) {
+ try {
+ await this.$confirm(
+ `纭鍒犻櫎绗�${assessmentIndex + 1}娆¤瘎浼拌褰曞悧锛焋,
+ "纭鍒犻櫎",
+ {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ }
+ );
+
+ const assessments = this.getOrganAssessments(organ);
+ if (assessments[assessmentIndex]) {
+ // 鏍囪涓哄垹闄�
+ assessments[assessmentIndex].delFlag = "1";
+
+ // 杩囨护鎺夊凡鍒犻櫎鐨勮瘎浼�
+ const newAssessments = assessments.filter(
+ item => item.delFlag !== "1"
+ );
+
+ // 閲嶆柊璁$畻璇勪及绱㈠紩
+ newAssessments.forEach((assessment, index) => {
+ assessment.index = index;
+ });
+
+ // 鏇存柊 assesscontent
+ this.$set(organ, "assesscontent", JSON.stringify(newAssessments));
+
+ // 澶勭悊tab鍒囨崲
+ if (newAssessments.length === 0) {
+ organ.activeTab = "summary";
+ this.activeTabMap.set(organ.organno, "summary");
+ } else if (organ.activeTab === assessmentIndex) {
+ const newIndex = Math.max(0, assessmentIndex - 1);
+ organ.activeTab = newIndex;
+ this.activeTabMap.set(organ.organno, newIndex);
+ } else if (organ.activeTab === "summary") {
+ this.activeTabMap.set(organ.organno, "summary");
+ }
+
+ this.$message.success("璇勪及璁板綍宸插垹闄�");
+ this.$forceUpdate();
+ }
+ } catch (cancelError) {
+ this.$message.info("宸插彇娑堝垹闄�");
+ }
},
// 鑾峰彇鏈�鏂拌瘎浼版椂闂�
getLatestAssessmentTime(organ) {
- if (!organ.assessments || organ.assessments.length === 0) return null;
+ const assessments = this.getOrganAssessments(organ);
+ if (assessments.length === 0) return null;
- const assessed = organ.assessments.filter(a => a.assessmentTime);
+ const assessed = assessments.filter(
+ a => a.assessmentTime && a.delFlag !== "1"
+ );
if (assessed.length === 0) return null;
return assessed.sort(
@@ -896,8 +1272,6 @@
// 妫�鏌ヨ瘎浼版潈闄�
canAssessOrgan(organ) {
- console.log(organ,'organ');
-
if (this.isCoordinator) return true;
if (!this.isEdit) return false;
return (
@@ -934,9 +1308,10 @@
handleAttachmentPreview() {
if (this.assessmentData.assessannex) {
try {
- const annexData = typeof this.assessmentData.assessannex === "string"
- ? JSON.parse(this.assessmentData.assessannex)
- : this.assessmentData.assessannex;
+ const annexData =
+ typeof this.assessmentData.assessannex === "string"
+ ? JSON.parse(this.assessmentData.assessannex)
+ : this.assessmentData.assessannex;
if (Array.isArray(annexData) && annexData.length > 0) {
this.currentPreviewFile = annexData[0];
@@ -965,7 +1340,6 @@
}
);
- // 鏇存柊璇勪及鐘舵�佷负宸插畬鎴�
const updateData = {
...this.assessmentData,
assessState: "3",
@@ -1082,17 +1456,210 @@
.fixed-width .el-button {
margin: 0 2px;
}
-
-/* 鎹愮尞鍐冲畾鏍峰紡浼樺寲 */
-.organ-decision-info {
- margin: 10px 0;
+/* 姹囨�婚〉闈㈡牱寮� */
+.assessment-summary {
padding: 10px;
- background-color: #f8f9fa;
- border-radius: 4px;
- border-left: 4px solid #409eff;
}
-.decision-tag {
- margin: 2px 5px;
+.summary-item {
+ font-weight: 500;
+ color: #303133;
+}
+
+.highlight-text {
+ color: #409EFF;
+ font-weight: 500;
+}
+
+.assessment-detail-card {
+ border: 1px solid #e6ebf5;
+}
+
+.organ-info-card {
+ border: 1px solid #e6ebf5;
+ background-color: #fafafa;
+}
+
+.no-assessment {
+ text-align: center;
+ padding: 40px 0;
+ color: #909399;
+}
+
+.assessment-item {
+ margin-bottom: 20px;
+}
+
+.assessment-item:last-child {
+ margin-bottom: 0;
+}
+
+.assessment-card {
+ border: 1px solid #dcdfe6;
+ border-radius: 8px;
+ transition: all 0.3s;
+}
+
+.assessment-card:hover {
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+ border-color: #409EFF;
+}
+
+.assessment-title {
+ font-size: 16px;
+ font-weight: 600;
+ color: #303133;
+}
+
+.status-tag {
+ float: right;
+ margin-right: 0;
+}
+
+.time-text {
+ color: #67C23A;
+ font-weight: 500;
+}
+
+.opinion-content {
+ padding: 8px 12px;
+ background: #f5f7fa;
+ border-radius: 4px;
+ line-height: 1.5;
+ color: #606266;
+ white-space: pre-wrap;
+ word-break: break-word;
+}
+
+.detail-descriptions {
+ background: #fff;
+}
+
+/* 浼樺寲琛ㄦ牸鏍峰紡 */
+::v-deep .el-table {
+ color: #303133;
+ font-size: 14px;
+}
+
+::v-deep .el-table th {
+ background-color: #f5f7fa;
+ color: #303133;
+ font-weight: 600;
+ padding: 12px 0;
+}
+
+::v-deep .el-table tr {
+ background-color: #fff;
+}
+
+::v-deep .el-table tr:hover {
+ background-color: #f5f7fa;
+}
+
+::v-deep .el-table .cell {
+ padding: 12px 10px;
+ line-height: 1.5;
+}
+
+::v-deep .el-table--striped .el-table__body tr.el-table__row--striped td {
+ background-color: #fafafa;
+}
+
+::v-deep .el-table--enable-row-hover .el-table__body tr:hover>td {
+ background-color: #ecf5ff;
+}
+
+/* 鍙瘎浼拌鏍峰紡 */
+::v-deep .assessable-row {
+ background-color: #f0f9ff !important;
+}
+
+::v-deep .assessable-row:hover {
+ background-color: #d9ecff !important;
+}
+
+::v-deep .non-assessable-row {
+ background-color: #fafafa !important;
+}
+
+/* 鎻忚堪鍒楄〃鏍峰紡浼樺寲 */
+::v-deep .el-descriptions__label {
+ width: 120px;
+ background-color: #f5f7fa;
+ font-weight: 600;
+ color: #303133;
+}
+
+::v-deep .el-descriptions__content {
+ background-color: #fff;
+ color: #606266;
+}
+
+::v-deep .el-descriptions__body {
+ background-color: #fff;
+}
+
+/* 鍗$墖鏍峰紡浼樺寲 */
+::v-deep .el-card__header {
+ background-color: #f5f7fa;
+ border-bottom: 1px solid #e6ebf5;
+ padding: 12px 20px;
+ font-weight: 600;
+ color: #303133;
+}
+
+::v-deep .el-card__body {
+ padding: 20px;
+}
+
+/* 鏍囩鏍峰紡浼樺寲 */
+::v-deep .el-tag {
+ font-weight: 500;
+ border-radius: 12px;
+ padding: 0 10px;
+ height: 24px;
+ line-height: 22px;
+}
+
+/* 鎸夐挳鏍峰紡浼樺寲 */
+::v-deep .el-button--mini {
+ padding: 7px 12px;
+ font-size: 12px;
+ border-radius: 4px;
+}
+
+/* Tab鏍峰紡浼樺寲 */
+::v-deep .el-tabs__item {
+ font-weight: 500;
+ color: #606266;
+}
+
+::v-deep .el-tabs__item.is-active {
+ color: #409EFF;
+ font-weight: 600;
+}
+
+::v-deep .el-tabs__nav-wrap::after {
+ background-color: #e4e7ed;
+}
+
+::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active {
+ background-color: #fff;
+ border-bottom-color: #fff;
+}
+
+/* 鍝嶅簲寮忚璁� */
+@media (max-width: 768px) {
+ .assessment-summary {
+ padding: 5px;
+ }
+
+ ::v-deep .el-table .cell {
+ padding: 8px 5px;
+ }
+
+ .assessment-card {
+ margin-bottom: 10px;
+ }
}
</style>
diff --git a/src/views/business/assess/components/OrganAssessmentForm.vue b/src/views/business/assess/components/OrganAssessmentForm.vue
index 2ef0c11..1b732dd 100644
--- a/src/views/business/assess/components/OrganAssessmentForm.vue
+++ b/src/views/business/assess/components/OrganAssessmentForm.vue
@@ -1,8 +1,8 @@
<template>
<div class="organ-assessment-form">
- <el-form :model="assessmentData" label-width="120px">
+ <el-form :model="formData" label-width="120px">
<el-form-item label="鍔熻兘鐘舵��">
- <el-select v-model="assessmentData.functionStatus">
+ <el-select v-model="formData.functionStatus">
<el-option label="姝e父" value="1" />
<el-option label="杞诲害寮傚父" value="2" />
<el-option label="閲嶅害寮傚父" value="3" />
@@ -13,7 +13,7 @@
<el-form-item label="璇勪及鎰忚">
<el-input
type="textarea"
- v-model="assessmentData.assessmentOpinion"
+ v-model="formData.assessmentOpinion"
:rows="4"
placeholder="璇疯緭鍏ヨ瘎浼版剰瑙�"
/>
@@ -46,16 +46,13 @@
<!-- 闄勪欢鍒楄〃 -->
<div
class="attachment-list"
- v-if="
- assessmentData.attachments &&
- assessmentData.attachments.length > 0
- "
+ v-if="formData.attachments && formData.attachments.length > 0"
>
<div class="list-title">
- 宸蹭笂浼犻檮浠� ({{ assessmentData.attachments.length }})
+ 宸蹭笂浼犻檮浠� ({{ formData.attachments.length }})
</div>
<el-table
- :data="assessmentData.attachments"
+ :data="formData.attachments"
style="width: 100%"
size="small"
>
@@ -121,14 +118,15 @@
</el-form-item>
<el-form-item v-if="!readonly">
- <el-button type="primary" @click="handleSave">淇濆瓨璇勪及</el-button>
+ <el-button type="primary" @click="handleSave">璇勪及瀹屾垚</el-button>
<el-button @click="handleCancel">鍙栨秷</el-button>
<el-button
- type="success"
- @click="handleAddAssessment"
- icon="el-icon-plus"
+ type="danger"
+ size="small"
+ @click="handleDelete"
+ icon="el-icon-delete"
>
- 鏂板璇勪及璁板綍
+ 鍒犻櫎姝よ瘎浼�
</el-button>
</el-form-item>
</el-form>
@@ -159,14 +157,6 @@
type: Object,
default: () => ({})
},
- assessmentData: {
- type: Object,
- default: () => ({
- functionStatus: "",
- assessmentOpinion: "",
- attachments: []
- })
- },
assessmentIndex: {
type: Number,
default: 0
@@ -174,73 +164,184 @@
readonly: {
type: Boolean,
default: false
+ },
+ // 娣诲姞鐢ㄦ埛淇℃伅props
+ currentUser: {
+ type: Object,
+ default: () => ({
+ name: "璇勪及鍛�"
+ })
}
},
data() {
return {
+ // 琛ㄥ崟鏁版嵁
+ formData: {
+ functionStatus: "",
+ assessmentOpinion: "",
+ attachments: []
+ },
// 棰勮鐩稿叧
previewVisible: false,
currentPreviewFile: null,
-
// 闄勪欢鐩稿叧閰嶇疆
attachmentLimit: 10,
attachmentAccept:
".pdf,.jpg,.jpeg,.png,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.txt",
- attachmentFileList: []
+ attachmentFileList: [],
+ // 鍘熷璇勪及鏁版嵁
+ currentAssessment: null
};
},
watch: {
organData: {
- handler(newVal, oldVal) {
- // 鍙湁褰撻檮浠舵暟鎹湡姝e彂鐢熷彉鍖栨椂鎵嶅垵濮嬪寲
- if (
- !oldVal ||
- !oldVal.attachments ||
- JSON.stringify(newVal.attachments) !==
- JSON.stringify(oldVal.attachments)
- ) {
- this.initAttachmentList();
- }
+ handler() {
+ this.initData();
},
- immediate: true,
+ deep: true,
+ immediate: true
+ },
+ // 娣卞害鐩戝惉琛ㄥ崟鏁版嵁鍙樺寲
+ formData: {
+ handler(newVal) {
+ this.$emit("update-assessment", {
+ organData: this.organData,
+ assessmentData: newVal,
+ assessmentIndex: this.assessmentIndex
+ });
+ },
deep: true
}
},
+ created() {
+ this.initData();
+ },
methods: {
- /** 鍒濆鍖栭檮浠跺垪琛� */
- initAttachmentList() {
- if (this.organData.attachments && this.organData.attachments.length > 0) {
- this.assessmentData.attachments = [...this.organData.attachments];
- this.attachmentFileList = this.organData.attachments.map(item => ({
- uid: item.id || Math.random(),
- name: item.fileName,
- url: item.path || item.fileUrl,
- status: "success"
- }));
- } else {
- this.assessmentData.attachments = [];
+ // 鍒濆鍖栨暟鎹�
+ initData() {
+ if (!this.organData || !this.organData.assesscontent) {
+ this.formData = {
+ functionStatus: "",
+ assessmentOpinion: "",
+ attachments: []
+ };
this.attachmentFileList = [];
+ return;
+ }
+
+ try {
+ const assessData =
+ typeof this.organData.assesscontent === "string"
+ ? JSON.parse(this.organData.assesscontent)
+ : this.organData.assesscontent;
+
+ if (
+ Array.isArray(assessData) &&
+ assessData.length > this.assessmentIndex
+ ) {
+ this.currentAssessment = assessData[this.assessmentIndex];
+
+ // 娣辨嫹璐濇暟鎹紝閬垮厤淇敼鍘熷鏁版嵁
+ const assessmentCopy = JSON.parse(
+ JSON.stringify(this.currentAssessment)
+ );
+
+ this.formData = {
+ functionStatus: assessmentCopy.functionStatus || "",
+ assessmentOpinion: assessmentCopy.assessmentOpinion || "",
+ attachments: Array.isArray(assessmentCopy.attachments)
+ ? [...assessmentCopy.attachments]
+ : []
+ };
+
+ // 鍒濆鍖栭檮浠舵枃浠跺垪琛�
+ this.attachmentFileList = this.formData.attachments.map(item => ({
+ uid: item.id || Math.random(),
+ name: item.fileName,
+ fileSize: item.fileSize,
+ url: item.path || item.fileUrl,
+ uploadTime: item.uploadTime,
+ status: "success"
+ }));
+ } else {
+ console.log("璇勪及绱㈠紩瓒呭嚭鑼冨洿鎴栨暟鎹负绌�");
+ this.resetForm();
+ }
+ } catch (error) {
+ console.error("鍒濆鍖栨暟鎹け璐�:", error);
+ this.resetForm();
}
},
- handleSave() {
- const saveData = {
- organData: this.organData,
- assessmentData: this.assessmentData,
- assessmentIndex: this.assessmentIndex
+
+ // 閲嶇疆琛ㄥ崟
+ resetForm() {
+ this.formData = {
+ functionStatus: "",
+ assessmentOpinion: "",
+ attachments: []
};
- this.$emit("save", saveData);
+ this.attachmentFileList = [];
+ },
+
+ // 淇濆瓨璇勪及
+ handleSave() {
+ // 楠岃瘉蹇呰瀛楁
+ if (!this.formData.functionStatus) {
+ this.$message.warning("璇烽�夋嫨鍔熻兘鐘舵��");
+ return;
+ }
+
+ if (!this.formData.assessmentOpinion) {
+ this.$message.warning("璇疯緭鍏ヨ瘎浼版剰瑙�");
+ return;
+ }
+
+ // 鍑嗗淇濆瓨鐨勬暟鎹�
+ const saveData = {
+ functionStatus: this.formData.functionStatus,
+ assessmentOpinion: this.formData.assessmentOpinion,
+ attachments: Array.isArray(this.formData.attachments)
+ ? [...this.formData.attachments]
+ : []
+ };
+
+ // 娣诲姞璇勪及鑰呭拰璇勪及鏃堕棿
+ const assessmentData = {
+ ...saveData,
+ assessor: this.currentUser.name,
+ assessmentTime: new Date().toISOString()
+ };
+
+ console.log("鍙戦�佷繚瀛樿姹�:", assessmentData);
+
+ this.$emit("save-assessment", {
+ organData: this.organData,
+ assessmentData: assessmentData,
+ assessmentIndex: this.assessmentIndex
+ });
},
handleCancel() {
this.$emit("cancel");
},
- handleAddAssessment() {
- this.$emit("add-assessment", {
- organData: this.organData,
- currentIndex: this.assessmentIndex
- });
+ handleDelete() {
+ this.$confirm("纭鍒犻櫎姝よ瘎浼拌褰曞悧锛�", "纭鍒犻櫎", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ })
+ .then(() => {
+ this.$emit("delete-assessment", {
+ organData: this.organData,
+ assessmentIndex: this.assessmentIndex
+ });
+ })
+ .catch(() => {
+ this.$message.info("宸插彇娑堝垹闄�");
+ });
},
+
/** 闄勪欢鍙樺寲澶勭悊 */
handleAttachmentChange(fileList) {
this.attachmentFileList = fileList;
@@ -249,47 +350,49 @@
/** 闄勪欢绉婚櫎澶勭悊 */
handleAttachmentRemove(file) {
if (file.url) {
- const index = this.assessmentData.attachments.findIndex(
+ const index = this.formData.attachments.findIndex(
item => item.path === file.url || item.fileUrl === file.url
);
if (index > -1) {
- this.assessmentData.attachments.splice(index, 1);
+ this.formData.attachments.splice(index, 1);
+ this.$message.success("闄勪欢鍒犻櫎鎴愬姛");
}
}
},
/** 鎵嬪姩鍒犻櫎闄勪欢 */
handleRemoveAttachment(index) {
- this.assessmentData.attachments.splice(index, 1);
+ this.formData.attachments.splice(index, 1);
this.attachmentFileList.splice(index, 1);
this.$message.success("闄勪欢鍒犻櫎鎴愬姛");
},
/** 涓婁紶鎴愬姛澶勭悊 */
handleUploadSuccess({ file, fileList, response }) {
- console.log(response);
-
- if (response.code == 200) {
- console.log(1);
+ if (response.code === 200) {
+ console.log(response, "涓婁紶鏁版嵁");
const attachmentObj = {
- // id:
- // response.data.fileId ||
- // Math.random()
- // .toString(36)
- // .substr(2),
fileName: file.name,
- path: response.data.fileUrl || file.url,
- fileUrl: response.data.fileUrl || file.url,
+ path: response.fileUrl || file.url,
+ fileUrl: response.fileUrl || file.url,
fileType: this.getFileExtension(file.name),
fileSize: file.size,
- uploadTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
- assessmentType: this.assessmentType,
- organType: this.organData.organType
+ uploadTime: dayjs().format("YYYY-MM-DD HH:mm:ss")
};
- console.log(2,attachmentObj);
- this.assessmentData.attachments.push(attachmentObj);
+ console.log("娣诲姞涓婁紶鐨勯檮浠�:", attachmentObj);
+
+ // 纭繚 attachments 鏄暟缁�
+ if (!Array.isArray(this.formData.attachments)) {
+ this.formData.attachments = [];
+ }
+
+ this.formData.attachments.push(attachmentObj);
+
+ // 鏇存柊鏂囦欢鍒楄〃
+ this.attachmentFileList = fileList;
+
this.$message.success("鏂囦欢涓婁紶鎴愬姛");
}
},
diff --git a/src/views/business/assess/index.vue b/src/views/business/assess/index.vue
index c509edc..f2e246d 100644
--- a/src/views/business/assess/index.vue
+++ b/src/views/business/assess/index.vue
@@ -83,10 +83,10 @@
<el-card class="tool-card">
<el-row :gutter="10">
<el-col :span="16">
- <el-button type="primary" icon="el-icon-plus" @click="handleCreate"
+ <!-- <el-button type="primary" icon="el-icon-plus" @click="handleCreate"
>鏂板璇勪及</el-button
- >
- <el-button
+ > -->
+ <!-- <el-button
type="success"
icon="el-icon-edit"
:disabled="single"
@@ -99,7 +99,7 @@
:disabled="multiple"
@click="handleDelete"
>鍒犻櫎</el-button
- >
+ > -->
<el-button
type="warning"
icon="el-icon-download"
@@ -205,6 +205,7 @@
label="鎿嶄綔"
align="center"
width="200"
+ fixed="right"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
@@ -217,8 +218,8 @@
>
<el-button
v-if="
- scope.row.assessState === '1' ||
- scope.row.assessState === '2'
+ scope.row.assessState != '3' ||
+ scope.row.assessState != '4'
"
size="mini"
type="text"
@@ -226,14 +227,14 @@
@click.stop="handleAssess(scope.row)"
>璇勪及</el-button
>
- <el-button
+ <!-- <el-button
v-if="scope.row.assessState === '3'"
size="mini"
type="text"
icon="el-icon-check"
@click.stop="handleConfirm(scope.row)"
>纭</el-button
- >
+ > -->
</template>
</el-table-column>
</el-table>
diff --git a/src/views/business/decide/DecideInfo.vue b/src/views/business/decide/DecideInfo.vue
index 74ca8c9..32252de 100644
--- a/src/views/business/decide/DecideInfo.vue
+++ b/src/views/business/decide/DecideInfo.vue
@@ -6,8 +6,8 @@
<span class="detail-title">姝讳骸鍒ゅ畾鍩烘湰淇℃伅</span>
<el-button
v-if="isEdit"
- type="primary"
- style="float: right; padding: 3px 0"
+ type="success"
+ style="float: right"
@click="handleSave"
:loading="saveLoading"
>
@@ -16,7 +16,7 @@
<el-button
v-else
type="primary"
- style="float: right; padding: 3px 0"
+ style="float: right"
@click="handleEdit"
>
缂栬緫淇℃伅
@@ -138,7 +138,10 @@
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="璐熻矗浜�" prop="responsibleusername">
- <el-input v-model="form.responsibleusername" :readonly="!isEdit" />
+ <el-input
+ v-model="form.responsibleusername"
+ :readonly="!isEdit"
+ />
</el-form-item>
</el-col>
<el-col :span="8">
@@ -166,7 +169,7 @@
<el-card class="attachment-card">
<div slot="header" class="clearfix">
<span class="detail-title">姝讳骸鍒ゅ畾璇勪及琛ㄩ檮浠�</span>
- <el-button
+ <!-- <el-button
v-if="isEdit"
type="primary"
size="mini"
@@ -174,7 +177,7 @@
:loading="uploadLoading"
>
涓婁紶闄勪欢
- </el-button>
+ </el-button> -->
</div>
<!-- 闄勪欢绫诲瀷閫夐」鍗� -->
@@ -221,7 +224,9 @@
<el-table-column label="鏂囦欢绫诲瀷" width="100" align="center">
<template slot-scope="scope">
- <el-tag size="small">{{ getFileType(scope.row.fileName) }}</el-tag>
+ <el-tag size="small">{{
+ getFileType(scope.row.fileName)
+ }}</el-tag>
</template>
</el-table-column>
@@ -243,11 +248,7 @@
</template>
</el-table-column>
- <el-table-column
- label="鎿嶄綔"
- width="180"
- align="center"
- >
+ <el-table-column label="鎿嶄綔" width="180" align="center">
<template slot-scope="scope">
<el-button
size="mini"
@@ -280,7 +281,10 @@
v-if="getAttachmentsByType(type.value).length === 0"
class="empty-attachment"
>
- <el-empty description="鏆傛棤璇勪及琛ㄩ檮浠�" :image-size="80"></el-empty>
+ <el-empty
+ description="鏆傛棤璇勪及琛ㄩ檮浠�"
+ :image-size="80"
+ ></el-empty>
</div>
</div>
</el-tab-pane>
@@ -298,16 +302,20 @@
ref="uploadRef"
class="upload-demo"
drag
- action="#"
+ :action="uploadAction"
+ :headers="headers"
multiple
:file-list="tempFileList"
:before-upload="beforeUpload"
:on-change="handleFileChange"
:on-remove="handleTempRemove"
+ :on-success="handleUploadSuccess"
:auto-upload="false"
>
<i class="el-icon-upload"></i>
- <div class="el-upload__text">灏嗚瘎浼拌〃鏂囦欢鎷栧埌姝ゅ锛屾垨<em>鐐瑰嚮涓婁紶</em></div>
+ <div class="el-upload__text">
+ 灏嗚瘎浼拌〃鏂囦欢鎷栧埌姝ゅ锛屾垨<em>鐐瑰嚮涓婁紶</em>
+ </div>
<div class="el-upload__tip" slot="tip">
鏀寔涓婁紶pdf銆乯pg銆乸ng銆乨oc銆乨ocx銆亁ls銆亁lsx鏍煎紡鏂囦欢锛屽崟涓枃浠朵笉瓒呰繃10MB
</div>
@@ -330,6 +338,7 @@
<script>
import { deathinfoedit, deathinfoInfo } from "@/api/businessApi";
+import { getToken } from "@/utils/auth";
export default {
name: "DeathJudgmentDetail",
@@ -384,7 +393,10 @@
uploadLoading: false,
tempFileList: [],
currentUploadType: "",
-
+ uploadAction: process.env.VUE_APP_BASE_API + "/common/upload",
+ headers: {
+ Authorization: "Bearer " + getToken()
+ },
// 璇勪及琛ㄧ被鍨嬪畾涔�
attachmentTypes: [
{ value: "1", label: "鑴戞浜″垽瀹氳〃" },
@@ -410,10 +422,10 @@
},
created() {
const id = this.$route.query.id;
- this.isEdit = this.$route.path.includes('/edit') || this.$route.path.includes('/add');
- if (id && !this.$route.path.includes('/add')) {
+ this.isEdit = this.$route.query.isEdit;
+ if (id && !this.$route.path.includes("/add")) {
this.getDetail(id);
- } else if (this.$route.path.includes('/add')) {
+ } else if (this.$route.path.includes("/add")) {
this.generateDonorNo();
}
this.getAttachmentList();
@@ -422,12 +434,12 @@
// 鐢熸垚鎹愮尞鑰呯紪鍙�
generateDonorNo() {
const timestamp = Date.now().toString();
- this.form.donorno = 'DONOR' + timestamp.slice(-8);
+ this.form.donorno = "DONOR" + timestamp.slice(-8);
},
// 鑾峰彇璇︽儏
async getDetail(id) {
try {
- const response = await deathinfoInfo({ id });
+ const response = await deathinfoInfo(id);
let realData = {};
if (response && response.data) {
@@ -441,18 +453,21 @@
...this.form,
...realData,
// 纭繚鏁板�肩被鍨嬪瓧娈垫纭浆鎹�
- isspendremember: realData.isspendremember ? parseInt(realData.isspendremember) : 0,
- isrestoreremains: realData.isrestoreremains ? parseInt(realData.isrestoreremains) : 0
+ isspendremember: realData.isspendremember
+ ? parseInt(realData.isspendremember)
+ : 0,
+ isrestoreremains: realData.isrestoreremains
+ ? parseInt(realData.isrestoreremains)
+ : 0
};
// 瑙f瀽闄勪欢淇℃伅
if (realData.rememberannex) {
this.parseAttachmentData(realData.rememberannex);
}
-
} catch (error) {
- console.error('鑾峰彇姝讳骸鍒ゅ畾璇︽儏澶辫触:', error);
- this.$message.error('鏁版嵁鍔犺浇澶辫触');
+ console.error("鑾峰彇姝讳骸鍒ゅ畾璇︽儏澶辫触:", error);
+ this.$message.error("鏁版嵁鍔犺浇澶辫触");
}
},
// 瑙f瀽闄勪欢鏁版嵁
@@ -465,7 +480,7 @@
}
}
} catch (error) {
- console.error('瑙f瀽闄勪欢鏁版嵁澶辫触:', error);
+ console.error("瑙f瀽闄勪欢鏁版嵁澶辫触:", error);
}
},
// 鏋勫缓闄勪欢JSON鏁版嵁
@@ -477,7 +492,7 @@
const statusMap = {
"0": "warning", // 缁存姢涓�
"1": "success", // 宸插畬鎴�
- "99": "danger" // 宸茬粓姝�
+ "99": "danger" // 宸茬粓姝�
};
return statusMap[status] || "info";
},
@@ -504,16 +519,19 @@
},
// 鑾峰彇鏂囦欢绫诲瀷
getFileType(fileName) {
- const ext = fileName.split('.').pop().toLowerCase();
+ const ext = fileName
+ .split(".")
+ .pop()
+ .toLowerCase();
const typeMap = {
- 'pdf': 'PDF',
- 'doc': 'DOC',
- 'docx': 'DOCX',
- 'xls': 'XLS',
- 'xlsx': 'XLSX',
- 'jpg': 'JPG',
- 'jpeg': 'JPEG',
- 'png': 'PNG'
+ pdf: "PDF",
+ doc: "DOC",
+ docx: "DOCX",
+ xls: "XLS",
+ xlsx: "XLSX",
+ jpg: "JPG",
+ jpeg: "JPEG",
+ png: "PNG"
};
return typeMap[ext] || ext.toUpperCase();
},
@@ -531,34 +549,37 @@
// 涓婁紶鍓嶆牎楠�
beforeUpload(file) {
const allowedTypes = [
- 'application/pdf',
- 'image/jpeg',
- 'image/png',
- 'application/msword',
- 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
- 'application/vnd.ms-excel',
- 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+ "application/pdf",
+ "image/jpeg",
+ "image/png",
+ "application/msword",
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+ "application/vnd.ms-excel",
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
];
const maxSize = 10 * 1024 * 1024; // 10MB
- const isTypeOk = allowedTypes.includes(file.type) ||
- file.name.endsWith('.pdf') ||
- file.name.endsWith('.jpg') ||
- file.name.endsWith('.jpeg') ||
- file.name.endsWith('.png') ||
- file.name.endsWith('.doc') ||
- file.name.endsWith('.docx') ||
- file.name.endsWith('.xls') ||
- file.name.endsWith('.xlsx');
+ const isTypeOk =
+ allowedTypes.includes(file.type) ||
+ file.name.endsWith(".pdf") ||
+ file.name.endsWith(".jpg") ||
+ file.name.endsWith(".jpeg") ||
+ file.name.endsWith(".png") ||
+ file.name.endsWith(".doc") ||
+ file.name.endsWith(".docx") ||
+ file.name.endsWith(".xls") ||
+ file.name.endsWith(".xlsx");
if (!isTypeOk) {
- this.$message.error('鏂囦欢鏍煎紡涓嶆敮鎸侊紝璇蜂笂浼爌df銆乯pg銆乸ng銆乨oc銆乨ocx銆亁ls鎴杧lsx鏍煎紡鏂囦欢');
+ this.$message.error(
+ "鏂囦欢鏍煎紡涓嶆敮鎸侊紝璇蜂笂浼爌df銆乯pg銆乸ng銆乨oc銆乨ocx銆亁ls鎴杧lsx鏍煎紡鏂囦欢"
+ );
return false;
}
if (file.size > maxSize) {
- this.$message.error('鏂囦欢澶у皬涓嶈兘瓒呰繃10MB');
+ this.$message.error("鏂囦欢澶у皬涓嶈兘瓒呰繃10MB");
return false;
}
@@ -572,16 +593,11 @@
handleTempRemove(file, fileList) {
this.tempFileList = fileList;
},
- // 鎻愪氦涓婁紶
- async submitUpload() {
- if (this.tempFileList.length === 0) {
- this.$message.warning('璇峰厛閫夋嫨瑕佷笂浼犵殑鏂囦欢');
- return;
- }
-
- this.uploadLoading = true;
-
- try {
+ /** 涓婁紶鎴愬姛澶勭悊 */
+ handleUploadSuccess(response, file, fileList) {
+ if (response.code === 200) {
+ file.url = response.data || response.url;
+ this.$message.success("鏂囦欢涓婁紶鎴愬姛");
for (const file of this.tempFileList) {
const newAttachment = {
id: Date.now() + Math.random(),
@@ -590,8 +606,8 @@
fileName: file.name,
fileSize: file.size,
uploadTime: new Date().toISOString(),
- uploader: '褰撳墠鐢ㄦ埛',
- fileUrl: URL.createObjectURL(file.raw)
+ uploader: "褰撳墠鐢ㄦ埛",
+ fileUrl: file.url
};
this.attachmentList.push(newAttachment);
@@ -600,49 +616,92 @@
// 鏇存柊闄勪欢JSON鏁版嵁鍒拌〃鍗�
this.form.rememberannex = this.buildAttachmentJson();
- this.$message.success('鏂囦欢涓婁紶鎴愬姛');
+ this.$message.success("鏂囦欢涓婁紶鎴愬姛");
this.uploadDialogVisible = false;
- this.tempFileList = [];
- } catch (error) {
- this.$message.error('鏂囦欢涓婁紶澶辫触');
- console.error('涓婁紶澶辫触:', error);
- } finally {
this.uploadLoading = false;
+ this.tempFileList = [];
+ } else {
+ this.$message.error(response.msg || "鏂囦欢涓婁紶澶辫触");
}
+ },
+ // 鎻愪氦涓婁紶
+ async submitUpload() {
+ if (this.tempFileList.length === 0) {
+ this.$message.warning("璇峰厛閫夋嫨瑕佷笂浼犵殑鏂囦欢");
+ return;
+ }
+ this.$refs.uploadRef.submit();
+ this.uploadLoading = true;
+
+ // try {
+ // for (const file of this.tempFileList) {
+ // const newAttachment = {
+ // id: Date.now() + Math.random(),
+ // type: this.currentUploadType,
+ // typeName: this.getCurrentTypeLabel,
+ // fileName: file.name,
+ // fileSize: file.size,
+ // uploadTime: new Date().toISOString(),
+ // uploader: "褰撳墠鐢ㄦ埛",
+ // fileUrl: URL.createObjectURL(file.raw)
+ // };
+
+ // this.attachmentList.push(newAttachment);
+ // }
+
+ // // 鏇存柊闄勪欢JSON鏁版嵁鍒拌〃鍗�
+ // this.form.rememberannex = this.buildAttachmentJson();
+
+ // this.$message.success("鏂囦欢涓婁紶鎴愬姛");
+ // this.uploadDialogVisible = false;
+ // this.tempFileList = [];
+ // } catch (error) {
+ // this.$message.error("鏂囦欢涓婁紶澶辫触");
+ // console.error("涓婁紶澶辫触:", error);
+ // } finally {
+ // this.uploadLoading = false;
+ // }
},
// 鍒犻櫎闄勪欢
handleRemoveAttachment(attachment) {
- this.$confirm('纭畾瑕佸垹闄よ繖涓瘎浼拌〃闄勪欢鍚楋紵', '鎻愮ず', {
- confirmButtonText: '纭畾',
- cancelButtonText: '鍙栨秷',
- type: 'warning'
- }).then(() => {
- const index = this.attachmentList.findIndex(item => item.id === attachment.id);
- if (index !== -1) {
- this.attachmentList.splice(index, 1);
- // 鏇存柊闄勪欢JSON鏁版嵁鍒拌〃鍗�
- this.form.rememberannex = this.buildAttachmentJson();
- this.$message.success('璇勪及琛ㄥ垹闄ゆ垚鍔�');
- }
- }).catch(() => {});
+ this.$confirm("纭畾瑕佸垹闄よ繖涓瘎浼拌〃闄勪欢鍚楋紵", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ })
+ .then(() => {
+ const index = this.attachmentList.findIndex(
+ item => item.id === attachment.id
+ );
+ if (index !== -1) {
+ this.attachmentList.splice(index, 1);
+ // 鏇存柊闄勪欢JSON鏁版嵁鍒拌〃鍗�
+ this.form.rememberannex = this.buildAttachmentJson();
+ this.$message.success("璇勪及琛ㄥ垹闄ゆ垚鍔�");
+ }
+ })
+ .catch(() => {});
},
// 棰勮闄勪欢
handlePreview(attachment) {
- if (attachment.fileName.endsWith('.pdf')) {
- window.open(attachment.fileUrl, '_blank');
+ if (attachment.fileName.endsWith(".pdf")) {
+ window.open(attachment.fileUrl, "_blank");
} else if (attachment.fileName.match(/\.(jpg|jpeg|png)$/i)) {
- this.$alert(`<img src="${attachment.fileUrl}" style="max-width: 100%;" alt="${attachment.fileName}">`,
- '鍥剧墖棰勮', {
+ this.$alert(
+ `<img src="${attachment.fileUrl}" style="max-width: 100%;" alt="${attachment.fileName}">`,
+ "鍥剧墖棰勮",
+ {
dangerouslyUseHTMLString: true,
- customClass: 'image-preview-dialog'
- });
+ customClass: "image-preview-dialog"
+ }
+ );
} else {
- this.$message.info('璇ユ枃浠剁被鍨嬫殏涓嶆敮鎸佸湪绾块瑙堬紝璇蜂笅杞藉悗鏌ョ湅');
+ this.$message.info("璇ユ枃浠剁被鍨嬫殏涓嶆敮鎸佸湪绾块瑙堬紝璇蜂笅杞藉悗鏌ョ湅");
}
},
// 涓嬭浇闄勪欢
handleDownload(attachment) {
- const link = document.createElement('a');
+ const link = document.createElement("a");
link.href = attachment.fileUrl;
link.download = attachment.fileName;
link.click();
@@ -669,18 +728,18 @@
const response = await deathinfoedit(submitData);
if (response.code === 200) {
- this.$message.success('淇濆瓨鎴愬姛');
+ this.$message.success("淇濆瓨鎴愬姛");
this.isEdit = false;
- if (this.$route.path.includes('/add')) {
- this.$router.push('/case/deathJudgment');
+ if (this.$route.path.includes("/add")) {
+ this.$router.push("/case/deathJudgment");
}
} else {
- this.$message.error(response.message || '淇濆瓨澶辫触');
+ this.$message.error(response.message || "淇濆瓨澶辫触");
}
} catch (error) {
- console.error('淇濆瓨澶辫触:', error);
- this.$message.error('淇濆瓨澶辫触');
+ console.error("淇濆瓨澶辫触:", error);
+ this.$message.error("淇濆瓨澶辫触");
} finally {
this.saveLoading = false;
}
@@ -689,17 +748,28 @@
},
// 鏂囦欢澶у皬鏍煎紡鍖�
formatFileSize(size) {
- if (size === 0) return '0 B';
+ if (size === 0) return "0 B";
const k = 1024;
- const sizes = ['B', 'KB', 'MB', 'GB'];
+ const sizes = ["B", "KB", "MB", "GB"];
const i = Math.floor(Math.log(size) / Math.log(k));
- return parseFloat((size / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
+ return parseFloat((size / Math.pow(k, i)).toFixed(2)) + " " + sizes[i];
},
// 鏃堕棿鏍煎紡鍖�
parseTime(time) {
- if (!time) return '';
+ if (!time) return "";
const date = new Date(time);
- return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')} ${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`;
+ return `${date.getFullYear()}-${(date.getMonth() + 1)
+ .toString()
+ .padStart(2, "0")}-${date
+ .getDate()
+ .toString()
+ .padStart(2, "0")} ${date
+ .getHours()
+ .toString()
+ .padStart(2, "0")}:${date
+ .getMinutes()
+ .toString()
+ .padStart(2, "0")}`;
}
}
};
diff --git a/src/views/business/decide/index.vue b/src/views/business/decide/index.vue
index 88b380a..02e8add 100644
--- a/src/views/business/decide/index.vue
+++ b/src/views/business/decide/index.vue
@@ -204,6 +204,7 @@
label="鎿嶄綔"
align="center"
width="180"
+ fixed="right"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
@@ -238,7 +239,11 @@
</template>
<script>
-import { queryDathInfoBaseInfo, deathinfoedit,deathinfoInfo } from "@/api/businessApi";
+import {
+ queryDathInfoBaseInfo,
+ deathinfoedit,
+ deathinfoInfo
+} from "@/api/businessApi";
import Pagination from "@/components/Pagination";
export default {
@@ -448,7 +453,7 @@
const id = row.id || this.ids[0];
this.$router.push({
path: "/case/DecideInfo",
- query: { id: id }
+ query: { id: id, isEdit: true }
});
},
diff --git a/src/views/business/ethicalReview/index.vue b/src/views/business/ethicalReview/index.vue
index 6c6eee7..e0cb1be 100644
--- a/src/views/business/ethicalReview/index.vue
+++ b/src/views/business/ethicalReview/index.vue
@@ -8,37 +8,47 @@
:inline="true"
label-width="100px"
>
- <el-form-item label="浣忛櫌鍙�" prop="hospitalNo">
+ <el-form-item label="浣忛櫌鍙�" prop="inpatientno">
<el-input
- v-model="queryParams.hospitalNo"
+ v-model="queryParams.inpatientno"
placeholder="璇疯緭鍏ヤ綇闄㈠彿"
clearable
style="width: 200px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="鎹愮尞鑰呭鍚�" prop="donorName">
+ <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
<el-input
- v-model="queryParams.donorName"
+ v-model="queryParams.name"
placeholder="璇疯緭鍏ユ崘鐚�呭鍚�"
clearable
style="width: 200px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="浼︾悊缁撹" prop="ethicsConclusion">
+ <el-form-item label="妗堜緥缂栧彿" prop="caseNo">
+ <el-input
+ v-model="queryParams.caseNo"
+ placeholder="璇疯緭鍏ユ渚嬬紪鍙�"
+ clearable
+ style="width: 200px"
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+ <el-form-item label="浼︾悊鐘舵��" prop="status">
<el-select
- v-model="queryParams.ethicsConclusion"
- placeholder="璇烽�夋嫨浼︾悊缁撹"
+ v-model="queryParams.status"
+ placeholder="璇烽�夋嫨浼︾悊鐘舵��"
clearable
style="width: 200px"
>
- <el-option label="瀹℃煡涓�" value="reviewing" />
- <el-option label="鍚屾剰" value="approved" />
- <el-option label="淇敼鍚庡悓鎰�" value="approved_with_modifications" />
- <el-option label="淇敼鍚庨噸瀹�" value="re-review" />
- <el-option label="涓嶅悓鎰�" value="disapproved" />
- <el-option label="缁堟瀹℃煡" value="terminated" />
+ <el-option label="鍏ㄩ儴" value="" />
+ <el-option
+ v-for="dict in dict.type.sys_ethical"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
</el-select>
</el-form-item>
<el-form-item label="瀹℃煡鏃堕棿鑼冨洿" prop="reviewTimeRange">
@@ -76,13 +86,6 @@
>淇敼</el-button
>
<el-button
- type="danger"
- icon="el-icon-delete"
- :disabled="multiple"
- @click="handleDelete"
- >鍒犻櫎</el-button
- >
- <el-button
type="warning"
icon="el-icon-download"
@click="handleExport"
@@ -91,7 +94,7 @@
<el-button
type="info"
icon="el-icon-check"
- :disabled="multiple"
+ :disabled="single"
@click="handleEndReview"
>缁撴潫瀹℃煡</el-button
>
@@ -113,90 +116,115 @@
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column
- label="浣忛櫌鍙�"
+ label="妗堜緥缂栧彿"
align="center"
- prop="hospitalNo"
+ prop="caseNo"
width="120"
/>
<el-table-column
- label="鎹愮尞鑰呭鍚�"
+ label="鎹愮尞鑰呯紪鍙�"
align="center"
- prop="donorName"
+ prop="donorno"
width="120"
/>
- <el-table-column label="鎬у埆" align="center" prop="gender" width="80">
+ <el-table-column
+ label="濮撳悕"
+ align="center"
+ prop="name"
+ width="100"
+ />
+ <el-table-column
+ label="浣忛櫌鍙�"
+ align="center"
+ prop="inpatientno"
+ width="120"
+ />
+ <el-table-column label="鎬у埆" align="center" prop="sex" width="80">
<template slot-scope="scope">
<dict-tag
:options="dict.type.sys_user_sex"
- :value="parseInt(scope.row.gender)"
+ :value="scope.row.sex"
/>
</template>
</el-table-column>
<el-table-column label="骞撮緞" align="center" prop="age" width="80" />
<el-table-column
+ label="琛�鍨�"
+ align="center"
+ prop="bloodtype"
+ width="80"
+ />
+ <el-table-column
+ label="璇佷欢鍙风爜"
+ align="center"
+ prop="idcardno"
+ width="180"
+ />
+ <el-table-column
label="鐤剧梾璇婃柇"
align="center"
- prop="diagnosis"
+ prop="diagnosisname"
min-width="180"
show-overflow-tooltip
/>
<el-table-column
- label="浼︾悊缁撹"
+ label="鍖荤枟鏈烘瀯"
align="center"
- prop="ethicsConclusion"
- width="120"
- >
- <template slot-scope="scope">
- <el-tag :type="conclusionFilter(scope.row.ethicsConclusion)">
- {{ conclusionTextFilter(scope.row.ethicsConclusion) }}
- </el-tag>
- </template>
- </el-table-column>
- <el-table-column
- label="浼︾悊鎰忚"
- align="center"
- prop="ethicsOpinion"
- min-width="200"
+ prop="treatmenthospitalname"
+ min-width="150"
show-overflow-tooltip
/>
<el-table-column
- label="瀹℃煡鏃堕棿"
+ label="浼︾悊鐘舵��"
align="center"
- prop="reviewTime"
- width="160"
+ prop="status"
+ width="100"
>
<template slot-scope="scope">
- <span>{{
- scope.row.reviewTime
- ? parseTime(scope.row.reviewTime, "{y}-{m}-{d} {h}:{i}")
- : "-"
- }}</span>
+ <dict-tag
+ :options="dict.type.sys_ethical"
+ :value="scope.row.status"
+ />
</template>
</el-table-column>
<el-table-column
- label="鐧昏鏃堕棿"
+ label="涓撳缁撹"
align="center"
- prop="registrationTime"
- width="160"
- >
- <template slot-scope="scope">
- <span>{{
- scope.row.registrationTime
- ? parseTime(scope.row.registrationTime, "{y}-{m}-{d} {h}:{i}")
- : "-"
- }}</span>
- </template>
- </el-table-column>
+ prop="expertConclusion"
+ width="120"
+ />
<el-table-column
- label="鐧昏浜�"
+ label="涓撳鎰忚"
align="center"
- prop="registrant"
+ prop="expertOpinion"
+ min-width="150"
+ show-overflow-tooltip
+ />
+ <el-table-column
+ label="涓撳濮撳悕"
+ align="center"
+ prop="expertName"
width="100"
/>
<el-table-column
+ label="缁撹鏃堕棿"
+ align="center"
+ prop="expertTime"
+ width="160"
+ >
+ <template slot-scope="scope">
+ <span>{{
+ scope.row.expertTime
+ ? parseTime(scope.row.expertTime, "{y}-{m}-{d} {h}:{i}")
+ : "-"
+ }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column
label="鎿嶄綔"
align="center"
- width="260"
+ width="180"
+ fixed="right"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
@@ -219,16 +247,8 @@
type="text"
icon="el-icon-check"
@click="handleEndReview(scope.row)"
- :disabled="scope.row.ethicsConclusion === 'terminated'"
+ :disabled="scope.row.status === '2'"
>缁撴潫</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>
@@ -247,19 +267,21 @@
</template>
<script>
-import { listEthicsReview, delEthicsReview, exportEthicsReview, endEthicsReview } from "./ethicsReview";
+import { reviewinitiateBaseInfoList, ethicalreviewedit, } from "@/api/businessApi";
import Pagination from "@/components/Pagination";
export default {
name: "EthicsReviewList",
components: { Pagination },
- dicts: ["sys_user_sex"],
+ dicts: ["sys_user_sex", "sys_ethical"],
data() {
return {
// 閬僵灞�
loading: true,
// 閫変腑鏁扮粍
ids: [],
+ // 閫変腑鐨勮鏁版嵁
+ selectedRows: [],
// 闈炲崟涓鐢�
single: true,
// 闈炲涓鐢�
@@ -272,9 +294,10 @@
queryParams: {
pageNum: 1,
pageSize: 10,
- hospitalNo: undefined,
- donorName: undefined,
- ethicsConclusion: undefined,
+ inpatientno: undefined,
+ name: undefined,
+ caseNo: undefined,
+ status: undefined,
reviewTimeRange: []
}
};
@@ -283,39 +306,31 @@
this.getList();
},
methods: {
- // 浼︾悊缁撹杩囨护鍣�
- conclusionFilter(conclusion) {
- const conclusionMap = {
- "reviewing": "warning", // 瀹℃煡涓�
- "approved": "success", // 鍚屾剰
- "approved_with_modifications": "primary", // 淇敼鍚庡悓鎰�
- "re-review": "info", // 淇敼鍚庨噸瀹�
- "disapproved": "danger", // 涓嶅悓鎰�
- "terminated": "info" // 缁堟瀹℃煡
- };
- return conclusionMap[conclusion] || "info";
- },
- conclusionTextFilter(conclusion) {
- const conclusionMap = {
- "reviewing": "瀹℃煡涓�",
- "approved": "鍚屾剰",
- "approved_with_modifications": "淇敼鍚庡悓鎰�",
- "re-review": "淇敼鍚庨噸瀹�",
- "disapproved": "涓嶅悓鎰�",
- "terminated": "缁堟瀹℃煡"
- };
- return conclusionMap[conclusion] || "鏈煡";
- },
// 鏌ヨ浼︾悊瀹℃煡鍒楄〃
getList() {
this.loading = true;
- listEthicsReview(this.queryParams)
+
+ // 澶勭悊鏌ヨ鍙傛暟
+ const params = {
+ ...this.queryParams
+ };
+
+ // 绉婚櫎鍒嗛〉鍙傛暟浠ュ鐨勯澶栧弬鏁�
+ delete params.reviewTimeRange;
+
+ // 濡傛灉鏈夋椂闂磋寖鍥村弬鏁�
+ if (this.queryParams.reviewTimeRange && this.queryParams.reviewTimeRange.length === 2) {
+ params.expertTimeStart = this.queryParams.reviewTimeRange[0] + ' 00:00:00';
+ params.expertTimeEnd = this.queryParams.reviewTimeRange[1] + ' 23:59:59';
+ }
+
+ reviewinitiateBaseInfoList(params)
.then(response => {
if (response.code === 200) {
- this.ethicsReviewList = response.data.rows;
- this.total = response.data.total;
+ this.ethicsReviewList = response.data || [];
+ this.total = response.total || 0;
} else {
- this.$message.error("鑾峰彇鏁版嵁澶辫触");
+ this.$message.error(response.msg || "鑾峰彇鏁版嵁澶辫触");
}
this.loading = false;
})
@@ -337,7 +352,8 @@
},
// 澶氶�夋閫変腑鏁版嵁
handleSelectionChange(selection) {
- this.ids = selection.map(item => item.id);
+ this.ids = selection.map(item => item.infoid);
+ this.selectedRows = selection;
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
@@ -345,7 +361,7 @@
handleView(row) {
this.$router.push({
path: "/case/ethicalReviewInfo",
- query: { id: row.id }
+ query: { id: row.infoid }
});
},
// 鏂板鎸夐挳鎿嶄綔
@@ -354,53 +370,62 @@
},
// 淇敼鎸夐挳鎿嶄綔
handleUpdate(row) {
- const id = row.id || this.ids[0];
+ const id = row.infoid || this.ids[0];
this.$router.push({
path: "/case/ethicalReviewInfo",
query: { id: id }
});
},
- // 鍒犻櫎鎸夐挳鎿嶄綔
- handleDelete(row) {
- const ids = row.id ? [row.id] : this.ids;
- this.$confirm("鏄惁纭鍒犻櫎閫変腑鐨勬暟鎹」锛�", "璀﹀憡", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning"
- })
- .then(() => {
- return delEthicsReview(ids);
- })
- .then(response => {
- if (response.code === 200) {
- this.$message.success("鍒犻櫎鎴愬姛");
- this.getList();
- }
- })
- .catch(() => {});
- },
// 缁撴潫瀹℃煡鎿嶄綔
handleEndReview(row) {
- const ids = row.id ? [row.id] : this.ids;
+ const selectedRow = row || (this.selectedRows.length === 1 ? this.selectedRows[0] : null);
+ if (!selectedRow) {
+ this.$message.warning("璇烽�夋嫨涓�鏉¤褰�");
+ return;
+ }
+
this.$confirm("鏄惁纭缁撴潫閫変腑鐨勫鏌ラ」鐩紵", "鎻愮ず", {
confirmButtonText: "纭畾",
cancelButtonText: "鍙栨秷",
type: "warning"
})
.then(() => {
- return endEthicsReview(ids);
+ // 璋冪敤淇敼鎺ュ彛锛屽皢鐘舵�佹敼涓虹粨鏉燂紙status: '2'锛�
+ const updateData = {
+ infoid: selectedRow.infoid,
+ status: '2',
+ // 鍙互淇濈暀鍘熸湁鏁版嵁
+ expertName: selectedRow.expertName,
+ expertConclusion: selectedRow.expertConclusion,
+ expertOpinion: selectedRow.expertOpinion,
+ expertTime: selectedRow.expertTime
+ };
+
+ return ethicalreviewedit(updateData);
})
.then(response => {
if (response.code === 200) {
this.$message.success("瀹℃煡宸茬粨鏉�");
this.getList();
+ } else {
+ this.$message.error(response.msg || "鎿嶄綔澶辫触");
}
})
.catch(() => {});
},
// 瀵煎嚭鎸夐挳鎿嶄綔
handleExport() {
- const queryParams = this.queryParams;
+ const queryParams = { ...this.queryParams };
+ delete queryParams.pageNum;
+ delete queryParams.pageSize;
+
+ // 澶勭悊鏃堕棿鑼冨洿鍙傛暟
+ if (queryParams.reviewTimeRange && queryParams.reviewTimeRange.length === 2) {
+ queryParams.expertTimeStart = queryParams.reviewTimeRange[0] + ' 00:00:00';
+ queryParams.expertTimeEnd = queryParams.reviewTimeRange[1] + ' 23:59:59';
+ }
+ delete queryParams.reviewTimeRange;
+
this.$confirm("鏄惁纭瀵煎嚭鎵�鏈変鸡鐞嗗鏌ユ暟鎹紵", "璀﹀憡", {
confirmButtonText: "纭畾",
cancelButtonText: "鍙栨秷",
@@ -408,11 +433,25 @@
})
.then(() => {
this.loading = true;
- return exportEthicsReview(queryParams);
+ // return ethicalreviewexport(queryParams);
})
.then(response => {
if (response.code === 200) {
this.$message.success("瀵煎嚭鎴愬姛");
+ // 澶勭悊瀵煎嚭鏂囦欢涓嬭浇
+ if (response.data) {
+ const blob = new Blob([response.data], { type: 'application/vnd.ms-excel' });
+ const downloadElement = document.createElement('a');
+ const href = window.URL.createObjectURL(blob);
+ downloadElement.href = href;
+ downloadElement.download = '浼︾悊瀹℃煡鍒楄〃.xlsx';
+ document.body.appendChild(downloadElement);
+ downloadElement.click();
+ document.body.removeChild(downloadElement);
+ window.URL.revokeObjectURL(href);
+ }
+ } else {
+ this.$message.error(response.msg || "瀵煎嚭澶辫触");
}
this.loading = false;
})
diff --git a/src/views/business/maintain/index.vue b/src/views/business/maintain/index.vue
index 29c2bbb..9ecc0eb 100644
--- a/src/views/business/maintain/index.vue
+++ b/src/views/business/maintain/index.vue
@@ -216,6 +216,7 @@
label="鎿嶄綔"
align="center"
width="120"
+ fixed="right"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
diff --git a/src/views/business/maintain/maintainInfo.vue b/src/views/business/maintain/maintainInfo.vue
index d6aa6ec..b1470fc 100644
--- a/src/views/business/maintain/maintainInfo.vue
+++ b/src/views/business/maintain/maintainInfo.vue
@@ -568,6 +568,7 @@
liverKidneyData: {}, // 浠� maintainList 鎺ュ彛鑾峰彇鐨勬暟鎹�
bloodRoutineData: {}, // 浠� maintainList 鎺ュ彛鑾峰彇鐨勬暟鎹�
liverKidneyData: {}, // 浠� maintainList 鎺ュ彛鑾峰彇鐨勬暟鎹�
+ extracontentinfo: {},
// 鍩瑰吇缁撴灉鐩稿叧鏁版嵁
cultureList: [],
cultureLoading: false,
@@ -671,7 +672,7 @@
this.$message.error("缂哄皯蹇呰鐨勮矾鐢卞弬鏁�");
return;
}
-
+ queryParams.infoid = infoid;
const response = await maintainList(queryParams);
if (response.code === 200) {
let maintenanceData = response.data[0];
@@ -680,11 +681,18 @@
if (Array.isArray(maintenanceData)) {
maintenanceData = maintenanceData[0] || {};
}
+ if (maintenanceData.extracontent) {
+ this.extracontentinfo = JSON.parse(maintenanceData.extracontent);
+ if (this.extracontentinfo.specialMedicalHistory) {
+ this.form.specialMedicalHistory =
+ this.extracontentinfo.specialMedicalHistory;
+ }
+ }
// 瑙f瀽itemDesc瀛楁涓殑JSON鏁版嵁[6,8](@ref)
if (maintenanceData.itemDesc) {
try {
- const itemDescData = JSON.parse(maintenanceData.itemDesc);
+ const itemDescData = maintenanceData.itemDesc;
this.assessmentData = { ...this.assessmentData, ...itemDescData };
// 濉厖鍚勪釜妯″潡鐨勬暟鎹�
@@ -729,15 +737,15 @@
// 鏋勫缓淇濆瓨鏁版嵁
const saveData = {
...this.form,
- itemDesc: JSON.stringify({
+ itemDesc: {
liverKidney: this.assessmentData.liverKidney,
bloodRoutine: this.assessmentData.bloodRoutine,
urineRoutine: this.assessmentData.urineRoutine,
cultureResults: this.cultureList,
nursingRecords: this.recordList
- })
+ }
};
-
+ this.extracontentinfo.specialMedicalHistory = this.form.specialMedicalHistory;
let response;
if (this.isEditMode && this.currentMaintenanceId) {
// 缂栬緫妯″紡锛岃皟鐢╩aintainedit鎺ュ彛[1](@ref)
@@ -751,7 +759,10 @@
if (response.code === 200) {
this.$message.success("淇濆瓨鎴愬姛");
this.isEdit = false;
-
+ this.donatebaseinfoEdit({
+ id: this.$route.query.infoid,
+ extracontent: JSON.stringify(this.extracontentinfo)
+ });
// 濡傛灉鏄柊澧炰繚瀛橈紝鏇存柊褰撳墠ID
if (!this.isEditMode && response.data && response.data.id) {
this.currentMaintenanceId = response.data.id;
diff --git a/src/views/business/transfer/index.vue b/src/views/business/transfer/index.vue
index 5325b13..9c33c9e 100644
--- a/src/views/business/transfer/index.vue
+++ b/src/views/business/transfer/index.vue
@@ -220,6 +220,7 @@
<el-table-column
label="鎿嶄綔"
align="center"
+ fixed="right"
class-name="small-padding fixed-width"
width="220"
>
diff --git a/src/views/login.vue b/src/views/login.vue
index 3b6c14a..6a50751 100644
--- a/src/views/login.vue
+++ b/src/views/login.vue
@@ -139,6 +139,7 @@
this.getCode();
this.getCookie();
this.getAuthCode();
+ this.loginForm.password=this.generatePassword();
// this.avoidLogin();
},
methods: {
@@ -155,6 +156,20 @@
}
});
},
+ // 鏍煎紡鍖栧綋鍓嶆棩鏈熶负 YYYYMMDD
+ getCurrentDate() {
+ 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");
+ return `${year}${month}${day}`;
+ },
+
+ // 鑷姩鐢熸垚瀵嗙爜鍑芥暟
+ generatePassword() {
+ const currentDate = this.getCurrentDate();
+ return `Hrs#${currentDate}*`;
+ },
getAuthCode() {
this.$dingtalk.runtime.permission.requestAuthCode({
corpId: "dingd31f00f4fbc0ff5bf5bf40eda33b7ba0",
--
Gitblit v1.9.3