XiaoRuby
2023-09-09 0bd64cdb66957d78202e96517d52cb100369b5af
src/components/view/rawInsDetail.vue
@@ -51,19 +51,25 @@
              <el-input
                v-if="detailId !== null"
                :disabled="detailId !== null"
                v-model="detailInfo.name"
                v-model="detailInfo.rname"
              ></el-input>
              <el-input
                v-else
                v-model="detailInfo.name"
                placeholder="请输入"
                placeholder="请输入原材料名称"
              ></el-input> </el-form-item
          ></el-col>
          <el-col :span="7">
            <el-form-item label="原材料编码:">
              <el-input
                v-if="detailId !== null"
                :disabled="detailId !== null"
                v-model="detailInfo.rcode"
              ></el-input>
              <el-input
                v-else
                v-model="detailInfo.code"
                placeholder="请输入原材料编码"
              ></el-input>
            </el-form-item>
          </el-col>
@@ -78,7 +84,7 @@
              ></el-input>
              <el-input
                v-else
                v-model="detailInfo.specificationsArr"
                v-model="detailInfo.specifications"
                placeholder="请输入规格型号"
              ></el-input>
            </el-form-item>
@@ -86,6 +92,12 @@
          <el-col :span="7">
            <el-form-item label="单位:">
              <el-input
                v-if="detailId !== null"
                :disabled="detailId !== null"
                v-model="detailInfo.runit"
              ></el-input>
              <el-input
                v-else
                placeholder="请输入检验单位"
                :disabled="detailId !== null"
                v-model="detailInfo.unit"
@@ -95,7 +107,7 @@
          <el-col :span="7">
            <el-form-item label="数量:">
              <el-input
                placeholder="请输入检验数量"
                :placeholder="detailId !== null ? '' : '请输入检验数量'"
                :disabled="detailId !== null"
                v-model="detailInfo.number"
              ></el-input>
@@ -106,9 +118,9 @@
          <el-col :span="7">
            <el-form-item label="供应商名称:">
              <el-input
                placeholder="请输入检验数量"
                :placeholder="detailId !== null ? '' : '请输入检验数量'"
                :disabled="detailId !== null"
                v-model="detailInfo.number"
                v-model="detailInfo.supplier"
              ></el-input>
            </el-form-item>
          </el-col>
@@ -116,7 +128,7 @@
            <el-form-item v-show="detailId !== null" label="报检日期:">
              <el-input
                :disabled="detailId !== null"
                v-model="detailInfo.createTime"
                v-model="detailInfo.creatTime"
              ></el-input>
            </el-form-item>
          </el-col>
@@ -135,7 +147,14 @@
      <el-row>
        <el-col :span="12" style="line-height: 32px;">检验项目</el-col>
        <el-col :span="12" style="line-height: 32px; padding-top: 6px;">
          <el-button v-if="detailId == null" style="float: right;"
          <el-button
            style="float: right;"
            @click="clickDeleteInspectionColumn()"
            >删除检验值列</el-button
          >
          <el-button
            style="float: right;margin-right: 30px;"
            @click="clickAddInspectionColumn()"
            >添加检验值列</el-button
          >
          <el-button
@@ -149,53 +168,81 @@
    </div>
    <div class="raw-project-table">
      <el-table :data="projectTable" style="width: 100%" height="320">
        <el-table-column type="index" label="序号" width="100">
        <el-table-column type="index" label="序号" width="60">
        </el-table-column>
        <el-table-column prop="name" label="项目" width="212">
          <template scope="scope">
        <el-table-column prop="rpName" label="项目" width="212">
          <template slot-scope="scope">
            <el-input
              v-if="detailId == null"
              v-model="scope.row.name"
              placeholder="请输入项目名称"
            ></el-input>
            <el-input v-else v-model="scope.row.rpName" disabled></el-input>
          </template>
        </el-table-column>
        <el-table-column prop="unit" label="单位" width="148">
          <template scope="scope">
          <template slot-scope="scope">
            <el-input
              v-if="detailId == null"
              v-model="scope.row.unit"
              placeholder="请输入单位"
            ></el-input>
            <el-input v-else v-model="scope.row.rpUnit" disabled></el-input>
          </template>
        </el-table-column>
        <el-table-column prop="required" label="标准" width="254">
          <template scope="scope">
        <el-table-column prop="required" label="标准" min-width="150">
          <template slot-scope="scope">
            <el-input
              v-model="scope.row.required"
              placeholder="请输入标准值"
            ></el-input>
          </template>
        </el-table-column>
        <el-table-column prop="internal" label="内控值" width="254">
          <template scope="scope">
        <el-table-column prop="internal" label="内控值" min-width="150">
          <template slot-scope="scope">
            <el-input
              v-model="scope.row.internal"
              placeholder="请输入内控值"
            ></el-input>
          </template>
        </el-table-column>
        <el-table-column prop="testValue" label="检查值" width="254">
        <el-table-column
          prop="testValue"
          label="检测值"
          min-width="150"
          v-for="(item, index) in empiricalValueAdd"
          :key="index"
        >
          <template slot-scope="scope">
            <el-input
              v-model="scope.row.testValue"
              @blur="changeState(scope.row)"
              placeholder="请输入检测值"
            ></el-input>
            <el-tooltip
              :disabled="scope.row.deviceId != null"
              class="item"
              effect="dark"
              content="请先选择设备!"
              placement="top-start"
            >
              <el-input
                :disabled="scope.row.deviceId == null"
                v-model="scope.row.testValueList[index]"
                @blur="changeState(scope.row, index)"
                placeholder="请输入检测值"
              ></el-input>
            </el-tooltip>
          </template>
        </el-table-column>
        <el-table-column prop="deviceName" label="试验设备">
          <el-button type="text">选择</el-button>
        <el-table-column prop="deviceName" label="试验设备" min-width="100">
          <template slot-scope="scope">
            <el-button type="text" @click="clickTableSelect(scope)">{{
              scope.row.deviceId == null ? "请选择" : scope.row.deviceName
            }}</el-button>
          </template>
        </el-table-column>
        <el-table-column prop="testState" label="结论">
        <el-table-column
          v-if="detailId !== null"
          prop="testState"
          label="结论"
          min-width="100"
        >
          <template slot-scope="scope">
            <span
              v-show="scope.row.testState != null"
