loulijun2021
2022-10-29 e713b378b01d189f972cfb5b9eae749ee95a8b51
src/views/zlgl/gxjy.vue
@@ -1,53 +1,61 @@
<template>
  <div>
    <div class="body" :style="{height:mainHeight+'px'}">
      <div style="margin-left: 10px;margin-top:10px;display: flex;flex-direction: column">
      <div style="padding-top: 10px;display: flex;flex-direction: column">
        <div style="margin-bottom: 15px;font-size: 14px">
          <i class="el-icon-s-operation" style="color:#42b983; margin-right: 5px" />扫码信息
        </div>
        <div style="display: flex;align-items: center">
          <div style="width: 90px;display: flex"><div style="color: red;width:10px">*</div>扫描条码:</div>
          <div style="width: 90px;display: flex">
            <div style="color: red;width:10px">*</div>
            扫描条码:
          </div>
          <el-input
            v-model="form.orderstepqrcode"
            name="GXproduceCode"
            style="width: 300px"
            @keyup.enter.native="val=>enterNative(val,'GXproduceCode')"
          />
          <!--          @keyup.native="e=>judgeIsScanning(e,'GXproduceCode')"-->
        </div>
        <!--        六项信息      -->
        <div v-if="!isIpad" style="display:flex;margin-top: 10px;align-items: center; line-height: 50px">
          <div style="display: flex;">
        <div v-if="!isIpad" style="background:#f8f8fa ;display:flex;margin-top: 10px;align-items: center; line-height: 50px">
          <div style="display: flex; margin-left: 10px">
            <div style="display: flex;margin-right: 50px">
              <div style="width: 90px">工单编码:</div>
              <div style="width: 200px">{{ form.wo_code }}</div>
              <div style="width: 150px">{{ form.wo_code }}</div>
            </div>
            <div style="display: flex;">
              <div style="width: 90px">产品编码:</div>
              <div style="width: 100px">{{ form.partcode }}</div>
              <div style="width: 150px">{{ form.partcode }}</div>
            </div>
          </div>
          <div style="display: flex;margin-left: 30px;">
            <div style="display: flex;margin-right: 50px">
              <div style="width: 90px">产品名称:</div>
              <div style="width: 100px">{{ form.partname }}</div>
              <div style="width: 150px">{{ form.partname }}</div>
            </div>
            <div style="display: flex;">
              <div style="width: 90px">产品规格:</div>
              <div style="width: 100px">{{ form.partspec }}</div>
              <div style="width: 150px">{{ form.partspec }}</div>
            </div>
          </div>
          <div style=" display: flex;margin-left: 30px;">
            <div style="display: flex;margin-right: 50px">
              <div style="width: 90px">工序编码:</div>
              <div style="width: 100px">{{ form.stepcode }}</div>
              <div style="width: 150px">{{ form.stepcode }}</div>
            </div>
            <div style="display: flex;">
              <div style="width: 90px">工序名称:</div>
              <div style="width: 100px">{{ form.stepname }}</div>
              <div style="width: 150px">{{ form.stepname }}</div>
            </div>
          </div>
        </div>
        <div v-if="isIpad" style="display:flex;margin-top: 10px;align-items: center;line-height: 30px; flex-direction: column">
        <div
          v-if="isIpad"
          style="display:flex;margin-top: 10px;align-items: center;line-height: 30px; flex-direction: column"
        >
          <div style="display: flex; justify-content: flex-start;width: 100%">
            <div style="display: flex;margin-right: 50px">
              <div style="width: 90px">工单编码:</div>
@@ -83,7 +91,10 @@
          <i class="el-icon-s-operation" style="color:#42b983; margin-right: 5px" />检验标准信息
        </div>
        <div style="display: flex;align-items: center">
          <div style="width: 90px;display: flex"><div style="color: red;width:10px">*</div>检验标准:</div>
          <div style="width: 90px;display: flex">
            <div style="color: red;width:10px">*</div>
            检验标准:
          </div>
          <el-select
            v-model="checkStandard"
            style="width: 200px;"
