loulijun2021
2023-10-12 682651bd0d6e2e1477e5119c4e1154503262fb17
1.检验项设置、质检方案、工序检验、检验记录 100%
已修改5个文件
3375 ■■■■■ 文件已修改
src/api/QualityManagement.js 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/qualityManager/processCheck.vue 802 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/qualityManager/processCheckItem.vue 406 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/qualityManager/processCheckRecord.vue 732 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/qualityManager/qualityPlaning.vue 1292 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/QualityManagement.js
@@ -26,3 +26,146 @@
    params: data
  })
}
// 工序检验项目列表查询
export function StepCheckItemSearch(data) {
  return request({
    url: 'QualityManagement/StepCheckItemSearch',
    method: 'get',
    params: data
  })
}
// 工序检验项目新增、编辑提交
export function AddUpdateStepCheckItem(data) {
  return request({
    url: 'QualityManagement/AddUpdateStepCheckItem',
    method: 'post',
    data
  })
}
// 工序检验项目删除
export function DeleteStepCheckItem(data) {
  return request({
    url: 'QualityManagement/DeleteStepCheckItem',
    method: 'post',
    params: data
  })
}
// 工序检验标准删除
export function DeleteStepCheckStaned(data) {
  return request({
    url: 'QualityManagement/DeleteStepCheckStaned',
    method: 'post',
    params: data
  })
}
// 生产开报工,工序检验扫码获取任务信息
export function MesOrderStepCheckSearch(data) {
  return request({
    url: 'QualityManagement/MesOrderStepCheckSearch',
    method: 'get',
    params: data
  })
}
// 生产开报工,工序检验获取检验标准下拉框数据
export function MesOrderStepCheckSelect() {
  return request({
    url: 'QualityManagement/MesOrderStepCheckSelect',
    method: 'get'
  })
}
// 生产开报工,工序检验根据检验标准获取检验项目列表
export function MesOrderStepCheckItemList(data) {
  return request({
    url: 'QualityManagement/MesOrderStepCheckItemList',
    method: 'get',
    params: data
  })
}
// 生产开报工,工序检验提交保存
export function SaveMesOrderStepCheckItem(data) {
  return request({
    url: 'QualityManagement/SaveMesOrderStepCheckItem',
    method: 'post',
    data
  })
}
// 工序检验记录列表查询
export function StepCheckTableSearch(data) {
  return request({
    url: 'QualityManagement/StepCheckTableSearch',
    method: 'get',
    params: data
  })
}
// 工序检验记录列表查询
export function StepCheckTableSubSearch(data) {
  return request({
    url: 'QualityManagement/StepCheckTableSubSearch',
    method: 'get',
    params: data
  })
}
// 工序检验记录导出
export function StepCheckTableOutExcel(data) {
  return request({
    url: 'QualityManagement/StepCheckTableOutExcel',
    method: 'get',
    params: data
  })
}
// 质检方案列表查询
export function QualityInspectionSearch(data) {
  return request({
    url: 'QualityManagement/QualityInspectionSearch',
    method: 'get',
    params: data
  })
}
// 质检方案查看编辑
export function QualityInspectionSeeEdit(data) {
  return request({
    url: 'QualityManagement/QualityInspectionSeeEdit',
    method: 'get',
    params: data
  })
}
// 质检方案新增/编辑提交
export function QualityInspectionAddEditSave(data) {
  return request({
    url: 'QualityManagement/QualityInspectionAddEditSave',
    method: 'post',
    data
  })
}
// 质检方案删除
export function QualityInspectionDelete(data) {
  return request({
    url: 'QualityManagement/QualityInspectionDelete',
    method: 'post',
    params: data
  })
}
// 工序检验标准新增、编辑获取检验项目下拉列表
export function QualityStepCheckItemSelect() {
  return request({
    url: 'QualityManagement/QualityStepCheckItemSelect',
    method: 'get'
  })
}
src/views/qualityManager/processCheck.vue
@@ -0,0 +1,802 @@
<template>
  <div>
    <div class="body" :style="{height:mainHeight+'px'}" style="background-color: #eaecef">
      <div
        style="background-color: #f8f8fa;margin: 10px 0;
         overflow-y:auto;overflow-x: hidden;
        display: flex;flex-direction: column"
        :style="{height:mainHeight+'px'}"
      >
        <div class="content1">
          <div>
            <i class="el-icon-s-operation" style="font-size: 14px" :style="{color:$store.state.settings.theme}" />
          </div>
          <div class="title">
            扫描信息
          </div>
        </div>
        <div class="content2">
          <el-form :inline="true" label-width="80px">
            <el-form-item label="检验类型">
              <el-select
                v-model="form.checktype"
                style="width: 160px;"
                placeholder="请选择"
                filterable
              >
                <el-option
                  v-for="item in checktypeArr"
                  :key="item.code"
                  :label="item.name"
                  :value="item.code"
                />
              </el-select>
            </el-form-item>
            <el-form-item label="扫码条码">
              <el-input
                v-model="form.orderstepqrcode"
                name="GXproduceCode"
                style="width: 250px"
                placeholder="请扫码工单工序码"
                @keyup.enter.native="enterNative"
              />
            </el-form-item>
          </el-form>
        </div>
        <div class="content1">
          <div>
            <i class="el-icon-s-operation" style="font-size: 14px" :style="{color:$store.state.settings.theme}" />
          </div>
          <div class="title">
            工单信息
          </div>
        </div>
        <div class="content2" style="width: 60%;margin-left: 30px;">
          <div class="orderMsg">单据编号:{{ form.wocode }}</div>
          <div class="orderMsg">物料编码:{{ form.partcode }}</div>
          <div class="orderMsg">物料名称:{{ form.partname }}</div>
        </div>
        <div class="content2" style="width: 60%;margin-left: 30px;">
          <div class="orderMsg">物料规格:{{ form.partspec }}</div>
          <div class="orderMsg">工序编码:{{ form.stepcode }}</div>
          <div class="orderMsg">工序名称:{{ form.stepname }}</div>
        </div>
        <div class="content1">
          <div>
            <i class="el-icon-s-operation" style="font-size: 14px" :style="{color:$store.state.settings.theme}" />
          </div>
          <div class="title">
            质检方案
          </div>
        </div>
        <div class="content2" style="width: 60%;margin-left: 30px;">
          <div class="orderMsg">方案名称:{{ form.checkstandname }}</div>
          <div class="orderMsg">抽样方式:{{
            form.sampmethod === 'FIXED' ? '固时抽检' : form.sampmethod === 'SCARE' ? '比例抽检' : ''
          }}
          </div>
        </div>
        <div class="content2" style="width: 60%;margin-left: 30px;">
          <div class="orderMsg">报工数量:{{ form.good_qty }}</div>
          <div class="orderMsg">样本数量:
            <el-input-number
              v-if="form.good_qty"
              v-model="form.sampscare"
              :max="form.good_qty"
              :min="1"
              size="medium"
              @change="numberChange"
            />
          </div>
        </div>
        <div
          v-if="checkItemArr.length>0"
          class="content1"
        >
          <div>
            <i class="el-icon-s-operation" style="font-size: 14px" :style="{color:$store.state.settings.theme}" />
          </div>
          <div class="title">
            检验项目
          </div>
        </div>
        <div
          v-if="form.sampscare!==1&&checkItemArr.length>0"
          class="content2"
          style="width: 60%;"
        >
          <el-link :underline="false" :disabled="!(stepActive>0)" style="width: 60px;margin-top: 5px" @click="pre">上一件
          </el-link>
          <el-steps :active="stepActive" style="width: 70%;margin:0 10px;" finish-status="success">
            <el-step v-for="item in form.sampscare" :key="item" title="" />
          </el-steps>
          <el-link
            :underline="false"
            :disabled="!(stepActive < form.sampscare-1)"
            style="width: 60px;margin-top: 5px"
            @click="next"
          >下一件
          </el-link>
        </div>
        <div
          class="content2"
          style="flex-direction: column;justify-content:flex-start;width: 480px;margin-top: 10px;"
        >
          <div
            v-for="(item,index) in checkItemArr"
            v-if="stepActive+1===item.checkNumber"
            :key="item.code+(stepActive+1).toString()"
            :style="{borderBottom:(index+1)%checkItemArr.map(i=>i.checkNumber===1).filter(i=>i).length!==0?`1px solid rgba(48,49,51,0.2)`:''}"
            class="checkItem"
          >
            <div style="display: flex;justify-content: space-between;align-items: center">
              <div style="display: flex;width: 300px;">
                <div class="serialNumber">{{ item.stepcheckitem_seq }}</div>
                <div style="display: flex;align-items: center">{{ item.name }}</div>
              </div>
              <div v-show="item.numberjudge==='N'" style="width: 150px;display: flex;padding-left: 20px">
                <el-button
                  type="primary"
                  size="mini"
                  :plain="!item.check_result"
                  @click="checkResultClick('OK',item)"
                >合格
                </el-button>
                <el-button
                  type="warning"
                  size="mini"
                  :plain="item.check_result"
                  @click="checkResultClick('NG',item)"
                >不合格
                </el-button>
              </div>
              <div v-show="item.numberjudge!=='N'" style="width: 150px;" />
            </div>
            <div style="display: flex;margin-bottom: 5px">
              <div style="display: flex;flex-direction: column">
                <div v-if="item.standvalue" class="itemTitle">标准值</div>
                <div v-if="item.uppervalue" class="itemTitle">上限值</div>
                <div v-if="item.lowervalue" class="itemTitle">下限值</div>
                <div v-if="item.stepcheckitem_desc" class="itemTitle">描述</div>
                <div v-if="item.numberjudge!=='N'" class="itemTitle">实测值
                  <el-input
                    v-model="item.real_value"
                    size="mini"
                    oninput="value=value.replace(/[^0-9]/g,'')"
                    style="width: 100px;margin-left: 5px"
                    @input="val=>inputChange(val,item)"
                  />
                </div>
              </div>
              <div style="display: flex;flex-direction: column">
                <div v-if="item.standvalue" class="itemContent">{{ item.standvalue }}</div>
                <div v-if="item.uppervalue" class="itemContent">{{ item.uppervalue }}</div>
                <div v-if="item.lowervalue" class="itemContent">{{ item.lowervalue }}</div>
                <div v-if="item.stepcheckitem_desc" class="itemContent">{{ item.stepcheckitem_desc }}</div>
                <div v-show="item.numberjudge!=='N'" class="itemContent" style="width: 150px;display: flex">
                  <el-button
                    type="primary"
                    size="mini"
                    :disabled="item.required==='Y'&&!item.real_value"
                    :plain="!item.check_result"
                    @click="checkResultClick('OK',item)"
                  >合格
                  </el-button>
                  <el-button
                    type="warning"
                    size="mini"
                    :disabled="item.required==='Y'&&!item.real_value"
                    :plain="item.check_result"
                    @click="checkResultClick('NG',item)"
                  >
                    不合格
                  </el-button>
                </div>
              </div>
            </div>
          </div>
        </div>
        <div
          v-if="checkItemArr.filter(i=>i.check_result!=='').length===checkItemArr.length&&checkItemArr.length>0"
          class="content1"
        >
          <div>
            <i class="el-icon-s-operation" style="font-size: 14px" :style="{color:$store.state.settings.theme}" />
          </div>
          <div class="title">
            检验结果
          </div>
        </div>
        <div
          v-if="checkItemArr.filter(i=>i.check_result!=='').length===checkItemArr.length&&checkItemArr.length>0"
          class="content2"
          style="width: 60%;margin-left: 30px;"
        >
          <div class="orderMsg2">样本数量:{{ form.sampscare }}</div>
          <div class="orderMsg2">合格数量:{{ form.goodqty }}</div>
          <div class="orderMsg2">不合格数量:{{ form.ngqty }}</div>
          <div style="width: 290px;display: flex;align-items: center" class="resultButton">
            <div style="width: 70px;">判定结果:</div>
            <el-button type="primary" size="medium" :plain="!check_result" @click="check_result=true">合格</el-button>
            <el-button type="warning" size="medium" :plain="check_result" @click="check_result=false">不合格</el-button>
          </div>
        </div>
        <div
          v-if="checkItemArr.filter(i=>i.check_result!=='').length===checkItemArr.length&&checkItemArr.length>0"
          class="content2   submitButton"
          style="margin-top: 10px;margin-bottom: 10px;"
        >
          <el-button
            v-waves
            type="primary"
            @click="submitButton"
          >提交
          </el-button>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