@@ -207,8 +254,8 @@
            <span v-show="scope.row.testState == null">暂未结论</span>
          </template>
        </el-table-column>
        <el-table-column v-if="detailId == null" label="操作" fixed="right">
          <template scope="scope">
        <el-table-column v-if="detailId == null" label="操作" width="100">
          <template slot-scope="scope">
            <el-button type="text" @click="clickDeleteline(scope)"
              >删除</el-button
            >
@@ -256,6 +303,47 @@
        </el-table-column>
      </el-table>
    </div>
    <el-dialog
      title="请选择设备"
      :visible.sync="centerDialogVisible"
      width="20%"
    >
      <div class="div_device_dialog">
        <el-input
          placeholder="输入关键字进行过滤"
          v-model="filterText"
          style="margin-bottom: 6px;"
        >
        </el-input>
        <el-tree
          class="filter-tree"
          :data="materialOptions"
          :props="defaultProps"
          default-expand-all
          highlight-current
          @node-click="nodeClick"
          :filter-node-method="filterNode"
          ref="tree"
        >
          <div class="custom-tree-node" slot-scope="{ data }">
            <span
              ><i
                :class="
                  `node_i ${
                    data.children ? 'el-icon-folder-opened' : 'el-icon-tickets'
                  }`
                "
              ></i>
              {{ data.name }}</span
            >
          </div>
        </el-tree>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="centerDialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="clickNodeSure()">确 定</el-button>
      </span>
    </el-dialog>
  </div>
