zouyu
2025-03-12 76d921a3fe7488dae2c522a77259f2c2c1ce2859
表格组件调整2
已修改2个文件
1038 ■■■■ 文件已修改
src/components/Table/lims-table.vue 346 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionOrder/index.vue 692 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Table/lims-table.vue
@@ -1,30 +1,83 @@
<template>
  <div>
    <!-- 表格 -->
    <el-table ref="multipleTable" v-loading="tableLoading" :border="border" :data="tableData"
      :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" :height="height"
      :highlight-current-row="highlightCurrentRow" :row-class-name="rowClassName" :row-style="rowStyle"
      :row-key="rowKey" :span-method="spanMethod" :stripe="stripe" style="width: 100%" tooltip-effect="dark"
      @row-click="rowClick" @current-change="currentChange" @selection-change="handleSelectionChange"
      class="lims-table">
      <el-table-column align="center" type="selection" width="55" v-if="isSelection" />
      <el-table-column align="center" label="序号" type="index" width="60" :index="indexMethod" />
    <el-table
      ref="multipleTable"
      v-loading="tableLoading"
      :border="border"
      :data="tableData"
      :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }"
      :height="height"
      :highlight-current-row="highlightCurrentRow"
      :row-class-name="rowClassName"
      :row-style="rowStyle"
      :row-key="rowKey"
      :span-method="spanMethod"
      :stripe="stripe"
      style="width: 100%"
      tooltip-effect="dark"
      @row-click="rowClick"
      @current-change="currentChange"
      @selection-change="handleSelectionChange"
      class="lims-table"
    >
      <el-table-column
        align="center"
        type="selection"
        width="55"
        v-if="isSelection"
      />
      <el-table-column
        align="center"
        label="序号"
        type="index"
        width="60"
        :index="indexMethod"
      />
      <el-table-column v-for="(item, index) in column" :key="index" :column-key="item.columnKey"
        :filter-method="item.filterHandler" :filter-multiple="item.filterMultiple" :filtered-value="item.filteredValue"
        :filters="item.filters" :fixed="item.fixed" :label="item.label" :min-width="item.minWidth" :prop="item.prop"
        :show-overflow-tooltip="item.dataType === 'action' || item.dataType === 'slot' ? false : true
          " :sortable="item.sortable ? true : false" :type="item.type" align="center"
        :width="item.dataType == 'action' ? btnWidth : item.width">
      <el-table-column
        v-for="(item, index) in column"
        :key="index"
        :column-key="item.columnKey"
        :filter-method="item.filterHandler"
        :filter-multiple="item.filterMultiple"
        :filtered-value="item.filteredValue"
        :filters="item.filters"
        :fixed="item.fixed"
        :label="item.label"
        :min-width="item.minWidth"
        :prop="item.prop"
        :show-overflow-tooltip="
          item.dataType === 'action' || item.dataType === 'slot' ? false : true
        "
        :sortable="item.sortable ? true : false"
        :type="item.type"
        align="center"
        :width="item.dataType == 'action' ? btnWidth : item.width"
      >
        <!-- <div class="123" v-if="item.type == ''"> -->
        <template v-if="item.hasOwnProperty('colunmTemplate')" :slot="item.colunmTemplate" slot-scope="scope">
          <slot v-if="item.theadSlot" :index="index" :name="item.theadSlot" :row="scope.row" />
        <template
          v-if="item.hasOwnProperty('colunmTemplate')"
          :slot="item.colunmTemplate"
          slot-scope="scope"
        >
          <slot
            v-if="item.theadSlot"
            :index="index"
            :name="item.theadSlot"
            :row="scope.row"
          />
        </template>
        <template slot-scope="scope">
          <!-- 插槽 -->
          <div v-if="item.dataType == 'slot'">
            <slot v-if="item.slot" :index="scope.$index" :name="item.slot" :row="scope.row" />
            <slot
              v-if="item.slot"
              :index="scope.$index"
              :name="item.slot"
              :row="scope.row"
            />
          </div>
          <!-- 进度条 -->
          <div v-else-if="item.dataType == 'progress'">
