licp
2024-05-28 df85764203947543c0ced0a0cdf8b7299f6b40ff
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
              >
@@ -98,14 +100,16 @@
            >刷新ifs车间订单号
          </el-button> -->
          <el-button
          <!-- <el-button
          v-if="permissions.manufacturingorder_export"
            @click="exportExcel"
            type="primary"
            style="margin-left:10px;"
            :loading="loadingExcel"
            >导出
          </el-button>
          </el-button> -->
          <el-button
          v-if="permissions.manufacturingorder_label_print"
            @click="labelPrint"
            type="primary"
            style="margin-left:10px;"
@@ -197,25 +201,45 @@
      </el-dialog>
    </basic-container>
    <!-- 标签打印 -->
    <el-dialog title="标签列表" :visible.sync="diaPrintTab" width="500px" top="5vh">
    <el-dialog title="标签列表" :visible.sync="diaPrintTab" width="28%" top="5vh">
      <div style="width:100%;height: 400px;overflow-y: auto;">
        <div class="dia_body" id="printMOrder">
          <el-card class="box-card" v-for="(item, i) in qrData" :key="i" style="margin-bottom: 15px; font-size: 16px !important;">
                <el-row>
                  <el-col :span="10" :offset="3">序号:</el-col>
                  <el-col :span="10" style="font-weight: bold;">{{ i + 1 }}</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-row>
                <el-row>
                  <el-col :span="10" :offset="3">订单二维码:</el-col>
                  <el-col :span="10">
                    <vueQr :text="JSON.stringify(item)" :size="80" :margin="2"></vueQr>
                  </el-col>
                </el-row>
        <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>
                   <div>
                    <el-row style="font-size: 14px;padding-left: 20px;">
                          <el-col  style="font-weight: bold;">{{ item.pName }}</el-col>
                    </el-row>
                    <div style="display: flex;">
                      <div>
                        <el-col :span="8" :offset="4">
                          <vueQr :text="JSON.stringify(item.code)" :size="120" :margin="2"></vueQr>
                        </el-col>
                      </div>
                      <div style="margin-left: 50px;width: 100%;">
                        <el-row>
                          <el-col  style="font-weight: bold;font-size: 14px;"><span>批&nbsp; 次&nbsp;号:&nbsp; </span>{{ item.code.moNo2 }}</el-col>
                        </el-row>
                        <el-row style="margin-top: 6px;font-size: 14px;">
                          <el-col  style="font-weight: bold;"><span>订&nbsp; 单&nbsp;号:&nbsp; </span>{{ item.orderNo }}</el-col>
                        </el-row>
                        <el-row style="margin-top: 6px;font-size: 14px;">
                          <el-col  style="font-weight: bold;"><span>客户名称:&nbsp; </span>{{ item.cName }}</el-col>
                        </el-row>
                        <el-row style="margin-top: 6px;font-size: 14px;">
                          <el-col  style="font-weight: bold;"><span>零&nbsp; 件&nbsp;号:&nbsp; </span>{{ item.partNo }}</el-col>
                        </el-row>
                      </div>
                  </div>
                  </div>
            </el-card>
          </el-checkbox-group>
        </div>
      </div>
      <span slot="footer" class="dialog-footer">
@@ -223,6 +247,33 @@
        <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;margin-top: 0;">
        <div id="printMOrder">
          <el-card class="box-card" v-for="(item, i) in checkDataList" :key="i" style="margin-top-top:0px;margin-bottom:10px;font-size: 10px !important;page-break-before:always;page-break-after: always;">
            <el-row style="font-size: 14px;padding-left: 20px;">
                          <el-col  style="font-weight: bold;">{{ item.pName }}</el-col>
                    </el-row>
                    <div style="display: flex;">
                      <div>
                        <el-col :span="8" :offset="4">
                          <vueQr :text="JSON.stringify(item.code)" :size="120" :margin="2"></vueQr>
                        </el-col>
                      </div>
                      <div style="margin-left: 50px;width: 100%;">
                        <el-row style="margin-top: 10px;">
                          <el-col  style="font-weight: bold;font-size: 14px;"><span>批&nbsp; 次&nbsp;号:&nbsp; </span>{{ item.code.moNo2 }}</el-col>
                        </el-row>
                        <el-row style="margin-top: 9px;font-size: 14px;">
                          <el-col  style="font-weight: bold;"><span>订&nbsp; 单&nbsp;号:&nbsp; </span>{{ item.orderNo }}</el-col>
                        </el-row>
                        <el-row style="margin-top: 9px;font-size: 14px;">
                          <el-col  style="font-weight: bold;"><span>客户名称:&nbsp; </span>{{ item.cName }}</el-col>
                        </el-row>
                      </div>
                    </div>
          </el-card>
        </div>
      </div>
  </div>