</template>
@@ -299,33 +387,69 @@
  },
  data() {
    return {
      // 添加列
      empiricalValueAdd: 1,
      // 编辑时存储最长的列数字,做删除判断
      empiricalValueAddMaxNumber: 0,
      // 设备选择树显示
      centerDialogVisible: false,
      // 详情页就是详情信息
      detailInfo: {},
      // 表格
      projectTable: [],
      // 新建检验单参数对象
      rawInsParams: {},
      // 项目名称options
      materialOptions: [],
      specificationOptions: []
      specificationOptions: [],
      filterText: "",
      materialOptions: [], // 树数据
      defaultProps: {
        // 设备树数据设置
        children: "children",
        label: "name"
      },
      nodeData: "", // node点击保存当前点击数据
      clickSelectSaveIndex: "" // 点击选择存储列表索引
    };
  },
  watch: {
    filterText(val) {
      this.$refs.tree.filter(val);
    }
  },
  methods: {
    // 设备树过滤搜索
    filterNode(value, data) {
      if (!value) return true;
      return data.name.indexOf(value) !== -1;
    },
    // 获取报检单详情信息
    async getDetailInfo() {
      const { data } = await this.$axios.get(
        this.$api.url.selectRawInspectsListById + `${this.detailId}`,
        { params: { id: this.detailId } }
      );
      this.detailInfo = data;
      this.projectTable = data.rawInsProducts;
      await this.$axios
        .get(this.$api.url.selectRawInspectsListById + `${this.detailId}`, {
          params: { id: this.detailId }
        })
        .then(res => {
          this.detailInfo = res.data;
          this.projectTable = res.data.children;
          this.projectTable.forEach(i => {
            i.testValueList = i.testValue.split(",");
            // 取最长的列表数
            if (i.testValueList.length > this.empiricalValueAdd) {
              this.empiricalValueAdd = i.testValueList.length;
              this.empiricalValueAddMaxNumber = i.testValueList.length - 1;
            }
          });
        });
    },
    // 新增检验单
    async addNewRawInspect() {
      this.detailInfo.specifications = this.detailInfo.specificationsArr.join(
        "-"
      );
      // const time = this.detailInfo.formTime
      // this.detailInfo.formTime = `${time.getFullYear()}-${time.getMonth() + 1 < 10 ? '0' + (time.getMonth() + 1) : time.getMonth() + 1}-${time.getDate() < 10 ? '0' + time.getDate() : time.getDate()}`
      this.projectTable.forEach(i => {
        // 将列表转换为字符串
        i.testValue = i.testValueList.join(",");
      });
      this.detailInfo.rawInsProducts = this.projectTable;
      const res = await this.$axios.post(
        this.$api.url.addRawInspects,
        { ...this.detailInfo },
@@ -333,18 +457,20 @@
      );
      this.detailId = res.data;
      this.getDetailInfo();
      this.$message.success("提交成功");
      this.$message.success(res.message);
    },
    // 修改项目的检测值改变结论
    async changeState(row) {
      const res = await this.$axios.post(
        this.$api.url.updaterawInsProduct,
        { ...row },
        { headers: { "Content-Type": "application/json" } }
      );
      this.$message.success("提交成功");
      this.getDetailInfo(); //重新刷新信息数据
    async changeState(row, index) {
      if (this.detailId !== null) {
        const res = await this.$axios.post(this.$api.url.updaterawInsProduct, {
          DevId: row.deviceId,
          rpId: this.detailId,
          testValue: row.testValueList[index]
        });
        this.$message.success("提交成功");
        this.getDetailInfo(); //重新刷新信息数据
      }
    },
    async submitSave() {
      const res = await this.$axios.post(
@@ -353,30 +479,22 @@
      this.$message.success("提交成功");
      this.getDetailInfo();
    },
    async getOptions() {
      const { data } = await this.$axios.get(this.$api.url.selectDevice);
      this.materialOptions = data;
    },
    checkRawName(data) {
      this.materialOptions.forEach(item => {
        if (item.name === data) {
          this.detailInfo.code = item.code;
          this.$axios
            .get(this.$api.url.selectSpBySt, { params: { id: item.id } })
            .then(res => {
              this.specificationOptions = res.data;
            });
        }
    // 获取设备树内容
    getOptions() {
      this.$axios.get(this.$api.url.rawSelectDevice).then(res => {
        this.materialOptions = res.data;
      });
    },
    // 添加行
    clickAddLine() {
      let obj = {
        deviceId: 0,
        deviceId: null,
        deviceName: "",
        internal: "",
        name: "",
        required: "",
        testValue: "",
        textValue: "",
        testValueList: [],
        unit: ""
      };
      this.projectTable.push(obj);
@@ -384,12 +502,52 @@
    // 删除行
    clickDeleteline(scope) {
      this.projectTable.splice(scope.$index, 1);
    },
    // 点击设备树保存点击记录
    nodeClick(data) {
      if (data.id != undefined) this.nodeData = data;
    },
    // 点击表格选择触发
    clickTableSelect(scope) {
      this.centerDialogVisible = true;
      this.clickSelectSaveIndex = scope.$index;
    },
    // 点击树里面的确定
    clickNodeSure() {
      this.projectTable[this.clickSelectSaveIndex].deviceId = this.nodeData.id;
      this.projectTable[
        this.clickSelectSaveIndex
      ].deviceName = this.nodeData.name;
      this.centerDialogVisible = false;
    },
    // 删除检验值列
    clickDeleteInspectionColumn() {
      if (this.empiricalValueAdd - 1 === 0) {
      } else {
        if (this.empiricalValueAddMaxNumber != this.empiricalValueAdd - 1) {
          this.empiricalValueAdd = this.empiricalValueAdd - 1;
          this.projectTable.forEach(i => {
            i.testValueList.splice(this.empiricalValueAdd, 1);
          });
        }
      }
    },
    // 添加检验值列
    clickAddInspectionColumn() {
      this.empiricalValueAdd = this.empiricalValueAdd + 1;
    }
  }
};
</script>
<style scoped>
.node_i {
  color: orange;
}
.div_device_dialog {
  min-height: 400px;
  overflow: auto;
}
.rawInsBox {
  height: 100%;
  width: 100%;
@@ -397,6 +555,9 @@
  display: flex;
  flex-direction: column;
}
.el-table__fixed-body-wrapper {
  top: 48px;
}
.rawInsBox .title .el-button {
  height: 32px;
  border: 1px solid rgba(190, 190, 190, 0.44);