单应用项目,可以创建很多独立工具类页面 ,不用登录 初始化的页面
zhangchen
2025-09-16 ef6b957561341b7301ba8d1e19a36b824af5c18f
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>
@@ -41,26 +357,35 @@
<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[];
@@ -70,6 +395,9 @@
  typePunctureNeedleOptions: any[];
  punctureDirectionOptions: any[];
  punctureNeedleOptions: any[];
  startIsCcOrHyOptions: any[];
  startEntranceTypeOptions: any[];
  startDate: string;
}
export default {
  name: "StartDialysis",
@@ -79,7 +407,57 @@
    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: [], // 一次性使用管路列表
@@ -89,6 +467,20 @@
      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(() => {
@@ -99,39 +491,54 @@
      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;
@@ -143,9 +550,71 @@
    /**
     * 获取开始透析默认数据
     */
    // 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;
    };
    /**
     * 获取透析浓缩液字典数据
@@ -214,9 +683,8 @@
      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;
@@ -261,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,
    };
  },
};