qx
2025-04-09 93a6f70b8eb631c6c1faab8f9e8a734669e49e6e
Merge branch 'master' of http://101.42.27.146:5001/r/ltkj_peisweb
4个文件已修改
446 ■■■■■ 已修改文件
src/components/public/index.vue 340 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/advice/advice/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/doctor/pacsCheck/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/picture/picture/index.vue 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/public/index.vue
@@ -1,6 +1,11 @@
<template>
  <div>
    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
    <el-dialog
      :title="title"
      :visible.sync="open"
      width="1000px"
      append-to-body
    >
      <h3 v-if="fList.proResult">检测项目 :{{ fList.project.proName }}</h3>
      <h3 v-if="fList.proResult">
        检测结果 :{{ fList.proResult }}{{ fList.project.proMetering }}
@@ -39,25 +44,36 @@
            >搜索</el-button
          >
        </el-form-item>
        <el-form-item>
          <h3 style="margin-left: 160px;">已选项目</h3>
        </el-form-item>
      </el-form>
      <div style="display: flex; width: 100%">
        <div style="width: 50%; margin-right: 30px">
      <el-table
        :data="dataList"
        ref="multipleTable"
        v-loading="loading"
        @selection-change="handleSelectionChange"
        border
        height="320px
        "
            height="420px"
      >
        <el-table-column type="selection" width="40" align="center" />
        <el-table-column label="序号" type="index" width="80px" />
            <el-table-column
              label="序号"
              type="index"
              align="center"
              width="50px"
            />
        <!-- <el-table-column label="规则" align="center" prop="ruleStr" /> -->
        <el-table-column label="检查结论" align="center" prop="ruleStr" />
        <el-table-column label="检查所见" align="center" prop="yxbx" />
      </el-table>
      <div class="pag">
        <div class="pag1">
            <div class="pag1" style="margin-left: 600px">
          <pagination
                small
            v-show="total > 0"
            :total="total"
            :page.sync="queryParams.pageNum"
@@ -66,23 +82,48 @@
          />
        </div>
      </div>
      <h3>已选项目</h3>
        </div>
        <div style="width: 100%; height: 610px">
          <!-- <h3 style="margin-top: -30px;">已选项目</h3> -->
      <el-form
        :model="form"
        ref="queryForm"
        size="small"
        :inline="true"
        label-width="68px"
      >
        <el-form-item>
          <!--  :inline="true" -->
            <!-- <el-form-item>
          <el-input
            type="textarea"
            v-model="form.desc"
            style="width: 560px"
          ></el-input>
            </el-form-item> -->
            <el-form-item label="检查所见" prop="jcsj">
              <el-input
                v-model="form.jcsj"
                clearable
                type="textarea"
                :autosize="{ minRows: 8}"
                style="width: 380px"
              />
            </el-form-item>
            <el-form-item label="检查结论" prop="conclusion">
              <el-input
                v-model="form.desc"
                clearable
                type="textarea"
                 :autosize="{ minRows: 8  }"
                style="width: 380px"
              />
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        </div>
      </div>
      <span slot="footer" class="dialog-footer" style="margin-top: -120px">
        <el-button @click="open = false">取 消</el-button>
        <el-button type="primary" @click="handleOk">确 定</el-button>
      </span>
@@ -92,19 +133,23 @@
  
