From ef6b957561341b7301ba8d1e19a36b824af5c18f Mon Sep 17 00:00:00 2001
From: zhangchen <1652267879@qq.com>
Date: 星期二, 16 九月 2025 13:29:42 +0800
Subject: [PATCH] ID1766-优化开始透析
---
src/views/mobile/bedsideAuxiliaryScreen/components/StartDialysis/index.vue | 703 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 690 insertions(+), 13 deletions(-)
diff --git a/src/views/mobile/bedsideAuxiliaryScreen/components/StartDialysis/index.vue b/src/views/mobile/bedsideAuxiliaryScreen/components/StartDialysis/index.vue
index 89b7705..0a9958f 100644
--- a/src/views/mobile/bedsideAuxiliaryScreen/components/StartDialysis/index.vue
+++ b/src/views/mobile/bedsideAuxiliaryScreen/components/StartDialysis/index.vue
@@ -22,7 +22,323 @@
</div>
</template>
<div class="start-dialysis-content" v-loading="loading">
- <el-form></el-form>
+ <el-form :model="formData" size="large">
+ <el-row :gutter="10">
+ <el-col :span="6">
+ <el-form-item label="开始时间">
+ <el-time-select
+ v-model="formData.startTime"
+ start="00:00"
+ step="00:01"
+ end="23:59"
+ placeholder="请选择"
+ :clearable="false"
+ style="width: 100%"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="治疗护士">
+ <el-select
+ @change="onStartMedNurseChange"
+ style="width: 100%"
+ v-model="formData.startMedNurse"
+ placeholder="请选择"
+ >
+ <el-option
+ v-for="item in nurseOptions"
+ :key="item.code"
+ :label="item.userName"
+ :disabled="item.isValid === 0"
+ :value="item.code"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="上机护士">
+ <el-select
+ style="width: 100%"
+ v-model="formData.startUpNurse"
+ placeholder="请选择"
+ >
+ <el-option
+ v-for="item in nurseOptions"
+ :key="item.code"
+ :label="item.userName"
+ :disabled="item.isValid === 0"
+ :value="item.code"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="预充管路">
+ <el-select
+ style="width: 100%"
+ v-model="formData.startYcNurse"
+ placeholder="请选择"
+ >
+ <el-option
+ v-for="item in nurseOptions"
+ :key="item.code"
+ :label="item.userName"
+ :disabled="item.isValid === 0"
+ :value="item.code"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="穿刺/换药">
+ <el-select
+ style="width: 100%"
+ v-model="formData.startIsCcOrHy"
+ placeholder="请选择"
+ >
+ <el-option
+ v-for="(item, index) in startIsCcOrHyOptions"
+ :key="index"
+ :label="item.label"
+ :value="item.value"
+ ></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <template v-if="formData.startIsCcOrHy === 1">
+ <el-col :span="6">
+ <el-form-item label="换药护士">
+ <el-select
+ style="width: 100%"
+ v-model="formData.startCcNurse"
+ placeholder="请选择"
+ >
+ <el-option
+ v-for="item in nurseOptions"
+ :key="item.code"
+ :label="item.userName"
+ :disabled="item.isValid === 0"
+ :value="item.code"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </template>
+ <template v-else-if="formData.startIsCcOrHy === 0">
+ <el-col :span="6">
+ <el-form-item label="穿刺护士">
+ <el-select
+ style="width: 100%"
+ v-model="formData.startCcNurse"
+ placeholder="请选择"
+ >
+ <el-option
+ v-for="item in nurseOptions"
+ :key="item.code"
+ :label="item.userName"
+ :disabled="item.isValid === 0"
+ :value="item.code"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </template>
+ <template v-else-if="formData.startIsCcOrHy === 2">
+ <el-col :span="6">
+ <el-form-item label="换药护士">
+ <el-select
+ style="width: 100%"
+ v-model="formData.startCcNurse"
+ placeholder="请选择"
+ >
+ <el-option
+ v-for="item in nurseOptions"
+ :key="item.code"
+ :label="item.userName"
+ :disabled="item.isValid === 0"
+ :value="item.code"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </template>
+ <template
+ v-if="
+ formData.startIsCcOrHy === 2 || formData.startIsCcOrHy === 0
+ "
+ >
+ <el-col :span="6">
+ <el-form-item label="穿刺方式" prop="doneCcType">
+ <el-select
+ style="width: 100%"
+ multiple
+ v-model="formData.startCcType"
+ placeholder="请选择"
+ >
+ <el-option
+ v-for="item in punctureMethodOptions"
+ :key="item.code"
+ :label="item.dictText"
+ :value="item.dictText"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="穿刺针A">
+ <el-select
+ clearable
+ style="width: 100%"
+ v-model="formData.startCcZhenA"
+ placeholder="请选择"
+ >
+ <el-option
+ v-for="item in punctureNeedleOptions"
+ :key="item.code"
+ :label="item.itemName + ' ' + item.itemSpec"
+ :value="item.code"
+ :disabled="item.isShow !== 1"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item clearable label="穿刺针V">
+ <el-select
+ style="width: 100%"
+ v-model="formData.startCcZhenV"
+ placeholder="请选择"
+ >
+ <el-option
+ v-for="item in punctureNeedleOptions"
+ :key="item.code"
+ :label="item.itemName + ' ' + item.itemSpec"
+ :value="item.code"
+ :disabled="item.isShow !== 1"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="穿刺方向">
+ <el-select
+ style="width: 100%"
+ multiple
+ v-model="formData.startCcASideDirection"
+ placeholder="请选择"
+ >
+ <el-option
+ v-for="item in punctureDirectionOptions"
+ :key="item.code"
+ :label="item.dictText"
+ :value="item.dictText"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </template>
+ <el-col :span="6">
+ <el-form-item label="引血(ml/min)">
+ <el-input style="width: 100%" v-model="formData.startYingxue" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="透析器编号">
+ <el-input style="width: 100%" v-model="formData.startTxqNo" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="入科方式">
+ <el-select
+ style="width: 100%"
+ v-model="formData.startEntranceType"
+ placeholder="请选择"
+ >
+ <el-option
+ v-for="(item, index) in startEntranceTypeOptions"
+ :key="index"
+ :label="item.label"
+ :value="item.value"
+ ></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="一次性使用管路">
+ <el-select v-model="formData.doneGl" placeholder="请选择">
+ <el-option
+ v-for="(item, index) in disposablePipelineOptions"
+ :key="index"
+ :label="item.itemName + ' ' + item.itemSpec"
+ :value="item.code"
+ :disabled="item.isShow !== 1"
+ ></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="血滤管">
+ <el-select
+ v-model="formData.doneByg"
+ :disabled="formData.schemeName !== 'HDF'"
+ placeholder="请选择"
+ >
+ <el-option
+ v-for="(item, index) in hemofiltrationTubeOptions"
+ :key="index"
+ :label="item.itemName + ' ' + item.itemSpec"
+ :value="item.code"
+ ></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="透析浓缩液">
+ <el-select
+ v-model="formData.startUseNsy"
+ multiple
+ filterable
+ clearable
+ placeholder="请选择"
+ >
+ <el-option
+ v-for="(item, index) in doneUseNsyOptions"
+ :key="index"
+ :label="item.itemName + ' ' + item.itemSpec"
+ :value="item.code"
+ ></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="透析护理包">
+ <el-select
+ v-model="formData.startUseHlb"
+ filterable
+ clearable
+ placeholder="请选择"
+ >
+ <el-option
+ v-for="(item, index) in doneUseHlbOptions"
+ :key="index"
+ :label="item.itemName + ' ' + item.itemSpec"
+ :value="item.code"
+ ></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
</div>
<template #footer>
<div class="my-button cancel" @click="handleCancel">取消</div>
@@ -39,40 +355,373 @@
</template>
<script lang="ts">
-import { reactive, toRefs } from "vue";
+import { computed, reactive, toRefs } from "vue";
import closeImg from "@/img/close.png";
-import { addDefaultRowApi } from '@/api/patient_hemo_med_start/index';
-import type { StartRecord } from '@/api/patient_hemo_med_start/types/index.type';
+import {
+ addDefaultRowApi,
+ updateMedstartDataApi,
+} from "@/api/patient_hemo_med_start/index";
+import type { StartRecord } from "@/api/patient_hemo_med_start/types/index.type";
+import { useBedsideAuxiliaryScreenStore } from "@/store/bedsideAuxiliaryScreen";
+import { getInventoryItemListApi } from "@/api/inventory/itemDict";
+import { getUsersByRoleCodeApi } from "@/api/user/index";
+import { getDictTypeApi } from "@/api/dict/index";
+import { DictType } from "@/api/dict/types/index.type";
+import dayjs from "dayjs";
+import { ElMessage } from "element-plus/es";
-interface FormData extends Omit<StartRecord, 'startCcType' | 'startCcASideDirection'> {
+interface FormData
+ extends Omit<
+ StartRecord,
+ "startCcType" | "startCcASideDirection" | "startUseNsy"
+ > {
/** 穿刺方式 */
startCcType: string[];
/** 穿刺方向 */
startCcASideDirection: string[];
+ startUseNsy: string[];
}
-
interface State {
loading: boolean;
show: boolean;
- formData: FormData | {};
+ formData: FormData;
+ doneUseNsyOptions: any[];
+ doneUseHlbOptions: any[];
+ disposablePipelineOptions: any[];
+ hemofiltrationTubeOptions: any[];
+ nurseOptions: any[];
+ punctureMethodOptions: any[];
+ typePunctureNeedleOptions: any[];
+ punctureDirectionOptions: any[];
+ punctureNeedleOptions: any[];
+ startIsCcOrHyOptions: any[];
+ startEntranceTypeOptions: any[];
+ startDate: string;
}
export default {
name: "StartDialysis",
setup() {
+ const bedsideAuxiliaryScreenStore = useBedsideAuxiliaryScreenStore();
+
const state = reactive<State>({
loading: false,
show: false,
- formData: {}
+ formData: {
+ code: "",
+ createTime: "",
+ createUser: null,
+ deletedTime: null,
+ doneByg: "",
+ doneBygName: "",
+ doneBygSpecName: "",
+ doneGl: "",
+ doneGlName: "",
+ doneGlSpecName: "",
+ id: null,
+ isDeleted: null,
+ monitorDataCode: "",
+ recordCode: "",
+ remark: "",
+ schemeName: "",
+ /** 穿刺方向 */
+ startCcASideDirection: [],
+ startCcNurse: "",
+ startCcNurseName: "",
+ /** 穿刺方式 */
+ startCcType: [],
+ startCcZhenA: "",
+ startCcZhenAName: "",
+ startCcZhenASpecName: "",
+ startCcZhenType: "",
+ startCcZhenV: "",
+ startCcZhenVName: "",
+ startCcZhenVSpecName: "",
+ startEntranceType: "",
+ startIsCcOrHy: null,
+ startIsSave: null,
+ startMedNurse: "",
+ startMedNurseName: "",
+ startTime: null,
+ startTxqNo: "",
+ startUpNurse: "",
+ startUpNurseName: "",
+ startUseHlb: "",
+ startUseHlbName: "",
+ startUseHlbSpecName: "",
+ startUseNsy: [],
+ startUseNsyName: "",
+ startUseNsySpecName: "",
+ startYcNurse: "",
+ startYcNurseName: "",
+ startYingxue: "",
+ updateTime: "",
+ updateUser: null,
+ },
+ doneUseNsyOptions: [], // 透析浓缩液列表
+ doneUseHlbOptions: [], // 透析护理包列表
+ disposablePipelineOptions: [], // 一次性使用管路列表
+ hemofiltrationTubeOptions: [], // 血滤管列表
+ nurseOptions: [], // 护士列表
+ punctureMethodOptions: [], // 穿刺方式列表
+ typePunctureNeedleOptions: [], // 穿刺针类型列表
+ punctureDirectionOptions: [], // 穿刺方向列表
+ punctureNeedleOptions: [], // 穿刺针列表
+ startIsCcOrHyOptions: [
+ { label: "穿刺", value: 0 },
+ { label: "换药", value: 1 },
+ { label: "穿刺+换药", value: 2 },
+ ],
+ startEntranceTypeOptions: [
+ { label: "步行", value: "步行" },
+ { label: "扶行", value: "扶行" },
+ { label: "轮椅", value: "轮椅" },
+ { label: "平床", value: "平床" },
+ { label: "床旁", value: "床旁" },
+ { label: "助行器", value: "助行器" },
+ ],
+ startDate: "", // 日期部分
});
- const openDialog = () => {
+ const recordCode = computed(() => {
+ return bedsideAuxiliaryScreenStore.deviceData.signedIn.透析单编号;
+ });
+
+ const clientCode = computed(() => {
+ return bedsideAuxiliaryScreenStore.deviceData.客户编号;
+ });
+
+ const userCode = computed(() => {
+ return bedsideAuxiliaryScreenStore.userInfo.userCode;
+ });
+
+ const openDialog = async () => {
state.show = true;
+ state.loading = true;
+ try {
+ const promiseFuns = [
+ getDoneUseNsys(),
+ getdoneUseHlbs(),
+ getDisposablePipelines(),
+ getHemofiltrationTubes(),
+ getPunctureNeedles(),
+ getNurses(),
+ getPunctureMethods(),
+ getTypePunctureNeedles(),
+ getPunctureDirectionOptions(),
+ ];
+ // if (state.doneUseNsyOptions.length <= 0) {
+ // promiseFuns.push(getDoneUseNsys());
+ // }
+ // if (state.doneUseHlbOptions.length <= 0) {
+ // promiseFuns.push(getdoneUseHlbs());
+ // }
+ // if (state.disposablePipelineOptions.length <= 0) {
+ // promiseFuns.push(getDisposablePipelines());
+ // }
+ // if (state.hemofiltrationTubeOptions.length <= 0) {
+ // promiseFuns.push(getHemofiltrationTubes());
+ // }
+ // if (state.punctureNeedleOptions.length <= 0) {
+ // promiseFuns.push(getPunctureNeedles());
+ // }
+ // if (state.nurseOptions.length <= 0) {
+ // promiseFuns.push(getNurses());
+ // }
+ // if (state.punctureMethodOptions.length <= 0) {
+ // promiseFuns.push(getPunctureMethods());
+ // }
+ // if (state.typePunctureNeedleOptions.length <= 0) {
+ // promiseFuns.push(getTypePunctureNeedles());
+ // }
+ // if (state.punctureDirectionOptions.length <= 0) {
+ // promiseFuns.push(getPunctureDirectionOptions());
+ // }
+ await Promise.all(promiseFuns);
+ await getStartData();
+ } catch (error) {
+ console.error("开始透析初始化失败", error);
+ state.show = false;
+ } finally {
+ state.loading = false;
+ }
};
+ /**
+ * 获取开始透析默认数据
+ */
const getStartData = async () => {
- const { data } = await addDefaultRowApi(`recordCode=`)
-
+ const { data } = await addDefaultRowApi(`recordCode=${recordCode.value}`);
+ const dataCopy = JSON.parse(JSON.stringify(data));
+ const nots = ["", null];
+
+ if (!nots.includes(data.startCcType)) {
+ // @ts-ignore
+ dataCopy.startCcType = data.startCcType.split(",");
+ } else {
+ // @ts-ignore
+ dataCopy.startCcType = [];
+ }
+
+ if (!nots.includes(data.startCcASideDirection)) {
+ // @ts-ignore
+ dataCopy.startCcASideDirection = data.startCcASideDirection.split(",");
+ } else {
+ // @ts-ignore
+ dataCopy.startCcASideDirection = [];
+ }
+
+ if (nots.includes(data.startTime)) {
+ dataCopy.startTime = dayjs().format("HH:mm");
+ state.startDate = dayjs().format("YYYY-MM-DD");
+ } else {
+ dataCopy.startTime = dayjs(data.startTime).format("HH:mm");
+ state.startDate = dayjs(data.startTime).format("YYYY-MM-DD");
+ }
+
+ if (nots.includes(data.startMedNurse)) {
+ dataCopy.startMedNurse = userCode.value;
+ }
+
+ if (nots.includes(data.startCcNurse)) {
+ dataCopy.startCcNurse = userCode.value;
+ }
+ if (nots.includes(data.startUpNurse)) {
+ dataCopy.startUpNurse = userCode.value;
+ }
+ if (nots.includes(data.startYcNurse)) {
+ dataCopy.startYcNurse = userCode.value;
+ }
+ if (!nots.includes(data.startUseNsy)) {
+ // @ts-ignore
+ dataCopy.startUseNsy = data.startUseNsy.split(",");
+ } else {
+ // @ts-ignore
+ dataCopy.startUseNsy = [];
+ }
+
+ if (data.schemeName !== "HDF") {
+ // 如果透析模式不算HDF的话血滤管置空
+ dataCopy.doneByg = "";
+ dataCopy.doneBygName = "";
+ } else {
+ const defaultXlg = state.hemofiltrationTubeOptions.find(
+ (e) => e.itemName === "义鑫血液净化补液管路(HDIT-1)"
+ );
+ if (defaultXlg) {
+ dataCopy.doneByg = defaultXlg.code;
+ dataCopy.doneBygName = defaultXlg.itemName;
+ }
+ }
+ state.formData = dataCopy as unknown as FormData;
+ };
+
+ /**
+ * 获取透析浓缩液字典数据
+ */
+ const getDoneUseNsys = async () => {
+ const params = {
+ page: 0,
+ size: 0,
+ wherecondition: `inventory_type_code='IT2112291619002680' and is_show = 1 and client_code='${clientCode.value}'`,
+ ordercondition: "item_is_use desc, item_sort_order asc",
+ isPure: 0,
+ };
+ const { data } = await getInventoryItemListApi(params);
+ state.doneUseNsyOptions = data.list;
+ };
+
+ /**
+ * 获取透析护理包字典数据
+ */
+ const getdoneUseHlbs = async () => {
+ const params = {
+ page: 0,
+ size: 0,
+ wherecondition: `inventory_type_code='IT2112291619003161' and is_show = 1 and client_code='${clientCode.value}'`,
+ ordercondition: "item_is_use desc, item_sort_order asc",
+ isPure: 0,
+ };
+ const { data } = await getInventoryItemListApi(params);
+ state.doneUseHlbOptions = data.list;
+ };
+
+ /**
+ * 获取一次性使用管路字典数据
+ */
+ const getDisposablePipelines = async () => {
+ const params = {
+ page: 0,
+ size: 0,
+ wherecondition: `inventory_type_code='IT2112291619006054' and is_show = 1 and client_code='${clientCode.value}'`,
+ ordercondition: "item_is_use desc, item_sort_order asc",
+ isPure: 0,
+ };
+ const { data } = await getInventoryItemListApi(params);
+ state.disposablePipelineOptions = data.list;
+ };
+
+ /**
+ * 获取血滤管字典数据
+ */
+ const getHemofiltrationTubes = async () => {
+ const params = {
+ page: 1,
+ size: 10,
+ wherecondition: `inventory_type_code='IT9024215920713quQV' and is_show = 1 and client_code='${clientCode.value}'`,
+ ordercondition: "item_is_use desc, item_sort_order asc",
+ isPure: 0,
+ };
+ const { data } = await getInventoryItemListApi(params);
+ state.hemofiltrationTubeOptions = data.list;
+ };
+
+ /**
+ * 获取穿刺针字典数据
+ */
+ const getPunctureNeedles = async () => {
+ const params = {
+ page: 1,
+ size: 10,
+ wherecondition: `(inventory_type_code='IT3561011130526051' OR inventory_type_code='IT2112291619000061') and client_code='${clientCode.value}'`,
+ ordercondition: "item_is_use desc, item_sort_order asc",
+ };
+ const { data } = await getInventoryItemListApi(params);
+ state.punctureNeedleOptions = data.list;
+ };
+
+ /**
+ * 获取护士数据
+ */
+ const getNurses = async () => {
+ const { data } = await getUsersByRoleCodeApi(
+ `clientCode=${clientCode.value}&roleClass=nurse`
+ );
+ state.nurseOptions = data;
+ };
+
+ /**
+ * 获取穿刺方式字典数据
+ */
+ const getPunctureMethods = async () => {
+ const { data } = await getDictTypeApi({ dictType: DictType.穿刺方式 });
+ state.punctureMethodOptions = data;
+ };
+
+ /**
+ * 获取穿刺针类型字典数据
+ */
+ const getTypePunctureNeedles = async () => {
+ const { data } = await getDictTypeApi({ dictType: DictType.穿刺针类型 });
+ state.typePunctureNeedleOptions = data;
+ };
+
+ /**
+ * 获取穿刺针方向字典数据
+ */
+ const getPunctureDirectionOptions = async () => {
+ const { data } = await getDictTypeApi({ dictType: DictType.穿刺方向 });
+ state.punctureDirectionOptions = data;
};
const handleCancel = () => {
@@ -80,13 +729,41 @@
state.loading = false;
};
- const handleConfirm = () => {};
+ const handleConfirm = async () => {
+ state.loading = true;
+ try {
+ const paramsData = Object.assign({}, state.formData, {
+ startCcASideDirection:
+ state.formData.startCcASideDirection.toString(),
+ startCcType: state.formData.startCcType.toString(),
+ startUseNsy: state.formData.startUseNsy.join(","),
+ startTime: `${state.startDate} ${state.formData.startTime}:00`,
+ });
+ await updateMedstartDataApi(paramsData);
+ ElMessage.success("操作成功!");
+ state.show = false;
+ } finally {
+ state.loading = false;
+ }
+ };
+
+ /**
+ * 治疗护士的改变
+ * @param val
+ */
+ const onStartMedNurseChange = (val: string) => {
+ state.formData.startCcNurse = val;
+ state.formData.startUpNurse = val;
+ state.formData.startYcNurse = val;
+ };
+
return {
...toRefs(state),
closeImg,
handleCancel,
openDialog,
handleConfirm,
+ onStartMedNurseChange,
};
},
};
@@ -147,7 +824,7 @@
}
}
.start-dialysis-content {
- padding: 0 12px 0px 12px;
+ padding: 0 12px 0px 12px;
margin-bottom: 4px;
border-bottom: 1px solid #d8d8d8;
}
--
Gitblit v1.8.0