loulijun2021
2023-09-27 5cd77eba1672cac1858434d0e8488972562e1092
src/views/produce/stepReport.vue
@@ -142,6 +142,7 @@
                fixed
              />
              <el-table-column
                v-if="activeName!=='不良待处理'"
                prop="status"
                show-tooltip-when-overflow
                label="状态"
@@ -204,17 +205,25 @@
                show-tooltip-when-overflow
              />
              <el-table-column
                v-if="activeName==='外协发料'||activeName==='外协收料'"
                prop="fqty"
                show-tooltip-when-overflow
                label="已发料数量"
                sortable="custom"
                width="120"
              />
              <el-table-column
                prop="good_qty"
                show-tooltip-when-overflow
                label="合格数量"
                :label="activeName==='外协发料'||activeName==='外协收料'?'已收料数量':'合格数量'"
                sortable="custom"
                width="160"
                width="120"
              />
              <el-table-column
                prop="ng_qty"
                label="不良数量"
                show-tooltip-when-overflow
                width="150"
                width="120"
                sortable="custom"
              />
              <el-table-column
@@ -288,12 +297,12 @@
      :visible.sync="dialogVisible"
      width="1160px"
      :close-on-click-modal="false"
      top="7vh"
      :top="activeName==='生产列表'||activeName==='外协收料'? '6vh':'15vh'"
      @closed="handleClose"
      @close="handleClose"
    >
      <el-form ref="dialogForm" inline :rules="dialogFormRules" :model="dialogForm" label-width="110px">
        <el-divider content-position="left">基本信息</el-divider>
        <el-divider v-if="activeName==='生产列表'||activeName==='外协收料'||activeName==='不良待处理'" content-position="left">基本信息</el-divider>
        <el-form-item label="工单编号" class="dialogFormItem">
          <div class="dialogFormItemDiv">{{ dialogForm.wo_code }}</div>
        </el-form-item>
@@ -315,21 +324,32 @@
        <el-form-item label="任务数量" class="dialogFormItem">
          <div class="dialogFormItemDiv">{{ dialogForm.planqty }}</div>
        </el-form-item>
        <el-form-item label="未报/已报" class="dialogFormItem">
        <el-form-item v-if="activeName==='不良待处理'" label="合格数量" class="dialogFormItem">
          <div class="dialogFormItemDiv">{{ dialogForm.noreportqty }}</div>
        </el-form-item>
        <el-form-item v-if="activeName==='不良待处理'" label="不良数量" class="dialogFormItem">
          <div class="dialogFormItemDiv">{{ dialogForm.noputqty }}</div>
        </el-form-item>
        <el-form-item
          v-if="activeName!=='不良待处理'"
          :label="activeName==='生产列表'? '未报/已报':(activeName==='外协发料'?'未发/已发':'未收/已收')"
          class="dialogFormItem"
        >
          <div class="dialogFormItemDiv">{{ dialogForm.noreportqty + '/' + dialogForm.reportqty }}</div>
        </el-form-item>
        <el-form-item label="不良数量" class="dialogFormItem">
        <el-form-item v-if="activeName==='生产列表'||activeName==='外协收料'" label="不良数量" class="dialogFormItem">
          <div class="dialogFormItemDiv" style="color:red;">{{ dialogForm.noputqty }}</div>
        </el-form-item>
        <el-form-item prop="eqpcode" label="报工设备" class="dialogFormItem">
        <el-form-item v-if="activeName==='生产列表'" prop="eqpcode" label="报工设备" class="dialogFormItem">
          <el-select
            v-model="dialogForm.eqpcode"
            style="width:200px"
            placeholder="请选择"
            filterable
            :popper-append-to-body="false"
          >
            <el-option
@@ -341,7 +361,7 @@
          </el-select>
        </el-form-item>
        <el-form-item label="计件方式" class="dialogFormItem">
        <el-form-item v-if="activeName==='生产列表'" label="计件方式" class="dialogFormItem">
          <el-radio-group
            v-model="dialogForm.reckway"
            style="width: 200px;"
