王震
2023-12-13 67da82f0b0c24df5f19bbfcfec63801d9ae902d8
src/views/plan/manufacturingorder/index.vue
@@ -22,8 +22,9 @@
            </el-button>
            <el-dropdown-menu slot="dropdown">
              <el-dropdown-item
                :key="index"
                :command="item.command"
                v-for="item in taskTypeArr"
                v-for="(item,index) in taskTypeArr"
                :disabled="canCreateTask"
                >{{ item.label }}</el-dropdown-item
              >
@@ -40,8 +41,9 @@
            </el-button>
            <el-dropdown-menu slot="dropdown">
              <el-dropdown-item
                :key="i"
                :command="item.command"
                v-for="item in stateTagArr"
                v-for="(item,i) in stateTagArr"
                :disabled="item.disabled"
                >{{ item.label }}</el-dropdown-item
              >
@@ -197,30 +199,76 @@
      </el-dialog>
    </basic-container>
    <!-- 标签打印 -->
    <el-dialog title="标签列表" :visible.sync="diaPrintTab" width="500px">
      <div class="dia_body" style="height: 400px;overflow-y: auto;padding: 0 10px;">
        <el-card class="box-card" v-for="(item, i) in qrData" :key="i" style="margin-bottom: 15px;width:100%">
    <el-dialog title="标签列表" :visible.sync="diaPrintTab" width="500px" top="5vh">
      <div style="width:100%;height: 400px;overflow-y: auto;">
        <div class="dia_body">
          <el-checkbox
          style="margin: 10px 5px;"
          :indeterminate="isIndeterminate"
          v-model="checkAll"
          @change="handleCheckAllChange">全选</el-checkbox>
          <el-checkbox-group @change="changePrintCode()" v-model="checkIndexList">
            <el-card class="box-card" v-for="(item, i) in qrData" :key="i" style="margin-bottom: 15px; font-size: 16px !important;">
                  <el-checkbox :label="i" :key="i" style="position: relative;top:-20px;left:5px"><br></el-checkbox>
              <el-row>
                <el-col :span="10" :offset="3">序号:</el-col>
                <el-col :span="10" style="font-weight: bold;">{{ i + 1 }}</el-col>
                    <el-col :span="10" :offset="3">批次号</el-col>
                    <el-col :span="10" style="font-weight: bold;">{{ item.code.moNo2 }}</el-col>
              </el-row>
              <el-row>
                <el-col :span="10" :offset="3">车间订单号:</el-col>
                <el-col :span="10" style="font-weight: bold;">{{ item.moNo2 }}</el-col>
                    <el-col :span="10" :offset="3">订单号:</el-col>
                    <el-col :span="10" style="font-weight: bold;">{{ item.orderNo }}</el-col>
              </el-row>
              <el-row>
                    <el-col :span="10" :offset="3">客户名称:</el-col>
                    <el-col :span="10" style="font-weight: bold;">{{ item.cName }}</el-col>
                  </el-row>
                  <el-row>
                    <el-col :span="10" :offset="3">零件名称:</el-col>
                    <el-col :span="10" style="font-weight: bold;">{{ item.pName }}</el-col>
                  </el-row>
                  <el-row>
                    <el-col :span="10" :offset="3">车间订单二维码:</el-col>
                    <el-col :span="10">
                      <vueQr :text="JSON.stringify(item.code)" :size="80" :margin="2"></vueQr>
                    </el-col>
                  </el-row>
            </el-card>
          </el-checkbox-group>
        </div>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="diaPrintTab = false">取 消</el-button>
        <el-button type="primary" @click="printFun">打 印</el-button>
      </span>
    </el-dialog>
    <div class="el-dialog__body" style="width:448.8px;overflow-y: auto;position: absolute;top:9999px;padding: 0;">
        <div id="printMOrder">
          <el-card class="box-card" v-for="(item, i) in checkDataList" :key="i" style="padding-top:0px;margin-bottom:10px;font-size: 16px !important;">
            <el-row style="font-size:12px;">
              <el-col :span="10" :offset="3">批次号</el-col>
              <el-col :span="10" style="font-weight: bold;">{{ item.code.moNo2 }}</el-col>
            </el-row>
            <el-row style="font-size:12px;">
              <el-col :span="10" :offset="3">订单号:</el-col>
              <el-col :span="10" style="font-weight: bold;">{{ item.orderNo }}</el-col>
            </el-row>
            <el-row style="font-size:12px;">
              <el-col :span="10" :offset="3">客户名称:</el-col>
              <el-col :span="10" style="font-weight: bold;">{{ item.cName }}</el-col>
            </el-row>
            <el-row style="font-size:12px;">
              <el-col :span="10" :offset="3">零件名称:</el-col>
              <el-col :span="10" style="font-weight: bold;">{{ item.pName }}</el-col>
            </el-row>
            <el-row style="font-size:12px;">
                <el-col :span="10" :offset="3">订单二维码:</el-col>
                <el-col :span="10">
                  <vueQr :text="JSON.stringify(item)" :size="80" :margin="2"></vueQr>
                <vueQr :text="JSON.stringify(item.code)" :size="80" :margin="2"></vueQr>
                </el-col>
              </el-row>
          </el-card>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="diaPrintTab = false">取 消</el-button>
        <el-button type="primary" @click="diaPrintTab = false">打 印</el-button>
      </span>
    </el-dialog>
      </div>
  </div>