@@ -98,7 +109,10 @@
              :value="item.code"
            />
          </el-select>
          <div style="width: 90px;margin-left: 50px;display: flex"><div style="color: red;width:10px">*</div>检验人员:</div>
          <div style="width: 90px;margin-left: 50px;display: flex">
            <div style="color: red;width:10px">*</div>
            检验人员:
          </div>
          <el-select
            v-model="checkUser"
            style="width: 200px;"
@@ -112,7 +126,42 @@
              :value="item.usercode"
            />
          </el-select>
          <div style="width: 90px;margin-left: 50px;display: flex">
            <div style="color: red;width:10px">*</div>
            检验数量:
          </div>
          <el-input v-model="checkqty" oninput="value=value.replace(/[^0-9]/g,'')" style="width: 200px" />
        </div>
        <!--   检验结果   和  检验备注      -->
        <div style="display: flex;margin-top: 20px;align-items: center">
          <div style="display: flex;margin-right: 50px;align-items: center">
            <div style="width: 90px;display: flex">
              <div style="color: red;width:10px">*</div>
              检验结果:
            </div>
            <el-select
              v-model="checkResult"
              style="width: 200px;"
              placeholder="请选择"
              filterable
            >
              <el-option
                v-for="item in checkResultSelect"
                :key="item.code"
                :label="item.name"
                :value="item.code"
              />
            </el-select>
          </div>
          <div style="display: flex;align-items: center">
            <div style="width: 90px">检验备注:</div>
            <el-input v-model="checkdescr" style="width: 540px" placeholder="请输入" />
          </div>
        </div>
        <div style="margin: 15px 0;font-size: 14px">
          <i class="el-icon-s-operation" style="color:#42b983; margin-right: 5px" />检验项信息
        </div>
@@ -123,14 +172,13 @@
          <el-table
            ref="multipleTable"
            :data="JYTableData"
            :height="(tableHeight-195)+'px'"
            :height="tableHeight+'px'"
            border
            stripe
            :row-class-name="tableRowClassName"
            :style="{width: 100+'%',height:tableHeight+'px',}"
            highlight-current-row
            :header-cell-style="this.$headerCellStyle"
            :cell-style="this.$cellStyle"
            :row-class-name="tableRowClassName"
            @selection-change="handleSelectionChange"
            @cell-dblclick="cellDblclick"
          >
@@ -138,39 +186,82 @@
              type="index"
              label="序号"
              width="100"
              fixed
            />
            <!--            <el-table-column-->
            <!--              prop="code"-->
            <!--              label="检验项目编码"-->
            <!--              sortable="custom"-->
            <!--            />-->
            <!--              label="检验项目编码(名称)"-->
            <!--            >-->
            <!--              <template slot-scope="{row}">-->
            <!--                <div v-if="row.isVisible===0" style="display: flex;">-->
            <!--                  <div>{{ row.code }}</div>-->
            <!--                  <div style="margin-left: 10px">{{ row.name }}</div>-->
            <!--                </div>-->
            <!--                <el-select-->
            <!--                  v-if="row.isVisible===1"-->
            <!--                  v-model="row.code"-->
            <!--                  filterable-->
            <!--                  style="width: 400px;"-->
            <!--                  placeholder="请选择"-->
            <!--                  @change="val=>changeCode(val,row)"-->
            <!--                >-->
            <!--                  <el-option-->
            <!--                    v-for="item in JYSelectArr"-->
            <!--                    :key="item.code"-->
            <!--                    :label="item.code+''+item.name"-->
            <!--                    :value="item.code"-->
            <!--                  />-->
            <!--                </el-select>-->
            <!--              </template>-->
            <!--            </el-table-column>-->
            <el-table-column
              prop="code"
              label="检验项目编码(名称)"
              label="检验标准编码"
            >
              <template slot-scope="{row}">
                <div v-if="row.isVisible===0" style="display: flex;">
                  <div>{{ row.code }}</div>
                  <div style="margin-left: 10px">{{ row.name }}</div>
                </div>
                <div v-if="row.isVisible===0">{{ row.code }}</div>
                <el-select
                  v-if="row.isVisible===1"
                  v-model="row.code"
                  filterable
                  style="width: 400px;"
                  style="width: 200px;"
                  placeholder="请选择"
                  @change="val=>changeCode(val,row)"
                  @change="val=>changeName(val,row)"
                >
                  <el-option
                    v-for="item in JYSelectArr"
                    :key="item.name"
                    :label="item.code"
                    :value="item.name"
                  />
                </el-select>
              </template>
            </el-table-column>
            <el-table-column
              prop="name"
              label="检验标准名称"
            >
              <template slot-scope="{row}">
                <div v-if="row.isVisible===0">{{ row.name }}</div>
                <el-select
                  v-if="row.isVisible===1"
                  v-model="row.name"
                  style="width: 200px;"
                  placeholder="请选择"
                  @change="val=>changeName(val,row)"
                >
                  <el-option
                    v-for="item in JYSelectArr"
                    :key="item.code"
                    :label="item.code+''+item.name"
                    :label="item.name"
                    :value="item.code"
                  />
                </el-select>
              </template>
            </el-table-column>
            <el-table-column
              prop="stepcheckitem_desc"
              label="检验标准描述"