@@ -352,7 +372,12 @@
          </el-radio-group>
        </el-form-item>
        <el-form-item :prop="dialogForm.reckway==='group'?'usergroupcode':''" label="报工班组" class="dialogFormItem">
        <el-form-item
          v-if="activeName==='生产列表'"
          :prop="dialogForm.reckway==='group'?'usergroupcode':''"
          label="报工班组"
          class="dialogFormItem"
        >
          <el-select
            v-model="dialogForm.usergroupcode"
            style="width:200px"
@@ -370,7 +395,7 @@
            />
          </el-select>
        </el-form-item>
        <el-form-item prop="reportuser" label="报工人员" class="dialogFormItem">
        <el-form-item v-if="activeName==='生产列表'" prop="reportuser" label="报工人员" class="dialogFormItem">
          <el-select
            v-model="dialogForm.reportuser"
            style="width:200px"
@@ -390,25 +415,82 @@
            />
          </el-select>
        </el-form-item>
        <el-form-item prop="startqty" label="合格数量" class="dialogFormItem">
        <el-form-item v-if="activeName==='生产列表'" 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-form-item v-if="activeName==='外协发料'||activeName==='外协收料'" prop="wxcode" label="外协供方" class="dialogFormItem">
          <el-select
            v-model="dialogForm.wxcode"
            style="width:200px"
            placeholder="请选择"
            filterable
            :popper-append-to-body="false"
          >
            <el-option
              v-for="item in wxArr"
              :key="item.code"
              :label="item.name"
              :value="item.code"
            />
          </el-select>
        </el-form-item>
        <el-form-item v-if="activeName==='外协发料'" prop="outuser" label="发料人员" class="dialogFormItem">
          <el-select
            v-model="dialogForm.outuser"
            style="width:200px"
            placeholder="请选择"
            filterable
            :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 v-if="activeName==='外协发料'" prop="fqty" label="发料数量" class="dialogFormItem">
          <el-input v-model="dialogForm.fqty" oninput="value=value.replace(/[^\d]/g,'')" style="width: 200px" />
        </el-form-item>
        <el-form-item v-if="activeName==='外协收料'" prop="inuser" label="收料人员" class="dialogFormItem">
          <el-select
            v-model="dialogForm.inuser"
            style="width:200px"
            placeholder="请选择"
            filterable
            :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 v-if="activeName==='外协收料'" prop="sqty" label="收料数量" class="dialogFormItem">
          <el-input v-model="dialogForm.sqty" oninput="value=value.replace(/[^\d]/g,'')" style="width: 200px" />
        </el-form-item>
        <el-divider v-if="activeName==='生产列表'||activeName==='外协收料'" content-position="left">不良明细</el-divider>
        <el-button
          v-if="activeName==='生产列表'||activeName==='外协收料'"
          v-waves
          type="primary"
          icon="el-icon-circle-plus-outline"
          @click="addDefect"
        >新增
        </el-button>
        <el-table
          v-if="activeName==='生产列表'||activeName==='外协收料'"
          ref="defectTableDataRef"
          :data="defectTableData"
          border
          row-class-name="custom-row"
          height="300"
          height="200"
          style="width: 100%;margin-top: 15px;"
          highlight-current-row
          :header-cell-style="this.$headerCellStyle"