@@ -32,76 +85,141 @@
          </div>
          <!-- 图片 -->
          <div v-else-if="item.dataType == 'image'">
            <img :src="javaApi + '/img/' + scope.row[item.prop]" alt=""
              style="width: 40px; height: 40px; margin-top: 10px" />
            <img
              :src="javaApi + '/img/' + scope.row[item.prop]"
              alt=""
              style="width: 40px; height: 40px; margin-top: 10px"
            />
          </div>
          <!-- tag -->
          <div v-else-if="item.dataType == 'tag'">
            <el-tag v-if="
              typeof dataTypeFn(scope.row[item.prop], item.formatData) ==
              'string'
            " :title="scope.row[item.prop] | formatters(item.formatData)"
              :type="formatType(scope.row[item.prop], item.formatType)">{{ scope.row[item.prop] |
                formatters(item.formatData) }}</el-tag>
            <el-tag v-for="(tag, index) in dataTypeFn(
              scope.row[item.prop],
              item.formatData
            )" v-else-if="
              typeof dataTypeFn(scope.row[item.prop], item.formatData) ==
              'object'
            " :key="index" :title="scope.row[item.prop] | formatters(item.formatData)"
              :type="formatType(tag, item.formatType)">{{
            <el-tag
              v-if="
                typeof dataTypeFn(scope.row[item.prop], item.formatData) ==
                'string'
              "
              :title="scope.row[item.prop] | formatters(item.formatData)"
              :type="formatType(scope.row[item.prop], item.formatType)"
              >{{ scope.row[item.prop] | formatters(item.formatData) }}</el-tag
            >
            <el-tag
              v-for="(tag, index) in dataTypeFn(
                scope.row[item.prop],
                item.formatData
              )"
              v-else-if="
                typeof dataTypeFn(scope.row[item.prop], item.formatData) ==
                'object'
              "
              :key="index"
              :title="scope.row[item.prop] | formatters(item.formatData)"
              :type="formatType(tag, item.formatType)"
              >{{
                item.tagGroup
                  ? tag[item.tagGroup.label]
                    ? tag[item.tagGroup.label]
                    : tag
                  : tag
              }}</el-tag>
            <el-tag v-else :title="scope.row[item.prop] | formatters(item.formatData)"
              :type="formatType(scope.row[item.prop], item.formatType)">{{ scope.row[item.prop] |
                formatters(item.formatData) }}</el-tag>
              }}</el-tag
            >
            <el-tag
              v-else
              :title="scope.row[item.prop] | formatters(item.formatData)"
              :type="formatType(scope.row[item.prop], item.formatType)"
              >{{ scope.row[item.prop] | formatters(item.formatData) }}</el-tag
            >
          </div>
          <!-- 按钮 -->
          <div v-else-if="item.dataType == 'action'" :style="`width:${getWidth(item.operation, scope.row)}`">
          <div
            v-else-if="item.dataType == 'action'"
            :style="`width:${getWidth(item.operation, scope.row)}`"
          >
            <template v-for="(o, key) in item.operation">
              <el-button v-show="o.type != 'upload'" size="mini" v-if="o.showHide ? o.showHide(scope.row) : true"
                :disabled="o.disabled ? o.disabled(scope.row) : false" :icon="iconFn(o)" :plain="o.plain"
                :style="{ color: o.name === '删除' ? '#f56c6c' : o.color }" :type="o.type | typeFn(scope.row)"
                @click="o.clickFun(scope.row)" :key="key">
              <el-button
                v-show="o.type != 'upload'"
                size="mini"
                v-if="o.showHide ? o.showHide(scope.row) : true"
                :disabled="o.disabled ? o.disabled(scope.row) : false"
                :icon="iconFn(o)"
                :plain="o.plain"
                :style="{ color: o.name === '删除' ? '#f56c6c' : o.color }"
                :type="o.type | typeFn(scope.row)"
                @click="o.clickFun(scope.row)"
                :key="key"
              >
                {{ o.name }}
              </el-button>
              <el-upload :action="javaApi +
                o.url +
                '?id=' +
                (o.uploadIdFun ? o.uploadIdFun(scope.row) : scope.row.id)
                " size="mini" ref="upload" :multiple="o.multiple ? o.multiple : false" :limit="1"
                :disabled="o.disabled ? o.disabled(scope.row) : false" :accept="o.accept
                  ? o.accept
                  : '.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
                  " v-if="o.type == 'upload' && o.url" style="display: inline-block; width: 50px"
                v-show="o.showHide ? o.showHide(scope.row) : true" :headers="uploadHeader" :on-error="onError"
                :on-exceed="onExceed" :on-success="handleSuccessUp" :show-file-list="false" :key="key">
                <el-button :size="o.size ? o.size : 'small'" type="text"
                  :disabled="o.disabled ? o.disabled(scope.row) : false">{{ o.name }}</el-button>
              <el-upload
                :action="javaApi + o.url"
                size="mini"
                ref="upload"
                :multiple="o.multiple ? o.multiple : false"
                :disabled="o.disabled ? o.disabled(scope.row) : false"
                :accept="
                  o.accept
                    ? o.accept
                    : '.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
                "
                v-if="o.type == 'upload' && o.url"
                style="display: inline-block; width: 50px"
                :data="o.data ? o.data(scope.row) : {}"
                :before-upload="
                  o.beforeUpload ? o.beforeUpload(scope.row) : () => true
                "
                v-show="o.showHide ? o.showHide(scope.row) : true"
                :headers="uploadHeader"
                :on-error="onError"
                :on-exceed="onExceed"
                :on-success="handleSuccessUp"
                :show-file-list="false"
                :key="key"
              >
                <el-button
                  :size="o.size ? o.size : 'small'"
                  type="text"
                  :disabled="o.disabled ? o.disabled(scope.row) : false"
                  >{{ o.name }}</el-button
                >
              </el-upload>
              <el-upload action="#" :on-change="(file, fileList) => o.clickFun(scope.row, file, fileList)
                " :multiple="o.multiple ? o.multiple : false" :limit="o.limit ? o.limit : 1"
                :disabled="o.disabled ? o.disabled(scope.row) : false" :accept="o.accept
                  ? o.accept
                  : '.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
                  " v-if="o.type == 'upload' && !o.url" style="display: inline-block; width: 50px"
                v-show="o.showHide ? o.showHide(scope.row) : true" :auto-upload="false" :on-exceed="onExceed"
                :show-file-list="false" :key="key">
                <el-button :size="o.size ? o.size : 'small'" type="text"
                  :disabled="o.disabled ? o.disabled(scope.row) : false">{{ o.name }}</el-button>
              <el-upload
                action="#"
                :on-change="
                  (file, fileList) => o.clickFun(scope.row, file, fileList)
                "
                :multiple="o.multiple ? o.multiple : false"
                :limit="o.limit ? o.limit : 1"
                :disabled="o.disabled ? o.disabled(scope.row) : false"
                :accept="
                  o.accept
                    ? o.accept
                    : '.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
                "
                v-if="o.type == 'upload' && !o.url"
                style="display: inline-block; width: 50px"
                v-show="o.showHide ? o.showHide(scope.row) : true"
                :auto-upload="false"
                :on-exceed="onExceed"
                :show-file-list="false"
                :key="key"
              >
                <el-button
                  :size="o.size ? o.size : 'small'"
                  type="text"
                  :disabled="o.disabled ? o.disabled(scope.row) : false"
                  >{{ o.name }}</el-button
                >
              </el-upload>
            </template>
          </div>
          <!-- 可点击的文字 -->
          <div v-else-if="item.dataType == 'link'" class="cell" style="width: 100%"
            @click="goLink(scope.row, item.linkEvent)">
          <div
            v-else-if="item.dataType == 'link'"
            class="cell"
            style="width: 100%"
            @click="goLink(scope.row, item.linkEvent)"
          >
            <span class="link" v-if="!item.formatData">
              {{ scope.row[item.prop] }}
            </span>
