loulijun2021
2023-09-26 63347dd76e7515abec15559a1b81349381a724fc
src/views/produce/stepReport.vue
@@ -286,104 +286,204 @@
      v-el-drag-dialog
      :title="dialogTitle"
      :visible.sync="dialogVisible"
      width="800px"
      width="1160px"
      :close-on-click-modal="false"
      top="15vh"
      top="7vh"
      @closed="handleClose"
      @close="handleClose"
    >
      <el-form ref="dialogForm" inline :rules="dialogFormRules" :model="dialogForm" label-width="80px">
      <el-form ref="dialogForm" inline :rules="dialogFormRules" :model="dialogForm" label-width="110px">
        <el-divider content-position="left">基本信息</el-divider>
        <el-form-item label="工单编号" class="dialogFormItem">
          <div class="dialogFormItemDiv">{{ dialogForm.wo_code }}</div>
          <!--          <el-input v-model="dialogForm.wo_code" style="width: 200px" />-->
        </el-form-item>
        <el-form-item label="产品编码" class="dialogFormItem">
          <div class="dialogFormItemDiv">{{ dialogForm.partnumber }}</div>
          <!--          <el-input v-model="dialogForm.partnumber" style="width: 200px" />-->
        </el-form-item>
        <el-form-item label="产品名称" class="dialogFormItem">
          <div class="dialogFormItemDiv">{{ dialogForm.partname }}</div>
          <!--          <el-input v-model="dialogForm.partname" style="width: 200px" />-->
        </el-form-item>
        <el-form-item label="规格型号" class="dialogFormItem">
          <div class="dialogFormItemDiv">{{ dialogForm.partspec }}</div>
          <!--          <el-input v-model="dialogForm.partspec" style="width: 200px" />-->
        </el-form-item>
        <el-form-item label="当前工序" class="dialogFormItem">
          <div class="dialogFormItemDiv">{{ dialogForm.stepname }}</div>
          <!--          <el-input v-model="dialogForm.stepname" style="width: 200px" />-->
        </el-form-item>
        <el-form-item label="下道工序" class="dialogFormItem">
          <div class="dialogFormItemDiv">{{ dialogForm.nextstepname }}</div>
          <!--          <el-input v-model="dialogForm.nextstepname" style="width: 200px" />-->
        </el-form-item>
        <el-form-item label="任务数量" class="dialogFormItem">
          <div class="dialogFormItemDiv">{{ dialogForm.planqty }}</div>
          <!--          <el-input v-model="dialogForm.planqty" style="width: 200px" />-->
        </el-form-item>
        <el-form-item label="未报/已报" class="dialogFormItem">
          <div class="dialogFormItemDiv">{{ dialogForm.noreportqty + '/' + dialogForm.reportqty }}</div>
          <!--          <el-input v-model="dialogForm.planqty" style="width: 200px" />-->
        </el-form-item>
        <el-form-item label="计件方式">
          <el-radio-group v-model="dialogForm.reckway" style="width: 200px;" @change="reckwayChange">
            <el-radio label="person">个人</el-radio>
            <el-radio label="group">班组</el-radio>
          </el-radio-group>
        <el-form-item label="不良数量" class="dialogFormItem">
          <div class="dialogFormItemDiv" style="color:red;">{{ dialogForm.noputqty }}</div>
        </el-form-item>
        <el-form-item v-if="dialogForm.reckway==='group'" prop="usergroupcode" label="班组">
          <el-select
            v-model="dialogForm.usergroupcode"
            style="width:200px"
            placeholder="请选择"
            filterable
            clearable
            :popper-append-to-body="false"
          >
            <el-option
              v-for="item in usergroupArr"
              :key="item.postcode"
              :label="item.postname"
              :value="item.postcode"
            />
          </el-select>
        </el-form-item>
        <el-form-item prop="reportuser" label="报工人员">
          <el-select
            v-model="dialogForm.reportuser"
            style="width:200px"
            placeholder="请选择"
            filterable
            clearable
            :popper-append-to-body="false"
          >
            <el-option
              v-for="item in reportuserArr"
              :key="item.postcode"
              :label="item.postname"
              :value="item.postcode"
            />
          </el-select>
        </el-form-item>
        <el-form-item prop="eqpcode" label="报工设备">
        <el-form-item prop="eqpcode" label="报工设备" class="dialogFormItem">
          <el-select
            v-model="dialogForm.eqpcode"
            style="width:200px"
            placeholder="请选择"
            filterable
            clearable
            :popper-append-to-body="false"
          >
            <el-option
              v-for="item in eqpArr"
              :key="item.postcode"
              :label="item.postname"
              :value="item.postcode"
              :key="item.code"
              :label="item.name"
              :value="item.code"
            />
          </el-select>
        </el-form-item>
        <el-form-item label="计件方式" class="dialogFormItem">
          <el-radio-group
            v-model="dialogForm.reckway"
            style="width: 200px;"
            @change="reckwayChange"
          >
            <el-radio label="person">个人</el-radio>
            <el-radio label="group">班组</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item :prop="dialogForm.reckway==='group'?'usergroupcode':''" label="报工班组" class="dialogFormItem">
          <el-select
            v-model="dialogForm.usergroupcode"
            style="width:200px"
            placeholder="请选择"
            filterable
            :disabled="dialogForm.reckway!=='group'"
            :popper-append-to-body="false"
            @change="usergroupChange"
          >
            <el-option
              v-for="item in usergroupArr"
              :key="item.usergroupcode"
              :label="item.usergroupname"
              :value="item.usergroupcode"
            />
          </el-select>
        </el-form-item>
        <el-form-item prop="reportuser" label="报工人员" class="dialogFormItem">
          <el-select
            v-model="dialogForm.reportuser"
            style="width:200px"
            placeholder="请选择"
            filterable
            multiple
            collapse-tags
            :multiple-limit="dialogForm.reckway==='group'?0:1"
            :disabled="dialogForm.reckway==='group'&&dialogForm.usergroupcode===''"
            :popper-append-to-body="false"
          >
            <el-option
              v-for="item in reportuserArr"
              :key="item.usercode"
              :label="item.username"
              :value="item.usercode"
            />
          </el-select>
        </el-form-item>
        <el-form-item prop="startqty" label="合格数量" class="dialogFormItem">
          <el-input v-model="dialogForm.startqty" oninput="value=value.replace(/[^\d]/g,'')" style="width: 200px" />
        </el-form-item>
        <el-divider content-position="left">不良明细</el-divider>
        <el-button
          v-waves
          type="primary"
          icon="el-icon-circle-plus-outline"
          @click="addDefect"
        >新增
        </el-button>
        <el-table
          ref="defectTableDataRef"
          :data="defectTableData"
          border
          row-class-name="custom-row"
          height="300"
          style="width: 100%;margin-top: 15px;"
          highlight-current-row
          :header-cell-style="this.$headerCellStyle"
          :cell-style="this.$cellStyle"
        >
          <el-table-column
            type="index"
            label="序号"
            align="center"
            width="50"
          />
          <el-table-column
            prop="stepcode"
            show-tooltip-when-overflow
            label="缺陷编码/名称"
            align="center"
            min-width="450"
          >
            <template slot-scope="{row}">
              <el-select
                v-model="row.code"
                style="width: 100%"
                placeholder="请选择"
                multiple
                filterable
              >
                <!--                collapse-tags-->
                <el-option
                  v-for="item in defectArr"
                  :key="item.code"
                  :label="item.name"
                  :value="item.code"
                />
              </el-select>
            </template>
          </el-table-column>
          <el-table-column
            prop="badqty"
            label="不良数量"
            show-tooltip-when-overflow
            align="center"
          >
            <template slot-scope="{row}">
              <el-input
                v-model="row.badqty"
                placeholder="请输入数量"
                oninput="value=value.replace(/[^0-9]/g,'')"
                style="width: 100%"
                @click.stop=""
                @change="badqtyChange"
              />
            </template>
          </el-table-column>
          <el-table-column
            label="操作"
            width="50"
            align="center"
          >
            <template slot-scope="{row}">
              <div class="operationClass">
                <el-tooltip v-del-tab-index class="item" effect="dark" content="删除" placement="top">
                  <i
                    class="el-icon-delete"
                    :style="{color:$store.state.settings.theme}"
                    style="margin-left: 7px;"
                    @click="defectDel(row)"
                  />
                </el-tooltip>
              </div>
            </template>
          </el-table-column>
        </el-table>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <div class="footerButton">
          <el-button v-waves @click="dialogVisibleCancel">取 消</el-button>