@@ -482,6 +564,168 @@
            </template>
          </el-table-column>
        </el-table>
        <el-divider v-if="activeName==='外协收料'" content-position="left">可收料供应商</el-divider>
        <div
          v-for="(item,index) in dialogForm.list"
          v-if="item.fqty>0"
          :key="item.name"
          style="display: flex;line-height: 26px;height: 26px;margin-left:30px;align-items: center"
        >
          <div
            style="color: #fff;width: 22px;height: 22px;display: flex;justify-content: center;align-items: center;border-radius: 50%"
            :style="{backgroundColor:$store.state.settings.theme}"
          >{{ index+1 }}</div>
          <div style="margin-left:30px;width: 160px;" class="ellipsis">
            {{ item.tp }}
          </div>
          <div style="margin-left:30px;">
            可收数量:{{ item.fqty }}
          </div>
        </div>
        <el-divider v-if="activeName==='不良待处理'" content-position="left">不良信息明细</el-divider>
        <el-table
          v-if="activeName==='不良待处理'"
          ref="badTableDataDataRef"
          :data="badTableData"
          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="step_code"-->
          <!--            label="工序编码"-->
          <!--            show-tooltip-when-overflow-->
          <!--            align="center"-->
          <!--          />-->
          <el-table-column
            prop="stepname"
            label="工序名称"
            show-tooltip-when-overflow
            align="center"
          />
          <el-table-column
            prop="plan_qty"
            label="任务数量"
            show-tooltip-when-overflow
            align="center"
          />
          <el-table-column
            prop="report_qty"
            label="合格数量"
            show-tooltip-when-overflow
            align="center"
          />
          <el-table-column
            prop="ng_qty"
            label="不良数量"
            show-tooltip-when-overflow
            align="center"
          />
          <el-table-column
            prop="defect_name"
            label="不良原因"
            show-tooltip-when-overflow
            align="center"
          />
          <el-table-column
            prop="repair_qty"
            label="维修合格数量"
            show-tooltip-when-overflow
            align="center"
          >
            <template slot-scope="{row}">
              <el-input
                v-model="row.repair_qty"
                placeholder="请输入数量"
                oninput="value=value.replace(/[^0-9]/g,'')"
                style="width: 100%"
                @click.stop=""
              />
            </template>
          </el-table-column>
          <el-table-column
            prop="laborbad_qty"
            label="工废数量"
            show-tooltip-when-overflow
            align="center"
          >
            <template slot-scope="{row}">
              <el-input
                v-model="row.laborbad_qty"
                placeholder="请输入数量"
                oninput="value=value.replace(/[^0-9]/g,'')"
                style="width: 100%"
                @click.stop=""
              />
            </template>
          </el-table-column>
          <el-table-column
            prop="materielbad_qty"
            label="料废数量"
            show-tooltip-when-overflow
            align="center"
          >
            <template slot-scope="{row}">
              <el-input
                v-model="row.materielbad_qty"
                placeholder="请输入数量"
                oninput="value=value.replace(/[^0-9]/g,'')"
                style="width: 100%"
                @click.stop=""
              />
            </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">
@@ -510,9 +754,10 @@
  MesOrderNgStepSearch,
  MesOrderNgSubStepSearch,
  MesOrderStepSearch, MesOrderStepStart,
  MesOrderWxStepSearch, SavaMesOrderStepReport
  MesOrderWxStepSearch, SavaMesOrderStepIn, SavaMesOrderStepOut, SavaMesOrderStepReport
} from '@/api/WorkOrder'
import {
  CustomerPermissions,
  DefectPermissions,
  EqpPermissions,
  GroupsPermissions,
@@ -520,6 +765,8 @@
  PersonPermissions
} from '@/api/GeneralBasicData'
import { nanoid } from 'nanoid'
import { LabelBarCode } from '@/api/systemSetting'
import { getCookie } from '@/utils/auth'
export default {
  name: 'SCKBG',
@@ -583,7 +830,14 @@
        defectlist: '', // 不良汇总
        reckway: 'person', // 计件方式(班组:group、个人:person)
        usergroupcode: '', // 班组编码
        reportuser: [] // 报工人员
        reportuser: [], // 报工人员
        wxcode: '',
        outuser: '',
        fqty: '',
        inuser: '',
        sqty: '',
        list: ''
      },
      dialogFormRules: {
@@ -598,6 +852,21 @@
        ],
        startqty: [
          { required: true, message: '请输入合格数量', trigger: ['blur', 'change'] }
        ],
        wxcode: [
          { required: true, message: '请选择外协供方', trigger: ['blur', 'change'] }
        ],
        outuser: [
          { required: true, message: '请选择发料人员', trigger: ['blur', 'change'] }
        ],
        inuser: [
          { required: true, message: '请选择收料人员', trigger: ['blur', 'change'] }
        ],
        fqty: [
          { required: true, message: '请输入发料数量', trigger: ['blur', 'change'] }
        ],
        sqty: [
          { required: true, message: '请输入收料数量', trigger: ['blur', 'change'] }
        ]
      },
@@ -609,8 +878,10 @@
      usergroupArr: [], // 报工班组
      eqpArr: [], // 报工设备
      defectArr: [], // 不良缺陷
      wxArr: [], // 往来单位下拉
      defectTableData: []
      defectTableData: [],
      badTableData: []
    }
  },