@@ -115,57 +233,17 @@
          </div>
        </template>
      </el-table-column>
      <!-- 操作列 -->
      <el-table-column v-if="table.operator" :label="(table.operatorConfig && table.operatorConfig.label) || '操作'"
        :width="table.operatorConfig &&
          (table.operatorConfig.width
            ? table.operatorConfig.width
            : calcOperationWidth())
          " :min-width="(table.operatorConfig && table.operatorConfig.width) ||
          table.operatorConfig.minWidth ||
          100
          " align="center" :fixed="table.operatorConfig ? table.operatorConfig.fixed : 'right'"
        :show-overflow-tooltip="true">
        <template slot-scope="scope">
          <template v-for="(o, index) in table.operator">
            <el-button :key="index" v-if="o.type != 'upload'" @click.stop="o.clickFun(scope.row)"
              :type="o.type || 'text'" :icon="o.icon" :size="o.size || 'small'"
              :disabled="o.disabled ? o.disabled(scope.row) : false" v-show="o.showFun ? o.showFun(scope.row) : true"
              :class="[
                'commonButton',
                {
                  del: o.name === '删除' || o.name === '作废',
                },
              ]">{{ o.name }}
            </el-button>
            <el-upload :action="javaApi + o.url" size="mini" ref="upload" :multiple="o.multiple ? o.multiple : false"
              :disabled="o.disabled ? o.disabled(scope.row) : false" :accept="o.accept
                  ? o.accept
                  : '.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
                " v-if="o.type == 'upload' && o.url" style="display: inline-block; width: 50px"
              v-show="o.showHide ? o.showHide(scope.row) : true" :data="o.data ? o.data(scope.row) : {}" :before-upload="o.beforeUpload ? o.beforeUpload(scope.row) : () => true
                " :headers="uploadHeader" :on-error="onError" :on-exceed="onExceed" :on-success="handleSuccessUp"
              :show-file-list="false" :key="index">
              <el-button :size="o.size ? o.size : 'small'" type="text"
                :disabled="o.disabled ? o.disabled(scope.row) : false">{{ o.name }}</el-button>
            </el-upload>
            <el-upload action="#" :on-change="(file, fileList) => o.clickFun(scope.row, file, fileList)
              " :multiple="o.multiple ? o.multiple : false" :limit="o.limit ? o.limit : 1"
              :disabled="o.disabled ? o.disabled(scope.row) : false" :accept="o.accept
                  ? o.accept
                  : '.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
                " v-if="o.type == 'upload' && !o.url" style="display: inline-block; width: 50px"
              v-show="o.showHide ? o.showHide(scope.row) : true" :auto-upload="false" :on-exceed="onExceed"
              :show-file-list="false" :key="index">
              <el-button :size="o.size ? o.size : 'small'" type="text"
                :disabled="o.disabled ? o.disabled(scope.row) : false">{{ o.name }}</el-button>
            </el-upload>
          </template>
        </template>
      </el-table-column>
    </el-table>
    <pagination v-if="page" v-show="page.total > 0" :total="page.total" :layout="page.layout" :page.sync="page.current"
      :limit.sync="page.size" @pagination="pagination" style="background-color: #fff" />
    <pagination
      v-if="page"
      v-show="page.total > 0"
      :total="page.total"
      :layout="page.layout"
      :page.sync="page.current"
      :limit.sync="page.size"
      @pagination="pagination"
      style="background-color: #fff"
    />
  </div>
