- 在 FabricOutScanBar 组件中添加手机扫码图标和事件处理 - 更新工作台页面的扫码逻辑以支持手机扫码回退 - 在销售拣货详情页添加手机扫码按钮和处理方法 - 重构扫码设置页面以支持扫码方式选择 - 添加手机扫码配置和判断逻辑到扫码配置模块 - 扩展扫码混入模块以支持手机扫码模式和设备检测 - 在多个业务页面中集成手机扫码功能和界面元素 - 更新扫码配置存储和读取逻辑以兼容新配置结构
482 lines
12 KiB
Vue
482 lines
12 KiB
Vue
<template>
|
||
<view class="wrap">
|
||
<u-form ref="uForm">
|
||
<u-form-item>
|
||
<text class="title" style="width:200px;">单号:{{ GoodsCheckBillNo }}</text>
|
||
<text class="title" style="width:200px;">日期:{{ GoodsCheckBillDate }}</text>
|
||
</u-form-item>
|
||
<u-form-item>
|
||
<text class="title" style="width:200px;">仓库名称:{{ StoreName }}</text>
|
||
<text class="title" style="width:200px;">仓位名称:{{ StoreStationName }}</text>
|
||
</u-form-item>
|
||
<u-form-item label-width="150" label="条码资料:">
|
||
<input type="text" v-model="QRBarCode" maxlength="-1" style="width:200px;"
|
||
@confirm="GoodsCheckBillDetailScan" />
|
||
<u-icon
|
||
v-if="usePhoneScanFallback"
|
||
name="scan"
|
||
size="44"
|
||
color="#2979ff"
|
||
style="margin-left: 8px;"
|
||
@click="handlePhoneScan"
|
||
/>
|
||
<checkbox-group @change="BarCodeDelChange">
|
||
<checkbox ref="checkBoxRef" :checked="BarCodeDelStatus">删除</checkbox>
|
||
</checkbox-group>
|
||
</u-form-item>
|
||
<u-form-item>
|
||
<text class="title">{{ BillDataMessage }}</text>
|
||
</u-form-item>
|
||
<u-form-item>
|
||
<text class="title" style="width:200px;">成品编号:{{ FabricGoodsNo }}</text>
|
||
<text class="title" style="width:200px;">成品重量:{{ GoodsQty }}KG</text>
|
||
</u-form-item>
|
||
<u-form-item>
|
||
<text class="title" style="width:200px;">成品色号:{{ GoodsCodeNo }}</text>
|
||
<text class="title" style="width:200px;">成品颜色:{{ GoodsCodeName }}</text>
|
||
</u-form-item>
|
||
<u-form-item>
|
||
<text class="title" style="width:200px;">成品缸号:{{ CrockNo }}</text>
|
||
<text class="title" style="width:200px;">缸号卷号:{{ GoodsBillNo }}</text>
|
||
|
||
</u-form-item>
|
||
<u-form-item>
|
||
<text class="title" style="width:200px;">本架盘前:{{ BillSumOldRoll }}条</text>
|
||
<text class="title" style="width:200px;">本架实盘:{{ BillSumNewRoll }}条</text>
|
||
</u-form-item>
|
||
<u-form-item>
|
||
<text class="title" style="width:200px;">本色盘前:{{ GoodsCodeNoSumOldRoll }}条</text>
|
||
<text class="title" style="width:200px;">本色实盘:{{ GoodsCodeNoSumNewRoll }}条</text>
|
||
</u-form-item>
|
||
<u-form-item>
|
||
<text class="title" style="width:200px;">本缸盘前:{{ CrockNoSumOldRoll }}条</text>
|
||
<text class="title" style="width:200px;">本缸实盘:{{ CrockNoSumNewRoll }}条</text>
|
||
</u-form-item>
|
||
</u-form>
|
||
<view class="u-demo-area">
|
||
<u-toast ref="uToast"></u-toast>
|
||
<wyb-table ref="table" :headers="headersMaster" :contents="GoodsDetailList" />
|
||
<!-- <wyb-table ref="table" :headers="headersDetail" :contents="GoodsCrockNoDataList" height="600rpx" /> !-->
|
||
</view>
|
||
<!-- <u-action-sheet :list="InDetailList" v-model="actionSheetShow" @click="actionSheetCallback"></u-action-sheet> -->
|
||
|
||
<view class="submitView">
|
||
<u-button type="primary" style="width:100px;" class="commitBtn" :ripple="true" ripple-bg-color="#909399"
|
||
@click="commitBtnFun">
|
||
{{ CommitType ? '消审' : '审核' }}
|
||
</u-button>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import util, {
|
||
parFabricGoodsBarCode2D,
|
||
parYarnGoodsBarCode2D,
|
||
playSuccessAudio,
|
||
playErrorAudio
|
||
} from '../../common/util';
|
||
import scanMixin from '@/common/scanMixin.js';
|
||
import wybTable from '@/components/wyb-table/wyb-table.vue';
|
||
//let that = '';
|
||
export default {
|
||
mixins: [scanMixin],
|
||
data() {
|
||
return {
|
||
borderColor: '#e4e7ed',
|
||
align: 'center',
|
||
index: 0,
|
||
CommitType: '',
|
||
CommitProcName: '',
|
||
actionSheetShow: false,
|
||
QRBarCode: '',
|
||
GoodsCheckBillID: 0,
|
||
GoodsCheckBillNo: '',
|
||
GoodsCheckBillDate: '',
|
||
GoodsCheckBillMasterNo: '',
|
||
StoreNameID: '',
|
||
StoreName: '',
|
||
StoreStationID: '',
|
||
StoreStationNo: '',
|
||
StoreStationName: '',
|
||
CustomerName: '',
|
||
FabricGoodsNo: '',
|
||
FabricGoodsName: '',
|
||
GoodsCodeNo: '',
|
||
GoodsCodeName: '',
|
||
CrockNo: '',
|
||
GoodsBillNo: '',
|
||
GoodsQty: 0,
|
||
StoreStationNameFocus: false,
|
||
BillSumOldRoll: 0,
|
||
BillSumNewRoll: 0,
|
||
GoodsCodeNoSumOldRoll: 0,
|
||
GoodsCodeNoSumNewRoll: 0,
|
||
CrockNoSumOldRoll: 0,
|
||
CrockNoSumNewRoll: 0,
|
||
BarCodeDelStatus: false,
|
||
GoodsDetailList: [],
|
||
BillDataMessage: '',
|
||
headersMaster: [{
|
||
label: '成品编号',
|
||
key: 'product_code'
|
||
}, {
|
||
label: '成品名称',
|
||
key: 'product_name'
|
||
}, {
|
||
label: '成品色号',
|
||
key: 'product_color_code'
|
||
}, {
|
||
label: '成品颜色',
|
||
key: 'product_color_name'
|
||
}, {
|
||
label: '成品缸号',
|
||
key: 'dyelot_number'
|
||
}, {
|
||
label: '盘前条数',
|
||
key: 'roll'
|
||
}, {
|
||
label: '实盘条数',
|
||
key: 'check_roll'
|
||
}, {
|
||
label: '盈亏条数',
|
||
key: 'different_roll'
|
||
}],
|
||
// 移除了 scanReceiver 和 isPageActive,因为它们现在由 scanMixin 提供
|
||
}
|
||
},
|
||
|
||
onLoad(e) {
|
||
//that = this;
|
||
if (e.billid) {
|
||
this.GoodsCheckBillID = e.billid;
|
||
this.GoodsCheckBillDetailData();
|
||
}
|
||
},
|
||
|
||
onShow() {
|
||
this.isPageActive = true;
|
||
this.registerScanBroadcast((scanResult) => {
|
||
console.log("扫码结果:", scanResult);
|
||
this.QRBarCode = scanResult;
|
||
this.$nextTick(() => {
|
||
this.GoodsCheckBillDetailScan();
|
||
});
|
||
});
|
||
},
|
||
|
||
onHide() {
|
||
this.isPageActive = false;
|
||
this.unregisterScanBroadcast();
|
||
},
|
||
|
||
onUnload() {
|
||
this.isPageActive = false;
|
||
this.unregisterScanBroadcast();
|
||
},
|
||
methods: {
|
||
handlePhoneScan() {
|
||
this.openPhoneScan();
|
||
},
|
||
|
||
// 添加通用错误提示方法
|
||
showError(message) {
|
||
this.playError();
|
||
uni.showModal({
|
||
title: '提示',
|
||
content: message,
|
||
showCancel: false
|
||
});
|
||
},
|
||
|
||
playSuccess() {
|
||
util.playSuccessAudio();
|
||
},
|
||
playError() {
|
||
util.playErrorAudio();
|
||
},
|
||
|
||
BarCodeDelChange: function () {
|
||
this.BarCodeDelStatus = !this.BarCodeDelStatus;
|
||
},
|
||
|
||
GoodsCheckBillDetailScan() {
|
||
if (this.StoreNameID == 0 && this.GoodsCheckBillNo == '') {
|
||
this.QRBarCode = '';
|
||
this.showError('请先新增单据');
|
||
return;
|
||
}
|
||
|
||
// 数据清理:去除空格、换行符等
|
||
let cleanCode = this.QRBarCode.replace(/\s+/g, '').replace(/[\r\n]/g, '');
|
||
|
||
console.log("this.QRBarCode ---->>" + cleanCode);
|
||
|
||
var aQRBarCode = '';
|
||
var aBarCode = '';
|
||
if (cleanCode.startsWith('66^') > 0 || cleanCode.startsWith('99^') > 0 || /[\u4E00-\u9FA5]/.test(cleanCode)) {
|
||
aQRBarCode = cleanCode
|
||
} else {
|
||
aBarCode = cleanCode;
|
||
}
|
||
|
||
if (aQRBarCode == '' && aBarCode == '') {
|
||
this.QRBarCode = '';
|
||
this.aBarCode = ''
|
||
this.showError('请扫描二维码或者条码');
|
||
return;
|
||
}
|
||
|
||
let aBarCodeDelStatus = 1
|
||
if (this.BarCodeDelStatus) {
|
||
aBarCodeDelStatus = 3;
|
||
};
|
||
|
||
util.request({
|
||
url: '/product/productCheckOrder/updateProductCheckOrder',
|
||
method: 'put',
|
||
data: {
|
||
'arrange_type': aBarCodeDelStatus,
|
||
'id': parseInt(this.GoodsCheckBillID),
|
||
'bar_code': aBarCode,
|
||
'qr_code': aQRBarCode,
|
||
},
|
||
success: (res) => {
|
||
console.log("-->>--" + JSON.stringify(res.data));
|
||
if (res.data.code == '0') {
|
||
let aResultData = res.data.data;
|
||
this.FabricGoodsNo = aResultData.product_code;
|
||
this.FabricGoodsName = aResultData.product_name;
|
||
this.GoodsCodeNo = aResultData.product_color_code;
|
||
this.GoodsCodeName = aResultData.product_color_name;
|
||
this.CrockNo = aResultData.dyelot_number;
|
||
this.GoodsBillNo = aResultData.volume_number;
|
||
this.GoodsQty = aResultData.weight / 10000;
|
||
this.BillSumOldRoll = aResultData.warehouse_bin_check_before_roll / 100;
|
||
this.BillSumNewRoll = aResultData.warehouse_bin_check_roll / 100;
|
||
this.GoodsCodeNoSumOldRoll = aResultData.color_check_before_roll / 100;
|
||
this.GoodsCodeNoSumNewRoll = aResultData.color_check_roll / 100;
|
||
this.CrockNoSumOldRoll = aResultData.dye_check_before_roll / 100;
|
||
this.CrockNoSumNewRoll = aResultData.dye_check_roll / 100;
|
||
|
||
this.playSuccess();
|
||
this.GoodsCheckBillDetailData();
|
||
this.BillDataMessage = res.data.msg;
|
||
this.QRBarCode = '';
|
||
}
|
||
else {
|
||
this.showError(res.data.msg);
|
||
this.QRBarCode = '';
|
||
}
|
||
},
|
||
fail: (error) => {
|
||
this.showError('连接服务器出错,请检查后台服务是否启动!');
|
||
console.log('error', error)
|
||
},
|
||
})
|
||
},
|
||
|
||
GoodsCheckBillDetailData: function () {
|
||
console.log("--aaa->>" + this.GoodsCheckBillID);
|
||
console.log("--aaa->>" + this.GoodsCheckBillID);
|
||
util.request({
|
||
url: '/product/productCheckOrder/getProductCheckOrder',
|
||
method: 'get',
|
||
data: {
|
||
'id': parseInt(this.GoodsCheckBillID),
|
||
},
|
||
success: (res) => {
|
||
console.log("-->>--" + JSON.stringify(res.data.data));
|
||
this.GoodsDetailList = [];
|
||
this.GoodsCheckBillNo = res.data.data.order_no;
|
||
this.StoreName = res.data.data.warehouse_name
|
||
this.StoreStationName = res.data.data.warehouse_bin_name;
|
||
this.GoodsCheckBillDate = this.$u.timeFormat(res.data.data.check_time, 'yyyy-mm-dd')
|
||
/* this.BillSumOldRoll = res.data.data.item_data.roll;
|
||
this.BillSumNewRoll = res.data.data.item_data.check_roll; */
|
||
var aResultData = res.data.data.item_data;
|
||
this.BillSumOldRoll = 0;
|
||
this.BillSumNewRoll = 0;
|
||
for (var i = 0; i < aResultData.length; i++) {
|
||
aResultData[i].roll = aResultData[i].roll / 100;
|
||
aResultData[i].check_roll = aResultData[i].check_roll / 100;
|
||
aResultData[i].different_roll = aResultData[i].different_roll / 100;
|
||
|
||
this.BillSumOldRoll = this.BillSumOldRoll + aResultData[i].roll;
|
||
this.BillSumNewRoll = this.BillSumNewRoll + aResultData[i].check_roll;
|
||
};
|
||
|
||
this.GoodsDetailList = aResultData;
|
||
},
|
||
})
|
||
},
|
||
|
||
// 审核按钮方法
|
||
commitBtnFun: function () {
|
||
if (this.BillMasterID <= 0) {
|
||
this.showError('当前单据未提交,不能审核或消审!');
|
||
return;
|
||
}
|
||
|
||
var aCommitRecallName = '审核';
|
||
if (this.CommitType == '') {
|
||
aCommitRecallName = '审核';
|
||
} else {
|
||
aCommitRecallName = '消审';
|
||
}
|
||
|
||
// if (this.CommitProcName == '') {
|
||
// this.playError();
|
||
// this.BillDataMessage = '当前' + aCommitRecallName + '操作配置有误,不能审核!';
|
||
// return;
|
||
// }
|
||
console.log('GoodsCheckBillID', this.GoodsCheckBillID)
|
||
util.request({
|
||
url: '/product/productCheckOrder/updateProductCheckOrderAuditStatusPass',
|
||
method: 'put',
|
||
data: {
|
||
'id': parseInt(this.GoodsCheckBillID),
|
||
},
|
||
success: (res) => {
|
||
console.log('审核', res)
|
||
if (res.data.code == '0') {
|
||
var aResultData = JSON.parse(res.data.data);
|
||
console.log('aResultData', aResultData)
|
||
if (aResultData.code == '0' && aResultData.msg ==
|
||
'success') {
|
||
this.playSuccess();
|
||
this.BillDataMessage = aCommitRecallName + "成功!";
|
||
|
||
if (aCommitRecallName == '审核') {
|
||
this.CommitType = '已审核'
|
||
} else {
|
||
this.CommitType = ''
|
||
}
|
||
} else {
|
||
this.showError(aCommitRecallName + '出错!' + aResultData.BillDataMessage);
|
||
return;
|
||
}
|
||
} else {
|
||
this.showError(aCommitRecallName + '出错,' + res.data.msg);
|
||
return;
|
||
}
|
||
},
|
||
fail: (error) => {
|
||
this.showError('连接服务器出错,请检查后台服务是否启动!');
|
||
},
|
||
})
|
||
},
|
||
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style>
|
||
page {
|
||
background-color: #F8F8F8;
|
||
padding-bottom: 260rpx;
|
||
}
|
||
|
||
.u-radio {
|
||
width: 200rpx !important;
|
||
}
|
||
|
||
.submitView {
|
||
width: 100%;
|
||
padding: 16rpx 0 26rpx;
|
||
background-color: #FFFFFF;
|
||
position: fixed;
|
||
bottom: 0;
|
||
left: 0;
|
||
border-top: 1rpx solid #f1f1f1;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
z-index: 100;
|
||
}
|
||
|
||
.submitBtn {
|
||
width: 666rpx;
|
||
}
|
||
|
||
.productBox {
|
||
background-color: #FFFFFF;
|
||
margin-top: 32rpx;
|
||
padding: 26rpx 0;
|
||
}
|
||
|
||
.tjcpName {
|
||
width: 686rpx;
|
||
height: 40rpx;
|
||
font-size: 16px;
|
||
font-weight: bold;
|
||
border-left: 6rpx solid #007AFF;
|
||
padding-left: 12rpx;
|
||
margin-left: 26rpx;
|
||
margin-top: 26rpx;
|
||
}
|
||
|
||
.cpInput {
|
||
width: 150rpx !important;
|
||
margin-right: 12rpx;
|
||
}
|
||
|
||
.cpInput>input {
|
||
box-sizing: border-box;
|
||
border: 1rpx solid #DDDDDD;
|
||
width: 100%;
|
||
height: 60rpx;
|
||
border-radius: 10rpx;
|
||
padding: 0 10rpx;
|
||
}
|
||
|
||
.cpInput1 {
|
||
width: 200rpx !important;
|
||
margin-right: 12rpx;
|
||
}
|
||
|
||
.cpInput1>input {
|
||
box-sizing: border-box;
|
||
border: 1rpx solid #DDDDDD;
|
||
width: 100%;
|
||
height: 60rpx;
|
||
border-radius: 10rpx;
|
||
padding: 0 10rpx;
|
||
}
|
||
|
||
.clearIcon {
|
||
position: absolute;
|
||
right: 6rpx;
|
||
top: 6rpx;
|
||
}
|
||
|
||
.greenPrice {
|
||
font-size: 16px;
|
||
color: #19BE6B !important;
|
||
font-weight: bold;
|
||
}
|
||
|
||
.disFlex {
|
||
display: flex;
|
||
align-items: center;
|
||
margin-bottom: 8rpx;
|
||
}
|
||
|
||
.inputName {
|
||
color: #ADADAD;
|
||
font-size: 16px;
|
||
}
|
||
|
||
.addHKQS {
|
||
display: flex;
|
||
align-items: center;
|
||
padding: 16rpx 26rpx;
|
||
font-size: 15px;
|
||
font-weight: bold;
|
||
width: 100%;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
}
|
||
</style>
|