剩余模块:生产退料

This commit is contained in:
刘晓鹏 2025-06-10 18:59:21 +08:00
parent 8fb1a6d4fd
commit 4b64b119c8
23 changed files with 1628 additions and 1085 deletions

View File

@ -51,8 +51,8 @@
})
}
const appVersion = '0.1.5' //
const appTaiGuoVersion = '0.1.5' //
const appVersion = '0.1.7' //
const appTaiGuoVersion = '0.1.7' //
//
getAppVersion().then(res => {

View File

@ -157,6 +157,11 @@ export const cn = {
'sxdj':'所选单据',
'yzdj':'验证单据',
'sdn':'销售出库单号',
'slbndy':'数量不能大于'
'slbndy':'数量不能大于',
'scgdh':'生产工单号',
'td':'套打',
'qxztd':'请选择套打',
'jskcbq':'即时库存标签',
'bzwlbq':'标准物料标签'
}
}

View File

@ -157,6 +157,11 @@ export const en = {
'sxdj':'SDN #',
'yzdj':'Pick up Items',
'sdn':'SDN #',
'slbndy':'Qty cannot be greater than'
'slbndy':'Qty cannot be greater than',
'scgdh':'MO#',
'td':'Template',
'qxztd':'Select printing template',
'jskcbq':'Inventory Template',
'bzwlbq':'Incoming Template'
}
}

View File