@@ -184,7 +275,8 @@
                />
                <div
                  v-else
                > {{ scope.row.stepcheckitem_desc }}</div>
                > {{ scope.row.stepcheckitem_desc }}
                </div>
              </template>
            </el-table-column>
@@ -229,6 +321,7 @@
            <el-table-column
              label="操作"
              fixed="right"
            >
              <template slot-scope="{row}">
                <div class="operationClass">
@@ -239,31 +332,6 @@
              </template>
            </el-table-column>
          </el-table>
        </div>
        <!--   检验结果   和  检验备注      -->
        <div style="display: flex;margin-top: 20px;align-items: center">
          <div style="display: flex;margin-right: 50px;align-items: center">
            <div style="width: 90px;display: flex"><div style="color: red;width:10px">*</div>检验结果:</div>
            <el-select
              v-model="checkResult"
              style="width: 200px;"
              placeholder="请选择"
              filterable
            >
              <el-option
                v-for="item in checkResultSelect"
                :key="item.code"
                :label="item.name"
                :value="item.code"
              />
            </el-select>
          </div>
          <div style="display: flex;align-items: center">
            <div style="width: 90px">检验备注:</div>
            <el-input v-model="checkdescr" style="width: 300px" placeholder="请输入" />
          </div>
        </div>
        <div style="display: flex;margin: 30px 0;align-items: center">
@@ -290,6 +358,7 @@
  StepCheckItemSelect
} from '@/api/zlgl'
import { MesOrderSelectUser } from '@/api/scgl'
import { getCookie } from '@/utils/auth'
export default {
  name: 'QXDY',
@@ -313,7 +382,8 @@
      },
      checkStandard: '', // 检验标准
      checkStandardSelect: [], // 检验标准下拉数组
      checkUser: '', // 检验人员
      checkUser: getCookie('navTabId'), // 检验人员
      checkqty: 0, // 检验数量
      checkUserSelect: [], // 检验人员下拉数组
      checkResult: '', // 检验结果
      checkResultSelect: [
@@ -324,11 +394,13 @@
      JYTableData: [], // 检验项信息表格
      JYSelectArr: [], // 检验下拉数组
      JYSelectedArr: [], // 已选检验项目数组
      // JYSelectedArr: [], // 已选检验项目数组
      JYIsCancel: true,
      multipleSelection: [], // 表格多选框
      tabClickIndex: null, // 点击的单元格
      tabClickLabel: '', // 当前点击的列名
      isCancel: false// 是否点击取消按钮
      isCancel: false, // 是否点击取消按钮
      judgeIsScanningArr: []// 判断是否扫码数组
    }
  },
  created() {
@@ -374,10 +446,14 @@
    },
    // 检验标准下拉值改变
    async changeCheckStandard(val) {
      await this.getJYSelectArr()
      this.isCancel = false
      this.JYSelectedArr = []
      const { data: res } = await MesOrderStepCheckItemList({ checkstandcode: val })
      this.JYTableData = res
      // let arr = […b].filter(x => […a].every(y => y.id !== x.id));
      this.JYSelectArr = [...this.JYSelectArr].filter(x => [...this.JYTableData].every(y => y.code !== x.code))
      this.JYTableData.forEach(item => {
        let number = Math.random() * Math.random()// 作为删除时的标识符
@@ -388,7 +464,6 @@
        item.isVisible = 0
        item.number = number
        this.JYSelectedArr.push(item.code)
      })
      this.$refs.multipleTable.toggleAllSelection()
    },