</template>
@@ -254,19 +332,19 @@
    handleSelectionChange: {
      type: Function,
      default: () => {
        return () => { };
        return () => {};
      },
    },
    rowClick: {
      type: Function,
      default: () => {
        return () => { };
        return () => {};
      },
    },
    currentChange: {
      type: Function,
      default: () => {
        return () => { };
        return () => {};
      },
    },
    border: {
@@ -287,22 +365,15 @@
        return {};
      },
    },
    // column: {
    //   type: Array,
    //   default() {
    //     return [];
    //   },
    // },
    table: {
      type: Object,
    column: {
      type: Array,
      default() {
        return {};
        return [];
      },
      required: true,
    },
    rowClassName: {
      type: Function,
      default: () => { },
      default: () => {},
    },
    rowStyle: {
      type: Function,
@@ -333,17 +404,16 @@
  data() {
    return {
      spanList: [],
      btnWidth: '120px'
      btnWidth: "120px",
    };
  },
  watch: {
    table(val) {
    column(val) {
      this.doLayout();
    },
  },
  mounted() {
    this.calculateSpanInfo();
    this.column = this.table.column;
  },
  methods: {
    getWidth(row, row0) {
@@ -355,7 +425,7 @@
          count += a.name.length;
        }
      });
      this.btnWidth = count * 15 + 70 + "px"
      this.btnWidth = count * 15 + 70 + "px";
      return count * 15 + 70 + "px";
    },
    iconFn(row) {
@@ -506,11 +576,11 @@
</script>
<style scoped>
.el-table>>>.el-table__empty-text {
.el-table >>> .el-table__empty-text {
  text-align: center;
}
>>>.cell {
>>> .cell {
  padding: 0 !important;
}
@@ -527,7 +597,7 @@
  cursor: pointer;
}
>>>.el-table__body-wrapper::-webkit-scrollbar {
>>> .el-table__body-wrapper::-webkit-scrollbar {
  height: 14px;
  /* 设置滚动条宽度 */
}
src/views/business/inspectionOrder/index.vue
@@ -183,7 +183,7 @@
            :height="tableHeight + ''"
            @pagination="pagination"
            :handleSelectionChange="selectionChange"
            :table="table"
            :column="column"
            :page="page"
            :tableLoading="tableLoading"
          ></lims-table>
@@ -378,7 +378,7 @@
            highlightCurrentRow
            :height="'80vh'"
            :tableData="dataLooktableData"
            :table="dataLookTable"
            :column="dataLookColumn"
            :tableLoading="dataLookTableLoading"
          ></lims-table>
        </el-dialog>
@@ -868,357 +868,349 @@
        current: 1,
      },
      tableLoading: false,
      table: {
        // 标题
        column: [
          {
            label: "委托编号",
            prop: "entrustCode",
            minWidth: "160px",
            width: "160px",
          },
          {
            label: "外部委托编号",
            prop: "outEntrustCode",
            minWidth: "160px",
            width: "160px",
          },
          {
            label: "委托单位",
            prop: "company",
            minWidth: "160px",
            width: "160px",
          },
          {
            label: "样品名称",
            prop: "sampleName",
            minWidth: "160px",
            width: "160px",
            dataType: "link",
            linkEvent: {
              method: "showDetails",
              vueComponent: this,
            },
          },
          {
            label: "样品编号",
            prop: "sampleCode",
            minWidth: "160px",
            width: "160px",
          },
          {
            label: "样品型号",
            prop: "sampleModel",
            minWidth: "160px",
            width: "160px",
          },
          {
            label: "样品数量",
            prop: "sampleNum",
            minWidth: "120px",
            width: "120px",
          },
          {
            label: "检验进度%",
            prop: "insProgress",
            minWidth: "120px",
            width: "120px",
          },
          {
            label: "紧急程度",
            prop: "type",
            minWidth: "100px",
            width: "100px",
            dataType: "tag",
            formatData: (params) => {
              let index = this.urgencyDictList.findIndex(
                (item) => item.dictValue == params
              );
              if (index > -1) {
                return this.urgencyDictList[index].dictLabel;
              } else {
                return null;
              }
            },
            formatType: (params) => {
              let index = this.urgencyDictList.findIndex(
                (item) => item.dictValue == params
              );
              if (index > -1) {
                return this.urgencyDictList[index].listClass;
              } else {
                return null;
              }
            },
          },
          {
            label: "备注",
            prop: "remark",
            minWidth: "120px",
            width: "120px",
          },
          {
            label: "制单人",
            prop: "custom",
            minWidth: "120px",
            width: "120px",
          },
          {
            label: "约定时间",
            prop: "appointed",
            minWidth: "120px",
            width: "120px",
          },
          {
            label: "下单时间",
            prop: "createTime",
            minWidth: "120px",
            width: "120px",
          },
          {
            label: "下发时间",
            prop: "sendTime",
            minWidth: "120px",
            width: "120px",
          },
          {
            label: "退回理由",
            prop: "tell",
            minWidth: "120px",
            width: "120px",
          },
          {
            label: "委托人",
            prop: "prepareUser",
            minWidth: "120px",
            width: "120px",
          },
          {
            label: "撤销日期",
            prop: "revocationTime",
            minWidth: "120px",
            width: "120px",
          },
        ],
        operatorConfig: {
          fixed: "right",
          label: "操作",
          minWidth: 100,
      column: [
        {
          label: "委托编号",
          prop: "entrustCode",
          minWidth: "160px",
          width: "160px",
        },
        operator: [
          {
            name: "数据查看",
            type: "text",
            disabled: (row) => {
              return row.state != 1 && row.state != 4;
            },
            clickFun: (row) => {
              this.handleDataLook(row);
            },
            showFun: () => {
              return true;
            },
          },
          {
            name: "报告下载",
            type: "text",
            clickFun: (row) => {},
            disabled: (row, index) => {
              return row.state != 4 || row.isRatify != 1;
            },
          },
          {
            name: "审核",
            type: "text",
            clickFun: (row) => {},
            disabled: (row, index) => {
              return row.state != 0;
            },
          },
          {
            name: "撤销",
            type: "text",
            clickFun: (row) => {},
            disabled: (row, index) => {
              return row.state != 1 && row.state != 0;
            },
          },
          {
            name: "撤销审核",
            type: "text",
            clickFun: (row) => {},
            disabled: (row, index) => {
              return (
                (row.state != 1 && row.state != 0) ||
                this.tabIndex != 1 ||
                row.isRevocation != 1
              );
            },
          },
          {
            name: "分配",
            type: "text",
            clickFun: (row) => {},
            disabled: (row, index) => {
              return (
                row.state != 1 ||
                (row.entrustCode != null &&
                  Number(row.assign) > 0 &&
                  row.inspectId != null)
              );
            },
          },
        ],
      },
      dataLookTable: {
        column: [
          {
            label: "委托编号",
            prop: "entrustCode",
            minWidth: "160px",
            width: "160px",
          },
          {
            label: "样品编号",
            prop: "sampleCode",
            minWidth: "160px",
            width: "160px",
          },
          {
            label: "管套色标",
            prop: "bushColor",
            minWidth: "100px",
            width: "100px",
          },
          {
            label: "光纤带编号",
            prop: "code",
            minWidth: "120px",
            width: "120px",
          },
          {
            label: "光纤色标",
            prop: "color",
            minWidth: "100px",
            width: "100px",
          },
          {
            label: "检验项",
            prop: "inspectionItem",
            minWidth: "120px",
            width: "120px",
          },
          {
            label: "检验子项",
            prop: "inspectionItemSubclass",
            minWidth: "120px",
            width: "120px",
          },
          {
            label: "检验结果",
            prop: "lastValue",
            minWidth: "120px",
            width: "120px",
          },
          {
            label: "结果判定",
            prop: "insResult",
            minWidth: "100px",
            width: "100px",
            dataType: "tag",
            formatData: (params) => {
              let index = this.insResultList.findIndex(
                (item) => item.value == params
              );
              if (index > -1) {
                return this.insResultList[index].label;
              } else {
                return null;
              }
            },
            formatType: (params) => {
              let index = this.insResultList.findIndex(
                (item) => item.value == params
              );
              if (index > -1) {
                return this.insResultList[index].type;
              } else {
                return null;
              }
            },
          },
          {
            label: "单位",
            prop: "unit",
            minWidth: "120px",
            width: "120px",
          },
          {
            label: "试验要求",
            prop: "tell",
            minWidth: "120px",
            width: "120px",
          },
          {
            label: "检验人",
            prop: "checkName",
            minWidth: "120px",
            width: "120px",
          },
          {
            label: "检验日期",
            prop: "checkTime",
            minWidth: "140px",
            width: "140px",
          },
          {
            label: "样品名称",
            prop: "sample",
            minWidth: "160px",
            width: "160px",
          },
          {
            label: "样品型号",
            prop: "model",
            minWidth: "160px",
            width: "160px",
          },
          {
            label: "试验室",
            prop: "sonLaboratory",
            minWidth: "120px",
            width: "120px",
          },
        ],
        operatorConfig: {
          fixed: "right",
          label: "操作",
          width: 80,
          minWidth: 100,
        {
          label: "外部委托编号",
          prop: "outEntrustCode",
          minWidth: "160px",
          width: "160px",
        },
        operator: [
          {
            name: "查看",
            type: "text",
            clickFun: (row) => {},
            showFun: (row) => {
              console.log(row);
              console.log(row.inspectionItem);
              return (
                row.inspectionItem == "单根垂直燃烧" ||
                row.inspectionItem.includes("松套管") ||
                row.inspectionItemSubclass.includes("松套管") ||
                (row.inspectionItem == "抗拉强度" &&
                  (row.inspectionItemSubclass == "热老化处理前" ||
                    row.inspectionItemSubclass == "热老化处理后")) ||
                (row.inspectionItem == "断裂伸长率" &&
                  (row.inspectionItemSubclass == "热老化处理前" ||
                    row.inspectionItemSubclass == "热老化处理后"))
              );
            },
        {
          label: "委托单位",
          prop: "company",
          minWidth: "160px",
          width: "160px",
        },
        {
          label: "样品名称",
          prop: "sampleName",
          minWidth: "160px",
          width: "160px",
          dataType: "link",
          linkEvent: {
            method: "showDetails",
            vueComponent: this,
          },
        ],
      },
        },
        {
          label: "样品编号",
          prop: "sampleCode",
          minWidth: "160px",
          width: "160px",
        },
        {
          label: "样品型号",
          prop: "sampleModel",
          minWidth: "160px",
          width: "160px",
        },
        {
          label: "样品数量",
          prop: "sampleNum",
          minWidth: "120px",
          width: "120px",
        },
        {
          label: "检验进度%",
          prop: "insProgress",
          minWidth: "120px",
          width: "120px",
        },
        {
          label: "紧急程度",
          prop: "type",
          minWidth: "100px",
          width: "100px",
          dataType: "tag",
          formatData: (params) => {
            let index = this.urgencyDictList.findIndex(
              (item) => item.dictValue == params
            );
            if (index > -1) {
              return this.urgencyDictList[index].dictLabel;
            } else {
              return null;
            }
          },
          formatType: (params) => {
            let index = this.urgencyDictList.findIndex(
              (item) => item.dictValue == params
            );
            if (index > -1) {
              return this.urgencyDictList[index].listClass;
            } else {
              return null;
            }
          },
        },
        {
          label: "备注",
          prop: "remark",
          minWidth: "120px",
          width: "120px",
        },
        {
          label: "制单人",
          prop: "custom",
          minWidth: "120px",
          width: "120px",
        },
        {
          label: "约定时间",
          prop: "appointed",
          minWidth: "120px",
          width: "120px",
        },
        {
          label: "下单时间",
          prop: "createTime",
          minWidth: "120px",
          width: "120px",
        },
        {
          label: "下发时间",
          prop: "sendTime",
          minWidth: "120px",
          width: "120px",
        },
        {
          label: "退回理由",
          prop: "tell",
          minWidth: "120px",
          width: "120px",
        },
        {
          label: "委托人",
          prop: "prepareUser",
          minWidth: "120px",
          width: "120px",
        },
        {
          label: "撤销日期",
          prop: "revocationTime",
          minWidth: "120px",
          width: "120px",
        },
        {
          label: "操作",
          dataType: "action",
          fixed: "right",
          operation: [
            {
              name: "数据查看",
              type: "text",
              disabled: (row) => {
                return row.state != 1 && row.state != 4;
              },
              clickFun: (row) => {
                this.handleDataLook(row);
              },
              showHide: () => {
                return true;
              },
            },
            {
              name: "报告下载",
              type: "text",
              clickFun: (row) => {},
              disabled: (row, index) => {
                return row.state != 4 || row.isRatify != 1;
              },
            },
            {
              name: "审核",
              type: "text",
              clickFun: (row) => {},
              disabled: (row, index) => {
                return row.state != 0;
              },
            },
            {
              name: "撤销",
              type: "text",
              clickFun: (row) => {},
              disabled: (row, index) => {
                return row.state != 1 && row.state != 0;
              },
            },
            {
              name: "撤销审核",
              type: "text",
              clickFun: (row) => {},
              disabled: (row, index) => {
                return (
                  (row.state != 1 && row.state != 0) ||
                  this.tabIndex != 1 ||
                  row.isRevocation != 1
                );
              },
            },
            {
              name: "分配",
              type: "text",
              clickFun: (row) => {},
              disabled: (row, index) => {
                return (
                  row.state != 1 ||
                  (row.entrustCode != null &&
                    Number(row.assign) > 0 &&
                    row.inspectId != null)
                );
              },
            },
          ],
        },
      ],
      dataLookColumn: [
        {
          label: "委托编号",
          prop: "entrustCode",
          minWidth: "160px",
          width: "160px",
        },
        {
          label: "样品编号",
          prop: "sampleCode",
          minWidth: "160px",
          width: "160px",
        },
        {
          label: "管套色标",
          prop: "bushColor",
          minWidth: "100px",
          width: "100px",
        },
        {
          label: "光纤带编号",
          prop: "code",
          minWidth: "120px",
          width: "120px",
        },
        {
          label: "光纤色标",
          prop: "color",
          minWidth: "100px",
          width: "100px",
        },
        {
          label: "检验项",
          prop: "inspectionItem",
          minWidth: "120px",
          width: "120px",
        },
        {
          label: "检验子项",
          prop: "inspectionItemSubclass",
          minWidth: "120px",
          width: "120px",
        },
        {
          label: "检验结果",
          prop: "lastValue",
          minWidth: "120px",
          width: "120px",
        },
        {
          label: "结果判定",
          prop: "insResult",
          minWidth: "100px",
          width: "100px",
          dataType: "tag",
          formatData: (params) => {
            let index = this.insResultList.findIndex(
              (item) => item.value == params
            );
            if (index > -1) {
              return this.insResultList[index].label;
            } else {
              return null;
            }
          },
          formatType: (params) => {
            let index = this.insResultList.findIndex(
              (item) => item.value == params
            );
            if (index > -1) {
              return this.insResultList[index].type;
            } else {
              return null;
            }
          },
        },
        {
          label: "单位",
          prop: "unit",
          minWidth: "120px",
          width: "120px",
        },
        {
          label: "试验要求",
          prop: "tell",
          minWidth: "120px",
          width: "120px",
        },
        {
          label: "检验人",
          prop: "checkName",
          minWidth: "120px",
          width: "120px",
        },
        {
          label: "检验日期",
          prop: "checkTime",
          minWidth: "140px",
          width: "140px",
        },
        {
          label: "样品名称",
          prop: "sample",
          minWidth: "160px",
          width: "160px",
        },
        {
          label: "样品型号",
          prop: "model",
          minWidth: "160px",
          width: "160px",
        },
        {
          label: "试验室",
          prop: "sonLaboratory",
          minWidth: "120px",
          width: "120px",
        },
        {
          dataType: "action",
          label: "操作",
          fixed: "right",
          operation: [
            {
              name: "查看",
              type: "text",
              clickFun: (row) => {},
              showHide: (row) => {
                return (
                  row.inspectionItem == "单根垂直燃烧" ||
                  row.inspectionItem.includes("松套管") ||
                  row.inspectionItemSubclass.includes("松套管") ||
                  (row.inspectionItem == "抗拉强度" &&
                    (row.inspectionItemSubclass == "热老化处理前" ||
                      row.inspectionItemSubclass == "热老化处理后")) ||
                  (row.inspectionItem == "断裂伸长率" &&
                    (row.inspectionItemSubclass == "热老化处理前" ||
                      row.inspectionItemSubclass == "热老化处理后"))
                );
              },
            },
          ],
        },
      ],
      dataLookTableLoading: false,
      dataLooktableData: [],
      qrData: [],