zouyu
2025-03-18 bc44c8e3c9d85691ce3fa73ef1300a6fae46e365
src/views/business/unPass/index.vue
@@ -1,9 +1,220 @@
<style scoped>
.title {
  height: 60px;
  line-height: 60px;
}
.search {
  background-color: #fff;
  height: 80px;
  display: flex;
  align-items: center;
}
.search_thing {
  display: flex;
  align-items: center;
  height: 50px;
}
.search_label {
  width: 120px;
  font-size: 14px;
  text-align: right;
}
.search_input {
  width: calc(100% - 120px);
}
.table {
  margin-top: 10px;
  background-color: #fff;
  width: calc(100% - 40px);
  height: calc(100% - 60px - 80px - 10px - 40px);
  padding: 20px;
}
</style>
<template>
  <div>不合格处理</div>
  <div class="below-standard-main bg-1">
    <div style="width: 100%; height: 100%">
      <div>
        <el-row class="title">
          <el-col :span="12" style="padding-left: 20px; text-align: left"
            >不合格管理</el-col
          >
        </el-row>
      </div>
      <div class="search">
        <div class="search_thing">
          <div class="search_label">规格型号:</div>
          <div class="search_input">
            <el-input
              size="small"
              placeholder="请输入"
              clearable
              v-model="entity.model"
              @keyup.enter.native="refreshTable()"
            ></el-input>
          </div>
        </div>
        <div class="search_thing">
          <div class="search_label">样品名称:</div>
          <div class="search_input">
            <el-input
              size="small"
              placeholder="请输入"
              clearable
              v-model="entity.sample"
              @keyup.enter.native="refreshTable()"
            ></el-input>
          </div>
        </div>
        <div class="search_thing" style="padding-left: 30px">
          <el-button size="small" @click="refresh()">重 置</el-button>
          <el-button size="small" type="primary" @click="refreshTable()"
            >查 询</el-button
          >
        </div>
      </div>
      <div class="table">
        <lims-table
          :tableData="tableData"
          :column="column"
          :tableLoading="tableLoading"
          :parentSpanMethod="spanMethod"
          :height="tableHeight+''"
          :page="page"
          @pagination="pagination"
        ></lims-table>
      </div>
    </div>
  </div>
</template>
<script>
export default {};
</script>
import limsTable from "@/components/Table/lims-table.vue";
import {
  pageInsUnPass
} from "../../../api/business/unPass";
<style></style>
import { convertToHtml } from "mammoth";
export default {
  components: {
    limsTable,
  },
  data() {
    return {
      tableData: [],
      column:[
        {
          label: '委托编号',
          prop: 'entrustCode'
        },
        {
          label: '样品名称',
          prop: 'sample'
        },
        {
          label: '规格型号',
          prop: 'model'
        },
        {
          label: '检测项',
          prop: 'inspectionItem'
        },
        {
          label: '检测子项',
          prop: 'inspectionItemSubclass'
        },
        {
          label: '检测结果',
          prop: 'lastValue'
        },
        {
          label: '处理意见',
          prop: 'handleSuggestion'
        },
        {
          label: '检验人',
          prop: 'name'
        }
      ],
      tableLoading: false,
      page: {
        current: 1,
        size: 20,
        total: 0,
      },
      entity: {
          sample: null,
          model: null,
        },
      entityCopy: {},
      upIndex: 0,
      statusList: [],
    };
  },
  mounted() {
    this.entityCopy = this.HaveJson(this.entity);
    this.refreshTable();
  },
  created() {
    this.getTableHeight();
  },
  methods: {
    // 表格合并
    spanMethod({row,column,rowIndex,columnIndex}) {
      // 需要合并的列
      const needSpan = [1]
      if(needSpan.includes(columnIndex)) {
        // 如果是第一行 或者 当前行的值和上一行的值不一样 就要开始进行计算合并
        if(rowIndex == 0 || row.entrustCode != this.tableData[rowIndex -1 ].entrustCode) {
          // 向下找到和当前行不一样的行数
          let rowSpan = 1;
          while(rowIndex + rowSpan < this.tableData.length && row.entrustCode == this.tableData[rowIndex + rowSpan].entrustCode) {
            rowSpan++
          }
          return [rowSpan,1]
        }else {
          // 如果和上一行的值一样 就隐藏
          return [0,0]
        }
      }else{
        return [1,1]
      }
    },
    getTableHeight() {
      this.tableHeight = window.innerHeight - 50 - 46 - 60 - 80 - 30 - 30 - 32;
    },
    getData() {
      this.tableLoading = true;
      pageInsUnPass({
        current: this.page.current,
        size: this.page.size,
        model: this.entity.model,
        sample: this.entity.sample,
      }).then((res) => {
        this.tableLoading = false;
        this.tableData = res.data.records;
        this.page.total = res.data.total;
      });
    },
    pagination({page,limit}) {
      this.page.current = page;
      this.page.size = limit;
      this.getData();
    },
    refreshTable() {
      this.getData();
    },
    refresh() {
      this.entity = this.HaveJson(this.entityCopy);
      this.upIndex++;
      this.$nextTick(() => {
        this.getData();
      });
    },
  },
};
</script>