@@ -420,9 +495,49 @@
      }
    },
    // 检验项目编码(名称)
    changeCode(val, row) {
      row.stepcheckitem_desc = this.JYSelectArr.find(it => it.code === val).descr
      row.name = this.JYSelectArr.find(it => it.code === val).name
    changeName(val, row) {
      const res = this.JYSelectArr.find(item => {
        return item.code === val || item.name === val
      })
      row.code = res.code
      row.name = res.name
      row.stepcheckitem_desc = res.descr
    },
    // 防抖      //扫码用的是防抖
    fnThrottle(method, delay, duration, belong) {
      var that = this
      var timer = this.timer
      var begin = new Date().getTime()
      return function() {
        var current = new Date().getTime()
        clearTimeout(timer)
        if (current - begin >= duration) {
          // method()
          // that.VALUE()
          begin = current
        } else {
          that.timer = setTimeout(function() {
            // method()
            that.enterNative(that.form.orderstepqrcode, belong)
          }, delay)
        }
      }
    },
    // 判断是否是扫码枪扫码
    judgeIsScanning(e, belong) {
      const timenow = e.timeStamp
      let flag = true
      this.judgeIsScanningArr.push(timenow)
      let i
      for (i in this.judgeIsScanningArr) {
        flag = Math.ceil(this.judgeIsScanningArr[this.judgeIsScanningArr.length - 1]) - Math.ceil(this.judgeIsScanningArr[this.judgeIsScanningArr.length - 2]) < 0.1
        if (i > 0 && this.judgeIsScanningArr.length === parseInt(i) + 1) {
          if (flag) {
            this.fnThrottle(this.enterNative, 500, 2000, belong)()
            return
          }
        }
      }
    },
    // 扫码键盘回车事件
    async enterNative(val, belong) {
@@ -439,6 +554,9 @@
    //  新增
    add() {
      if (this.JYTableData.length === 0) {
        return this.$message.info('请先选择检验标准!')
      }
      if (this.JYTableData.length > 0 && this.JYTableData[this.JYTableData.length - 1].isVisible === 1) {
        return this.$message.info('请先确定或取消本条记录!')
      }
@@ -448,19 +566,25 @@
      const data = { result: 'OK', code: '', name: '', stepcheckitem_desc: '', isVisible: 1, number }
      this.JYTableData.push(data)
      this.$refs.multipleTable.toggleRowSelection(data, true)
      this.JYIsCancel = false
    },
    //  确认
    confirm(row) {
      if (row.code === '') {
        return this.$message.info('检验项目编码(名称)不能为空!')
        return this.$message.info('检验项目编码不能为空!')
      }
      if (row.name === '') {
        return this.$message.info('检验项目名称不能为空!')
      }
      if (this.JYSelectedArr.find(item => item === row.code) !== undefined) {
        return this.$message.info('检验项目编码(名称)不能重复!')
      } else {
        this.JYSelectedArr.push(row.code)
      }
      this.JYSelectArr.forEach((item, index) => {
        if (item.code === row.code) {
          this.JYSelectArr.splice(index, 1)
        }
      })
      this.JYTableData.forEach((item, index) => {
        if (item.number === row.number) {
          item.isVisible = 0
@@ -485,24 +609,27 @@
        }
      })
      this.JYSelectedArr.forEach((item, index) => {
        if (item === row.code) {
          this.JYSelectedArr.splice(index, 1)
        }
      })
      if (this.JYIsCancel && row.code.toString().length > 0) {
        this.JYSelectArr.splice(0, 0, {
          code: row.code,
          name: row.name,
          descr: row.stepcheckitem_desc
        })
      }
      this.JYIsCancel = true
    },
    // 删除
    del(row) {
      this.JYSelectArr.splice(0, 0, {
        code: row.code,
        name: row.name,
        descr: row.stepcheckitem_desc
      })
      this.JYTableData.forEach((item, index) => {
        if (item.number === row.number) {
          this.JYTableData.splice(index, 1)
        }
      })
      this.JYSelectedArr.forEach((item, index) => {
        if (item === row.code) {
          this.JYSelectedArr.splice(index, 1)
        }
      })
    },
@@ -518,6 +645,9 @@
        if (this.checkUser.length < 1) {
          return this.$message.info('检验人员不能为空!')
        }
        if (parseFloat(this.checkqty) <= 0) {
          return this.$message.info('检验数量必须要大于零!')
        }
        if (this.JYTableData.length < 1) {
          return this.$message.info('检验项信息不能为空!')
        }
@@ -532,6 +662,7 @@
          type: 'warning'
        }).then(() => {
          const arr = []
          this.JYTableData = this.JYTableData.filter(item => item.code !== '')
          this.JYTableData.forEach((item, index) => {
            arr.push({
              code: item.code,
@@ -547,6 +678,7 @@
            'stepcode': this.form.stepcode, // 工序编码
            'checkstanedcode': this.checkStandard, // 检验标准编码
            'checkusercode': this.checkUser, // 检验人员编码
            'checkqty': this.checkqty, // 检验数量
            'checktypecode': val, // 检验类型编码
            'checkresult': this.checkResult, // 检验结果(OK(合格) NG(不良))
            'checkdescr': this.checkdescr, // 检验描述
@@ -557,6 +689,7 @@
              this.$message.success(text + '成功!')
              this.clearContent()
              this.getFocus()
              this.getJYSelectArr()
            }
          })
        }).catch(() => {
@@ -565,15 +698,16 @@
      } else {
        this.clearContent()
        this.getFocus()
        this.getJYSelectArr()
      }
    },
    // 清空页面内容
    clearContent() {
      this.JYTableData = []
      this.multipleSelection = []
      this.JYSelectedArr = []
      this.checkdescr = ''
      this.checkUser = ''
      this.checkUser = getCookie('navTabId')
      this.checkqty = 0
      this.checkResult = ''
      this.checkStandard = ''
      this.form.orderstepqrcode = ''
@@ -583,6 +717,8 @@
      this.form.partspec = ''
      this.form.stepcode = ''
      this.form.stepname = ''
      this.judgeIsScanningArr = []
      this.isCancel = true
    },
@@ -601,7 +737,8 @@
        //   this.tabClickIndex = row.index
        //   this.tabClickLabel = column.label
        //   break
        default: return
        default:
          return
      }
    },
    // 回车事件
