loulijun2021
2022-07-28 9193459fbb692abc227b1643ae52f65a2e782ebd
1.自定义打印完成
已重命名1个文件
已添加3个文件
已修改9个文件
3708 ■■■■■ 文件已修改
src/assets/images/img3.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/permission.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/kb/kbCommon.css 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/kb/printMe.vue 138 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/kb/zhkb.vue 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/scgl/gd.vue 363 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/scgl/gd_autoPrint.vue 1210 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/scgl/sckbg.vue 217 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/scgl/sckbg_autoPrint.vue 1578 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vue.config.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/img3.png

src/main.js
@@ -57,6 +57,20 @@
import watermark from './utils/watermark.js'
Vue.prototype.$watermark = watermark
// æ—¶é—´è¿‡æ»¤å™¨
Vue.filter('dataFormat', function(originVal) {
  const dt = new Date(originVal)
  const y = dt.getFullYear()
  const m = (dt.getMonth() + 1 + '').padStart(2, '0')
  const d = (dt.getDate() + '').padStart(2, '0')
  const hh = (dt.getHours() + '').padStart(2, '0')
  const mm = (dt.getMinutes() + '').padStart(2, '0')
  const ss = (dt.getSeconds() + '').padStart(2, '0')
  return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
})
new Vue({
  el: '#app',
  router,
src/permission.js
@@ -8,7 +8,7 @@
NProgress.configure({ showSpinner: false }) // NProgress Configuration
const whiteList = ['/login', '/kb'] // no redirect whitelist
const whiteList = ['/login', '/zhkb'] // no redirect whitelist
router.beforeEach(async(to, from, next) => {
  // start progress bar
src/router/index.js
@@ -35,8 +35,8 @@
  * çœ‹æ¿éƒ¨åˆ†è·¯ç”±
  * */
  {
    path: '/kb',
    component: () => import('@/views/kb/index'),
    path: '/zhkb',
    component: () => import('@/views/kb/zhkb'),
    hidden: true
  }, {
    path: '/kb2',
src/views/kb/kbCommon.css
@@ -2,40 +2,29 @@
  width: 1920px;
  height: 1080px;
  position: relative;
  background-color: lightblue;
  background-color: #000;
  font-size: 20px;
  font-family: Microsoft YaHei;
}
.kb_header {
  background-color: #00a79d;
  /*background-color: #000;*/
  background-color: #123;
  height: 90px;
  line-height: 90px;
  font-size: 40px;
  color: #09d8f2;
}
.kb_headTime{
  position: absolute;
  left: 100px;
  width: 300px;
  height: 50px;
  z-index: 10;
  top: 20px;
  font-size: 22px;
}
.kb_content {
  display: flex;
  position: relative;
  height: 990px;
}
.kb_left {
  width: 30%;
  height: 100%;
}
.kb_center {
  width: 40%;
  background-color: #00a79d;
  height: 100%;
}
.kb_right {
  width: 30%;
  height: 100%;
}
.flex_c_c {
  display: flex;
@@ -50,16 +39,6 @@
  /*align-content: center;*/
}
.kb_block{
  display: flex;
  align-content: center;
  justify-content: center;
  width: 556px;
  height: 400px;
  line-height: 400px;
  background-image: linear-gradient(to bottom right, red , yellow);
  /*background-image: repeating-radial-gradient(red, yellow 10%, green 15%);*/
  /*background-color: #5a5e66;*/
  margin: 10px;
.kb_pd10{
 padding: 10px;
}
src/views/kb/printMe.vue
ÎļþÃû´Ó src/views/kb/index.vue ÐÞ¸Ä
@@ -6,7 +6,7 @@
    <el-dialog
      title="预览"
      :visible.sync="dialogVisible"
      width="1140"
      width="812px"
    >
      <!-- è¦æ‰“印的区域 -->
      <div id="printMe" style="padding: 30px">
@@ -42,60 +42,52 @@
          id="table"
          :data="tableData"
          border
          :header-cell-style="{ background: '#c0c0c0',textAlign:'center',color:'#000'}"
          :cell-style="{textAlign: 'center',color:'#000',}"
          class="elTable"
          style="width: 100%;"
        >
          <el-table-column
            id="column0"
            prop="date"
            label="日期"
            width="100"
            prop="id"
            label="工序号"
            width="70"
          />
          <el-table-column
            id="column1"
            prop="name"
            label="姓名"
            prop="stepcode"
            label="工序二维码"
            width="100"
          />
          <el-table-column
            id="column2"
            prop="address"
            label="地址"
            width="150"
            prop="stepname"
            label="工序"
            width="120"
          />
          <el-table-column
            id="column3"
            prop="address"
            label="地址"
            width="150"
            prop="plan_qty"
            label="加工数量"
            width="100"
          />
          <el-table-column
            id="column4"
            prop="address"
            width="150"
            label="地址"
            prop="good_qty"
            width="100"
            label="合格数量"
          />
          <el-table-column
            id="column5"
            width="150"
            prop="address"
            label="地址"
            width="100"
            prop="ng_qty"
            label="不良数量"
          />
          <el-table-column
            id="column6"
            prop="address"
            prop="desc"
            width="120"
            label="地址"
          />
          <el-table-column
            id="column7"
            width="119"
            prop="address"
            label="地址"
            label="备注"
          />
        </el-table>
      </div>
@@ -226,7 +218,7 @@
      },
      QRImgUrl: '',
      QRlink: 'www.xxx.com',
      dialogVisible: false,
      dialogVisible: true,
      printObj: {
        id: 'printMe',
        popTitle: '打印模板',
@@ -283,23 +275,10 @@
        // standard: '',
        // extraCss: ''
      },
      tableData: [{
        date: '2016-05-02',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 å¼„'
      }, {
        date: '2016-05-04',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1517 å¼„'
      }, {
        date: '2016-05-01',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1519 å¼„'
      }, {
        date: '2016-05-03',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1516 å¼„'
      }],
      tableData: [
        { id: 1, stepcode: '001', stepname: '领料', plan_qty: 100, good_qty: 10, ng_qty: 5, desc: '合格' },
        { id: 2, stepcode: '001', stepname: '领料', plan_qty: 100, good_qty: 10, ng_qty: 5, desc: '合格' }
      ],
      printContentObj: {}
    }
  },
@@ -311,9 +290,9 @@
    // å¦‚æžœWEB报表客户端程序为开机自启动,以下调用应该去掉。更多说明请参考帮助“WEB报表(B/S报表)->WEB报表客户端->部署与安装”部分中与谷歌Chrome浏览器的相关说明
    webapp_urlprotocol_startup() // å¯åЍWEB报表客户端程序,以便侦听接受 WebSocket æ•°æ®
    // }
    // this.$nextTick(() => {
    //   this.bindQRCode()
    // })
    this.$nextTick(() => {
      this.bindQRCode()
    })
  },
  methods: {
    // addWatermark() {
@@ -324,32 +303,32 @@
    //   }
    // },
    clickMe() {
    //   this.dialogVisible = true
    //   this.$nextTick(() => {
    //     this.bindQRCode()
    //     this.addWatermark()
    //     console.log(document.getElementById('column0').style.width = '200px', 0)
    //     console.log(document.getElementById('column7'), 7)
    //     console.log(document.getElementById('table'), 2)
    //     console.log(document.getElementById('table').getElementsByTagName('el-table'), 1)
    //   })
      //   this.dialogVisible = true
      //   this.$nextTick(() => {
      //     this.bindQRCode()
      //     this.addWatermark()
      //     console.log(document.getElementById('column0').style.width = '200px', 0)
      //     console.log(document.getElementById('column7'), 7)
      //     console.log(document.getElementById('table'), 2)
      //     console.log(document.getElementById('table').getElementsByTagName('el-table'), 1)
      //   })
      this.dialogVisible = true
    },
    // bindQRCode() {
    //   if (this.firstbindQRCode) {
    //     const text = 'PO202206280001;Step02'
    //     new QRCode(this.$refs.qrCodeDiv2, {
    //       // text: 'Vue实现生成二维码!',
    //       text: text,
    //       width: 80,
    //       height: 80,
    //       colorDark: '#333333', // äºŒç»´ç é¢œè‰²
    //       colorLight: '#ffffff', // äºŒç»´ç èƒŒæ™¯è‰²
    //       correctLevel: QRCode.CorrectLevel.L// å®¹é”™çŽ‡ï¼ŒL/M/H
    //     })
    //     this.firstbindQRCode = false
    //   }
    // },
    bindQRCode() {
      if (this.firstbindQRCode) {
        const text = 'PO202206280001;Step02'
        new QRCode(this.$refs.qrCodeDiv, {
          // text: 'Vue实现生成二维码!',
          text: text,
          width: 80,
          height: 80,
          colorDark: '#333333', // äºŒç»´ç é¢œè‰²
          colorLight: '#ffffff', // äºŒç»´ç èƒŒæ™¯è‰²
          correctLevel: QRCode.CorrectLevel.L// å®¹é”™çŽ‡ï¼ŒL/M/H
        })
        this.firstbindQRCode = false
      }
    },
    async TestClick() {
      const data = {
        mesordercode: 'PO202206280001_4',
@@ -433,5 +412,14 @@
/*/deep/.el-table__body-wrapper::-webkit-scrollbar{*/
/*  width: 0;*/
/*}*/
/*.el-table--border,.el-table--fit{*/
/*  border-right:  1px solid #000 !important;*/
/*  border-bottom:  1px solid #000 !important;*/
/*}*/
/*.el-table--border td, .el-table--border th, .el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{*/
/*  border-left:   1px solid #000 !important;*/
/*  border-top:   1px solid #000 !important;*/
/*}*/
</style>
src/views/kb/zhkb.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,124 @@
<template>
  <div>
    <div class="kb_dashboard">
      <div class="kb_header ">
        <div class="flex_c_c">
          å¤§å²›è½¦é—´ç»¼åˆçœ‹æ¿
        </div>
        <div class="kb_headTime">
          <span>{{ headTime |dataFormat }}</span>
        </div>
      </div>
      <div class="kb_content">
        <div class="kb_left">
          <div class="kb_left_top kb_pd10">
            <div v-for="item in leftTopData" :key="item.id">
              <div class="kb_block ">
                <div>{{ item.name }}</div>
                <div style="margin-top: 10px">{{ item.value }}</div>
              </div>
            </div>
          </div>
          <div class="kb_left_bottom kb_pd10">
            2
          </div>
        </div>
        <div class="kb_right kb_pd10">
          3
        </div>
      </div>
    </div>
  </div>
</template>
<script>
import './kbCommon.css'
export default {
  name: 'Index2',
  data() {
    return {
      headTime: new Date(),
      leftTopData: [
        { id: 1, name: '锂电产线', value: 1000, children: [] },
        { id: 2, name: '包装产线', value: 1200, children: [] },
        { id: 3, name: '包装产线', value: 1300, children: [] }
      ]//
    }
  },
  created() {
  },
  mounted() {
    // setInterval(this.getNowTime, 500)
    this.handleData()
  },
  methods: {
    // å¤„理数据
    handleData() {
    },
    // èŽ·å–å½“å‰æ—¶é—´
    getNowTime() {
      const dt = new Date()
      const y = dt.getFullYear()
      const m = (dt.getMonth() + 1 + '').padStart(2, '0')
      const d = (dt.getDate() + '').padStart(2, '0')
      const hh = (dt.getHours() + '').padStart(2, '0')
      const mm = (dt.getMinutes() + '').padStart(2, '0')
      const ss = (dt.getSeconds() + '').padStart(2, '0')
      this.headTime = `${y}-${m}-${d}      ${hh}:${mm}:${ss}`
    }
  }
}
</script>
<style scoped lang="scss">
.kb_content {
  display: flex;
  position: relative;
  height: 990px;
  width: 100%;
  background-color: #99a9bf;
  .kb_left {
    width: 1340px;
    height: 100%;
    .kb_left_top {
      height: 495px;
      display: flex;
      flex-direction: column;
      justify-content: space-around;
      .kb_block{
        width: 150px;
        height: 150px;
        color: #fff;
        letter-spacing:5px;
        background-color: #42b983;
        display: flex;
        justify-content: center;
        align-items: center;
        flex-direction: column;
      }
    }
    .kb_left_bottom {
      height: 495px;
      background-color: #20a0ff;
    }
  }
  .kb_right {
    width: 580px;
    height: 100%;
    background-color: #42b983;
  }
}
</style>
src/views/login/index.vue
@@ -155,8 +155,8 @@
    }
    return {
      loginForm: {
        username: '002',
        password: '123456'
        username: '',
        password: ''
      },
      loginRules: {
        username: [{ required: true, trigger: ['blur', 'change'], validator: validateUsername }],
src/views/scgl/gd.vue
@@ -467,11 +467,12 @@
          />
        </el-table>
      </el-dialog>
      <span slot="footer" class="dialog-footer">
        <div class="footerButton">
          <el-button @click="dialogVisibleCancel">取 æ¶ˆ</el-button>
          <el-button v-if="operation==='add'" type="primary" @click="dialogVisibleConfirm">ç¡® å®š</el-button>
          <el-button v-else type="primary" @click="dialogVisibleConfirm">ç¡® å®š/打 å°</el-button>
          <!--          <el-button v-if="operation==='add'" type="primary" @click="dialogVisibleConfirmPreview('add')">预览</el-button>-->
          <el-button type="primary" @click="dialogVisibleConfirm">ç¡® å®š</el-button>
        </div>
      </span>
    </el-dialog>
@@ -484,7 +485,13 @@
      top="15vh"
      class="dialogVisibleSearch"
      :close-on-click-modal="false"
      @close="dialogVisibleTaskClose"
    >
      <el-button
        style="margin-bottom: 15px"
        type="primary"
        @click="supplementClick"
      >补打</el-button>
      <el-table
        :data="taskTableData"
        border
@@ -548,6 +555,137 @@
      </span>
    </el-dialog>
    <!--        æ‰“印预览对话框-->
    <el-dialog
      title=""
      :visible.sync="dialogVisibleApprove"
      width="812px"
      class="dialogVisibleConfirmClass"
      append-to-body
      :close-on-click-modal="false"
      @close="dialogVisibleConfirmClose"
    >
      <!-- è¦æ‰“印的区域 -->
      <div id="printMe" style="padding: 30px">
        <div style="font-size: 26px; text-align: center">流程单</div>
        <div style="display: flex;justify-content: space-around;margin-top: 20px">
          <div style="width: 78%">
            <el-form
              ref="formApprove"
              :model="formApprove"
              label-width="100px"
              inline
              style="display: flex;justify-content: space-between"
            >
              <div class="elForm">
                <el-form-item label="工单编号:" class="formContent">
                  {{ formApprove.mesordercode }}
                </el-form-item>
                <el-form-item label="产品编码:" class="formContent">
                  {{ formApprove.partcode }}
                </el-form-item>
                <el-form-item label="产品名称:" class="formContent">
                  {{ formApprove.partname }}
                </el-form-item>
                <el-form-item label="产品规格:" class="formContent">
                  {{ formApprove.partspec }}
                </el-form-item>
                <el-form-item label="工单数量:" class="formContent">
                  {{ formApprove.plan_qty }}
                </el-form-item>
                <el-form-item label="工艺路线:" class="formContent">
                  {{ formApprove.routename }}
                </el-form-item>
                <el-form-item label="打印人员:" class="formContent">
                  {{ username }}
                </el-form-item>
                <el-form-item label="打印时间:" class="formContent">
                  {{ formApprove.lm_date }}
                </el-form-item>
              </div>
            </el-form>
          </div>
          <div style="width: 22%;display: flex;justify-content: center;align-items: center">
            <!--            <div :id="'qrCode'+0" :ref="'qrCodeDiv'+0" />-->
            <div />
          </div>
        </div>
        <!--          <div style="width:100%;height: 30px;border-bottom: 1px solid #eee;margin-bottom: 20px" />-->
        <el-table
          id="table"
          :data="tableDataPrint"
          border
          class="tableDataPrint"
          :header-cell-style="{ background: '#c0c0c0',textAlign:'center',color:'#000',borderColor:'#000'}"
          :cell-style="{textAlign: 'center',color:'#000',borderColor:'#000'}"
          style="width: 100%;margin-top: 20px;text-align: center;border-color: #000"
        >
          <el-table-column
            id="column0"
            prop="seq"
            label="工序号"
            width="70"
            align="center"
          />
          <el-table-column
            id="column1"
            prop="stepqrcode"
            label="工序二维码"
            width="100"
            align="center"
          >
            <template slot-scope="{row}">
              <div :id="'qrCode'+row.seq" :ref="'qrCodeDiv'+row.seq" class="tableColumn" />
            </template>
          </el-table-column>
          <el-table-column
            id="column2"
            prop="stepname"
            label="工序"
            width="120"
            align="center"
          />
          <el-table-column
            id="column3"
            prop="plan_qty"
            label="加工数量"
            width="100"
            align="center"
          />
          <el-table-column
            id="column4"
            prop="good_qty"
            width="100"
            align="center"
            label="合格数量"
          />
          <el-table-column
            id="column5"
            width="100"
            prop="ng_qty"
            align="center"
            label="不良数量"
          />
          <el-table-column
            id="column6"
            prop="desc"
            align="center"
            width="120"
            label="备注"
          />
        </el-table>
      </div>
      <span slot="footer" class="dialog-footer">
        <div class="footerButton">
          <el-button @click="dialogVisibleBackPreview">返 å›ž</el-button>
          <!--            <el-button v-if="operation==='add'" type="primary" @click="dialogVisibleConfirm">ç¡® å®š</el-button>-->
          <!--            <el-button type="primary" @click="dialogVisibleConfirm">ç¡® å®š/打 å°</el-button>-->
          <el-button v-print="printObj" type="primary">打 å°</el-button>
        </div>
      </span>
    </el-dialog>
  </div>
</template>
@@ -565,6 +703,7 @@
import { getCookie } from '@/utils/auth'
import { MesOrderPrintSearch1, PrintOrder } from '@/api/utils'
import { urlAddRandomNo, webapp_ws_ajax_run, webapp_ws_autoupdate } from '@/utils/grwebapp'
import QRCode from 'qrcodejs2'
const SER_HZ = /^[\u4e00-\u9fa5]+$/
export default {
@@ -588,6 +727,7 @@
      isFullscreen: false,
      mainHeight: 0,
      tableHeight: 0,
      username: '',
      form: {
        mesorderstus: '', // å·¥å•状态码
        mesordercode: '', // å·¥å•编号
@@ -673,26 +813,42 @@
      },
      dialogVisibleTask: false,
      taskTableData: [],
      // dialogFormTask: {
      //   partname: '', // äº§å“åç§°
      //   partspec: '', // äº§å“è§„æ ¼
      //   wkshopname: '', // ç”Ÿäº§è½¦é—´åç§°
      //   routename: '', // å·¥è‰ºè·¯çº¿åç§°
      //
      //   mesorderstusName: '', // å·¥å•状态名称
      //   mesorderstus: '', // å·¥å•状态码
      //   mesordercode: '', // å·¥å•编号
      //   partcode: '', // äº§å“ç¼–码
      //   mesqty: '', // å·¥å•数量
      //
      //   routecode: '', // å·¥è‰ºè·¯çº¿ç¼–码
      //   wkshopcode: '', // ç”Ÿäº§è½¦é—´ç¼–码
      //   planstartdate: '', // è®¡åˆ’开始时间
      //   planenddate: '', // è®¡åˆ’完成时间
      //   orderlev: '' // å·¥å•等级
      // },
      dialogVisibleSearch: false,
      searchTableData: []
      searchTableData: [],
      dialogVisibleApprove: false,
      tableDataPrint: [], // æ‰“印页面内容
      printObj: {
        id: 'printMe',
        popTitle: '打印模板',
        preview: false,
        extraHead: '<meta http-equiv="Content-Language" content="zh-cn"/>',
        closeCallback(vue) { // å…³é—­æ‰“印的回调事件(无法确定点击的是确认还是取消)
          console.log('11212', vue)
          // vue.dialogVisible = false
          vue.dialogVisibleApprove = false
        },
        beforeOpenCallback(vue) {
          vue.printLoading = true
          console.log('打开之前')
          console.log()
        },
        openCallback(vue) {
          vue.printLoading = false
          console.log('执行了打印')
        }
      },
      formApprove: {
        mesordercode: '',
        partcode: '',
        partname: '',
        partspec: '',
        plan_qty: '',
        routename: '',
        lm_date: ''
      },
      number: ''
    }
  },
  created() {
@@ -703,7 +859,8 @@
    window.addEventListener('resize', this.getHeight)
    this.getHeight()
    // webapp_urlprotocol_startup()
    webapp_ws_autoupdate(true)
    // webapp_ws_autoupdate(true)
    this.username = getCookie('username')
  },
  methods: {
    async getMesOrderSearch() {
@@ -819,6 +976,7 @@
      this.dialogVisibleTask = true
      const { data: res } = await SearchWorkStep({ wo_code: row.wo_code })
      this.taskTableData = res
      this.dialogForm.mesordercode = res[0].wo_code
    },
    dialogVisibleBack() {
      this.dialogVisibleTask = false
@@ -972,13 +1130,15 @@
            orderlev: this.dialogForm.orderlev, // å·¥å•等级
            OperType: this.operation === 'add' ? 'Add' : 'Update'
          }
          AddUpdateMesOrder(data).then(res => {
            if (res.code === '200') {
              if (this.operation !== 'add') {
                this.sendPrint()
              }
              this.$message.success(this.operation === 'add' ? '添加成功!' : '派发成功!')
              this.dialogVisible = false
              this.handlePrint()
              this.$message.success(this.operation === 'add' ? '添加成功!' : '派发成功!')
              // this.dialogVisible = false
              this.getMesOrderSearch()
            } else {
              this.$message.error(this.operation === 'add' ? '添加失败!' : '派发失败!')
@@ -990,12 +1150,12 @@
    // æ´¾å‘打印
    async sendPrint() {
      const data = {
        // username: getCookie('admin'),
        username: getCookie('username'),
        username: getCookie('admin'),
        // username: getCookie('username'),
        mesordercode: this.dialogForm.mesordercode
      }
      // const res = await MesOrderPrintSearch1(data)
      const res = await PrintOrder(data)
      const res = await MesOrderPrintSearch1(data)
      // const res = await PrintOrder(data)
      if (res.code === '200') {
        // å‚数具体说明请参考帮助文档中的“WEB报表(B/S报表)->WEB报表客户端->启动参数说明”部分
        var args = {
@@ -1007,6 +1167,7 @@
        webapp_ws_ajax_run(args)
      }
    },
    // èŽ·å–é¡µé¢é«˜åº¦
    getHeight() {
      this.$nextTick(() => {
@@ -1029,7 +1190,108 @@
    },
    dialogVisibleSearchBack() {
      this.dialogVisibleSearch = false
    },
    // å¤„理打印
    handlePrint() {
      // const number = Math.random() * Math.random()
      // this.number = number === 0 ? (10 + Math.random()) : number
      // console.log(number)
      this.dialogVisibleApprove = true
      const data2 = {
        username: getCookie('admin'),
        mesordercode: this.dialogForm.mesordercode
      }
      MesOrderPrintSearch1(data2).then(res2 => {
        if (res2.code === '200') {
          const res3 = res2.data.recordset
          this.tableDataPrint = res3
          this.formApprove.mesordercode = res3[0].wo_code
          this.formApprove.partcode = res3[0].partcode
          this.formApprove.partname = res3[0].partname
          this.formApprove.partspec = res3[0].partspec
          this.formApprove.plan_qty = res3[0].plan_qty
          this.formApprove.routename = res3[0].routename
          this.formApprove.lm_date = res3[0].lm_date
          this.$nextTick(() => {
            // this.bindQRCode(0, this.formApprove.mesordercode, 'big')
            res3.forEach(i => {
              this.bindQRCode(i.seq, i.stepqrcode, 'small')
            })
          })
        }
      })
    },
    dialogVisibleTaskClose() {
      this.dialogForm.mesordercode = ''
    },
    /*
  * æ‰‹åŠ¨ç‚¹å‡»æ‰“å°
  * */
    // è¿”回按钮
    dialogVisibleBackPreview() {
      this.dialogVisibleApprove = false
    },
    // dialogVisibleConfirmPreview(param) {
    //   this.$refs.dialogForm.validate(valid => {
    //     if (valid) {
    //       const data = {
    //         username: getCookie('admin'),
    //         mesordercode: this.dialogForm.mesordercode
    //       }
    //       MesOrderPrintSearch1(data).then(res => {
    //         if (res.code === '200') {
    //           this.dialogVisibleApprove = true
    //           console.log(res, 11)
    //         }
    //       })
    //     }
    //   })
    // },
    // ç”ŸæˆäºŒç»´ç 
    bindQRCode(seq, text, size) {
      new QRCode(this.$refs['qrCodeDiv' + seq], {
        text: text,
        width: size === 'big' ? 90 : 60,
        height: size === 'big' ? 90 : 60,
        // colorDark: '#333333', // äºŒç»´ç é¢œè‰²
        colorDark: '#000', // äºŒç»´ç é¢œè‰²
        colorLight: '#ffffff', // äºŒç»´ç èƒŒæ™¯è‰²
        correctLevel: QRCode.CorrectLevel.L// å®¹é”™çŽ‡ï¼ŒL/M/H
      })
    },
    dialogVisibleConfirmClose() {
      // this.dialogForm.mesordercode = ''
      this.formApprove.mesordercode = ''
      this.formApprove.partcode = ''
      this.formApprove.partname = ''
      this.formApprove.partspec = ''
      this.formApprove.plan_qty = ''
      this.formApprove.routename = ''
      this.formApprove.lm_date = ''
      // this.$refs.qrCodeDiv0 = ''
      // this.$refs.qrCodeDiv1 = ''
      // this.$refs.qrCodeDiv2 = ''
      // this.$refs.qrCodeDiv3 = ''
      // // this.$ref['qrCodeDiv'].clearable()
      // this.tableDataPrint.forEach((item, index) => {
      //   this.$ref[('qrCodeDiv' + index).toString()] = ''
      // //   this.bindQRCode(item.seq, '')
      // })
      // // this.bindQRCode(this.tableDataPrint.length, '')
      // this.$ref[('qrCodeDiv' + this.tableDataPrint.length).toString()] = ''
      // // this.bindQRCode()
      this.tableDataPrint = []
    },
    // è¡¥æ‰“按钮
    supplementClick() {
      this.dialogVisibleTask = false
      this.handlePrint()
    }
  }
}
</script>
@@ -1088,6 +1350,10 @@
}
.dialogVisibleSearch ::v-deep .el-dialog__body {
  padding: 20px 20px !important;
}
.dialogVisibleConfirmClass ::v-deep .el-dialog__body {
  padding: 20px 20px !important;
}
@@ -1182,6 +1448,10 @@
  margin-bottom: 0;
}
.elForm ::v-deep .el-form-item {
  margin-bottom: 0;
}
::v-deep .el-input__inner:focus {
  border-color: $main_color;
}
@@ -1207,4 +1477,37 @@
    display: none;
  }
}
.el-table::before {
  height: 0;
}
//.dialogVisibleConfirmClass >>>.el-table--border, .el-table--fit {
//  border-bottom: 2px solid #000 ;
//  //outline: #000 solid 2px !important;
//}
.tableDataPrint ::v-deep div.cell{
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
}
.formContent{
  width: 240px;
}
</style>
<style media="print">
/*@media print {*/
@page {
  size: auto;
  margin: 3mm;
}
</style>
<style>
.formContent .el-form-item__label{
color: #000 !important;
}
</style>
src/views/scgl/gd_autoPrint.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1210 @@
<template>
  <div>
    <div class="body" :style="{height:mainHeight+'px'}">
      <div style="padding: 10px 5px 0 0">
        <el-form
          ref="form"
          :model="form"
          label-width="80px"
          inline
          style="display: flex;justify-content: space-between"
        >
          <div class="elForm">
            <el-form-item label="订单状态" style=" display: flex;">
              <el-select
                v-model="form.mesorderstus"
                :popper-append-to-body="false"
                style="width: 200px"
                placeholder="请选择"
                filterable
                @change="erporderstusChange"
              >
                <el-option
                  v-for="item in erporderstusArr"
                  :key="item.code"
                  :label="item.name"
                  :value="item.code"
                />
              </el-select>
            </el-form-item>
            <el-form-item label="订单编号" style=" display: flex;">
              <el-input v-model="form.mesordercode" placeholder="请输入" style="width: 200px" />
            </el-form-item>
            <el-form-item label="产品编码" style=" display: flex;">
              <!--              <el-select v-model="form.partcode" :popper-append-to-body="false" style="width: 200px" placeholder="请选择">-->
              <!--                <el-option-->
              <!--                  v-for="item in OrgTypeArr"-->
              <!--                  :key="item.code"-->
              <!--                  :label="item.name"-->
              <!--                  :value="item.code"-->
              <!--                />-->
              <!--              </el-select>-->
              <el-input v-model="form.partcode" style="width: 200px" placeholder="请输入" />
            </el-form-item>
            <el-form-item label="产品名称" style=" display: flex;">
              <el-input v-model="form.partname" style="width: 200px" placeholder="请输入" />
            </el-form-item>
            <el-form-item label="产品规格" style=" display: flex;">
              <el-input v-model="form.partspec" style="width: 200px" placeholder="请输入" />
            </el-form-item>
            <el-form-item label="创建人员" style=" display: flex;">
              <el-input v-model="form.creatuser" style="width: 200px" placeholder="请输入" />
            </el-form-item>
            <el-form-item label="创建时间" style=" display: flex;">
              <!--              <el-date-picker-->
              <!--                v-model="form.createdate"-->
              <!--                type="daterange"-->
              <!--                :clearable="false"-->
              <!--                range-separator="~"-->
              <!--                start-placeholder="开始日期"-->
              <!--                end-placeholder="结束日期"-->
              <!--                size="mini"-->
              <!--              />-->
              <el-date-picker
                v-model="form.createdate"
                type="date"
                size="mini"
                :clearable="false"
                style="width: 200px;"
                format="yyyy-MM-dd"
                placeholder="选择日期"
              />
            </el-form-item>
          </div>
          <div style="min-height: 100px">
            <div style="display: flex;align-items: start;justify-content:end;margin-top: 5px;z-index: 2">
              <el-button type="primary" icon="el-icon-search" @click="search">查询</el-button>
              <el-button type="info" icon="el-icon-refresh" @click="reset">重置</el-button>
            </div>
            <!--            <div v-if="!isFullscreen" style="display: flex;align-items: start; margin-top: 15px;z-index: 2">-->
            <!--              <el-button type="primary" icon="el-icon-circle-plus-outline" @click="add('add')">新增</el-button>-->
            <!--              <el-button type="primary" icon="el-icon-connection" @click="send('send')">派发</el-button>-->
            <!--              <el-button type="primary" icon="el-icon-switch-button">订单关闭</el-button>-->
            <!--            </div>-->
            <!--            <div v-if="isFullscreen" style="display: flex;flex-direction: column;align-items: end">-->
            <!--              <div style="display: flex;margin: 10px 0">-->
            <!--                <el-button type="primary" icon="el-icon-circle-plus-outline" @click="add('add')">新增</el-button>-->
            <!--                <el-button type="primary" icon="el-icon-connection" @click="send('send')">派发</el-button>-->
            <!--              </div>-->
            <!--              <el-button type="primary" icon="el-icon-switch-button">订单关闭</el-button>-->
            <!--            </div>-->
          </div>
        </el-form>
      </div>
      <el-divider />
      <div style="margin-left: 10px;display: flex">
        <el-button type="primary" icon="el-icon-circle-plus-outline" @click="add('add')">新增</el-button>
        <el-button type="primary" icon="el-icon-connection" @click="send('send')">派发</el-button>
        <el-button type="primary" icon="el-icon-switch-button" @click="orderClose">工单关闭</el-button>
      </div>
      <el-divider />
      <div class="elTableDiv">
        <el-table
          :data="tableData"
          :height="tableHeight+'px'"
          border
          stripe
          :style="{width: 100+'%',height:tableHeight+'px',}"
          highlight-current-row
          :header-cell-style="this.$headerCellStyle"
          :cell-style="this.$cellStyle"
          @sort-change="sortChange"
        >
          <!--          <el-table-column-->
          <!--            type="selection"-->
          <!--            width="50"-->
          <!--          />-->
          <el-table-column
            width="50"
            fixed
          >
            <template slot-scope="{row}">
              <el-radio
                v-model="radioSelected"
                :label="row.wo_code"
                style="color: #fff;padding-left: 10px; margin-right: -25px;"
                @change.native="getCurrentRow(row.wo_code)"
              />
            </template>
          </el-table-column>
          <el-table-column
            prop="RowNum"
            width="50"
            label="序号"
            fixed
          />
          <el-table-column
            prop="status"
            label="订单状态"
            sortable="custom"
            width="110"
          >
            <template slot-scope="{row}">
              <div v-if="row.status==='NEW'">新工单</div>
              <!--              <div v-if="row.status==='CREATING'">执行中</div>-->
              <!--              <div v-if="row.status==='CREATED'">已关闭</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="工单编号"
            sortable="custom"
            min-width="160"
          />
          <el-table-column
            prop="partcode"
            label="产品编码"
            sortable="custom"
            min-width="120"
          />
          <el-table-column
            prop="partname"
            min-width="150"
            label="产品名称"
            sortable="custom"
          />
          <el-table-column
            prop="partspec"
            label="产品规格"
            sortable="custom"
            width="110"
          />
          <el-table-column
            prop="plan_qty"
            label="工单数"
            sortable="custom"
            width="100"
          />
          <el-table-column
            prop="wkshp_name"
            label="生产车间"
            sortable="custom"
            width="120"
          />
          <el-table-column
            prop="route_name"
            label="工艺路线"
            sortable="custom"
            min-width="130"
          />
          <el-table-column
            prop="plan_startdate"
            label="计划开始时间"
            sortable="custom"
            width="160"
          />
          <el-table-column
            prop="plan_enddate"
            label="计划结束时间"
            sortable="custom"
            width="160"
          />
          <el-table-column
            prop="piroque"
            label="工单等级"
            sortable="custom"
            width="120"
          >
            <template slot-scope="{row}">
              <div v-if="row.piroque==='1'">特级</div>
              <div v-if="row.piroque==='2'">紧急</div>
              <div v-if="row.piroque==='3'">正常</div>
            </template>
          </el-table-column>
          <el-table-column
            prop="lm_user"
            label="创建人员"
            sortable="custom"
            width="120"
          />
          <el-table-column
            prop="lm_date"
            label="创建时间"
            width="160"
            sortable="custom"
          />
          <el-table-column
            label="操作"
            width="120"
            fixed="right"
          >
            <template slot-scope="{row}">
              <div class="operationClass">
                <el-button type="text" @click="check(row)">工序任务</el-button>
                <el-button type="text" @click="del(row)">删除</el-button>
              </div>
            </template>
          </el-table-column>
        </el-table>
      </div>
      <!--分页-->
      <pagination
        v-show="total>0"
        :total="total"
        :page.sync="form.page"
        :limit.sync="form.rows"
        align="right"
        layout="prev, pager, next,sizes"
        popper-class="select_bottom"
        @pagination="getMesOrderSearch"
      />
    </div>
    <!--新增派发对话框-->
    <el-dialog
      :title="operation==='add'?'新增':'派发'"
      :visible.sync="dialogVisible"
      width="840px"
      top="15vh"
      :close-on-click-modal="false"
      @closed="handleClose"
      @close="handleClose"
    >
      <el-form
        ref="dialogForm"
        inline
        :rules="dialogFormRules"
        :model="dialogForm"
        label-width="110px"
      >
        <el-form-item
          label="订单状态"
          prop="mesorderstus"
        >
          <el-select
            v-model="dialogForm.mesorderstus"
            disabled
            filterable
            :popper-append-to-body="false"
            style="width: 200px"
            placeholder="请选择"
          >
            <el-option
              v-for="item in erporderstusArr"
              :key="item.code"
              :label="item.name"
              :value="item.code"
            />
          </el-select>
        </el-form-item>
        <el-form-item label="工单编号" prop="mesordercode">
          <el-input v-model="dialogForm.mesordercode" :disabled="operation!=='add'" style="width: 200px" />
        </el-form-item>
        <el-form-item label="工单数量" prop="mesqty">
          <el-input
            v-model="dialogForm.mesqty"
            oninput="value=value.replace(/[^0-9.]/g,'')"
            :disabled="operation!=='add'"
            style="width: 200px"
          />
        </el-form-item>
        <el-form-item
          v-if="operation==='add'"
          label="产品名称"
          prop="partcode"
        >
          <el-select
            v-model="dialogForm.partcode"
            filterable
            :disabled="operation!=='add'"
            :popper-append-to-body="false"
            style="width: 200px"
            placeholder="请选择"
            @change="partcodeChangeDialog"
          >
            <el-option
              v-for="item in partArr"
              :key="item.partcode"
              :label="item.partname"
              :value="item.partcode"
            />
          </el-select>
        </el-form-item>
        <el-form-item v-if="operation!=='add'" label="产品名称" prop="partname">
          <el-input v-model="dialogForm.partname" disabled style="width: 200px" />
        </el-form-item>
        <el-form-item label="产品编码" prop="partcode">
          <el-input v-model="dialogForm.partcode" disabled style="width: 200px" />
        </el-form-item>
        <el-form-item label="产品规格" prop="partspec">
          <el-input v-model="dialogForm.partspec" disabled style="width: 200px" />
        </el-form-item>
        <div style="display: flex">
          <div style="display: flex;flex-wrap: nowrap">
            <el-form-item label="工艺路线" prop="routecode">
              <el-select
                v-model="dialogForm.routecode"
                filterable
                :disabled="dialogForm.partcode===''"
                :popper-append-to-body="false"
                style="width: 172px"
                placeholder="请选择"
                @change="routecodeChange"
              >
                <el-option
                  v-for="item in routeArr"
                  :key="item.code"
                  :label="item.name"
                  :value="item.code"
                />
              </el-select>
            </el-form-item>
            <el-button
              type="primary"
              style="padding: 0 10px;margin-left: -8px;margin-top: 5px"
              class="el-icon-search"
              @click="searchClick"
            />
            <!--            :disabled="dialogForm.routecode===''"-->
          </div>
          <el-form-item label="生产车间" prop="wkshopcode">
            <el-select
              v-model="dialogForm.wkshopcode"
              filterable
              :popper-append-to-body="false"
              style="width: 200px;"
              placeholder="请选择"
              :disabled="dialogForm.routecode===''"
            >
              <el-option
                v-for="item in wkshopArr"
                :key="item.org_code"
                :label="item.org_name"
                :value="item.org_code"
              />
            </el-select>
          </el-form-item>
        </div>
        <el-form-item label="计划开始时间" prop="planstartdate">
          <el-date-picker
            v-model="dialogForm.planstartdate"
            type="date"
            :clearable="false"
            value-format="yyyy-MM-dd"
            style="width: 200px"
            placeholder="选择日期"
          />
        </el-form-item>
        <el-form-item label="计划完成时间" prop="planenddate">
          <el-date-picker
            v-model="dialogForm.planenddate"
            type="date"
            :clearable="false"
            value-format="yyyy-MM-dd"
            style="width: 200px"
            placeholder="选择日期"
          />
        </el-form-item>
        <el-form-item label="工单等级" prop="orderlev">
          <el-select
            v-model="dialogForm.orderlev"
            filterable
            :popper-append-to-body="false"
            style="width: 200px"
            placeholder="请选择"
          >
            <el-option
              v-for="item in orderlevArr"
              :key="item.code"
              :label="item.name"
              :value="item.code"
            />
          </el-select>
        </el-form-item>
      </el-form>
      <!--        å·¥è‰ºè·¯çº¿æ”¾å¤§é•œå¯¹è¯æ¡†-->
      <el-dialog
        title="工艺路线"
        :visible.sync="dialogVisibleSearch"
        width="840px"
        top="20vh"
        class="dialogVisibleSearch"
        append-to-body
        :close-on-click-modal="false"
      >
        <el-table
          :data="searchTableData"
          border
          stripe
          height="300"
          style="width: 100%;"
          highlight-current-row
          :header-cell-style="this.$headerCellStyle"
          :cell-style="this.$cellStyle"
        >
          <el-table-column
            prop="seq"
            label="序号"
            width="50"
          />
          <el-table-column
            prop="stepcode"
            label="工序编码"
          />
          <el-table-column
            prop="stepname"
            label="工序名称"
          />
          <el-table-column
            prop="flwtype"
            label="工序类型"
          >
            <template slot-scope="{row}">
              <div v-if="row.flwtype==='W'">外协</div>
              <div v-if="row.flwtype==='Z'">自制</div>
            </template>
          </el-table-column>
          <el-table-column
            prop="descr"
            label="工序描述"
          />
        </el-table>
      </el-dialog>
      <span slot="footer" class="dialog-footer">
        <div class="footerButton">
          <el-button @click="dialogVisibleCancel">取 æ¶ˆ</el-button>
          <el-button v-if="operation==='add'" type="primary" @click="dialogVisibleConfirm">ç¡® å®š</el-button>
          <el-button v-else type="primary" @click="dialogVisibleConfirm">ç¡® å®š/打 å°</el-button>
        </div>
      </span>
    </el-dialog>
    <!--    å·¥åºä»»åŠ¡å¯¹è¯æ¡†-->
    <el-dialog
      title="工序任务"
      :visible.sync="dialogVisibleTask"
      width="840px"
      top="15vh"
      class="dialogVisibleSearch"
      :close-on-click-modal="false"
    >
      <el-table
        :data="taskTableData"
        border
        stripe
        height="300"
        style="width: 100%;"
        highlight-current-row
        :header-cell-style="this.$headerCellStyle"
        :cell-style="this.$cellStyle"
      >
        <el-table-column
          prop="seq"
          width="50"
          label="序号"
        />
        <el-table-column
          prop="wo_code"
          label="工单编号"
          width="200"
        />
        <el-table-column
          prop="stepcode"
          label="工序编码"
        />
        <el-table-column
          prop="stepname"
          label="工序名称"
        />
        <!--        <el-table-column-->
        <!--          prop="flwtype"-->
        <!--          label="工序类型"-->
        <!--        >-->
        <!--          <template slot-scope="{row}">-->
        <!--            <div v-if="row.flwtype==='W'">外协</div>-->
        <!--            <div v-if="row.flwtype==='Z'">自制</div>-->
        <!--          </template>-->
        <!--        </el-table-column>-->
        <!--        <el-table-column-->
        <!--          prop="descr"-->
        <!--          label="工序描述"-->
        <!--        />-->
        <el-table-column
          prop="plan_qty"
          label="任务数量"
        />
        <el-table-column
          prop="good_qty"
          label="合格数量"
        />
        <el-table-column
          prop="ng_qty"
          label="不良数量"
        />
      </el-table>
      <span slot="footer" class="dialog-footer">
        <div class="footerButton">
          <el-button @click="dialogVisibleBack">返 å›ž</el-button>
          <!--          <el-button type="primary" @click="dialogVisibleConfirm">ç¡® å®š</el-button>-->
        </div>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import Pagination from '@/components/Pagination'
import {
  AddUpdateMesOrder,
  ClosedMesOrder,
  DeleteMesOrder,
  MesOrderSearch, PartSelectRoute, RouteSelectWkshop, SearchWorkStep,
  SelectRouteStep
} from '@/api/scgl'
import { PartSelect } from '@/api/zzmx'
import { handleDatetime } from '@/utils/global'
import { getCookie } from '@/utils/auth'
import { MesOrderPrintSearch1, PrintOrder } from '@/api/utils'
import { urlAddRandomNo, webapp_ws_ajax_run, webapp_ws_autoupdate } from '@/utils/grwebapp'
const SER_HZ = /^[\u4e00-\u9fa5]+$/
export default {
  name: 'GD',
  components: {
    Pagination
  },
  data() {
    const validateName = (rule, value, callback) => {
      if (!value) {
        return callback(new Error('请输入编码'))
      } else {
        if (SER_HZ.test(value)) {
          return callback(new Error('编码不能为中文'))
        } else {
          callback()
        }
      }
    }
    return {
      isFullscreen: false,
      mainHeight: 0,
      tableHeight: 0,
      form: {
        mesorderstus: '', // å·¥å•状态码
        mesordercode: '', // å·¥å•编号
        partcode: '', // äº§å“ç¼–码
        partname: '', // äº§å“åç§°
        partspec: '', // äº§å“è§„æ ¼
        creatuser: '', // åˆ›å»ºäººå‘˜
        createdate: '', // åˆ›å»ºæ—¶é—´
        prop: 'lm_date', // æŽ’序字段
        order: 'desc', // æŽ’序字段
        page: 1, // ç¬¬å‡ é¡µ
        rows: 20 // æ¯é¡µå¤šå°‘条
      },
      erporderstusArr: [
        { code: 'NEW', name: '新工单' },
        // { code: 'CREATING', name: '执行中' },
        // { code: 'CREATED', name: '已关闭' }
        { code: 'ALLO', name: '已派发' },
        { code: 'START', name: '开工' },
        { code: 'CLOSED', name: '完工' }
      ],
      total: 10,
      radioSelected: '',
      tableData: [],
      dialogVisible: false,
      dialogForm: {
        partname: '', // äº§å“åç§°
        partspec: '', // äº§å“è§„æ ¼
        wkshopname: '', // ç”Ÿäº§è½¦é—´åç§°
        routename: '', // å·¥è‰ºè·¯çº¿åç§°
        mesorderstus: 'NEW', // å·¥å•状态码
        mesordercode: '', // å·¥å•编号
        partcode: '', // äº§å“ç¼–码
        mesqty: '', // å·¥å•数量
        routecode: '', // å·¥è‰ºè·¯çº¿ç¼–码
        wkshopcode: '', // ç”Ÿäº§è½¦é—´ç¼–码
        planstartdate: '', // è®¡åˆ’开始时间
        planenddate: '', // è®¡åˆ’完成时间
        orderlev: '', // å·¥å•等级
        OperType: '' // æ“ä½œç±»åž‹
      },
      partArr: [], // äº§å“ä¿¡æ¯
      wkshopArr: [], // ç”Ÿäº§è½¦é—´æ•°ç»„
      routeArr: [], // å·¥è‰ºè·¯çº¿æ•°ç»„
      orderlevArr: [
        { code: 1, name: '特级' },
        { code: 2, name: '紧急' },
        { code: 3, name: '正常' }
      ], // å·¥å•等级数组
      operation: '',
      dialogFormRules: {
        mesorderstus: [
          { required: true, message: '请选择订单状态', trigger: ['blur', 'change'] }
        ],
        partcode: [
          { required: true, message: '请选择产品信息', trigger: ['blur', 'change'] }
        ],
        mesordercode: [
          { required: true, validator: validateName, trigger: ['blur', 'change'] }
        ],
        mesqty: [
          { required: true, message: '请输入工单数量', trigger: ['blur', 'change'] }
        ],
        wkshopcode: [
          { required: true, message: '请选择生产车间', trigger: ['blur', 'change'] }
        ],
        routecode: [
          { required: true, message: '请选择工艺路线', trigger: ['blur', 'change'] }
        ],
        planstartdate: [
          { required: true, message: '请选择开始时间', trigger: ['blur', 'change'] }
        ],
        planenddate: [
          { required: true, message: '请选择结束时间', trigger: ['blur', 'change'] }
        ],
        orderlev: [
          { required: true, message: '请选择工单等级', trigger: ['blur', 'change'] }
        ]
      },
      dialogVisibleTask: false,
      taskTableData: [],
      // dialogFormTask: {
      //   partname: '', // äº§å“åç§°
      //   partspec: '', // äº§å“è§„æ ¼
      //   wkshopname: '', // ç”Ÿäº§è½¦é—´åç§°
      //   routename: '', // å·¥è‰ºè·¯çº¿åç§°
      //
      //   mesorderstusName: '', // å·¥å•状态名称
      //   mesorderstus: '', // å·¥å•状态码
      //   mesordercode: '', // å·¥å•编号
      //   partcode: '', // äº§å“ç¼–码
      //   mesqty: '', // å·¥å•数量
      //
      //   routecode: '', // å·¥è‰ºè·¯çº¿ç¼–码
      //   wkshopcode: '', // ç”Ÿäº§è½¦é—´ç¼–码
      //   planstartdate: '', // è®¡åˆ’开始时间
      //   planenddate: '', // è®¡åˆ’完成时间
      //   orderlev: '' // å·¥å•等级
      // },
      dialogVisibleSearch: false,
      searchTableData: []
    }
  },
  created() {
    this.getMesOrderSearch()
    this.getSelect()
  },
  mounted() {
    window.addEventListener('resize', this.getHeight)
    this.getHeight()
    // webapp_urlprotocol_startup()
    webapp_ws_autoupdate(true)
  },
  methods: {
    async getMesOrderSearch() {
      // let tempDate = this.form.createdate
      // if (tempDate.length > 0) {
      //   tempDate = handleDatetime(tempDate[0]) + '~' + handleDatetime(tempDate[1])
      // }
      const data = {
        mesorderstus: this.form.mesorderstus, // å·¥å•状态码
        mesordercode: this.form.mesordercode, // å·¥å•编号
        partcode: this.form.partcode, // äº§å“ç¼–码
        partname: this.form.partname, // äº§å“åç§°
        partspec: this.form.partspec, // äº§å“è§„æ ¼
        creatuser: this.form.creatuser, // åˆ›å»ºäººå‘˜
        createdate: this.form.createdate.toString().length > 0 ? handleDatetime(this.form.createdate) : '', // åˆ›å»ºæ—¶é—´
        prop: this.form.prop, // æŽ’序字段
        order: this.form.order, // æŽ’序字段
        page: this.form.page, // ç¬¬å‡ é¡µ
        rows: this.form.rows // æ¯é¡µå¤šå°‘条
      }
      const res = await MesOrderSearch(data)
      this.tableData = res.data
      this.total = res.count
      // this.form.createdate = tempDate
    },
    async getSelect() {
      // èŽ·å–äº§å“ä¿¡æ¯
      const { data: res1 } = await PartSelect()
      this.partArr = res1
    },
    // è®¢å•状态改变时
    erporderstusChange(val) {
      this.form.mesorderstus = val
    },
    // æŽ’序改变时
    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.getMesOrderSearch()
    },
    // æŸ¥è¯¢
    search() {
      this.getMesOrderSearch()
    },
    // é‡ç½®
    reset(val) {
      this.form.mesorderstus = ''
      this.form.mesordercode = ''
      this.form.partcode = ''
      this.form.partname = ''
      this.form.partspec = ''
      this.form.paydate = ''
      this.form.creatuser = ''
      this.form.createdate = ''
      this.getMesOrderSearch()
    },
    // å•选框选中获取当前行信息
    getCurrentRow(wo_code) {
      this.radioSelected = wo_code
    },
    // æ–°å¢žæŒ‰é’®
    async add(operation) {
      this.operation = operation
      this.dialogVisible = true
      this.dialogForm.planstartdate = handleDatetime(new Date())
      this.dialogForm.planenddate = handleDatetime(new Date())
      this.dialogForm.orderlev = 3
    },
    // äº§å“ä¿¡æ¯å€¼æ”¹å˜
    async partcodeChange(val) {
      console.log(val, 22)
      const { data: res } = await PartSelectRoute({ partcode: val })
      this.routeArr = res
      let flag = false
      this.routeArr.forEach(item => {
        if (item.code === item.default_route) {
          this.dialogForm.routecode = item.code
          this.routecodeChange(this.dialogForm.routecode)
          flag = true
        }
      })
      if (!flag) {
        this.dialogForm.routecode = ''
      }
      this.dialogForm.wkshopcode = ''
    },
    // å·¥è‰ºè·¯çº¿å€¼æ”¹å˜
    async routecodeChange(val) {
      const data = {
        partcode: this.dialogForm.partcode,
        routecode: this.dialogForm.routecode
      }
      // èŽ·å–ç”Ÿäº§è½¦é—´æ•°ç»„
      const { data: res2 } = await RouteSelectWkshop(data)
      this.wkshopArr = res2
      this.dialogForm.wkshopcode = ''
    },
    // å·¥åºä»»åŠ¡
    async check(row) {
      this.dialogVisibleTask = true
      const { data: res } = await SearchWorkStep({ wo_code: row.wo_code })
      this.taskTableData = res
    },
    dialogVisibleBack() {
      this.dialogVisibleTask = false
    },
    // æ´¾å‘
    send(operation) {
      if (this.radioSelected.length < 1) {
        return this.$message.info('请先选择工单!')
      }
      const row = this.tableData.find(item => item.wo_code === this.radioSelected)
      if (row.status !== 'NEW') {
        return this.$message.info('此工单为非新工单状态,不可派发!')
      }
      this.operation = operation
      this.dialogVisible = true
      this.$nextTick(() => {
        this.dialogForm.mesorderstus = row.status
        this.dialogForm.mesordercode = row.wo_code
        this.dialogForm.partcode = row.partcode
        this.partcodeChange(row.partcode)
        this.dialogForm.partname = row.partname
        this.dialogForm.mesqty = row.plan_qty
        this.dialogForm.partspec = row.partspec
        // this.routecodeChange(this.dialogForm.routecode)
        this.dialogForm.planstartdate = row.plan_startdate !== null ? row.plan_startdate : handleDatetime(new Date())
        this.dialogForm.planenddate = row.plan_enddate !== null ? row.plan_enddate : handleDatetime(new Date())
        this.dialogForm.orderlev = row.piroque !== null ? row.piroque : 3 // ç­‰çº§
      })
    },
    // åˆ é™¤æŒ‰é’®
    async del(row) {
      console.log(row.status)
      if (row.status === 'START' || row.status === 'CLOSED') {
        return this.$message.info('此工单不可删除!')
      }
      this.$confirm('是否确认删除?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        console.log(row, 1)
        const data = {
          wocode: row.wo_code,
          m_po: row.m_po,
          orderqty: row.plan_qty
        }
        console.log(data, 2)
        DeleteMesOrder(data).then(res => {
          if (res.code === '200') {
            this.$message.success('删除成功!')
            this.getMesOrderSearch()
          }
        })
      }).catch(() => {
        this.$message.info('已取消删除')
      })
    },
    // å·¥å•关闭事件
    orderClose() {
      if (this.radioSelected.length < 1) {
        return this.$message.info('请先选择工单!')
      }
      console.log('工单关闭事件')
      this.tableData.forEach(item => {
        if (item.wo_code === this.radioSelected) {
          if (item.status === 'START') {
            return this.$message.info('当前工单未完工,无法关闭!')
          } else if (item.status === 'CLOSED') {
            return this.$message.info('工单已关闭,无需再关闭!')
          } else {
            this.$confirm('是否确认关闭工单?', '提示', {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
              type: 'warning'
            }).then(() => {
              const data = {
                wocode: item.wo_code,
                m_po: item.m_po
              }
              ClosedMesOrder(data).then(res => {
                if (res.code === '200') {
                  this.$message.success('工单关闭成功!')
                  this.getMesOrderSearch()
                  // this.radioSelected = ''
                }
              })
            }).catch(() => {
              this.$message.info('已取消关闭!')
            })
          }
        }
      })
    },
    // å¯¹è¯æ¡†äº§å“ä¿¡æ¯å€¼æ”¹å˜
    partcodeChangeDialog(val) {
      console.log(val)
      this.dialogForm.partname = this.partArr.find(item => item.partcode === val).partname
      this.dialogForm.partcode = this.partArr.find(item => item.partcode === val).partcode
      this.dialogForm.partspec = this.partArr.find(item => item.partcode === val).partspec
      // const { data: res } = await PartSelectRpute({ partcode: val })
      // this.routeArr = res
      // this.dialogForm.routecode = ''
      this.partcodeChange(val)
    },
    // å¯¹è¯æ¡†å…³é—­äº‹ä»¶
    handleClose() {
      this.dialogForm.partname = '' // äº§å“åç§°
      this.dialogForm.partspec = '' // äº§å“è§„æ ¼
      this.dialogForm.wkshopname = '' // ç”Ÿäº§è½¦é—´åç§°
      this.dialogForm.routename = '' // å·¥è‰ºè·¯çº¿åç§°
      this.dialogForm.mesorderstus = 'NEW' // å·¥å•状态码
      this.dialogForm.mesordercode = '' // å·¥å•编号
      this.dialogForm.partcode = '' // äº§å“ç¼–码
      this.dialogForm.mesqty = '' // å·¥å•数量
      this.dialogForm.routecode = '' // å·¥è‰ºè·¯çº¿ç¼–码
      this.dialogForm.wkshopcode = '' // ç”Ÿäº§è½¦é—´ç¼–码
      this.dialogForm.planstartdate = '' // è®¡åˆ’开始时间
      this.dialogForm.planenddate = '' // è®¡åˆ’完成时间
      this.dialogForm.orderlev = '' // å·¥å•等级
      this.$refs.dialogForm.clearValidate()
    },
    // å¯¹è¯æ¡†å–消
    dialogVisibleCancel() {
      this.dialogVisible = false
    },
    // å¯¹è¯æ¡†ç¡®è®¤
    dialogVisibleConfirm() {
      this.$refs.dialogForm.validate(valid => {
        if (valid) {
          const data = {
            // partname: this.dialogForm.partname, // äº§å“åç§°
            // partspec: this.dialogForm.partspec, // äº§å“è§„æ ¼
            // wkshopname: this.dialogForm.wkshopname, // ç”Ÿäº§è½¦é—´åç§°
            // routename: this.dialogForm.routename, // å·¥è‰ºè·¯çº¿åç§°
            mesorderstus: this.dialogForm.mesorderstus, // å·¥å•状态码
            mesordercode: this.dialogForm.mesordercode, // å·¥å•编号
            partcode: this.dialogForm.partcode, // äº§å“ç¼–码
            mesqty: this.dialogForm.mesqty, // å·¥å•数量
            routecode: this.dialogForm.routecode, // å·¥è‰ºè·¯çº¿ç¼–码
            wkshopcode: this.dialogForm.wkshopcode, // ç”Ÿäº§è½¦é—´ç¼–码
            planstartdate: this.dialogForm.planstartdate, // è®¡åˆ’开始时间
            planenddate: this.dialogForm.planenddate, // è®¡åˆ’完成时间
            orderlev: this.dialogForm.orderlev, // å·¥å•等级
            OperType: this.operation === 'add' ? 'Add' : 'Update'
          }
          AddUpdateMesOrder(data).then(res => {
            if (res.code === '200') {
              if (this.operation !== 'add') {
                this.sendPrint()
              }
              this.$message.success(this.operation === 'add' ? '添加成功!' : '派发成功!')
              this.dialogVisible = false
              this.getMesOrderSearch()
            } else {
              this.$message.error(this.operation === 'add' ? '添加失败!' : '派发失败!')
            }
          })
        }
      })
    },
    // æ´¾å‘打印
    async sendPrint() {
      const data = {
        username: getCookie('admin'),
        // username: getCookie('username'),
        mesordercode: this.dialogForm.mesordercode
      }
      const res = await MesOrderPrintSearch1(data)
      // const res = await PrintOrder(data)
      if (res.code === '200') {
        // å‚数具体说明请参考帮助文档中的“WEB报表(B/S报表)->WEB报表客户端->启动参数说明”部分
        var args = {
          type: 'print', // preview  print
          showOptionDlg: false, // å¦‚果不显示打印对话框而直接打印,将此行注释去掉即可
          report: urlAddRandomNo('./static/grf/产品流传单A4.grf'),
          data: res.data
        }
        webapp_ws_ajax_run(args)
      }
    },
    // èŽ·å–é¡µé¢é«˜åº¦
    getHeight() {
      this.$nextTick(() => {
        this.mainHeight = window.innerHeight - 250
        this.tableHeight = this.mainHeight - 100
        // this.isFullscreen = window.innerHeight < 800
        if (this.isFullscreen) {
          this.tableHeight = this.tableHeight - 50
        }
      })
    },
    // å·¥è‰ºè·¯çº¿æ”¾å¤§é•œç‚¹å‡»
    async searchClick() {
      if (this.dialogForm.routecode === '') {
        return this.$message.info('请先选择工艺路线!')
      }
      this.dialogVisibleSearch = true
      const { data: res } = await SelectRouteStep({ routecode: this.dialogForm.routecode })
      this.searchTableData = res
    },
    dialogVisibleSearchBack() {
      this.dialogVisibleSearch = false
    }
  }
}
</script>
<style lang="scss" scoped>
$main_color: #42b983;
::v-deep .el-button--primary {
  background-color: $main_color !important;
  height: 30px;
  display: flex;
  align-items: center;
  //border: 1px solid $main_color;
  border: none;
  padding: 0 20px;
}
::v-deep .el-button--primary:hover {
  border: none;
}
::v-deep .el-button--info {
  height: 30px;
  display: flex;
  align-items: center;
  padding: 0 20px;
}
::v-deep .el-pagination.is-background .el-pager li:not(.disabled).active {
  background-color: $main_color !important;
}
::v-deep .el-dialog__footer {
  display: flex;
  justify-content: flex-end;
}
.footerButton {
  display: flex;
  justify-content: end;
}
::v-deep .el-button--default {
  background-color: #ffffff !important;
  height: 30px;
  display: flex;
  align-items: center;
  padding: 0 20px;
}
::v-deep .el-button--default:hover {
  color: #606266;
}
::v-deep .el-dialog__body {
  padding: 20px 100px !important;
}
.dialogVisibleSearch ::v-deep .el-dialog__body {
  padding: 20px 20px !important;
}
::v-deep .el-radio__input.is-checked .el-radio__inner {
  background-color: $main_color;
  border-color: $main_color;
}
::v-deep .el-radio__input.is-checked + .el-radio__label {
  color: $main_color !important;
}
::v-deep .el-checkbox__input.is-checked .el-checkbox__inner {
  border-color: $main_color;
  background-color: $main_color;
}
::v-deep .el-input__inner {
  height: 30px;
  line-height: 30px;
}
::v-deep .el-input__inner:focus {
  border-color: $main_color;
}
::v-deep .el-table .caret-wrapper {
  transform: scale(0.8);
}
::v-deep .cell {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
}
::v-deep .el-button--text {
  color: $main_color;
  font-size: 14px;
  cursor: pointer;
}
.operationClass {
  height: 23px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.el-icon-share {
  color: $main_color;
  cursor: pointer;
}
.el-checkbox.is-bordered.is-checked {
  border-color: $main_color;
}
::v-deep .el-radio__input.is-checked .el-radio__inner {
  border-color: $main_color;
  background: $main_color;
}
::v-deep .el-checkbox__input.is-indeterminate .el-checkbox__inner {
  border-color: $main_color;
  background: $main_color;
}
::v-deep .el-checkbox__input.is-checked + .el-checkbox__label {
  color: $main_color !important;
}
::v-deep .el-checkbox.is-bordered + .el-checkbox.is-bordered {
  margin: 10px 30px 0px 0;
}
::v-deep .el-radio__input.is-checked + .el-radio__label {
  color: $main_color;
}
::v-deep .el-radio.is-bordered + .el-radio.is-bordered {
  margin: 10px 30px 0px 0;
}
.body ::v-deep .el-divider {
  border: 1px solid #eee;
  width: 99%;
  margin: 10px auto;
}
.body ::v-deep .el-form-item {
  margin-bottom: 0;
}
::v-deep .el-input__inner:focus {
  border-color: $main_color;
}
::v-deep .el-select .el-input__inner:focus {
  border-color: $main_color;
}
::v-deep .el-select-dropdown__item.selected {
  color: $main_color;
}
::v-deep .el-checkbox__inner:hover {
  border-color: $main_color;
}
::v-deep .el-textarea__inner:focus {
  border-color: $main_color;
}
.elTableDiv {
  ::v-deep .el-radio__label {
    display: none;
  }
}
</style>
src/views/scgl/sckbg.vue
@@ -655,6 +655,68 @@
        </div>
      </span>
    </el-dialog>
    <!--打印预览页面-->
    <el-dialog
      title="预览"
      :visible.sync="dialogVisible2"
      width="1140"
      @close="dialogVisible2Close"
    >
      <!-- è¦æ‰“印的区域 -->
      <div id="printMe2" style="padding: 30px;">
        <div
          style="display: flex;width: 250px;height: 150px;border: 1px solid #000;text-align: center;font-size: 10px;"
        >
          <div style="width: 60px;display: flex;flex-direction: column;border-right: 1px solid #000">
            <div
              style="display: flex;height: 75%;border-bottom:1px solid #000;justify-content: center;align-items: center "
            >
              <div id="qrCode2" ref="qrCodeDiv2" />
            </div>
            <div style="display: flex;height: 25%;justify-content: flex-start;align-items: center">
              <div style="margin-left: 5px;width: 40px">数量:</div>
              {{ qrForm.startqty }}
            </div>
          </div>
          <div style="width:190px;display: flex;flex-direction: column">
            <div
              style="display: flex;height: 25%;border-bottom:1px solid #000;justify-content: flex-start;align-items: center;text-align: left"
            >
              <div style="width: 60px;margin-left: 5px;">工单编号:</div>
              <div>{{ qrForm.wo_code }}</div>
            </div>
            <div
              style="display: flex;height: 25%;border-bottom:1px solid #000;justify-content: flex-start;align-items: center ;text-align: left"
            >
              <div style="width: 60px;margin-left: 5px;">产品编码:</div>
              <div>{{ qrForm.partcode }}</div>
            </div>
            <div
              style="display: flex;height: 25%;border-bottom:1px solid #000 ;justify-content: flex-start;align-items: center;text-align: left"
            >
              <div style="width:60px;margin-left: 5px;">产品名称:</div>
              <div>{{ qrForm.partname }}</div>
            </div>
            <div style="display: flex;height: 25%;justify-content: flex-start;align-items: center;text-align: left">
              <div style="width: 60px;margin-left: 5px;">下道工序:</div>
              <div>{{ qrForm.nextstepname }}</div>
            </div>
          </div>
        </div>
      </div>
      <span slot="footer" class="dialog-footer">
        <div class="footerButton">
          <el-button @click="dialogVisible2 = false">取 æ¶ˆ</el-button>
          <el-button v-print="printObj2" type="primary">ç¡® å®š</el-button>
        </div>
      </span>
    </el-dialog>
  </div>
</template>
@@ -677,6 +739,7 @@
  SavaMesOrderStepReport
} from '@/api/scgl'
import { urlAddRandomNo, webapp_ws_ajax_run, webapp_ws_autoupdate } from '@/utils/grwebapp'
import QRCode from 'qrcodejs2'
const SER_HZ = /^[\u4e00-\u9fa5]+$/
export default {
@@ -813,9 +876,53 @@
          { required: true, message: '请输入报工数量', trigger: ['blur', 'change'] }
        ]
      },
      activeName: ''
      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: ''
      }
    }
  },
  // computed: {
  //   qrLink: function() {
  //     return this.$store.getters.getPreviewUrl
  //   }
  // },
  // watch: {
  //   qrLink: function(newVal, oldNew) {
  //     if (newVal !== oldNew) {
  //       this.$nextTick(() => {
  //         this.bindQRCode(newVal)
  //       })
  //     }
  //   }
  // },
  created() {
    this.getMesOrderStepSearch()
    this.tabClick()
@@ -826,9 +933,10 @@
    this.$nextTick(() => {
      $("input[name='produceCode']")[0].focus()
      // this.bindQRCode('10001;001')
    })
    // webapp_urlprotocol_startup()
    webapp_ws_autoupdate(true)
    // webapp_ws_autoupdate(true)
  },
  methods: {
    async getMesOrderStepSearch() {
@@ -1265,9 +1373,10 @@
            }
            SavaMesOrderStepIn(data).then(res => {
              if (res.code === '200') {
                this.WXprint()
                this.WXprint2()
                this.$message.success('收料成功!')
                this.dialogVisible = false
                this.dialogVisible2 = true
                this.tabClick()
              } else {
                this.$message.error('收料失败!')
@@ -1327,11 +1436,13 @@
              ngqty: this.dialogForm.noputqty === '' ? 0 : this.dialogForm.noputqty, // ä¸è‰¯æ•°é‡
              badcode: this.dialogForm.badcode.length < 1 ? '' : this.dialogForm.badcode.join(';')// ä¸è‰¯åŽŸå› 
            }
            SavaMesOrderStepReport(data).then(res => {
              if (res.code === '200') {
                this.ZZprint()
                this.ZZprint2()
                this.$message.success('报工成功!')
                this.dialogVisible = false
                this.dialogVisible2 = true
                this.tabClick()
              } else {
                this.$message.error('报工失败!')
@@ -1341,52 +1452,53 @@
        }
      })
    },
    async ZZprint() {
      const obj = {
        recordset: [
          {
            wo_code: this.dialogForm.wo_code, // å·¥å•编号
            partcode: this.dialogForm.partcode, // äº§å“ç¼–码
            partname: this.dialogForm.partname, // äº§å“åç§°
            next_stepname: this.dialogForm.nextstepname, // ä¸‹é“工序
            qty: this.dialogForm.startqty, // æ•°é‡
            // qrcode: this.form.orderstepqrcode// äºŒç»´ç 
            qrcode: this.dialogForm.wo_code + ';' + this.dialogForm.nextstepcode // äºŒç»´ç 
          }
        ]
      }
      const args = {
        type: 'print', // preview  print
        showOptionDlg: false, // å¦‚果不显示打印对话框而直接打印,将此行注释去掉即可
        report: urlAddRandomNo('./static/grf/报工产出标签.grf'),
        data: obj
      }
      webapp_ws_ajax_run(args)
    // ç”ŸæˆäºŒç»´ç 
    bindQRCode(text) {
      new QRCode(this.$refs.qrCodeDiv2, {
        text: text,
        width: 50,
        height: 50,
        colorDark: '#000', // äºŒç»´ç é¢œè‰²
        colorLight: '#ffffff', // äºŒç»´ç èƒŒæ™¯è‰²
        correctLevel: QRCode.CorrectLevel.L// å®¹é”™çŽ‡ï¼ŒL/M/H
      })
    },
    // å¤–协收料打印
    WXprint() {
      // å‚数具体说明请参考帮助文档中的“WEB报表(B/S报表)->WEB报表客户端->启动参数说明”部分
      const obj = {
        recordset: [
          {
            wo_code: this.dialogForm.wo_code, // å·¥å•编号
            partcode: this.dialogForm.partcode, // äº§å“ç¼–码
            partname: this.dialogForm.partname, // äº§å“åç§°
            next_stepname: this.dialogForm.nextstepname, // ä¸‹é“工序
            qty: this.dialogForm.sqty, // æ•°é‡
            // qrcode: this.WXform.orderstepqrcode// äºŒç»´ç 
            qrcode: this.dialogForm.wo_code + ';' + this.dialogForm.nextstepcode// äºŒç»´ç 
          }
        ]
      }
      const args = {
        type: 'print', // preview  print
        showOptionDlg: false, // å¦‚果不显示打印对话框而直接打印,将此行注释去掉即可
        report: urlAddRandomNo('./static/grf/外协收料标签.grf'),
        data: obj
      }
      webapp_ws_ajax_run(args)
    ZZprint2() {
      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.$nextTick(() => {
        this.bindQRCode(this.qrForm.qrvalue)
        console.log(this.$refs.qrCodeDiv2, 123)
        // console.log(this.$refs.qrCodeDiv2.querySelectorAll('#qrCode2>img'), 1)
        // console.log(this.$refs.qrCodeDiv2.querySelectorAll('#qrCode2>canvas'), 2)
      })
    },
    WXprint2() {
      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.$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.$refs.qrCodeDiv2 = ''
    },
    // èŽ·å–é¡µé¢é«˜åº¦
    getHeight() {
      this.$nextTick(() => {
@@ -1576,3 +1688,12 @@
  }
}
</style>
<style media="print">
/*@media print {*/
@page {
  size: auto;
  margin: 3mm;
  font-size: 10px;
}
</style>
src/views/scgl/sckbg_autoPrint.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1578 @@
<template>
  <div>
    <div class="body" style="padding: 0;height: 100%" :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>
              <!--              oninput="value=value.replace(/[^0-9a-zA-Z;_]/g,'')"-->
              <el-input
                v-model="form.orderstepqrcode"
                name="produceCode"
                style="width: 300px"
                @keyup.enter.native="val=>enterNative(val,'produceCode')"
              />
            </div>
            <div v-if="false" style="display: flex;padding-right: 10px">
              <el-button @click="ZZstart">
                <svg-icon icon-class="start_time" style="margin-right: 2px" />
                å¼€å§‹
              </el-button>
              <el-button @click="ZZreport">
                <svg-icon icon-class="report_work" style="margin-right: 2px" />
                æŠ¥å·¥
              </el-button>
            </div>
          </div>
          <el-divider />
          <div class="elTableDiv">
            <el-table
              :data="tableData"
              :height="tableHeight+'px'"
              border
              stripe
              :style="{width: 100+'%',height:tableHeight+'px',}"
              highlight-current-row
              :header-cell-style="this.$headerCellStyle"
              :cell-style="this.$cellStyle"
              @sort-change="sortChange"
            >
              <!--              <el-table-column-->
              <!--                width="50"-->
              <!--                fixed-->
              <!--              >-->
              <!--                <template slot-scope="{row}">-->
              <!--                  <el-radio-->
              <!--                    v-model="radioSelected"-->
              <!--                    :label="row.wo"-->
              <!--                    style="color: #fff;padding-left: 10px; margin-right: -25px;"-->
              <!--                    @change.native="getCurrentRow(row.wo)"-->
              <!--                  />-->
              <!--                </template>-->
              <!--              </el-table-column>-->
              <el-table-column
                prop="RowNum"
                width="50"
                label="序号"
                fixed
              />
              <el-table-column
                prop="status"
                label="状态"
                sortable="custom"
                width="110"
              >
                <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="工单号"
                min-width="160"
                sortable="custom"
              />
              <el-table-column
                prop="partcode"
                label="产品编码"
                min-width="110"
                sortable="custom"
              />
              <el-table-column
                prop="partname"
                min-width="110"
                label="产品名称"
                sortable="custom"
              />
              <el-table-column
                prop="stepname"
                label="工序"
                min-width="80"
                sortable="custom"
              />
              <el-table-column
                prop="descr"
                label="工序描述"
                min-width="150"
                sortable="custom"
              />
              <el-table-column
                prop="plan_qty"
                label="任务数量"
                width="110"
                sortable="custom"
              />
              <el-table-column
                prop="good_qty"
                label="已报工数量(良品)"
                sortable="custom"
                width="160"
              />
              <el-table-column
                prop="ng_qty"
                label="不良数量"
                width="150"
                sortable="custom"
              />
              <el-table-column
                prop="plan_startdate"
                label="计划开工日期"
                width="185"
                sortable="custom"
              />
              <!--              <el-table-column-->
              <!--                label="操作"-->
              <!--                width="150"-->
              <!--                fixed="right"-->
              <!--              >-->
              <!--                <template slot-scope="{row}">-->
              <!--                  <div class="operationClass">-->
              <!--                    <el-button type="text" @click="edit('edit',row)">编辑</el-button>-->
              <!--                    <el-button type="text" @click="del(row)">删除</el-button>-->
              <!--                  </div>-->
              <!--                </template>-->
              <!--              </el-table-column>-->
            </el-table>
          </div>
          <!--分页-->
          <pagination
            v-show="total>0"
            :total="total"
            :page.sync="form.page"
            :limit.sync="form.rows"
            align="right"
            layout="prev, pager, next,sizes"
            popper-class="select_bottom"
            @pagination="getMesOrderStepSearch"
          />
        </el-tab-pane>
        <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>
              <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')"
              />
            </div>
            <div v-if="false" style="display: flex;padding-right: 10px">
              <el-button @click="WXsend">
                <svg-icon icon-class="start_time" style="margin-right: 2px" />
                å‘æ–™
              </el-button>
              <el-button @click="WXback">
                <svg-icon icon-class="report_work" style="margin-right: 2px" />
                æ”¶æ–™
              </el-button>
            </div>
          </div>
          <el-divider />
          <div class="elTableDiv">
            <el-table
              :data="WXtableData"
              :height="tableHeight+'px'"
              border
              stripe
              :style="{width: 100+'%',height:tableHeight+'px',}"
              highlight-current-row
              :header-cell-style="this.$headerCellStyle"
              :cell-style="this.$cellStyle"
              @sort-change="WXsortChange"
            >
              <!--              <el-table-column-->
              <!--                width="50"-->
              <!--                fixed-->
              <!--              >-->
              <!--                <template slot-scope="{row}">-->
              <!--                  <el-radio-->
              <!--                    v-model="radioSelected"-->
              <!--                    :label="row.wo_code"-->
              <!--                    style="color: #fff;padding-left: 10px; margin-right: -25px;"-->
              <!--                    @change.native="getWXCurrentRow(row.wo_code)"-->
              <!--                  />-->
              <!--                </template>-->
              <!--              </el-table-column>-->
              <el-table-column
                prop="RowNum"
                width="50"
                label="序号"
                fixed
              />
              <el-table-column
                prop="status"
                label="状态"
                sortable="custom"
                width="110"
              >
                <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="工单号"
                min-width="160"
                sortable="custom"
              />
              <el-table-column
                prop="partcode"
                label="产品编码"
                min-width="110"
                sortable="custom"
              />
              <el-table-column
                prop="partname"
                label="产品名称"
                min-width="110"
                sortable="custom"
              />
              <el-table-column
                prop="stepname"
                label="工序"
                min-width="80"
                sortable="custom"
              />
              <el-table-column
                prop="descr"
                label="工序描述"
                min-width="150"
                sortable="custom"
              />
              <el-table-column
                prop="plan_qty"
                label="任务数量"
                width="110"
                sortable="custom"
              />
              <el-table-column
                prop="good_qty"
                label="已收料数量(良品)"
                sortable="custom"
                width="160"
              />
              <el-table-column
                prop="ng_qty"
                label="不良数量"
                width="150"
                sortable="custom"
              />
              <el-table-column
                prop="plan_startdate"
                label="计划开工日期"
                width="185"
                sortable="custom"
              />
              <!--              <el-table-column-->
              <!--                label="操作"-->
              <!--                width="150"-->
              <!--                fixed="right"-->
              <!--              >-->
              <!--                <template slot-scope="{row}">-->
              <!--                  <div class="operationClass">-->
              <!--                    <el-button type="text" @click="edit('edit',row)">编辑</el-button>-->
              <!--                    <el-button type="text" @click="del(row)">删除</el-button>-->
              <!--                  </div>-->
              <!--                </template>-->
              <!--              </el-table-column>-->
            </el-table>
          </div>
          <!--分页-->
          <pagination
            v-show="WXtotal>0"
            :total="WXtotal"
            :page.sync="WXform.page"
            :limit.sync="WXform.rows"
            align="right"
            layout="prev, pager, next,sizes"
            popper-class="select_bottom"
            @pagination="getMesOrderStepSearch"
          />
        </el-tab-pane>
      </el-tabs>
    </div>
    <el-dialog
      :title="dialogTitle"
      :visible.sync="dialogVisible"
      width="800"
      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 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="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==='自制报工'" 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
          >
            <el-option
              v-for="item in badArr"
              :key="item.code"
              :label="item.name"
              :value="item.code"
            />
          </el-select>
        </el-form-item>
        <div v-if="dialogTitle==='自制报工'">
          <i class="el-icon-s-operation" style="color:#42b983;" /> äººå‘˜åˆ—表
          <el-button type="primary" style="margin: 10px 0" @click="userAdd">增行</el-button>
          <el-table
            :data="userTableData"
            border
            stripe
            :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"
            />
            <el-table-column
              prop="username"
              label="人员名称"
            >
              <template slot-scope="{row}">
                <div v-if="row.isVisible===0">{{ row.username }}</div>
                <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>
              </template>
            </el-table-column>
            <el-table-column
              prop="RowNum"
              label="操作"
            >
              <template slot-scope="{row}">
                <div class="operationClass">
                  <el-button v-if="row.isVisible===0" type="text" @click="userDel(row)">删除</el-button>
                  <el-button v-if="row.isVisible===1&&!userIsSave" type="text" @click="userSave(row)">保存</el-button>
                  <el-button v-if="row.isVisible===1" type="text" @click="userCancel(row)">取消</el-button>
                </div>
              </template>
            </el-table-column>
          </el-table>
          <!--分页-->
          <pagination
            v-show="UserTotal>0"
            :total="UserTotal"
            :page.sync="Userform.page"
            :limit.sync="Userform.rows"
            align="right"
            layout="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
            :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>
      <span slot="footer" class="dialog-footer">
        <div class="footerButton">
          <el-button @click="dialogVisibleCancel">取 æ¶ˆ</el-button>
          <el-button v-if="dialogTitle==='自制开始'" type="primary" @click="dialogVisibleConfirm">开 å·¥</el-button>
          <el-button v-if="dialogTitle==='自制报工'" type="primary" @click="dialogVisibleConfirm">提交/打印</el-button>
          <el-button v-if="dialogTitle==='外协发料'" type="primary" @click="dialogVisibleConfirm">发料</el-button>
          <el-button v-if="dialogTitle==='外协收料'" type="primary" @click="dialogVisibleConfirm">收料/打印</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
} from '@/api/scgl'
import { urlAddRandomNo, webapp_ws_ajax_run, webapp_ws_autoupdate } from '@/utils/grwebapp'
const SER_HZ = /^[\u4e00-\u9fa5]+$/
export default {
  name: 'SCKBG',
  components: {
    Pagination
  },
  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,
      // 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: '', // æ”¶æ–™äººå‘˜
        sqty: '', // æ”¶æ–™æ•°é‡
        ngqty: '', // ä¸è‰¯æ•°é‡
        badcode: '', // ä¸è‰¯åŽŸå› ç¼–ç 
        noputqty: '', // ä¸è‰¯æ•°é‡
        eqpcode: '', // ç”Ÿäº§è®¾å¤‡ç¼–码
        usergroupcode: '', // ç­ç»„编码
        reportuser: '', // æŠ¥å·¥äººå‘˜
        startqtySum: '' // ä¸èƒ½è¶…过的数值
      },
      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'] }
        ]
      },
      activeName: ''
    }
  },
  created() {
    this.getMesOrderStepSearch()
    this.tabClick()
  },
  mounted() {
    window.addEventListener('resize', this.getHeight)
    this.getHeight()
    this.$nextTick(() => {
      $("input[name='produceCode']")[0].focus()
    })
    // webapp_urlprotocol_startup()
    webapp_ws_autoupdate(true)
  },
  methods: {
    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()
    },
    // è‡ªåˆ¶é¡µç­¾åŽŸç‚¹ç‚¹å‡»
    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 = ''
        })
      }
    },
    // æ‰«ç é”®ç›˜å›žè½¦äº‹ä»¶
    async enterNative(val, belong) {
      console.log(val, belong)
      // å¼€å·¥ï¼š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: ''
        }
        const res = await MesOrderStepStart(data)
        if (res.code === '200' && res.count === 0) {
          await this.ZZstart(res.data)
        }
        if (res.code === '200' && res.count === 1) {
          await this.ZZreport(res.data)
        }
      }
      if (belong === 'WXproduceCode') {
        const orderstepqrcode = this.WXform.orderstepqrcode
        const data = {
          OperType: 'WX',
          orderstepqrcode: orderstepqrcode,
          SelectType: this.WXSelected// OUT、IN
        }
        const res = await MesOrderStepStart(data)
        if (res.code === '200' && res.count === 2) {
          await this.WXsend(res.data)
        }
        if (res.code === '200' && res.count === 3) {
          await this.WXback(res.data)
        }
      }
    },
    // æŸ¥è¯¢
    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
        if (obj.nextstepname === null || obj.nextstepcode === '') {
          this.dialogForm.nextstepname = obj.stepname
          this.dialogForm.nextstepcode = obj.stepcode
        } else {
          this.dialogForm.nextstepname = obj.nextstepname
          this.dialogForm.nextstepcode = obj.nextstepcode
        }
        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
        if (obj.nextstepname === null || obj.nextstepcode === '') {
          this.dialogForm.nextstepname = obj.stepname
          this.dialogForm.nextstepcode = obj.stepcode
        } else {
          this.dialogForm.nextstepname = obj.nextstepname
          this.dialogForm.nextstepcode = obj.nextstepcode
        }
        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.getUserTableData()
    },
    // èŽ·å–è‡ªåˆ¶æŠ¥å·¥ç”Ÿäº§ç­ç»„ä¸‹æ‹‰åˆ—è¡¨
    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 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
      })
    },
    // ç”¨æˆ·æ·»åŠ 
    userAdd() {
      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 })
    },
    // ç”¨æˆ·åˆ—表删除
    userDel(row) {
      this.userTableData.forEach((item, index) => {
        if (item.number === row.number) {
          this.userTableData.splice(index, 1)
        }
      })
    },
    // ç”¨æˆ·åˆ—表保存
    userSave(row) {
      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.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 = '', // æ”¶æ–™äººå‘˜
      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.$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 // å‘料数量
            }
            SavaMesOrderStepOut(data).then(res => {
              if (res.code === '200') {
                this.$message.success('发料成功!')
                this.dialogVisible = false
                this.tabClick()
              } 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, // æ”¶æ–™æ•°é‡
              ngqty: this.dialogForm.noputqty === '' ? 0 : this.dialogForm.noputqty, // ä¸è‰¯æ•°é‡
              badcode: this.dialogForm.badcode.length < 1 ? '' : this.dialogForm.badcode.join(';')// ä¸è‰¯åŽŸå› 
            }
            SavaMesOrderStepIn(data).then(res => {
              if (res.code === '200') {
                this.WXprint()
                this.$message.success('收料成功!')
                this.dialogVisible = false
                this.tabClick()
              } 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// å¼€å§‹æ•°é‡
            }
            SavaMesOrderStepStart(data).then(res => {
              if (res.code === '200') {
                this.$message.success('开工成功!')
                this.dialogVisible = false
                this.tabClick()
              } 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) {
              return this.$message.info('人员列表不能为空!')
            }
            if (parseFloat(this.dialogForm.noputqty) > 0) {
              if (this.dialogForm.badcode.length < 1) {
                return this.$message.info('请选择不良原因!')
              }
            }
            const reportuser = this.userTableData.map(item => item.usercode).join(';')
            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, // æŠ¥å·¥äººå‘˜
              taskqty: this.dialogForm.planqty, // ä»»åŠ¡æ•°é‡
              // startqty: this.dialogForm.startqty, // å¼€å·¥æ•°é‡
              startqty: this.dialogForm.reportqty, // å¼€å·¥æ•°é‡
              // reportqty: this.dialogForm.reportqty, // æŠ¥å·¥æ•°é‡
              reportqty: this.dialogForm.startqty, // æŠ¥å·¥æ•°é‡
              ngqty: this.dialogForm.noputqty === '' ? 0 : this.dialogForm.noputqty, // ä¸è‰¯æ•°é‡
              badcode: this.dialogForm.badcode.length < 1 ? '' : this.dialogForm.badcode.join(';')// ä¸è‰¯åŽŸå› 
            }
            SavaMesOrderStepReport(data).then(res => {
              if (res.code === '200') {
                this.ZZprint()
                this.$message.success('报工成功!')
                this.dialogVisible = false
                this.tabClick()
              } else {
                this.$message.error('报工失败!')
              }
            })
          }
        }
      })
    },
    async ZZprint() {
      const obj = {
        recordset: [
          {
            wo_code: this.dialogForm.wo_code, // å·¥å•编号
            partcode: this.dialogForm.partcode, // äº§å“ç¼–码
            partname: this.dialogForm.partname, // äº§å“åç§°
            next_stepname: this.dialogForm.nextstepname, // ä¸‹é“工序
            qty: this.dialogForm.startqty, // æ•°é‡
            // qrcode: this.form.orderstepqrcode// äºŒç»´ç 
            qrcode: this.dialogForm.wo_code + ';' + this.dialogForm.nextstepcode // äºŒç»´ç 
          }
        ]
      }
      const args = {
        type: 'print', // preview  print
        showOptionDlg: false, // å¦‚果不显示打印对话框而直接打印,将此行注释去掉即可
        report: urlAddRandomNo('./static/grf/报工产出标签.grf'),
        data: obj
      }
      webapp_ws_ajax_run(args)
    },
    // å¤–协收料打印
    WXprint() {
      // å‚数具体说明请参考帮助文档中的“WEB报表(B/S报表)->WEB报表客户端->启动参数说明”部分
      const obj = {
        recordset: [
          {
            wo_code: this.dialogForm.wo_code, // å·¥å•编号
            partcode: this.dialogForm.partcode, // äº§å“ç¼–码
            partname: this.dialogForm.partname, // äº§å“åç§°
            next_stepname: this.dialogForm.nextstepname, // ä¸‹é“工序
            qty: this.dialogForm.sqty, // æ•°é‡
            // qrcode: this.WXform.orderstepqrcode// äºŒç»´ç 
            qrcode: this.dialogForm.wo_code + ';' + this.dialogForm.nextstepcode// äºŒç»´ç 
          }
        ]
      }
      const args = {
        type: 'print', // preview  print
        showOptionDlg: false, // å¦‚果不显示打印对话框而直接打印,将此行注释去掉即可
        report: urlAddRandomNo('./static/grf/外协收料标签.grf'),
        data: obj
      }
      webapp_ws_ajax_run(args)
    },
    // èŽ·å–é¡µé¢é«˜åº¦
    getHeight() {
      this.$nextTick(() => {
        this.mainHeight = window.innerHeight - 250
        this.tableHeight = this.mainHeight - 80
      })
    }
  }
}
</script>
<style lang="scss" scoped>
$main_color: #42b983;
::v-deep .el-button--primary {
  background-color: $main_color !important;
  height: 30px;
  display: flex;
  align-items: center;
  //border: 1px solid $main_color;
  border: none;
  padding: 0 20px;
}
::v-deep .el-button--primary:hover {
  border: none;
}
::v-deep .el-button--info {
  height: 30px;
  display: flex;
  align-items: center;
  padding: 0 20px;
}
::v-deep .el-pagination.is-background .el-pager li:not(.disabled).active {
  background-color: $main_color !important;
}
::v-deep .el-dialog__footer {
  display: flex;
  justify-content: flex-end;
}
.footerButton {
  display: flex;
  justify-content: end;
}
::v-deep .el-button--default {
  background-color: #ffffff !important;
  height: 30px;
  display: flex;
  align-items: center;
  padding: 0 20px;
}
::v-deep .el-button--default:hover {
  color: #606266;
}
::v-deep .el-dialog__body {
  padding: 20px 100px !important;
}
::v-deep .el-radio__input.is-checked .el-radio__inner {
  background-color: $main_color;
  border-color: $main_color;
}
::v-deep .el-radio__input.is-checked + .el-radio__label {
  color: $main_color !important;
}
::v-deep .el-checkbox__input.is-checked .el-checkbox__inner {
  border-color: $main_color;
  background-color: $main_color;
}
::v-deep .el-input__inner {
  height: 30px;
  line-height: 30px;
}
::v-deep .el-input__inner:focus {
  border-color: $main_color;
}
::v-deep .el-table .caret-wrapper {
  transform: scale(0.8);
}
::v-deep .cell {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
}
::v-deep .el-button--text {
  color: $main_color;
  font-size: 14px;
  cursor: pointer;
}
.operationClass {
  height: 23px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.el-icon-share {
  color: $main_color;
  cursor: pointer;
}
.el-checkbox.is-bordered.is-checked {
  border-color: $main_color;
}
::v-deep .el-radio__input.is-checked .el-radio__inner {
  border-color: $main_color;
  background: $main_color;
}
::v-deep .el-checkbox__input.is-indeterminate .el-checkbox__inner {
  border-color: $main_color;
  background: $main_color;
}
::v-deep .el-checkbox__input.is-checked + .el-checkbox__label {
  color: $main_color !important;
}
::v-deep .el-checkbox.is-bordered + .el-checkbox.is-bordered {
  margin: 10px 30px 0px 0;
}
::v-deep .el-radio__input.is-checked + .el-radio__label {
  color: $main_color;
}
::v-deep .el-radio.is-bordered + .el-radio.is-bordered {
  margin: 10px 30px 0px 0;
}
.body ::v-deep .el-divider {
  border: 1px solid #eee;
  width: 99%;
  margin: 10px auto;
}
.body ::v-deep .el-form-item {
  margin-bottom: 0;
}
::v-deep .el-input__inner:focus {
  border-color: $main_color;
}
::v-deep .el-select .el-input__inner:focus {
  border-color: $main_color;
}
::v-deep .el-select-dropdown__item.selected {
  color: $main_color;
}
::v-deep .el-checkbox__inner:hover {
  border-color: $main_color;
}
::v-deep .el-textarea__inner:focus {
  border-color: $main_color;
}
//.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>
vue.config.js
@@ -50,7 +50,8 @@
    },
    proxy: {
      [process.env.VUE_APP_BASE_API]: {
        target: 'http://121.196.36.24:8001', // è¯·æ±‚的第三⽅接⼝地址
        target: 'http://121.196.36.24:8001', // è¯·æ±‚的第三⽅接⼝地址       æœ¬åœ°å¼€å‘服务器
        // target: 'http://192.168.2.138:8001', // è¯·æ±‚的第三⽅接⼝地址   å®¢æˆ·æœåС噍
        changeOrigin: true, // è¯·æ±‚跨域时,需配置此项
        pathRewrite: { // è·¯å¾„重写,替换target中的请求地址
          ['^' + process.env.VUE_APP_BASE_API]: '/api/'