loulijun2021
2023-05-23 00a4538b06beaf8b21dfdc6c4cec25e61ebc0ee5
1.递交
已添加1个文件
已修改1个文件
2721 ■■■■■ 文件已修改
src/router/index.js 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bbgl/scjd.vue 2696 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js
@@ -451,13 +451,13 @@
        name: 'SCDDCancel',
        code: '1070',
        component: () => import('@/views/scgl/scdd'),
        meta: { code: '1070', title: 'ERP生产订单', icon: '', keepAlive: true }
        meta: { code: '1070', title: '生产订单', icon: '', keepAlive: true }
      }, {
        path: 'gd',
        name: 'GDCancel',
        code: '1071',
        component: () => import('@/views/scgl/gd'),
        meta: { code: '1071', title: 'MES工单', icon: '', keepAlive: true }
        meta: { code: '1071', title: '工单', icon: '', keepAlive: true }
      }, {
        path: 'gdpg',
        name: 'GDPDCancel',
@@ -568,6 +568,13 @@
    meta: { code: '1008', title: '报表管理', icon: 'bbgl' },
    alwaysShow: true,
    children: [
       {
        path: 'scjd',
        name: 'SCJDJCancel',
        code: '1097',
        component: () => import('@/views/bbgl/scjd'),
        meta: { code: '1097', title: '生产进度报表', icon: '', keepAlive: true }
      },
      {
        path: 'bzgztj',
        name: 'BZGZTJCancel',
@@ -762,7 +769,7 @@
        name: 'produceOrderCancel',
        code: '1070',
        component: () => import('@/views/scgl/scdd'),
        meta: { code: '1070', title: 'ERP生产订单', icon: '', keepAlive: true }
        meta: { code: '1070', title: '生产订单', icon: '', keepAlive: true }
      }
    ]
  },
@@ -917,6 +924,12 @@
        code: '1095',
        component: () => import('@/views/bbgl/wxmx'),
        meta: { code: '1095', title: '维修明细报表', icon: '', keepAlive: true }
      }, {
        path: 'produceSchedule',
        name: 'SCJDJCancel',
        code: '1097',
        component: () => import('@/views/bbgl/scjd'),
        meta: { code: '1097', title: '生产进度报表', icon: '', keepAlive: true }
      }
      // {
      //   path: 'installationLampList',
