| | |
| | | </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> |
| | |
| | | <script lang="ts"> |
| | | import { computed, reactive, toRefs } from "vue"; |
| | | import closeImg from "@/img/close.png"; |
| | | import { addDefaultRowApi } from "@/api/patient_hemo_med_start/index"; |
| | | 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"> { |
| | | 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[]; |
| | |
| | | typePunctureNeedleOptions: any[]; |
| | | punctureDirectionOptions: any[]; |
| | | punctureNeedleOptions: any[]; |
| | | startIsCcOrHyOptions: any[]; |
| | | startEntranceTypeOptions: any[]; |
| | | startDate: string; |
| | | } |
| | | export default { |
| | | name: "StartDialysis", |
| | |
| | | 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: [], // 一次性使用管路列表 |
| | |
| | | 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 recordCode = computed(() => { |
| | |
| | | return bedsideAuxiliaryScreenStore.deviceData.客户编号; |
| | | }); |
| | | |
| | | const userCode = computed(() => { |
| | | return bedsideAuxiliaryScreenStore.userInfo.userCode; |
| | | }); |
| | | |
| | | const openDialog = async () => { |
| | | state.show = true; |
| | | state.loading = true; |
| | | try { |
| | | const promiseFuns = []; |
| | | 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()); |
| | | } |
| | | 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; |
| | |
| | | /** |
| | | * 获取开始透析默认数据 |
| | | */ |
| | | // const getStartData = async () => { |
| | | // const { data } = await addDefaultRowApi(`recordCode=${recordCode}`); |
| | | // }; |
| | | const getStartData = async () => { |
| | | 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 params = { |
| | | page: 1, |
| | | size: 10, |
| | | wherecondition: `inventory_type_code='IT3561011130526051' and is_show = 1 and client_code='${clientCode.value}'`, |
| | | wherecondition: `(inventory_type_code='IT3561011130526051' OR inventory_type_code='IT2112291619000061') and client_code='${clientCode.value}'`, |
| | | ordercondition: "item_is_use desc, item_sort_order asc", |
| | | isPure: 0, |
| | | }; |
| | | const { data } = await getInventoryItemListApi(params); |
| | | state.punctureNeedleOptions = data.list; |
| | |
| | | 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, |
| | | }; |
| | | }, |
| | | }; |