import waves from '@/directive/waves'
import $ from 'jquery'
import { MesOrderStepCheckItemList, MesOrderStepCheckSearch, SaveMesOrderStepCheckItem } from '@/api/QualityManagement'
import { getCookie } from '@/utils/auth'
export default {
  name: 'Zzjg',
  directives: { waves },
  data() {
    return {
      mouseHoverType: 'mouseout',
      isExpandForm: false,
      mainHeight: 0,
      tableHeight: 0,
      form: {
        orderstepqrcode: '', // 扫描工序二维码信息
        checktype: 'FirstCheck',
        wocode: '',
        partcode: '',
        partname: '',
        partspec: '',
        stepcode: '',
        stepname: '',
        checkstandcode: '',
        checkstandname: '',
        check_type: '',
        sampmethod: '', // FIXED(固时抽检)  SCARE(比例抽检)
        sampscare: '',
        qualitystatus: '',
        good_qty: '', // 指的报工数量
        sampleqty: '',
        goodqty: '', // 合格数量
        ngqty: '', // 不良数量
        // checkitemcont: [],
        username: getCookie('admin')
      },
      checktypeArr: [
        { code: 'FirstCheck', name: '首检' },
        { code: 'PatroCheck', name: '巡检' },
        { code: 'EndCheck', name: '完工检' }
      ],
      stepActive: 0, // 当前处于第几件
      checkItemArr: [],
      check_result: ''
    }
  },
  watch: {
    'checkItemArr': {
      deep: true, // 深度监听时  监听到属性              当不为深度监听时,可监听长度
      handler: function(val) {
        // do something with the new and old value of myArray
        this.form.goodqty = 0
        for (var i = 0; i < this.form.sampscare; i++) {
          const flag = this.checkItemArr.filter(j => j.checkNumber === i + 1).every(j => j.check_result)
          if (flag) {
            this.form.goodqty++
          }
        }
        this.form.ngqty = this.form.sampscare - this.form.goodqty
      }
    }
  },
  created() {
  },
  mounted() {
    window.addEventListener('resize', this.getHeight)
    this.getHeight()
    this.getFocus()
  },
  methods: {
    // 获取聚焦
    getFocus() {
      this.$nextTick(() => {
        $('input[name=\'GXproduceCode\']')[0].focus()
      })
    },
    async enterNative() {
      const data = {
        orderstepqrcode: this.form.orderstepqrcode,
        checktype: this.form.checktype,
        stu_torgcode: getCookie('stu_torgcode')
      }
      const { data: res } = await MesOrderStepCheckSearch(data)
      this.form.wocode = res.labcont[0].wo_code
      this.form.partcode = res.labcont[0].partcode
      this.form.partname = res.labcont[0].partname
      this.form.partspec = res.labcont[0].partspec ? res.labcont[0].partspec : '/'
      this.form.stepcode = res.labcont[0].stepcode
      this.form.stepname = res.labcont[0].stepname
      this.form.good_qty = res.labcont[0].good_qty
      this.form.checkstandcode = res.chekstand[0].checkstandcode
      this.form.checkstandname = res.chekstand[0].checkstandname
      this.form.sampmethod = res.chekstand[0].sampmethod
      this.form.sampscare = res.chekstand[0].sampmethod === 'FIXED' ? res.chekstand[0].sampscare
        : res.labcont[0].good_qty * res.chekstand[0].sampscare / 100
      this.form.sampscare = this.form.sampscare <= this.form.good_qty ? this.form.sampscare : this.form.good_qty
      await this.getMesOrderStepCheckItemList()
    },
    async getMesOrderStepCheckItemList() {
      const { data: res } = await MesOrderStepCheckItemList({ checkstandcode: this.form.checkstandcode })
      // this.checkItemArr = res
      this.checkItemArr = []
      for (let i = 0; i < this.form.sampscare; i++) {
        res.forEach(j => {
          this.checkItemArr.push({
            checkNumber: i + 1,
            stepcheckitem_seq: j.stepcheckitem_seq,
            name: j.name,
            code: j.code,
            standvalue: j.standvalue,
            lowervalue: j.lowervalue,
            uppervalue: j.uppervalue,
            unit: j.unit,
            stepcheckitem_desc: j.stepcheckitem_desc,
            required: j.required, // 是否必填
            numberjudge: j.numberjudge, // 数值判断
            real_value: '',
            check_result: j.numberjudge === 'Y' ? '' : true
          })
        })
      }
      if (this.checkItemArr.every(i => i.check_result)) {
        this.check_result = true
      } else {
        this.check_result = ''
      }
    },
    numberChange(currentValue, oldValue) {
      const t = this.checkItemArr.filter(i => i.checkNumber === 1)
      // 件数变少时执行
      if (currentValue < this.checkItemArr.length / t.length) {
        this.checkItemArr.reverse()
        this.checkItemArr.splice(0, t.length * (oldValue - currentValue))
        this.checkItemArr.reverse()
        this.stepActive = currentValue - 1
      }
      // 件数变多时执行
      if (currentValue > this.checkItemArr.length / t.length) {
        for (let i = currentValue; i > oldValue; i--) {
          t.forEach(j => {
            this.checkItemArr.push({
              checkNumber: i,
              name: j.name,
              code: j.code,
              standvalue: j.standvalue,
              lowervalue: j.lowervalue,
              uppervalue: j.uppervalue,
              unit: j.unit,
              stepcheckitem_desc: j.stepcheckitem_desc,
              required: j.required, // 是否必填
              numberjudge: j.numberjudge, // 数值判断
              real_value: '',
              check_result: j.numberjudge === 'Y' ? '' : true
            })
          })
        }
        this.checkItemArr.sort((a, b) => a.checkNumber - b.checkNumber)
      }
    },
    pre() {
      if (this.stepActive > 0) {
        this.stepActive--
      }
    },
    next() {
      if (this.stepActive < this.form.sampscare) {
        this.stepActive++
      }
    },
    inputChange(val, item) {
      if (val !== '') {
        if (item.numberjudge === 'Y') { // 如果需要进行数值判断
          if (item.uppervalue === '' && item.lowervalue === '') { // 上限值为空,下限值为空
            item.check_result = parseFloat(val) === parseFloat(item.standvalue)
          }
          if (item.uppervalue !== '' && item.lowervalue !== '') { // 上限值不为空,下限值不为空
            item.check_result = parseFloat(val) >= parseFloat(item.lowervalue) && parseFloat(val) <=
              parseFloat(item.uppervalue)
          }
          if (item.uppervalue !== '' && item.lowervalue === '') { // 上限值不为空,下限值为空
            item.check_result = parseFloat(val) <= parseFloat(item.uppervalue)
          }
          if (item.uppervalue === '' && item.lowervalue !== '') { // 上限值为空,下限值不为空
            item.check_result = parseFloat(val) >= parseFloat(item.lowervalue)
          }
        }
      }
      if (val === '') {
        item.check_result = ''
      }
      this.check_result = !!this.checkItemArr.every(i => i.check_result)
    },
    checkResultClick(val, item) {
      item.check_result = val === 'OK'
      if (this.checkItemArr.filter(i => i.check_result !== '').length === this.checkItemArr.length) {
        this.check_result = !!this.checkItemArr.every(i => i.check_result)
      }
    },
    submitButton() {
      this.$confirm('是否确认提交?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        const checkitemcont = []
        this.checkItemArr.forEach((i, index) => {
          checkitemcont.push({
            checknum: i.checkNumber + '/' + this.checkItemArr.length / this
              .checkItemArr.filter(j => j.checkNumber === 1).length,
            checkiem_seq: i.stepcheckitem_seq,
            checkitem_code: i.code,
            checkitem_name: i.name,
            check_value: i.real_value ? i.real_value : '',
            check_result: i.check_result ? 'OK' : 'NG',
            checkitem_descr: ''
          })
        })
        const data = {
          stu_torgcode: getCookie('stu_torgcode'),
          wocode: this.form.wocode,
          partcode: this.form.partcode,
          stepcode: this.form.stepcode,
          checkstandcode: this.form.checkstandcode,
          check_type: this.form.checktype,
          sampmethod: this.form.sampmethod,
          qualitystatus: this.check_result ? 'OK' : 'NG',
          good_qty: this.form.good_qty,
          sampleqty: this.form.sampscare,
          goodqty: this.form.goodqty,
          ngqty: this.form.ngqty,
          admin: this.form.username,
          checkitemcont
        }
        SaveMesOrderStepCheckItem(data).then(res => {
          if (res.code === '200') {
            this.form.orderstepqrcode = ''
            this.form.wocode = ''
            this.form.partcode = ''
            this.form.partname = ''
            this.form.partspec = ''
            this.form.stepcode = ''
            this.form.stepname = ''
            this.form.checkstandcode = ''
            this.form.checkstandname = ''
            this.form.check_type = ''
            this.form.sampmethod = ''// FIXED(固时抽检)  SCARE(比例抽检)
            this.form.sampscare = ''
            this.form.qualitystatus = ''
            this.form.good_qty = '' // 指的报工数量
            this.form.sampleqty = ''
            this.form.goodqty = '' // 合格数量
            this.form.ngqty = '' // 不良数量
            this.stepActive = 0
            this.checkItemArr = []
            this.check_result = ''
            this.$message.success('检验成功!')
            this.getFocus()
          }
        })
      })
    },
    // 获取页面高度
    getHeight() {
      this.$nextTick(() => {
        this.mainHeight = window.innerHeight - 85
        this.tableHeight = this.mainHeight - 255
      })
    },
    tableRowClassName({ row, rowIndex }) {
      return 'custom-row'
    }
  }
}
</script>
<!--公共页面样式-->
<style lang="scss" scoped>
$main_color: #42b983;
::v-deep .el-button--text {
  font-size: 14px;
  cursor: pointer;
}
.el-icon-share, .el-icon-delete, .el-icon-edit-outline {
  color: $main_color;
  cursor: pointer;
}
.el-icon-edit-outline {
  margin-right: 15px;
}
::v-deep .el-button--primary, .el-button--warning, .el-button--default, .el-button--info {
  //height: 34px;
  //display: flex;
  //align-items: center;
  //padding: 0 15px;
  width: 58px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.submitButton {
  ::v-deep .el-button--primary {
    width: 160px;
    letter-spacing: 10px;
    padding-left: 25px;
    font-size: 18px;
    //display: flex;
    //justify-content: center;
    //align-items: center;
  }
}
.resultButton {
  ::v-deep .el-button--primary {
    width: 100px;
    letter-spacing: 4px;
    padding-left: 22px;
  }
  ::v-deep .el-button--warning {
    width: 100px;
    letter-spacing: 4px;
    padding-left: 22px;
  }
}
::v-deep .el-button--default {
  background-color: #f8f8fa;
  border: none;
}
::v-deep .el-input__inner {
  height: 34px;
  line-height: 34px;
  //color: #a7a7a7;
}
::v-deep .el-dialog__body {
  padding: 20px 100px !important;
}
::v-deep .dialogVisibleRoles .el-dialog__body {
  padding: 20px 20px !important;
}
::v-deep .importPickerClass .el-dialog__body {
  padding: 20px 20px !important;
}
::v-deep .el-dialog__footer {
  display: flex;
  justify-content: flex-end;
}
::v-deep .el-table .caret-wrapper {
  transform: scale(0.8);
}
::v-deep .cell {
  display: flex;
  align-items: center;
  justify-content: space-between;
}
::v-deep .el-table::before {
  height: 0;
}
::v-deep .el-table__body-wrapper {
  background-color: #f8f8fa;
}
::v-deep .el-table__body .el-table__row.hover-row td {
  background-color: #eaecef;
}
::v-deep .el-form--inline .el-form-item__label {
  //color: #a7a7a7;
  //font-size: 16px;
}
.body ::v-deep .el-divider {
  border: 1px solid #eee;
  width: 99%;
  margin: 10px auto;
}
.body ::v-deep .el-form-item {
  margin-bottom: 0;
}
.userDialogVisible ::v-deep .el-form-item {
  margin-bottom: 0;
}
::v-deep .el-select__caret {
  display: flex;
  align-items: center;
  justify-content: center;
}
.tableFixed {
  ::v-deep .el-table__fixed-right {
    height: 100% !important;
  }
  ::v-deep .el-table__fixed {
    height: 100% !important;
  }
}
</style>
<style lang="scss" scoped>
.content1 {
  display: flex;
  align-items: center;
  margin: 10px 0 0 10px;
  .title {
    font-size: 14px;
    font-weight: bold;
    margin-left: 5px;
  }
}
.content2 {
  margin: 10px 0 0 20px;
  display: flex;
  font-size: 14px;
  width: 100%;
  align-items: center;
}
.orderMsg {
  width: 33.33%;
  display: flex;
  align-items: center;
}
::v-deep .el-input-number--medium {
  line-height: 32px;
  width: 120px;
}
.checkItem {
  display: flex;
  justify-content: space-between;
  min-height: 36px;
  align-items: center;
  flex-direction: column;
  margin-top: 5px;
}
.serialNumber {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background-color: #42B983;
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-right: 10px;
}
.itemTitle {
  width: 300px;
  padding-left: 40px;
  height: 26px;
  color: #909399;
  display: flex;
  align-items: center;
  ::v-deep .el-input--mini {
    line-height: 24px;
    height: 24px;
  }
  ::v-deep .el-input__inner {
    line-height: 24px;
    height: 24px;
  }
}
.itemContent {
  width: 150px;
  height: 26px;
  padding-left: 20px;
  display: flex;
  align-items: center;
}
.orderMsg2 {
  width: 200px;
}
</style>
<style>
.el-table .custom-row {
  background: #f8f8fa;
}
</style>
src/views/qualityManager/processCheckItem.vue
@@ -0,0 +1,406 @@
<template>
  <div>
    <div class="body" :style="{height:mainHeight+'px'}">
      <div class="bodyTopButtonGroup">
        <el-button v-waves type="primary" icon="el-icon-circle-plus-outline" @click="add('add')">新增</el-button>
        <!--        <el-button v-waves type="primary" icon="el-icon-upload2" @click="upload">导入</el-button>-->
      </div>
      <div class="bodyTopFormGroup">
        <el-form
          ref="form"
          :model="form"
          label-width="100px"
          inline
          style="display: flex"
        >
          <div class="elForm">
            <el-form-item label="项目编码" style=" display: flex;">
              <el-input v-model="form.itemcode" placeholder="请输入" style="width: 200px" />
            </el-form-item>
            <el-form-item label="项目名称" style=" display: flex;">
              <el-input v-model="form.itemname" placeholder="请输入" style="width: 200px" />
            </el-form-item>
            <el-form-item label="项目描述" style=" display: flex;">
              <el-input v-model="form.itemdescr" style="width: 200px" placeholder="请输入" />
            </el-form-item>
          </div>
          <div class="bodySearchReset" :style="{marginLeft:$store.state.app.sidebar.opened? $store.state.settings.menuIsHorizontal?'15%':'3%':'10%'}">
            <el-button v-waves type="primary" icon="el-icon-search" @click="search">查询</el-button>
            <el-button v-waves type="info" icon="el-icon-refresh" @click="reset">重置</el-button>
          </div>
        </el-form>
        <div
          class="bodyTopFormExpand"
        />
      </div>
      <div class="elTableDiv">
        <!--        <TableColumnSettings-->
        <!--          :list1="tableColumnSettingsArray"-->
        <!--          @tableColumnUpdate="tableColumnUpdate"-->
        <!--        />-->
        <el-table
          ref="tableDataRef"
          :key="tableTimeStampKey"
          class="tableFixed"
          :data="tableData"
          :height="tableHeight+'px'"
          border
          :row-class-name="tableRowClassName"
          :style="{width: 100+'%',height:tableHeight+'px',}"
          highlight-current-row
          :header-cell-style="this.$headerCellStyle"
          :cell-style="this.$cellStyle"
          @sort-change="sortChange"
        >
          <el-table-column
            v-for="item in tableColumnSettingsArray"
            v-if="item.show"
            :key="item.id"
            :sortable="item.sortable"
            :prop="item.prop"
            :min-width="item.minWidth"
            :label="item.label"
            :width="item.width"
            show-tooltip-when-overflow
            :fixed="item.fixed?(item.fixed==='left'?'left':'right'):false"
          >
            <template slot-scope="{row}">
              <div v-if="!row[item.prop]">/</div>
              <div v-else>{{ row[item.prop] }}</div>
            </template>
          </el-table-column>
          <el-table-column
            label="操作"
            fixed="right"
            width="120"
          >
            <template slot-scope="{row}">
              <div class="operationClass">
                <el-tooltip class="item" effect="dark" content="编辑" placement="top">
                  <i :style="{color:$store.state.settings.theme}" class="el-icon-edit-outline" @click="edit('edit',row)" />
                </el-tooltip>
                <el-tooltip v-del-tab-index class="item" effect="dark" content="删除" placement="top">
                  <i :style="{color:$store.state.settings.theme}" class="el-icon-delete" @click="del(row)" />
                </el-tooltip>
              </div>
            </template>
          </el-table-column>
        </el-table>
      </div>
      <!--分页-->
      <pagination
        :total="total"
        :page.sync="form.page"
        :limit.sync="form.rows"
        align="right"
        layout="total,prev, pager, next,sizes,jumper"
        popper-class="select_bottom"
        @pagination="getStepCheckItemSearch"
      />
    </div>
    <el-dialog
      v-el-drag-dialog
      :title="operation==='add'?'新增':'编辑'"
      :visible.sync="dialogVisible"
      width="800px"
      :close-on-click-modal="false"
      top="15vh"
      @closed="handleClose"
      @close="handleClose"
    >
      <el-form ref="dialogForm" inline :rules="dialogFormRules" :model="dialogForm" label-width="80px">
        <el-form-item label="项目编码" prop="checkitemcode">
          <el-input v-model="dialogForm.checkitemcode" :disabled="operation!=='add'" style="width: 200px" />
        </el-form-item>
        <el-form-item label="项目名称" prop="checkitemname">
          <el-input v-model="dialogForm.checkitemname" style="width: 200px" />
        </el-form-item>
        <el-form-item label="项目描述" prop="checkitemdescr">
          <el-input v-model="dialogForm.checkitemdescr" type="textarea" style="width: 200px" />
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <div class="footerButton">
          <el-button v-waves @click="dialogVisibleCancel">取 消</el-button>
          <el-button
            v-waves
            type="primary"
            :loading="$store.state.app.buttonIsDisabled"
            :disabled="$store.state.app.buttonIsDisabled"
            @click="dialogVisibleConfirm"
          >确 定</el-button>
        </div>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import Pagination from '@/components/Pagination'
import { AddUpdateStepCheckItem, DeleteStepCheckItem, StepCheckItemSearch } from '@/api/QualityManagement'
import { validateCode } from '@/utils/global'
import elDragDialog from '@/directive/el-drag-dialog'
import waves from '@/directive/waves'
import TableColumnSettings from '@/components/TableColumnSettings'
import { PrentOrganization } from '@/api/GeneralBasicData'
export default {
  name: 'ProcessCheckItem',
  components: {
    Pagination, TableColumnSettings
  },
  directives: { elDragDialog, waves },
  data() {
    return {
      mainHeight: 0,
      tableHeight: 0,
      form: {
        itemcode: '', // 项目代码
        itemname: '', // 项目名称
        itemdescr: '', // 项目描述
        prop: 'lm_date', // 排序字段
        order: 'desc', // 排序字段
        page: 1, // 第几页
        rows: 20 // 每页多少条
      },
      total: 10,
      tableData: [],
      tableColumnSettingsArray: [
        // { minWidth: 50, width: false, prop: 'id', label: 'id', id: 1, show: false, fixed: false, sortable: false }, // 隐藏列  show: false隐藏,true显示
        { minWidth: 25, width: 50, prop: 'rowNum', label: '序号', id: 2, show: true, fixed: 'left', sortable: false }, // custom
        {
          minWidth: 110,
          width: false,
          prop: 'code',
          label: '标准代码',
          id: 3,
          show: true,
          fixed: false,
          sortable: true
        },
        {
          minWidth: 110,
          width: false,
          prop: 'name',
          label: '标准名称',
          id: 4,
          show: true,
          fixed: false,
          sortable: true
        },
        {
          minWidth: 110,
          width: false,
          prop: 'org_code',
          label: '所属车间编码',
          id: 5,
          show: false,
          fixed: false,
          sortable: true
        }, {
          minWidth: 110,
          width: false,
          prop: 'org_name',
          label: '所属车间',
          id: 6,
          show: true,
          fixed: false,
          sortable: true
        },
        {
          minWidth: 330,
          width: false,
          prop: 'descr',
          label: '标准描述',
          id: 7,
          show: true,
          fixed: false,
          sortable: true
        },
        {
          minWidth: 110,
          width: false,
          prop: 'lm_user',
          label: '创建人员',
          id: 8,
          show: true,
          fixed: false,
          sortable: true
        },
        {
          minWidth: 110,
          width: false,
          prop: 'lm_date',
          label: '创建时间',
          id: 9,
          show: true,
          fixed: false,
          sortable: true
        }
      ],
      tableTimeStampKey: new Date().getTime(), // 表格key
      dialogVisible: false,
      dialogForm: {
        checkitemcode: '', // 工序检验项目编码
        checkitemname: '', // 工序检验项目名称
        checkitemdescr: '' // 工序检验项目描述
      },
      operation: '',
      dialogFormRules: {
        checkitemcode: [
          { required: true, validator: validateCode, trigger: ['blur', 'change'] }
        ],
        checkitemname: [
          { required: true, message: '请输入名称', trigger: ['blur', 'change'] }
        ],
        workshopcode: [
          { required: true, message: '请选择所属车间', trigger: ['blur', 'change'] }
        ]
      }
    }
  },
  created() {
    this.getStepCheckItemSearch()
  },
  mounted() {
    window.addEventListener('resize', this.getHeight)
    this.getHeight()
  },
  methods: {
    tableColumnUpdate(val, isCopyTrue) {
      if (isCopyTrue) {
        this.tableColumnSettingsArray = val
      }
      this.tableTimeStampKey = new Date().getTime()
      this.$refs.tableDataRef.doLayout()
    },
    async getStepCheckItemSearch() {
      const res = await StepCheckItemSearch(this.form)
      this.tableData = res.data
      this.total = res.count
    },
    // 排序改变时
    sortChange({ column, prop, order }) {
      if (order === 'descending') {
        order = 'desc'
      } else if (order === 'ascending') {
        order = 'asc'
      } else {
        order = 'desc'
      }
      this.form.order = order
      this.form.prop = prop
      this.getStepCheckItemSearch()
    },
    // 查询
    search() {
      this.getStepCheckItemSearch()
    },
    upload() {
    },
    // 重置
    reset() {
      this.form.itemcode = ''
      this.form.itemname = ''
      this.form.itemdescr = ''
      this.getStepCheckItemSearch()
    },
    // 新增按钮
    add(operation) {
      this.operation = operation
      this.dialogVisible = true
    },
    // 修改按钮
    edit(operation, row) {
      this.operation = operation
      this.dialogVisible = true
      this.$nextTick(() => {
        this.dialogForm.checkitemcode = row.code
        this.dialogForm.checkitemname = row.name
        this.dialogForm.workshopcode = row.org_code
        this.dialogForm.checkitemdescr = row.descr
      })
    },
    // 删除按钮
    async del(row) {
      this.$confirm('是否确认删除?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        DeleteStepCheckItem({ checkitemcode: row.code }).then(res => {
          if (res.code === '200') {
            this.$message.success('删除成功!')
            if (this.form.page > 1 && this.tableData.length === 1) {
              this.form.page--
            }
            this.getStepCheckItemSearch()
          }
        })
      }).catch(() => {
        this.$message.info('已取消删除')
      })
    },
    // 对话框关闭事件
    handleClose() {
      this.dialogForm.checkitemcode = ''
      this.dialogForm.checkitemname = ''
      this.dialogForm.checkitemdescr = ''
      this.dialogForm.workshopcode = ''
      this.$refs.dialogForm.clearValidate()
    },
    // 对话框取消
    dialogVisibleCancel() {
      this.dialogVisible = false
    },
    // 对话框确认
    dialogVisibleConfirm() {
      this.$refs.dialogForm.validate(valid => {
        if (valid) {
          this.$store.state.app.buttonIsDisabled = true
          const data = {
            checkitemcode: this.dialogForm.checkitemcode,
            checkitemname: this.dialogForm.checkitemname,
            checkitemdescr: this.dialogForm.checkitemdescr,
            wkshopcode: this.dialogForm.workshopcode,
            OperType: this.operation === 'add' ? 'Add' : 'Update'
          }
          AddUpdateStepCheckItem(data).then(res => {
            if (res.code === '200') {
              this.dialogVisible = false
              this.$message.success(this.operation === 'add' ? '添加成功!' : '修改成功!')
              this.getStepCheckItemSearch()
              this.$store.state.app.buttonIsDisabled = false
            } else {
              this.$message.error(this.operation === 'add' ? '添加失败!' : '修改失败!')
            }
          })
        }
      })
    },
    // 获取页面高度
    getHeight() {
      this.$nextTick(() => {
        this.mainHeight = window.innerHeight - 85
        this.tableHeight = this.mainHeight - 195
        this.$refs.tableDataRef.doLayout()
        // if (window.innerHeight < 769) {
        //   this.tableHeight = this.tableHeight - 50
        // }
      })
    },
    tableRowClassName({ row, rowIndex }) {
      return 'custom-row'
    }
  }
}
</script>
src/views/qualityManager/processCheckRecord.vue
@@ -1,11 +1,731 @@
<template />
<template>
  <div>
    <div class="body" :style="{height:mainHeight+'px'}">
      <div class="bodyTopButtonGroup">
        <el-button v-waves type="primary" icon="el-icon-download" @click="download">导出</el-button>
        <!--        <el-button v-waves type="primary" icon="el-icon-circle-plus-outline" @click="add('add')">新增</el-button>-->
        <!--        <el-button v-waves icon="el-icon-download" @click="upload">导入</el-button>-->
      </div>
      <div class="bodyTopFormGroup">
        <el-form
          ref="form"
          :model="form"
          label-width="100px"
          inline
          style="display: flex;"
        >
          <div class="elForm">
            <el-form-item label="工单编号" style=" display: flex;">
              <el-input v-model="form.wocode" placeholder="请输入" style="width: 200px" />
            </el-form-item>
            <el-form-item label="产品编码" style=" display: flex;">
              <el-input v-model="form.partcode" placeholder="请输入" style="width: 200px" />
            </el-form-item>
            <el-form-item label="产品名称" style=" display: flex;">
              <el-input v-model="form.partname" placeholder="请输入" style="width: 200px" />
            </el-form-item>
            <el-form-item label="规格型号" style=" display: flex;">
              <el-input v-model="form.partapec" placeholder="请输入" style="width: 200px" />
            </el-form-item>
            <el-form-item v-show="isExpandForm" label="工序名称" style=" display: flex;">
              <el-input v-model="form.stepname" placeholder="请输入" style="width: 200px" />
            </el-form-item>
            <el-form-item v-show="isExpandForm" label="标准名称" style=" display: flex;">
              <el-input v-model="form.standname" placeholder="请输入" style="width: 200px" />
            </el-form-item>
            <el-form-item v-show="isExpandForm" label="检验类型" style=" display: flex;">
              <el-select v-model="form.checktype" style="width: 200px" placeholder="请选择">
                <el-option
                  v-for="item in checktypeArr"
                  :key="item.code"
                  :label="item.name"
                  :value="item.code"
                />
              </el-select>
            </el-form-item>
            <el-form-item v-show="isExpandForm" label="检验结果" style=" display: flex;">
              <el-select v-model="form.checkresult    " style="width: 200px" placeholder="请选择">
                <el-option
                  v-for="item in checkresultArr"
                  :key="item.code"
                  :label="item.name"
                  :value="item.code"
                />
              </el-select>
            </el-form-item>
          </div>
          <div class="bodySearchReset" :style="{marginLeft:$store.state.app.sidebar.opened? $store.state.settings.menuIsHorizontal?'15%':'3%':'10%'}">
            <el-button v-waves type="primary" icon="el-icon-search" @click="search">查询</el-button>
            <el-button v-waves type="info" icon="el-icon-refresh" @click="reset">重置</el-button>
          </div>
        </el-form>
        <div
          class="bodyTopFormExpand"
        >
          <svg-icon
            v-show="mouseHoverType==='mouseout'"
            style="cursor: pointer"
            :icon-class="!isExpandForm?'doubleDown3':'doubleUp3'"
            @mouseenter="mouseHoverType=$event.type"
          />
          <svg-icon
            v-show="mouseHoverType==='mouseenter'"
            style="cursor: pointer"
            :icon-class="!isExpandForm?'doubleDown':'doubleUp'"
            @click="isExpandForm=!isExpandForm"
            @mouseout="mouseHoverType=$event.type"
          />
        </div>
      </div>
      <div class="elTableDiv">
        <!--        <TableColumnSettings-->
        <!--          :list1="tableColumnSettingsArray"-->
        <!--          @tableColumnUpdate="tableColumnUpdate"-->
        <!--        />-->
        <el-table
          :key="tableTimeStampKey"
          ref="tableDataRef"
          class="tableFixed"
          :data="tableData"
          :height="isExpandForm?tableHeight:(tableHeight+40)+'px'"
          border
          :row-class-name="tableRowClassName"
          :style="{width: 100+'%',height:isExpandForm?tableHeight:(tableHeight+40)+'px'}"
          highlight-current-row
          :header-cell-style="this.$headerCellStyle"
          :cell-style="this.$cellStyle"
          @sort-change="sortChange"
        >
          <el-table-column
            v-for="item in tableColumnSettingsArray"
            v-if="item.show"
            :key="item.id"
            :sortable="item.sortable"
            :prop="item.prop"
            :min-width="item.minWidth"
            :label="item.label"
            :width="item.width"
            show-tooltip-when-overflow
            :fixed="item.fixed?(item.fixed==='left'?'left':'right'):false"
          >
            <template slot-scope="{row}">
              <div v-if="!row[item.prop]">/</div>
              <div v-else-if="item.prop==='check_type'">
                {{ checktypeArr.find(i=>i.code===row[item.prop]).name }}
              </div>
              <div v-else-if="item.prop==='check_result'">
                <div v-if="row.check_result==='NG'">
                  <i class="el-icon-info" style="margin-right: 2px" />
                  不良
                </div>
                <div v-if="row.check_result==='OK'">
                  <i class="el-icon-success" :style="{color:$store.state.settings.theme}" style="margin-right: 2px" />
                  合格
                </div>
              </div>
              <div v-else>{{ row[item.prop] }}</div>
            </template>
          </el-table-column>
          <el-table-column
            label="操作"
            fixed="right"
            width="120"
          >
            <template slot-scope="{row}">
              <div class="operationClass">
                <!--                <el-button v-waves type="text" @click="check(row)">查看</el-button>-->
                <!--                <el-button v-waves type="text" @click="del(row)">删除</el-button>-->
                <el-tooltip class="item" effect="dark" content="查看" placement="top">
                  <i
                    class="el-icon-view"
                    :style="{color:$store.state.settings.theme}"
                    style="cursor: pointer;margin-right: 15px;"
                    @click="check(row)"
                  />
                </el-tooltip>
              </div>
            </template>
          </el-table-column>
        </el-table>
      </div>
      <!--分页-->
      <pagination
        :total="total"
        :page.sync="form.page"
        :limit.sync="form.rows"
        align="right"
        layout="prev, pager, next,sizes,jumper"
        popper-class="select_bottom"
        @pagination="getStepCheckTableSearch"
      />
    </div>
    <el-dialog
      v-el-drag-dialog
      title="工序检验明细"
      :visible.sync="dialogVisible"
      width="900px"
      :close-on-click-modal="false"
      top="15vh"
      @closed="handleClose"
      @close="handleClose"
    >
      <div class="elTableDiv">
        <el-table
          ref="tableDataRef2"
          :data="tableDataDialog"
          :height="(tableHeight-100)+'px'"
          border
          :row-class-name="tableRowClassName"
          :style="{width: 100+'%',height:(tableHeight-100)+'px',}"
          highlight-current-row
          :header-cell-style="this.$headerCellStyle"
          :cell-style="this.$cellStyle"
        >
          <!--          <el-table-column-->
          <!--            type="selection"-->
          <!--            width="50"-->
          <!--            fixed-->
          <!--          />-->
          <el-table-column
            type="index"
            width="50"
            label="序号"
            fixed
          />
          <!--          <el-table-column-->
          <!--            prop="checkitem_code"-->
          <!--            show-tooltip-when-overflow-->
          <!--            label="检验项目编号"-->
          <!--            width="120"-->
          <!--          />-->
          <el-table-column
            prop="checkitem_name"
            label="检验项目名称"
            fixed
            show-tooltip-when-overflow
          />
          <!--          <el-table-column-->
          <!--            prop="checkitem_descr"-->
          <!--            label="检验项目描述"-->
          <!--            show-tooltip-when-overflow-->
          <!--          />-->
          <el-table-column
            prop="standvalue"
            label="标准要求"
            fixed
            min-width="120"
            show-tooltip-when-overflow
          >
            <template slot-scope="{row}">
              <!--        ~当三个值都有    -->
              <div v-if="row.standvalue&&row.uppervalue&&row.lowervalue">{{ row.standvalue }}({{
                row.lowervalue
              }}~{{ row.uppervalue }})
              </div>
              <!--            ~当只有标准值和上限值时  -->
              <div v-else-if="row.standvalue&&row.uppervalue">{{ row.standvalue }}(~{{ row.uppervalue }})</div>
              <!--            ~当只有标准值和下限值时-->
              <div v-else-if="row.standvalue&&row.lowervalue">{{ row.standvalue }}({{ row.lowervalue }}~)</div>
              <!--            ~当只有上限值和下限值时-->
              <div v-else-if="row.uppervalue&&row.lowervalue">({{ row.lowervalue }}~{{ row.uppervalue }})</div>
              <!--            ~当只有标准值时     -->
              <div v-else-if="row.standvalue">{{ row.standvalue }}</div>
              <!--            ~当只有上限值时       -->
              <div v-else-if="row.uppervalue">(~{{ row.uppervalue }})</div>
              <!--            ~当只有下限值时      -->
              <div v-else-if="row.lowervalue">({{ row.lowervalue }}~)</div>
              <div v-else>/</div>
            </template>
          </el-table-column>
          <el-table-column
            v-for="(item,index) in dialogTableArrayCol"
            :key="item"
            :prop="(index+1)+'/'+ dialogTableNumberCol"
            :label="'第'+(index+1)+'件'"
            show-tooltip-when-overflow
            min-width="100"
          >
            <template slot-scope="{row}">
              <div style="display: flex;align-items: center">
                <i
                  :class="row.check_result==='OK'?'el-icon-success':'el-icon-error'"
                  :style="{color:row.check_result==='OK'?$store.state.settings.theme:'red'}"
                  style="margin-right: 2px"
                />
                {{ row[(index + 1) + '/' + dialogTableNumberCol] }}
              </div>
              <!--            &lt;!&ndash;        ~当三个值都有    &ndash;&gt;-->
              <!--            <div v-if="row.standvalue&&row.uppervalue&&row.lowervalue&&parseFloat(row[(index + 1) + '/' + dialogTableNumberCol])>=parseFloat(row.lowervalue)&&parseFloat(row[(index + 1) + '/' + dialogTableNumberCol])<=parseFloat(row.uppervalue)">-->
              <!--              &lt;!&ndash;            <div v-if="row[(index + 1) + '/' + dialogTableNumberCol]>=row.lowervalue&&row[(index + 1) + '/' + dialogTableNumberCol]<=row.uppervalue">&ndash;&gt;-->
              <!--              <div style="display: flex;align-items: center">-->
              <!--                <i class="el-icon-success" :style="{color:$store.state.settings.theme}" style="margin-right: 2px" />-->
              <!--                {{ row[(index + 1) + '/' + dialogTableNumberCol] }}-->
              <!--              </div>-->
              <!--            </div>-->
              <!--            &lt;!&ndash;            ~当只有标准值和上限值时  &ndash;&gt;-->
              <!--            <div v-else-if="row.standvalue&&row.uppervalue&&row.lowervalue===''&&parseFloat(row[(index + 1) + '/' + dialogTableNumberCol])<=parseFloat(row.uppervalue)">-->
              <!--              <div style="display: flex;align-items: center">-->
              <!--                <i class="el-icon-success" :style="{color:$store.state.settings.theme}" style="margin-right: 2px" />-->
              <!--                {{ row[(index + 1) + '/' + dialogTableNumberCol] }}-->
              <!--              </div>-->
              <!--            </div>-->
              <!--            &lt;!&ndash;            ~当只有标准值和下限值时&ndash;&gt;-->
              <!--            <div v-else-if="row.standvalue&&row.lowervalue&&row.uppervalue===''&&parseFloat(row[(index + 1) + '/' + dialogTableNumberCol])>=parseFloat(row.lowervalue)">-->
              <!--              <div style="display: flex;align-items: center">-->
              <!--                <i class="el-icon-success" :style="{color:$store.state.settings.theme}" style="margin-right: 2px" />-->
              <!--                {{ row[(index + 1) + '/' + dialogTableNumberCol] }}-->
              <!--              </div>-->
              <!--            </div>-->
              <!--            &lt;!&ndash;            ~当只有上限值和下限值时&ndash;&gt;-->
              <!--            <div v-else-if="row.uppervalue&&row.lowervalue&&row.standvalue===''&&parseFloat(row[(index + 1) + '/' + dialogTableNumberCol])>=parseFloat(row.lowervalue)&&parseFloat(row[(index + 1) + '/' + dialogTableNumberCol])<=parseFloat(row.uppervalue)">-->
              <!--              <div style="display: flex;align-items: center">-->
              <!--                <i class="el-icon-success" :style="{color:$store.state.settings.theme}" style="margin-right: 2px" />-->
              <!--                {{ row[(index + 1) + '/' + dialogTableNumberCol] }}-->
              <!--              </div>-->
              <!--            </div>-->
              <!--            &lt;!&ndash;            ~当只有标准值时     &ndash;&gt;-->
              <!--            <div v-else-if="row.standvalue&&row.uppervalue===''&&row.lowervalue===''&&parseFloat(row[(index + 1) + '/' + dialogTableNumberCol])===parseFloat(row.standvalue)">-->
              <!--              <div style="display: flex;align-items: center">-->
              <!--                <i class="el-icon-success" :style="{color:$store.state.settings.theme}" style="margin-right: 2px" />-->
              <!--                {{ row[(index + 1) + '/' + dialogTableNumberCol] }}-->
              <!--              </div>-->
              <!--            </div>-->
              <!--            &lt;!&ndash;            ~当只有上限值时       &ndash;&gt;-->
              <!--            <div v-else-if="row.uppervalue&&row.lowervalue===''&&row.standvalue===''&&parseFloat(row[(index + 1) + '/' + dialogTableNumberCol])<=parseFloat(row.uppervalue)">-->
              <!--              <div style="display: flex;align-items: center">-->
              <!--                <i class="el-icon-success" :style="{color:$store.state.settings.theme}" style="margin-right: 2px" />-->
              <!--                {{ row[(index + 1) + '/' + dialogTableNumberCol] }}-->
              <!--              </div>-->
              <!--            </div>-->
              <!--            &lt;!&ndash;            ~当只有下限值时      &ndash;&gt;-->
              <!--            <div v-else-if="row.lowervalue&& row.uppervalue===''&&row.standvalue===''&&parseFloat(row[(index + 1) + '/' + dialogTableNumberCol])>=parseFloat(row.lowervalue)">-->
              <!--              <div style="display: flex;align-items: center">-->
              <!--                <i class="el-icon-success" :style="{color:$store.state.settings.theme}" style="margin-right: 2px" />-->
              <!--                {{ row[(index + 1) + '/' + dialogTableNumberCol] }}-->
              <!--              </div></div>-->
              <!--            <div v-else>-->
              <!--              <div style="display: flex;align-items: center">-->
              <!--                <i class="el-icon-error" style="color: red;margin-right: 2px" />-->
              <!--                {{ row[(index + 1) + '/' + dialogTableNumberCol] }}-->
              <!--              </div>-->
              <!--            </div>-->
            </template>
          </el-table-column>
        </el-table>
      </div>
      <span slot="footer" class="dialog-footer">
        <div class="footerButton">
          <!--          <el-button v-waves @click="dialogVisibleCancel">取 消</el-button>-->
          <!--          <el-button v-waves type="primary" @click="dialogVisibleConfirm">确 定</el-button>-->
          <el-button v-waves @click="dialogVisibleBack">返 回</el-button>
        </div>
      </span>
    </el-dialog>
    <!--导入组件-->
    <import-picker
      ref="importPickerFunc"
      class="importPickerClass"
      :shows.sync="shows"
      :title="title_value"
      :colos="colos"
      :code="code"
    />
  </div>