@@ -404,16 +504,22 @@
<script>
import Pagination from '@/components/Pagination'
import $ from 'jquery'
import { getCookie } from '@/utils/auth'
import elDragDialog from '@/directive/el-drag-dialog'
import waves from '@/directive/waves'
import {
  MesOrderNgStepSearch,
  MesOrderNgSubStepSearch,
  MesOrderStepSearch, MesOrderStepStart,
  MesOrderWxStepSearch
  MesOrderWxStepSearch, SavaMesOrderStepReport
} from '@/api/WorkOrder'
import { validateCode } from '@/utils/global'
import {
  DefectPermissions,
  EqpPermissions,
  GroupsPermissions,
  GroupsPersonPermissions,
  PersonPermissions
} from '@/api/GeneralBasicData'
import { nanoid } from 'nanoid'
export default {
  name: 'SCKBG',
@@ -463,10 +569,10 @@
        'nextstepprice': '',
        'stepdesc': '',
        'planqty': 0,
        'startqty': 0,
        'noreportqty': 0,
        'reportqty': 0,
        'noputqty': 0,
        'startqty': 0, //
        'noreportqty': 0, // 未报数量
        'reportqty': 0, // 已报数量
        'noputqty': 0, // 不良数量
        'wkshopcode': '',
        'wkshopname': '',
        'eqpcode': '',
@@ -477,16 +583,23 @@
        defectlist: '', // 不良汇总
        reckway: 'person', // 计件方式(班组:group、个人:person)
        usergroupcode: '', // 班组编码
        reportuser: '' // 报工人员
        reportuser: [] // 报工人员
      },
      dialogFormRules: {
        postcode: [
          { required: true, validator: validateCode, trigger: ['blur', 'change'] }
        eqpcode: [
          { required: true, message: '请选择报工设备', trigger: ['blur', 'change'] }
        ],
        postname: [
          { required: true, message: '请输入岗位名称', trigger: ['blur', 'change'] }
        usergroupcode: [
          { required: true, message: '请选择报工班组', trigger: ['blur', 'change'] }
        ],
        reportuser: [
          { required: true, message: '请选择报工人员', trigger: ['blur', 'change'] }
        ],
        startqty: [
          { required: true, message: '请输入合格数量', trigger: ['blur', 'change'] }
        ]
      },
      reckwayArr: [// 报工类型
        { code: 'group', name: '班组' },
@@ -495,11 +608,12 @@
      reportuserArr: [], // 报工人员
      usergroupArr: [], // 报工班组
      eqpArr: [], // 报工设备
      defectArr: []// 不良缺陷
      defectArr: [], // 不良缺陷
      defectTableData: []
    }
  },
  created() {
  },
@@ -508,8 +622,23 @@
    this.getHeight()
    this.tabClick()
    this.getAllSelectArr()
  },
  methods: {
    async getAllSelectArr() {
      const { data: res1 } = await GroupsPermissions()// 班组
      this.usergroupArr = res1
      const { data: res2 } = await PersonPermissions() // 人员
      this.reportuserArr = res2
      const { data: res3 } = await DefectPermissions() // 缺陷
      this.defectArr = res3
      const { data: res4 } = await EqpPermissions() // 设备
      this.eqpArr = res4
    },
    tabClick() {
      let belong
      switch (this.activeName) {
@@ -653,13 +782,47 @@
    },
    // 生产开报工扫码获取工单对应工序任务(不良明细)
    async getMesOrderNgSubStepSearch(wocode, stepcode) {
      const data = {
        wocode, stepcode
      }
      const res = await MesOrderNgSubStepSearch(data)
      // const data = {
      //   wocode, stepcode
      // }
      // const res = await MesOrderNgSubStepSearch(data)
    },
    // 对话框关闭事件
    handleClose() {
      this.dialogForm = {
        'wo_code': '',
        'partnumber': '',
        'partname': '',
        'partspec': '',
        'seq': '',
        'stepcode': '',
        'stepname': '',
        'stepprice': '', // 工序单价
        'nextstepcode': '',
        'nextstepname': '',
        'nextstepprice': '',
        'stepdesc': '',
        'planqty': 0,
        'startqty': 0, //
        'noreportqty': 0, // 未报数量
        'reportqty': 0, // 已报数量
        'noputqty': 0, // 不良数量
        'wkshopcode': '',
        'wkshopname': '',
        'eqpcode': '',
        'eqpname': '',
        remarks: '', // 备注
        inbarcode: '', // 入库条码
        defectlist: '', // 不良汇总
        reckway: 'person', // 计件方式(班组:group、个人:person)
        usergroupcode: '', // 班组编码
        reportuser: [] // 报工人员
      }
      this.defectTableData = []
      this.$refs.dialogForm.clearValidate()
    },
    // 对话框取消
@@ -669,14 +832,100 @@
    },
    // 对话框确认
    dialogVisibleConfirm() {
      // this.$refs.dialogForm.validate(async valid => {
      //   if (valid) {
      //
      //   }
      // })
      this.$refs.dialogForm.validate(async valid => {
        if (valid) {
          if (this.activeName === '生产列表') {
            if (this.defectTableData.find(i => i.code.length === 0)) {
              return this.$message.info('缺陷编码/名称不能为空!')
            }
            if (this.defectTableData.find(i => i.badqty.toString().trim() === '' || parseFloat(i.badqty) === 0)) {
              return this.$message.info('不良数量不能为空或为零!')
            }
            if (parseFloat(this.dialogForm.noreportqty) < parseFloat(this.dialogForm.startqty) + parseFloat(this.dialogForm.noputqty)) {
              return this.$message.info('合格数量加不良数量不能大于了未报数量!')
            }
            const defectlist = []
            this.defectTableData.forEach(i => {
              defectlist.push({
                defect_code: i.code.join(','),
                badqty: i.badqty
              })
            })
            const data = {
              mesordercode: this.dialogForm.wo_code,
              partcode: this.dialogForm.partnumber,
              stepseq: this.dialogForm.seq,
              stepcode: this.dialogForm.stepcode,
              stepprice: this.dialogForm.stepprice,
              eqpcode: this.dialogForm.eqpcode,
              inbarcode: '',
              reckway: this.dialogForm.reckway,
              usergroupcode: this.dialogForm.usergroupcode,
              reportuser: this.dialogForm.reportuser.join(','),
              taskqty: this.dialogForm.planqty,
              // startqty: this.dialogForm.startqty,
              // reportqty: this.dialogForm.reportqty,
              startqty: this.dialogForm.startqty,
              reportqty: this.dialogForm.startqty, // 报工数量
              defectlist,
              remarks: ''
            }
            // console.log(JSON.parse(JSON.stringify(this.defectTableData)))
            // console.log(JSON.parse(JSON.stringify(data)))
            const res = await SavaMesOrderStepReport(data)
            // console.log(res)
            if (res.code === '200') {
              this.$notify.success('报工成功!')
              await this.search()
              this.dialogVisible = false
            } else {
              this.$notify.error('报工失败!')
            }
          }
        }
      })
    },
    // 缺陷新增
    addDefect() {
      if (this.defectTableData.find(i => i.code.length === 0)) {
        return this.$message.info('缺陷编码/名称不能为空!')
      }
      if (this.defectTableData.find(i => i.badqty.toString().trim() === '' || parseFloat(i.badqty) === 0)) {
        return this.$message.info('不良数量不能为空或为零!')
      }
      this.defectTableData.push({
        uuid: nanoid(), code: [], badqty: ''
      })
    },
    // 缺陷删除
    defectDel(row) {
      this.defectTableData = this.defectTableData.filter(i => i.uuid !== row.uuid)
      this.dialogForm.noputqty = 0
      this.defectTableData.forEach(i => {
        this.dialogForm.noputqty += parseFloat(i.badqty)
      })
    },
    badqtyChange(val) {
      this.dialogForm.noputqty = 0
      this.defectTableData.forEach(i => {
        this.dialogForm.noputqty += parseFloat(i.badqty)
      })
    },
    reckwayChange(val) {
      // console.log(val)
      this.dialogForm.usergroupcode = ''
      this.dialogForm.reportuser = []
    },
    async usergroupChange(val) {
      const { data: res } = await GroupsPersonPermissions({ groupcode: val })
      this.dialogForm.reportuser = res[0].usercode_list ? res[0].usercode_list.split(',') : []
    },
    rowClick(row, event, column) {
      this.radioSelected = row.id