@@ -638,6 +909,9 @@
      const { data: res4 } = await EqpPermissions() // 设备
      this.eqpArr = res4
      const { data: res5 } = await CustomerPermissions() // 往来单位
      this.wxArr = res5
    },
    tabClick() {
      let belong
@@ -661,6 +935,7 @@
      }
      this.enterNative(this.form.wocode, belong)
      this.search()
      this.radioSelected = ''
    },
    enterNative(val, belong) {
      if (belong === 'produceCodeZZ') {
@@ -743,9 +1018,47 @@
        this.getMesOrderStepStart('WX', 'IN', temp.wo_code, temp.stepcode)
      }
    },
    // 不良处理
    handleBad(row) {
    // 不良处理    生产开报工扫码获取工单对应工序任务(不良明细)
    async handleBad(row) {
      const data = {
        wocode: row.wo_code,
        stepcode: row.stepcode
      }
      let res = await MesOrderNgSubStepSearch(data)
      if (res.code === '200') {
        res = res.data
        this.dialogForm.wo_code = res.data1.wo_code
        this.dialogForm.partnumber = res.data1.partnumber
        this.dialogForm.partname = res.data1.partname
        this.dialogForm.partspec = res.data1.partspec
        this.dialogForm.seq = res.data1.seq
        this.dialogForm.stepcode = res.data1.stepcode
        this.dialogForm.stepname = res.data1.stepname
        this.dialogForm.stepprice = res.data1.stepprice
        this.dialogForm.nextstepcode = res.data1.nextstepcode
        this.dialogForm.nextstepname = res.data1.nextstepname
        this.dialogForm.nextstepprice = res.data1.nextstepprice
        this.dialogForm.stepdesc = res.data1.stepdesc
        this.dialogForm.planqty = res.data1.planqty
        this.dialogForm.startqty = res.data1.startqty
        this.dialogForm.noreportqty = res.data1.noreportqty // 合格数量
        this.dialogForm.reportqty = res.data1.reportqty
        this.dialogForm.noputqty = res.data1.noputqty // 不良数量
        this.dialogForm.wkshopcode = res.data1.wkshopcode
        this.dialogForm.wkshopname = res.data1.wkshopname
        this.dialogForm.eqpcode = res.data1.eqpcode
        this.dialogForm.eqpname = res.data1.eqpname
        this.badTableData = res.data2
        // 下周回来写不良处理保存接口
        this.badTableData.forEach(item => {
          item.repair_qty = 0
          item.bad_qty = 0
        })
        this.dialogVisible = true
      }
    },
    // 生产开报工:报工/外协(发料/收料)时条件判断及数据返回接口
    async getMesOrderStepStart(OperType, SelectType, wocode, stepcode) {
@@ -777,15 +1090,10 @@
        this.dialogForm.eqpcode = res.eqpcode
        this.dialogForm.eqpname = res.eqpname
        this.dialogForm.list = res.list
        this.dialogVisible = true
      }
    },
    // 生产开报工扫码获取工单对应工序任务(不良明细)
    async getMesOrderNgSubStepSearch(wocode, stepcode) {
      // const data = {
      //   wocode, stepcode
      // }
      // const res = await MesOrderNgSubStepSearch(data)
    },
    // 对话框关闭事件
    handleClose() {
@@ -812,6 +1120,13 @@
        'eqpcode': '',
        'eqpname': '',
        wxcode: '',
        outuser: '',
        fqty: '',
        inuser: '',
        sqty: '',
        list: '',
        remarks: '', // 备注
        inbarcode: '', // 入库条码
        defectlist: '', // 不良汇总
@@ -822,6 +1137,7 @@
      }
      this.defectTableData = []
      this.badTableData = []
      this.$refs.dialogForm.clearValidate()
    },