</template>
<script>
import Pagination from '@/components/Pagination'
import { AddUpdateOrganization, DeleteOrganization } from '@/api/basicSettings'
import { getCookie } from '@/utils/auth'
import ImportPicker from '@/components/ImportPicker'
import { StepCheckTableOutExcel, StepCheckTableSearch, StepCheckTableSubSearch } from '@/api/QualityManagement'
import elDragDialog from '@/directive/el-drag-dialog'
import waves from '@/directive/waves'
import TableColumnSettings from '@/components/TableColumnSettings'
const SER_HZ = /^[\u4e00-\u9fa5]+$/
export default {
  name: 'ProcessCheckRecord'
  name: 'Zzjg',
  components: {
    Pagination, ImportPicker, TableColumnSettings
  },
  directives: { elDragDialog, waves },
  data() {
    return {
      mouseHoverType: 'mouseout',
      isExpandForm: false,
      mainHeight: 0,
      tableHeight: 0,
      form: {
        wocode: '', // 工单编号
        partcode: '', // 产品编码
        partname: '', // 产品名称
        partapec: '', // 产品规格
        stepname: '', // 工序名称
        standname: '', // 标准名称
        checktype: '', // 检验类型
        checkresult: '', // 检验类型
        prop: 'lm_date', // 排序字段
        order: 'desc', // 排序字段
        page: 1, // 第几页
        rows: 20 // 每页多少条
      },
      checktypeArr: [
        { code: 'InCheck', name: '入厂检验' },
        { code: 'OutCheck', name: '出厂检验' },
        { code: 'FirstCheck', name: '首检' },
        { code: 'PatroCheck', name: '巡检' },
        { code: 'EndCheck', name: '完工检' }
      ],
      checkresultArr: [
        { code: 'OK', name: '合格' },
        { code: 'NG', name: '不良' }
      ],
      total: 10,
      tableData: [],
      tableColumnSettingsArray: [
        { minWidth: 50, width: false, prop: 'id', label: 'id', id: 1, show: false, fixed: false, sortable: false }, // 隐藏列  show: false隐藏,true显示
        { minWidth: 25, width: 50, prop: 'rowNum', label: '序号', id: 2, show: true, fixed: 'left', sortable: false }, // custom
        {
          minWidth: 160,
          width: false,
          prop: 'wo_code',
          label: '工单编号',
          id: 3,
          show: true,
          fixed: false,
          sortable: true
        },
        {
          minWidth: 110,
          width: false,
          prop: 'partcode',
          label: '产品编码',
          id: 4,
          show: true,
          fixed: false,
          sortable: true
        },
        {
          minWidth: 110,
          width: false,
          prop: 'partname',
          label: '产品名称',
          id: 5,
          show: true,
          fixed: false,
          sortable: true
        }, {
          minWidth: 110,
          width: false,
          prop: 'partspec',
          label: '产品规格',
          id: 6,
          show: true,
          fixed: false,
          sortable: true
        }, {
          minWidth: 110,
          width: false,
          prop: 'step_code',
          label: '工序编码',
          id: 7,
          show: true,
          fixed: false,
          sortable: true
        }, {
          minWidth: 110,
          width: false,
          prop: 'stepname',
          label: '工序名称',
          id: 8,
          show: true,
          fixed: false,
          sortable: true
        }, {
          minWidth: 110,
          width: false,
          prop: 'checkstaned_code',
          label: '标准编码',
          id: 9,
          show: true,
          fixed: false,
          sortable: true
        }, {
          minWidth: 110,
          width: false,
          prop: 'checkstaned_name',
          label: '标准名称',
          id: 10,
          show: true,
          fixed: false,
          sortable: true
        }, {
          minWidth: 110,
          width: false,
          prop: 'check_type',
          label: '检验类型',
          id: 11,
          show: true,
          fixed: false,
          sortable: true
        }, {
          minWidth: 110,
          width: false,
          prop: 'check_result',
          label: '检验结果',
          id: 12,
          show: true,
          fixed: false,
          sortable: true
        }, {
          minWidth: 110,
          width: false,
          prop: 'check_descr',
          label: '检验备注',
          id: 13,
          show: true,
          fixed: false,
          sortable: true
        }, {
          minWidth: 110,
          width: false,
          prop: 'check_qty',
          label: '检验数量',
          id: 14,
          show: true,
          fixed: false,
          sortable: true
        },
        {
          minWidth: 110,
          width: false,
          prop: 'lm_user',
          label: '检验人员',
          id: 15,
          show: true,
          fixed: false,
          sortable: true
        },
        {
          minWidth: 160,
          width: false,
          prop: 'lm_date',
          label: '检验时间',
          id: 16,
          show: true,
          fixed: false,
          sortable: true
        }
      ],
      tableTimeStampKey: new Date().getTime(), // 表格key
      dialogVisible: false,
      tableDataDialog: [],
      title_value: '数据导入 / 点检部位',
      code: '4',
      shows: false,
      dialogTableNumberCol: 0, // 对话框动态的列数
      dialogTableArrayCol: []// 对话框动态的数组
    }
  },
  watch: {
    shows() {
      if (!this.shows) {
        this.getStepCheckTableSearch()
      }
    }
  },
  created() {
    this.getStepCheckTableSearch()
  },
  mounted() {
    window.addEventListener('resize', this.getHeight)
    this.getHeight()
  },
  methods: {
    tableColumnUpdate(val, isCopyTrue) {
      if (isCopyTrue) {
        this.tableColumnSettingsArray = val
      }
      this.tableTimeStampKey = new Date().getTime()
      this.$refs.tableDataRef.doLayout()
    },
    async getStepCheckTableSearch() {
      const res = await StepCheckTableSearch(this.form)
      this.tableData = res.data
      this.total = res.count
    },
    // 排序改变时
    sortChange({ column, prop, order }) {
      if (order === 'descending') {
        order = 'desc'
      } else if (order === 'ascending') {
        order = 'asc'
      } else {
        order = 'desc'
      }
      this.form.order = order
      this.form.prop = prop
      this.getStepCheckTableSearch()
    },
    // 查询
    search() {
      this.getStepCheckTableSearch()
    },
    // 导入按钮
    upload() {
      this.shows = true
      this.$refs.importPickerFunc.newDataFunc()
    },
    colos() {
      this.shows = false
    },
    // 重置
    reset() {
      this.form.wocode = '', // 工单编号
      this.form.partcode = '', // 产品编码
      this.form.partname = '', // 产品名称
      this.form.partapec = '', // 产品规格
      this.form.stepname = '', // 工序名称
      this.form.standname = '', // 标准名称
      this.form.checktype = '', // 检验类型
      this.form.checkresult = '', // 检验类型
      this.getStepCheckTableSearch()
    },
    async check(row) {
      // this.operation = operation
      this.dialogVisible = true
      console.log(row, 1)
      const res = await StepCheckTableSubSearch({ id: row.id })
      this.tableDataDialog = res.data
      this.tableDataDialog.forEach((item, index) => {
        for (const it in item) {
          if (it.indexOf('/') !== -1) {
            const i = it.split('/')[1]
            this.dialogTableNumberCol = i
          }
        }
      })
      this.dialogTableArrayCol = []
      for (let i = 0; i < this.dialogTableNumberCol; i++) {
        this.dialogTableArrayCol.push(i)
      }
      this.$nextTick(() => {
        this.$refs.tableDataRef2.doLayout()
      })
    },
    // 新增按钮
    add(operation) {
      this.operation = operation
      this.dialogVisible = true
    },
    // 修改按钮
    edit(operation, row) {
      this.operation = operation
      this.dialogVisible = true
      this.$nextTick(() => {
        this.dialogForm.OrgCode = row.org_code
        this.dialogForm.OrgName = row.org_name
        this.dialogForm.SupUnit = row.parent_id
      })
    },
    // 删除按钮
    async del(row) {
      this.$confirm('是否确认删除?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        DeleteOrganization({ orgid: row.code }).then(res => {
          if (res.code === '200') {
            this.$message.success('删除成功!')
            if (this.form.page > 1 && this.tableData.length === 1) {
              this.form.page--
            }
            this.getStepCheckTableSearch()
          }
        })
      }).catch(() => {
        this.$message.info('已取消删除')
      })
    },
    // 对话框关闭事件
    handleClose() {
      this.tableDataDialog = []
    },
    // 对话框取消
    dialogVisibleCancel() {
      this.dialogVisible = false
    },
    // 对话框确认
    dialogVisibleConfirm() {
      this.$refs.dialogForm.validate(valid => {
        if (valid) {
          const data = {
            OrganCode: this.dialogForm.OrgCode,
            OrganName: this.dialogForm.OrgName,
            OperType: this.operation === 'add' ? 'Add' : 'Update',
            Operator: getCookie('admin')
          }
          AddUpdateOrganization(data).then(res => {
            if (res.code === '200') {
              this.$message.success(this.operation === 'add' ? '添加成功!' : '修改成功!')
              this.dialogVisible = false
              this.getStepCheckTableSearch()
            } else {
              this.$message.error(this.operation === 'add' ? '添加失败!' : '修改失败!')
            }
          })
        }
      })
    },
    // 获取页面高度
    getHeight() {
      this.$nextTick(() => {
        this.mainHeight = window.innerHeight - 85
        this.tableHeight = this.mainHeight - 250
        this.$refs.tableDataRef.doLayout()
      })
    },
    tableRowClassName({ row, rowIndex }) {
      return 'custom-row'
    },
    async  download() {
      const { data: res } = await StepCheckTableOutExcel(this.form)
      window.location.href = res
    },
    dialogVisibleBack() {
      this.dialogVisible = false
    }
  }
}
</script>
<style scoped>
</style>
src/views/qualityManager/qualityPlaning.vue
@@ -1,11 +1,1295 @@
<template />
<template>
  <div>
    <div class="body" :style="{height:mainHeight+'px'}">
      <div class="bodyTopButtonGroup" style="justify-content: space-between">
        <el-button v-waves type="primary" icon="el-icon-circle-plus-outline" @click="add('add')">新增</el-button>
      </div>
      <div class="bodyTopFormGroup">
        <el-form
          ref="form"
          :model="form"
          label-width="100px"
          inline
          style="display: flex;"
        >
          <div class="elForm">
            <el-form-item label="质检方案编码" style=" display: flex;">
              <el-input v-model="form.qualityinsptcode" placeholder="请输入" style="width: 200px" />
            </el-form-item>
            <el-form-item label="质检方案名称" style=" display: flex;">
              <el-input v-model="form.qualityinsptname" placeholder="请输入" style="width: 200px" />
            </el-form-item>
            <el-form-item label="有效状态" style=" display: flex;">
              <el-select v-model="form.status" style="width: 200px" placeholder="请选择">
                <el-option
                  v-for="item in whetherOrNot"
                  :key="item.code"
                  :label="item.name"
                  :value="item.code"
                />
              </el-select>
            </el-form-item>
            <el-form-item label="质检类型" style=" display: flex;">
              <el-select v-model="form.checktype" style="width: 200px" placeholder="请选择">
                <el-option
                  v-for="item in checktypeArr"
                  :key="item.code"
                  :label="item.name"
                  :value="item.code"
                />
              </el-select>
            </el-form-item>
            <el-form-item v-show="isExpandForm" label="抽样方式" style=" display: flex;">
              <el-select v-model="form.sampltype" style="width: 200px" placeholder="请选择">
                <el-option
                  v-for="item in sampltypeArr"
                  :key="item.code"
                  :label="item.name"
                  :value="item.code"
                />
              </el-select>
            </el-form-item>
            <el-form-item v-show="isExpandForm" label="适用对象" style=" display: flex;">
              <el-select v-model="form.suitobject" style="width: 200px" placeholder="请选择">
                <el-option
                  v-for="item in suitobjectArr"
                  :key="item.code"
                  :label="item.name"
                  :value="item.code"
                />
              </el-select>
            </el-form-item>
          </div>
          <div
            class="bodySearchReset"
            :style="{marginLeft:$store.state.app.sidebar.opened? $store.state.settings.menuIsHorizontal?'15%':'3%':'10%'}"
          >
            <el-button v-waves type="primary" icon="el-icon-search" @click="search">查询</el-button>
            <el-button v-waves type="info" icon="el-icon-refresh" @click="reset">重置</el-button>
          </div>
        </el-form>
        <div
          class="bodyTopFormExpand"
        >
          <svg-icon
            v-show="mouseHoverType==='mouseout'"
            style="cursor: pointer"
            :icon-class="!isExpandForm?'doubleDown3':'doubleUp3'"
            @mouseenter="mouseHoverType=$event.type"
          />
          <svg-icon
            v-show="mouseHoverType==='mouseenter'"
            style="cursor: pointer"
            :icon-class="!isExpandForm?'doubleDown':'doubleUp'"
            @click="isExpandForm=!isExpandForm"
            @mouseout="mouseHoverType=$event.type"
          />
        </div>
      </div>
      <div class="elTableDiv">
        <!--        <TableColumnSettings-->
        <!--          :list1="tableColumnSettingsArray"-->
        <!--          @tableColumnUpdate="tableColumnUpdate"-->
        <!--        />-->
        <el-table
          :key="tableTimeStampKey"
          ref="tableDataRef"
          class="tableFixed"
          :data="tableData"
          :height="isExpandForm?tableHeight:(tableHeight+40)+'px'"
          border
          :row-class-name="tableRowClassName"
          :style="{width: 100+'%',height:isExpandForm?tableHeight:(tableHeight+40)+'px',}"
          highlight-current-row
          :header-cell-style="this.$headerCellStyle"
          :cell-style="this.$cellStyle"
          @sort-change="sortChange"
        >
          <!--          <el-table-column-->
          <!--            prop="RowNum"-->
          <!--            width="50"-->
          <!--            fixed-->
          <!--            label="序号"-->
          <!--          />-->
          <!--          <el-table-column-->
          <!--            prop="code"-->
          <!--            label="质检方案编码"-->
          <!--            sortable="custom"-->
          <!--          />-->
          <!--          <el-table-column-->
          <!--            prop="name"-->
          <!--            label="质检方案名称"-->
          <!--            sortable="custom"-->
          <!--          />-->
          <!--          <el-table-column-->
          <!--            prop="status"-->
          <!--            label="有效状态"-->
          <!--            sortable="custom"-->
          <!--          >-->
          <!--            <template slot-scope="{row}">-->
          <!--              <div v-if="row.status==='Y'"><i-->
          <!--                class="el-icon-success"-->
          <!--                :style="{color:$store.state.settings.theme}"-->
          <!--                style="margin-right:5px"-->
          <!--              />是-->
          <!--              </div>-->
          <!--              <div v-else-if="row.status==='N'"><i class="el-icon-info" style="margin-right: 5px" />否</div>-->
          <!--              <div v-else>/</div>-->
          <!--            </template>-->
          <!--          </el-table-column>-->
          <!--          <el-table-column-->
          <!--            prop="checktype"-->
          <!--            label="质检类型"-->
          <!--            sortable="custom"-->
          <!--          >-->
          <!--            <template slot-scope="{row}">-->
          <!--              <div v-if="row.checktype">{{ checktypeArr.find(i => i.code === row.checktype).name }}</div>-->
          <!--              <div v-else>/</div>-->
          <!--            </template>-->
          <!--          </el-table-column>-->
          <!--          <el-table-column-->
          <!--            prop="sampmethod"-->
          <!--            label="抽样方式"-->
          <!--            sortable="custom"-->
          <!--          >-->
          <!--            <template slot-scope="{row}">-->
          <!--              <div v-if="row.sampmethod">{{ sampltypeArr.find(i => i.code === row.sampmethod).name }}</div>-->
          <!--              <div v-else>/</div>-->
          <!--            </template>-->
          <!--          </el-table-column>-->
          <!--          <el-table-column-->
          <!--            prop="suitobject"-->
          <!--            label="适用对象"-->
          <!--            sortable="custom"-->
          <!--          >-->
          <!--            <template slot-scope="{row}">-->
          <!--              <div v-if="row.suitobject">{{ suitobjectArr.find(i => i.code === row.suitobject).name }}</div>-->
          <!--              <div v-else>/</div>-->
          <!--            </template>-->
          <!--          </el-table-column>-->
          <!--          <el-table-column-->
          <!--            prop="username"-->
          <!--            label="创建人员"-->
          <!--            sortable="custom"-->
          <!--          />-->
          <!--          <el-table-column-->
          <!--            prop="lm_date"-->
          <!--            label="创建时间"-->
          <!--            width="160"-->
          <!--            sortable="custom"-->
          <!--          />-->
          <el-table-column
            v-for="item in tableColumnSettingsArray"
            v-if="item.show"
            :key="item.id"
            :sortable="item.sortable"
            :prop="item.prop"
            :min-width="item.minWidth"
            :label="item.label"
            :width="item.width"
            show-tooltip-when-overflow
            :fixed="item.fixed?(item.fixed==='left'?'left':'right'):false"
          >
            <template slot-scope="{row}">
              <div v-if="!row[item.prop]">/</div>
              <div v-else-if="item.prop==='checktype'">
                {{ checktypeArr.find(i => i.code === row[item.prop]).name }}
              </div>
              <div v-else-if="item.prop==='sampmethod'">
                {{ sampltypeArr.find(i => i.code === row[item.prop]).name }}
              </div>
              <!--              适用对象-->
              <div v-else-if="item.prop==='suitobject'">
                {{ suitobjectArr.find(i => i.code === row.suitobject).name }}
              </div>
              <div v-else-if="item.prop==='status'">
                <div v-if="row.status==='Y'"><i
                  class="el-icon-success"
                  :style="{color:$store.state.settings.theme}"
                  style="margin-right:5px"
                />是
                </div>
                <div v-else-if="row.status==='N'"><i class="el-icon-info" style="margin-right: 5px" />否</div>
                <div v-else>/</div>
              </div>
              <div v-else>{{ row[item.prop] }}</div>
            </template>
          </el-table-column>
          <el-table-column
            label="操作"
            width="120"
            fixed="right"
          >
            <template slot-scope="{row}">
              <div class="operationClass">
                <el-tooltip class="item" effect="dark" content="查看" placement="top">
                  <i
                    class="el-icon-view"
                    :style="{color:$store.state.settings.theme}"
                    style="margin-right:15px;cursor: pointer;"
                    @click="check('check',row)"
                  />
                </el-tooltip>
                <el-tooltip class="item" effect="dark" content="编辑" placement="top">
                  <i
                    class="el-icon-edit-outline"
                    :style="{color:$store.state.settings.theme}"
                    @click="edit('edit',row)"
                  />
                </el-tooltip>
                <el-tooltip v-del-tab-index class="item" effect="dark" content="删除" placement="top">
                  <i class="el-icon-delete" :style="{color:$store.state.settings.theme}" @click="del(row)" />
                </el-tooltip>
              </div>
            </template>
          </el-table-column>
        </el-table>
      </div>
      <!--分页-->
      <pagination
        :total="total"
        :page.sync="form.page"
        :limit.sync="form.rows"
        align="right"
        layout="total,prev, pager, next,sizes"
        popper-class="select_bottom"
        @pagination="getQualityInspectionSearch"
      />
    </div>
    <el-dialog
      v-el-drag-dialog
      :title="operation==='add'?'新增':operation==='check'?'查看':'编辑'"
      :visible.sync="dialogVisible"
      width="1260px"
      :close-on-click-modal="false"
      top="5vh"
      @closed="handleClose"
      @close="handleClose"
    >
      <!--      <div>-->
      <!--        <i class="el-icon-s-comment" :style="{color:$store.state.settings.theme}" style="margin: -20px 10px 20px 0" />基础资料:-->
      <!--      </div>-->
      <el-form ref="dialogForm" inline :rules="dialogFormRules" :model="dialogForm" label-width="110px">
        <el-form-item label="质检方案编码" prop="qualityinsptcode">
          <el-input v-model="dialogForm.qualityinsptcode" :disabled="operation!=='add'" style="width: 200px" />
        </el-form-item>
        <el-form-item label="质检方案名称" prop="qualityinsptname">
          <el-input v-model="dialogForm.qualityinsptname" style="width: 200px" />
        </el-form-item>
        <br>
        <el-form-item prop="status" label="有效状态">
          <el-select
            v-model="dialogForm.status"
            style="width: 200px"
            placeholder="请选择"
            :popper-append-to-body="false"
          >
            <el-option
              v-for="item in whetherOrNot"
              :key="item.code"
              :label="item.name"
              :value="item.code"
            />
          </el-select>
        </el-form-item>
        <br>
        <el-form-item prop="checktype" label="质检类型">
          <el-radio-group v-model="dialogForm.checktype">
            <!--            <el-radio label="InCheck">入厂检验</el-radio>-->
            <!--            <el-radio label="OutCheck">出厂检验</el-radio>-->
            <el-radio label="FirstCheck">首检检验</el-radio>
            <el-radio label="PatroCheck">巡检</el-radio>
            <el-radio label="EndCheck">完工检</el-radio>
          </el-radio-group>
        </el-form-item>
        <br>
        <el-form-item prop="sampmethod" label="抽样方式">
          <el-radio-group v-model="dialogForm.sampmethod" style="width: 200px;">
            <el-radio label="FIXED">固时抽检</el-radio>
            <el-radio label="SCARE">比例抽检</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item v-if="dialogForm.sampmethod==='FIXED'" label="样本数量" prop="sampnum">
          <el-input v-model="dialogForm.sampnum" oninput="value=value.replace(/[^0-9]/g,'')" style="width: 200px" />
        </el-form-item>
        <el-form-item v-if="dialogForm.sampmethod==='SCARE'" label="抽检比例" prop="sampscale">
          <el-input v-model="dialogForm.sampscale" oninput="value=value.replace(/[^0-9.]/g,'')" style="width: 180px" />
          %
        </el-form-item>
        <br>
        <el-form-item prop="suitobject" label="适用对象">
          <el-radio-group v-model="dialogForm.suitobject" style="width: 200px;" @change="suitobjectChange">
            <el-radio label="PY">物料类别</el-radio>
            <el-radio label="P">物料</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item
          prop="suitpart"
          :label="dialogForm.suitobject==='P'?'适用物料':'适用物料类别'"
        >
          <el-select
            v-model="dialogForm.suitpart"
            style="width: 200px"
            multiple
            filterable
            collapse-tags
            placeholder="请选择"
            :popper-append-to-body="false"
          >
            <el-option
              v-for="item in PartSelectArr"
              v-if="dialogForm.suitobject==='P'"
              :key="item.partcode"
              :label="item.partcode +' / '+ item.partname"
              :value="item.partcode"
            />
            <el-option
              v-for="item in StockTypeSelectArr"
              v-if="dialogForm.suitobject==='PY'"
              :key="item.code"
              :label="item.code+' / '+item.name"
              :value="item.code"
            />
          </el-select>
        </el-form-item>
        <br>
        <el-form-item
          label="工序名称"
          prop="stepcode"
        >
          <el-select
            v-model="dialogForm.stepcode"
            style="width: 200px"
            filterable
            placeholder="请选择"
            :popper-append-to-body="false"
          >
            <el-option
              v-for="item in StepSelectArr"
              :key="item.stepcode"
              :label="item.stepname"
              :value="item.stepcode"
            />
          </el-select>
        </el-form-item>
        <el-form-item label="检验方案描述">
          <el-input v-model="dialogForm.descr" type="textarea" :autosize="{ minRows: 2 }" />
        </el-form-item>
      </el-form>
      <div style="display: flex;align-items: center;margin-bottom: 10px;">
        <div>
          <i
            class="el-icon-s-operation"
            :style="{color:$store.state.settings.theme}"
            style="margin:0 10px 0 0px;"
          />
        </div>
        <div>质检列表:</div>
        <el-button
          v-if="operation!=='check'"
          v-waves
          type="primary"
          style="margin-left: 20px;"
          icon="el-icon-circle-plus-outline"
          @click="addZjlb"
        >新增
        </el-button>
      </div>
      <el-table
        ref="tableDataRef2"
        class="tableFixed"
        :data="checkitem"
        height="250"
        style="height:250px"
        border
        :row-class-name="tableRowClassName"
        highlight-current-row
        :header-cell-style="this.$headerCellStyle"
        :cell-style="this.$cellStyle"
      >
        <el-table-column
          type="index"
          width="50"
          fixed
          label="序号"
        />
        <!--        <el-table-column-->
        <!--          prop="jyxmbm"-->
        <!--          width="105"-->
        <!--          label="检验项目编码"-->
        <!--        >-->
        <!--          <template slot-scope="{row}">-->
        <!--            <el-select-->
        <!--              v-if="row.isVisible===1"-->
        <!--              v-model="row.jyxmbm"-->
        <!--              filterable-->
        <!--              placeholder="请选择"-->
        <!--              @change="val=>tableChange(val,row)"-->
        <!--            >-->
        <!--              <el-option-->
        <!--                v-for="item in PartSelectArr"-->
        <!--                :key="item.partname"-->
        <!--                :label="item.partcode"-->
        <!--                :value="item.partname"-->
        <!--              />-->
        <!--            </el-select>-->
        <!--            <div v-if="row.isVisible===0">{{ row.jyxmbm }}</div>-->
        <!--          </template>-->
        <!--        </el-table-column>-->
        <!--        <el-table-column-->
        <!--          prop="jyxmmc"-->
        <!--          width="105"-->
        <!--          label="检验项目名称"-->
        <!--        >-->
        <!--          <template slot-scope="{row}">-->
        <!--            <el-select-->
        <!--              v-if="row.isVisible===1"-->
        <!--              v-model="row.jyxmmc"-->
        <!--              filterable-->
        <!--              placeholder="请选择"-->
        <!--              @change="val=>tableChange(val,row)"-->
        <!--            >-->
        <!--              <el-option-->
        <!--                v-for="item in PartSelectArr"-->
        <!--                :key="item.partname"-->
        <!--                :label="item.partcode"-->
        <!--                :value="item.partname"-->
        <!--              />-->
        <!--            </el-select>-->
        <!--            <div v-if="row.isVisible===0">{{ row.jyxmmc }}</div>-->
        <!--          </template>-->
        <!--        </el-table-column>-->
        <el-table-column
          prop="stepcheckitem_code"
          width="250"
          label="检验项目 / 编码"
        >
          <template slot-scope="{row}">
            <el-select
              v-if="row.isVisible===1"
              v-model="row.stepcheckitem_code"
              filterable
              placeholder="请选择"
              style="width: 100%;"
            >
              <!--              @change="val=>tableChange(val,row)"-->
              <el-option
                v-for="item in CheckItemSelectArr"
                :key="item.code"
                :label="item.name"
                :value="item.code"
              />
            </el-select>
            <div v-else>{{
              CheckItemSelectAllArr.find(i => i.code === row.stepcheckitem_code).name
            }}
            </div>
          </template>
        </el-table-column>
        <el-table-column
          prop="required"
          width="85"
          label="是否必填"
        >
          <template slot-scope="{row}">
            <el-select
              v-if="row.isVisible===1"
              v-model="row.required"
              filterable
              placeholder="请选择"
            >
              <el-option
                v-for="item in whetherOrNot"
                :key="item.code"
                :label="item.name"
                :value="item.code"
              />
            </el-select>
            <div v-else>{{ row.required === 'Y' ? '是' : '否' }}</div>
          </template>
        </el-table-column>
        <el-table-column
          prop="numberjudge"
          width="85"
          label="数值判定"
        >
          <template slot-scope="{row}">
            <el-select
              v-if="row.isVisible===1"
              v-model="row.numberjudge"
              filterable
              placeholder="请选择"
              @change="val=>szpdChange(val,row)"
            >
              <el-option
                v-for="item in whetherOrNot"
                :key="item.code"
                :label="item.name"
                :value="item.code"
              />
            </el-select>
            <div v-else>{{ row.numberjudge === 'Y' ? '是' : '否' }}</div>
          </template>
        </el-table-column>
        <el-table-column
          prop="unit"
          label="单位"
        >
          <template slot-scope="{row}">
            <!--            <el-select-->
            <!--              v-if="row.isVisible===1"-->
            <!--              v-model="row.unit"-->
            <!--              filterable-->
            <!--              :disabled="row.numberjudge==='N'"-->
            <!--              placeholder="请选择"-->
            <!--            >-->
            <!--              <el-option-->
            <!--                v-for="item in UomSelectArr"-->
            <!--                :key="item.code"-->
            <!--                :label="item.name"-->
            <!--                :value="item.code"-->
            <!--              />-->
            <!--            </el-select>-->
            <!--            <div v-if="row.isVisible===0">{{-->
            <!--                row.numberjudge === 'Y' ? UomSelectArr.find(i => i.code === row.unit).name : '/'-->
            <!--              }}-->
            <!--            </div>-->
            <el-input
              v-if="row.isVisible===1"
              v-model="row.unit"
              placeholder="请选择"
              :disabled="row.numberjudge==='N'"
            />
            <div v-else>{{ row.unit ? row.unit : '/' }}</div>
          </template>
        </el-table-column>
        <el-table-column
          prop="decimalnum"
          width="85"
          label="小数位数"
        >
          <template slot-scope="{row}">
            <!--            <el-select-->
            <!--              v-if="row.isVisible===1"-->
            <!--              v-model="row.decimalnum"-->
            <!--              filterable-->
            <!--              placeholder="请选择"-->
            <!--            >-->
            <!--              <el-option-->
            <!--                v-for="item in PartSelectArr"-->
            <!--                :key="item.partname"-->
            <!--                :label="item.partcode"-->
            <!--                :value="item.partname"-->
            <!--              />-->
            <!--            </el-select>-->
            <el-input
              v-if="row.isVisible===1"
              v-model="row.decimalnum"
              :disabled="row.numberjudge==='N'"
              oninput="value=value.replace(/[^0-9]/g,'')"
              placeholder="请输入"
            />
            <div v-else>{{ row.numberjudge === 'Y' ? row.decimalnum : '/' }}</div>
          </template>
        </el-table-column>
        <el-table-column
          prop="standvalue"
          label="标准值"
        >
          <template slot-scope="{row}">
            <el-input
              v-if="row.isVisible===1"
              v-model="row.standvalue"
              :disabled="row.numberjudge==='N'"
              oninput="value=value.replace(/[^0-9.]/g,'')"
              placeholder="请输入"
            />
            <div v-else>{{ row.standvalue ? row.standvalue : '/' }}</div>
          </template>
        </el-table-column>
        <el-table-column
          prop="uppervalue"
          label="上限值"
        >
          <template slot-scope="{row}">
            <el-input
              v-if="row.isVisible===1"
              v-model="row.uppervalue"
              :disabled="row.numberjudge==='N'"
              oninput="value=value.replace(/[^0-9.]/g,'')"
              placeholder="请输入"
            />
            <div v-else>{{ row.uppervalue ? row.uppervalue : '/' }}</div>
          </template>
        </el-table-column>
        <el-table-column
          prop="lowervalue"
          label="下限值"
        >
          <template slot-scope="{row}">
            <el-input
              v-if="row.isVisible===1"
              v-model="row.lowervalue"
              :disabled="row.numberjudge==='N'"
              oninput="value=value.replace(/[^0-9.]/g,'')"
              placeholder="请输入"
            />
            <div v-else>{{ row.lowervalue ? row.lowervalue : '/' }}</div>
          </template>
        </el-table-column>
        <el-table-column
          prop="stepcheckitem_desc"
          label="描述"
          show-tooltip-when-overflow
        >
          <template slot-scope="{row}">
            <el-input
              v-if="row.isVisible===1"
              v-model="row.stepcheckitem_desc"
              placeholder="请输入"
            />
            <div v-else>{{ row.stepcheckitem_desc ? row.stepcheckitem_desc : '/' }}</div>
          </template>
        </el-table-column>
        <el-table-column
          v-if="operation!=='check'"
          label="操作"
          width="120"
          fixed="right"
        >
          <template slot-scope="{row}">
            <div class="operationClass">
              <el-button v-if="row.isVisible===1" v-waves type="text" @click="saveZjlbRow(row)">确认</el-button>
              <el-button v-if="row.isVisible===1&&isCancel" v-waves type="text" @click="cancelZjlbRow(row)">取消
              </el-button>
              <el-button v-if="row.isVisible!==1" v-waves type="text" @click="editZjlbRow(row)">编辑</el-button>
              <el-button v-if="row.isVisible!==1" v-waves type="text" @click="delZjlbRow(row)">删除</el-button>
            </div>
          </template>
        </el-table-column>
      </el-table>
      <span slot="footer" class="dialog-footer">
        <div class="footerButton">
          <el-button v-if="operation!=='check'" v-waves @click="dialogVisibleCancel">取 消</el-button>
          <el-button
            v-if="operation!=='check'"
            v-waves
            :loading="$store.state.app.buttonIsDisabled"
            :disabled="$store.state.app.buttonIsDisabled"
            type="primary"
            @click="dialogVisibleConfirm"
          >保 存</el-button>
          <el-button v-if="operation==='check'" v-waves @click="dialogVisibleCancel">返 回</el-button>
        </div>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import Pagination from '@/components/Pagination'