@ -4,6 +4,9 @@
<l-header :title="state.FBillNo" sticky #right>
<view style="margin-right: 32rpx;" @click="dataPushNotification">{{ t('receive.tj') }}</view>
</l-header>
<view class="input-box">
<up-tabs :scrollable="false" :list="state.tabsList" @click="upTabsItemFun"></up-tabs>
</view>
<architecture ref="architectureRef" :dataType="t('home.llyz')" icon="scan" :placeholder="t('verify.tm')"
@scanConfirm="scanConfirmFun" @inputConfirm="changeFun"
:fence="[state.scanFrameRefShow,state.shortcutRefShow]" />
@ -88,7 +91,10 @@
const state = reactive({
scanFrameRefShow: false,
shortcutRefShow: false,
tabsList: [
{ name: computed(() => t('index.bz')), type: '1' },
{ name: computed(() => t('index.minbz')), type: '2' },
],
queryString: '',
dataList: [],
scrollHeight: 0,
@ -124,6 +130,9 @@
}).exec();
// scanFrameRef.value.stateShow(true)
})
const upTabsItemFun = (e:any) => {
state.tabsIndex = e.type
}
const scanConfirmFun = (e : any) => {
if(e != '') state.code = e
getReceiveBillScanData(state.code)
@ -165,9 +174,12 @@
SAL_OUTSTOCKScanData({
FBarCode: val,
FBillNo: state.FBillNo,
IsPack: state.tabsIndex === '1' ? 'true' : 'false'
}).then((res : any) => {
if (res.data !== null) {
if (res.code == 200) {
console.log(res);
console.log(state.tabsIndex,'=================1111111111111111111111111111======================》');
if(state.tabsIndex === '2'){
scanFrameRef.value.getreceiveBillScanData({ ...res.data, queryString: state.queryString, scanFrameShowSate: state.shortcutDataFeedback.scanFrameShowSate, stashVerify: true })
if (Object.keys(state.shortcutDataFeedback).length) {
if (state.shortcutDataFeedback.scanFrameShowSate) {
@ -179,7 +191,11 @@
scanFrameRef.value.stateShow(true)
}
} else {
uni.$u.toast(t('index.bmygtsj'))
console.log(state.tabsIndex,'================================================================》');
fnDataList(state.materialId);
}
} else {
uni.$u.toast(res.msg)
state.queryString = ''
}
architectureRef.value.closeFun()
@ -271,7 +287,7 @@
ScanEntry.push({
Ids:state.materialId,
EntryIds: item.FVHUBEntryId,
// Qty: item.FVHUBScanQty,
FQty: item.FVHUBScanQty + ' ',
// Flot: item.FVHUBFlot,
// StockId: item.FVHUBStock,
// StockFlex: item.FVHUBStockFlex,

View File

@ -40,11 +40,11 @@
<view class="zongjian"></view>
<view>{{ item.FVHUBScanQty }}</view>
</view>
<!-- <view class="itemBox">
<view>{{ t('index.ck') }}</view>
<view class="itemBox">
<view>{{ t('index.scgdh') }}</view>
<view class="zongjian"></view>
<view>{{ item['FVHUBStock.FName'] }}</view>
</view> -->
<view>{{ item.FVHUBFBillNo }}</view>
</view>
<view class="itemBox">
<view>{{ t('public.xxh') }}</view>
<view class="zongjian"></view>
@ -154,6 +154,7 @@
FVHUBEntryId: item.Id, //ID
FVHUBFlot: item.FLot_Text, //
FVHUBJSON: item.MaxcessSNo, //
FVHUBFBillNo:item.MoBillNo,
FVHUBStock: {
FNUMBER: item.StockId.Number //
},

View File

@ -68,7 +68,7 @@
import { onLoad, onShow, onReachBottom, } from '@dcloudio/uni-app'
import { useI18n } from 'vue-i18n'
import { parseTime } from '../../utils/tools.js';
import { PRDPPBOMPush, PRDPPBOMScanData, PRDPPBOMView, PRD_ReturnMtrlScanData, PRD_ReturnMtrlView, fStockFlexDetailDelete, temporaryScanDraftSave, temporaryScanList } from '../../common/request/api/api';
import { PRDPPBOMPush, PRDPPBOMScanData, PRDPPBOMView, PRD_ReturnMtrlCheck, PRD_ReturnMtrlScanData, PRD_ReturnMtrlView, fStockFlexDetailDelete, temporaryScanDraftSave, temporaryScanList } from '../../common/request/api/api';
import scanFrame from '../../components/scan-frame/scan-frame.vue'
import tools from '../../components/tools/tools.vue'
import shortcut from '../../components/tools/shortcut.vue'
@ -271,7 +271,7 @@
})
})
//
PRDPPBOMPush({
PRD_ReturnMtrlCheck({
EntryIds: EntryIds.toString(),
Ids: state.materialId
}).then((resA : any) => {

View File

@ -4,8 +4,8 @@
<l-header :title="t('index.zbdy')" sticky></l-header>
<view class="input-box" @click="printingMachineSelectFun">
<view class="input-item">
<up-input :placeholder="t('index.qxzdyj')" border="none" clearable inputAlign="left" v-model="state.printingMachine.name"
confirmType="next" :disabled="true">
<up-input :placeholder="t('index.qxzdyj')" border="none" clearable inputAlign="left"
v-model="state.printingMachine.name" confirmType="next" :disabled="true">
<template #prefix>
<view class="item-title" style="margin-right: 16rpx;">{{ t('index.dyj') }}</view>
</template>
@ -15,11 +15,29 @@
</up-input>
</view>
</view>
<view class="input-box" @click="()=>{state.pickerShow = true}">
<view class="input-item">
<up-input :placeholder="t('index.qxztd')" border="none" clearable inputAlign="left" v-model="state.centerText"
confirmType="next" :disabled="true">
<template #prefix>
<view class="item-title" style="margin-right: 16rpx;">{{ t('index.td') }}</view>
</template>
<template #suffix>
<up-icon name="search" color="#6c6c6c" size="24"></up-icon>
</template>
</up-input>
</view>
</view>
<view class="btnList" style="margin-top: 32rpx;">
<up-button class="btnItem" type="primary" shape="circle" :text="t('index.dyj')" @click="sendHexStr"></up-button>
</view>
</view>
<bluetoothList ref="bluetoothListRef" :dataList="state.bluetoothList" @getAddress="getAddressFun" />
<up-picker :show="state.pickerShow" keyName="title" :columns="state.pickerList"
@close="() => {state.pickerShow = false}" @cancel="() => {state.pickerShow = false}"
@confirm="pickerConfirmFun"></up-picker>
</view>
</template>
@ -40,6 +58,13 @@
// #endif
const state = reactive({
centerText: '',
centerObj: {},
pickerShow: false,
pickerList: [[
{ title: computed(() => t('index.bzwlbq')), index: '1' },
{ title: computed(() => t('index.jskcbq')), index: '2' },
]],
id: '',
FBillNo: '',
pageData: {},
@ -58,18 +83,24 @@
console.log(state.pageData);
})
onShow(() => {
state.centerText = state.pickerList[0][0].title
state.centerObj = state.pickerList[0][0]
uni.getLocation({
type: 'wgs84',
success(res) {
console.log('开启定位权限', res)
},
fail: (err:any) => { }
fail: (err : any) => { }
});
// #ifdef APP-PLUS
hasPermission()
// #endif
})
const pickerConfirmFun = (val : any) => {
state.centerObj = val.value[0]
state.centerText = val.value[0].title
state.pickerShow = false
}
//
const hasPermission = () => {
console.log(uni.getStorageSync('printInfo'));
@ -151,7 +182,6 @@
const createLabel = (item : any) => {
var command = tsc.default.createNew()
command.setSize(100, 50)
command.setGap(2)
command.setCls()
command.setQR(30, 100, "L", 7, "A", item.FBarCode)
@ -166,10 +196,24 @@
command.setPagePrint()
state.sendData = command.getData();
}
const createLabe2 = (item : any) => {
var command = tsc.default.createNew()
command.setSize(89, 28)
command.setGap(2)
command.setCls()
command.setQR(50, 20, "L", 4, "A", item.FBarCode)
command.setText(180, 20, "TSS24.BF2", 1, 1, `P/N${item.FMaterialId}`)
command.setText(180, 60, "TSS24.BF2", 1, 1, `Qty${item.FQty}`)
command.setText(180, 100, "TSS24.BF2", 1, 1, `Batch No${item.FLot}`)
command.setPagePrint()
state.sendData = command.getData();
}
const sendHexStr = async () => {
try {
// 1.
const createItem = (qty:any) => ({
const createItem = (qty : any) => ({
FBarCodeRule: "01",
FBarCode: `${state.pageData.FBillCode}*${state.pageData.FMaterialId}*${state.pageData.FLotText}*${qty}`,
FBillCode: state.pageData.FBillCode,
@ -178,40 +222,28 @@
FLot: state.pageData.FLotText,
FQty: String(qty)
});
// 2.
const originalQty = Number(state.pageData.FQty);
const splitQty = Number(state.pageData.splitQty);
const remainingQty = originalQty - splitQty;
// 3.
const items = [
createItem(remainingQty),
createItem(splitQty)
];
// 4.
const API_KEY = process.env.BARCODE_API_KEY || 'qwe123!@#';
// 5. 使async/await
const res = await UHIK_BD_BarCodeMainFileSave({
Key: API_KEY,
Items: items
}, true);
if (res.code !== 200) {
uni.$u.toast(res.msg);
return;
}
// 6. 使
for (const [index, item] of items.entries()) {
//
if (index > 0) {
await new Promise(resolve => setTimeout(resolve, 1000));
}
createLabel(item);
if (state.centerObj.index === '1') createLabel(item);
if (state.centerObj.index === '2') createLabe2(item);
initPrint();
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -476,6 +476,195 @@
justify-content: center;
}
/* 多行省略 */
.multi-line-omit[data-v-06cca9b7] {
word-break: break-all;
text-overflow: ellipsis;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
/* 单行省略 */
.one-line-omit[data-v-06cca9b7] {
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.u-empty[data-v-06cca9b7],
.u-empty__wrap[data-v-06cca9b7],
.u-tabs[data-v-06cca9b7],
.u-tabs__wrapper[data-v-06cca9b7],
.u-tabs__wrapper__scroll-view-wrapper[data-v-06cca9b7],
.u-tabs__wrapper__scroll-view[data-v-06cca9b7],
.u-tabs__wrapper__nav[data-v-06cca9b7],
.u-tabs__wrapper__nav__line[data-v-06cca9b7],
.up-empty[data-v-06cca9b7],
.up-empty__wrap[data-v-06cca9b7],
.up-tabs[data-v-06cca9b7],
.up-tabs__wrapper[data-v-06cca9b7],
.up-tabs__wrapper__scroll-view-wrapper[data-v-06cca9b7],
.up-tabs__wrapper__scroll-view[data-v-06cca9b7],
.up-tabs__wrapper__nav[data-v-06cca9b7],
.up-tabs__wrapper__nav__line[data-v-06cca9b7] {
display: flex;
flex-direction: column;
flex-shrink: 0;
flex-grow: 0;
flex-basis: auto;
align-items: stretch;
align-content: flex-start;
}
.u-badge[data-v-06cca9b7] {
border-top-right-radius: 100px;
border-top-left-radius: 100px;
border-bottom-left-radius: 100px;
border-bottom-right-radius: 100px;
display: flex;
flex-direction: row;
line-height: 11px;
text-align: center;
font-size: 11px;
color: #FFFFFF;
}
.u-badge--dot[data-v-06cca9b7] {
height: 8px;
width: 8px;
}
.u-badge--inverted[data-v-06cca9b7] {
font-size: 13px;
}
.u-badge--not-dot[data-v-06cca9b7] {
padding: 2px 5px;
}
.u-badge--horn[data-v-06cca9b7] {
border-bottom-left-radius: 0;
}
.u-badge--primary[data-v-06cca9b7] {
background-color: #3c9cff;
}
.u-badge--primary--inverted[data-v-06cca9b7] {
color: #3c9cff;
}
.u-badge--error[data-v-06cca9b7] {
background-color: #f56c6c;
}
.u-badge--error--inverted[data-v-06cca9b7] {
color: #f56c6c;
}
.u-badge--success[data-v-06cca9b7] {
background-color: #5ac725;
}
.u-badge--success--inverted[data-v-06cca9b7] {
color: #5ac725;
}
.u-badge--info[data-v-06cca9b7] {
background-color: #909399;
}
.u-badge--info--inverted[data-v-06cca9b7] {
color: #909399;
}
.u-badge--warning[data-v-06cca9b7] {
background-color: #f9ae3d;
}
.u-badge--warning--inverted[data-v-06cca9b7] {
color: #f9ae3d;
}
/* 多行省略 */
.multi-line-omit[data-v-02b0c54f] {
word-break: break-all;
text-overflow: ellipsis;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
/* 单行省略 */
.one-line-omit[data-v-02b0c54f] {
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.u-empty[data-v-02b0c54f],
.u-empty__wrap[data-v-02b0c54f],
.u-tabs[data-v-02b0c54f],
.u-tabs__wrapper[data-v-02b0c54f],
.u-tabs__wrapper__scroll-view-wrapper[data-v-02b0c54f],
.u-tabs__wrapper__scroll-view[data-v-02b0c54f],
.u-tabs__wrapper__nav[data-v-02b0c54f],
.u-tabs__wrapper__nav__line[data-v-02b0c54f],
.up-empty[data-v-02b0c54f],
.up-empty__wrap[data-v-02b0c54f],
.up-tabs[data-v-02b0c54f],
.up-tabs__wrapper[data-v-02b0c54f],
.up-tabs__wrapper__scroll-view-wrapper[data-v-02b0c54f],
.up-tabs__wrapper__scroll-view[data-v-02b0c54f],
.up-tabs__wrapper__nav[data-v-02b0c54f],
.up-tabs__wrapper__nav__line[data-v-02b0c54f] {
display: flex;
flex-direction: column;
flex-shrink: 0;
flex-grow: 0;
flex-basis: auto;
align-items: stretch;
align-content: flex-start;
}
.u-tabs__wrapper[data-v-02b0c54f] {
display: flex;
flex-direction: row;
align-items: center;
}
.u-tabs__wrapper__scroll-view-wrapper[data-v-02b0c54f] {
flex: 1;
overflow: auto hidden;
}
.u-tabs__wrapper__scroll-view[data-v-02b0c54f] {
display: flex;
flex-direction: row;
flex: 1;
}
.u-tabs__wrapper__nav[data-v-02b0c54f] {
display: flex;
flex-direction: row;
position: relative;
}
.u-tabs__wrapper__nav__item[data-v-02b0c54f] {
padding: 0 11px;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
}
.u-tabs__wrapper__nav__item__text[data-v-02b0c54f] {
font-size: 15px;
color: #606266;
white-space: nowrap !important;
}
.u-tabs__wrapper__nav__item__text--disabled[data-v-02b0c54f] {
color: #c8c9cc !important;
}
.u-tabs__wrapper__nav__line[data-v-02b0c54f] {
height: 3px;
background: #3c9cff;
width: 30px;
position: absolute;
bottom: 2px;
border-radius: 100px;
transition-property: transform;
transition-duration: 300ms;
}
/* 多行省略 */
.multi-line-omit[data-v-df79975b] {
word-break: break-all;
text-overflow: ellipsis;

View File

@ -943,6 +943,172 @@ to {
border-width: 0.5px !important;
}
/* 多行省略 */
.multi-line-omit[data-v-eadae74e] {
word-break: break-all;
text-overflow: ellipsis;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
/* 单行省略 */
.one-line-omit[data-v-eadae74e] {
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.u-empty[data-v-eadae74e],
.u-empty__wrap[data-v-eadae74e],
.u-tabs[data-v-eadae74e],
.u-tabs__wrapper[data-v-eadae74e],
.u-tabs__wrapper__scroll-view-wrapper[data-v-eadae74e],
.u-tabs__wrapper__scroll-view[data-v-eadae74e],
.u-tabs__wrapper__nav[data-v-eadae74e],
.u-tabs__wrapper__nav__line[data-v-eadae74e],
.up-empty[data-v-eadae74e],
.up-empty__wrap[data-v-eadae74e],
.up-tabs[data-v-eadae74e],
.up-tabs__wrapper[data-v-eadae74e],
.up-tabs__wrapper__scroll-view-wrapper[data-v-eadae74e],
.up-tabs__wrapper__scroll-view[data-v-eadae74e],
.up-tabs__wrapper__nav[data-v-eadae74e],
.up-tabs__wrapper__nav__line[data-v-eadae74e] {
display: flex;
flex-direction: column;
flex-shrink: 0;
flex-grow: 0;
flex-basis: auto;
align-items: stretch;
align-content: flex-start;
}
.u-toolbar[data-v-eadae74e] {
height: 42px;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
.u-toolbar__wrapper__cancel[data-v-eadae74e] {
color: #909193;
font-size: 15px;
padding: 0 15px;
}
.u-toolbar__title[data-v-eadae74e] {
color: #303133;
padding: 0 1.875rem;
font-size: 16px;
flex: 1;
text-align: center;
}
.u-toolbar__wrapper__left[data-v-eadae74e], .u-toolbar__wrapper__right[data-v-eadae74e] {
display: flex;
flex-direction: row;
}
.u-toolbar__wrapper__confirm[data-v-eadae74e] {
color: #3c9cff;
font-size: 15px;
padding: 0 15px;
}
/* 多行省略 */
.multi-line-omit[data-v-91b05052] {
word-break: break-all;
text-overflow: ellipsis;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
/* 单行省略 */
.one-line-omit[data-v-91b05052] {
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.u-empty[data-v-91b05052],
.u-empty__wrap[data-v-91b05052],
.u-tabs[data-v-91b05052],
.u-tabs__wrapper[data-v-91b05052],
.u-tabs__wrapper__scroll-view-wrapper[data-v-91b05052],
.u-tabs__wrapper__scroll-view[data-v-91b05052],
.u-tabs__wrapper__nav[data-v-91b05052],
.u-tabs__wrapper__nav__line[data-v-91b05052],
.up-empty[data-v-91b05052],
.up-empty__wrap[data-v-91b05052],
.up-tabs[data-v-91b05052],
.up-tabs__wrapper[data-v-91b05052],
.up-tabs__wrapper__scroll-view-wrapper[data-v-91b05052],
.up-tabs__wrapper__scroll-view[data-v-91b05052],
.up-tabs__wrapper__nav[data-v-91b05052],
.up-tabs__wrapper__nav__line[data-v-91b05052] {
display: flex;
flex-direction: column;
flex-shrink: 0;
flex-grow: 0;
flex-basis: auto;
align-items: stretch;
align-content: flex-start;
}
.u-picker[data-v-91b05052] {
position: relative;
}
.u-picker-input[data-v-91b05052] {
position: relative;
}
.u-picker-input .input-cover[data-v-91b05052] {
opacity: 0;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
z-index: 1;
}
.u-picker__view__column[data-v-91b05052] {
display: flex;
flex-direction: row;
flex: 1;
justify-content: center;
}
.u-picker__view__column__item[data-v-91b05052] {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
font-size: 16px;
text-align: center;
display: block;
color: #303133;
}
.u-picker__view__column__item--disabled[data-v-91b05052] {
cursor: not-allowed;
opacity: 0.35;
}
.u-picker--loading[data-v-91b05052] {
position: absolute;
top: 0;
right: 0;
left: 0;
bottom: 0;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
background-color: rgba(255, 255, 255, 0.87);
z-index: 1000;
}
/* 多行省略 */
.multi-line-omit[data-v-f0542bdf] {
word-break: break-all;
text-overflow: ellipsis;