@@ -845,6 +1161,18 @@
            if (parseFloat(this.dialogForm.noreportqty) < parseFloat(this.dialogForm.startqty) + parseFloat(this.dialogForm.noputqty)) {
              return this.$message.info('合格数量加不良数量不能大于了未报数量!')
            }
            let inbarcode = ''
            if (this.tableData.find(i => i.id === this.radioSelected).isend === 'Y') {
              const data1 = {
                rightcode: getCookie('ruleCode'),
                partcode: this.dialogForm.partnumber,
                qty: this.dialogForm.startqty,
                onelabqty: this.dialogForm.startqty
              }
              const res1 = await LabelBarCode(data1)
              inbarcode = res1.data[0].labcode
            }
            const defectlist = []
            this.defectTableData.forEach(i => {
@@ -860,7 +1188,7 @@
              stepcode: this.dialogForm.stepcode,
              stepprice: this.dialogForm.stepprice,
              eqpcode: this.dialogForm.eqpcode,
              inbarcode: '',
              inbarcode,
              reckway: this.dialogForm.reckway,
              usergroupcode: this.dialogForm.usergroupcode,
              reportuser: this.dialogForm.reportuser.join(','),
@@ -877,16 +1205,116 @@
            // console.log(JSON.parse(JSON.stringify(this.defectTableData)))
            // console.log(JSON.parse(JSON.stringify(data)))
            this.$store.state.app.buttonIsDisabled = true
            const res = await SavaMesOrderStepReport(data)
            // console.log(res)
            if (res.code === '200') {
              this.$notify.success('报工成功!')
              await this.search()
              this.$store.state.app.buttonIsDisabled = false
              this.dialogVisible = false
            } else {
              this.$store.state.app.buttonIsDisabled = false
              this.$notify.error('报工失败!')
            }
          }
          if (this.activeName === '外协发料') {
            if (parseFloat(this.dialogForm.fqty) < 1) {
              return this.$message.info('发料数量不能为零!')
            }
            const data = {
              mesordercode: this.dialogForm.wo_code,
              partcode: this.dialogForm.partnumber,
              stepseq: this.dialogForm.seq,
              stepcode: this.dialogForm.stepcode,
              wxcode: this.dialogForm.wxcode,
              outuser: this.dialogForm.outuser,
              taskqty: this.dialogForm.planqty,
              fqty: this.dialogForm.fqty
            }
            // console.log(JSON.stringify(data))
            this.$store.state.app.buttonIsDisabled = true
            const res = await SavaMesOrderStepOut(data)
            if (res.code === '200') {
              this.$notify.success('发料成功!')
              await this.search()
              this.$store.state.app.buttonIsDisabled = false
              this.dialogVisible = false
            } else {
              this.$store.state.app.buttonIsDisabled = false
              this.$notify.error('发料失败!')
            }
          }
          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.sqty) + parseFloat(this.dialogForm.noputqty)) {
              return this.$message.info('收料数量加不良数量不能大于了可收数量!')
            }
            if (this.dialogForm.list.find(i => i.name === this.dialogForm.wxcode)) {
              if (this.dialogForm.list.find(i => i.name === this.dialogForm.wxcode).fqty < parseFloat(this.dialogForm.sqty) + parseFloat(this.dialogForm.noputqty)) {
                return this.$message.info('收料数量加不良数量不能大于该供应商可收数量!')
              }
            } else {
              return this.$message.info('此供应商无可收数量!')
            }
            let inbarcode = ''
            if (this.tableData.find(i => i.id === this.radioSelected).isend === 'Y') {
              const data1 = {
                rightcode: getCookie('ruleCode'),
                partcode: this.dialogForm.partnumber,
                qty: this.dialogForm.startqty,
                onelabqty: this.dialogForm.startqty
              }
              const res1 = await LabelBarCode(data1)
              inbarcode = res1.data[0].labcode
            }
            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,
              wxcode: this.dialogForm.wxcode,
              inbarcode,
              inuser: this.dialogForm.inuser,
              taskqty: this.dialogForm.planqty,
              sqty: this.dialogForm.sqty,
              defectlist,
              remarks: ''
            }
            // console.log(JSON.parse(JSON.stringify(data)), 1)
            this.$store.state.app.buttonIsDisabled = true
            const res = await SavaMesOrderStepIn(data)
            if (res.code === '200') {
              this.$notify.success('收料成功!')
              await this.search()
              this.$store.state.app.buttonIsDisabled = false
              this.dialogVisible = false
            } else {
              this.$store.state.app.buttonIsDisabled = false
              this.$notify.error('收料失败!')
            }
          }
        }
      })
    },