1
lkk
6 天以前 f95fee588c5327b3a4f7b6c283b473c05abb8c76
src/views/hosp/project/index.vue
@@ -14,9 +14,19 @@
        </div>
        <div class="scrollable-container">
          <div class="content">
            <el-tree :data="deptOptions" :props="defaultProps" :expand-on-click-node="false"
              :filter-node-method="filterNode" ref="tree" node-key="id" :default-expanded-keys="treeId"
              highlight-current @node-click="handleNodeClick" :render-content="renderContent" v-loading="loadings" />
            <el-tree
              :data="deptOptions"
              :props="defaultProps"
              :expand-on-click-node="false"
              :filter-node-method="filterNode"
              ref="tree1"
              node-key="id"
              :default-expanded-keys="treeId"
              highlight-current
              @node-click="handleNodeClick"
              :render-content="renderContent"
              v-loading="loadings"
            />
          </div>
        </div>
      </el-col>
@@ -120,6 +130,7 @@
          v-loading="loading"
          :data="projectList"
          ref="tableRef"
          height="580"
          border
        >
          <el-table-column
@@ -206,7 +217,13 @@
            width="90px"
          >
          </el-table-column>
          <el-table-column label="Lis项目名称" align="center" prop="lisXmmc" :show-overflow-tooltip="true" width="200px">
          <el-table-column
            label="Lis项目名称"
            align="center"
            prop="lisXmmc"
            :show-overflow-tooltip="true"
            width="200px"
          >
          </el-table-column>
          <el-table-column
            label="Lis编码"
@@ -452,11 +469,27 @@
            ></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="样本类型" prop="specimenType">
          <el-select
            v-model="form.specimenType"
            placeholder="请选择样本类型"
            style="width: 200px"
            filterable
            clearable
          >
            <el-option
              v-for="dict in dict.type.yblx"
              :key="dict.value"
              :label="dict.label"
              :value="dict.value"
            ></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="检查部位" prop="checkBw">
          <el-select
            v-model="form.checkBw"
            placeholder="请选择检查部位"
            style="width: 200px"
            style="width: 260px"
            filterable
            clearable
          >
@@ -472,7 +505,7 @@
          <el-input
            v-model="form.proMetering"
            placeholder="请输入单位"
            style="width: 260px"
            style="width: 200px"
          />
        </el-form-item>
        <el-form-item label="参考范围" prop="proScope">
@@ -486,14 +519,14 @@
          <el-input
            v-model="form.sl"
            placeholder="请输入数量"
            style="width: 200px"
            style="width: 260px"
          />
        </el-form-item>
        <el-form-item label="组合标志" prop="sfzhfy">
          <el-select
            v-model="form.sfzhfy"
            placeholder="请选择是否组合标志"
            style="width: 260px"
            style="width: 200px"
          >
            <el-option
              v-for="dict in dict.type.sys_yes_no"
@@ -530,7 +563,7 @@
          <el-input
            v-model="form.hisXmmc"
            placeholder="his项目名称"
            style="width: 200px"
            style="width: 260px"
          ></el-input>
        </el-form-item>
        <el-form-item label="his项目名称" prop="hisXmmc" v-if="key == 'N'">
@@ -544,7 +577,7 @@
          <el-input
            v-model="form.hisXmbm"
            placeholder="请输入his编码"
            style="width: 260px"
            style="width: 200px"
          />
        </el-form-item>
        <el-form-item label="his单价" prop="hisdj">
@@ -565,14 +598,14 @@
          <el-input
            v-model="form.lisXmmc"
            placeholder="请输入LIS项目"
            style="width: 200px"
            style="width: 260px"
          ></el-input>
        </el-form-item>
        <el-form-item label="LIS编码" prop="lisXmbm">
          <el-input
            v-model="form.lisXmbm"
            placeholder="请输入his编码"
            style="width: 260px"
            style="width: 200px"
          />
        </el-form-item>
        <el-form-item label="备注" prop="proRemark">
