剩余模块:生产入库,销售出库

This commit is contained in:
刘晓鹏 2025-05-12 09:31:38 +08:00
parent bf88fcb395
commit 14a5fa371b
410 changed files with 11041 additions and 6820 deletions

View File

@ -23,6 +23,14 @@ export const PURReceiveBillScanData = async (data : object) => requst('/api/PUR_
export const PURReceiveBillScanPush = async (data : object) => requst('/api/PUR_ReceiveBill/Push', 'post', { ...data })
export const PURReceiveBillScanCheck = async (data : object) => requst('/api/PUR_ReceiveBill/Check', 'post', { ...data })
//条码装箱单
//列表
export const BarcodePackBillList = async (data : object) => requst('/api/BarcodePackBill/List', 'get', { ...data })
//扫描查询
export const BarcodePackBillScanData = async (data : object) => requst('/api/BarcodePackBill/ScanData', 'get', { ...data })
//保存
export const BarcodePackBillSave = async (data : object) => requst('/api/BarcodePackBill/Save', 'post', { ...data })
//生产发料 & 生产补料
export const PRDPPBOMList = async (data : object) => requst('/api/PRD_PPBOM/List', 'get', { ...data })
export const PRDPPBOMView = async (data : object) => requst('/api/PRD_PPBOM/View', 'get', { ...data })
@ -40,6 +48,10 @@ export const PRD_MORPTSave = async (data : object) => requst('/api/PRD_MORPT/Sav
export const PRD_MOPushIntoPro = async (data : object) => requst('/api/PRD_MO/PushIntoPro', 'post', { ...data })
//查看
export const PRD_MOView = async (data : object) => requst('/api/PRD_MO/View', 'get', { ...data })
//成套领料查看
export const WholeSetView = async (data:object) => requst('/api/PRD_MO/WholeSetView', 'get' ,{...data})
//成套领料下推
export const WholeSetPush = async (data : object) => requst('/api/PRD_PPBOM/WholeSetPush', 'post', { ...data })
//列表
export const PRD_MOList = async (data : object) => requst('/api/PRD_MO/List', 'get', { ...data })
//下推
@ -47,6 +59,16 @@ export const PRD_MOPush = async (data : object) => requst('/api/PRD_MO/Push', 'p
//扫描
export const PRD_MOScanData = async (data : object) => requst('/api/PRD_MO/ScanData', 'get', { ...data })
//成套验证
//列表
export const PRD_PickMtrlList = async (data : object) => requst('/api/PRD_PickMtrl/List', 'get', { ...data })
//查看
export const PRD_PickMtrlView = async (data : object) => requst('/api/PRD_PickMtrl/View', 'get', { ...data })
//扫描查询
export const PRD_PickMtrlScanData = async (data : object) => requst('/api/PRD_PickMtrl/ScanData', 'get', { ...data })
//验证提交
export const PRD_PickMtrlCheck = async (data : object) => requst('/api/PRD_PickMtrl/Check', 'post', { ...data })
//生产入库
export const PRD_MORPTList = async (data : object) => requst('/api/PRD_MORPT/List', 'get', { ...data })
export const PRD_MORPTView = async (data : object) => requst('/api/PRD_MORPT/View', 'get', { ...data })
@ -63,7 +85,6 @@ export const SAL_DELIVERYNOTICEPush = async (data : object) => requst('/api/SAL_
//生产装箱
export const PRD_MORPTPackView = async (data : object) => requst('/api/PRD_MORPT/PackView', 'get', { ...data })
export const BarcodePackBillSave = async (data : object) => requst('/api/BarcodePackBill/Save', 'post', { ...data })
export const UHIK_BD_BarCodeMainFileSave = async (data : object) => requst('/api/UHIK_BD_BarCodeMainFile/Save', 'post', { ...data })
@ -83,7 +104,7 @@ export const fStockFlexDetailMultiDelete = async (data : object) => requst('/api
export const version = () => requst('/util/versions/find/AppAppVersionsServiceOrder', 'get', {});
//组织列表
export const ORGOrganizationsList = (data:object) => requst('/api/ORG_Organizations/List', 'get', {});
export const ORGOrganizationsList = (data:object) => requst('/api/ORG_Organizations/List', 'get', {...data});
//获取账套数据中心
export const getDataCenterList = (data:object) => requst('/api/Account/GetDataCenterList', 'post', {...data});

View File

@ -1,3 +1,24 @@
<template>
<view class="app-header" :style="{'background-color':props.bgColor}" :class="{sticky:props.sticky} ">
<u-status-bar></u-status-bar>
<view class=" app-header__content">
<view class="content-slot" @click="handlerLeft()">
<slot name="left">
<image src="../../../../static/icons/nav_icon_back@2x.png" style="width: 44rpx;height: 44rpx;">
</image>
</slot>
</view>
<view class="content-title">
<slot name="title">
<text class="content-title__context" :style="{'color':props.color}">{{props.title}}</text>
</slot>
</view>
<view class="content-slot">
<slot name="right"></slot>
</view>
</view>
</view>
</template>
<script lang="ts" setup>
// #ifdef APP-NVUE
const domModule = uni.requireNativePlugin('dom')
@ -27,7 +48,7 @@
default: 0
}
})
//<EFBFBD>
//
function pageBack() {
let pages = getCurrentPages();
console.log(pages)
@ -51,32 +72,8 @@
pageBack()
}
}
}
</script>
<template>
<view class="app-header" :style="{'background-color':props.bgColor}" :class="{sticky:props.sticky} ">
<u-status-bar></u-status-bar>
<view class=" app-header__content">
<view class="content-slot" @click="handlerLeft()">
<slot name="left">
<image src="../../../../static/icons/nav_icon_back@2x.png" style="width: 44rpx;height: 44rpx;">
</image>
</slot>
</view>
<view class="content-title">
<slot name="title">
<text class="content-title__context" :style="{'color':props.color}">{{props.title}}</text>
</slot>
</view>
<view class="content-slot">
<slot name="right"></slot>
</view>
</view>
</view>
</template>
<style lang="scss" scoped>
.app-header {
/* #ifdef APP-NVUE */

View File

@ -16,7 +16,7 @@
<view class="input-box">
<view class="input-item">
<up-input :placeholder="state.NoLocationListText" border="none" clearable inputAlign="left"
v-model="state.scanFrame.locationStr" confirmType="next" :disabled="true">
v-model="state.scanFrame.locationStr" confirmType="next" @change="locationChange">
<template #prefix>
<view class="item-title" style="margin-right: 16rpx;">{{ t('public.cwmc') }}</view>
</template>
@ -59,7 +59,7 @@
</up-input>
</view>
</view>
<!-- <view class="input-box">
<!-- <view class="input-box">
<view class="input-item">
<up-input placeholder="请输入序列号" border="none" clearable inputAlign="right"
v-model="state.scanFrame.sequenceStr" confirmType="next">
@ -81,15 +81,16 @@
</template>
<script lang="ts" setup>
import { reactive, nextTick, onMounted, ref, computed, defineEmits, watch,defineExpose } from 'vue';
import { reactive, nextTick, onMounted, ref, computed, defineEmits, watch, defineExpose } from 'vue';
import { onLoad, onShow, onReachBottom, } from '@dcloudio/uni-app'
import warehouse from '../warehouse/warehouse.vue'
import location from '../warehouse/location.vue'
import i18n from '../../locale/index'
import { useI18n } from 'vue-i18n'
import { fStockFlexDetailList } from '../../common/request/api/api';
const getI18n = useI18n()
const { t, locale } = getI18n
const eimts = defineEmits(['scanFrameDataFeedback', 'confirmation', 'fast','err'])
const eimts = defineEmits(['scanFrameDataFeedback', 'confirmation', 'fast', 'err'])
const state = reactive({
show: false,
warehouse: false,
@ -146,23 +147,23 @@
}
//
const dataErase = () => {
if(state.componentsData.warehouseStr == '') state.scanFrame.warehouseStr = ''
if(state.componentsData.locationStr == '') state.scanFrame.locationStr = ''
if(state.componentsData.quantityStr == '') state.scanFrame.quantityStr = ''
if(state.componentsData.batchNumberStr == '') state.scanFrame.batchNumberStr = ''
if(Object.keys(state.componentsData.warehouseData).length === 0){
if (state.componentsData.warehouseStr == '') state.scanFrame.warehouseStr = ''
if (state.componentsData.locationStr == '') state.scanFrame.locationStr = ''
if (state.componentsData.quantityStr == '') state.scanFrame.quantityStr = ''
if (state.componentsData.batchNumberStr == '') state.scanFrame.batchNumberStr = ''
if (Object.keys(state.componentsData.warehouseData).length === 0) {
state.scanFrame.warehouseStr = ''
state.scanFrame.locationStr = ''
state.NoLocationList = true
state.NoLocationListText = '可扫描仓位'
state.warehouseData = {}
state.locationData = {}
state.warehouseData = {}
state.locationData = {}
}
}
//&
const dataValidation = () => {
//
if(state.receiveBillScanData.FIsBatchManage === 'True'){
if (state.receiveBillScanData.FIsBatchManage === 'True') {
if (state.scanFrame.batchNumberStr !== '' && state.scanFrame.batchNumberStr !== state.receiveBillScanData.FLot_Text) {
state.show = true
uni.showModal({
@ -180,14 +181,14 @@
}
} else {
state.scanFrame.batchNumberStr = '',
state.batchNumberStrState = true
state.batchNumberStrState = true
state.batchNumberStrPdr = '批号未启用'
}
//
if(Object.keys(state.warehouseData).length !== 0 && Object.keys(state.receiveBillScanData.StockId).length !== 0){
if(state.receiveBillScanData.StockId.Number !== state.warehouseData.FNUMBER){
if (Object.keys(state.warehouseData).length !== 0 && Object.keys(state.receiveBillScanData.StockId).length !== 0) {
if (state.receiveBillScanData.StockId.Number !== state.warehouseData.FNUMBER) {
uni.showModal({
title: '提示', content: '与默认仓库不同,是否替换新的仓库', cancelText: '取消', confirmText: '替换',
success(res) {
@ -203,10 +204,10 @@
} else if (Object.keys(state.warehouseData).length == 0 && Object.keys(state.receiveBillScanData.StockId).length !== 0) {
state.scanFrame.warehouseStr = formatLangTextValue(state.receiveBillScanData.StockId.Name)
state.warehouseData = {
FIsOpenLocation:state.receiveBillScanData.StockId.IsOpenLocation,
FNAME:formatLangTextValue(state.receiveBillScanData.StockId.Name),
FNUMBER:state.receiveBillScanData.StockId.Number,
FSTOCKID:state.receiveBillScanData.StockId.Id,
FIsOpenLocation: state.receiveBillScanData.StockId.IsOpenLocation,
FNAME: formatLangTextValue(state.receiveBillScanData.StockId.Name),
FNUMBER: state.receiveBillScanData.StockId.Number,
FSTOCKID: state.receiveBillScanData.StockId.Id,
}
if (state.warehouseData.FIsOpenLocation) {
state.NoLocationList = true
@ -225,10 +226,10 @@
}
state.scanFrame.articlesStr = state.receiveBillScanData.MaterialNumber
state.scanFrame.barCodeStr = state.receiveBillScanData.queryString
//
if (!state.receiveBillScanData.scanFrameShowSate && !state.show) {
if(dataVerifyFun()){
if (dataVerifyFun()) {
eimts('fast', { ...state.scanFrame, warehouseData: state.warehouseData, locationData: state.locationData, id: state.receiveBillScanData.Id })
dataErase()
}
@ -236,13 +237,13 @@
}
//
const confirmationFun = () => {
if(dataVerifyFun()){
if (dataVerifyFun()) {
console.log({ ...state.scanFrame, warehouseData: state.warehouseData, locationData: state.locationData, id: state.receiveBillScanData.Id });
eimts('confirmation', { ...state.scanFrame, warehouseData: state.warehouseData, locationData: state.locationData || {}, id: state.receiveBillScanData.Id })
dataErase()
}
}
//
const dataVerifyFun = () => {
if (state.quantityStrState) {
@ -262,7 +263,7 @@
return false
}
}
if(state.receiveBillScanData.FIsBatchManage === 'True' && (state.scanFrame.batchNumberStr === '' || state.scanFrame.batchNumberStr === ' ')){
if (state.receiveBillScanData.FIsBatchManage === 'True' && (state.scanFrame.batchNumberStr === '' || state.scanFrame.batchNumberStr === ' ')) {
uni.$u.toast('批号已启用,不能为空')
eimts('err')
return false
@ -276,12 +277,12 @@
if (Number(e) <= state.receiveBillScanData.UnScanQty) {
state.quantityStrState = false
} else {
if(state.receiveBillScanData.quantityStateSup && state.receiveBillScanData.quantityStateSup === '0'){
if (state.receiveBillScanData.quantityStateSup && state.receiveBillScanData.quantityStateSup === '0') {
state.quantityStrState = false
} else {
state.quantityStrState = true
}
}
} else {
uni.$u.toast('数量不能为空不能为0')
@ -308,6 +309,10 @@
console.log(item);
state.scanFrame.warehouseStr = item.FNAME
state.warehouse = false
state.locationData = {}
state.shortcut.locationStr = ""
if (state.warehouseData.FIsOpenLocation) {
state.NoLocationList = true
state.NoLocationListText = '可扫描仓位'
@ -322,6 +327,34 @@
/**
* 仓位逻辑
*/
const debounceTimer = ref()
const locationChange = (e : any) => {
if (debounceTimer.value !== null) clearTimeout(debounceTimer.value)
debounceTimer.value = setTimeout(() => {
state.scanFrame.locationStr = e
if (state.scanFrame.locationStr !== '' && state.scanFrame.warehouseStr !== '') {
fnDataList()
}
}, 500)
}
const fnDataList = () => {
let param = {
Number: state.warehouseData.FNUMBER,
queryString: state.scanFrame.locationStr,
IsSortBySeq: true
};
fStockFlexDetailList(param).then(res => {
uni.hideLoading();
if (res.code == 200) {
if (res.data.list.length) {
state.locationData = res.data.list[0]
state.scanFrame.locationStr = res.data.list[0].FFlexValueName
} else {
uni.$u.toast('未找到该仓位')
}
}
});
}
const locationClosefun = () => {
state.location = false
}

View File

@ -16,7 +16,7 @@
<view class="input-box">
<view class="input-item">
<up-input :placeholder="state.NoLocationListText" border="none" clearable inputAlign="left"
v-model="state.shortcut.locationStr" confirmType="next" :disabled="true">
v-model="state.shortcut.locationStr" confirmType="next" @change="locationChange">
<template #prefix>
<view class="item-title" style="margin-right: 16rpx;">{{ t('public.cwmc') }}</view>
</template>
@ -62,7 +62,8 @@
</view>
<view class="btnListSc">
<up-button type="primary" :plain="true" :text="t('public.cz')" @click="dataResetFun"></up-button>
<up-button type="primary" :text="t('public.bc')" style="margin-left: 36rpx;" @click="dataToscanFrameFun"></up-button>
<up-button type="primary" :text="t('public.bc')" style="margin-left: 36rpx;"
@click="dataToscanFrameFun"></up-button>
</view>
<warehouse :show="state.warehouse" @warehouseClose="warehouseClosefun" @warehouseData="warehouseDataFun" />
<location :show="state.location"
@ -78,6 +79,7 @@
import location from '../warehouse/location.vue'
import i18n from '../../locale/index'
import { useI18n } from 'vue-i18n'
import { fStockFlexDetailList } from '../../common/request/api/api';
const getI18n = useI18n()
const { t, locale } = getI18n
const eimts = defineEmits(['dataToscanFrame'])
@ -102,6 +104,34 @@
onMounted(() => {
dataToscanFrameFun()
})
const debounceTimer = ref()
const locationChange = (e : any) => {
if (debounceTimer.value !== null) clearTimeout(debounceTimer.value)
debounceTimer.value = setTimeout(() => {
state.shortcut.locationStr = e
if (state.shortcut.locationStr !== '' && state.shortcut.warehouseStr !== '') {
fnDataList()
}
}, 500)
}
const fnDataList = () => {
let param = {
Number: state.warehouseData.FNUMBER,
queryString: state.shortcut.locationStr,
IsSortBySeq: true
};
fStockFlexDetailList(param).then(res => {
uni.hideLoading();
if (res.code == 200) {
if (res.data.list.length) {
state.locationData = res.data.list[0]
state.shortcut.locationStr = res.data.list[0].FFlexValueName
} else {
uni.$u.toast('未找到该仓位')
}
}
});
}
const close = () => { state.show = false }
const dataToscanFrameFun = () => {
if (state.shortcut.warehouseStr !== '' && state.NoLocationList && state.shortcut.locationStr === '') {
@ -130,16 +160,21 @@
state.specialModule = specialModule
state.show = val
}
/**
* 仓库逻辑
*/
const warehouseClosefun = () => { state.warehouse = false }
const warehouseShowFun = () => { state.warehouse = true }
const warehouseShowFun = () => {
state.warehouse = true
}
const warehouseDataFun = (item : any) => {
state.warehouseData = item
state.shortcut.warehouseStr = item.FNAME
state.warehouse = false
state.locationData = {}
state.shortcut.locationStr = ""
if (state.warehouseData.FIsOpenLocation) {
state.NoLocationList = true
state.NoLocationListText = t('public.xzcw')
@ -150,20 +185,18 @@
state.locationData = {}
}
}
/**
* 指定模块可以不需要仓库仓位
*/
const isWarehouseAndLocationState = () => {
if(state.specialModule = 'encasement'){
if (state.specialModule = 'encasement') {
return false
}
return true
}
const scanFrameShowSateSwitch = () => {
state.shortcut.scanFrameShowSate ? state.shortcut.scanFrameTextState = t('public.gdtc') : state.shortcut.scanFrameTextState = t('public.yctc')
if(isWarehouseAndLocationState()){
if (isWarehouseAndLocationState()) {
if (!state.shortcut.scanFrameShowSate) {
if (state.shortcut.warehouseStr == '' && state.NoLocationList) {
state.shortcut.scanFrameShowSate = true
@ -175,7 +208,6 @@
}
}
}
/**
* 仓位逻辑
*/
@ -199,7 +231,6 @@
state.location = false
}
const toPages = (url : string, data : any = {}) => {
uni.$u.route({
url: url,

View File

@ -1,5 +1,5 @@
<template>
<view class="float-container">
<!-- <view class="float-container">
<view v-for="(item,index) of props.type" :key="index">
<view class="sub-btn" :style="getPosition(index)" v-if="item === 'defaultPopup'"
:class="{active: isOpen}" @click.stop="handleClick('defaultPopup')">
@ -11,91 +11,86 @@
</view>
</view>
<view class="main-btn" :class="{active: isOpen}" @click.stop="toggleMenu()"></view>
</view>
</view> -->
<uni-fab :show="state.show" ref="fab" :pattern="state.pattern" :content="state.content"
:horizontal="state.horizontal" :vertical="state.vertical" :direction="state.direction" @trigger="trigger"
@fabClick="fabClick" />
</template>
<script lang="ts" setup>
import { reactive, ref, defineEmits,defineProps } from 'vue';
import { reactive, ref, defineEmits, defineProps, computed, watch } from 'vue';
import i18n from '../../locale/index'
import { useI18n } from 'vue-i18n'
const getI18n = useI18n()
const { t, locale } = getI18n
const emit = defineEmits(['scanRecord', 'defaultPopup']);
const props = defineProps({
type:{
type:Array,
type: {
type: Array,
default: () => {
return ['scanRecord','defaultPopup']
return ['scanRecord', 'defaultPopup']
}
}
})
const isOpen = ref(false);
const showPopup = ref(false);
const toggleMenu = () => { isOpen.value = !isOpen.value; }
const getPosition = (index:any) => {
if (!isOpen.value) return {}
return {
transform: `translate(${5}rpx, ${-((160*index)+160)}rpx)`
}
const state = reactive({
show: false,
horizontal: 'right',
vertical: 'bottom',
direction: 'horizontal',
pattern: {
color: '#7A7E83',
backgroundColor: '#fff',
selectedColor: '#007AFF',
buttonColor: '#007AFF',
iconColor: '#fff'
},
content: [
{
iconPath: '../../static/icons/mr.png',
selectedIconPath: '../../static/icons/mr-ac.png',
text: computed(() => t('public.mrz')),
emitText: 'defaultPopup',
active: false
},
{
iconPath: '../../static/icons/jl.png',
selectedIconPath: '../../static/icons/jl-ac.png',
text: computed(() => t('public.smjl')),
emitText: 'scanRecord',
active: false
},
]
})
watch(() => props.type, () => {
state.content.forEach((item:any,index:any) => {
if(props.type.indexOf(item.emitText) === -1){
state.content.splice(index,1)
}
})
}, { immediate: true, deep: true })
const trigger = (e : any) => {
state.show = false
console.log(e)
console.log(e.item.emitText);
emit(e.item.emitText)
}
const handleClick = (action:any) => {
emit(action);
isOpen.value = !isOpen.value;
const fabClick = (e : any) => {
console.log(e)
}
const open = () => { showPopup.value = true; }
const close = () => { showPopup.value = false; }
</script>
<style scoped lang="scss">
.float-container {
position: fixed;
right: 30rpx;
bottom: 30rpx;
z-index: 9;
.main-btn {
position: relative;
width: 130rpx;
height: 130rpx;
border-radius: 50%;
background: #3370FF;
color: white;
font-size: 50rpx;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 5rpx 20rpx rgba(0, 0, 0, 0.2);
transition: transform 0.3s;
z-index: 10000;
}
.main-btn.active {
transform: rotate(135deg);
// transform: translate(-50%, -50%);
}
.sub-btn {
position: absolute;
width: 130rpx;
height: 130rpx;
border-radius: 50%;
background: white;
display: flex;
align-items: center;
justify-content: center;
font-size: 40rpx;
opacity: 0;
transform: translate(0, 0);
transition: all 0.3s cubic-bezier(0.18, 0.89, 0.32, 1.28);
box-shadow: 0 5rpx 10rpx rgba(0, 0, 0, 0.1);
font-size: 25rpx;
}
.sub-btn.active {
opacity: 1;
}
:deep(.uni-fab) {
box-shadow: 0 1px 5px 2px #efeaea !important;
}
:deep(.uni-fab__content--other-platform) {
box-shadow: 0 1px 5px 2px #e3e3e3 !important;
}
:deep(.uni-fab__item) {
margin: 0 8rpx;
}
</style>

View File

@ -1,6 +1,16 @@
<template>
<up-popup :show="props.show" @close="close">
<view class="popupText">仓位</view>
<view class="input-box">
<view class="input-item">
<up-input placeholder="仓位查询" border="none" clearable inputAlign="left" v-model="state.queryString"
@change="changeFun">
<template #prefix>
<up-icon name="search" color="#2979ff" size="24"></up-icon>
</template>
</up-input>
</view>
</view>
<view class="warehouse-listBox" ref="listBoxRef">
<scroll-view id="scroll-box" class="scroll-box" scroll-y="true" :style="{'height':state.scrollHeight+'px'}"
@scrolltolower="fnScrollBottom()">
@ -73,6 +83,7 @@
const fnDataList = () => {
let param = {
Number:props.warehouseId,
queryString:state.queryString,
IsSortBySeq:true
};
fStockFlexDetailList(param).then(res => {

View File

@ -18,4 +18,4 @@
<script type="module" src="/main.js"></script>
</body>
</html>
</html>

View File

@ -1,5 +1,5 @@
{
"name" : "美塞斯条码机",
"name" : "Maxcess Barcode",
"appid" : "__UNI__901D257",
"description" : "",
"versionName" : "1.0.4",
@ -11,7 +11,7 @@
"service" : "jiaoyu",
"version" : "1.0.0"
},
"runmode": "normal",
"runmode" : "normal",
"usingComponents" : true,
"nvueStyleCompiler" : "uni-app",
"compilerVersion" : 3,

View File

@ -27,12 +27,24 @@
{
"path": "pages/verify/material"
},
{
"path": "pages/verifyTa/index"
},
{
"path": "pages/verifyTa/material"
},
{
"path": "pages/purchase/index"
},
{
"path": "pages/purchase/material"
},
{
"path": "pages/purchaseTa/index"
},
{
"path": "pages/purchaseTa/material"
},
{
"path": "pages/material/index"
},
@ -45,6 +57,21 @@
{
"path": "pages/supplement/material"
},
{
"path": "pages/ruleClaim/index"
},
{
"path": "pages/ruleClaim/details"
},
{
"path": "pages/ruleValidation/index"
},
{
"path": "pages/ruleValidation/checklist"
},
{
"path": "pages/ruleValidation/verification"
},
{
"path": "pages/putInProd/index"
},

View File

@ -1,16 +1,14 @@
<template>
<view class="app loginBox">
<view class="header-tabs">
<view class="header-tabs-title" :class="{active:state.tabCurrent === 0}"> Maxcess inspection App </view>
<view class="header-tabs-title" :class="{active:state.tabCurrent === 0}"> Maxcess Barcode Syssten </view>
</view>
<view class="form-body">
<view class="form-item form-item1">
<up-input @tap="languageShowFun" :placeholder="t('login.Language')" border="bottom"
v-model="state.languageText" disabled disabledColor="rgba(0, 0, 0, 0)">
<template #prefix>
<up-icon name="map" color="#ffffff" size="23" style="margin-right: 4rpx;"></up-icon>
</template>
</up-input>
<view class="form-item form-item1" @tap="languageShowFun">
<view style="border-bottom: 1rpx solid #CAD9E6;width: 100%;display: flex;box-sizing: border-box;padding: 16rpx;align-items: center;">
<up-icon name="../../../static/icons/mine/guoji.png" color="#ffffff" size="22" style="margin-right: 4rpx;"></up-icon>
<view style="margin-left: 8rpx;"> {{ state.languageText }} </view>
</view>
</view>
<view class="form-item form-item2 u-m-t-32">
<up-input :placeholder="t('login.usedName')" border="bottom" v-model="state.ruleForm.userName">

View File

@ -1,7 +1,9 @@
<template>
<view class="app status-bar-gap">
<view class="page">
<l-header title="生产装箱" sticky></l-header>
<l-header title="生产装箱" sticky #right>
<view style="margin-right: 32rpx;" @click="fnToUrl()">添加</view>
</l-header>
<view class="input-box">
<view class="input-item">
<up-input :placeholder="t('receive.djbh')" border="none" clearable inputAlign="left"
@ -16,9 +18,8 @@
<scroll-view id="scroll-box" class="scroll-box" scroll-y="true"
:style="{'height':state.scrollHeight+'px'}" @scrolltolower="fnScrollBottom()">
<view class="list-box-list" v-if="state.dataList.length > 0">
<view class="data-item" @click.stop="fnToUrl(item)"
v-for="(item, index) in state.dataList" :key="index">
<view class="tit">{{ t('receive.djbh') }}{{item.FBillNo}}</view>
<view class="data-item" v-for="(item, index) in state.dataList" :key="index">
<view class="tit">装箱单单号{{item.FBillNo}}</view>
<view class="line-p"></view>
<view class="b-font">{{ t('receive.rq') }}{{item.FDateFormat}}</view>
</view>
@ -37,7 +38,7 @@
import { onLoad, onShow, onReachBottom } from '@dcloudio/uni-app'
import { useI18n } from 'vue-i18n'
import { parseTime } from '../../utils/tools.js';
import { PRD_MORPTList, SAL_DELIVERYNOTICEList, receiveBillList } from '../../common/request/api/api';
import { BarcodePackBillList, PRD_MORPTList, SAL_DELIVERYNOTICEList, receiveBillList } from '../../common/request/api/api';
const listBoxRef = ref(null)
const getI18n = useI18n()
const { t, locale } = getI18n
@ -72,8 +73,8 @@
}, 500);
}
}
const fnToUrl = (item : any) => {
toPages('/pages/encasement/material',{id:item.FID,fBillNo:item.FBillNo})
const fnToUrl = () => {
toPages('/pages/encasement/material')
}
const debounceTimer = ref()
const changeFun = (e : any) => {

View File

@ -4,53 +4,56 @@
<l-header title="生成装箱" 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"></up-tabs>
</view>
<view class="input-box">
<view class="input-item">
<up-input placeholder="生产订单编号" border="none" clearable inputAlign="left" v-model="state.queryString"
@change="changeFun" ref="inputRef">
<template #prefix>
<up-icon name="scan" color="#2979ff" size="24"></up-icon>
</template>
</up-input>
</view>
</view>
<view class="material-listBox">
<scroll-view id="scroll-box" class="scroll-box" scroll-y="true"
:style="{'height':state.scrollHeight+'px'}">
<view class="list-box-list" v-if="state.dataList.length > 0">
<view class="data-item" v-for="(item, index) in state.dataList"
:style="[{'background-color':'#ffffff'},{'margin-bottom':index + 1 === state.dataList.length ? '80px' : '20px'}]"
:key="index">
<view class="text" style="margin-bottom: 20px;display: flex;">
<view>{{ item.MaterialName }}</view>
</view>
<view class="itemBox">
<view>{{t('receive.djbh')}}</view>
<view class="zongjian"></view>
<view>{{ state.FBillNo }}</view>
</view>
<view class="itemBox">
<view>{{t('receive.wlbm')}}</view>
<view class="zongjian"></view>
<view>{{ item.MaterialNo }}</view>
</view>
<view class="itemBox">
<view>{{t('receive.ph')}}</view>
<view class="zongjian"></view>
<view>{{ item.Lot }}</view>
</view>
<view class="itemBox">
<view>仓库</view>
<view class="zongjian"></view>
<view>{{ item.MultiLanguageText }}</view>
</view>
<view class="itemBox">
<view>{{t('receive.ys')}}</view>
<view class="zongjian"></view>
<view>{{ item.CheckJoinQty }}</view>
</view>
<view class="itemBox">
<view>{{t('receive.ws')}}</view>
<view class="zongjian"></view>
<view>{{ item.NoCheckQty }}</view>
</view>
<view class="itemBox">
<view>{{t('receive.yss')}}</view>
<view class="zongjian"></view>
<view>{{ item.CheckQty }}</view>
</view>
</view>
<view style="text-align: center;color: #F5F5F5;height: 20px;"></view>
<scroll-view id="scroll-box" class="scroll-box" scroll-y="true" :style="{'height':state.scrollHeight+'px'}">
<view class="list-box-list">
<uni-swipe-action>
<uni-swipe-action-item :right-options="state.options" v-for="(item, index) in state.dataList">
<template #right>
<view class="itemRight" @click="fStockFlexDetailDeleteFun(item)">
<up-icon name="trash" color="#ffffff" size="28"></up-icon>
</view>
</template>
<view class="data-item" :style="[{'background-color':'#ffffff'}]" :key="index">
<view class="text" style="margin-bottom: 20px;display: flex;">
<view>{{ item['FVHUBMaterial.FName'] }}</view>
</view>
<view class="itemBox">
<view>物料编码</view>
<view class="zongjian"></view>
<view>{{ item.FVHUBMaterialNumber }}</view>
</view>
<view class="itemBox">
<view>数量</view>
<view class="zongjian"></view>
<view>{{ item.FVHUBScanQty }}</view>
</view>
<view class="itemBox">
<view>仓库</view>
<view class="zongjian"></view>
<view>{{ item['FVHUBStock.FName'] }}</view>
</view>
<view class="itemBox">
<view>批号</view>
<view class="zongjian"></view>
<view>{{ item.FVHUBFlot }}</view>
</view>
</view>
</uni-swipe-action-item>
</uni-swipe-action>
</view>
<view v-if="state.dataList.length==0">
<up-empty mode="list"></up-empty>
@ -58,13 +61,6 @@
</scroll-view>
</view>
</view>
<listPopup ref="listPopupRef" @toViewPopupData="toViewPopupDataFun"/>
<viewPopup ref="viewPopupRef" @listPopupData="getReceiveBillScanData"/>
<scanFrame ref="scanFrameRef" @confirmation="scanFrameCnfirmation"
@scanFrameDataFeedback="(res:object)=>{state.scanFrameDataFeedback = res}"
@fast="(row:any)=>{state.scanFrameDataFeedback = row}" @err="scanFrameErrFun" />
<shortcut ref="shortcutRef" @dataToscanFrame="dataToscanFrameFun" />
<tools ref="toolsRef" type="encasement" @defaultPopup="defaultPopupFun" @scanRecord="scanRecordFun" @alternativeDocument="alternativeDocumentFun"/>
</view>
</template>
@ -72,33 +68,33 @@
import { reactive, nextTick, onMounted, ref, computed, watch } from 'vue';
import { onLoad, onShow, onReachBottom, } from '@dcloudio/uni-app'
import { useI18n } from 'vue-i18n'
import { SAL_DELIVERYNOTICEPush, temporaryScanList, fStockFlexDetailDelete, PRD_MORPTScanData, temporaryScanDraftSave } from '../../common/request/api/api';
import { parseTime } from '../../utils/tools.js';
import { BarcodePackBillList, BarcodePackBillSave, BarcodePackBillScanData, PURReceiveBillScanCheck, PURReceiveBillScanData, PURReceiveBillView, 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'
import listPopup from './listPopup.vue'
import viewPopup from './viewPopup.vue'
import { encasement } from '../../stores/encasement'
const DBEncasement = encasement()
const inputRef = ref()
const scanFrameRef = ref()
const shortcutRef = ref()
const listPopupRef = ref()
const viewPopupRef = ref()
const getI18n = useI18n()
const { t, locale } = getI18n
const state = reactive({
queryString: '',
dataList: [],
scrollHeight: 0,
FBillNo: '',
materialId: '',
supplierName: '',
inputFocus: true,
listPopupShow: true,
scanFrameDataFeedback: {},
shortcutDataFeedback: {},
scanFrameDataFeedback: {}, //
shortcutDataFeedback: {}, //
tabsList: [
{ name: computed(() => '包装'), type: '1' },
{ name: computed(() => '单独物料'), type: '2' },
],
options: []
})
onLoad(() => { })
onShow(() => {
// DBEncasement.injectEncasementMaterialList('132132')
onShow(() => {
fnDataList()
})
onMounted(() => {
const query = uni.createSelectorQuery().in(this);
@ -106,173 +102,148 @@
state.scrollHeight = data.height
}).exec();
})
/**
* 数据逻辑
*/
const interpolation = (item : any) => {
if (item.CheckJoinQty === 0 && item.CheckJoinQty + item.NoCheckQty === item.CheckQty) {
return '#ffffff'
}
if (item.CheckJoinQty !== 0 && item.NoCheckQty !== 0 && item.CheckJoinQty + item.NoCheckQty === item.CheckQty) {
return 'rgb(254 227 87)'
}
if (item.CheckJoinQty === item.CheckQty) {
return 'rgb(87 191 254)'
}
}
//
const debounceTimer = ref()
const changeFun = (e : any) => {
if (debounceTimer.value !== null) clearTimeout(debounceTimer.value)
debounceTimer.value = setTimeout(() => {
state.queryString = e
if (state.queryString !== '') getReceiveBillScanData(e)
}, 500)
}
//
const getReceiveBillScanData = (val : string) => {
PRD_MORPTScanData({
BarcodePackBillScanData({
FBarCode: val,
FBillNo: state.FBillNo,
IsPack: 'true'
}).then((res : any) => {
if (res.data !== null) {
console.log(res,val);
if (res.code === 200) {
debugger
scanFrameRef.value.getreceiveBillScanData({ ...res.data, queryString: val, scanFrameShowSate: state.shortcutDataFeedback.scanFrameShowSate, stashVerify: true })
if (Object.keys(state.shortcutDataFeedback).length) {
if (state.shortcutDataFeedback.scanFrameShowSate) {
scanFrameRef.value.stateShow(true)
} else {
postTemporaryScanDraftSaveFun(state.scanFrameDataFeedback)
}
} else {
scanFrameRef.value.stateShow(true)
}
} else {
uni.$u.toast('并没有该条数据')
state.queryString = ''
postTemporaryScanDraftSaveFun(res.data.Entry[0])
}
})
}
//
const postTemporaryScanDraftSaveFun = (item : any) => {
const obj = {};
if (item.warehouseData.FIsOpenLocation) {
const key = `FVHUBSTOCKFLEX__FF${item.warehouseData.FFlexId}`; //Id
obj[key] = { FNumber: item.locationData.FlexEntryId.Number }; //
}
const str = JSON.stringify(obj);
console.log(item);
temporaryScanDraftSave({
FVHUBFormId: "SAL_DELIVERYNOTICE", //
FVHUBFBillNo: state.FBillNo, //
FVHUBScanNumber: state.queryString, //
FVHUBMaterialNumber: item.articlesStr, //
FVHUBScanQty: item.quantityStr + '', //
FVHUBEntryId: scanFrameRef.value.state.receiveBillScanData.Id, //ID
FVHUBFlot: item.batchNumberStr, //
FType: "pack",
FVHUBFormId: "VHUB_BarcodePackBill", //
FVHUBScanNumber: state.queryString, //
FVHUBMaterialNumber: item.MaterialNumber, //
FVHUBScanQty: item.BarCodeQty + '', //
FVHUBEntryId: item.Id, //ID
FVHUBFlot: item.FLot_Text, //
FVHUBStock: {
FNUMBER: item.warehouseData.FNUMBER //
FNUMBER: item.StockId.Number //
},
FVHUBMaterial: {
FNUMBER: item.articlesStr
FNUMBER: item.MaterialNumber, //
},
...JSON.parse(str),
}).then((res : any) => {
console.log(res);
state.queryString = ''
if (res.data.IsSuccess) {
uni.$u.toast('成功')
scanFrameRef.value.stateShow(false)
fnDataList();
uni.$u.toast(t('public.cg'))
}
})
}
/**
* 弹窗逻辑
*/
const scanFrameCnfirmation = (row : any) => {
//
state.scanFrameDataFeedback = row
//
const fStockFlexDetailDeleteFun = (item : any) => {
uni.showModal({
title: '提示', content: '确定要删除该条数据吗?', cancelText: '取消', confirmText: '确定',
success(res) {
if (res.confirm) {
fStockFlexDetailDelete({ Ids: item.FID + '' }).then((res : any) => {
if (res.code === 200) {
uni.$u.toast('已删除')
fnDataList()
}
})
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
}
const dataToscanFrameFun = (res : object) => {
//
state.shortcutDataFeedback = res
scanFrameRef.value.getComponentsData(res)
shortcutRef.value.stateShow(false,'encasement')
}
const defaultPopupFun = () => {
//
shortcutRef.value.stateShow(true,'encasement')
}
const scanFrameErrFun = () => {
//
scanFrameRef.value.stateShow(true)
}
const scanRecordFun = () => {
toPages('/pages/records/index', {
FormId: 'SAL_DELIVERYNOTICE',
FbillNo: state.FBillNo
})
}
const alternativeDocumentFun = () => {
//
listPopupRef.value.openFun()
}
const toViewPopupDataFun = (row:any) => {
//
state.FBillNo = row.FBillNo
listPopupRef.value.close()
viewPopupRef.value.openFun(row)
}
/**
* 数据推送
*/
const dataPushNotification = () => {
uni.showModal({
title: '提示', content: '确定要推送此次数据吗', cancelText: '取消', confirmText: '确定',
title: t('public.ts'), content: t('public.tjMessage'), cancelText: t('public.cancel'), confirmText: t('public.confirm'),
success(res) {
if (res.confirm) {
let EntryIds : any = []
let ids : any = []
let ScanEntry : any = []
let items : any = []
let param = {
FormId: 'SAL_DELIVERYNOTICE',
FormId: 'VHUB_BarcodePackBill',
UserId: uni.getStorageSync('userInfo').Context.UserId,
FbillNo: state.FBillNo,
FType: "pack",
};
uni.showLoading({ mask: true });
//
temporaryScanList(param).then(res => {
temporaryScanList(param).then((res:any) => {
if (res.code == 200) {
if (res.data.list.length != 0) {
res.data.list.forEach((item : any) => {
EntryIds.push(item.FVHUBEntryId)
ids.push(item.FID)
ScanEntry.push({
FENTRYID: item.FVHUBEntryId,
Qty: item.FVHUBScanQty,
Flot: item.FVHUBFlot,
StockId: item.FVHUBStock,
StockFlex: item.FVHUBStockFlex
items.push({
Ids:item.FVHUBEntryId,
FBarCode:item.FVHUBScanNumber,
FQty:item.FVHUBScanQty
})
ids.push(item.FID)
})
//
SAL_DELIVERYNOTICEPush({
EntryIds: EntryIds.toString(),
TargetFormId: 'VHUB_BarcodePackBill',
IsEnableDefaultRule: 'true',
CustomParams: {
AutoAudit: 'true',
ScanEntry: ScanEntry
}
}).then((res : any) => {
if (res.code === 200) {
fStockFlexDetailDelete({ Ids: ids.toString() }).then((res : any) => {
if (res.code === 200) {
uni.$u.toast('操作成功')
BarcodePackBillSave({
Items:items
}).then((BPRes : any) => {
if (BPRes.code === 200) {
fStockFlexDetailDelete({ Ids: ids.toString() }).then((FDRes : any) => {
if (FDRes.code === 200) {
fnDataList();
uni.$u.toast(t('public.cg'))
}
})
}
})
} else {
uni.$u.toast('暂无扫描数据')
uni.$u.toast(t('public.noDataMessage'))
}
}
});
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
}
/**
* 数据请求
*/
const fnDataList = () => {
uni.showLoading({ mask: true });
temporaryScanList({
FormId: 'VHUB_BarcodePackBill',
UserId: uni.getStorageSync('userInfo').Context.UserId,
}).then((res : any) => {
if (res.code == 200) {
state.dataList = res.data.list
}
});
}
//
const formatLangTextValue = (val : any) => {
let lang_Id = uni.getStorageSync('locale')
@ -291,6 +262,10 @@
</script>
<style lang="scss">
:deep(.button-group--right) {
height: calc(100% - 16rpx) !important;
}
.app {
background-color: #F5F5F5;
@ -341,6 +316,14 @@
.list-box-list {
width: 100%;
.itemRight {
display: flex;
align-items: center;
padding: 34rpx;
background-color: #ff5a5d;
border-radius: 20rpx;
}
.data-item {
border: 1px solid #efeaea;
border-radius: 20rpx;

View File

@ -5,36 +5,48 @@
<view></view>
</l-header>
<view class="type-bc">
<!-- <view class="type-item type-item-gc" @tap="toPages('/pages/receive/index')">
<view class="type-item-text">采购收料</view>
</view> -->
<view class="type-item type-item-hy" @tap="toPages('/pages/verify/index')">
<view class="type-item-text">{{ t('home.llyz') }}</view>
</view>
<view class="type-item type-item-jz" @tap="toPages('/pages/purchase/index')">
<view class="type-item-text">{{ t('home.cgrk') }}</view>
</view>
<view class="type-item type-item-hl" @tap="toPages('/pages/material/index')">
<view class="type-item-text">{{ t('home.scfl') }}</view>
</view>
<view class="type-item type-item-hl" @tap="toPages('/pages/supplement/index')">
<view class="type-item-text">{{ t('home.scbl') }}</view>
</view>
<view class="type-item type-item-hl" @tap="putInProdClisk()">
<view class="type-item-text">{{ t('home.sctc') }}</view>
</view>
<view class="type-item type-item-hl" @tap="toPages('/pages/encasement/material')">
<view class="type-item-text">{{ t('home.sczx') }}</view>
</view>
<!-- <view class="type-item type-item-hl" @tap="toPages('/pages/inLove/loveList')">
<view class="type-item-text">生产汇报</view>
</view> -->
<view class="type-item type-item-hl" @tap="toPages('/pages/productionStorage/index')">
<view class="type-item-text">{{ t('home.scrk') }}</view>
</view>
<view class="type-item type-item-hl" @tap="toPages('/pages/outOftock/index')">
<view class="type-item-text">{{ t('home.xxck') }}</view>
</view>
<!-- 珠海模块 -->
<template v-if="state.patternId === '101'">
<view class="type-item type-item-hy" @tap="toPages('/pages/verify/index')">
<view class="type-item-text">{{ t('home.llyz') }}</view>
</view>
<view class="type-item type-item-jz" @tap="toPages('/pages/purchase/index')">
<view class="type-item-text">{{ t('home.cgrk') }}</view>
</view>
</template>
<!-- 泰国模块 -->
<template v-if="state.patternId === '103'">
<view class="type-item type-item-hy" @tap="toPages('/pages/verifyTa/index')">
<view class="type-item-text">{{ t('home.llyz') }}</view>
</view>
<view class="type-item type-item-jz" @tap="toPages('/pages/purchaseTa/index')">
<view class="type-item-text">{{ t('home.cgrk') }}</view>
</view>
<view class="type-item type-item-hl" @tap="toPages('/pages/material/index')">
<view class="type-item-text">{{ t('home.scfl') }}</view>
</view>
<view class="type-item type-item-hl" @tap="toPages('/pages/supplement/index')">
<view class="type-item-text">{{ t('home.scbl') }}</view>
</view>
<view class="type-item type-item-hl" @tap="toPages('/pages/ruleClaim/index')">
<view class="type-item-text">成套领料</view>
</view>
<view class="type-item type-item-hl" @tap="toPages('/pages/ruleValidation/index')">
<view class="type-item-text">成套验证</view>
</view>
<view class="type-item type-item-hl" @tap="toPages('/pages/putInProd/index')">
<view class="type-item-text">{{ t('home.sctc') }}</view>
</view>
<view class="type-item type-item-hl" @tap="toPages('/pages/encasement/index')">
<view class="type-item-text">{{ t('home.sczx') }}</view>
</view>
<view class="type-item type-item-hl" @tap="toPages('/pages/productionStorage/index')">
<view class="type-item-text">{{ t('home.scrk') }}</view>
</view>
<view class="type-item type-item-hl" @tap="toPages('/pages/outOftock/index')">
<view class="type-item-text">{{ t('home.xxck') }}</view>
</view>
</template>
</view>
</view>
<u-overlay :show="state.typeBoxShow" @click="state.typeBoxShow = false">
@ -55,13 +67,16 @@
const { t, locale } = getI18n
const state = reactive({
carouselList: [],
typeBoxShow:false
typeBoxShow:false,
appConfig:{},
patternId:''
})
onShow(() => {})
const putInProdClisk = () => {
state.typeBoxShow = true
}
onShow(() => {
state.appConfig = uni.getStorageSync('appLoginInfo')
state.patternId = state.appConfig.organizationObj['FOrgOrgId.FNumber']
console.log(state.patternId);
})
const toPages = (url : string, data : any = {}) => {
uni.$u.route({
url: url,

View File

@ -8,12 +8,11 @@
radius="136rpx"></up-image>
</view>
<view>
<view class="nameTitle">#ERP1</view>
<view class="gysName">美塞斯测试账套</view>
<view class="nameTitle"># {{ state.userInfo.UserName }}</view>
<view class="gysName">{{ state.userInfo.CustomName }}</view>
</view>
</view>
<view class="common">
<!-- <view class="title">常用功能</view> -->
<view class="type-bc">
<view class="type-item type-item-gc" @tap="toPages('/pages/receive/index')">
<view class="type-item-text">采购收料</view>
@ -35,14 +34,14 @@
<view class="item-title">扫描记录</view>
<up-icon name="play-right-fill" size="8"></up-icon>
</view>
<!-- <view class="input-item u-flex" style="justify-content: space-between;align-items: center">
<view class="item-title">离线记录</view>
<up-icon name="play-right-fill" size="8"></up-icon>
</view> -->
<view class="input-item u-flex" style="justify-content: space-between;align-items: center">
<view class="item-title">检查更新</view>
<view>0.0.1</view>
</view>
<!-- <view class="input-item u-flex" style="justify-content: space-between;align-items: center">
<view class="item-title">语言切换</view>
<up-icon name="play-right-fill" size="8"></up-icon>
</view>
</view> -->
<!-- <view class="input-item u-flex" style="justify-content: space-between;align-items: center">
<view class="item-title">语音播报</view>
<up-icon name="play-right-fill" size="8"></up-icon>
@ -57,6 +56,14 @@
import { reactive, ref } from 'vue';
import { onLoad, onShow } from '@dcloudio/uni-app'
import { logout } from "../../common/request/api/api";
const state = reactive({
userInfo:{}
})
onShow(() => {
console.log(uni.getStorageSync('userInfo').Context);
state.userInfo = uni.getStorageSync('userInfo').Context
console.log(state.userInfo);
})
const toPages = (url : string, data : any = {}) => {
uni.$u.route({
url: url,
@ -64,7 +71,6 @@
})
}
const outLoginFun = () => {
// uni.clearStorageSync()
logout({}).then((res:any) => {
uni.removeStorageSync('userInfo')
uni.removeStorageSync('TOKEN')
@ -106,7 +112,7 @@
}
.gysName {
font-size: 32rpx;
font-size: 28rpx;
margin-top: 8rpx;
// font-weight: 600;
}

View File

@ -18,7 +18,7 @@
<view class="list-box-list" v-if="state.dataList.length > 0">
<view class="data-item" @click.stop="fnToUrl(item)"
v-for="(item, index) in state.dataList" :key="index">
<view class="tit">{{ t('receive.djbh') }}{{item.FBillNo}}</view>
<view class="tit">生产用料清单单号{{item.FBillNo}}</view>
<view class="line-p"></view>
<view class="b-font">{{ t('receive.rq') }}{{item.FDateFormat}}</view>
</view>

View File

@ -7,7 +7,7 @@
<view class="input-box">
<view class="input-item">
<up-input :placeholder="t('receive.code')" border="none" clearable inputAlign="left"
:focus="state.inputFocus" v-model="state.queryString" @change="changeFun" ref="inputRef">
inputmode="none" v-model="state.queryString" @change="changeFun" ref="inputRef">
<template #prefix>
<up-icon name="scan" color="#2979ff" size="24"></up-icon>
</template>
@ -39,11 +39,6 @@
<view class="zongjian"></view>
<view>{{ item.Lot }}</view>
</view>
<view class="itemBox">
<view>仓库</view>
<view class="zongjian"></view>
<view>{{ item.MultiLanguageText }}</view>
</view>
<view class="itemBox">
<view>{{t('receive.ys')}}</view>
<view class="zongjian"></view>
@ -62,7 +57,7 @@
</view>
<view style="text-align: center;color: #F5F5F5;height: 20px;"></view>
</view>
<view v-if="state.dataList.length==0">
<view v-if="state.dataList.length==0">
<up-empty mode="list"></up-empty>
</view>
</scroll-view>
@ -71,7 +66,7 @@
</view>
<scanFrame ref="scanFrameRef" @confirmation="scanFrameCnfirmation"
@scanFrameDataFeedback="(res:object)=>{state.scanFrameDataFeedback = res}"
@fast="(row:any)=>{state.scanFrameDataFeedback = row}" @err="scanFrameErrFun"/>
@fast="(row:any)=>{state.scanFrameDataFeedback = row}" @err="scanFrameErrFun" />
<shortcut ref="shortcutRef" @dataToscanFrame="dataToscanFrameFun" />
<tools ref="toolsRef" @defaultPopup="defaultPopupFun" @scanRecord="scanRecordFun" />
</template>
@ -115,7 +110,7 @@
fnDataList(state.materialId);
})
onShow(() => {
if(state.materialId){
if (state.materialId) {
fnDataList(state.materialId);
}
})
@ -155,7 +150,7 @@
PRDPPBOMScanData({
FBarCode: val,
FBillNo: state.FBillNo,
IsFeed:'true'
IsFeed: 'true'
}).then((res : any) => {
if (res.data !== null) {
console.log(res);
@ -186,8 +181,8 @@
//
const postTemporaryScanDraftSaveFun = (item : any) => {
const obj = {};
if (item.warehouseData.FIsOpenLocation) {
const key = `FVHUBSTOCKFLEX__FF${item.warehouseData.FFlexId}`; //Id
if (item.warehouseData.FIsOpenLocation && Object.keys(item.locationData).length != 0) {
const key = `FVHUBSTOCKFLEX__FF${item.locationData.FID}`; //Id
obj[key] = { FNumber: item.locationData.FlexEntryId.Number }; //
}
const str = JSON.stringify(obj);
@ -276,15 +271,15 @@
ScanEntry: ScanEntry
}
}).then((res : any) => {
if(res.code === 200){
fStockFlexDetailDelete({Ids:ids.toString()}).then((res:any) => {
if(res.code === 200) {
if (res.code === 200) {
fStockFlexDetailDelete({ Ids: ids.toString() }).then((res : any) => {
if (res.code === 200) {
fnDataList(state.materialId);
uni.$u.toast('操作成功')
}
})
}
})
} else {
uni.$u.toast('暂无扫描数据')

View File

@ -2,6 +2,9 @@
<view class="app status-bar-gap">
<view class="page">
<l-header title="销售出库" sticky></l-header>
<view class="input-box">
<up-tabs :scrollable="false" :list="state.tabsList"></up-tabs>
</view>
<view class="input-box">
<view class="input-item">
<up-input :placeholder="t('receive.djbh')" border="none" clearable inputAlign="left"
@ -16,14 +19,13 @@
<scroll-view id="scroll-box" class="scroll-box" scroll-y="true"
:style="{'height':state.scrollHeight+'px'}" @scrolltolower="fnScrollBottom()">
<view class="list-box-list" v-if="state.dataList.length > 0">
<view class="data-item" @click.stop="fnToUrl(item)"
v-for="(item, index) in state.dataList" :key="index">
<view class="data-item" @click.stop="fnToUrl(item)" v-for="(item, index) in state.dataList" :key="index">
<view class="tit">{{ t('receive.djbh') }}{{item.FBillNo}}</view>
<view class="line-p"></view>
<view class="b-font">{{ t('receive.rq') }}{{item.FDateFormat}}</view>
</view>
</view>
<view v-if="state.dataList.length==0">
<view v-if="state.dataList.length==0">
<up-empty mode="list"></up-empty>
</view>
</scroll-view>
@ -33,7 +35,7 @@
</template>
<script lang="ts" setup>
import { reactive, nextTick, onMounted, ref } from 'vue';
import { reactive, nextTick, onMounted, ref,computed } from 'vue';
import { onLoad, onShow, onReachBottom } from '@dcloudio/uni-app'
import { useI18n } from 'vue-i18n'
import { parseTime } from '../../utils/tools.js';
@ -49,7 +51,11 @@
pageIndex: 1,
pageSize: 200,
totalCount: 0
}
},
tabsList: [
{ name: computed(() => '包装'), type: '1' },
{ name: computed(() => '单独物料'), type: '2' },
]
})
onShow(() => {
@ -63,10 +69,10 @@
fnDataList()
})
const fnScrollBottom = () => {
console.log(state.page.pageIndex * state.page.pageSize,state.page.totalCount);
console.log(state.page.pageIndex * state.page.pageSize, state.page.totalCount);
if (state.page.pageIndex * state.page.pageSize <= state.page.totalCount) {
debugger
state.page.pageIndex ++;
state.page.pageIndex++;
uni.showLoading({ mask: true });
setTimeout(() => {
fnDataList();
@ -74,7 +80,7 @@
}
}
const fnToUrl = (item : any) => {
toPages('/pages/outOftock/material',{id:item.FID,fBillNo:item.FBillNo})
toPages('/pages/outOftock/material', { id: item.FID, fBillNo: item.FBillNo })
}
const debounceTimer = ref()
const changeFun = (e : any) => {
@ -174,25 +180,29 @@
.receive-listBox {
flex: 1;
.list-box-list{
.list-box-list {
width: 100%;
// margin: 20rpx auto;
.data-item{
.data-item {
border: 1px solid #efeaea;
border-radius: 20rpx;
box-shadow: 0rpx 15rpx 15rpx #efeaea;
box-shadow: 0rpx 15rpx 15rpx #efeaea;
padding: 20rpx 20rpx 0;
margin-bottom: 20rpx;
background-color: #ffffff;
.tit{
.tit {
font-size: 30rpx;
font-weight: bold;
padding: 20rpx 0;
}
.line-p{
.line-p {
border: 1px solid #efeaea;
}
.b-font{
.b-font {
font-size: 25rpx;
padding: 20rpx 0;
}
@ -201,5 +211,4 @@
}
}
}
</style>

View File

@ -6,7 +6,7 @@
</l-header>
<view class="input-box">
<view class="input-item">
<up-input :placeholder="t('receive.code')" border="none" clearable inputAlign="left"
<up-input :placeholder="t('receive.code')" border="none" clearable inputAlign="left" inputmode="none"
:focus="state.inputFocus" v-model="state.queryString" @change="changeFun" ref="inputRef">
<template #prefix>
<up-icon name="scan" color="#2979ff" size="24"></up-icon>

View File

@ -2,6 +2,9 @@
<view class="app status-bar-gap">
<view class="page">
<l-header title="生产入库" sticky></l-header>
<view class="input-box">
<up-tabs :scrollable="false" :list="state.tabsList"></up-tabs>
</view>
<view class="input-box">
<view class="input-item">
<up-input :placeholder="t('receive.djbh')" border="none" clearable inputAlign="left"
@ -33,7 +36,7 @@
</template>
<script lang="ts" setup>
import { reactive, nextTick, onMounted, ref } from 'vue';
import { reactive, nextTick, onMounted, ref,computed } from 'vue';
import { onLoad, onShow, onReachBottom } from '@dcloudio/uni-app'
import { useI18n } from 'vue-i18n'
import { parseTime } from '../../utils/tools.js';
@ -49,7 +52,11 @@
pageIndex: 1,
pageSize: 200,
totalCount: 0
}
},
tabsList: [
{ name: computed(() => '包装'), type: '1' },
{ name: computed(() => '单独物料'), type: '2' },
]
})
onShow(() => {

View File

@ -6,7 +6,7 @@
</l-header>
<view class="input-box">
<view class="input-item">
<up-input :placeholder="t('receive.code')" border="none" clearable inputAlign="left"
<up-input :placeholder="t('receive.code')" border="none" clearable inputAlign="left" inputmode="none"
:focus="state.inputFocus" v-model="state.queryString" @change="changeFun" ref="inputRef">
<template #prefix>
<up-icon name="scan" color="#2979ff" size="24"></up-icon>

View File

@ -6,7 +6,7 @@
</l-header>
<view class="input-box">
<view class="input-item">
<up-input :placeholder="t('receive.code')" border="none" clearable inputAlign="left"
<up-input :placeholder="t('receive.code')" border="none" clearable inputAlign="left" inputmode="none"
:focus="state.inputFocus" v-model="state.queryString" @change="changeFun" ref="inputRef">
<template #prefix>
<up-icon name="scan" color="#2979ff" size="24"></up-icon>
@ -223,6 +223,7 @@
FVHUBStockFlex:{
...JSON.parse(str),
}
}).then((res : any) => {
state.queryString = ''
if (res.data.IsSuccess) {

View File

@ -24,6 +24,10 @@
<uni-datetime-picker hasInput :show="state.FProReportTimeShow" v-model="state.FProReportTimes" :visibleItemCount="3" disabled
mode="datetime"></uni-datetime-picker>
</view>
<view class="timebox" v-if="state.type === '1'">
<view>开始投产个数</view>
<up-input placeholder="请输入开始投产个数" clearable inputmode="numeric" v-memo="state.qty"></up-input>
</view>
</view>
<view class="btnList">
<up-button v-show="state.type === '1'" class="btnItem" type="primary" shape="circle"
@ -56,9 +60,9 @@
FProReportTimes: '',//
EnterIntoProData: {},
type: '',
qty:''
})
onShow(() => {
console.log(pageDataInfoCom.userInfos);
let pageData = pageDataInfoCom.userInfos
state.EnterIntoProData = pageData
state.id = pageData.FID
@ -115,13 +119,15 @@
}
const PRD_MOPushIntoProFun = () => {
PRD_MOPushIntoPro({
Ids: state.id + '',
EntryIds: state.id + '',
TargetFormId: "PRD_MORPT",
IsEnableDefaultRule: "true",
CustomParams: {
ScanEntry: [
{
FStartProTimes: state.FStartProTimes
FStartProTimes: state.FStartProTimes,
FENTRYID: state.id + '',
Qty: Number(state.qty)
}
]
}

View File

@ -2,9 +2,12 @@
<view class="app status-bar-gap">
<view class="page">
<l-header title="生产投产" sticky></l-header>
<view class="input-box">
<up-tabs :scrollable="state.scrollableTabState" :list="state.tabsList" @click="setScrollableTabStateFun"></up-tabs>
</view>
<view class="input-box">
<view class="input-item">
<up-input placeholder="生产订单编号" border="none" clearable inputAlign="left" :focus="state.inputFocus"
<up-input placeholder="生产订单编号" border="none" clearable inputAlign="left"
v-model="state.queryString" @change="changeFun" ref="inputRef">
<template #prefix>
<up-icon name="scan" color="#2979ff" size="24"></up-icon>
@ -32,7 +35,7 @@
</template>
<script lang="ts" setup>
import { reactive, nextTick, onMounted, ref } from 'vue';
import { reactive, nextTick, onMounted, ref,computed } from 'vue';
import { onLoad, onShow, onReachBottom } from '@dcloudio/uni-app'
import { useI18n } from 'vue-i18n'
import { parseTime } from '../../utils/tools.js';
@ -45,6 +48,7 @@
const { t, locale } = getI18n
const state = reactive({
queryString: '',
scrollableTabState: locale.value === 'en',
dataList: [],
inputFocus: true,
scrollHeight: 0,
@ -53,24 +57,26 @@
pageSize: 200,
totalCount: 0
},
type: ''
})
onLoad((pageData : any) => {
state.type = pageData.type
type: '1',
tabsList: [
{ name: computed(() => t('home.kssc')),type: '1' },
{ name: computed(() => t('home.kscs')),type: '3' },
{ name: computed(() => t('home.kshb')),type: '2' },
]
})
onShow(() => {
state.queryString = ''
fnDataList()
console.log(pageDataInfo);
})
onMounted(() => {
const query = uni.createSelectorQuery().in(this);
query.select(".receive-listBox").boundingClientRect((data) => {
state.scrollHeight = data.height
}).exec();
})
const setScrollableTabStateFun = (item:any) => {
state.type = item.type
}
const fnScrollBottom = () => {
console.log(state.page.pageIndex * state.page.pageSize, state.page.totalCount);
if (state.page.pageIndex * state.page.pageSize <= state.page.totalCount) {
@ -97,8 +103,8 @@
Number: state.queryString
}).then((res : any) => {
if (res.code === 200) {
pageDataInfoCom.putInProdPageData({ ...res.data, ...item, time: new Date().getTime(),type:state.type })
route({url: '/pages/putInProd/details'})
pageDataInfoCom.putInProdPageData({ ...res.data, ...item, time: new Date().getTime(), type: state.type })
route({ url: '/pages/putInProd/details' })
}
})
@ -131,7 +137,7 @@
if (state.dataList.length == state.page.totalCount) { }
if (scanData && state.dataList.length === 1) {
if(state.dataList[0].FBillNo == state.queryString){
if (state.dataList[0].FBillNo == state.queryString) {
viewIntoProFun(state.dataList[0])
}
}

View File

@ -5,8 +5,8 @@
<view style="margin-right: 32rpx;" @click="dataPushNotification">{{ t('receive.tj') }}</view>
</l-header>
<view class="input-box">
<view class="input-item">
<up-input :placeholder="t('receive.code')" border="none" clearable inputAlign="left"
<view class="input-item">
<up-input :placeholder="t('receive.code')" border="none" clearable inputAlign="left" inputmode="none"
:focus="state.inputFocus" v-model="state.queryString" @change="changeFun" ref="inputRef">
<template #prefix>
<up-icon name="scan" color="#2979ff" size="24"></up-icon>

View File

@ -18,7 +18,7 @@
<view class="list-box-list" v-if="state.dataList.length > 0">
<view class="data-item" @click.stop="fnToUrl(item)"
v-for="(item, index) in state.dataList" :key="index">
<view class="tit">{{ t('receive.djbh') }}{{item.FBillNo}}</view>
<view class="tit">生产用料清单单号{{item.FBillNo}}</view>
<view class="line-p"></view>
<view class="b-font">{{ t('receive.rq') }}{{item.FDateFormat}}</view>
</view>

View File

@ -6,7 +6,7 @@
</l-header>
<view class="input-box">
<view class="input-item">
<up-input :placeholder="t('receive.code')" border="none" clearable inputAlign="left"
<up-input :placeholder="t('receive.code')" border="none" clearable inputAlign="left" inputmode="none"
:focus="state.inputFocus" v-model="state.queryString" @change="changeFun" ref="inputRef">
<template #prefix>
<up-icon name="scan" color="#2979ff" size="24"></up-icon>
@ -39,11 +39,6 @@
<view class="zongjian"></view>
<view>{{ item.Lot }}</view>
</view>
<view class="itemBox">
<view>仓库</view>
<view class="zongjian"></view>
<view>{{ item.MultiLanguageText }}</view>
</view>
<view class="itemBox">
<view>{{t('receive.ys')}}</view>
<view class="zongjian"></view>
@ -192,8 +187,8 @@
//
const postTemporaryScanDraftSaveFun = (item : any) => {
const obj = {};
if (item.warehouseData.FIsOpenLocation) {
const key = `FVHUBSTOCKFLEX__FF${item.warehouseData.FFlexId}`; //Id
if (item.warehouseData.FIsOpenLocation && Object.keys(item.locationData).length != 0) {
const key = `FVHUBSTOCKFLEX__FF${item.locationData.FID}`; //Id
obj[key] = { FNumber: item.locationData.FlexEntryId.Number }; //
}
const str = JSON.stringify(obj);

View File

@ -6,8 +6,8 @@
</l-header>
<view class="input-box">
<view class="input-item">
<up-input :placeholder="t('verify.tm')" border="none" clearable inputAlign="left"
:focus="state.inputFocus" v-model="state.queryString" @change="changeFun" ref="inputRef">
<up-input :placeholder="t('verify.tm')" border="none" clearable inputAlign="left" inputmode="none"
v-model="state.queryString" @change="changeFun" ref="inputRef">
<template #prefix>
<up-icon name="scan" color="#2979ff" size="24"></up-icon>
</template>
@ -122,7 +122,7 @@
query.select(".material-listBox").boundingClientRect((data) => {
state.scrollHeight = data.height
}).exec();
// scanFrameRef.value.stateShow(true)
})
/**
@ -175,18 +175,18 @@
const postTemporaryScanDraftSaveFun = (item : any) => {
console.log(item);
temporaryScanDraftSave({
FVHUBFormId: "PUR_ReceiveBill", //
FVHUBFBillNo: state.FBillNo, //
FVHUBScanNumber: state.queryString, //
FVHUBFormId: "PUR_ReceiveBill", //
FVHUBFBillNo: state.FBillNo, //
FVHUBScanNumber: state.queryString, //
FVHUBMaterialNumber: item.MaterialNumber, //
FVHUBScanQty: item.BarCodeQty + '', //
FVHUBEntryId: item.Id, //ID
FVHUBFlot: item.FLot_Text, //
FVHUBScanQty: item.BarCodeQty + '', //
FVHUBEntryId: item.Id, //ID
FVHUBFlot: item.FLot_Text, //
FVHUBStock: {
FNUMBER: "" //
},
FVHUBMaterial: {
FNUMBER: item.MaterialNumber //
FNUMBER: item.MaterialNumber //
},
// ...JSON.parse(str),''
}).then((res : any) => {
@ -225,7 +225,7 @@
success(res) {
if (res.confirm) {
let ids : any = []
let checkIds : any = []
// let checkIds : any = []
let param = {
FormId: 'PUR_ReceiveBill',
UserId: uni.getStorageSync('userInfo').Context.UserId,
@ -233,23 +233,25 @@
};
uni.showLoading({ mask: true });
//
temporaryScanList(param).then(res => {
if (res.code == 200) {
if (res.data.list.length != 0) {
res.data.list.forEach((item : any) => {
ids.push(item.FID)
temporaryScanList(param).then(resScanList => {
if (resScanList.code == 200) {
if (resScanList.data.list.length != 0) {
resScanList.data.list.forEach((item : any) => {
ids.push(item.FVHUBEntryId)
})
console.log(ids);
// debugger
//
state.dataList.forEach((item : any) => {
checkIds.push(item.Id)
})
// state.dataList.forEach((item : any) => {
// checkIds.push(item.Id)
// })
PURReceiveBillScanCheck({
EntryIds: checkIds.toString(),
EntryIds: ids.toString(),
Ids: state.materialId
}).then((res : any) => {
if (res.code === 200) {
fStockFlexDetailDelete({ Ids: ids.toString() }).then((res : any) => {
if (res.code === 200) {
}).then((resCheck : any) => {
if (resCheck.code === 200) {
fStockFlexDetailDelete({ Ids: ids.toString() }).then((resDelete : any) => {
if (resDelete.code === 200) {
fnDataList(state.materialId);
uni.$u.toast(t('public.cg'))
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 504 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 324 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 854 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 813 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 803 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 917 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 655 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 756 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 954 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 549 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 702 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 682 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 324 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 398 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

View File

@ -1,8 +1,12 @@
import { defineStore } from 'pinia';
/**
* @userInfos
* putInProdPageData()
*/
export const pageDataInfo = defineStore('info', {
state: () => ({
userInfos: {},
}),
actions: {
putInProdPageData(obj:object) {

View File

@ -80,7 +80,6 @@ function jumpTo(url : string, query = {}, type : number) {
})
}, 1050)
} else { //正常访问
console.log("123", url);
if (!url || url.toString().indexOf('/') === -1) {
let pages = getCurrentPages();
if (pages.length === 1) {

View File

@ -12,6 +12,7 @@ export default {
input: {
value: '',
type: 'text',
inputmode:'text',
fixed: false,
disabled: false,
disabledColor: '#f5f7fa',

View File

@ -3,6 +3,10 @@ import defProps from '../../libs/config/props.js'
export const props = defineMixin({
props: {
inputmode: {
type: String,
default: () => defProps.input.inputmode
},
// #ifdef VUE3
// 绑定的值
modelValue: {

View File

@ -10,8 +10,9 @@
<!-- 根据uni-app的input组件文档H5和APP中只要声明了password参数(无论true还是false)type均失效此时
为了防止type=number时又存在password属性type无效此时需要设置password为undefined
-->
<input ref="input-native" class="u-input__content__field-wrapper__field" :style="[inputStyle]"
:type="type" :focus="focus" :cursor="cursor" :value="innerValue" :auto-blur="autoBlur"
<input ref="input-native" id="myFocusKeeperInput" :inputmode="inputmode"
class="u-input__content__field-wrapper__field upinputRef" :style="[inputStyle]" :type="type"
:focus="focus" :cursor="cursor" :value="innerValue" :auto-blur="autoBlur"
:disabled="disabled || readonly" :maxlength="maxlength" :placeholder="placeholder"
:placeholder-style="placeholderStyle" :placeholder-class="placeholderClass"
:confirm-type="confirmType" :confirm-hold="confirmHold" :hold-keyboard="holdKeyboard"
@ -55,6 +56,7 @@
sleep,
os
} from '../../libs/function/index';
// const barcodePlugins = uni.requireNativePlugin('BarcodePlugins')
/**
* Input 输入框
* @description 此组件为一个输入框默认没有边框和样式是专门为配合表单组件u-form而设计的利用它可以快速实现表单验证输入内容下拉选择等功能
@ -121,6 +123,9 @@
if (this.formatter) {
this.innerFormatter = this.formatter;
}
},
mounted() {
},
watch: {
modelValue: {
@ -251,11 +256,11 @@
console.log('=========================================>>>>');
this.focused = true
uni.createSelectorQuery()
.select('.u-input__content__field-wrapper__field')
.node(res => {
if (res?.node?.focus) res.node.focus();
})
.exec();
.select('.u-input__content__field-wrapper__field')
.node(res => {
if (res?.node?.focus) res.node.focus();
})
.exec();
},
doBlur() {
this.$refs['input-native'].blur();

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

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

Some files were not shown because too many files have changed in this diff Show More