| | |
| | | <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 = false">生成</button> |
| | | <button type="default" :class="cantPrint?'':'btn-c'" @click="PrintHBarCode" |
| | | :disabled="cantPrint = false">打印</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> |
| | | <view class="container"> |
| | | <view class="header"> |
| | | <view class="item"> |
| | | <view class="left">条码编号:</view> |
| | | <view class="right"> |
| | | <input :focus="HBarCodeFocus" v-model="barCodeInfoMeta.barCodeNo" placeholder="请扫描条码" |
| | | @blur="searchbarCodeInfo" @confirm="getCode(barCodeInfoMeta.barCodeNo)" /> |
| | | </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" |
| | | style="background-color: #e4e4e4;" placeholder="请输入制单人" /> |
| | | </view> |
| | | </view> |
| | | <view class="operation-zone"> |
| | | <button :class="cantSplit ? 'btn-disabled' : 'btn-c'" @click="searchbarCodeInfoMeta" |
| | | :disabled="cantSplit">拆码</button> |
| | | <button type="default" :class="cantGenerate ? 'btn-disabled' : 'btn-c'" @click="SaveBarCodeCreate" |
| | | :disabled="cantGenerate">生成</button> |
| | | <button type="default" :class="cantPrint ? 'btn-disabled' : '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: uni.getStorageSync('serverUrl') || 'http://47.96.97.237/API', |
| | | barCodeInfoMeta: { |
| | | barCodeNo: "", |
| | | splitNum: "", |
| | | billMaker: getUserInfo().HEmpName, |
| | | billMakerID: getUserInfo().HEmpID |
| | | }, |
| | | barCodeInfo: { |
| | | 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: uni.getStorageSync('serverUrl') || 'http://47.96.97.237/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, {}, |
| | | (res) => { |
| | | console.log(res) |
| | | let res1 = res.data |
| | | let { |
| | | data, |
| | | count |
| | | } = res1 |
| | | if (count > 0) { |
| | | this.barCodeInfo = data[0] |
| | | this.barCodeSplitInfo = [] |
| | | } |
| | | }, |
| | | (err) => { |
| | | console.err(err) |
| | | } |
| | | ) |
| | | }, |
| | | dialogInputConfirm(val) { |
| | | this.itemCache["HSplitNum"] = val |
| | | }, |
| | | barCodeSplitInfo: [], |
| | | dialogVal: 0, |
| | | itemCache: {}, |
| | | cantGenerate: true, // 生成按钮初始禁用 |
| | | cantPrint: true, // 打印按钮初始禁用 |
| | | cantSplit: false, // 拆码按钮初始可用 |
| | | HBarCodeFocus: false, |
| | | 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() |
| | | }, |
| | | //声音 |
| | | playSound(e) { |
| | | const innerAudioContext = uni.createInnerAudioContext(); |
| | | if (e == 1) { |
| | | innerAudioContext.src = '/static/success.wav'; |
| | | } else { |
| | | innerAudioContext.src = '/static/jingbao.wav'; |
| | | } |
| | | innerAudioContext.play(); // 播放音频 |
| | | }, |
| | | //光标 |
| | | async refreshBarCodeState() { |
| | | this.HBarCodeFocus = false |
| | | await this.$nextTick(() => { |
| | | this.HBarCodeFocus = true |
| | | this.barCodeInfoMeta.barCodeNo = "" |
| | | }) |
| | | }, |
| | | //摄像头调用 |
| | | 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, {}, |
| | | (res) => { |
| | | console.log(res) |
| | | let res1 = res.data |
| | | let { |
| | | data, |
| | | count |
| | | } = res1 |
| | | if (count > 0) { |
| | | this.barCodeInfo = data[0] |
| | | this.barCodeSplitInfo = [] |
| | | // 扫描条码后重置按钮状态 |
| | | this.resetButtonState(); |
| | | } |
| | | }, |
| | | (err) => { |
| | | console.err(err) |
| | | } |
| | | ) |
| | | }, |
| | | //红外扫条码 |
| | | getCode(HBarCode) { |
| | | if (!HBarCode) { |
| | | this.playSound(0) |
| | | this.refreshBarCodeState() |
| | | uni.showToast({ |
| | | title: '条码不能为空', |
| | | icon: 'none' |
| | | }) |
| | | } else { |
| | | uni.request({ |
| | | url: this.serverUrl + '/Gy_BarCodeBillList/page', |
| | | data: { |
| | | sWhere: ` and 条码编号=''${this.barCodeInfoMeta.barCodeNo}''`, |
| | | user: this.userInfo.HEmpName, |
| | | page: 1, |
| | | size: 1 |
| | | }, |
| | | success: (res) => { |
| | | console.log('扫码返回', res.data.data); |
| | | if (res.data.count == 1) { |
| | | this.playSound(1) |
| | | this.barCodeInfo = res.data.data[0] |
| | | this.barCodeSplitInfo = [] |
| | | // 扫描条码后重置按钮状态 |
| | | this.resetButtonState(); |
| | | } else { |
| | | this.playSound(0) |
| | | this.refreshBarCodeState() |
| | | uni.showToast({ |
| | | title: res.data.Message, |
| | | icon: 'none' |
| | | }) |
| | | } |
| | | }, |
| | | fail: (res) => { |
| | | this.playSound(0) |
| | | this.refreshBarCodeState() |
| | | console.log(res); |
| | | uni.showToast({ |
| | | title: '接口请求失败', |
| | | icon: 'none' |
| | | }) |
| | | }, |
| | | }); |
| | | } |
| | | }, |
| | | dialogInputConfirm(val) { |
| | | this.itemCache["HSplitNum"] = val |
| | | |
| | | // 关闭窗口后,恢复默认内容 |
| | | this.$refs.inputDialog.close() |
| | | // 关闭窗口后,恢复默认内容 |
| | | this.$refs.inputDialog.close() |
| | | |
| | | }, |
| | | //拆码按钮调用 |
| | | 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, |
| | | }, |
| | | (res) => { |
| | | this.barCodeSplitInfo = [] |
| | | if (res.data.count > 0) { |
| | | }, |
| | | //拆码按钮调用 |
| | | async searchbarCodeInfoMeta() { |
| | | this.cantGenerate = true |
| | | this.cantPrint = true |
| | | this.cantSplit = false // 拆码前确保拆码按钮可用 |
| | | 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, |
| | | }, |
| | | (res) => { |
| | | this.barCodeSplitInfo = [] |
| | | if (res.data.count > 0) { |
| | | |
| | | if (res.data.data.length < 1) { |
| | | return uni.showToast({ |
| | | icon: 'none', |
| | | title: Message |
| | | }); |
| | | } |
| | | 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])); |
| | | let HSplitNum = this.barCodeInfoMeta.splitNum; |
| | | this.barCodeSplitInfo.push({ |
| | | HSplitNum: this.barCodeInfoMeta.splitNum, |
| | | HBarCode: res.data.data.NextBarCode, |
| | | //拆分条码:数量为 splitNum |
| | | let barCodeItem1 = JSON.parse(JSON.stringify(res.data.data.SubBarCodes[0])); |
| | | let HSplitNum = this.barCodeInfoMeta.splitNum; |
| | | this.barCodeSplitInfo.push({ |
| | | HSplitNum: this.barCodeInfoMeta.splitNum, |
| | | HBarCode: res.data.data.NextBarCode, |
| | | HNumber: barCodeItem1.HNumber, |
| | | HName: barCodeItem1.HName, |
| | | HModel: barCodeItem1.HModel |
| | | }); |
| | | }); |
| | | |
| | | //更新原先条码数量 |
| | | this.barCodeInfo['剩余数量'] = this.barCodeInfo['数量'] - this.barCodeInfoMeta.splitNum; |
| | | //更新原先条码数量 |
| | | this.barCodeInfo['剩余数量'] = this.barCodeInfo['数量'] - this.barCodeInfoMeta.splitNum; |
| | | |
| | | this.cantGenerate = false; |
| | | } else { |
| | | uni.showToast({ |
| | | icon: 'none', |
| | | title: '没有找到对应的单据' |
| | | }); |
| | | } |
| | | }, |
| | | (err) => { |
| | | console.error(err) |
| | | } |
| | | ) |
| | | }, |
| | | //保存方法 |
| | | SaveBarCodeCreate() { |
| | | // 校验拆码数量 |
| | | let sum = this.barCodeSplitInfo.reduce((acc, obj) => { |
| | | return acc + obj["HSplitNum"] |
| | | }, 0) |
| | | // 拆码成功,禁用拆码按钮,放开生成按钮 |
| | | this.cantSplit = true; |
| | | this.cantGenerate = false; |
| | | this.cantPrint = true; |
| | | } else { |
| | | uni.showToast({ |
| | | icon: 'none', |
| | | title: '没有找到对应的单据' |
| | | }); |
| | | } |
| | | }, |
| | | (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 |
| | | }, |
| | | (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 |
| | | }); |
| | | } |
| | | 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 |
| | | }, |
| | | (res) => { |
| | | if (res.data.code == 1) { |
| | | // 生成成功,禁用生成按钮,放开打印按钮 |
| | | this.cantGenerate = true; |
| | | this.cantPrint = false; |
| | | this.cantSplit = true; |
| | | uni.showToast({ |
| | | title: '生成成功!' |
| | | }); |
| | | } else { |
| | | this.cantGenerate = false; |
| | | uni.showToast({ |
| | | title: res.data.Message |
| | | }); |
| | | } |
| | | |
| | | }, |
| | | (err) => { |
| | | console.err(err) |
| | | }, |
| | | "POST" |
| | | ) |
| | | }, |
| | | (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 供应商: |
| | | T 55 0 0 55 (Supplier) |
| | | T 24 0 0 75 供应商料号: |
| | | T 55 0 0 100 (Supplier Sku No.) |
| | | T 24 0 0 120 物料名称: |
| | | T 55 0 0 145 (Material Code) |
| | | T 24 0 0 165 款号: |
| | | T 55 0 0 190 (Style No.) |
| | | T 24 0 300 165 客户编号: |
| | | T 55 0 300 190 (Consumer No.) |
| | | T 24 0 0 210 分组: |
| | | T 55 0 0 235 (Group) |
| | | T 24 0 300 210 规格: |
| | | T 55 0 300 235 (SKU NO.) |
| | | T 24 0 0 255 数量: |
| | | T 55 0 0 280 (Quantity) |
| | | T 24 0 300 255 日期: |
| | | T 55 0 300 280 (Date) |
| | | T 24 0 0 300 检验员: |
| | | T 55 0 0 325 (QC) |
| | | T 24 0 300 300 采购单号: |
| | | 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` |
| | | console.log('printInfo: ',this.printInfo); |
| | | 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 |
| | | }, |
| | | //打印按钮 |
| | | // 父组件中的打印方法 |
| | | async PrintHBarCode() { |
| | | if (this.$printer.isConnected() === false) { |
| | | this.$refs.labelPrinter.openPopup(); |
| | | return; |
| | | } |
| | | |
| | | this.searchbarCodeInfo() |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | onLoad() {} |
| | | } |
| | | // 防止重复点击 |
| | | if (this.isPrinting) { |
| | | uni.showToast({ |
| | | title: '打印中,请稍候...', |
| | | icon: 'none' |
| | | }); |
| | | return; |
| | | } |
| | | |
| | | this.isPrinting = true; |
| | | |
| | | try { |
| | | let HBarCodeNoStr = `${this.barCodeSplitInfo[0]['HBarCode']}`; |
| | | console.log('获取数据', HBarCodeNoStr); |
| | | |
| | | // 显示打印中状态 |
| | | uni.showLoading({ |
| | | title: '打印中...', |
| | | mask: true |
| | | }); |
| | | |
| | | // 获取打印数据 |
| | | const printData = await new Promise((resolve, reject) => { |
| | | uni.request({ |
| | | url: this.serverUrl + '/Sc_BarCode/GetSplitBarCode_SubList', |
| | | data: { |
| | | HBarCodeNo: HBarCodeNoStr |
| | | }, |
| | | success: (res) => { |
| | | if (res.data.count == 1) { |
| | | resolve(res.data.data[0]); |
| | | } else { |
| | | reject(new Error(res.data.Message || '未找到打印数据')); |
| | | } |
| | | }, |
| | | fail: (err) => { |
| | | reject(new Error('接口请求失败')); |
| | | } |
| | | }); |
| | | }); |
| | | |
| | | const item = printData; |
| | | // 凯贝奈特打印模板 |
| | | this.printInfo = `! 0 200 200 500 1 |
| | | PAGE-WIDTH 800 |
| | | SETQRVER 2 |
| | | B QR 450 120 Q 0 U 4 |
| | | LA,${HBarCodeNoStr} |
| | | ENDQR |
| | | T 90 0 150 30 杭州凯贝奈特科技有限公司 |
| | | T 90 0 20 70 P/N: |
| | | T 50 0 80 70 ${item.物料代码 || ''} |
| | | T 90 0 20 110 P/D: |
| | | T 50 0 80 110 ${item.物料名称 || ''} |
| | | T 90 0 20 150 D/C: |
| | | T 50 0 80 150 ${item.生产日期 || ''} |
| | | T 90 0 220 150 QTY: |
| | | T 50 0 290 150 ${item.数量 || ''} |
| | | T 90 0 360 150 ${item.计量单位 || ''}${item.内外标记 || ''} |
| | | T 90 0 20 190 P/O: |
| | | T 50 0 80 190 ${item.采购订单号 || ''} |
| | | T 90 0 20 230 V/C: |
| | | T 50 0 80 230 ${item.供应商 || ''} |
| | | T 90 0 20 270 Lot No: |
| | | T 50 0 100 270 ${item.供应商批次 || ''} |
| | | T 90 0 20 310 MPN: |
| | | T 50 0 80 310 ${item.供应商料号 || ''} |
| | | T 90 0 20 350 MSD: |
| | | T 50 0 80 350 MSD1 |
| | | FORM |
| | | PRINT`; |
| | | |
| | | console.log('printInfo: ', this.printInfo); |
| | | |
| | | // 等待打印组件更新 |
| | | await this.$nextTick(); |
| | | |
| | | // 执行打印,并等待打印完成 |
| | | const printResult = await this.$refs.labelPrinter.execPrint(); |
| | | console.log('打印结果:', printResult); |
| | | |
| | | // 打印成功后重置状态 |
| | | uni.hideLoading(); |
| | | this.isPrinting = false; |
| | | |
| | | uni.showToast({ |
| | | title: '打印完成', |
| | | icon: 'success', |
| | | duration: 2000 |
| | | }); |
| | | |
| | | // 播放成功提示音 |
| | | this.playSound(1); |
| | | |
| | | } catch (error) { |
| | | console.error('打印失败:', error); |
| | | uni.hideLoading(); |
| | | this.isPrinting = false; |
| | | |
| | | uni.showToast({ |
| | | title: error.message || '打印失败', |
| | | icon: 'error', |
| | | duration: 2000 |
| | | }); |
| | | this.playSound(0); |
| | | } |
| | | }, |
| | | 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() |
| | | } |
| | | }) |
| | | }, |
| | | // 重置按钮状态方法 |
| | | resetButtonState() { |
| | | this.cantSplit = false; // 拆码按钮可用 |
| | | this.cantGenerate = true; // 生成按钮禁用 |
| | | this.cantPrint = true; // 打印按钮禁用 |
| | | } |
| | | }, |
| | | onLoad() { |
| | | this.HBarCodeFocus = true; |
| | | // 页面初始化时设置按钮状态 |
| | | this.resetButtonState(); |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | * { |
| | | box-sizing: border-box; |
| | | } |
| | | * { |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | input { |
| | | padding: 8rpx 20rpx; |
| | | font-size: 30rpx; |
| | | line-height: 30rpx; |
| | | } |
| | | input { |
| | | padding: 8rpx 20rpx; |
| | | font-size: 30rpx; |
| | | line-height: 30rpx; |
| | | } |
| | | |
| | | button { |
| | | padding: 0; |
| | | width: 150rpx; |
| | | font-size: 25rpx; |
| | | } |
| | | button { |
| | | padding: 0; |
| | | width: 150rpx; |
| | | font-size: 25rpx; |
| | | } |
| | | |
| | | .uni-card { |
| | | margin: 0 !important; |
| | | } |
| | | .uni-card { |
| | | margin: 0 !important; |
| | | } |
| | | |
| | | .container { |
| | | .header { |
| | | padding: 20rpx 10rpx; |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 20rpx; |
| | | .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; |
| | | .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; |
| | | } |
| | | .left { |
| | | text-align: right; |
| | | width: 5rem; |
| | | } |
| | | |
| | | .right { |
| | | flex: 1; |
| | | height: 100%; |
| | | padding: 6rpx 0; |
| | | border-radius: 22rpx; |
| | | border: 1px solid #e4e4e4; |
| | | background-color: #e4e4e4; |
| | | .right { |
| | | flex: 1; |
| | | height: 100%; |
| | | padding: 6rpx 0; |
| | | border-radius: 22rpx; |
| | | border: 1px solid #e4e4e4; |
| | | //background-color: #e4e4e4; |
| | | |
| | | >input { |
| | | height: auto; |
| | | } |
| | | } |
| | | } |
| | | >input { |
| | | height: auto; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .operation-zone { |
| | | display: flex; |
| | | flex-direction: row; |
| | | justify-content: space-evenly; |
| | | .operation-zone { |
| | | display: flex; |
| | | flex-direction: row; |
| | | justify-content: space-evenly; |
| | | |
| | | .btn-c { |
| | | background-color: #3a78ff; |
| | | color: #fff; |
| | | } |
| | | } |
| | | } |
| | | .btn-c { |
| | | background-color: #3a78ff; |
| | | color: #fff; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .divide { |
| | | width: 100%; |
| | | height: 16rpx; |
| | | background-color: #e5e5e5; |
| | | } |
| | | .divide { |
| | | width: 100%; |
| | | height: 16rpx; |
| | | background-color: #e5e5e5; |
| | | } |
| | | |
| | | .content { |
| | | flex: 1; |
| | | .content { |
| | | flex: 1; |
| | | |
| | | .barcode-detail, |
| | | .barcode-split { |
| | | padding: 30rpx; |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 30rpx; |
| | | } |
| | | } |
| | | } |
| | | .barcode-detail, |
| | | .barcode-split { |
| | | padding: 30rpx; |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 30rpx; |
| | | } |
| | | } |
| | | } |
| | | </style> |