@@ -586,8 +619,22 @@
          <el-input
            v-model="form.xh"
            placeholder="请输入排序"
            style="width: 200px"
            style="width: 260px"
          />
        </el-form-item>
        <el-form-item label="是否参与异常" prop="sfcyyc">
          <el-select
            v-model="form.sfcyyc"
            placeholder="请选择是否参与异常"
            style="width: 200px"
          >
            <el-option
              v-for="dict in dictTypesy"
              :key="dict.value"
              :label="dict.label"
              :value="dict.value"
            ></el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <el-button
@@ -939,6 +986,7 @@
    "sys_dict_position",
    "tj_result_type",
    "sys_yes_no",
    "yblx",
  ],
  components: { Treeselect, IconSelect, Packagese },
  data() {
@@ -964,6 +1012,16 @@
        children: "dictSfxms",
        label: "xmmc",
      },
      dictTypesy: [
        {
          value: "0",
          label: "是",
        },
        {
          value: "1",
          label: "否",
        },
      ],
      xmmc: "",
      chargeId: [],
      List: false,
@@ -978,7 +1036,7 @@
      multiple: true,
      showSearch: true,
      total: 0,
      treeId: ["532"],
      treeId: [],
      ListId: [],
      noclick: false,
      consumableList: [],
@@ -1040,6 +1098,7 @@
        proScope: "",
        proSex: "2",
        resultType: "",
        sfcyyc: "0",
      },
      rules: {
        createTime: [
@@ -1069,6 +1128,7 @@
      this.debounceFilter(val);
    },
    treeId(newVal) {
      console.log(newVal, 8989);
      if (newVal && newVal.length > 0) {
        this.$nextTick(() => {
          const lastId = newVal[newVal.length - 1] || "532";
@@ -1103,9 +1163,9 @@
  created() {
    this.getConsumables();
    this.getDeptList();
    this.getDeptTree().then(() => {
      this.precomputePinyin();
    });
    // this.getDeptTree().then(() => {
    //   this.precomputePinyin();
    // });
  },
  mounted() {
    this.getDeptTree().then(() => {
@@ -1114,23 +1174,18 @@
  },
  methods: {
    debounceFilter: debounce(function (val) {
      this.$refs.tree.filter(val);
    }, 800),
      this.$refs.tree1.filter(val);
    }, 300),
    precomputePinyin() {
      const traverse = (nodes) => {
        nodes.forEach((node) => {
          if (node.label) {
            const lowerSpell = cnchar.spell(node.label, 'low', 'array').join(''); // 完整小写拼音
            const upperSpell = cnchar.spell(node.label, 'up', 'array').join('');  // 完整大写拼音
            const shortPinyin = node.label
              .split('')
              .map(char => cnchar.spell(char, 'array')[0]?.[0]?.toLowerCase() || char) // 拼音首字母
              .join('');
            const lowerSpell = node.label.spell("low", "array").join("");
            const upperSpell = node.label.spell("up", "array").join("");
            this.pinyinCache.set(node.id, {
              lowerSpell,
              upperSpell,
              shortPinyin, // 缓存拼音简写
              label: node.label
              label: node.label,
            });
          }
          if (node.children) traverse(node.children);
@@ -1139,14 +1194,13 @@
      traverse(this.deptOptions);
    },
    filterNode(value, data) {
      if (!value) return true; // 如果搜索值为空,返回所有节点
      if (!value) return true;
      const cached = this.pinyinCache.get(data.id);
      if (!cached) return false; // 如果没有缓存数据,不显示该节点
      const searchLower = value.toLowerCase(); // 将搜索词转为小写
      if (!cached) return false;
      return (
        cached.label.includes(value) ||           // 直接匹配汉字
        cached.shortPinyin.includes(searchLower) || // 匹配拼音简写
        cached.lowerSpell.includes(searchLower)   // 匹配完整拼音
        cached.label.includes(value) ||
        cached.lowerSpell.includes(value) ||
        cached.upperSpell.includes(value)
      );
    },
    filterNode2(value, data) {
@@ -1264,8 +1318,8 @@
            this.open = true;
          } else if (this.treeDate.id) {
            if (this.treeDate.qf == "0") {
              this.form.proParentId = "0"
              this.form.deptId = this.treeDate.id
              this.form.proParentId = "0";
              this.form.deptId = this.treeDate.id;
            } else {
              this.form.proParentId = this.treeDate.id;
              this.projectOptions.forEach((item) => {
@@ -1277,10 +1331,9 @@
              });
            }
            this.open = true;
          } else {
            this.form.proParentId = "0"
            this.form.proParentId = "0";
            this.open = true;
          }
        }
@@ -1304,7 +1357,7 @@
          this.dialogTableVisible = true;
          if (this.deptOptionstree.length != 0) {
            this.$nextTick(() => {
              this.chargeId.push(this.deptOptionstree[0].id);
              // this.chargeId.push(this.deptOptionstree[0].id);
            });
          }
@@ -1331,10 +1384,13 @@
      }
    },
    getlistSfxm() {
      console.log(2222);
      this.loading = true;
      this.List = true;
      listSfxm(this.querycharge).then((response) => {
        this.sfxmList = response.rows;
        this.sfxmList = response.rows || [];
        console.log(response.rows, 111222);
        response.rows.forEach((item, index) => {
          item.newID =
            (this.querycharge.pageNum - 1) * this.querycharge.pageSize +
@@ -1359,18 +1415,26 @@
      this.queryParam.id = data.id;
      this.List = false;
      this.getListByXmId();
      this.total = 0;
    },
    getListByXmId() {
      console.log(this.sfxmList);
      this.loading = true;
      getListByXmId(this.queryParam).then((response) => {
        this.sfxmList = response.data.date;
        response.data.date.forEach((item, index) => {
          item.newID =
            (this.queryParam.page - 1) * this.queryParam.pageSize + index + 1;
        });
        this.sfxmList = response.data.date || [];
        if (response.data.date == null) {
          return;
        } else {
          response.data.date.forEach((item, index) => {
            item.newID =
              (this.queryParam.page - 1) * this.queryParam.pageSize + index + 1;
          });
        }
        this.total = response.data.total;
        this.loading = false;
      });
      this.loading = false;
    },
    normalizer(node) {
      if (node.children && !node.children.length) {
@@ -1400,12 +1464,17 @@
    getDeptTree() {
      return deptTree111().then((response) => {
        this.deptOptions = response.data;
        this.treeId.push(this.treeDate.id);
        this.treeId = [];
        if (this.treeDate.id) {
          this.treeId.push(this.treeDate.id);
        } else {
          this.treeId.push("532");
        }
      });
    },
    handleNodeClick(date) {
      this.treeDate = date;
      console.log(this.treeDate);
      this.xiugaiList = {};
      this.xiugais = date.qf === "0";
      let proId = date.id;
      getInfoByProId(proId).then((response) => {
@@ -1560,8 +1629,10 @@
      }
    },
    handleUpdate1() {
      this.form = {};
      this.form = this.xiugaiList;
      this.form.proStatus = this.form.proStatus.toString();
      this.form.sfcyyc = this.form.sfcyyc.toString();
      this.proParent = true;
      this.isPriceDisabled = true;
      getlist().then((response) => {
@@ -1587,6 +1658,7 @@
        this.showPrise = this.form.proParentId === "0";
        this.showRentPrise = !this.showPrise;
        this.form.proStatus = this.form.proStatus.toString();
        this.form.sfcyyc = this.form.sfcyyc.toString();
        this.form.consumablesList = response.data.consumablesList;
        this.form.tjStandardList = response.data.tjStandardList;
        if (this.form.tjStandardList) {
@@ -1707,6 +1779,7 @@
          this.precomputePinyin();
        });
      }
      console.log(this.treeId);
    },
    submit() {
      this.ChangeList.forEach((item) => {
@@ -1738,7 +1811,7 @@
          this.getList();
          this.$modal.msgSuccess("删除成功");
        })
        .catch(() => { });
        .catch(() => {});
    },
    handleExport() {
      this.download(