| New file |
| | |
| | | <template> |
| | | <view class="container"> |
| | | <view class="header"> |
| | | <view class="item"> |
| | | <view class="left">条码编号:</view> |
| | | <view class="right"> |
| | | <input name="HBarCode" v-model="barCodeInfoMeta.barCodeNo" placeholder="请扫描条码" |
| | | @blur="searchbarCodeInfo" /> |
| | | </view> |
| | | <view> |
| | | <uni-icons type="scan" |
| | | style="background-color: #3A78FF;padding: 6rpx;color: #fff;border-radius: 100%;font-weight: 500;" |
| | | size="20" @click="toScanCode"></uni-icons> |
| | | </view> |
| | | </view> |
| | | <view class="item"> |
| | | <view class="left">拆码数量:</view> |
| | | <view class="right"> |
| | | <input type="number" name="HSplitNum" v-model="barCodeInfoMeta.splitNum" placeholder="请输入拆码数量" /> |
| | | </view> |
| | | </view> |
| | | <view class="item"> |
| | | <view class="left">制单人:</view> |
| | | <view class="right"> |
| | | <input type="text" disabled name="HMaker" v-model="barCodeInfoMeta.billMaker" |
| | | placeholder="请输入制单人" /> |
| | | </view> |
| | | </view> |
| | | <view class="operation-zone"> |
| | | <button class="btn-c" @click="searchbarCodeInfoMeta">拆码</button> |
| | | <button type="default" :class="cantGenerate?'':'btn-c'" @click="SaveBarCodeCreate" |
| | | :disabled="cantGenerate">生成</button> |
| | | <button type="default" :class="cantPrint?'':'btn-c'" @click="PrintHBarCode" :disabled="cantPrint" >打印</button> |
| | | </view> |
| | | </view> |
| | | <view class="divide"></view> |
| | | <view class="content"> |
| | | <view class="barcode-detail" v-show="CommonUtils.isEmpty(Object.assign(barCodeInfo, {})) === false"> |
| | | <view class="title">条码信息</view> |
| | | <uni-card> |
| | | <view class="detail" style="display: none;"> |
| | | <text>条码ID:</text>{{barCodeInfo['HItemID'] || '0'}} |
| | | </view> |
| | | <view class="detail"> |
| | | <text>条码编号:</text>{{barCodeInfo['条码编号'] || ''}} |
| | | </view> |
| | | <view class="detail"> |
| | | <text>条码原数量:</text>{{barCodeInfo['数量'] || '0'}} |
| | | </view> |
| | | <view class="detail"> |
| | | <text>剩余数量:</text>{{barCodeInfo['剩余数量'] || '0'}} |
| | | </view> |
| | | <view class="dWetail"> |
| | | <text>物料编码:</text>{{barCodeInfo['物料代码'] || ''}} |
| | | </view> |
| | | <view class="detail"> |
| | | <text>物料名称:</text>{{barCodeInfo['物料名称'] || ''}} |
| | | </view> |
| | | <view class="detail"> |
| | | <text>规格型号:</text>{{barCodeInfo['规格型号'] || ''}} |
| | | </view> |
| | | <view class="detail"> |
| | | <text>计量单位:</text>{{barCodeInfo['计量单位'] || ''}} |
| | | </view> |
| | | </uni-card> |
| | | </view> |
| | | <view class="divide"></view> |
| | | <view class="barcode-split" v-show="barCodeSplitInfo.length>0"> |
| | | <view class="title">条码拆码</view> |
| | | <view class="barcode-split-list" v-for="(item,index) in barCodeSplitInfo" :key="index"> |
| | | <uni-card @tap="ModityHQty(item)"> |
| | | <view class="detail"> |
| | | <text>条码编号:</text>{{item['HBarCode'] || ''}} |
| | | </view> |
| | | <view class="detail split-num"> |
| | | <text>拆分数量:</text>{{item['HSplitNum'] || '0'}} |
| | | </view> |
| | | <view class="detail"> |
| | | <text>物料代码:</text>{{item['HNumber'] || ''}} |
| | | </view> |
| | | <view class="detail"> |
| | | <text>物料名称:</text>{{item['HName'] || ''}} |
| | | </view> |
| | | <view class="detail"> |
| | | <text>规格型号:</text>{{item['HModel'] || ''}} |
| | | </view> |
| | | <view class="detail"> |
| | | <text>计量单位:</text>{{barCodeInfo['计量单位'] || ''}} |
| | | </view> |
| | | </uni-card> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="over" v-if="barCodeSplitInfo.length == 0">暂无数据</view> |
| | | <view class="over" v-if="barCodeSplitInfo.length != 0">已到底</view> |
| | | <view> |
| | | <!-- 输入框示例 --> |
| | | <uni-popup ref="inputDialog" type="dialog"> |
| | | <uni-popup-dialog ref="inputClose" mode="input" title="请输入拆码数量" :value="dialogVal" placeholder="请输入拆码数量" |
| | | @confirm="dialogInputConfirm"></uni-popup-dialog> |
| | | </uni-popup> |
| | | </view> |
| | | <labelPrinterComponentVue ref="labelPrinter" :printInfo="printInfo" :printMode="'cpcl'"> |
| | | </labelPrinterComponentVue> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import labelPrinterComponentVue from '../../components/labelPrinterComponent/labelPrinterComponent.vue'; |
| | | import { |
| | | CBar, |
| | | CBox, |
| | | CForm, |
| | | CImage, |
| | | CLine, |
| | | CCodeRotation, |
| | | CCodeType, |
| | | CPage, |
| | | CText, |
| | | CFont, |
| | | CBold, |
| | | CRotation, |
| | | CInverse, |
| | | CMag, |
| | | CQRCode, |
| | | CCorrectLevel, |
| | | CSN, |
| | | CStatus, |
| | | CPCL, |
| | | } from "@psdk/cpcl"; |
| | | import { |
| | | getUserInfo |
| | | } from "@/utils/auth.js"; |
| | | import { |
| | | CommonUtils |
| | | } from "@/utils/common.js" |
| | | export default { |
| | | data() { |
| | | return { |
| | | CommonUtils, |
| | | userInfo: getUserInfo(), |
| | | serverUrl: 'http://192.168.2.227:8082/API', |
| | | barCodeInfoMeta: { |
| | | barCodeNo: "", |
| | | splitNum: "", |
| | | billMaker: getUserInfo().HEmpName, |
| | | billMakerID: getUserInfo().HEmpID |
| | | }, |
| | | barCodeInfo: { |
| | | |
| | | }, |
| | | barCodeSplitInfo: [], |
| | | dialogVal: 0, |
| | | itemCache: {}, |
| | | cantGenerate: true, |
| | | cantPrint:true, |
| | | printInfo: ""//打印 |
| | | }; |
| | | }, |
| | | components: { |
| | | labelPrinterComponentVue |
| | | }, |
| | | methods: { |
| | | doRequest(url, data, resFunction, errFunction, method) { |
| | | uni.showLoading({ |
| | | title: '加载中...' |
| | | }) |
| | | uni.request({ |
| | | method: method || "GET", |
| | | url: this.serverUrl + url, |
| | | data: data || "", |
| | | success: (res) => { |
| | | if (typeof resFunction === 'function') { |
| | | resFunction.call(this, res) |
| | | } else if (typeof errFunction === 'undefined') { |
| | | return |
| | | } else { |
| | | throw new TypeError("访问成功回调函数类型异常!") |
| | | } |
| | | }, |
| | | fail: (err) => { |
| | | uni.showToast({ |
| | | icon: "error", |
| | | title: "接口访问异常!", |
| | | duration: 2000 |
| | | }) |
| | | if (typeof errFunction === 'function') { |
| | | errFunction.call(this, err) |
| | | } else if (typeof errFunction === 'undefined') { |
| | | return |
| | | } else { |
| | | throw new TypeError("访问失败回调函数类型异常!") |
| | | } |
| | | } |
| | | }) |
| | | uni.hideLoading() |
| | | }, |
| | | //摄像头调用 |
| | | async searchbarCodeInfo() { |
| | | await this.$nextTick() |
| | | let urlEncode = |
| | | `/Gy_BarCodeBillList/page?sWhere= and 条码编号=\'\'${this.barCodeInfoMeta.barCodeNo}\'\'&user=${this.userInfo.HEmpName}&page=1&size=1` |
| | | .toString() |
| | | if (CommonUtils.isEmpty(this.barCodeInfoMeta.barCodeNo) == true) { |
| | | return uni.showToast({ |
| | | icon: "fail", |
| | | title: "条码编号不能为空!" |
| | | }) |
| | | } |
| | | this.doRequest( |
| | | urlEncode, |
| | | null, |
| | | function(res) { |
| | | console.log(res) |
| | | let res1 = res.data |
| | | let {data,count} = res1 |
| | | if (count > 0) { |
| | | this.barCodeInfo = data[0] |
| | | this.barCodeSplitInfo= [] |
| | | } |
| | | }, |
| | | function(err) { |
| | | console.err(err) |
| | | } |
| | | ) |
| | | }, |
| | | //拆码按钮调用 |
| | | async searchbarCodeInfoMeta() { |
| | | this.cantGenerate = true |
| | | this.cantPrint=true |
| | | if (CommonUtils.isEmpty(this.barCodeInfoMeta.barCodeNo) === true) { |
| | | return uni.showToast({ |
| | | icon: 'none', |
| | | title: '条码编号不得为空!' |
| | | }); |
| | | } |
| | | if (CommonUtils.isEmpty(this.barCodeInfoMeta.splitNum, true) === true) { |
| | | return uni.showToast({ |
| | | icon: 'none', |
| | | title: '拆分数量不得为空!' |
| | | }); |
| | | } |
| | | if (CommonUtils.isEmpty(this.barCodeInfoMeta.splitNum, true) === true) { |
| | | return uni.showToast({ |
| | | icon: 'none', |
| | | title: '拆分数量不得为空!' |
| | | }); |
| | | } |
| | | if (parseFloat(this.barCodeInfoMeta.splitNum) > parseFloat(this.barCodeInfo['数量'])) { |
| | | return uni.showToast({ |
| | | icon: 'none', |
| | | title: '拆分数量不能大于条码原数量!' |
| | | }); |
| | | } |
| | | this.doRequest( |
| | | "/Sc_BarCode/SplitBarCode_Sub", { |
| | | HBarCodeNo: this.barCodeInfoMeta.barCodeNo |
| | | }, |
| | | function(res) { |
| | | console.log(res) |
| | | this.barCodeSplitInfo = [] |
| | | if (res.data.count > 0) { |
| | | |
| | | if (res.data.data.length < 1) { |
| | | return uni.showToast({ |
| | | icon: 'none', |
| | | title: Message |
| | | }); |
| | | } |
| | | |
| | | //拆分条码:数量为 splitNum |
| | | let barCodeItem1 = JSON.parse(JSON.stringify(res.data.data.SubBarCodes[0])); |
| | | barCodeItem1.HSplitNum = this.barCodeInfoMeta.splitNum; |
| | | barCodeItem1.HBarCode = res.data.data.NextBarCode; |
| | | this.barCodeSplitInfo.push(barCodeItem1); |
| | | |
| | | //更新原先条码数量 |
| | | this.barCodeInfo['剩余数量'] = this.barCodeInfo['数量'] - this.barCodeInfoMeta.splitNum; |
| | | |
| | | this.cantGenerate = false; |
| | | } else { |
| | | uni.showToast({ |
| | | icon: 'none', |
| | | title: '没有找到对应的单据' |
| | | }); |
| | | } |
| | | }, |
| | | function(err) { |
| | | console.error(err) |
| | | } |
| | | ) |
| | | }, |
| | | //保存方法 |
| | | SaveBarCodeCreate() { |
| | | // 校验拆码数量 |
| | | let sum = this.barCodeSplitInfo.reduce((acc, obj) => { |
| | | return acc + obj["HSplitNum"] |
| | | }, 0) |
| | | |
| | | if (sum > this.barCodeInfo["HQty"]) { |
| | | return uni.showToast({ |
| | | icon: 'none', |
| | | title: '拆码数量和不得大于条码数量' |
| | | }); |
| | | } |
| | | let msg = |
| | | `${this.barCodeInfoMeta["barCodeNo"]};${this.barCodeInfoMeta["splitNum"]};${JSON.stringify(this.barCodeSplitInfo)};${this.userInfo["HEmpName"]}` |
| | | this.doRequest( |
| | | "/Sc_BarCode/SplitBarCode_Save", { |
| | | msg: msg |
| | | }, |
| | | function(res) { |
| | | if (res.data.code == 1) { |
| | | this.cantGenerate = true |
| | | this.cantPrint=false |
| | | uni.showToast({ |
| | | title: '生成成功!' |
| | | }); |
| | | }else{ |
| | | this.cantGenerate = false |
| | | uni.showToast({ |
| | | title: res.data.Message |
| | | }); |
| | | } |
| | | |
| | | }, |
| | | function(err) { |
| | | console.err(err) |
| | | }, |
| | | "POST" |
| | | ) |
| | | |
| | | }, |
| | | //打印按钮 |
| | | async PrintHBarCode() { |
| | | if (this.$printer.isConnected() === false) { |
| | | this.$refs.labelPrinter.openPopup() |
| | | } |
| | | else |
| | | { |
| | | let HBarCodeNoStr =`${this.barCodeSplitInfo[0]['HBarCode']}` |
| | | this.printInfo = `! 0 200 200 400 1 |
| | | PAGE-WIDTH 608 |
| | | SETQRVER 3 |
| | | B QR 475 15 Q 0 U 3 |
| | | LA,${HBarCodeNoStr} |
| | | ENDQR |
| | | T 24 0 0 30 供应商: ${this.lailiaoInfo.HSupName} |
| | | T 55 0 0 55 (Supplier) |
| | | T 24 0 0 75 供应商料号: ${this.lailiaoInfo.HMaterNumber} |
| | | T 55 0 0 100 (Supplier Sku No.) |
| | | T 24 0 0 120 物料名称: ${this.lailiaoInfo.HMaterName} |
| | | T 55 0 0 145 (Material Code) |
| | | T 24 0 0 165 款号: ${this.lailiaoInfo.HCoilNO} |
| | | T 55 0 0 190 (Style No.) |
| | | T 24 0 300 165 客户编号: ${this.lailiaoInfo.HFactory} |
| | | T 55 0 300 190 (Consumer No.) |
| | | T 24 0 0 210 分组: ${this.lailiaoInfo.HFurnaceNO || ''} |
| | | T 55 0 0 235 (Group) |
| | | T 24 0 300 210 规格: ${this.lailiaoInfo.HMaterModel} |
| | | T 55 0 300 235 (SKU NO.) |
| | | T 24 0 0 255 数量: ${ parseFloat(this.lailiaoInfo.HQty || 0).toFixed(0) } ${pcsInfo} |
| | | T 55 0 0 280 (Quantity) |
| | | T 24 0 300 255 日期: ${this.lailiaoInfo.HDate || ''} |
| | | T 55 0 300 280 (Date) |
| | | T 24 0 0 300 检验员: |
| | | T 55 0 0 325 (QC) |
| | | T 24 0 300 300 采购单号: ${this.lailiaoInfo.HBillNo || ''} |
| | | T 55 0 300 325 (Purchase Order No.) |
| | | T 24 0 0 345 检验结果: |
| | | T 55 0 0 370 (Inspection status) |
| | | BOX 240 345 260 365 4 |
| | | T 24 0 270 345 合格 |
| | | T 55 0 250 370 (Pass) |
| | | BOX 340 345 360 365 4 |
| | | T 24 0 370 345 不合格 |
| | | T 55 0 370 370 (Fail) |
| | | BOX 460 345 480 365 4 |
| | | T 24 0 490 345 特采 |
| | | T 55 0 440 370 (Spec. accepted) |
| | | FORM |
| | | PRINT` |
| | | await this.$nextTick(() => { |
| | | this.$refs.labelPrinter.execPrint() |
| | | }) |
| | | } |
| | | }, |
| | | toScanCode() { |
| | | var mpaasScanModule = uni.requireNativePlugin("Mpaas-Scan-Module") |
| | | mpaasScanModule.mpaasScan({ |
| | | 'hideAlbum': true, |
| | | 'timeoutInterval':'10', //超时时间 |
| | | 'timeoutText':'未识别到二维码' //超时提醒 |
| | | },(ret) => { |
| | | console.log(ret.resp_result) |
| | | if (this.CommonUtils.isEmpty(ret.resp_result) === false) { |
| | | console.log('条码内容:' + ret.resp_result); |
| | | this.barCodeInfoMeta.barCodeNo = ret.resp_result |
| | | |
| | | this.searchbarCodeInfo() |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | onLoad() { |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | * { |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | input { |
| | | padding: 8rpx 20rpx; |
| | | font-size: 30rpx; |
| | | line-height: 30rpx; |
| | | } |
| | | |
| | | button { |
| | | padding: 0; |
| | | width: 150rpx; |
| | | font-size: 25rpx; |
| | | } |
| | | |
| | | .uni-card { |
| | | margin: 0 !important; |
| | | } |
| | | |
| | | .container { |
| | | .header { |
| | | padding: 20rpx 10rpx; |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 20rpx; |
| | | |
| | | .item { |
| | | display: flex; |
| | | flex-direction: row; |
| | | padding: 0 10rpx; |
| | | gap: 20rpx; |
| | | font-size: 30rpx; |
| | | // height: 1.5rem; |
| | | // justify-content: center; |
| | | align-items: center; |
| | | |
| | | .left { |
| | | text-align: right; |
| | | width: 5rem; |
| | | } |
| | | |
| | | .right { |
| | | flex: 1; |
| | | height: 100%; |
| | | padding: 6rpx 0; |
| | | border-radius: 22rpx; |
| | | border: 1px solid #e4e4e4; |
| | | background-color: #e4e4e4; |
| | | |
| | | >input { |
| | | height: auto; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .operation-zone { |
| | | display: flex; |
| | | flex-direction: row; |
| | | justify-content: space-evenly; |
| | | |
| | | .btn-c { |
| | | background-color: #3a78ff; |
| | | color: #fff; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .divide { |
| | | width: 100%; |
| | | height: 16rpx; |
| | | background-color: #e5e5e5; |
| | | } |
| | | |
| | | .content { |
| | | flex: 1; |
| | | |
| | | .barcode-detail, |
| | | .barcode-split { |
| | | padding: 30rpx; |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 30rpx; |
| | | } |
| | | } |
| | | } |
| | | </style> |