@@ -612,14 +749,15 @@
    tableRowClassName({ row, rowIndex }) {
      // 把每一行的索引放进row
      row.index = rowIndex
      return 'custom-row'
    },
    // 获取页面高度
    getHeight() {
      this.$nextTick(() => {
        this.mainHeight = window.innerHeight - 250
        this.tableHeight = this.mainHeight - 100
        this.mainHeight = window.innerHeight - 85
        this.tableHeight = this.mainHeight - 450
        this.isIpad = window.innerHeight < 769
        this.isIpad = window.innerHeight < 769 && window.innerWidth < 1367
      })
    }
  }
@@ -627,30 +765,61 @@
</script>
<style lang="scss" scoped>
::v-deep .el-select .el-input .el-select__caret {
  display: flex;
  align-items: center;
  justify-content: center;
}
</style>
<!--公共页面样式-->
<style lang="scss" scoped>
$main_color: #42b983;
.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--default, .el-button--info {
  height: 34px;
  display: flex;
  align-items: center;
  padding: 0 15px;
}
::v-deep .el-button--primary {
  background-color: $main_color !important;
  height: 30px;
  display: flex;
  align-items: center;
  //border: 1px solid $main_color;
  border: none;
  padding: 0 20px;
  //background-color: $main_color !important;
}
::v-deep .el-button--primary:hover {
::v-deep .el-button--default {
  background-color: #f8f8fa;
  border: none;
}
::v-deep .el-button--info {
  height: 30px;
  display: flex;
  align-items: center;
  padding: 0 20px;
::v-deep .el-input__inner {
  height: 34px;
  line-height: 34px;
  //color: #a7a7a7;
}
::v-deep .el-pagination.is-background .el-pager li:not(.disabled).active {
  background-color: $main_color !important;
::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 {
@@ -658,106 +827,30 @@
  justify-content: flex-end;
}
.footerButton {
  display: flex;
  justify-content: end;
}
::v-deep .el-button--default {
  background-color: #ffffff !important;
  height: 30px;
  display: flex;
  align-items: center;
  padding: 0 20px;
}
::v-deep .el-button--default:hover {
  color: #606266;
}
::v-deep .el-dialog__body {
  padding: 20px 100px !important;
}
::v-deep .el-radio__input.is-checked .el-radio__inner {
  background-color: $main_color;
  border-color: $main_color;
}
::v-deep .el-radio__input.is-checked + .el-radio__label {
  color: $main_color !important;
}
::v-deep .el-checkbox__input.is-checked .el-checkbox__inner {
  border-color: $main_color;
  background-color: $main_color;
}
::v-deep .el-input__inner {
  height: 30px;
  line-height: 30px;
}
::v-deep .el-input__inner:focus {
  border-color: $main_color;
}
::v-deep .el-table .caret-wrapper {
  transform: scale(0.8);
}
::v-deep .cell {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
}
::v-deep .el-button--text {
  color: $main_color;
  font-size: 14px;
  cursor: pointer;
}
.operationClass {
  height: 23px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  justify-content: space-between;
}
.el-icon-share {
  color: $main_color;
  cursor: pointer;
::v-deep .el-table::before {
  height: 0;
}
.el-checkbox.is-bordered.is-checked {
  border-color: $main_color;
::v-deep .el-table__body-wrapper {
  background-color: #f8f8fa;
}
::v-deep .el-radio__input.is-checked .el-radio__inner {
  border-color: $main_color;
  background: $main_color;
::v-deep .el-table__body .el-table__row.hover-row td {
  background-color: #eaecef;
}
::v-deep .el-checkbox__input.is-indeterminate .el-checkbox__inner {
  border-color: $main_color;
  background: $main_color;
}
::v-deep .el-checkbox__input.is-checked + .el-checkbox__label {
  color: $main_color !important;
}
::v-deep .el-checkbox.is-bordered + .el-checkbox.is-bordered {
  margin: 10px 30px 0px 0;
}
::v-deep .el-radio__input.is-checked + .el-radio__label {
  color: $main_color;
}
::v-deep .el-radio.is-bordered + .el-radio.is-bordered {
  margin: 10px 30px 0px 0;
::v-deep .el-form--inline .el-form-item__label {
  color: #a7a7a7;
}
.body ::v-deep .el-divider {
@@ -770,29 +863,14 @@
  margin-bottom: 0;
}
::v-deep .el-input__inner:focus {
  border-color: $main_color;
.userDialogVisible ::v-deep .el-form-item {
  margin-bottom: 0;
}
::v-deep .el-select .el-input__inner:focus {
  border-color: $main_color;
}
</style>
<style>
::v-deep .el-select-dropdown__item.selected {
  color: $main_color;
}
::v-deep .el-checkbox__inner:hover {
  border-color: $main_color;
}
::v-deep .el-textarea__inner:focus {
  border-color: $main_color;
}
::v-deep .el-select .el-input .el-select__caret {
  display: flex;
  align-items: center;
  justify-content: center;
.el-table .custom-row {
  background: #f8f8fa;
}
</style>