<script>
import { getlist, getlistByRuleStr } from "@/api/doctor/check";
import { getYxJcXxJg } from "@/api/picture/picture";
export default {
  name: "Public",
  /*  props: {
    row: {
      type: Object,
    },
  }, */
  props: {
    lastDesc: {
    checkStatus: {
      type: String,
      default: "",
      default: "0",
      validator: value => ["0", "1"].includes(value)
    },
    proResult: {
      type: String,
      default: ''
    },
    conclusion: {
      type: String,
      default: ''
    }
  },
  data() {
    return {
@@ -118,8 +163,8 @@
      // 遮罩层
      loading: false,
      form: {
        // desc: "",
        desc: this.lastDesc,
        desc: "",
        jcsj: "",
      },
      queryParams: {
        bingzhong: "",
@@ -130,181 +175,142 @@
      list: [],
      fList: {},
      selectedItems: [],
      searchDebounce: null,
    };
  },
  watch: {
    row(val, newVla) {
      // console.log(val,newVla)
      //   this.fList = val;
      // if (this.fList) {
      //     this.getList()
      // }
    },
    lastDesc(newVal) {
      this.form.desc = newVal; // 更新 form.desc
      console.log(newVal, 666);
    checkStatus(newValue) {
      console.log( newValue,9988);
      if (newValue === "1") {
        this.updateData(this.proResult, this.conclusion);
      }
    },
  },
  mounted() {},
  created() {},
  methods: {
    getList(row, date) {
      let data = {
        //   proId: fList.proId,
        // ruleStr: fList.proResult,
      };
      getlist(data).then((res) => {
    async getList() {
      try {
        this.loading = true; // 添加加载状态
        const res = await getlist(this.queryParams);
        this.dataList = res.rows;
        this.$nextTick(() => {
          /* this.dataList.forEach((item) => {
            this.fList.rulesList.forEach((item1) => {
              if (item.aid === item1.aid) {
                this.$refs.multipleTable.toggleRowSelection(item, true);
        this.total = res.total;
        // 如果需要选中操作,将其封装为独立方法
        await this.handleAutoSelection();
      } catch (error) {
        console.error('获取数据失败:', error);
        this.$message.error('获取数据失败');
      } finally {
        this.loading = false;
              }
            });
          }); */
        });
    },
    // 封装选中逻辑
    async handleAutoSelection() {
      if (!this.fList?.rulesList?.length) return;
      await this.$nextTick();
      this.dataList.forEach(item => {
        const shouldSelect = this.fList.rulesList.some(rule => rule.aid === item.aid);
        if (shouldSelect) {
          this.$refs.multipleTable?.toggleRowSelection(item, true);
        }
      });
    },
    /* getList(row, date) {
      if (row.proId) {
        let fList = row;
        // if (this.fList.proResult == "") {
        let data = {
        //   proId: fList.proId,
          // ruleStr: fList.proResult,
        };
        getlist(data).then((res) => {
          this.dataList = res.rows;
          this.$nextTick(() => {
            this.dataList.forEach((item) => {
              this.fList.rulesList.forEach((item1) => {
                if (item.aid == item1.aid) {
                  this.$refs.multipleTable.toggleRowSelection(item, true);
                }
              });
            });
          });
        });
        // }else{
        //     let data = {
        //         proId: this.fList.proId,
        //         bingzhong: this.queryParams.bingzhong,
        //         ruleStr: this.fList.proResult,
        //     }
        //     getlistByRuleStr(data).then(res => {
        //         this.dataList = res.rows
        //         this.$nextTick(() => {
        //             this.dataList.forEach(item => {
        //                 this.fList.rulesList.forEach(item1 => {
        //                     if (item.aid == item1.aid) {
        //                         this.$refs.multipleTable.toggleRowSelection(item, true);
        //                     }
        //                 })
        //             })
        //         })
        //     })
        // }
      } else {
        let data = {
        //   proId: row,
        };
        getlist(data).then((res) => {
          this.dataList = res.rows;
          console.log(res,888);
          // this.$nextTick(() => {
          //     this.dataList.forEach(item => {
          //         this.fList.rulesList.forEach(item1 => {
          //             if (item.aid == item1.aid) {
          //                 this.$refs.multipleTable.toggleRowSelection(item, true);
          //             }
          //         })
          //     })
          // })
        });
      }
    }, */
    handleQuery() {
      let data = {
        proId: this.fList.proId,
        bingzhong: this.queryParams.bingzhong,
        bzPinyin: this.queryParams.bzPinyin,
      };
      getlist(data).then((res) => {
        this.dataList = res.rows;
        this.$nextTick(() => {
          this.dataList.forEach((item) => {
            this.fList.rulesList.forEach((item1) => {
              if (item.aid == item1.aid) {
                this.$refs.multipleTable.toggleRowSelection(item, true);
              }
            });
          });
        });
      });
      if (this.searchDebounce) clearTimeout(this.searchDebounce);
      this.searchDebounce = setTimeout(() => {
        this.queryParams.pageNum = 1; // 重置页码
        this.getList();
      }, 300);
    },
    updateData(proResult, conclusion) {
      if (this.checkStatus === "1") {
        this.form.jcsj = proResult; // 更新检查所见
        this.form.desc = conclusion; // 更新检查结论
        // console.log(proResult, conclusion);
      }
    },
    handleSelectionChange(selection) {
        console.log(selection[0].yxbx,123);
      this.list = [];
      this.list = selection;
      this.yxbx = selection[0].yxbx
      //   this.form.desc = "";
      this.list.forEach((element) => {
        if (element.bingzhong) {
          this.form.desc += element.bingzhong + ",";
        } else {
          this.form.desc += element.ruleStr + ",";
        }
      });
      this.updateFormContent(selection);
    },
    /* handleSelectionChange(selection) {
      // 当前选中的项
        const newSelection = selection;
    updateFormContent(selection) {
      if (!selection.length) return;
      // 1. 处理取消选中的项
      const removedItems = this.selectedItems.filter(
        (item) => !newSelection.includes(item)
      );
      // 从 form.desc 中移除取消选中的数据
      removedItems.forEach((item) => {
        const itemToRemove = item.bingzhong || item.ruleStr;
        this.form.desc = this.form.desc.replace(
          new RegExp(itemToRemove + ",?", "g"), // 使用正则确保移除所有重复项
          ""
        );
      });
      // 2. 更新已选中的数据列表
      this.selectedItems = newSelection;
      // 3. 添加新选中的项到 form.desc
      newSelection.forEach((element) => {
        const itemToAdd = element.bingzhong || element.ruleStr;
        if (!this.form.desc.includes(itemToAdd)) {
          this.form.desc += itemToAdd + ",";
      // 如果处于检查状态,使用传入的值
      if (this.checkStatus === "1") {
        this.updateData(this.proResult, this.conclusion);
        return;
        }
      });
    }, */
      // 重置表单内容
      this.form.desc = '';
      this.form.jcsj = '';
      // 使用map和join替代forEach和字符串拼接
      this.form.desc = selection
        .map(item => item.bingzhong || item.ruleStr)
        .filter(Boolean)
        .join(',');
      this.form.jcsj = selection
        .map(item => item.yxbx)
        .filter(Boolean)
        .join(',');
    },
    handleOk() {
      this.open = false;
      if (this.form.desc) {
        // this.$emit("add", this.form.desc, this.list);
        this.$emit("add", this.form.desc,this.yxbx);
        // this.lastDesc = this.form.desc;
      if (!this.form.desc && !this.form.jcsj) {
        this.$message.warning('请选择数据');
        return;
      }
      //   this.form.desc = "";
      try {
        this.$emit("add", this.form.desc, this.form.jcsj);
        this.resetForm();
        this.open = false;
      } catch (error) {
        console.error('处理数据失败:', error);
        this.$message.error('操作失败');
      }
    },
    resetForm() {
      this.form.desc = '';
      this.form.jcsj = '';
      this.list = [];
      if (this.$refs.multipleTable) {
        this.$refs.multipleTable.clearSelection();
      }
    },
  },
  computed: {
    isCheckMode() {
      return this.checkStatus === "1";
    },
    hasSelectedItems() {
      return this.list.length > 0;
    }
  }
};
</script>
  
<style scoped></style>
<style scoped>
.el-dialog__body{
  padding: 10px 20px;
}
::v-deep .el-dialog__footer {
  padding: 0 !important;
  padding-bottom: 40px !important;
}
</style>
  
src/views/advice/advice/index.vue
@@ -78,6 +78,7 @@
    <el-row :gutter="20">
      <el-col :span="3" :xs="24">
        <div class="head-container">
          <div class="content">
          <el-tree
            :data="deptOptions"
            :props="defaultProps"
@@ -90,6 +91,7 @@
            highlight-current
            @node-click="handleNodeClick"
          />
          </div>
        </div>
      </el-col>
@@ -175,8 +177,6 @@
    </div>
      </el-col>
    </el-row>
    <!-- 添加或修改advice对话框 -->
    <el-dialog
@@ -353,7 +353,7 @@
    };
  },
  created() {
    this.sendhospName()
    this.sendhospName();
    this.getDeptTree();
  },
  watch: {
@@ -371,9 +371,8 @@
  },
  methods: {
    sendhospName() {
      getDeptListByDictHospId({
        id: 2000
        id: 2000,
      }).then((res) => {
        this.DepartmentList = res.data;
        this.form.deptId = String(this.form.deptId);
@@ -381,7 +380,8 @@
    },
    // 节点单击事件
    handleNodeClick(data) {
      this.queryParams.deptId = data.id;
      // this.queryParams.deptId = data.id;
      this.queryParams.deptId = null;;
      this.handleQuery();
    },
@@ -392,7 +392,6 @@
    },
    getDeptTree() {
      deptTreeSelect().then((response) => {
        this.deptOptions = response.data;
        this.treeId.push(this.deptOptions[0].id);
        this.queryParams.deptId = this.deptOptions[0].id;
@@ -474,7 +473,7 @@
      this.reset();
      this.title = "体检建议信息维护";
      this.getlistProject();
      this.form.deptId = this.queryParams.deptId
      this.form.deptId = this.queryParams.deptId;
      this.open = true;
    },
    /** 修改按钮操作 */
@@ -489,7 +488,7 @@
        }
        this.getlistProject();
        this.open = true;
        this.form.deptId = this.queryParams.deptId
        this.form.deptId = this.queryParams.deptId;
        this.title = "体检建议信息维护";
      });
    },
@@ -575,4 +574,16 @@
.pag1 {
  width: 30%;
}
.content {
  width: 1000px;
  height: 1000px;
}
.head-container {
  width: 200px;
  height: 629px;
  overflow: auto;
  border: 1px solid #ccc;
  position: relative;
}
</style>
src/views/doctor/pacsCheck/index.vue
@@ -89,7 +89,7 @@
      :data="exaLists"
      v-loading="loading"
      border
      max-height="350"
      height="350"
      @current-change="handleCurrentChange"
      @selection-change="handleSelectionChange"
      :row-class-name="tableRowClassName"
src/views/picture/picture/index.vue
@@ -280,7 +280,12 @@
            label-width="68px"
          >
            <el-form-item label="检查所见" prop="proResult">
              <el-input v-model="form.proResult" clearable type="textarea" />
              <el-input
                v-model="form.proResult"
                clearable
                type="textarea"
                @focus="submiepilog"
              />
            </el-form-item>
            <el-form-item label="检查结论" prop="conclusion">
              <el-input
@@ -335,7 +340,8 @@
      />
    </div>
    <Public ref="aaa" :last-desc="form.conclusion" @add="handleChanges" />
    <Public ref="aaa" :check-status="checkStatus" :pro-result="form.proResult" :conclusion="form.conclusion" @add="handleChanges" />
    <!--  :last-desc="form.conclusion" -->
  </div>
</template>
@@ -750,6 +756,13 @@
        console.log(res, 222);
        this.tableList = res.data;
        this.loading = false;
        this.$nextTick(() => {
          if (this.tableList.length > 0) {
            const firstRow = this.tableList[0];
            this.$refs.mu.toggleRowSelection(firstRow, true);
            this.handleChange([firstRow]);
          }
        });
      });
    },
@@ -807,7 +820,7 @@
    },
    // 多选框选中数据
    handleSelectionChange(selection) {
    /* handleSelectionChange(selection) {
      this.imgsrc = selection[0].picturePath;
      this.tjNumber = selection[0].customer.tjNumber;
      this.ids = selection.map((item) => item.id);
@@ -834,9 +847,60 @@
      }
      this.single = selection.length !== 1;
      this.multiple = !selection.length;
    }, */
    handleSelectionChange(selection) {
      this.imgsrc = selection[0].picturePath;
      this.tjNumber = selection[0].customer.tjNumber;
      this.ids = selection.map((item) => item.id);
      if (selection.length > 1) {
        let del_row = selection.shift();
        this.$refs.tb.toggleRowSelection(del_row, false);
      }
      this.single = selection.length !== 1;
      this.multiple = !selection.length;
      selection.forEach((element) => {
        this.tableList = element.list;
        if (this.tableList.length !== 0) {
          // ✅ 提前赋值 selectedRow,避免 handleChange 时未赋值
          this.selectedRow = this.tableList[0];
          this.form.proResult = this.tableList[0].proResult;
          this.form.conclusion = this.tableList[0].conclusion;
          this.$nextTick(() => {
            this.$refs.mu.toggleRowSelection(this.tableList[0], true);
          });
        } else {
          this.selectedRow = null;
          this.$refs.mu.clearSelection();
        }
      });
    },
    handleChange(selection) {
      if (selection && selection.length > 0) {
        const proId = selection[0].proId;
        // ✅ 确保 selectedRow 存在且有 tjNumber
        if (this.selectedRow && this.selectedRow.tjNumber) {
          const tjNumber = this.selectedRow.tjNumber;
          getYxJcXxJg(tjNumber, proId).then((res) => {
            this.form.proResult = res.data.jcsj;
            this.form.conclusion = res.data.jcjl;
            this.$refs.aaa.updateData(res.data.jcsj, res.data.jcjl);
          });
        } else {
          console.warn("selectedRow 未准备好,跳过接口调用");
        }
        // ✅ 同时更新 selectedRow
        this.selectedRow = selection[0];
      }
    },
    handleChange(selection) {
    /* handleChange(selection) {
      // console.log(selection, 123);
      if (selection && selection.length > 0) {
        const proId = selection[0].proId;
@@ -848,7 +912,7 @@
          this.form.conclusion = res.data.jcjl;
        });
      }
    },
    }, */
    handleChanges(value,yxbx) {
      this.form.conclusion = value;
@@ -860,7 +924,6 @@
      let proId = "1633660948860522585";
      // let proId = null  
      this.$refs.aaa.getList(proId);
    },
    tupian() {
      this.dialogVisible = true;