</template>
@@ -250,12 +298,15 @@
import { getStore } from '@/util/store.js'
import { getObj as getSysParam } from '@/api/admin/sys-public-param'
import vueQr from 'vue-qr'
import PrintJS from 'print-js'
export default {
  data() {
    return {
      checkList: [],
      checkAll: false,
      isIndeterminate: true,
      checkDataList: [],
      checkIndexList: [],
      qrData: [],
      orderDatalist:[],
      diaPrintTab:false,
      showCustomerorder: false,
      paramObj: { customerList: null },
@@ -444,7 +495,7 @@
            isSearch: true,
            searchInfoType: 'text'
          },
          {
          /* {
            minWidth: '120',
            prop: 'printRequirement',
            label: '印字要求',
@@ -461,7 +512,7 @@
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
          },
          }, */
           {
            minWidth: '120',
            prop: 'scrapQty',
@@ -536,7 +587,7 @@
            searchInfoType: 'text'
          },
          {
          /* {
            minWidth: '120',
            prop: 'outerColor',
            label: '外护颜色',
@@ -554,7 +605,7 @@
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
          },
          }, */
          {
            minWidth: '120',
@@ -603,7 +654,7 @@
            searchInfoType: 'datetimerange',
            formatter: this.formatDutyDate
          },
          {
          /* {
            minWidth: '120',
            prop: 'bomConfirmStatus',
            label: 'BOM状态',
@@ -665,7 +716,7 @@
              }
              return formatVal
            }
          },
          }, */
          {
            minWidth: '200',
            prop: 'remark',
@@ -675,7 +726,7 @@
            isSearch: true,
            searchInfoType: 'text'
          },
          {
          /* {
            minWidth: '100',
            prop: 'oriIfsOrderNo',
            label: '原IFS订单号',
@@ -710,8 +761,8 @@
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
          },
          {
          }, */
         /*  {
            minWidth: '100',
            prop: 'qtyApply',
            label: '申请数量',
@@ -719,7 +770,7 @@
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
          },
          }, */
          {
            minWidth: '140',
            width: '120',
@@ -742,7 +793,7 @@
            searchInfoType: 'datetimerange',
            formatter: this.formatDutyDate
          },
          {
          /* {
            minWidth: '120',
            prop: 'ifsSync',
            label: '订单同步ERP',
@@ -816,7 +867,7 @@
              }
              return formatVal
            }
          },
          }, */
          {
            minWidth: '100',
            prop: 'factoryName',
@@ -1051,7 +1102,103 @@
  mounted() {
    // this.initQueryParams()
  },
  watch:{
    diaPrintTab(newVal){
      if(!newVal){
        this.qrData = []
        this.checkIndexList = []
        this.checkDataList = []
        this.isIndeterminate = true;
      }
    }
  },
  methods: {
    //全选
    handleCheckAllChange(val) {
      if(val){
        for(var i=0;i<this.qrData.length;i++){
          this.checkIndexList.push(i)
        }
        this.checkDataList = this.qrData
      }else{
        this.checkIndexList = []
        this.checkDataList = []
      }
      this.isIndeterminate = false;
    },
    //选择要打印的二维码
    changePrintCode(){
      let indexList = this.checkIndexList
      let arr = []
      indexList.forEach(i=>{
        arr.push(this.qrData[i])
      })
      this.checkDataList = arr
    },
    //打印方法
    printFun() {
        if(this.checkDataList.length < 1){
          this.$message.warning("请选择要打印的二维码")
          return
        }
        this.diaPrintTab = false;
        PrintJS({
            printable: 'printMOrder',//页面
            type: "html",//文档类型
              maxWidth:450,
              targetStyles:['*'],
              style: `@page {
                margin:0;
                size: 360px 175px;
              }
              html{
                zoom:100%;
              }
              @media print{
                width: 360px;
                height: 175px;
                margin:0;
              }`,
              onPrintDialogClose: this.erexcel=false,
              targetStyles: ["*"], // 使用dom的所有样式,很重要
              font_size: '',
        });
    },
    //初始化二维码标签数据
    initQrData(data){
      this.qrData = []
      if(data){
        console.log(data);
        let index = Number(data.qtyRequired) + Number(data.scrapQty)
        if(index>0){
          for(var i=1;i<= index;i++){
            let obj = {
              orderNo: data.customerOrderNo,
              cName: data.customerName,
              pName: data.partName,
              code: {
                moNo: data.moNo,
                moNo2: null,
              }
            }
            let no = (i+"").padStart(3,'0')
            obj.code.moNo2 = data.moNo + no
            this.qrData.push(obj)
          }
        }
      }
    },
    //标签打印按钮
    labelPrint(){
      if(this.multipleSelection.length==0){
          this.$message.warning('请选择一条数据')
          return
      }
      let selection = this.multipleSelection
      let lastRow = selection[ selection.length - 1 ]
      this.initQrData(lastRow)
      this.diaPrintTab = true
    },
    getManufactureAttr(row, column, cellValue) {
      this.manufactureAttrs.forEach((obj) => {
        if (obj.value === cellValue) {
@@ -1168,7 +1315,6 @@
                getByMoIds([this.orderPlan.id]).then((repsonse) => {
                  const resData = repsonse.data.data
                  const resCode = repsonse.data.code
                  console.log("resData-----",repsonse);
                  if (resCode === 0) {
                    const _that = this
                    for (const key in resData) {
@@ -1400,36 +1546,8 @@
        }
      }
    },
    //初始化二维码标签数据
    initQrData(data){
      if(data){
        let index = Number(data.qtyRequired) + Number(data.scrapQty)
        if(index>0){
          for(var i=1;i<= index;i++){
            let obj = {
              moNo: data.moNo,
              moNo2: null,
            }
            let no = (i+"").padStart(3,'0')
            obj.moNo2 = data.moNo + no
            this.qrData.push(obj)
          }
        }
      }
    },
    // table自带事件
    handleSelectionChange(val) {
      console.log(val,"一行");
      let orderData = []
      orderData =val.map( el =>{
         return{
            moNo:el.moNo,
            qtyRequired: el.qtyRequired,
            scrapQty: el.scrapQty
         }
      })
     this.orderDatalist = orderData
     this.initQrData(orderData[0])
      // 根据状态,禁用表头按钮
      // 筛选出选中记录的状态
      var stateArr = val.map(function(value, index) {
@@ -1722,13 +1840,6 @@
        this.$message.error('上传失败')
      }
    },
    labelPrint(){
      if(this.multipleSelection.length==0){
          this.$message.warning('请选择一条数据')
          return
        }
      this.diaPrintTab = true
    }
  }
}
</script>