@@ -1223,14 +1236,14 @@
    ]
  },
  // 18.其它ERP集成
  // 18.其它集成
  {
    path: '/otherErp',
    component: Layout,
    redirect: '/otherErp/InventoryList',
    name: '其它ERP集成',
    name: '其它集成',
    code: '2018',
    meta: { code: '2018', title: '其它ERP集成', icon: 'erpjc' },
    meta: { code: '2018', title: '其它集成', icon: 'erpjc' },
    alwaysShow: true,
    children: [
      {
src/views/bbgl/scjd.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2696 @@
<template>
  <div>
    <div class="body" style="padding-top: 10px;" :style="{height:mainHeight+'px'}">
      <el-tabs ref="elTabs" v-model="activeName" type="border-card" @tab-click="tabClick">
        <el-tab-pane label="生产列表">
          <div style="margin-left: 10px;margin-top:10px;display: flex;justify-content: space-between">
<!--            <div style="display: flex;align-items: center">-->
<!--              <div style="width: 90px">工单号:</div>-->
<!--              &lt;!&ndash;              oninput="value=value.replace(/[^0-9a-zA-Z;_]/g,'')"&ndash;&gt;-->
<!--              <el-input-->
<!--                id="keyWords"-->
<!--                v-model="form.orderstepqrcode"-->
<!--                name="produceCode"-->
<!--                style="width: 300px"-->
<!--                @keyup.enter.native="val=>enterNative(val,'produceCode')"-->
<!--              />-->
<!--              &lt;!&ndash;                @keyup.native="e=>judgeIsScanning(e,'produceCode')"&ndash;&gt;-->
<!--            </div>-->
            <div v-if="false" style="display: flex;padding-right: 10px">
              <el-button v-waves @click="ZZstart">
                <svg-icon icon-class="start_time" style="margin-right: 2px"/>
                å¼€å§‹
              </el-button>
              <el-button v-waves @click="ZZreport">
                <svg-icon icon-class="report_work" style="margin-right: 2px"/>
                æŠ¥å·¥
              </el-button>
            </div>
          </div>
          <el-divider/>
          <div class="elTableDiv">
            <el-table
              ref="tableDataRef"
              class="tableFixed"
              :data="tableData"
              :height="isIpad? (tableHeight+50):tableHeight"
              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
                prop="RowNum"
                width="50"
                label="序号"
                fixed
              />
<!--              <el-table-column-->
<!--                prop="status"-->
<!--                show-tooltip-when-overflow-->
<!--                label="状态"-->
<!--                sortable="custom"-->
<!--                width="80"-->
<!--              >-->
<!--                <template slot-scope="{row}">-->
<!--                  <div v-if="row.status==='NEW'">新订单</div>-->
<!--                  <div v-if="row.status==='ALLO'">已派发</div>-->
<!--                  <div v-if="row.status==='START'">开工</div>-->
<!--                  <div v-if="row.status==='CLOSED'">完工</div>-->
<!--                  <div v-if="row.status==='NOSCHED'">待排程</div>-->
<!--                  <div v-if="row.status==='SCHED'">已排程</div>-->
<!--                </template>-->
<!--              </el-table-column>-->
              <el-table-column
                prop="wo_code"
                label="工单号"
                width="160"
                show-tooltip-when-overflow
                sortable="custom"
              />
              <el-table-column
                prop="partcode"
                label="产品编码"
                min-width="110"
                sortable="custom"
                show-tooltip-when-overflow
              />
              <el-table-column
                prop="partname"
                width="160"
                show-tooltip-when-overflow
                label="产品名称"
                sortable="custom"
              />
              <el-table-column
                prop="stepname"
                label="工序"
                show-tooltip-when-overflow
                width="120"
                sortable="custom"
              />
              <!--              <el-table-column-->
              <!--                prop="descr"-->
              <!--                label="工序描述"-->
              <!--                min-width="150"-->
              <!--                sortable="custom"-->
              <!--              >-->
              <!--                <template slot-scope="{row}">-->
              <!--                  <div v-if="row.descr">{{ row.descr }}</div>-->
              <!--                  <div v-else>/</div>-->
              <!--                </template>-->
              <!--              </el-table-column>-->
              <el-table-column
                prop="plan_qty"
                label="任务数量"
                width="110"
                sortable="custom"
                show-tooltip-when-overflow
              />
              <el-table-column
                label="未报工数量"
                width="120"
                show-tooltip-when-overflow
              >
                <!--                sortable="custom"-->
                <template slot-scope="{row}">
                  <div>{{ row.plan_qty - row.good_qty - row.ng_qty }}</div>
                </template>
              </el-table-column>
              <el-table-column
                prop="good_qty"
                show-tooltip-when-overflow
                label="已报工数量"
                sortable="custom"
                width="160"
              />
              <el-table-column
                prop="ng_qty"
                label="不良数量"
                show-tooltip-when-overflow
                width="150"
                sortable="custom"
              />
              <el-table-column
                prop="bad_qty"
                label="已报废数量"
                width="120"
                show-tooltip-when-overflow
                sortable="custom"
              />
              <el-table-column
                prop="plan_startdate"
                label="计划开工日期"
                show-tooltip-when-overflow
                width="150"
                sortable="custom"
              >
                <template slot-scope="{row}">
                  <div v-if="row.plan_startdate">{{ row.plan_startdate.substring(0, 11) }}</div>
                  <div v-else>/</div>
                </template>
              </el-table-column>
              <el-table-column
                prop="plan_enddate"
                label="计划完工日期"
                width="150"
                sortable="custom"
                show-tooltip-when-overflow
                fixed="right"
              >
                <template slot-scope="{row}">
                  <div v-if="row.plan_startdate">{{ row.plan_startdate.substring(0, 11) }}</div>
                  <div v-else>/</div>
                </template>
              </el-table-column>
              <!--              <el-table-column-->
              <!--                label="操作"-->
              <!--                width="150"-->
              <!--                fixed="right"-->
              <!--              >-->
              <!--                <template slot-scope="{row}">-->
              <!--                  <div class="operationClass">-->
              <!--                    <el-button v-waves type="text" @click="edit('edit',row)">编辑</el-button>-->
              <!--                    <el-button v-waves type="text" @click="del(row)">删除</el-button>-->
              <!--                  </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="getMesOrderStepSearch"
          />
        </el-tab-pane>
        <el-tab-pane  v-if="false" label="外协列表">
          <div style="margin-left: 10px;margin-top:10px;display: flex;justify-content: space-between">
            <div style="display: flex;align-items: center">
              <div style="width: 90px;">外协类型:</div>
              <el-select
                v-model="WXSelected"
                filterable
                style="width: 200px"
                placeholder="请选择"
              >
                <el-option
                  v-for="item in WXSelectArr"
                  :key="item.code"
                  :label="item.name"
                  :value="item.code"
                />
              </el-select>
              <div style="width: 90px;margin-left: 20px">扫描条码:</div>
              <el-input
                v-model="WXform.orderstepqrcode"
                name="WXproduceCode"
                style="width: 300px"
                @keyup.enter.native="val=>enterNative(val,'WXproduceCode')"
              />
              <!--              @keyup.native="e=>judgeIsScanning(e,'WXproduceCode')"-->
            </div>
            <div v-if="false" style="display: flex;padding-right: 10px">
              <el-button v-waves @click="WXsend">
                <svg-icon icon-class="start_time" style="margin-right: 2px"/>
                å‘æ–™
              </el-button>
              <el-button v-waves @click="WXback">
                <svg-icon icon-class="report_work" style="margin-right: 2px"/>
                æ”¶æ–™
              </el-button>
            </div>
          </div>
          <el-divider/>
          <div class="elTableDiv">
            <el-table
              ref="tableDataRef"
              class="tableFixed"
              :data="WXtableData"
              :height="isIpad? (tableHeight+50):tableHeight"
              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="WXsortChange"
            >
              <el-table-column
                prop="RowNum"
                width="50"
                label="序号"
                fixed
              />
              <el-table-column
                prop="status"
                label="状态"
                show-tooltip-when-overflow
                sortable="custom"
                width="80"
              >
                <template slot-scope="{row}">
                  <div v-if="row.status==='NEW'">新订单</div>
                  <div v-if="row.status==='ALLO'">已派发</div>
                  <div v-if="row.status==='START'">已发料</div>
                  <div v-if="row.status==='CLOSED'">已收料</div>
                </template>
              </el-table-column>
              <el-table-column
                prop="wo_code"
                label="工单号"
                width="160"
                show-tooltip-when-overflow
                sortable="custom"
              />
              <el-table-column
                prop="partcode"
                label="产品编码"
                show-tooltip-when-overflow
                width="110"
                sortable="custom"
              />
              <el-table-column
                prop="partname"
                label="产品名称"
                width="160"
                show-tooltip-when-overflow
                sortable="custom"
              />
              <el-table-column
                prop="stepname"
                label="工序"
                width="120"
                show-tooltip-when-overflow
                sortable="custom"
              />
              <!--              <el-table-column-->
              <!--                prop="descr"-->
              <!--                label="工序描述"-->
              <!--                min-width="150"-->
              <!--                sortable="custom"-->
              <!--              >-->
              <!--                <template slot-scope="{row}">-->
              <!--                  <div v-if="row.descr">{{ row.descr }}</div>-->
              <!--                  <div v-else>/</div>-->
              <!--                </template>-->
              <!--              </el-table-column>-->
              <el-table-column
                prop="plan_qty"
                label="任务数量"
                show-tooltip-when-overflow
                width="110"
                sortable="custom"
              />
              <el-table-column
                label="未收料数量"
                width="120"
                show-tooltip-when-overflow
              >
                <!--                sortable="custom"-->
                <template slot-scope="{row}">
                  <div>{{ row.plan_qty - row.good_qty - row.ng_qty }}</div>
                </template>
              </el-table-column>
              <el-table-column
                prop="good_qty"
                label="已收料数量"
                show-tooltip-when-overflow
                sortable="custom"
                width="160"
              />
              <el-table-column
                prop="ng_qty"
                label="不良数量"
                show-tooltip-when-overflow
                width="150"
                sortable="custom"
              />
              <el-table-column
                prop="bad_qty"
                label="已报废数量"
                min-width="120"
                sortable="custom"
                show-tooltip-when-overflow
              />
              <el-table-column
                prop="plan_startdate"
                label="计划开工日期"
                show-tooltip-when-overflow
                width="150"
                sortable="custom"
              >
                <template slot-scope="{row}">
                  <div v-if="row.plan_startdate">{{ row.plan_startdate.substring(0, 11) }}</div>
                  <div v-else>/</div>
                </template>
              </el-table-column>
              <el-table-column
                prop="plan_enddate"
                label="计划完工日期"
                show-tooltip-when-overflow
                width="150"
                sortable="custom"
                fixed="right"
              >
                <template slot-scope="{row}">
                  <div v-if="row.plan_startdate">{{ row.plan_startdate.substring(0, 11) }}</div>
                  <div v-else>/</div>
                </template>
              </el-table-column>
              <!--              <el-table-column-->
              <!--                label="操作"-->
              <!--                width="150"-->
              <!--                fixed="right"-->
              <!--              >-->
              <!--                <template slot-scope="{row}">-->
              <!--                  <div class="operationClass">-->
              <!--                    <el-button v-waves type="text" @click="edit('edit',row)">编辑</el-button>-->
              <!--                    <el-button v-waves type="text" @click="del(row)">删除</el-button>-->
              <!--                  </div>-->
              <!--                </template>-->
              <!--              </el-table-column>-->
            </el-table>
          </div>
          <!--分页-->
          <pagination
            :total="WXtotal"
            :page.sync="WXform.page"
            :limit.sync="WXform.rows"
            align="right"
            layout="total,prev, pager, next,sizes"
            popper-class="select_bottom"
            @pagination="getMesOrderStepSearch"
          />
        </el-tab-pane>
        <el-tab-pane v-if="false" label="不良待处理列表">
          <div style="margin-left: 10px;margin-top:10px;display: flex;justify-content: space-between">
            <div style="display: flex;align-items: center">
              <div style="width: 90px">扫描条码:</div>
              <!--              oninput="value=value.replace(/[^0-9a-zA-Z;_]/g,'')"-->
              <el-input
                v-model="badForm.orderstepqrcode"
                name="badProduceCode"
                style="width: 300px"
                @keyup.enter.native="val=>enterNative(val,'badProduceCode')"
              />
              <!--              @keyup.native="e=>judgeIsScanning(e,'badProduceCode')"-->
            </div>
          </div>
          <el-divider/>
          <div class="elTableDiv">
            <el-table
              ref="tableDataRef"
              class="tableFixed"
              :data="badTableData"
              :height="isIpad? (tableHeight+50):tableHeight"
              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="badSortChange"
            >
              <el-table-column
                prop="RowNum"
                width="50"
                label="序号"
                fixed
              />
              <el-table-column
                show-tooltip-when-overflow
                prop="wo_code"
                label="工单号"
                min-width="160"
                sortable="custom"
              />
              <el-table-column
                show-tooltip-when-overflow
                prop="partcode"
                label="产品编码"
                min-width="110"
                sortable="custom"
              />
              <el-table-column
                show-tooltip-when-overflow
                prop="partname"
                min-width="160"
                label="产品名称"
                sortable="custom"
              />
              <el-table-column
                prop="stepname"
                label="工序"
                show-tooltip-when-overflow
                min-width="120"
                sortable="custom"
              />
              <el-table-column
                prop="plan_qty"
                label="任务数量"
                width="110"
                show-tooltip-when-overflow
                sortable="custom"
              />
              <el-table-column
                prop="good_qty"
                label="已报工数量"
                sortable="custom"
                min-width="160"
                show-tooltip-when-overflow
              />
              <el-table-column
                prop="ng_qty"
                label="不良数量"
                width="150"
                show-tooltip-when-overflow
                sortable="custom"
              />
              <el-table-column
                prop="bad_qty"
                label="已报废数量"
                width="120"
                sortable="custom"
                show-tooltip-when-overflow
              />
              <el-table-column
                label="操作"
                width="120"
                fixed="right"
              >
                <template slot-scope="{row}">
                  <div class="operationClass">
                    <el-button v-waves type="text" @click="repairHandle(row)">维修处理</el-button>
                  </div>
                </template>
              </el-table-column>
            </el-table>
          </div>
          <!--分页-->
          <pagination
            :total="badTotal"
            :page.sync="badForm.page"
            :limit.sync="badForm.rows"
            align="right"
            layout="total,prev, pager, next,sizes"
            popper-class="select_bottom"
            @pagination="getBadList"
          />
        </el-tab-pane>
      </el-tabs>
    </div>
    <el-dialog
      v-el-drag-dialog
      :title="dialogTitle"
      :visible.sync="dialogVisible"
      width="850px"
      class="dialogVisible"
      :top="dialogTitle==='自制报工'?'5vh':'15vh'"
      :close-on-click-modal="false"
      @close="handleClose"
      @closed="handleClose"
    >
      <el-form
        ref="dialogForm"
        inline
        :rules="dialogFormRules"
        :model="dialogForm"
        label-width="110px"
      >
        <el-form-item label="工单编号:">
          <div style="width: 200px">{{ dialogForm.wo_code }}</div>
        </el-form-item>
        <el-form-item label="产品编码:">
          <div style="width: 200px">{{ dialogForm.partcode }}</div>
        </el-form-item>
        <el-form-item label="产品名称:">
          <div style="width: 200px">{{ dialogForm.partname }}</div>
        </el-form-item>
        <el-form-item label="产品规格:">
          <div style="width: 200px">{{ dialogForm.partspec }}</div>
        </el-form-item>
        <el-form-item label="当前工序:">
          <div style="width: 200px">{{ dialogForm.stepname }}</div>
        </el-form-item>
        <el-form-item v-if="false" label="工序描述:">
          <!--          <el-tooltip   class="item" effect="dark" content="原材料切按材料切按材料切按时打卡数据的卡" placement="top-start">-->
          <div style="width: 200px;white-space: nowrap;text-overflow: ellipsis;overflow: hidden;">
            {{ dialogForm.stepdesc }}
          </div>
          <!--          </el-tooltip>-->
        </el-form-item>
        <el-form-item label="任务数量:">
          <div style="width: 200px">{{ dialogForm.planqty }}</div>
        </el-form-item>
        <el-form-item v-if="dialogTitle==='自制开始'" label="未开/已开:">
          <div style="width: 200px">{{ dialogForm.noreportqty }}/{{ dialogForm.reportqty }}</div>
        </el-form-item>
        <el-form-item v-if="dialogTitle==='自制报工'" label="未报/已报:">
          <div style="width: 200px">{{ dialogForm.noreportqty }}/{{ dialogForm.reportqty }}</div>
        </el-form-item>
        <el-form-item v-if="dialogTitle==='外协发料'" label="未发/已发:">
          <div style="width: 200px">{{ dialogForm.noreportqty }}/{{ dialogForm.reportqty }}</div>
        </el-form-item>
        <el-form-item v-if="dialogTitle==='外协收料'" label="未收/已收:">
          <div style="width: 200px">{{ dialogForm.noreportqty }}/{{ dialogForm.reportqty }}</div>
        </el-form-item>
        <!--自制开始-->
        <el-form-item v-if="dialogTitle==='自制开始'" label="开工数量:">
          <div style="width: 200px">{{ dialogForm.startqty }}</div>
          <!--          <div style="width: 200px">{{  dialogForm.noreportqty }}</div>-->
        </el-form-item>
        <el-form-item v-if="dialogTitle==='自制开始'" prop="eqpcode" label="生产设备:">
          <el-select
            v-model="dialogForm.eqpcode"
            style="width: 200px;"
            placeholder="请选择"
          >
            <el-option
              v-for="item in ZZeqpArr"
              :key="item.code"
              :label="item.name"
              :value="item.code"
            />
          </el-select>
        </el-form-item>
        <!--     è‡ªåˆ¶æŠ¥å·¥   -->
        <el-form-item v-if="dialogTitle==='自制报工'" label="下道工序:">
          <div style="width: 200px">{{ dialogForm.nextstepname }}</div>
        </el-form-item>
        <el-form-item v-if="dialogTitle==='自制报工'" prop="reckway" label="计件方式:">
          <el-radio-group v-model="dialogForm.reckway" style="width: 200px;" @change="reckwayChange">
            <el-radio label="group">班组</el-radio>
            <el-radio label="person">个人</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item v-if="dialogTitle==='自制报工'&&dialogForm.reckway==='group'" prop="usergroupcode" label="生产班组:">
          <el-select
            v-model="dialogForm.usergroupcode"
            style="width: 200px;"
            placeholder="请选择"
            @change="usergroupChange"
          >
            <el-option
              v-for="item in ZZtreams"
              :key="item.group_code"
              :label="item.group_name"
              :value="item.group_code"
            />
          </el-select>
        </el-form-item>
        <el-form-item v-if="dialogTitle==='自制报工'&&dialogForm.reckway==='person'" prop="operation" label="报工人员:">
          <el-select
            v-model="dialogForm.operation"
            style="width: 200px;"
            placeholder="请选择"
            @change="usergroupChange"
          >
            <el-option
              v-for="item in OperationArr"
              :key="item.usercode"
              :label="item.username"
              :value="item.usercode"
            />
          </el-select>
        </el-form-item>
        <el-form-item v-if="dialogTitle==='自制报工'" label="设备名称:" prop="eqpcode">
          <el-select
            v-model="dialogForm.eqpcode"
            style="width: 200px;"
            placeholder="请选择"
          >
            <el-option
              v-for="item in ZZeqpArr"
              :key="item.code"
              :label="item.name"
              :value="item.code"
            />
          </el-select>
        </el-form-item>
        <el-form-item v-if="dialogTitle==='自制报工'" label="报工数量:" prop="startqty">
          <el-input v-model="dialogForm.startqty" oninput="value=value.replace(/[^0-9.]/g,'')" style="width: 200px;"/>
          <!--          <el-input v-model="dialogForm.noreportqty" oninput="value=value.replace(/[^0-9.]/g,'')" style="width: 200px;" />-->
        </el-form-item>
        <el-form-item v-if="dialogTitle==='自制报工'" label="不良数量:">
          <el-input v-model="dialogForm.noputqty" oninput="value=value.replace(/[^0-9.]/g,'')" style="width: 200px;"/>
        </el-form-item>
        <el-form-item v-if="dialogTitle==='自制报工'" label="不良原因:">
          <el-select
            v-model="dialogForm.badcode"
            style="width: 200px;"
            placeholder="请选择"
            :disabled="parseFloat(dialogForm.noputqty)===0||dialogForm.noputqty.trim()===''"
            multiple
            collapse-tags
          >
            <el-option
              v-for="item in badArr"
              :key="item.code"
              :label="item.name"
              :value="item.code"
            />
          </el-select>
        </el-form-item>
        <!--        <el-form-item v-if="dialogTitle==='自制报工'" label="报工人员:">-->
        <!--          <el-input v-model="dialogForm.remarks" type="textarea" style="width: 200px;" />-->
        <!--        </el-form-item>-->
        <!--        æ³¨é‡Š-->
        <!--        <el-form-item v-if="dialogTitle==='自制报工'" label="报工人:">-->
        <!--          <el-select-->
        <!--            v-model="dialogForm.operation"-->
        <!--            style="width: 200px;"-->
        <!--            placeholder="请选择"-->
        <!--          >-->
        <!--            <el-option-->
        <!--              v-for="item in OperationArr"-->
        <!--              :key="item.usercode"-->
        <!--              :label="item.username"-->
        <!--              :value="item.usercode"-->
        <!--            />-->
        <!--          </el-select>-->
        <!--        </el-form-item>-->
        <el-form-item v-if="dialogTitle==='自制报工'" label="备注:">
          <el-input v-model="dialogForm.remarks" type="textarea" style="width: 200px;"/>
        </el-form-item>
        <div v-if="dialogTitle==='自制报工'&&dialogForm.reckway==='group'">
          <i class="el-icon-s-operation" :style="{color:$store.state.settings.theme}"/> äººå‘˜åˆ—表
          <el-button v-waves type="primary" style="margin: 10px 0" @click="userAdd">增行</el-button>
          <el-table
            ref="userTableDataRef"
            :data="userTableData"
            border
            class="tableFixed"
            :row-class-name="tableRowClassName"
            :header-cell-style="this.$headerCellStyle"
            :cell-style="this.$cellStyle"
            height="180"
            highlight-current-row
            style="width: 100%"
          >
            <el-table-column
              width="100"
              label="序号"
              type="index"
              fixed
            />
            <el-table-column
              prop="username"
              label="人员名称"
              show-tooltip-when-overflow
            >
              <template slot-scope="{row}">
                <el-select
                  v-if="row.isVisible===1"
                  v-model="row.username"
                  style="width: 200px;"
                  placeholder="请选择"
                  @change="val=>usernameChange(val,row)"
                >
                  <el-option
                    v-for="item in ZZuserArr"
                    :key="item.usercode"
                    :label="item.username"
                    :value="item.usercode"
                  />
                </el-select>
                <div v-else>{{ row.username }}</div>
              </template>
            </el-table-column>
            <el-table-column
              prop="ratio"
              label="分配比例(%)"
              show-tooltip-when-overflow
            >
              <template slot-scope="{row}">
                <el-input
                  v-if="row.isVisible===1||row.isVisible===2"
                  v-model="row.ratio"
                  oninput="value=value.replace(/[^0-9.]/g,'')"
                  placeholder="请输入"
                />
                <div v-else> {{ row.ratio }}</div>
              </template>
            </el-table-column>
            <el-table-column
              prop="RowNum"
              label="操作"
              fixed="right"
            >
              <template slot-scope="{row}">
                <div class="operationClass">
                  <el-button v-if="(row.isVisible===1&&!userIsSave)||row.isVisible===2" v-waves type="text"
                             @click="userSave(row)">保存
                  </el-button>
                  <el-button v-if="row.isVisible===1" v-waves type="text" @click="userCancel(row)">取消</el-button>
                  <el-button v-if="row.isVisible===0" v-waves type="text" @click="userDel(row)">删除</el-button>
                  <el-button v-if="row.isVisible===0" v-waves type="text" @click="editRatio(row)">修改比例</el-button>
                </div>
              </template>
            </el-table-column>
          </el-table>
          <!--分页-->
          <pagination
            :total="UserTotal"
            :page.sync="Userform.page"
            :limit.sync="Userform.rows"
            align="right"
            layout="total,prev, pager, next,sizes"
            popper-class="select_bottom"
            @pagination="getMesOrderStepSearch"
          />
        </div>
        <!--     å¤–协发料-->
        <el-form-item
          v-if="dialogTitle==='外协发料'"
          label="外协供方:"
          prop="wxcode"
        >
          <el-select
            v-model="dialogForm.wxcode"
            style="width: 200px;"
            placeholder="请选择"
            filterable
          >
            <el-option
              v-for="item in WXouterprovide"
              :key="item.code"
              :label="item.name"
              :value="item.code"
            />
          </el-select>
        </el-form-item>
        <el-form-item
          v-if="dialogTitle==='外协发料'"
          label="发料人员:"
          prop="outuser"
        >
          <el-select
            v-model="dialogForm.outuser"
            style="width: 200px;"
            placeholder="请选择"
            filterable
          >
            <el-option
              v-for="item in WXoutuser"
              :key="item.usercode"
              :label="item.username"
              :value="item.usercode"
            />
          </el-select>
        </el-form-item>
        <el-form-item
          v-if="dialogTitle==='外协发料'"
          label="发料数量:"
          prop="fqty"
        >
          <el-input v-model="dialogForm.fqty" oninput="value=value.replace(/[^0-9.]/g,'')" style="width: 200px;"/>
        </el-form-item>
        <!--     å¤–协收料-->
        <el-form-item
          v-if="dialogTitle==='外协收料'"
          label="下道工序:"
        >
          <div style="width: 200px">{{ dialogForm.nextstepname }}</div>
        </el-form-item>
        <el-form-item
          v-if="dialogTitle==='外协收料'"
          label="外协供方:"
          prop="wxcode"
        >
          <el-select
            v-model="dialogForm.wxcode"
            style="width: 200px;"
            placeholder="请选择"
          >
            <el-option
              v-for="item in WXouterprovide"
              :key="item.code"
              :label="item.name"
              :value="item.code"
            />
          </el-select>
        </el-form-item>
        <el-form-item
          v-if="dialogTitle==='外协收料'"
          label="收料人员:"
          prop="inuser"
        >
          <el-select
            v-model="dialogForm.inuser"
            style="width: 200px;"
            placeholder="请选择"
          >
            <el-option
              v-for="item in WXoutuser"
              :key="item.usercode"
              :label="item.username"
              :value="item.usercode"
            />
          </el-select>
        </el-form-item>
        <el-form-item
          v-if="dialogTitle==='外协收料'"
          label="收料数量:"
          prop="sqty"
        >
          <el-input
            v-model="dialogForm.sqty"
            style="width: 200px"
            oninput="value=value.replace(/[^0-9.]/g,'')"
          />
        </el-form-item>
        <el-form-item
          v-if="dialogTitle==='外协收料'"
          label="不良数量:"
          prop="noputqty"
        >
          <el-input
            v-model="dialogForm.noputqty"
            style="width: 200px"
            oninput="value=value.replace(/[^0-9.]/g,'')"
          />
        </el-form-item>
        <el-form-item
          v-if="dialogTitle==='外协收料'"
          label="不良原因:"
        >
          <!--          prop="badcode"-->
          <el-select
            v-model="dialogForm.badcode"
            style="width: 200px;"
            multiple
            collapse-tags
            :disabled="parseFloat(dialogForm.noputqty)===0||dialogForm.noputqty.trim()===''"
            placeholder="请选择"
          >
            <el-option
              v-for="item in badArr"
              :key="item.code"
              :label="item.name"
              :value="item.code"
            />
          </el-select>
        </el-form-item>
        <!--        <el-form-item v-if="dialogTitle==='外协收料'" label="收料人:">-->
        <!--          <el-select-->
        <!--            v-model="dialogForm.operation"-->
        <!--            style="width: 200px;"-->
        <!--            placeholder="请选择"-->
        <!--          >-->
        <!--            <el-option-->
        <!--              v-for="item in OperationArr"-->
        <!--              :key="item.usercode"-->
        <!--              :label="item.username"-->
        <!--              :value="item.usercode"-->
        <!--            />-->
        <!--          </el-select>-->
        <!--        </el-form-item>-->
        <el-form-item v-if="dialogTitle==='外协收料'" label="备注:">
          <el-input v-model="dialogForm.remarks" 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-if="dialogTitle==='自制开始'"
            v-waves
            :loading="$store.state.app.buttonIsDisabled"
            :disabled="$store.state.app.buttonIsDisabled"
            type="primary"
            @click="dialogVisibleConfirm"
          >开 å·¥</el-button>
          <el-button
            v-if="dialogTitle==='自制报工'&&dialogForm.nextstepname===''"
            v-waves
            :loading="$store.state.app.buttonIsDisabled"
            :disabled="$store.state.app.buttonIsDisabled"
            type="primary"
            @click="dialogVisibleConfirm"
          >提交/打印</el-button>
          <el-button
            v-if="dialogTitle==='自制报工'&&dialogForm.nextstepname!==''"
            v-waves
            :loading="$store.state.app.buttonIsDisabled"
            :disabled="$store.state.app.buttonIsDisabled"
            type="primary"
            @click="dialogVisibleConfirm"
          >提交</el-button>
          <el-button
            v-if="dialogTitle==='外协发料'"
            v-waves
            :loading="$store.state.app.buttonIsDisabled"
            :disabled="$store.state.app.buttonIsDisabled"
            type="primary"
            @click="dialogVisibleConfirm"
          >发料</el-button>
          <el-button
            v-if="dialogTitle==='外协收料'&&dialogForm.nextstepname===''"
            v-waves
            :loading="$store.state.app.buttonIsDisabled"
            :disabled="$store.state.app.buttonIsDisabled"
            type="primary"
            @click="dialogVisibleConfirm"
          >收料/打印</el-button>
          <el-button
            v-if="dialogTitle==='外协收料'&&dialogForm.nextstepname!==''"
            v-waves
            :loading="$store.state.app.buttonIsDisabled"
            :disabled="$store.state.app.buttonIsDisabled"
            type="primary"
            @click="dialogVisibleConfirm"
          >收料</el-button>
        </div>
      </span>
    </el-dialog>
    <!--打印预览页面  å°æ ‡ç­¾-->
    <el-dialog
      v-el-drag-dialog
      title="预览"
      :visible.sync="dialogVisible2"
      width="1140"
      top="10vh"
      :close-on-click-modal="false"
      @close="dialogVisible2Close"
    >
      <!-- è¦æ‰“印的区域 -->
      <div id="printMe2">
        <div
          style="display: flex;width: 220px;height: 130px;border: 1px solid #000;text-align: center;font-size: 12px"
        >
          <div style="width: 70px;display: flex;flex-direction: column;border-right: 1px solid #000">
            <div
              style="display: flex;height: 60%;border-bottom:1px solid #000;
              justify-content: center;align-items: center;position: relative"
            >
              <div
                id="qrCode2"
                ref="qrCodeDiv2"
                style="overflow-y: hidden;height:71%;position: absolute;left: 7px;"
              />
            </div>
            <div
              style="display: flex;height:  20%;justify-content: flex-start;border-bottom:1px solid #000;align-items: center"
            >
              <div style="margin-left: 3px; ">数量:{{ qrForm.startqty }}</div>
            </div>
            <div style="display: flex;height:  20%;justify-content: flex-start;align-items: center;">
              <div style="margin-left: 3px; ">操作:{{ qrForm.operator }}</div>
            </div>
          </div>
          <div style="width:150px;display: flex;flex-direction: column">
            <div
              style="display: flex;height: 20%;border-bottom:1px solid #000;justify-content: flex-start;align-items: center;text-align: left"
            >
              <div style="margin-left: 3px;">编号:{{ qrForm.wo_code }}</div>
            </div>
            <div
              style="display: flex;height: 20%;border-bottom:1px solid #000;justify-content: flex-start;align-items: center ;text-align: left"
            >
              <div style="margin-left: 3px;">产品编码:{{ qrForm.partcode }}</div>
            </div>
            <div
              style="display: flex;height: 20%;border-bottom:1px solid #000 ;justify-content: flex-start;align-items: center;text-align: left"
            >
              <div style="margin-left: 3px;">产品名称:{{ qrForm.partname }}</div>
            </div>
            <div
              style="display: flex;height: 20%;border-bottom:1px solid #000 ;justify-content: flex-start;align-items: center;text-align: left"
            >
              <div style="margin-left: 3px;">下道工序:{{ qrForm.nextstepname }}</div>
            </div>
            <div style="display: flex;height: 20%;justify-content: flex-start;align-items: center;text-align: left">
              <div style=" margin-left: 3px;">时间: {{ qrForm.operatorTime }}</div>
              <!--                <div>{{ qrForm.operatorTime?qrForm.operatorTime.substring(5):'' }}</div>-->
              <!--                <div>{{ qrForm.operatorTime }}</div>-->
            </div>
          </div>
        </div>
      </div>
      <span slot="footer" class="dialog-footer">
        <div class="footerButton">
          <el-button v-waves @click="dialogVisible2 = false">取 æ¶ˆ</el-button>
          <el-button v-waves v-print="printObj2" type="primary">ç¡® å®š</el-button>
        </div>
      </span>
    </el-dialog>
    <!--    ä¸è‰¯å¤„理列表对话框-->
    <el-dialog
      v-el-drag-dialog
      title="维修处理"
      :visible.sync="badDialogVisible"
      width="990px"
      class="badDialogVisible"
      top="10vh"
      :close-on-click-modal="false"
      @close="handleCloseBad"
      @closed="handleCloseBad"
    >
      <el-form
        inline
        :model="badDialogForm"
        label-width="110px"
      >
        <el-form-item label="工单编号:">
          <div style="width: 200px">{{ badDialogForm.wo_code }}</div>
        </el-form-item>
        <el-form-item label="产品编码:">
          <div style="width: 200px">{{ badDialogForm.partcode }}</div>
        </el-form-item>
        <el-form-item label="产品名称:">
          <div style="width: 200px">{{ badDialogForm.partname }}</div>
        </el-form-item>
        <el-form-item label="产品规格:">
          <div style="width: 200px">{{ badDialogForm.partspec }}</div>
        </el-form-item>
        <el-form-item label="当前工序:">
          <div style="width: 200px">{{ badDialogForm.stepname }}</div>
        </el-form-item>
        <el-form-item label="下道工序:">
          <div style="width: 200px">{{ badDialogForm.nextstepname }}</div>
        </el-form-item>
        <el-form-item label="任务数量:">
          <div style="width: 200px">{{ badDialogForm.plan_qty }}</div>
        </el-form-item>
        <el-form-item label="报工数量:">
          <div style="width: 200px">{{ badDialogForm.good_qty }}</div>
        </el-form-item>
        <el-form-item label="不良数量:">
          <div style="width: 200px">{{ badDialogForm.ng_qty }}</div>
        </el-form-item>
        <!--        æ³¨é‡Š-->
        <!--        <el-form-item label="维修人员:">-->
        <!--          <el-select-->
        <!--            v-model="badDialogForm.operation"-->
        <!--            style="width: 200px;"-->
        <!--            placeholder="请选择"-->
        <!--          >-->
        <!--            <el-option-->
        <!--              v-for="item in OperationArr"-->
        <!--              :key="item.usercode"-->
        <!--              :label="item.username"-->
        <!--              :value="item.usercode"-->
        <!--            />-->
        <!--          </el-select>-->
        <!--        </el-form-item>-->
      </el-form>
      <div style="margin-bottom:20px">
        <i class="el-icon-s-operation" :style="{color:$store.state.settings.theme}"/> ä¸è‰¯ä¿¡æ¯æ˜Žç»†ï¼š
      </div>
      <div class="elTableDiv">
        <el-table
          :data="badTableDataDialog"
          :height="isIpad? (tableHeight-350):(tableHeight-400)"
          border
          :row-class-name="tableRowClassName"
          :style="{width: 100+'%',height:(tableHeight-400)+'px',}"
          highlight-current-row
          :header-cell-style="this.$headerCellStyle"
          :cell-style="this.$cellStyle"
        >
          <el-table-column
            type="index"
            width="50"
            label="序号"
            fixed
          />
          <el-table-column
            prop="step_code"
            label="工序编码"
            min-width="80"
          />
          <el-table-column
            prop="stepname"
            label="工序名称"
            min-width="80"
          />
          <el-table-column
            prop="plan_qty"
            label="任务数量"
            width="80"
          />
          <el-table-column
            label="报工数量"
            width="80"
            prop="report_qty"
          />
          <el-table-column
            prop="ng_qty"
            label="不良数量"
            width="80"
          />
          <el-table-column
            prop="badqty"
            label="已报废数量"
            width="100"
          />
          <el-table-column
            prop="defect_name"
            label="不良原因"
            show-tooltip-when-overflow
            width="80"
          />
          <el-table-column
            prop="repair_qty"
            label="维修合格数量"
            width="110"
          >
            <template slot-scope="{row}">
              <!--              {{ row.repair_qty }}-->
              <div v-if="row.isVisible===0">{{ row.repair_qty }}</div>
              <el-input v-if="row.isVisible===1" v-model="row.repair_qty" oninput="value=value.replace(/[^0-9]/g,'')"/>
            </template>
          </el-table-column>
          <el-table-column
            prop="bad_qty"
            label="报废数量"
            width="90"
          >
            <!--            oninput="value=value.replace(/[0-9]/g,'')"-->
            <template slot-scope="{row}">
              <div v-if="row.isVisible===0">{{ row.bad_qty }}</div>
              <el-input v-if="row.isVisible===1" v-model="row.bad_qty" oninput="value=value.replace(/[^0-9]/g,'')"/>
            </template>
          </el-table-column>
          <el-table-column
            label="操作"
            width="100"
          >
            <template slot-scope="{row}">
              <div class="operationClass">
                <el-button v-if="row.isVisible===0" v-waves type="text" @click="badEdit(row)">编辑</el-button>
                <el-button v-if="row.isVisible===0" v-waves type="text" @click="badDel(row)">删除</el-button>
                <el-button v-if="row.isVisible===1" v-waves type="text" @click="badSave(row)">确认</el-button>
                <el-button v-if="row.isVisible===1" v-waves type="text" @click="badCancel(row)">取消</el-button>
              </div>
            </template>
          </el-table-column>
        </el-table>
      </div>
      <span slot="footer" class="dialog-footer">
        <div class="footerButton">
          <el-button v-waves @click="badDialogVisibleCancel">取 æ¶ˆ</el-button>
          <el-button
            v-waves
            type="primary"
            :loading="$store.state.app.buttonIsDisabled"
            :disabled="$store.state.app.buttonIsDisabled"
            @click="badDialogVisibleConfirm "
          >保 å­˜/打 å°</el-button>
        </div>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import Pagination from '@/components/Pagination'
import $ from 'jquery'
import {
  MesOrderGroupSelectUser,
  MesOrderSelectUser,
  MesOrderStepReportSelectUserGroup,
  MesOrderStepSearch,
  MesOrderStepStart,
  MesOrderStepStartSelectEqp,
  MesOrderWxStepSearch,
  MesOrderStepSelectWX,
  SavaMesOrderStepOut,
  MesOrderStepSelectCause,
  SavaMesOrderStepIn,
  SavaMesOrderStepStart,
  SavaMesOrderStepReport, MesOrderNgStepSearch, MesOrderNgSubStepSearch, EditOrderNgStepSeave
} from '@/api/scgl'
import {urlAddRandomNo, webapp_ws_ajax_run, webapp_ws_autoupdate} from '@/utils/grwebapp'
import QRCode from 'qrcodejs2'
import {getCookie} from '@/utils/auth'
import {handleDatetime2} from '@/utils/global'
import elDragDialog from '@/directive/el-drag-dialog'
import waves from '@/directive/waves'
const SER_HZ = /^[\u4e00-\u9fa5]+$/
export default {
  name: 'SCKBG',
  components: {
    Pagination
  },
  directives: {elDragDialog, waves},
  data() {
    const validateName = (rule, value, callback) => {
      if (!value) {
        return callback(new Error('请输入编码'))
      } else {
        if (SER_HZ.test(value)) {
          return callback(new Error('编码不能为中文'))
        } else {
          callback()
        }
      }
    }
    const validateTypeCode = (rule, value, callback) => {
      if (!value) {
        return callback(new Error('请选择上级'))
      } else {
        callback()
      }
    }
    return {
      mainHeight: 0,
      tableHeight: 0,
      isIpad: false,
      // produceCode: '', // å·¥åºç 
      // WXproduceCode: '', // å¤–协工序码
      radioSelected: '', // å·¥åºé€‰ä¸­
      WXradioSelected: '', // å·¥åºé€‰ä¸­
      form: {
        orderstepqrcode: '', // æ‰«æçš„二维码信息
        prop: 'wo_code', // æŽ’序字段
        order: 'asc', // æŽ’序字段
        page: 1, // ç¬¬å‡ é¡µ
        rows: 20 // æ¯é¡µå¤šå°‘条
      },
      total: 10,
      tableData: [],
      WXform: { // å¤–协表单
        orderstepqrcode: '', // æ‰«æçš„二维码信息
        prop: 'wo_code', // æŽ’序字段z
        order: 'asc', // æŽ’序字段
        page: 1, // ç¬¬å‡ é¡µ
        rows: 20 // æ¯é¡µå¤šå°‘条
      },
      WXtotal: 10, // å¤–协表单总数
      WXtableData: [], // å¤–协表
      WXSelectArr: [// å¤–协类型下拉列表
        {code: 'OUT', name: '发料'},
        {code: 'IN', name: '收料'}
      ],
      WXSelected: 'OUT', // å¤–协下拉列表选中值
      dialogVisible: false,
      dialogTitle: '', // è‡ªåˆ¶å¼€å§‹ã€è‡ªåˆ¶æŠ¥å·¥ã€å¤–协发料、外协收料
      dialogForm: {
        wo_code: '', // å·¥å•编号
        partcode: '', // äº§å“ç¼–码
        partname: '', // äº§å“åç§°
        partspec: '', // äº§å“è§„æ ¼
        stepseq: '', // å·¥åºåºå·
        stepcode: '', // å·¥åºç¼–码
        stepname: '', // å½“前工序名
        nextstepname: '', // ä¸‹ä¸€é“工序名
        stepdesc: '', // å·¥åºæè¿°
        planqty: '', // ä»»åŠ¡æ•°é‡
        reportqty: '', // å·²æŠ¥æ•°é‡
        noreportqty: '', // æœªæŠ¥æ•°é‡
        startqty: '', // å¼€(报)工数量
        wxcode: '', // å¤–协供应商编码
        outuser: '', // å‘料人员
        taskqty: '', // ä»»åŠ¡æ•°é‡
        fqty: '', // å‘料数量
        inuser: getCookie('navTabId'), // æ”¶æ–™äººå‘˜
        sqty: '', // æ”¶æ–™æ•°é‡
        ngqty: '', // ä¸è‰¯æ•°é‡
        badcode: '', // ä¸è‰¯åŽŸå› ç¼–ç 
        noputqty: '', // ä¸è‰¯æ•°é‡
        eqpcode: '', // ç”Ÿäº§è®¾å¤‡ç¼–码
        usergroupcode: '', // ç­ç»„编码
        reportuser: '', // æŠ¥å·¥äººå‘˜
        startqtySum: '', // ä¸èƒ½è¶…过的数值
        reckway: 'group', // è®¡ä»¶æ–¹å¼
        operation: getCookie('navTabId'), // æŠ¥å·¥äººï¼ˆæ”¶æ–™äººï¼‰
        remarks: ''// å¤‡æ³¨
      },
      ZZuserArr: [], // è‡ªåˆ¶ç”¨æˆ·æ‰€æœ‰
      ZZtreams: [], // è‡ªåˆ¶ç”Ÿäº§ç­ç»„数组
      ZZeqpArr: [], // è‡ªåˆ¶è®¾å¤‡åç§°
      badArr: [], // ä¸è‰¯åŽŸå› æ•°ç»„
      WXouterprovide: [], // å¤–协供方数组
      WXoutuser: [], // å‘料人员数组
      userTableData: [], // äººå‘˜åˆ—表
      UserTotal: 0,
      Userform: {},
      userIsSave: false, // æ­¤äººå‘˜æ˜¯å¦å¯ä¿æŒ
      dialogFormRules: {
        outuser: [
          {required: true, message: '请选择发料人员', trigger: ['blur', 'change']}
        ],
        fqty: [
          {required: true, message: '请输入发料数量', trigger: ['blur', 'change']}
        ],
        wxcode: [
          {required: true, message: '请选择外协供方', trigger: ['blur', 'change']}
        ],
        inuser: [
          {required: true, message: '请选择收料人员', trigger: ['blur', 'change']}
        ],
        sqty: [
          {required: true, message: '请输入收料数量', trigger: ['blur', 'change']}
        ],
        // noputqty: [
        //   { required: true, message: '请输入不良数量', trigger: ['blur', 'change'] }
        // ],
        // badcode: [
        //   { required: true, message: '请选择不良原因', trigger: ['blur', 'change'] }
        // ]
        eqpcode: [
          {required: true, message: '请选择生产设备', trigger: ['blur', 'change']}
        ],
        usergroupcode: [
          {required: true, message: '请选择生产班组', trigger: ['blur', 'change']}
        ],
        startqty: [
          {required: true, message: '请输入报工数量', trigger: ['blur', 'change']}
        ],
        operation: [
          {required: true, message: '请选择报工人员', trigger: ['blur', 'change']}
        ]
      },
      activeName: '',
      dialogVisible2: false,
      printObj2: {
        id: 'printMe2',
        popTitle: '打印模板',
        preview: false,
        extraHead: '<meta http-equiv="Content-Language" content="zh-cn"/>',
        closeCallback(vue) { // å…³é—­æ‰“印的回调事件(无法确定点击的是确认还是取消)
          console.log('11212', vue)
          // vue.dialogVisible = false
          vue.dialogVisible2 = false
          vue.dialogVisible = false
        },
        beforeOpenCallback(vue) {
          vue.printLoading = true
          console.log('打开之前')
          console.log()
        },
        openCallback(vue) {
          vue.printLoading = false
          console.log('执行了打印')
        }
      },
      qrForm: { // æ‰“印内容
        qrvalue: '',
        startqty: '',
        wo_code: '',
        partcode: '',
        partname: '',
        nextstepname: '',
        operator: '', // æ“ä½œäºº
        operatorTime: ''// æ“ä½œæ—¶é—´
      },
      badForm: {
        orderstepqrcode: '', // æ‰«æçš„二维码
        prop: 'wo_code',
        order: 'asc',
        page: 1,
        rows: 20
      },
      badTableData: [], // ä¸è‰¯å¤„理列表table数据
      badTotal: 0,
      badDialogVisible: false,
      badDialogForm: {
        operation: getCookie('navTabId')
      },
      badTableDataDialog: [], // ä¸è‰¯å¯¹è¯æ¡†table表格
      OperationArr: [], // äººå‘˜æ•°ç»„
      sendButtonIsDisabled: false, // ä¸‹è¾¾æŒ‰é’®æ˜¯å¦å¯ç‚¹å‡»
      judgeIsScanningArr: [], // åˆ¤æ–­æ˜¯å¦æ‰«ç æ•°ç»„
      countJudgeIsScanningInput: 0 // åˆ¤æ–­æ‰«ç æ¡†çš„个数
    }
  },
  watch: {
    // 'form.orderstepqrcode': {
    //   handler(newValue) {
    //     this.form.orderstepqrcode = newValue
    //
    //     // åœ¨è¿™é‡Œè°ƒç”¨ï¼Œå¹¶æ‰§è¡Œthis.fnThrottle(this.search, 500, 2000)();
    //     this.fnThrottle(this.enterNative, 500, 2000, 'produceCode')()
    //   }
    // },
    // 'WXform.orderstepqrcode': {
    //   handler(newValue) {
    //     this.form.orderstepqrcode = newValue
    //
    //     // åœ¨è¿™é‡Œè°ƒç”¨ï¼Œå¹¶æ‰§è¡Œthis.fnThrottle(this.search, 500, 2000)();
    //     this.fnThrottle(this.enterNative, 500, 2000, 'WXproduceCode')()
    //   }
    // },
    // 'badForm.orderstepqrcode': {
    //   handler(newValue) {
    //     this.form.orderstepqrcode = newValue
    //
    //     // åœ¨è¿™é‡Œè°ƒç”¨ï¼Œå¹¶æ‰§è¡Œthis.fnThrottle(this.search, 500, 2000)();
    //     this.fnThrottle(this.enterNative, 500, 2000, 'badProduceCode')()
    //   }
    // }
  },
  created() {
    this.getMesOrderStepSearch()
    this.tabClick()
  },
  mounted() {
    window.addEventListener('resize', this.getHeight)
    this.getHeight()
    this.$nextTick(() => {
      $("input[name='produceCode']")[0].focus()
      // this.bindQRCode('10001;001')
    })
    // webapp_urlprotocol_startup()
    // webapp_ws_autoupdate(true)
    this.getMesOrderSelectUserAll() // èŽ·å–æ‰€æœ‰äººå‘˜
  },
  methods: {
    // è®¡ä»¶æ–¹å¼å€¼æ”¹å˜æ—¶
    reckwayChange() {
      this.dialogForm.usergroupcode = ''
      this.dialogForm.operation = ''
      this.userTableData = []
      // console.log(this.$refs.dialogForm, 'log')
      // this.$nextTick(() => {
      //   this.$refs.dialogForm.resetFields()
      // })
    },
    tableRowClassName({row, rowIndex}) {
      return 'custom-row'
    },
    async getMesOrderStepSearch() {
      const res = await MesOrderStepSearch(this.form)
      if (res.code === '200') {
        this.tableData = res.data
        this.total = res.count
      }
    },
    async getMesOrderWxStepSearch() {
      const res = await MesOrderWxStepSearch(this.WXform)
      if (res.code === '200') {
        this.WXtableData = res.data
      }
    },
    // æŽ’序改变时
    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.getMesOrderStepSearch()
    },
    // WX排序改变时
    WXsortChange({column, prop, order}) {
      if (order === 'descending') {
        order = 'desc'
      } else if (order === 'ascending') {
        order = 'asc'
      } else {
        order = 'desc'
      }
      this.WXform.order = order
      this.WXform.prop = prop
      this.getMesOrderWxStepSearch()
    },
    badSortChange({column, prop, order}) {
      if (order === 'descending') {
        order = 'desc'
      } else if (order === 'ascending') {
        order = 'asc'
      } else {
        order = 'desc'
      }
      this.badForm.order = order
      this.badForm.prop = prop
      this.getBadList()
    },
    // è‡ªåˆ¶é¡µç­¾åŽŸç‚¹ç‚¹å‡»
    getCurrentRow(val) {
    },
    // å¤–协页签原点点击
    getWXCurrentRow(val) {
      console.log(val)
      this.WXradioSelected = val
    },
    // tab按钮切换鼠标自动聚焦
    tabClick(val, d) {
      if (this.$refs.elTabs.currentName === '0') {
        this.$nextTick(() => {
          this.getMesOrderStepSearch()
          $("input[name='produceCode']")[0].focus()
          this.WXform.orderstepqrcode = ''
        })
      }
      if (this.$refs.elTabs.currentName === '1') {
        this.$nextTick(() => {
          this.getMesOrderWxStepSearch()
          $("input[name='WXproduceCode']")[0].focus()
          this.form.orderstepqrcode = ''
        })
      }
      if (this.$refs.elTabs.currentName === '2') {
        this.$nextTick(() => {
          this.getBadList()
          $("input[name='badProduceCode']")[0].focus()
          this.badForm.orderstepqrcode = ''
        })
      }
    },
    // é˜²æŠ–      //扫码用的是防抖
    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()
            if (belong === 'produceCode') {
              that.enterNative(that.form.orderstepqrcode, belong)
            }
            if (belong === 'WXproduceCode') {
              that.enterNative(that.WXform.orderstepqrcode, belong)
            }
            if (belong === 'badProduceCode') {
              that.enterNative(that.badForm.orderstepqrcode, belong)
            }
          }, delay)
        }
      }
    },
    // åˆ¤æ–­æ˜¯å¦æ˜¯æ‰«ç æžªæ‰«ç 
    judgeIsScanning2(e, belong) {
      if (belong === 'produceCode' && this.form.orderstepqrcode.toString().length === 0) {
        this.judgeIsScanningArr = []
        this.countJudgeIsScanningInput = 0
      }
      if (belong === 'WXproduceCode' && this.WXform.orderstepqrcode.toString().length === 0) {
        this.judgeIsScanningArr = []
        this.countJudgeIsScanningInput = 0
      }
      const timenow = e.timeStamp
      // console.log(timenow, 1)
      // let flag = true
      let flag = false
      this.judgeIsScanningArr.push(timenow)
      let i
      for (i in this.judgeIsScanningArr) {
        console.log(Math.ceil(this.judgeIsScanningArr[this.judgeIsScanningArr.length - 1]) - Math.ceil(this.judgeIsScanningArr[this.judgeIsScanningArr.length - 2]))
        // flag = Math.ceil(this.judgeIsScanningArr[this.judgeIsScanningArr.length - 1]) - Math.ceil(this.judgeIsScanningArr[this.judgeIsScanningArr.length - 2]) < 0.1
        if (Math.ceil(this.judgeIsScanningArr[this.judgeIsScanningArr.length - 1]) - Math.ceil(this.judgeIsScanningArr[this.judgeIsScanningArr.length - 2]) < 0.1) {
          this.countJudgeIsScanningInput++
        }
        if (this.countJudgeIsScanningInput >= 3) {
          flag = true
        }
        if (i > 0 && this.judgeIsScanningArr.length === parseInt(i) + 1) {
          if (flag) {
            console.log(flag, 1)
            this.fnThrottle(this.enterNative, 500, 2000, belong)()
            return
          }
        }
      }
      // // for (i in this.judgeIsScanningArr) {
      // // console.log(i)
      // // console.log( this.judgeIsScanningArr)
      // console.log(Math.ceil(this.judgeIsScanningArr[this.judgeIsScanningArr.length - 1]) - Math.ceil(this.judgeIsScanningArr[this.judgeIsScanningArr.length - 2]))
      // if (Math.ceil(this.judgeIsScanningArr[this.judgeIsScanningArr.length - 1]) - Math.ceil(this.judgeIsScanningArr[this.judgeIsScanningArr.length - 2]) < 10) {
      //   this.countJudgeIsScanningInput++
      // }
      // if (this.countJudgeIsScanningInput > this.judgeIsScanningArr.length / 2) {
      //   flag = true
      // }
      // // 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) {
      //   console.log(flag, 2)
      //   this.fnThrottle(this.enterNative, 500, 2000, belong)()
      //   return
      // }
      // // }
      // // }
    },
    // åˆ¤æ–­æ˜¯å¦æ˜¯æ‰«ç æžªæ‰«ç 
    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) {
      console.log(val, belong, 89898989)
      // å¼€å·¥ï¼šcode="200"  count=0
      // æŠ¥å·¥ï¼šcode="200"  count=1
      // å‘料:code="200"  count=2
      // æ”¶æ–™ï¼šcode="200"  count=3
      // èµ°åˆ—表形式 code="200"  count=4
      if (belong === 'produceCode') {
        const orderstepqrcode = this.form.orderstepqrcode
        const data = {
          OperType: 'ZZ',
          orderstepqrcode: orderstepqrcode,
          SelectType: ''
        }
        MesOrderStepStart(data).then(res => {
          if (res.code === '200' && res.count === 0) {
            this.ZZstart(res.data)
          } else if (res.code === '200' && res.count === 1) {
            this.ZZreport(res.data)
          }
        }).catch(e => {
          this.form.orderstepqrcode = ''
        })
      }
      if (belong === 'WXproduceCode') {
        const orderstepqrcode = this.WXform.orderstepqrcode
        const data = {
          OperType: 'WX',
          orderstepqrcode: orderstepqrcode,
          SelectType: this.WXSelected// OUT、IN
        }
        MesOrderStepStart(data).then(res => {
          if (res.code === '200' && res.count === 2) {
            this.WXsend(res.data)
          } else if (res.code === '200' && res.count === 3) {
            this.WXback(res.data)
          }
        }).catch(e => {
          this.WXform.orderstepqrcode = ''
        })
      }
      if (belong === 'badProduceCode') {
        // this.badForm.orderstepqrcode=
        await this.getBadList()
        await this.repairHandle(this.badForm.orderstepqrcode)
        this.badDialogVisible = true
      }
    },
    // æŸ¥è¯¢
    search() {
      this.getMesOrderStepSearch()
    },
    // è‡ªåˆ¶å¼€å§‹
    async ZZstart(obj) {
      // if (!this.ZZisExecutable) {
      //   return this.$message.info('请先扫码工序二维码!')
      // }
      this.dialogTitle = '自制开始'
      this.dialogVisible = true
      this.$nextTick(() => {
        this.dialogForm.wo_code = obj.wo_code
        this.dialogForm.partcode = obj.partnumber
        this.dialogForm.partname = obj.partname
        this.dialogForm.partspec = obj.partspec
        this.dialogForm.stepseq = obj.seq
        this.dialogForm.stepcode = obj.stepcode
        this.dialogForm.stepname = obj.stepname
        this.dialogForm.stepdesc = obj.stepdesc
        this.dialogForm.planqty = obj.planqty
        this.dialogForm.reportqty = obj.reportqty
        this.dialogForm.noreportqty = obj.noreportqty
        // this.dialogForm.startqty = obj.startqty
        this.dialogForm.startqty = obj.noreportqty
      })
      await this.getMesOrderStepStartSelectEqp()
    },
    // è‡ªåˆ¶æŠ¥å·¥
    async ZZreport(obj) {
      // if (!this.ZZisExecutable) {
      //   return this.$message.info('请先扫码工序二维码!')
      // }
      this.dialogTitle = '自制报工'
      this.dialogVisible = true
      this.$nextTick(() => {
        this.dialogForm.wo_code = obj.wo_code
        this.dialogForm.partcode = obj.partnumber
        this.dialogForm.partname = obj.partname
        this.dialogForm.partspec = obj.partspec
        this.dialogForm.stepseq = obj.seq
        this.dialogForm.stepcode = obj.stepcode
        this.dialogForm.stepname = obj.stepname
        this.dialogForm.stepdesc = obj.stepdesc
        this.dialogForm.planqty = obj.planqty
        this.dialogForm.reportqty = obj.reportqty
        this.dialogForm.noputqty = obj.noputqty
        this.dialogForm.noreportqty = obj.noreportqty
        // this.dialogForm.startqty = obj.startqty
        this.dialogForm.startqty = obj.noreportqty
        this.dialogForm.nextstepname = obj.nextstepname
        this.dialogForm.nextstepcode = obj.nextstepcode ? obj.nextstepcode : obj.stepcode
        this.dialogForm.startqtySum = obj.noreportqty
      })
      await this.getMesOrderStepStartSelectEqp()
      await this.getMesOrderStepReportSelectUserGroup()
      await this.getMesOrderStepSelectCause('ZZ')
      await this.getMesOrderSelectUserZZ()
    },
    // å¤–协发料
    async WXsend(obj) {
      // if (this.WXradioSelected.length < 1 && obj.length < 1) {
      //   return this.$message.info('请先选择工序!')
      // }
      // console.log(this.WXform.orderstepqrcode === '', 6)
      // if (this.WXform.orderstepqrcode === '') {
      //   return this.$message.info('请先输入工序!')
      // }
      this.dialogTitle = '外协发料'
      this.dialogVisible = true
      this.$nextTick(() => {
        this.dialogForm.wo_code = obj.wo_code
        this.dialogForm.partcode = obj.partnumber
        this.dialogForm.partname = obj.partname
        this.dialogForm.partspec = obj.partspec
        this.dialogForm.stepname = obj.stepname
        this.dialogForm.stepdesc = obj.stepdesc
        this.dialogForm.planqty = obj.planqty
        this.dialogForm.reportqty = obj.reportqty
        this.dialogForm.noreportqty = obj.noreportqty
        this.dialogForm.fqty = obj.startqty
        this.dialogForm.stepcode = obj.stepcode
        this.dialogForm.stepseq = obj.seq
      })
      await this.getMesOrderStepSelectWX()
      await this.getMesOrderSelectUser()
    },
    // å¤–协收料
    async WXback(obj) {
      // if (this.WXform.orderstepqrcode === '') {
      //   return this.$message.info('请先输入工序!')
      // }
      this.dialogTitle = '外协收料'
      this.dialogVisible = true
      this.$nextTick(() => {
        this.dialogForm.wo_code = obj.wo_code
        this.dialogForm.partcode = obj.partnumber
        this.dialogForm.partname = obj.partname
        this.dialogForm.partspec = obj.partspec
        this.dialogForm.stepname = obj.stepname
        this.dialogForm.stepdesc = obj.stepdesc
        this.dialogForm.planqty = obj.planqty
        this.dialogForm.reportqty = obj.reportqty
        this.dialogForm.noreportqty = obj.noreportqty
        this.dialogForm.stepcode = obj.stepcode
        this.dialogForm.nextstepname = obj.nextstepname
        this.dialogForm.nextstepcode = obj.nextstepcode ? obj.nextstepcode : obj.stepcode
        this.dialogForm.noputqty = obj.noputqty
        this.dialogForm.stepseq = obj.seq
        this.dialogForm.sqty = obj.startqty
        this.dialogForm.startqtySum = obj.startqty
      })
      await this.getMesOrderStepSelectWX()
      await this.getMesOrderSelectUser()
      await this.getMesOrderStepSelectCause('WX')
    },
    // ç”Ÿäº§ç­ç»„下拉改变
    usergroupChange(val) {
      this.dialogForm.usergroupcode = val
      this.getMesOrderSelectUserZZ2()
    },
    // èŽ·å–è‡ªåˆ¶æŠ¥å·¥ç”Ÿäº§ç­ç»„ä¸‹æ‹‰åˆ—è¡¨
    async getMesOrderStepReportSelectUserGroup() {
      const {data: res} = await MesOrderStepReportSelectUserGroup()
      this.ZZtreams = res
    },
    // èŽ·å–è‡ªåˆ¶æŠ¥å·¥è¡¨æ ¼user所有
    async getMesOrderSelectUserZZ() {
      const {data: res} = await MesOrderSelectUser({usercode: this.dialogForm.usergroupcode})
      this.ZZuserArr = res
    },
    async getMesOrderSelectUserZZ2() {
      const {data: res} = await MesOrderSelectUser({usercode: ''})
      this.ZZuserArr = res
      await this.getUserTableData()
    },
    // èŽ·å–è‡ªåˆ¶ç”Ÿäº§è®¾å¤‡ä¸‹æ‹‰
    async getMesOrderStepStartSelectEqp() {
      const {data: res} = await MesOrderStepStartSelectEqp({orderstepqrcode: this.form.orderstepqrcode})
      this.ZZeqpArr = res
    },
    // èŽ·å–WX供方接口
    async getMesOrderStepSelectWX() {
      const {data: res} = await MesOrderStepSelectWX({orderstepqrcode: this.WXform.orderstepqrcode})
      this.WXouterprovide = res
    },
    // èŽ·å–æ”¶å‘æ–™äººå‘˜ä¸‹æ‹‰æŽ¥å£
    async getMesOrderSelectUser() {
      const {data: res} = await MesOrderSelectUser({usercode: this.dialogForm.outuser})
      this.WXoutuser = res
    },
    // èŽ·å–æ”¶æ–™ä¸è‰¯åŽŸå› ä¸‹æ‹‰
    async getMesOrderStepSelectCause(val) {
      let orderstepqrcode = ''
      if (val === 'WX') {
        orderstepqrcode = this.WXform.orderstepqrcode
      }
      if (val === 'ZZ') {
        orderstepqrcode = this.form.orderstepqrcode
      }
      const {data: res} = await MesOrderStepSelectCause({orderstepqrcode: orderstepqrcode})
      this.badArr = res
    },
    // æŠ¥å·¥æŸ¥è¯¢ç”¨æˆ·è¡¨
    async getUserTableData() {
      const {data: res} = await MesOrderGroupSelectUser({usergroupcode: this.dialogForm.usergroupcode})
      this.userTableData = res
      this.userTableData.forEach(item => {
        let number = Math.random() * Math.random()// ä½œä¸ºåˆ é™¤æ—¶çš„æ ‡è¯†ç¬¦
        number = number === 0 ? (10 + Math.random()) : number
        item.isVisible = 0
        item.number = number
        // item.ratio = parseFloat((100 / this.userTableData.length).toFixed(2))
      })
      this.ZZuserArr = [...this.ZZuserArr].filter(x => [...this.userTableData].every(y => y.usercode !== x.usercode))
      this.calculatedValue()
      this.$refs.tableDataRef.doLayout()
    },
    calculatedValue() {
      const total = 100;
      let value = 0
      this.userTableData.forEach(item => {
        item.ratio = parseFloat((100 / this.userTableData.length).toFixed(2))
        value += item.ratio
      })
      console.log(value, 1)
      if (value !== total) {
        // let temp = this.userTableData
        // temp[temp.length-1].ratio=temp[temp.length-1].ratio+(total-value)
        this.userTableData[this.userTableData.length - 1].ratio = parseFloat((this.userTableData[this.userTableData.length - 1].ratio + (total - value)).toFixed(2))
      }
    },
    // ä¿®æ”¹åˆ†é…æ¯”列
    editRatio(row) {
      // console.log(row, 'row')
      this.userTableData.forEach((item, index) => {
        if (item.number === row.number) {
          const number = Math.random() * Math.random()// ä½œä¸ºåˆ é™¤æ—¶çš„æ ‡è¯†ç¬¦
          this.userTableData.splice(index, 1, {
            usercode: row.usercode,
            username: row.username,
            ratio: row.ratio,
            isVisible: 2,
            number: number === 0 ? (10 + Math.random()) : number
          })
        }
      })
    },
    // ç”¨æˆ·æ·»åŠ 
    userAdd() {
      if (this.userTableData.find(i => i.isVisible === 1)) {
        return this.$message.info('请先保存当前行信息!')
      }
      let number = Math.random() * Math.random()// ä½œä¸ºåˆ é™¤æ—¶çš„æ ‡è¯†ç¬¦
      number = number === 0 ? (10 + Math.random()) : number
      console.log(this.userTableData, 6)
      this.userTableData.unshift({usercode: '', username: '', isVisible: 1, number: number, ratio: 0})
      this.calculatedValue()
    },
    // ç”¨æˆ·åˆ—表删除
    userDel(row) {
      this.ZZuserArr.splice(0, 0, {
        usercode: row.usercode,
        username: row.username
      })
      this.userTableData.forEach((item, index) => {
        if (item.number === row.number) {
          this.userTableData.splice(index, 1)
        }
      })
      this.calculatedValue()
    },
    // ç”¨æˆ·åˆ—表保存
    userSave(row) {
      console.log(row, 123)
      if (row.usercode === '') {
        return this.$message.info('人员名称不能为空!')
      }
      if (row.ratio === '') {
        return this.$message.info('分配比列不能为空!')
      }
      this.ZZuserArr.forEach((item, index) => {
        if (item.usercode === row.usercode) {
          this.ZZuserArr.splice(index, 1)
        }
      })
      this.userTableData.forEach(item => {
        if (item.number === row.number) {
          item.isVisible = 0
        }
      })
    },
    // ç”¨æˆ·åˆ—表取消
    userCancel(row) {
      this.userTableData.forEach((item, index) => {
        if (item.number === row.number) {
          this.userTableData.splice(index, 1)
        }
      })
    },
    // ç”¨æˆ·åˆ—表人员名称值选中
    usernameChange(val, row) {
      this.userTableData.forEach(item => {
        if (item.usercode === val) {
          this.userIsSave = true
          return this.$message.info('此人员已在列中!')
        }
        if (item.number === row.number) {
          this.userIsSave = false
          item.usercode = val
          item.username = this.ZZuserArr.find(item => item.usercode === val).username
        }
      })
    },
    // å¯¹è¯æ¡†å…³é—­äº‹ä»¶
    handleClose() {
      this.judgeIsScanningArr = []
      this.form.orderstepqrcode = ''
      this.WXform.orderstepqrcode = ''
      this.badForm.orderstepqrcode = ''
      this.dialogForm.wo_code = '', // å·¥å•编号
        this.dialogForm.partcode = '', // äº§å“ç¼–码
        this.dialogForm.partname = '', // äº§å“åç§°
        this.dialogForm.partspec = '', // äº§å“è§„æ ¼
        this.dialogForm.stepseq = '', // å·¥åºåºå·
        this.dialogForm.stepcode = '', // å·¥åºç¼–码
        this.dialogForm.stepname = '', // å½“前工序名
        this.dialogForm.nextstepname = '', // ä¸‹ä¸€é“工序名
        this.dialogForm.stepdesc = '', // å·¥åºæè¿°
        this.dialogForm.planqty = '', // ä»»åŠ¡æ•°é‡
        this.dialogForm.reportqty = '', // å·²æŠ¥æ•°é‡
        this.dialogForm.noreportqty = '', // æœªæŠ¥æ•°é‡
        this.dialogForm.startqty = '', // å¼€(报)工数量
        this.dialogForm.wxcode = '', // å¤–协供应商编码
        this.dialogForm.outuser = '', // å‘料人员
        this.dialogForm.taskqty = '', // ä»»åŠ¡æ•°é‡
        this.dialogForm.fqty = '', // å‘料数量
        this.dialogForm.inuser = getCookie('navTabId'), // æ”¶æ–™äººå‘˜  é»˜è®¤ç™»å½•人员
        this.dialogForm.sqty = '', // æ”¶æ–™æ•°é‡
        this.dialogForm.ngqty = '', // ä¸è‰¯æ•°é‡
        this.dialogForm.badcode = '', // ä¸è‰¯åŽŸå› ç¼–ç 
        this.dialogForm.noputqty = '', // ä¸è‰¯æ•°é‡
        this.dialogForm.eqpcode = '', // ç”Ÿäº§è®¾å¤‡ç¼–码
        this.dialogForm.usergroupcode = '', // ç­ç»„编码
        this.dialogForm.reportuser = '', // æŠ¥å·¥äººå‘˜
        this.dialogForm.startqtySum = '' // ä¸èƒ½è¶…过的数值
      this.dialogForm.reckway = '' // è®¡ä»¶æ–¹å¼
      this.dialogForm.nextstepcode = '' // ä¸‹é“工序编码
      this.dialogForm.reckway = 'group'
      this.dialogForm.remarks = '' // å¤‡æ³¨
      this.dialogForm.operation = getCookie('navTabId') // æŠ¥å·¥äººï¼ˆæ”¶æ–™äººï¼‰
      this.userTableData = [] // äººå‘˜åˆ—表
      this.$refs.dialogForm.clearValidate()
    },
    // å¯¹è¯æ¡†å–消
    dialogVisibleCancel() {
      this.dialogVisible = false
      this.tabClick()
    },
    // å¯¹è¯æ¡†ç¡®è®¤
    dialogVisibleConfirm() {
      this.$refs.dialogForm.validate(valid => {
        if (valid) {
          if (this.dialogTitle === '外协发料') {
            if (parseFloat(this.dialogForm.fqty) > parseFloat(this.dialogForm.noreportqty)) {
              return this.$message.info('发料数量不能大于未发数量!')
            }
            const data = {
              mesordercode: this.dialogForm.wo_code, // å·¥å•编号
              partcode: this.dialogForm.partcode, // äº§å“ç¼–码
              stepseq: this.dialogForm.stepseq, // å·¥åºåºå·   æš‚时缺
              stepcode: this.dialogForm.stepcode, // å·¥åºç¼–码
              wxcode: this.dialogForm.wxcode, // å¤–协供应商编码
              outuser: this.dialogForm.outuser, // å‘料人员
              taskqty: this.dialogForm.planqty, // ä»»åŠ¡æ•°é‡
              fqty: this.dialogForm.fqty // å‘料数量
            }
            this.$store.state.app.buttonIsDisabled = true
            SavaMesOrderStepOut(data).then(res => {
              if (res.code === '200') {
                this.dialogVisible = false
                this.$message.success('发料成功!')
                this.tabClick()
                this.$store.state.app.buttonIsDisabled = false
              } else {
                this.$message.error('发料失败!')
              }
            })
          }
          if (this.dialogTitle === '外协收料') {
            if (parseFloat(this.dialogForm.startqtySum) < parseFloat(this.dialogForm.sqty) + parseFloat(this.dialogForm.noputqty)) {
              return this.$message.info('收料数量加不良数量不能大于了未收数量!')
            }
            if (parseFloat(this.dialogForm.noputqty) > 0) {
              if (this.dialogForm.badcode.length < 1) {
                return this.$message.info('请选择不良原因!')
              }
            }
            const data = {
              mesordercode: this.dialogForm.wo_code, // å·¥å•编号
              partcode: this.dialogForm.partcode, // äº§å“ç¼–码
              stepseq: this.dialogForm.stepseq, // å·¥åºåºå·
              stepcode: this.dialogForm.stepcode, // å·¥åºç¼–码
              wxcode: this.dialogForm.wxcode, // å¤–协供应商编码
              inuser: this.dialogForm.inuser, // å‘料人员
              taskqty: this.dialogForm.planqty, // ä»»åŠ¡æ•°é‡
              sqty: this.dialogForm.sqty, // æ”¶æ–™æ•°é‡
              remarks: this.dialogForm.remarks, // å¤‡æ³¨
              ngqty: this.dialogForm.noputqty === '' ? 0 : this.dialogForm.noputqty, // ä¸è‰¯æ•°é‡
              badcode: this.dialogForm.badcode.length < 1 ? '' : this.dialogForm.badcode.join(';')// ä¸è‰¯åŽŸå› 
            }
            this.$store.state.app.buttonIsDisabled = true
            SavaMesOrderStepIn(data).then(res => {
              if (res.code === '200') {
                this.dialogVisible = false
                this.$message.success('收料成功!')
                if (this.dialogForm.nextstepcode === '') {
                  // this.WXprint2(this.OperationArr.find(item => item.usercode === this.dialogForm.inuser).username)
                  this.WXprint2(this.OperationArr.find(item => item.usercode === getCookie('navTabId')).username)
                  this.dialogVisible2 = true
                }
                this.tabClick()
                this.$store.state.app.buttonIsDisabled = false
              } else {
                this.$message.error('收料失败!')
              }
            })
          }
          if (this.dialogTitle === '自制开始') {
            const data = {
              mesordercode: this.dialogForm.wo_code, // å·¥å•编号
              partcode: this.dialogForm.partcode, // äº§å“ç¼–码
              stepseq: this.dialogForm.stepseq, // å·¥åºåºå·   æš‚时缺
              stepcode: this.dialogForm.stepcode, // å·¥åºç¼–码
              eqpcode: this.dialogForm.eqpcode, // ç”Ÿäº§è®¾å¤‡
              taskqty: this.dialogForm.planqty, // ä»»åŠ¡æ•°é‡
              startqty: this.dialogForm.startqty// å¼€å§‹æ•°é‡
            }
            this.$store.state.app.buttonIsDisabled = true
            SavaMesOrderStepStart(data).then(res => {
              if (res.code === '200') {
                this.dialogVisible = false
                this.$message.success('开工成功!')
                this.tabClick()
                this.$store.state.app.buttonIsDisabled = false
              } else {
                this.$message.error('开工失败!')
              }
            })
          }
          if (this.dialogTitle === '自制报工') {
            if (parseFloat(this.dialogForm.startqtySum) < parseFloat(this.dialogForm.startqty) + parseFloat(this.dialogForm.noputqty)) {
              return this.$message.info('报工数量加不良数量不能大于了未报数量!')
            }
            if (this.userTableData.length < 1 && this.dialogForm.reckway === 'group') {
              return this.$message.info('人员列表不能为空!')
            }
            // this.userTableData = [...new Set(this.userTableData)]// æ•°ç»„去重
            this.userTableData = this.userTableData.filter(item => item.usercode !== '')
            // æ•°ç»„中对象相同的去重
            this.userTableData = this.userTableData.filter((currentValue, currentIndex, selfArr) => {
              return selfArr.findIndex(item => item.usercode === currentValue.usercode) === currentIndex
            })
            if (this.dialogForm.reckway === 'group') {
              let sum = 0
              this.userTableData.forEach(item => {
                sum += parseFloat(item.ratio)
              })
              if (Math.round(sum * 100) / 100 !== 100) {
                return this.$message.info('分配比例总和必须为100!')
              }
            }
            if (parseFloat(this.dialogForm.noputqty) > 0) {
              if (this.dialogForm.badcode.length < 1) {
                return this.$message.info('请选择不良原因!')
              }
            }
            // console.log(this.userTableData, 1)
            // const reportuser = this.userTableData.map(item => item.usercode).join(';')// ä¸»è¦æ”¹çš„æ˜¯è¿™é‡Œçš„æ ¼å¼
            console.log(this.dialogForm.operation, 'dialogForm.operation')
            const data = {
              mesordercode: this.dialogForm.wo_code, // å·¥å•编号
              partcode: this.dialogForm.partcode, // äº§å“ç¼–码
              stepseq: this.dialogForm.stepseq, // å·¥åºåºå·
              stepcode: this.dialogForm.stepcode, // å·¥åºç¼–码
              eqpcode: this.dialogForm.eqpcode, // è®¾å¤‡ç¼–码
              usergroupcode: this.dialogForm.usergroupcode, // ç­ç»„编码
              // reportuser: reportuser, // æŠ¥å·¥äººå‘˜
              reportuser: this.dialogForm.reckway === 'group' ? this.userTableData : [{
                usercode: this.dialogForm.operation,
                ratio: 100
              }],
              taskqty: this.dialogForm.planqty, // ä»»åŠ¡æ•°é‡
              // startqty: this.dialogForm.startqty, // å¼€å·¥æ•°é‡
              startqty: this.dialogForm.reportqty, // å¼€å·¥æ•°é‡
              // reportqty: this.dialogForm.reportqty, // æŠ¥å·¥æ•°é‡
              reportqty: this.dialogForm.startqty, // æŠ¥å·¥æ•°é‡
              remarks: this.dialogForm.remarks, // å¤‡æ³¨
              reckway: this.dialogForm.reckway, // è®¡ä»¶æ–¹å¼
              ngqty: this.dialogForm.noputqty === '' ? 0 : this.dialogForm.noputqty, // ä¸è‰¯æ•°é‡
              badcode: this.dialogForm.badcode.length < 1 ? '' : this.dialogForm.badcode.join(';')// ä¸è‰¯åŽŸå› 
            }
            // console.log(JSON.stringify(data), 'data')
            console.log(data, 'data')
            this.$store.state.app.buttonIsDisabled = true
            SavaMesOrderStepReport(data).then(res => {
              if (res.code === '200') {
                this.dialogVisible = false
                this.$message.success('报工成功!')
                if (this.dialogForm.nextstepcode === '') {
                  this.ZZprint2(this.OperationArr.find(item => item.usercode === getCookie('navTabId')).username)
                  this.dialogVisible2 = true
                }
                this.tabClick()
                this.$store.state.app.buttonIsDisabled = false
              } else {
                this.$message.error('报工失败!')
              }
            })
          }
        }
      })
    },
    // ç”ŸæˆäºŒç»´ç 
    bindQRCode(text) {
      new QRCode(this.$refs.qrCodeDiv2, {
        text: text,
        // width: 50,
        width: 55,
        // height: 50,
        height: 55,
        colorDark: '#000', // äºŒç»´ç é¢œè‰²
        colorLight: '#ffffff', // äºŒç»´ç èƒŒæ™¯è‰²
        correctLevel: QRCode.CorrectLevel.L// å®¹é”™çŽ‡ï¼ŒL/M/H
      })
    },
    ZZprint2(username) {
      this.qrForm.qrvalue = this.dialogForm.wo_code + ';' + this.dialogForm.nextstepcode
      this.qrForm.startqty = this.dialogForm.startqty
      this.qrForm.wo_code = this.dialogForm.wo_code
      this.qrForm.partcode = this.dialogForm.partcode
      this.qrForm.partname = this.dialogForm.partname
      this.qrForm.nextstepname = this.dialogForm.nextstepname
      this.qrForm.operator = username
      this.qrForm.operatorTime = handleDatetime2(new Date())
      this.$nextTick(() => {
        this.bindQRCode(this.qrForm.qrvalue)
      })
    },
    WXprint2(username) {
      this.qrForm.qrvalue = this.dialogForm.wo_code + ';' + this.dialogForm.nextstepcode
      this.qrForm.startqty = this.dialogForm.sqty
      this.qrForm.wo_code = this.dialogForm.wo_code
      this.qrForm.partcode = this.dialogForm.partcode
      this.qrForm.partname = this.dialogForm.partname
      this.qrForm.nextstepname = this.dialogForm.nextstepname
      this.qrForm.operator = username
      this.qrForm.operatorTime = handleDatetime2(new Date())
      this.$nextTick(() => {
        this.bindQRCode(this.qrForm.qrvalue)
      })
    },
    dialogVisible2Close() {
      this.qrForm.qrvalue = ''
      this.qrForm.startqty = ''
      this.qrForm.wo_code = ''
      this.qrForm.partcode = ''
      this.qrForm.partname = ''
      this.qrForm.nextstepname = ''
      this.qrForm.operator = ''
      this.qrForm.operatorTime = ''
      // this.$refs.qrCodeDiv2 = ''
    },
    // èŽ·å–é¡µé¢é«˜åº¦
    getHeight() {
      this.$nextTick(() => {
        this.mainHeight = window.innerHeight - 85
        this.tableHeight = this.mainHeight - 190
        this.isIpad = window.innerHeight < 769
        if (window.innerHeight < 769) {
          this.tableHeight = this.tableHeight - 50
        }
        this.$refs.tableDataRef.doLayout()
      })
    },
    // èŽ·å–ä¸è‰¯å¤„ç†åˆ—è¡¨
    async getBadList() {
      const res = await MesOrderNgStepSearch(this.badForm)
      this.badTableData = res.data
      this.badTotal = res.count
    },
    badDialogVisibleCancel() {
      this.badDialogVisible = false
    },
    badDialogVisibleConfirm() {
      const data = {
        Data: this.badTableDataDialog
      }
      this.$store.state.app.buttonIsDisabled = true
      EditOrderNgStepSeave(data, getCookie('navTabId')).then(res => {
        if (res.code === '200' || res.code === '301') {
          this.getBadList()
          this.badDialogVisible = false
          this.badPrint(this.OperationArr.find(item => item.usercode === getCookie('navTabId')).username)
          this.dialogVisible2 = true
          this.$message.success('保存成功!')
          this.$store.state.app.buttonIsDisabled = false
        }
      })
    },
    badPrint(username) {
      this.qrForm.qrvalue = this.badDialogForm.wo_code + ';' + this.badDialogForm.nextstepcode
      this.qrForm.startqty = this.badDialogForm.plan_qty
      this.qrForm.wo_code = this.badDialogForm.wo_code
      this.qrForm.partcode = this.badDialogForm.partcode
      this.qrForm.partname = this.badDialogForm.partname
      this.qrForm.nextstepname = this.badDialogForm.nextstepname
      this.qrForm.operator = username
      this.qrForm.operatorTime = handleDatetime2(new Date())
      this.$nextTick(() => {
        this.bindQRCode(this.qrForm.qrvalue)
      })
    },
    handleCloseBad() {
      this.badDialogForm = {}
      this.badDialogForm.operation = getCookie('navTabId')
      this.badTableDataDialog = []
      this.judgeIsScanningArr = []
    },
    async getMesOrderSelectUserAll() {
      const {data: res} = await MesOrderSelectUser({usercode: ''})
      this.OperationArr = res
    },
    // ç‚¹å‡»ç»´ä¿®å¤„理按钮  æˆ–  æ‰«ææ¡ç çš„æ‰«æå›žè½¦äº‹ä»¶
    async repairHandle(row) {
      let data
      if (row.wo_code) {
        data = {
          orderstepqrcode: row.wo_code + ';' + row.stepcode
        }
      } else {
        data = {
          orderstepqrcode: row
        }
      }
      const {data: res} = await MesOrderNgSubStepSearch(data)
      this.$nextTick(() => {
        this.badDialogForm.wo_code = res.data1.wo_code
        this.badDialogForm.partcode = res.data1.partnumber
        this.badDialogForm.partname = res.data1.partname
        this.badDialogForm.partspec = res.data1.partspec
        this.badDialogForm.stepname = res.data1.stepname
        this.badDialogForm.nextstepcode = res.data1.nextstepcode
        this.badDialogForm.nextstepname = res.data1.nextstepname
        this.badDialogForm.plan_qty = res.data1.planqty
        this.badDialogForm.good_qty = res.data1.noreportqty // æŠ¥å·¥æ•°é‡
        this.badDialogForm.ng_qty = res.data1.noputqty // ä¸è‰¯æ•°é‡
        this.badTableDataDialog = res.data2
        this.badTableDataDialog.forEach(item => {
          item.repair_qty = 0
          item.bad_qty = 0
          item.isVisible = 0
          // item.defect_code = [...new Set(item.defect_code.split(','))].join(',')
          // item.defect_name = [...new Set(item.defect_name.split(','))].join(',')
        })
        console.log(this.badTableDataDialog, 321)
        this.badDialogVisible = true
      })
    },
    badEdit(row) {
      console.log(row)
      this.badTableDataDialog.forEach((item, index) => {
        if (item.id === row.id && item.m_id === row.m_id) {
          this.badTableDataDialog.splice(index, 1, {
            bad_qty: row.bad_qty,
            repair_qty: row.repair_qty,
            isVisible: 1,
            defect_code: row.defect_code,
            defect_name: row.defect_name,
            badqty: row.badqty,
            id: row.id,
            m_id: row.m_id,
            materiel_code: row.materiel_code,
            ng_qty: row.ng_qty,
            plan_qty: row.plan_qty,
            report_qty: row.report_qty,
            seq: row.seq,
            step_code: row.step_code,
            stepname: row.stepname,
            style: row.style,
            wo_code: row.wo_code
          })
        }
      })
    },
    badSave(row) {
      if (parseFloat(row.bad_qty) + parseFloat(row.repair_qty) > parseFloat(row.ng_qty)) {
        this.badCancel(row)
        return this.$message.info('维修数量与报废数量之和不能大于不良数量!')
      }
      this.badTableDataDialog.forEach((item, index) => {
        if (item.id === row.id && item.m_id === row.m_id) {
          this.badTableDataDialog.splice(index, 1, {
            bad_qty: parseFloat(row.bad_qty),
            repair_qty: parseFloat(row.repair_qty),
            isVisible: 0,
            defect_code: row.defect_code,
            defect_name: row.defect_name,
            id: row.id,
            m_id: row.m_id,
            badqty: row.badqty,
            materiel_code: row.materiel_code,
            ng_qty: row.ng_qty,
            plan_qty: row.plan_qty,
            report_qty: row.report_qty,
            seq: row.seq,
            step_code: row.step_code,
            stepname: row.stepname,
            style: row.style,
            wo_code: row.wo_code
          })
        }
      })
    },
    badCancel(row) {
      this.badTableDataDialog.forEach((item, index) => {
        if (item.id === row.id && item.m_id === row.m_id) {
          this.badTableDataDialog.splice(index, 1, {
            // bad_qty: row.bad_qty,
            // repair_qty: row.repair_qty,
            bad_qty: 0,
            repair_qty: 0,
            isVisible: 0,
            defect_code: row.defect_code,
            defect_name: row.defect_name,
            id: row.id,
            m_id: row.m_id,
            badqty: row.badqty,
            materiel_code: row.materiel_code,
            ng_qty: row.ng_qty,
            plan_qty: row.plan_qty,
            report_qty: row.report_qty,
            seq: row.seq,
            step_code: row.step_code,
            stepname: row.stepname,
            style: row.style,
            wo_code: row.wo_code
          })
        }
      })
    },
    badDel(row) {
      this.badTableDataDialog.forEach((item, index) => {
        if (item.id === row.id && item.m_id === row.m_id) {
          this.badTableDataDialog.splice(index, 1)
        }
      })
    }
  }
}
</script>
<style lang="scss" scoped>
$main_color: #42b983;
.el-button--text {
  font-size: 14px;
  cursor: pointer;
}
.operationClass {
  height: 23px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
::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;
}
//.dialogVisible{
::v-deep .el-select .el-input .el-select__caret {
  display: flex;
  align-items: center;
  justify-content: center;
}
//}
.elTableDiv {
  ::v-deep .el-radio__label {
    display: none;
  }
}
</style>
<style media="print">
/*@media print {*/
@page {
  size: auto;
  margin: 3mm;
  font-size: 10px;
}
</style>
<!--公共页面样式-->
<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--default, .el-button--info {
  height: 34px;
  display: flex;
  align-items: center;
  padding: 0 15px;
}
::v-deep .el-button--primary {
  //background-color: $main_color !important;
}
::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 .badDialogVisible .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;
}
.body ::v-deep .el-divider {
  border: 1px solid #eee;
  width: 99%;
  margin: 10px auto;
}
.body ::v-deep .el-form-item {
  margin-bottom: 0;
}
.tableFixed {
  ::v-deep .el-table__fixed-right {
    height: 100% !important;
  }
  ::v-deep .el-table__fixed {
    height: 100% !important;
  }
}
</style>
<style>
.el-table .custom-row {
  background: #f8f8fa;
}
</style>