</template>
@@ -256,9 +307,11 @@
export default {
  data() {
    return {
      checkList: [],
      checkAll: false,
      isIndeterminate: true,
      checkDataList: [],
      checkIndexList: [],
      qrData: [],
      orderDatalist:[],
      diaPrintTab:false,
      showCustomerorder: false,
      paramObj: { customerList: null },
@@ -357,6 +410,16 @@
        // 标题
        column: [
          {
            minWidth: '120',
            prop: 'moNo',
            label: '车间订单号',
            sort: true,
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text',
            render: { fun: this.addOrUpdateHandle }
          },
          {
            minWidth: '140',
            prop: 'state',
            label: '状态',
@@ -447,7 +510,7 @@
            isSearch: true,
            searchInfoType: 'text'
          },
          {
          /* {
            minWidth: '120',
            prop: 'printRequirement',
            label: '印字要求',
@@ -464,7 +527,7 @@
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
          },
          }, */
           {
            minWidth: '120',
            prop: 'scrapQty',
@@ -497,16 +560,7 @@
              return this.bomTypeDbOptions
            }
          },
          {
            minWidth: '120',
            prop: 'moNo',
            label: '车间订单号',
            sort: true,
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text',
            render: { fun: this.addOrUpdateHandle }
          },
          {
            minWidth: '120',
            prop: 'manufactureAttr',
@@ -539,7 +593,7 @@
            searchInfoType: 'text'
          },
          {
          /* {
            minWidth: '120',
            prop: 'outerColor',
            label: '外护颜色',
@@ -557,7 +611,7 @@
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
          },
          }, */
          {
            minWidth: '120',
@@ -606,7 +660,7 @@
            searchInfoType: 'datetimerange',
            formatter: this.formatDutyDate
          },
          {
          /* {
            minWidth: '120',
            prop: 'bomConfirmStatus',
            label: 'BOM状态',
@@ -668,7 +722,7 @@
              }
              return formatVal
            }
          },
          }, */
          {
            minWidth: '200',
            prop: 'remark',
@@ -678,7 +732,7 @@
            isSearch: true,
            searchInfoType: 'text'
          },
          {
          /* {
            minWidth: '100',
            prop: 'oriIfsOrderNo',
            label: '原IFS订单号',
@@ -713,8 +767,8 @@
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
          },
          {
          }, */
         /*  {
            minWidth: '100',
            prop: 'qtyApply',
            label: '申请数量',
@@ -722,7 +776,7 @@
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
          },
          }, */
          {
            minWidth: '140',
            width: '120',
@@ -745,7 +799,7 @@
            searchInfoType: 'datetimerange',
            formatter: this.formatDutyDate
          },
          {
          /* {
            minWidth: '120',
            prop: 'ifsSync',
            label: '订单同步ERP',
@@ -819,7 +873,7 @@
              }
              return formatVal
            }
          },
          }, */
          {
            minWidth: '100',
            prop: 'factoryName',
@@ -948,21 +1002,6 @@
  },
  created() {
    this.getManufactureAttrs()
    /**
 * {
            text: '新增',
            type: 'primary',
            fun: this.addOrUpdateHandle
          },
          {
            text: '按客户订单查询',
            fun: this.getOperationTaskByCustomer
          },
          {
            text: '订单合并',
            fun: this.openOrderMerge
          }
 */
    if (this.permissions.plan_manufacturingorder_add) {
      this.table.toolbar.push({
        text: '新增',
@@ -976,28 +1015,6 @@
        fun: this.getOperationTaskByCustomer
      })
    }
    // if (this.permissions.manufacturingorder_order_merge) {
    //   this.table.toolbar.push({
    //     text: '订单合并',
    //     fun: this.openOrderMerge
    //   })
    // }
    /**
     * {
          label: '手动新增',
          command: 'MANUAL',
          disabled: false,
          permitArr: ['01planned', '02issued']
        },
        {
          label: '自动新增',
          command: 'AUTO',
          disabled: false,
          permitArr: ['01planned', '02issued']
        }
     */
    if (this.permissions.manufacturingorder_create_task_manual) {
      this.taskTypeArr.push({
        label: '手动新增',
@@ -1014,21 +1031,7 @@
        permitArr: ['01planned', '02issued']
      })
    }
    // 初始化queryParam
    // this.initSearchCondition()
    // if (!this.options.cancelRunCreated) {
    //   this.getDataList()
    // }
    // const queryParam = []
    //       queryParam.push(
    //         Object.assign({
    //           prop: 'state',
    //           searchInfoType: 'select',
    //           propVal: '01planned'
    //         })
    //       )
    //   this.$refs.manufacturingOrderTable.setQueryParam(queryParam)
    //   this.getData()
    this.getBomTypeDbOptions()
    // 车间订单是否同步IFS
@@ -1054,17 +1057,54 @@
  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:['*'],
              targetStyles:['*'],
              style: `@page {
                margin:0;
                size: 360px 175px;
                size: 360px 175px landscape;
              }
              html{
                zoom:100%;
@@ -1078,6 +1118,42 @@
              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=index;i>= 1;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
            obj.partNo = data.partNo
            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) => {
@@ -1160,6 +1236,10 @@
    },
    // 新增 / 修改
    addOrUpdateHandle(row) {
      if(!this.permissions.plan_manufacturingorder_edit && row.id!=null){
        this.$message.error("该角色没有操作权限")
        return
      }
      this.$router.push({
        name: 'productorderForm',
        query: { id: row == null ? null : row.id }
@@ -1195,7 +1275,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) {
@@ -1427,36 +1506,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) {
@@ -1749,13 +1800,6 @@
        this.$message.error('上传失败')
      }
    },
    labelPrint(){
      if(this.multipleSelection.length==0){
          this.$message.warning('请选择一条数据')
          return
        }
      this.diaPrintTab = true
    }
  }
}
</script>