import { validateCode } from '@/utils/global'
import elDragDialog from '@/directive/el-drag-dialog'
import waves from '@/directive/waves'
import {
  QualityInspectionAddEditSave,
  QualityInspectionDelete,
  QualityInspectionSearch, QualityInspectionSeeEdit, QualityStepCheckItemSelect
} from '@/api/QualityManagement'
import TableColumnSettings from '@/components/TableColumnSettings'
import { PartSelect, TMaterielClassTree } from '@/api/ProductModel'
import { StepData } from '@/api/GeneralBasicData'
export default {
  name: 'QualityPlaning'
  name: 'Zzjg',
  components: {
    Pagination, TableColumnSettings
  },
  directives: { elDragDialog, waves },
  data() {
    return {
      mouseHoverType: 'mouseout',
      isExpandForm: false,
      mainHeight: 0,
      tableHeight: 0,
      form: {
        qualityinsptcode: '', // 质检方案编码
        qualityinsptname: '', // 质检方案名称
        status: '', // 有效状态
        checktype: '', // 质检类型
        sampltype: '', // 抽样方式
        suitobject: '', // 适用对象
        prop: 'lm_date', // 排序字段
        order: 'desc', // 排序字段
        page: 1, // 第几页
        rows: 20 // 每页多少条
      },
      checktypeArr: [
        // { code: 'InCheck', name: '入厂检验' },
        // { code: 'OutCheck', name: '出厂检验' },
        { code: 'FirstCheck', name: '首检' },
        { code: 'PatroCheck', name: '巡检' },
        { code: 'EndCheck', name: '完工检' }
      ],
      sampltypeArr: [
        { code: 'FIXED', name: '固定抽检' },
        { code: 'SCARE', name: '比例抽检' }
      ],
      suitobjectArr: [
        { code: 'P', name: '物料' },
        { code: 'PY', name: '物料类型' }
      ],
      total: 10,
      tableData: [],
      tableColumnSettingsArray: [
        // { minWidth: 50, width: false, prop: 'id', label: 'id', id: 1, show: false, fixed: false, sortable: false }, // 隐藏列  show: false隐藏,true显示
        { minWidth: 25, width: 50, prop: 'rowNum', label: '序号', id: 2, show: true, fixed: 'left', sortable: false }, // custom
        {
          minWidth: 130,
          width: false,
          prop: 'code',
          label: '质检方案编码',
          id: 3,
          show: true,
          fixed: false,
          sortable: true
        },
        {
          minWidth: 130,
          width: false,
          prop: 'name',
          label: '质检方案名称',
          id: 4,
          show: true,
          fixed: false,
          sortable: true
        },
        {
          minWidth: 110,
          width: false,
          prop: 'status',
          label: '有效状态',
          id: 5,
          show: true,
          fixed: false,
          sortable: true
        }, {
          minWidth: 110,
          width: false,
          prop: 'checktype',
          label: '质检类型',
          id: 6,
          show: true,
          fixed: false,
          sortable: true
        }, {
          minWidth: 110,
          width: false,
          prop: 'sampmethod',
          label: '抽样方式',
          id: 7,
          show: true,
          fixed: false,
          sortable: true
        },
        {
          minWidth: 110,
          width: false,
          prop: 'suitobject',
          label: '适用对象',
          id: 8,
          show: true,
          fixed: false,
          sortable: true
        },
        {
          minWidth: false,
          width: 110,
          prop: 'stepcode',
          label: '工序编码',
          id: 9,
          show: false,
          fixed: false,
          sortable: true
        }, {
          minWidth: 110,
          width: false,
          prop: 'stepname',
          label: '工序名称',
          id: 10,
          show: true,
          fixed: false,
          sortable: true
        },
        {
          minWidth: false,
          width: 110,
          prop: 'username',
          label: '创建人员',
          id: 11,
          show: true,
          fixed: false,
          sortable: true
        },
        {
          minWidth: false,
          width: 160,
          prop: 'lm_date',
          label: '创建时间',
          id: 12,
          show: true,
          fixed: false,
          sortable: true
        }
      ],
      tableTimeStampKey: new Date().getTime(), // 表格key
      dialogVisible: false,
      dialogForm: {
        qualityinsptcode: '', // 质检方案编码
        qualityinsptname: '', // 质检方案名称
        status: 'Y', // 有效状态
        checktype: 'FirstCheck', // 检验类型
        sampmethod: 'FIXED', // 抽检方式
        sampnum: '', // 样本数量
        sampscale: '', // 抽检比例
        suitobject: 'P', // 适用对象
        suitpart: [], // 适用物料
        stepcode: '', // 工序
        descr: '' // /描述
      },
      operation: '',
      dialogFormRules: {
        status: [
          { required: true, message: '请输入选择类型', trigger: ['blur', 'change'] }
        ],
        qualityinsptcode: [
          { required: true, validator: validateCode, trigger: ['blur', 'change'] }
        ],
        qualityinsptname: [
          { required: true, message: '请输入质检方案名称', trigger: ['blur', 'change'] }
        ],
        checktype: [
          { required: true, message: '请选择质检方式', trigger: ['blur', 'change'] }
        ],
        sampmethod: [
          { required: true, message: '请选择抽样方式', trigger: ['blur', 'change'] }
        ],
        sampnum: [
          { required: true, message: '请输入样本数量', trigger: ['blur', 'change'] }
        ],
        sampscale: [
          { required: true, message: '请输入抽检比例', trigger: ['blur', 'change'] }
        ],
        suitobject: [
          { required: true, message: '请选择适用对象', trigger: ['blur', 'change'] }
        ],
        suitpart: [
          { required: true, message: '请选择物料或物料类别', trigger: ['blur', 'change'] }
        ],
        stepcode: [
          { required: true, message: '请选择工序名称', trigger: ['blur', 'change'] }
        ]
      },
      checkitem: [],
      whetherOrNot: [ // 是或否
        { code: 'Y', name: '是' },
        { code: 'N', name: '否' }
      ],
      PartSelectArr: [], // 物料下拉数组
      StockTypeSelectArr: [], // 物料类别下拉数组
      UomSelectArr: [], // 单位下拉数组
      CheckItemSelectAllArr: [], // 检验项目(所有)
      CheckItemSelectArr: [], // 检验项目
      StepSelectArr: [], // 工序名称下拉所有
      isCancel: true// 是否可取消
    }
  },
  created() {
    this.handleRequest()
  },
  mounted() {
    window.addEventListener('resize', this.getHeight)
    this.getHeight()
  },
  methods: {
    tableColumnUpdate(val, isCopyTrue) {
      if (isCopyTrue) {
        this.tableColumnSettingsArray = val
      }
      this.tableTimeStampKey = new Date().getTime()
      this.$refs.tableDataRef.doLayout()
    },
    handleRequest() {
      this.getQualityInspectionSearch().then(res => {
        if (res.code === '200') {
          // this.getUomSelect()
          this.getStepCheckItemSelect()
          this.getPartSelect()
          this.getStockTypeSelect()
          this.getStepSelect()
        }
      })
    },
    async getStepSelect() {
      const { data: res } = await StepData()
      this.StepSelectArr = res
    },
    async getQualityInspectionSearch() {
      const res = await QualityInspectionSearch(this.form)
      this.tableData = res.data
      this.total = res.count
      return { code: res.code }
    },
    // 排序改变时
    sortChange({ column, prop, order }) {
      if (order === 'descending') {
        order = 'desc'
      } else if (order === 'ascending') {
        order = 'asc'
      } else {
        order = 'desc'
      }
      this.form.order = order
      this.form.prop = prop
      this.getQualityInspectionSearch()
    },
    // 查询
    search() {
      this.getQualityInspectionSearch()
    },
    // 重置
    reset() {
      this.form.qualityinsptcode = ''
      this.form.qualityinsptname = ''
      this.form.status = ''
      this.form.checktype = ''
      this.form.sampltype = ''
      this.form.suitobject = ''
      this.getQualityInspectionSearch()
    },
    // 新增按钮
    add(operation) {
      this.operation = operation
      this.dialogVisible = true
    },
    // 查看
    async check(operation, row) {
      this.operation = operation
      this.dialogVisible = true
      const { data: res } = await QualityInspectionSeeEdit({ qualityinsptcode: row.code })
      this.$nextTick(() => {
        this.dialogForm.qualityinsptcode = row.code
        this.dialogForm.qualityinsptname = row.name
        this.dialogForm.status = row.status
        this.dialogForm.stepcode = row.stepcode
        this.dialogForm.checktype = row.checktype
        this.dialogForm.sampmethod = row.sampmethod
        // this.dialogForm.sampscare =  row.sampscare
        if (this.dialogForm.sampmethod === 'FIXED') {
          this.dialogForm.sampnum = row.sampscare
        } else {
          this.dialogForm.sampscale = row.sampscare
        }
        this.dialogForm.suitobject = row.suitobject
        this.dialogForm.suitpart = row.suitpart.split(',')
        this.dialogForm.descr = row.descr
        this.checkitem = res
        this.$refs.tableDataRef2.doLayout()
      })
    },
    // 修改按钮
    async edit(operation, row) {
      this.operation = operation
      this.dialogVisible = true
      const { data: res } = await QualityInspectionSeeEdit({ qualityinsptcode: row.code })
      const tempCodeArr = []
      res.forEach(i => {
        let number = Math.random() * Math.random()// 作为删除时的标识符
        number = number === 0 ? (10 + Math.random()) : number
        i.number = number
        i.isVisible = 0
        tempCodeArr.push(i.stepcheckitem_code)
      })
      this.CheckItemSelectArr = []
      this.CheckItemSelectAllArr.forEach(i => {
        if (!tempCodeArr.includes(i.code)) {
          this.CheckItemSelectArr.push(i)
        }
      })
      this.$nextTick(() => {
        this.dialogForm.qualityinsptcode = row.code
        this.dialogForm.qualityinsptname = row.name
        this.dialogForm.status = row.status
        this.dialogForm.stepcode = row.stepcode
        this.dialogForm.checktype = row.checktype
        this.dialogForm.sampmethod = row.sampmethod
        if (this.dialogForm.sampmethod === 'FIXED') {
          this.dialogForm.sampnum = row.sampscare
        } else {
          this.dialogForm.sampscale = row.sampscare
        }
        this.dialogForm.suitobject = row.suitobject
        this.dialogForm.suitpart = row.suitpart.split(',')
        this.dialogForm.descr = row.descr
        this.checkitem = res
        // console.log(this.checkitem, 2)
        this.$refs.tableDataRef2.doLayout()
      })
    },
    // 删除按钮
    async del(row) {
      this.$confirm('是否确认删除?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        QualityInspectionDelete({ qualityinsptcode: row.code }).then(res => {
          if (res.code === '200') {
            this.$message.success('删除成功!')
            if (this.form.page > 1 && this.tableData.length === 1) {
              this.form.page--
            }
            this.getQualityInspectionSearch()
          }
        })
      }).catch(() => {
        this.$message.info('已取消删除')
      })
    },
    // 物料下拉
    async getPartSelect() {
      const { data: res } = await PartSelect()
      this.PartSelectArr = res
    },
    // 物料类别下拉
    async getStockTypeSelect() {
      const { data: res } = await TMaterielClassTree()
      this.StockTypeSelectArr = res
    },
    // 适用对象值改变是
    suitobjectChange() {
      this.dialogForm.suitpart = []
    },
    // 获取检验项目下拉接口
    async getStepCheckItemSelect() {
      const { data: res } = await QualityStepCheckItemSelect()
      res.forEach(i => {
        this.CheckItemSelectArr.push({
          code: i.code,
          name: i.name + ' / ' + i.code,
          descr: i.descr
        })
      })
      this.CheckItemSelectAllArr = JSON.parse(JSON.stringify(this.CheckItemSelectArr))
    },
    // 数值判定
    szpdChange(val, row) {
      if (val === 'N') {
        row.unit = ''
        row.decimalnum = ''
        row.standvalue = ''
        row.uppervalue = ''
        row.lowervalue = ''
      }
    },
    // 表格值改变时
    tableChange(val, row) {
      console.log(val, row)
    },
    // 质检列表  新增行
    addZjlb() {
      if (this.checkitem.find(i => i.isVisible === 1)) {
        return this.$message.info('请先保存当前行数据!')
      }
      let number = Math.random() * Math.random()// 作为删除时的标识符
      number = number === 0 ? (10 + Math.random()) : number
      this.checkitem.push({
        number,
        isVisible: 1,
        // jyxmbm: '',
        // jyxmmc: '',
        stepcheckitem_code: '', // 检验项目编码
        required: 'Y', // 是否必填
        numberjudge: 'Y', // 是否数值判断
        unit: '', // 单位
        decimalnum: '', // 小数位数
        standvalue: '', // 标准值
        uppervalue: '', // 上限值
        lowervalue: '', // 下限值
        stepcheckitem_desc: ''// 检验项目描述
      })
    },
    // 删除质检列表行
    delZjlbRow(row) {
      const t = this.CheckItemSelectAllArr.find(i => i.code === row.stepcheckitem_code)
      this.CheckItemSelectArr.unshift(t)
      this.checkitem = this.checkitem.filter(i => i.number !== row.number)
    },
    // 保存行
    saveZjlbRow(row) {
      if (!row.stepcheckitem_code) {
        return this.$message.info('检验项目不能为空!')
      }
      if (row.numberjudge === 'Y' && !row.unit) {
        return this.$message.info('单位不能为空!')
      }
      if (row.numberjudge === 'Y' && !row.decimalnum) {
        return this.$message.info('小数位数不能为空!')
      }
      if (row.numberjudge === 'Y') {
        if (!row.standvalue && !row.uppervalue && !row.lowervalue) {
          return this.$message.info('标准值、上限值、下限值其中一项不能为空!')
        }
      }
      this.CheckItemSelectArr = this.CheckItemSelectArr.filter(i => i.code !== row.stepcheckitem_code)
      row.isVisible = 0
      this.isCancel = true
    },
    // 取消行
    cancelZjlbRow(row) {
      this.checkitem = this.checkitem.filter(i => i.number !== row.number)
    },
    // 编辑行
    editZjlbRow(row) {
      if (this.checkitem.find(i => i.isVisible === 1)) {
        return this.$message.info('请先保存当前行数据!')
      }
      row.isVisible = 1
      this.isCancel = false
      const t = this.CheckItemSelectAllArr.find(i => i.code === row.stepcheckitem_code)
      this.CheckItemSelectArr.unshift(t)
    },
    // 对话框关闭事件
    handleClose() {
      this.dialogForm = {
        qualityinsptcode: '',
        qualityinsptname: '',
        status: 'Y',
        checktype: 'FirstCheck',
        sampmethod: 'FIXED',
        sampnum: '',
        stepcode: '',
        sampscale: '',
        suitobject: 'P',
        suitpart: [],
        descr: ''
      }
      this.isCancel = true
      this.checkitem = []
      this.CheckItemSelectArr = JSON.parse(JSON.stringify(this.CheckItemSelectAllArr))
      this.$refs.dialogForm.clearValidate()
    },
    // 对话框取消
    dialogVisibleCancel() {
      this.dialogVisible = false
    },
    // 对话框确认
    dialogVisibleConfirm() {
      this.$refs.dialogForm.validate(valid => {
        if (valid) {
          if (this.checkitem.length < 1) {
            return this.$message.info('质检列表不能为空!')
          }
          const checkitem = []
          this.checkitem.forEach((item, index) => {
            checkitem.push({
              stepcheckitem_seq: index + 1,
              stepcheckitem_code: item.stepcheckitem_code,
              stepcheckitem_desc: item.stepcheckitem_desc,
              required: item.required,
              numberjudge: item.numberjudge,
              unit: item.unit,
              decimalnum: item.decimalnum,
              standvalue: item.standvalue,
              uppervalue: item.uppervalue,
              lowervalue: item.lowervalue
            })
          })
          const data = {
            qualityinsptcode: this.dialogForm.qualityinsptcode,
            qualityinsptname: this.dialogForm.qualityinsptname,
            status: this.dialogForm.status,
            stepcode: this.dialogForm.checktype === 'InCheck' || this.dialogForm.checktype === 'OutCheck' ? '' : this.dialogForm.stepcode,
            checktype: this.dialogForm.checktype,
            sampmethod: this.dialogForm.sampmethod,
            sampscare: this.dialogForm.sampnum ? this.dialogForm.sampnum : this.dialogForm.sampscale,
            suitobject: this.dialogForm.suitobject,
            suitpart: this.dialogForm.suitpart.join(','),
            type: this.operation === 'add' ? 'Add' : 'Update',
            descr: this.dialogForm.descr,
            checkitem
          }
          this.$store.state.app.buttonIsDisabled = true
          QualityInspectionAddEditSave(data).then(res => {
            if (res.code === '200') {
              this.$message.success(this.operation === 'add' ? '保存成功!' : '修改成功!')
              this.dialogVisible = false
              this.getQualityInspectionSearch()
              this.$store.state.app.buttonIsDisabled = false
            } else {
              this.$message.error(this.operation === 'add' ? '保存失败!' : '修改失败!')
            }
          })
        }
      })
    },
    // 获取页面高度
    getHeight() {
      this.$nextTick(() => {
        this.mainHeight = window.innerHeight - 85
        this.tableHeight = this.mainHeight - 255
        this.$refs.tableDataRef.doLayout()
      })
    },
    tableRowClassName({ row, rowIndex }) {
      return 'custom-row'
    }
  }
}
</script>
<style scoped>
<style scoped lang="scss">
::v-deep .el-select__caret {
  display: flex;
  align-items: center;
  justify-content: center;
}
</style>