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

This commit is contained in:
刘晓鹏 2025-05-20 14:40:44 +08:00
parent 14a5fa371b
commit 933ddab8f3
68 changed files with 8868 additions and 13081 deletions

60
App.vue
View File

@ -1,5 +1,10 @@
<script>
import { useI18n } from 'vue-i18n'
import {
useI18n
} from 'vue-i18n'
import {
getAppVersion
} from './common/request/api/api'
export default {
onLaunch: function() {
console.log('App Launch')
@ -28,24 +33,73 @@
},
onShow: function() {
//
console.log('App Show')
const getI18n = useI18n()
const { t, locale } = getI18n
const {
t,
locale
} = getI18n
if (!uni.getStorageSync('locale')) {
locale.value = 'en'
uni.setStorageSync('locale', locale.value)
} else {
locale.value = uni.getStorageSync('locale')
}
//
let tokenStr = ''
tokenStr = uni.getStorageSync('TOKEN')
console.log(tokenStr, '==================================================');
if (tokenStr === '') {
uni.reLaunch({
url: '/pages/client/account/login',
})
}
//
const appVersion = '0.0.1' //
const appTaiGuoVersion = '0.0.1' //
//
getAppVersion().then(res => {
console.log(res);
let appLoginInfo = uni.getStorageSync('appLoginInfo')
let patternId = appLoginInfo.organizationObj['FOrgOrgId.FNumber']
var pages = getCurrentPages();
var page = pages[pages.length - 1];
var currentWebview = page.$getAppWebview();
let pageUrl = '/uni_modules/uni-upgrade-center-app/pages/upgrade-popup'
if (pageUrl.indexOf(currentWebview.__uniapp_route) == -1) {
uni.setStorageSync('local_storage_key', res.data)
if (Object.keys(appLoginInfo).length !== 0) {
//
if (patternId === '101') {
if (appVersion !== res.data.version) {
uni.$u.route({
url: pageUrl,
params: {
local_storage_key: 'local_storage_key',
patternId: '101'
}
})
}
}
//
if (patternId === '103') {
if (appTaiGuoVersion !== res.data.taiGuoVersion) {
uni.$u.route({
url: pageUrl,
params: {
local_storage_key: 'local_storage_key',
patternId: '103'
}
})
}
}
}
}
})
},
onHide: function() {
console.log('App Hide')

View File

@ -3,110 +3,98 @@ import requst from "../request";
*
*/
//账号登录
export const loginApp = async (data : object) => requst('/api/Account/login', 'post', { ...data })
export const loginApp = async (data: object) => requst('/api/Account/login', 'post', {...data})
//获取用户信息
export const getDetails = async (data : object) => requst('/api/Account/getDetails', 'post', { ...data })
export const getDetails = async (data: object) => requst('/api/Account/getDetails', 'post', {...data})
//退出登录
export const logout = async (data : object) => requst('/api/Account/logout', 'post', { ...data })
export const logout = async (data: object) => requst('/api/Account/logout', 'post', {...data})
//获取采购收料单接口
export const receiveBillView = async (data : object) => requst('/api/PUR_PurchaseOrder/View', 'get', { ...data })
export const receiveBillList = async (data : object) => requst('/api/PUR_PurchaseOrder/List', 'get', { ...data })
export const receiveBillPush = async (data : object) => requst('/api/PUR_PurchaseOrder/Push', 'post', { ...data })
export const receiveBillScanData = async (data : object) => requst('/api/PUR_PurchaseOrder/ScanData', 'get', { ...data })
export const receiveBillView = async (data: object) => requst('/api/PUR_PurchaseOrder/View', 'get', {...data})
export const receiveBillList = async (data: object) => requst('/api/PUR_PurchaseOrder/List', 'get', {...data})
export const receiveBillPush = async (data: object) => requst('/api/PUR_PurchaseOrder/Push', 'post', {...data})
export const receiveBillScanData = async (data: object) => requst('/api/PUR_PurchaseOrder/ScanData', 'get', {...data})
//获取来料验证接口
export const checkList = async (data : object) => requst('/api/PUR_ReceiveBill/CheckList', 'get', { ...data })
export const PURReceiveBillView = async (data : object) => requst('/api/PUR_ReceiveBill/View', 'get', { ...data })
export const PURReceiveBillList = async (data : object) => requst('/api/PUR_ReceiveBill/List', 'get', { ...data })
export const PURReceiveBillScanData = async (data : object) => requst('/api/PUR_ReceiveBill/ScanData', 'get', { ...data })
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 checkList = async (data: object) => requst('/api/PUR_ReceiveBill/CheckList', 'get', {...data})
export const PURReceiveBillView = async (data: object) => requst('/api/PUR_ReceiveBill/View', 'get', {...data})
export const PURReceiveBillList = async (data: object) => requst('/api/PUR_ReceiveBill/List', 'get', {...data})
export const PURReceiveBillScanData = async (data: object) => requst('/api/PUR_ReceiveBill/ScanData', 'get', {...data})
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 BarcodePackBillList = async (data: object) => requst('/api/BarcodePackBill/List', 'get', {...data})
//扫描查询
export const BarcodePackBillScanData = async (data : object) => requst('/api/BarcodePackBill/ScanData', '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 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 })
export const PRDPPBOMScanData = async (data : object) => requst('/api/PRD_PPBOM/ScanData', 'get', { ...data })
export const PRDPPBOMPush = async (data : object) => requst('/api/PRD_PPBOM/Push', '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})
export const PRDPPBOMScanData = async (data: object) => requst('/api/PRD_PPBOM/ScanData', 'get', {...data})
export const PRDPPBOMPush = async (data: object) => requst('/api/PRD_PPBOM/Push', 'post', {...data})
//生产投产 & 生产汇报
//投产查看
export const PRD_MOViewIntoPro = async (data : object) => requst('/api/PRD_MO/ViewIntoPro', 'get', { ...data })
export const PRD_MOViewIntoPro = async (data: object) => requst('/api/PRD_MO/ViewIntoPro', 'get', {...data})
//投产进入
export const PRD_MOEnterIntoPro = async (data : object) => requst('/api/PRD_MO/EnterIntoPro', 'get', { ...data })
export const PRD_MOEnterIntoPro = async (data: object) => requst('/api/PRD_MO/EnterIntoPro', 'get', {...data})
//保存修改
export const PRD_MORPTSave = async (data : object) => requst('/api/PRD_MORPT/Save', 'post', { ...data })
export const PRD_MORPTSave = async (data: object) => requst('/api/PRD_MORPT/Save', 'post', {...data})
//投产下推
export const PRD_MOPushIntoPro = async (data : object) => requst('/api/PRD_MO/PushIntoPro', 'post', { ...data })
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 PRD_MOView = async (data: object) => requst('/api/PRD_MO/View', 'get', {...data})
//汇报打印数据
export const PRD_MORPTGetPrintData = async (data: object) => requst('/api/PRD_MORPT/GetPrintData', 'get', {...data})
//成套领料查看
export const WholeSetView = async (data:object) => requst('/api/PRD_MO/WholeSetView', '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 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 })
export const PRD_MOList = async (data: object) => requst('/api/PRD_MO/List', 'get', {...data})
//下推
export const PRD_MOPush = async (data : object) => requst('/api/PRD_MO/Push', 'post', { ...data })
export const PRD_MOPush = async (data: object) => requst('/api/PRD_MO/Push', 'post', {...data})
//扫描
export const PRD_MOScanData = async (data : object) => requst('/api/PRD_MO/ScanData', 'get', { ...data })
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_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_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_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_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 })
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})
//入库扫描查询 && 生产装箱
export const PRD_MORPTScanData = async (data : object) => requst('/api/PRD_MORPT/ScanData', 'get', { ...data })
export const PRD_MORPTPush = async (data : object) => requst('/api/PRD_MORPT/Push', 'post', { ...data })
export const PRD_MORPTScanData = async (data: object) => requst('/api/PRD_MORPT/ScanData', 'get', {...data})
export const PRD_MORPTPush = async (data: object) => requst('/api/PRD_MORPT/Push', 'post', {...data})
//销售出库
export const SAL_DELIVERYNOTICEList = async (data : object) => requst('/api/SAL_DELIVERYNOTICE/List', 'get', { ...data })
export const SAL_DELIVERYNOTICEView = async (data : object) => requst('/api/SAL_DELIVERYNOTICE/View', 'get', { ...data })
export const SAL_DELIVERYNOTICEScanData = async (data : object) => requst('/api/SAL_DELIVERYNOTICE/ScanData', 'get', { ...data })
export const SAL_DELIVERYNOTICEPush = async (data : object) => requst('/api/SAL_DELIVERYNOTICE/Push', 'post', { ...data })
export const SAL_DELIVERYNOTICEList = async (data: object) => requst('/api/SAL_DELIVERYNOTICE/List', 'get', {...data})
export const SAL_DELIVERYNOTICEView = async (data: object) => requst('/api/SAL_DELIVERYNOTICE/View', 'get', {...data})
export const SAL_DELIVERYNOTICEScanData = async (data: object) => requst('/api/SAL_DELIVERYNOTICE/ScanData', 'get', {...data})
export const SAL_DELIVERYNOTICEPush = async (data: object) => requst('/api/SAL_DELIVERYNOTICE/Push', 'post', {...data})
//生产装箱
export const PRD_MORPTPackView = async (data : object) => requst('/api/PRD_MORPT/PackView', 'get', { ...data })
export const UHIK_BD_BarCodeMainFileSave = async (data : object) => requst('/api/UHIK_BD_BarCodeMainFile/Save', 'post', { ...data })
export const PRD_MORPTPackView = async (data: object) => requst('/api/PRD_MORPT/PackView', 'get', {...data})
export const getPrintData = async (data: object) => requst('/api/BarcodePackBill/GetPrintData', 'get', {...data})
export const UHIK_BD_BarCodeMainFileSave = async (data: object) => requst('/api/UHIK_BD_BarCodeMainFile/Save', 'post', {...data})
//仓库信息
export const stockList = async (data : object) => requst('/api/Stock/List', 'get', { ...data })
export const stockView = async (data : object) => requst('/api/Stock/View', 'get', { ...data })
export const fStockFlexDetailList = async (data : object) => requst('/api/FStockFlexDetail/List', 'get', { ...data })
export const stockList = async (data: object) => requst('/api/Stock/List', 'get', {...data})
export const stockView = async (data: object) => requst('/api/Stock/View', 'get', {...data})
export const fStockFlexDetailList = async (data: object) => requst('/api/FStockFlexDetail/List', 'get', {...data})
//扫描记录
export const temporaryScanList = async (data : object) => requst('/api/TemporaryScan/List', 'get', { ...data })
export const temporaryScanDraftSave = async (data : object) => requst('/api/TemporaryScan/DraftSave', 'post', { ...data })
export const fStockFlexDetailDelete = async (data : object) => requst('/api/TemporaryScan/Delete', 'post', { ...data })
export const fStockFlexDetailMultiDelete = async (data : object) => requst('/api/TemporaryScan/MultiDelete', 'post', { ...data })
export const temporaryScanList = async (data: object) => requst('/api/TemporaryScan/List', 'get', {...data})
export const temporaryScanDraftSave = async (data: object) => requst('/api/TemporaryScan/DraftSave', 'post', {...data})
export const fStockFlexDetailDelete = async (data: object) => requst('/api/TemporaryScan/Delete', 'post', {...data})
export const fStockFlexDetailMultiDelete = async (data: object) => requst('/api/TemporaryScan/MultiDelete', 'post', {...data})
//版本信息处理
export const version = () => requst('/util/versions/find/AppAppVersionsServiceOrder', 'get', {});
//组织列表
export const ORGOrganizationsList = (data:object) => requst('/api/ORG_Organizations/List', 'get', {...data});
export const ORGOrganizationsList = (data: object) => requst('/api/ORG_Organizations/List', 'get', {...data});
//获取账套数据中心
export const getDataCenterList = (data:object) => requst('/api/Account/GetDataCenterList', 'post', {...data});
export const getDataCenterList = (data: object) => requst('/api/Account/GetDataCenterList', 'post', {...data});
//组织范围
export const accountSearchOrg = (data:object) => requst('/api/Account/SearchOrg', 'post', {...data});
export const accountSearchOrg = (data: object) => requst('/api/Account/SearchOrg', 'post', {...data});
//获取版本
export const getAppVersion = () => requst('https://maxcess.gatedge.cn:91/api/Admin/GlobalSwitch/GetAppVersion?key=A9E45EED-E6F2-4276-8554-AF3055CA0512', 'get', {});

View File

@ -5,25 +5,21 @@ let API_URL = '';
// 开发环境
if (process.env.NODE_ENV === 'development') {
API_URL = '';
// API_URL = 'https://jyptapp.com/prod-app';
}
// 生产环境
if (process.env.NODE_ENV === 'production') {
API_URL = '';
// API_URL = 'https://jyptapp.com/prod-app';
}
// #endif
// #ifdef APP-PLUS
// 开发环境
if (process.env.NODE_ENV === 'development') {
API_URL = 'http://58.252.252.77:5000';
// API_URL = 'https://jyptapp.com/prod-app';
API_URL = 'http://8.148.230.89:5000';
}
// 生产环境
if (process.env.NODE_ENV === 'production') {
API_URL = 'http://58.252.252.77:5000';
// API_URL = 'https://jyptapp.com/prod-app';
API_URL = 'http://8.148.230.89:5000';
}
// #endif

View File

@ -11,13 +11,26 @@ export default function requst(url : string, type : string, params : any, header
// #endif
console.log('检查URL' + env.API_URL + url,)
console.log(params);
var apiHeader = ''
var headerObj = {}
if(url.indexOf('http') !== -1){
apiHeader = url
headerObj = {}
} else {
apiHeader = env.API_URL + url
headerObj = {
Authorization: 'Bearer '+ uni.getStorageSync('TOKEN') || ''
}
}
console.log(apiHeader);
return new Promise((resolve, reject) => {
uni.request({
url: env.API_URL + url,
url: apiHeader,
method: type,
data: params,
sslVerify:false,
header: {
Authorization: 'Bearer '+ uni.getStorageSync('TOKEN') || ''
...headerObj
},
timeout: 5000,
success(result : any) {

View File

@ -1,6 +1,6 @@
<template>
<up-popup :show="state.show" @close="close" @open="open">
<view class="input-box">
<view class="input-box" v-if="screeningTypes('warehouseStr')">
<view class="input-item">
<up-input :placeholder="t('public.xzck')" border="none" clearable inputAlign="left"
v-model="state.scanFrame.warehouseStr" confirmType="next" :disabled="true">
@ -13,7 +13,7 @@
</up-input>
</view>
</view>
<view class="input-box">
<view class="input-box" v-if="screeningTypes('locationStr')">
<view class="input-item">
<up-input :placeholder="state.NoLocationListText" border="none" clearable inputAlign="left"
v-model="state.scanFrame.locationStr" confirmType="next" @change="locationChange">
@ -26,7 +26,7 @@
</up-input>
</view>
</view>
<view class="input-box">
<view class="input-box" v-if="screeningTypes('articlesStr')">
<view class="input-item">
<up-input :placeholder="t('public.qsrwlbmmessage')" border="none" clearable inputAlign="right"
v-model="state.scanFrame.articlesStr" confirmType="next">
@ -36,7 +36,7 @@
</up-input>
</view>
</view>
<view class="input-box">
<view class="input-box" v-if="screeningTypes('quantityStr')">
<view class="input-item">
<up-input :placeholder="t('public.qsrsl')" border="none" clearable inputAlign="right"
v-model="state.scanFrame.quantityStr" @change="quantityStrChangeFun">
@ -46,10 +46,7 @@
</up-input>
</view>
</view>
<!-- <view class="warningsText" >
默认值数量 {{ state.scanFrame.quantityStr }} 大于未扫数量 {{ state.receiveBillScanData.UnScanQty }} 请修改!
</view> -->
<view class="input-box">
<view class="input-box" v-if="screeningTypes('batchNumberStr')">
<view class="input-item">
<up-input :placeholder="state.batchNumberStrPdr" border="none" clearable inputAlign="right"
v-model="state.scanFrame.batchNumberStr" confirmType="next" :disabled="state.batchNumberStrState">
@ -59,19 +56,9 @@
</up-input>
</view>
</view>
<!-- <view class="input-box">
<view class="input-item">
<up-input placeholder="请输入序列号" border="none" clearable inputAlign="right"
v-model="state.scanFrame.sequenceStr" confirmType="next">
<template #prefix>
<view class="item-title">{{ t('public.xxh') }}</view>
</template>
</up-input>
</view>
</view> -->
<view class="btnListSc">
<up-button type="primary" :plain="true" text="取消" @click="() => {state.show = false}"></up-button>
<up-button type="primary" text="确定" style="margin-left: 36rpx;" @click="confirmationFun"></up-button>
<up-button type="primary" :plain="true" :text="t('index.qx')" @click="() => {state.show = false}"></up-button>
<up-button type="primary" :text="t('index.qd')" style="margin-left: 36rpx;" @click="confirmationFun"></up-button>
</view>
<warehouse :show="state.warehouse" @warehouseClose="warehouseClosefun" @warehouseData="warehouseDataFun" />
<location :show="state.location"
@ -81,7 +68,7 @@
</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,defineProps } from 'vue';
import { onLoad, onShow, onReachBottom, } from '@dcloudio/uni-app'
import warehouse from '../warehouse/warehouse.vue'
import location from '../warehouse/location.vue'
@ -91,13 +78,21 @@
const getI18n = useI18n()
const { t, locale } = getI18n
const eimts = defineEmits(['scanFrameDataFeedback', 'confirmation', 'fast', 'err'])
const props = defineProps({
types:{
type:Array,
default: () => {
return ['warehouseStr', 'locationStr', 'articlesStr', 'quantityStr', 'batchNumberStr']
}
}
})
const state = reactive({
show: false,
warehouse: false,
location: false,
NoLocationList: true,
NoLocationListText: '可扫描仓位',
batchNumberStrPdr: '请输入批号',
NoLocationListText: '',
batchNumberStrPdr: t('index.qsrph'),
warehouseData: {},
locationData: {},
quantityStrState: false,
@ -118,6 +113,10 @@
/**
* 数据逻辑
*/
const screeningTypes = (str:string) => {
if(props.types.indexOf(str) !== -1) return true
else return false
}
watch(() => state.scanFrame, () => {
console.log('目标已出发');
eimts('scanFrameDataFeedback', state.scanFrame)
@ -133,15 +132,14 @@
state.locationData = obj.locationData
if (state.warehouseData.FIsOpenLocation) {
state.NoLocationList = true
state.NoLocationListText = '可扫描仓位'
state.NoLocationListText = t('index.ksmcw')
} else {
state.NoLocationList = false
state.NoLocationListText = '仓位未启用'
state.NoLocationListText = t('index.cwwqy')
}
}
//
const getreceiveBillScanData = (row : any) => {
console.log(row);
state.receiveBillScanData = row
dataValidation()
}
@ -155,7 +153,7 @@
state.scanFrame.warehouseStr = ''
state.scanFrame.locationStr = ''
state.NoLocationList = true
state.NoLocationListText = '可扫描仓位'
state.NoLocationListText = t('index.ksmcw')
state.warehouseData = {}
state.locationData = {}
}
@ -167,7 +165,7 @@
if (state.scanFrame.batchNumberStr !== '' && state.scanFrame.batchNumberStr !== state.receiveBillScanData.FLot_Text) {
state.show = true
uni.showModal({
title: '提示', content: '与默认批号不同,是否替换新的批号', cancelText: '取消', confirmText: '替换',
title: t('index.ts'), content: '与默认批号不同,是否替换新的批号', cancelText: '取消', confirmText: '替换',
success(res) {
if (res.confirm) {
state.scanFrame.batchNumberStr = state.receiveBillScanData.FLot_Text
@ -190,7 +188,7 @@
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: '替换',
title: t('index.ts'), content: t('index.ymrckbt'), cancelText: t('index.qx'), confirmText: t('index.qd'),
success(res) {
if (res.confirm) {
state.scanFrame.warehouseStr = formatLangTextValue(state.receiveBillScanData.StockId.Name)
@ -211,10 +209,10 @@
}
if (state.warehouseData.FIsOpenLocation) {
state.NoLocationList = true
state.NoLocationListText = '可扫描仓位'
state.NoLocationListText = t('index.ksmcw')
} else {
state.NoLocationList = false
state.NoLocationListText = '仓位未启用'
state.NoLocationListText = t('index.cwwqy')
}
}
//
@ -222,7 +220,7 @@
state.show = true
state.quantityStrState = true
} else if (state.scanFrame.quantityStr == '') {
state.scanFrame.quantityStr = state.receiveBillScanData.BarCodeQty
state.scanFrame.quantityStr = state.receiveBillScanData.UnScanQty
}
state.scanFrame.articlesStr = state.receiveBillScanData.MaterialNumber
state.scanFrame.barCodeStr = state.receiveBillScanData.queryString
@ -253,7 +251,7 @@
}
if (state.receiveBillScanData.stashVerify) {
if (state.scanFrame.warehouseStr == '') {
uni.$u.toast('该模块需要指定仓库')
uni.$u.toast(t('index.gmkxyzdck'))
eimts('err')
return false
}
@ -264,7 +262,7 @@
}
}
if (state.receiveBillScanData.FIsBatchManage === 'True' && (state.scanFrame.batchNumberStr === '' || state.scanFrame.batchNumberStr === ' ')) {
uni.$u.toast('批号已启用,不能为空')
uni.$u.toast(t('index.phbnwk'))
eimts('err')
return false
}
@ -285,7 +283,7 @@
}
} else {
uni.$u.toast('数量不能为空不能为0')
uni.$u.toast(t('index.slbnwk'))
}
}
/**
@ -309,16 +307,14 @@
console.log(item);
state.scanFrame.warehouseStr = item.FNAME
state.warehouse = false
state.locationData = {}
state.shortcut.locationStr = ""
state.scanFrame.locationStr = ""
if (state.warehouseData.FIsOpenLocation) {
state.NoLocationList = true
state.NoLocationListText = '可扫描仓位'
state.NoLocationListText = t('index.ksmcw')
} else {
state.NoLocationList = false
state.NoLocationListText = '仓库未启用'
state.NoLocationListText = t('index.cwwqy')
state.scanFrame.locationStr = ''
state.locationData = {}
}
@ -363,10 +359,10 @@
if (state.warehouseData.FIsOpenLocation) {
state.location = true
} else {
uni.$u.toast('仓库未启用')
uni.$u.toast(t('index.cwwqy'))
}
} else {
uni.$u.toast('请选择仓库')
uni.$u.toast(t('public.qxzck'))
}
}
const locationDataFun = (item : any) => {

View File

@ -89,7 +89,7 @@
location: false,
warehouseData: {},
locationData: {},
NoLocationListText: computed(() => t('public.xzcw')),
NoLocationListText: t('public.xzcw'),
NoLocationList: true,
specialModule: '',
shortcut: {
@ -171,10 +171,8 @@
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')

View File

@ -1,18 +1,4 @@
<template>
<!-- <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')">
<span>{{ t('public.mrz') }}</span>
</view>
<view class="sub-btn" :style="getPosition(index)" v-if="item === 'scanRecord'"
:class="{active: isOpen}" @click.stop="handleClick('scanRecord')">
<span>{{ t('public.smjl') }}</span>
</view>
</view>
<view class="main-btn" :class="{active: isOpen}" @click.stop="toggleMenu()"></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" />

View File

@ -1,9 +1,9 @@
<template>
<up-popup :show="props.show" @close="close">
<view class="popupText">仓位</view>
<view class="popupText">{{ t('index.cw') }}</view>
<view class="input-box">
<view class="input-item">
<up-input placeholder="仓位查询" border="none" clearable inputAlign="left" v-model="state.queryString"
<up-input :placeholder="t('index.cwcx')" border="none" clearable inputAlign="left" v-model="state.queryString"
@change="changeFun">
<template #prefix>
<up-icon name="search" color="#2979ff" size="24"></up-icon>
@ -19,7 +19,7 @@
<view class="tit">{{ item.FFlexValueName }}</view>
<!-- <view class="description">{{ item. }}</view> -->
<view class="line-p"></view>
<view class="b-font">仓位编号{{item.FFlexValueNumber}}</view>
<view class="b-font">{{ t('index.cwbh') }}{{item.FFlexValueNumber}}</view>
</view>
</view>
</scroll-view>
@ -31,17 +31,21 @@
import { reactive, nextTick, onMounted, ref, computed, defineProps, defineEmits, watch } from 'vue';
import { onLoad, onShow, onReachBottom, } from '@dcloudio/uni-app'
import { fStockFlexDetailList, stockList } from '../../common/request/api/api';
import i18n from '../../locale/index'
import { useI18n } from 'vue-i18n'
const getI18n = useI18n()
const { t, locale } = getI18n
const props = defineProps({
show: {
type: Boolean,
default: false
},
warehouseId:{
warehouseId: {
type: Number,
default: null
}
})
const emits = defineEmits(['locationClose','locationData'])
const emits = defineEmits(['locationClose', 'locationData'])
const state = reactive({
queryString: '',
dataList: [],
@ -82,9 +86,9 @@
}
const fnDataList = () => {
let param = {
Number:props.warehouseId,
queryString:state.queryString,
IsSortBySeq:true
Number: props.warehouseId,
queryString: state.queryString,
IsSortBySeq: true
};
fStockFlexDetailList(param).then(res => {
uni.hideLoading();
@ -96,11 +100,11 @@
const close = () => {
emits('locationClose', false)
}
const arehouseItemFun = (item:any) => {
emits('locationData',{
const arehouseItemFun = (item : any) => {
emits('locationData', {
...item,
FlexEntryId:{
Number:item.FFlexValueNumber
FlexEntryId: {
Number: item.FFlexValueNumber
}
})
// FEntity_FEntryId
@ -195,11 +199,13 @@
font-weight: bold;
padding: 20rpx 0;
}
.description{
.description {
font-size: 25rpx;
margin-top: 8rpx;
// padding: 20rpx 0;
}
.line-p {
border: 1px solid #efeaea;
}

View File

@ -1,9 +1,9 @@
<template>
<up-popup :show="props.show" @close="close">
<view class="popupText">仓库</view>
<view class="popupText">{{ t('index.ck') }}</view>
<view class="input-box">
<view class="input-item">
<up-input placeholder="仓库查询" border="none" clearable inputAlign="left" v-model="state.queryString"
<up-input :placeholder="t('index.ckcx')" border="none" clearable inputAlign="left" v-model="state.queryString"
@change="changeFun">
<template #prefix>
<up-icon name="search" color="#2979ff" size="24"></up-icon>
@ -18,7 +18,7 @@
<view class="data-item" v-for="(item, index) in state.dataList" :key="index" @click="arehouseItemFun(item)">
<view class="tit">{{item.FNAME}}</view>
<view class="line-p"></view>
<view class="b-font">仓库编号{{item.FNUMBER}}</view>
<view class="b-font">{{ t('index.ckbh') }}{{item.FNUMBER}}</view>
</view>
</view>
</scroll-view>
@ -30,6 +30,10 @@
import { reactive, nextTick, onMounted, ref, computed, defineProps, defineEmits, watch } from 'vue';
import { onLoad, onShow, onReachBottom, } from '@dcloudio/uni-app'
import { stockList } from '../../common/request/api/api';
import i18n from '../../locale/index'
import { useI18n } from 'vue-i18n'
const getI18n = useI18n()
const { t, locale } = getI18n
const props = defineProps({
show: {
type: Boolean,

View File

@ -78,5 +78,74 @@ export const cn = {
'ys': '已扫',
'ws': '未扫',
'yss': '应扫',
},
index:{
'bccg':'保存成功',
'tj':'添加',
'zxddh':'装箱单单号',
'scddbh':'生产订单编号',
'sczx':'生产装箱',
'bz':'包装(物料装箱条码)',
'minbz':'单独物料(物料最小包装条码)',
'ts':'提示',
'qdysc':'确定要删除该条数据吗',
'qx':'取消',
'qd':'确定',
'ysc':'已删除',
'ctll':'成套领料',
'ctllyz':'成套领料验证',
'scylqddh':'生产用料清单单号',
'hbbdh':'汇报单单号',
'qdytsccsjm':'确定要推送此次数据吗',
'rb':'让步',
'hg':'合格',
'bmygtsj':'并没有该条数据',
'scdd':'生产订单',
'ksscsj':'开始生产时间',
'kscssj':'开始测试时间',
'kshbsj':'开始汇报时间',
'kstcgs':'开始投产个数',
'kssc':'开始生产',
'kshb':'开始汇报',
'kscs':'开始测试',
'qxjxsc':'请先进行生产',
'zwck':'暂无仓库',
'cpmc':'成品名称',
'cpbm':'成品编码',
'scsl':'生产数量',
'llts':'领料套数',
'qsrllts':'请输入领料套数',
'llthbddy':'领料套数不得大于生产数量',
'csllddh':'生产领料单单号',
'ck':'仓库',
'ckcx':'仓库查询',
'ckbh':'仓库编号',
'cw':'仓位',
'cwcx':'仓位查询',
'cwbh':'仓位编号',
'wzdgcw':'未找到改仓位',
'ksmcw':'可扫描仓位',
'qsrph':'请输入批号',
'cwwqy':'仓位未启用',
'ymrckbt':'与默认仓库不同,是否替换新的仓库',
'gmkxyzdck':'该模块需要指定仓库',
'cwyqy':'仓位已启用,不能为空',
'phbnwk':'批号已启用,不能为空',
'slbnwk':'数量不能为空不能为0',
'zwsmsj':'暂无扫描数据',
'hgrksl':'合格品入库数量',
'qdyqbsc':'确定要删全部删除吗',
'tqbsc':'确定要删全部删除吗',
'qbsc':'全部删除',
'zwph':'暂无批号',
'dyj':'打印机',
'qxzdyj':'请选择打印机',
'zbdy':'准备打印',
'sbmc':'设备名称',
'sbbm':'设备编码',
'whqdlyqx':'未获取到蓝牙权限',
'ljcg':'连接成功',
'ljsb':'连接失败',
'cjbqsb':'创建标签失败'
}
}

View File

@ -11,16 +11,16 @@ export const en = {
'home': 'Maxcess Barcode System',
},
home: {
'llyz': 'Incoming Inspection',
'llyz': 'GRN Checking',
'cgrk': 'Good Receipt',
'scfl': 'Picking List',
'scbl': 'Replenishment',
'sctc': 'Production',
'scrk': 'Production Receipt',
'sczx': 'Production Packing',
'scrk': 'MO Receipt',
'sczx': 'MO Packing',
'xxck': 'Sales Delivery',
'kssc': 'Prodcution Start',
'kscs': 'Production Test',
'kssc': 'MO Start',
'kscs': 'MO Test',
'kshb': 'MO Report',
},
verify: {
@ -78,5 +78,74 @@ export const en = {
'ys': 'Already',
'ws': 'Not yet',
'yss': 'Should',
},
index:{
'bccg':'Save Successfully',
'tj':'Add',
'zxddh':'Prod Packing #',
'scddbh':'MO #',
'sczx':'Prod Packing',
'bz':'Material Packing #',
'minbz':'Material Mini Package #',
'ts':'Prompt',
'qdysc':'Please confirm the deletion',
'qx':'Cancel',
'qd':'Confirm',
'ysc':'Deleted',
'ctll':'Kit Picking',
'ctllyz':'Kit Picking Verify',
'scylqddh':'Prod BOM List #',
'hbbdh':'MO report',
'qdytsccsjm':'Data submitting comfirmation',
'rb':'Concession',
'hg':'Qualified',
'bmygtsj':'No data is found',
'scdd':'MO',
'ksscsj':'MO Starting Time',
'kscssj':'Test Starting Time',
'kshbsj':'MO Report Time',
'kstcgs':'QTY',
'kssc':'Production Starting ',
'kshb':'Test Starting',
'kscs':'MO Report',
'qxjxsc':'You have not started the MO',
'zwck':'No W/H is found',
'cpmc':'FG name',
'cpbm':'FG Part Number',
'scsl':'QTY',
'llts':'Kit Picking QTY',
'qsrllts':'Please input the QTY',
'llthbddy':'The number exceeds the MO requirement',
'csllddh':'Material Picking List #',
'ck':'W/H',
'ckcx':'W/H Query',
'ckbh':'W/H #',
'cw':'Bin Name',
'cwcx':'Bin Query',
'cwbh':'Bin #',
'wzdgcw':'Bin # is not found',
'ksmcw':'Scan Bin #',
'qsrph':'Input Lot #',
'cwwqy':'Bin # is not enabled',
'ymrckbt':'Different W/H from default. Replace?',
'gmkxyzdck':'W/H is required',
'cwyqy':'Bin # is required',
'phbnwk':'Lot # is required',
'slbnwk':'QTY is must greater than 0',
'zwsmsj':'No data is found.',
'hgrksl':'Qualified QTY',
'qdyqbsc':'All records deletion confirmation.',
'tqbsc':'Deletion Successfully!',
'qbsc':'Delete all',
'zwph':'Lot # is not found.',
'dyj':'Printer',
'qxzdyj':'Please select printer',
'zbdy':'Printing is ready',
'sbmc':'Device Name',
'sbbm':'Device Code',
'whqdlyqx':'Bluethooth is not connected',
'ljcg':'connection is successful.',
'ljsb':'connection failed.',
'cjbqsb':'QR code creation is failed'
}
}

View File

@ -2,8 +2,8 @@
"name" : "Maxcess Barcode",
"appid" : "__UNI__901D257",
"description" : "",
"versionName" : "1.0.4",
"versionCode" : 104,
"versionName" : "0.0.2",
"versionCode" : 2,
"transformPx" : false,
/* 5+App */
"app-plus" : {
@ -194,7 +194,7 @@
"disableHostCheck" : true,
"proxy" : {
"/api" : {
"target" : "http://58.252.252.77:5000",
"target" : "http://8.148.230.89:5000",
"changeOrigin" : true,
"pathRewrite" : {
"^/api" : ""

View File

@ -81,6 +81,9 @@
{
"path": "pages/putInProd/details"
},
{
"path": "pages/putInProd/print"
},
{
"path": "pages/productionStorage/index"
},
@ -102,6 +105,9 @@
{
"path": "pages/encasement/material"
},
{
"path": "pages/encasement/print"
},
{
"path": "pages/records/index"
},
@ -110,6 +116,22 @@
},
{
"path": "pages/client/account/loginConfig"
},
{
"path": "uni_modules/uni-upgrade-center-app/pages/upgrade-popup",
"style": {
"disableScroll": true,
"app-plus": {
"backgroundColorTop": "transparent",
"background": "transparent",
"titleNView": false,
"scrollIndicator": false,
"popGesture": "none",
"animationType": "fade-in",
"animationDuration": 200
}
}
}
],
"subPackages": [],

View File

@ -65,6 +65,7 @@
appLoginInfoObj:{}
})
onShow(() => {
if (uni.getStorageSync('locale') === 'en') {
locale.value = 'en'
} else {

View File

@ -1,12 +1,12 @@
<template>
<view class="app status-bar-gap">
<view class="page">
<l-header title="生产装箱" sticky #right>
<view style="margin-right: 32rpx;" @click="fnToUrl()">添加</view>
<l-header :title="t('index.zxddh')" sticky #right>
<view style="margin-right: 32rpx;" @click="fnToUrl()">{{ t('index.tj') }}</view>
</l-header>
<view class="input-box">
<view class="input-item">
<up-input :placeholder="t('receive.djbh')" border="none" clearable inputAlign="left"
<up-input :placeholder="t('index.zxddh')" border="none" clearable inputAlign="left"
v-model="state.queryString" @change="changeFun">
<template #prefix>
<up-icon name="search" color="#2979ff" size="24"></up-icon>
@ -18,8 +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" v-for="(item, index) in state.dataList" :key="index">
<view class="tit">装箱单单号{{item.FBillNo}}</view>
<view class="data-item" v-for="(item, index) in state.dataList" :key="index" @click="toPrintFun(item)">
<view class="tit">{{ t('index.zxddh') }}{{item.FBillNo}}</view>
<view class="line-p"></view>
<view class="b-font">{{ t('receive.rq') }}{{item.FDateFormat}}</view>
</view>
@ -76,6 +76,10 @@
const fnToUrl = () => {
toPages('/pages/encasement/material')
}
const toPrintFun = (row:any) => {
console.log(row);
toPages('/pages/encasement/print',{...row})
}
const debounceTimer = ref()
const changeFun = (e : any) => {
if (debounceTimer.value !== null) clearTimeout(debounceTimer.value)

View File

@ -1,15 +1,12 @@
<template>
<view class="app status-bar-gap">
<view class="page">
<l-header title="生成装箱" sticky #right>
<l-header :title="t('index.sczx')" 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"
<up-input :placeholder="t('receive.code')" 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,22 +29,22 @@
<view>{{ item['FVHUBMaterial.FName'] }}</view>
</view>
<view class="itemBox">
<view>物料编码</view>
<view>{{ t('receive.wlbm') }}</view>
<view class="zongjian"></view>
<view>{{ item.FVHUBMaterialNumber }}</view>
</view>
<view class="itemBox">
<view>数量</view>
<view>{{ t('public.qty') }}</view>
<view class="zongjian"></view>
<view>{{ item.FVHUBScanQty }}</view>
</view>
<view class="itemBox">
<view>仓库</view>
<view>{{ t('index.ck') }}</view>
<view class="zongjian"></view>
<view>{{ item['FVHUBStock.FName'] }}</view>
</view>
<view class="itemBox">
<view>批号</view>
<view>{{ t('receive.ph') }}</view>
<view class="zongjian"></view>
<view>{{ item.FVHUBFlot }}</view>
</view>
@ -88,8 +85,8 @@
scanFrameDataFeedback: {}, //
shortcutDataFeedback: {}, //
tabsList: [
{ name: computed(() => '包装'), type: '1' },
{ name: computed(() => '单独物料'), type: '2' },
{ name: computed(() => t('index.bz')), type: '1' },
{ name: computed(() => t('index.minbz')), type: '2' },
],
options: []
})
@ -131,7 +128,6 @@
FBarCode: val,
}).then((res : any) => {
if (res.code === 200) {
debugger
postTemporaryScanDraftSaveFun(res.data.Entry[0])
}
})
@ -164,12 +160,12 @@
//
const fStockFlexDetailDeleteFun = (item : any) => {
uni.showModal({
title: '提示', content: '确定要删除该条数据吗?', cancelText: '取消', confirmText: '确定',
title: t('index.ts'), content: t('index.qdysc'), cancelText: t('index.qx'), confirmText: t('index.qd'),
success(res) {
if (res.confirm) {
fStockFlexDetailDelete({ Ids: item.FID + '' }).then((res : any) => {
if (res.code === 200) {
uni.$u.toast('已删除')
uni.$u.toast(t('index.ysc'))
fnDataList()
}
})

View File

@ -29,10 +29,10 @@
<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 class="type-item-text">{{ t('index.ctll') }}</view>
</view>
<view class="type-item type-item-hl" @tap="toPages('/pages/ruleValidation/index')">
<view class="type-item-text">成套验证</view>
<view class="type-item-text">{{ t('index.ctllyz') }}</view>
</view>
<view class="type-item type-item-hl" @tap="toPages('/pages/putInProd/index')">
<view class="type-item-text">{{ t('home.sctc') }}</view>

View File

@ -1,10 +1,10 @@
<template>
<view class="app status-bar-gap">
<view class="page">
<l-header title="生产发料" sticky></l-header>
<l-header :title="t('home.scfl')" sticky></l-header>
<view class="input-box">
<view class="input-item">
<up-input :placeholder="t('receive.djbh')" border="none" clearable inputAlign="left"
<up-input :placeholder="t('index.scdd')" border="none" clearable inputAlign="left"
v-model="state.queryString" @change="changeFun">
<template #prefix>
<up-icon name="search" color="#2979ff" size="24"></up-icon>
@ -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">生产用料清单单号{{item.FBillNo}}</view>
<view class="tit">{{ t('index.scdd') }}{{item.FBillNo}}</view>
<view class="line-p"></view>
<view class="b-font">{{ t('receive.rq') }}{{item.FDateFormat}}</view>
</view>

View File

@ -165,7 +165,7 @@
scanFrameRef.value.stateShow(true)
}
} else {
uni.$u.toast('并没有该条数据')
uni.$u.toast(t('index.bmygtsj'))
state.queryString = ''
}
})
@ -207,7 +207,7 @@
state.queryString = ''
if (res.data.IsSuccess) {
fnDataList(state.materialId);
uni.$u.toast('成功')
uni.$u.toast(t('public.cg'))
scanFrameRef.value.stateShow(false)
}
})
@ -234,7 +234,7 @@
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 = []
@ -275,14 +275,14 @@
fStockFlexDetailDelete({ Ids: ids.toString() }).then((res : any) => {
if (res.code === 200) {
fnDataList(state.materialId);
uni.$u.toast('操作成功')
uni.$u.toast(t('public.cg'))
}
})
}
})
} else {
uni.$u.toast('暂无扫描数据')
uni.$u.toast(t('public.noDataMessage'))
}
}

View File

@ -1,10 +1,8 @@
<template>
<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>
<l-header :title="t('home.xxck')" sticky></l-header>
<view class="input-box">
<view class="input-item">
<up-input :placeholder="t('receive.djbh')" border="none" clearable inputAlign="left"
@ -52,10 +50,7 @@
pageSize: 200,
totalCount: 0
},
tabsList: [
{ name: computed(() => '包装'), type: '1' },
{ name: computed(() => '单独物料'), type: '2' },
]
})
onShow(() => {

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>
<view class="input-box">
<view class="input-item">
<up-input :placeholder="t('receive.code')" border="none" clearable inputAlign="left" inputmode="none"
@ -18,7 +21,7 @@
<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" @click="toPrintFun(item)"
<view class="data-item" v-for="(item, index) in state.dataList"
:style="[{'background-color':interpolation(item)},{'margin-bottom':index + 1 === state.dataList.length ? '80px' : '20px'}]"
:key="index">
<view class="text" style="margin-bottom: 20px;display: flex;">
@ -40,7 +43,7 @@
<view>{{ item.Lot }}</view>
</view>
<view class="itemBox">
<view>仓库</view>
<view>{{ t('index.ck') }}</view>
<view class="zongjian"></view>
<view>{{ item.MultiLanguageText }}</view>
</view>
@ -69,11 +72,7 @@
</view>
</view>
</view>
<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" @defaultPopup="defaultPopupFun" @scanRecord="scanRecordFun" />
<tools ref="toolsRef" :type="['scanRecord']" @scanRecord="scanRecordFun" />
</template>
<script lang="ts" setup>
@ -111,6 +110,11 @@
inputFocus: true,
scanFrameDataFeedback: {},
shortcutDataFeedback: {},
tabsIndex:'1',
tabsList: [
{ name: computed(() => t('index.bz')), type: '1' },
{ name: computed(() => t('index.minbz')), type: '2' },
]
})
onLoad((pageData : any) => {
console.log(pageData);
@ -131,7 +135,9 @@
// scanFrameRef.value.stateShow(true)
})
const upTabsItemFun = (e:any) => {
state.tabsIndex = e.type
}
const toPrintFun = (row:any) => {
console.log(row);
toPages('/pages/outOftock/print',{...row,FBillNo:state.FBillNo})
@ -165,91 +171,25 @@
SAL_DELIVERYNOTICEScanData({
FBarCode: val,
FBillNo: state.FBillNo,
IsPack: state.tabsIndex === '1' ? 'true' : 'false'
}).then((res : any) => {
if (res.data !== null) {
console.log(res);
scanFrameRef.value.getreceiveBillScanData({ ...res.data, queryString: state.queryString, 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('并没有该条数据')
if (res.code === 200) {
fnDataList(state.materialId)
state.queryString = ''
} else {
uni.$u.toast(t('verify.noDataMessage'))
}
})
}
//
const scanFrameCnfirmation = (row : any) => {
state.scanFrameDataFeedback = row
postTemporaryScanDraftSaveFun(state.scanFrameDataFeedback)
}
const scanFrameErrFun = () => {
//
scanFrameRef.value.stateShow(true)
}
//
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, //
FVHUBStock: {
FNUMBER: item.warehouseData.FNUMBER //
},
FVHUBMaterial: {
FNUMBER: item.articlesStr
},
...JSON.parse(str),
}).then((res : any) => {
console.log(res);
state.queryString = ''
if (res.data.IsSuccess) {
fnDataList(state.materialId);
uni.$u.toast('成功')
scanFrameRef.value.stateShow(false)
}
})
}
//
const dataToscanFrameFun = (res : object) => {
state.shortcutDataFeedback = res
scanFrameRef.value.getComponentsData(res)
shortcutRef.value.stateShow(false)
}
//
const defaultPopupFun = () => {
shortcutRef.value.stateShow(true)
}
const scanRecordFun = () => {
toPages('/pages/records/index', {
FormId: 'SAL_DELIVERYNOTICE',
FbillNo: state.FBillNo
})
}
/**
* 数据推送
*/
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 = []
@ -273,9 +213,11 @@
Qty: item.FVHUBScanQty,
Flot: item.FVHUBFlot,
StockId: item.FVHUBStock,
StockFlex: item.FVHUBStockFlex
StockFlex: item.FVHUBStockFlex,
Sno: item.FVHUBJSON
})
})
//
SAL_DELIVERYNOTICEPush({
EntryIds: EntryIds.toString(),
@ -290,14 +232,14 @@
fStockFlexDetailDelete({ Ids: ids.toString() }).then((res : any) => {
if (res.code === 200) {
fnDataList(state.materialId);
uni.$u.toast('操作成功')
uni.$u.toast(t('public.cg'))
}
})
}
})
} else {
uni.$u.toast('暂无扫描数据')
uni.$u.toast(t('index.zwsmsj'))
}
}
@ -309,10 +251,6 @@
});
}
/**
* 数据请求
*/
const fnDataList = (FBillNo : any, statesItem : boolean = false) => {
let param = {
id: FBillNo,
@ -329,11 +267,11 @@
Id: p.Id,
MaterialNo: p.MaterialNumber, //
MaterialName: formatLangTextValue(p.MaterialName), //
Lot: p.FLot_Text !== '' ? p.FLot_Text : '暂无批号', //
Lot: p.FLot_Text !== '' ? p.FLot_Text : t('index.zwph'), //
CheckQty: p.Qty, //
CheckJoinQty: p.ScanedQty, //
NoCheckQty: p.UnScanQty, //
MultiLanguageText: Object.keys(p.StockId).length ? formatLangTextValue(p.StockId.Name) : '暂无仓库'
MultiLanguageText: Object.keys(p.StockId).length ? formatLangTextValue(p.StockId.Name) : t('index.zwck')
};
state.dataList.push(item);
});

View File

@ -1,9 +1,11 @@
<template>
<view class="app status-bar-gap">
<l-header :title="t('home.scrk')" sticky #right>
<view style="margin-right: 32rpx;" v-if="state.tabsIndex === '1'" @click="submit()">{{ t('verify.tj') }}</view>
</l-header>
<view class="page">
<l-header title="生产入库" sticky></l-header>
<view class="input-box">
<up-tabs :scrollable="false" :list="state.tabsList"></up-tabs>
<up-tabs :scrollable="true" :list="state.tabsList" @click="upTabsItemFun"></up-tabs>
</view>
<view class="input-box">
<view class="input-item">
@ -15,22 +17,8 @@
</up-input>
</view>
</view>
<view class="receive-listBox" ref="listBoxRef">
<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="line-p"></view>
<view class="b-font">{{ t('receive.rq') }}{{item.FDateFormat}}</view>
</view>
</view>
<view v-if="state.dataList.length==0">
<up-empty mode="list"></up-empty>
</view>
</scroll-view>
</view>
<packing ref="packingRef" v-if="state.tabsIndex === '1'" :queryString="state.queryString" @clearOut="clearOut()"/>
<scattered v-if="state.tabsIndex === '2'" :queryString="state.queryString" @clearOut="clearOut()"/>
</view>
</view>
</template>
@ -41,95 +29,30 @@
import { useI18n } from 'vue-i18n'
import { parseTime } from '../../utils/tools.js';
import { PRD_MORPTList, receiveBillList } from '../../common/request/api/api';
const listBoxRef = ref(null)
import packing from './packing.vue'
import scattered from './scattered.vue'
const packingRef = ref()
const getI18n = useI18n()
const { t, locale } = getI18n
const state = reactive({
queryString: '',
dataList: [],
scrollHeight: 0,
page: {
pageIndex: 1,
pageSize: 200,
totalCount: 0
},
tabsList: [
{ name: computed(() => '包装'), type: '1' },
{ name: computed(() => '单独物料'), type: '2' },
]
tabsIndex:'1',
tabsList: [
{ name: computed(() => t('index.bz')), type: '1' },
{ name: computed(() => t('index.minbz')), type: '2' },
],
})
onShow(() => {
})
onMounted(() => {
const query = uni.createSelectorQuery().in(this);
query.select(".receive-listBox").boundingClientRect((data) => {
state.scrollHeight = data.height
}).exec();
fnDataList()
})
const fnScrollBottom = () => {
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 ++;
uni.showLoading({ mask: true });
setTimeout(() => {
fnDataList();
}, 500);
}
}
const fnToUrl = (item : any) => {
toPages('/pages/productionStorage/material',{id:item.FID,fBillNo:item.FBillNo})
}
const debounceTimer = ref()
const changeFun = (e : any) => {
if (debounceTimer.value !== null) clearTimeout(debounceTimer.value)
debounceTimer.value = setTimeout(() => {
state.queryString = e
state.page.pageIndex = 1
state.dataList = []
fnDataList()
}, 500)
if(e != '' ) state.queryString = e
}
const fnDataList = () => {
let param = {
queryString: state.queryString,
pageIndex: state.page.pageIndex,
pageSize: state.page.pageSize,
};
if (state.page.pageIndex == 1) {
uni.showLoading({ mask: true });
}
PRD_MORPTList(param).then(res => {
uni.hideLoading();
if (res.code == 200) {
let result = res.data;
let dataArray = result.list;
dataArray.forEach(p => {
p.FDateFormat = parseTime(p.FDate, '{y}-{m}-{d}');
});
if (state.page.pageIndex == 1) {
state.dataList = dataArray;
}
else {
state.dataList = state.dataList.concat(dataArray);
}
state.page.totalCount = result.total;
if (state.dataList.length == state.page.totalCount) {
// more_status.value = 'nomore';
}
}
});
const upTabsItemFun = (e:any) => {
state.tabsIndex = e.type
}
const toPages = (url : string, data : any = {}) => {
uni.$u.route({
url: url,
params: data
})
const clearOut = () => {
state.queryString = ''
}
const submit = () => {
packingRef.value.dataPushNotification()
}
</script>

View File

@ -15,7 +15,7 @@
</view>
</view>
<view class="material-listBox">
<scroll-view id="scroll-box" class="scroll-box" scroll-y="true"
<scroll-view id="scroll-box1" 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"
@ -39,11 +39,11 @@
<view class="zongjian"></view>
<view>{{ item.Lot }}</view>
</view>
<view class="itemBox">
<!-- <view class="itemBox">
<view>仓库</view>
<view class="zongjian"></view>
<view>{{ item.MultiLanguageText }}</view>
</view>
</view> -->
<view class="itemBox">
<view>{{t('receive.ys')}}</view>
<view class="zongjian"></view>
@ -73,7 +73,7 @@
@scanFrameDataFeedback="(res:object)=>{state.scanFrameDataFeedback = res}"
@fast="(row:any)=>{state.scanFrameDataFeedback = row}" @err="scanFrameErrFun" />
<shortcut ref="shortcutRef" @dataToscanFrame="dataToscanFrameFun" />
<tools ref="toolsRef" @defaultPopup="defaultPopupFun" @scanRecord="scanRecordFun" />
<tools ref="toolsRef" :type="['scanRecord']" @defaultPopup="defaultPopupFun" @scanRecord="scanRecordFun" />
</template>
<script lang="ts" setup>
@ -101,6 +101,7 @@
pageSize: 200,
totalCount: 0
},
tabsIndex:'1',
FBillNo: '',
materialId: '',
supplierName: '',
@ -125,7 +126,6 @@
state.scrollHeight = data.height
}).exec();
// scanFrameRef.value.stateShow(true)
})
/**
* 数据逻辑
@ -155,22 +155,13 @@
PRD_MORPTScanData({
FBarCode: val,
FBillNo: state.FBillNo,
IsPack: 'false'
}).then((res : any) => {
if (res.data !== null) {
console.log(res);
scanFrameRef.value.getreceiveBillScanData({ ...res.data, queryString: state.queryString, 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('并没有该条数据')
if (res.code === 200) {
fnDataList(state.materialId)
state.queryString = ''
} else {
uni.$u.toast(t('verify.noDataMessage'))
}
})
}
@ -235,10 +226,9 @@
/**
* 数据推送
*/
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 = []
@ -262,7 +252,8 @@
Qty: item.FVHUBScanQty,
Flot: item.FVHUBFlot,
StockId: item.FVHUBStock,
StockFlex: item.FVHUBStockFlex
StockFlex: item.FVHUBStockFlex,
Sno: item.FVHUBJSON
})
})
//
@ -298,11 +289,10 @@
});
}
/**
* 数据请求
*/
const fnDataList = (FBillNo : any, statesItem : boolean = false) => {
const fnDataList = (FBillNo : any) => {
let param = {
id: FBillNo,
};
@ -316,12 +306,12 @@
dataListArray.forEach((p : any) => {
let item = {
Id: p.Id,
MaterialNo: p.MaterialNumber, //
MaterialName: formatLangTextValue(p.MaterialName), //
Lot: p.FLot_Text, //
CheckQty: p.Qty, //
CheckJoinQty: p.ScanedQty, //
NoCheckQty: p.UnScanQty, //
MaterialNo: p.MaterialNumber,//
MaterialName: formatLangTextValue(p.MaterialName),//
Lot: p.FLot_Text,//
CheckQty: p.Qty, //
CheckJoinQty: p.ScanedQty,//
NoCheckQty: p.UnScanQty,//
MultiLanguageText: Object.keys(p.StockId).length ? formatLangTextValue(p.StockId.Name) : '暂无仓库'
};
state.dataList.push(item);

View File

@ -1,7 +1,7 @@
<template>
<view class="app status-bar-gap">
<view class="page">
<l-header title="采购入库" sticky></l-header>
<l-header :title="t('home.cgrk')" sticky></l-header>
<view class="input-box">
<view class="input-item">
<up-input :placeholder="t('verify.grn')" border="none" clearable inputAlign="left"

View File

@ -60,12 +60,12 @@
<view>{{ item.CheckQty }}</view>
</view>
<view class="itemBox">
<view>让步</view>
<view>{{ t('index.rb') }}</view>
<view class="zongjian"></view>
<view>{{ item.CsnReceiveQty }}</view>
</view>
<view class="itemBox">
<view>合格</view>
<view>{{ t('index.hg') }}</view>
<view class="zongjian"></view>
<view>{{ item.ReceiveQty }}</view>
</view>
@ -181,7 +181,7 @@
scanFrameRef.value.stateShow(true)
}
} else {
uni.$u.toast('并没有该条数据')
uni.$u.toast(t('index.bmygtsj'))
state.queryString = ''
}
})
@ -228,7 +228,7 @@
state.queryString = ''
if (res.data.IsSuccess) {
fnDataList(state.materialId);
uni.$u.toast('成功')
uni.$u.toast(t('public.cg'))
scanFrameRef.value.stateShow(false)
}
})
@ -255,7 +255,7 @@
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 = []
@ -297,14 +297,14 @@
fStockFlexDetailDelete({Ids:ids.toString()}).then((res:any) => {
if(res.code === 200) {
fnDataList(state.materialId);
uni.$u.toast('操作成功')
uni.$u.toast(t('public.cg'))
}
})
}
})
} else {
uni.$u.toast('暂无扫描数据')
uni.$u.toast(t('verify.noDataMessage'))
}
}

View File

@ -5,37 +5,38 @@
<view class="data-item" :style="[{'background-color':'#ffffff'}]">
<view class="dataText">
<view class="itemBox">
<view>生产订单</view>
<view>{{ t('index.scdd') }}</view>
<view class="zongjian"></view>
<view>{{ state.FBillNo }}</view>
</view>
<view class="timebox">
<view>开始生产时间</view>
<uni-datetime-picker hasInput :show="state.FStartProTimeShow" v-model="state.FStartProTimes" :visibleItemCount="3" disabled
mode="datetime"></uni-datetime-picker>
<view>{{ t('index.ksscsj') }}</view>
<view class="zongjian"></view>
<view>{{ state.FStartProTimes }}</view>
</view>
<view class="timebox">
<view>开始测试时间</view>
<uni-datetime-picker hasInput :show="state.FProTestTimeShow" v-model="state.FProTestTimes" :visibleItemCount="3" disabled
mode="datetime"></uni-datetime-picker>
<view>{{ t('index.kscssj') }}</view>
<view class="zongjian"></view>
<view>{{ state.FProTestTimes }}</view>
</view>
<view class="timebox">
<view>开始汇报时间</view>
<uni-datetime-picker hasInput :show="state.FProReportTimeShow" v-model="state.FProReportTimes" :visibleItemCount="3" disabled
mode="datetime"></uni-datetime-picker>
<view>{{ t('index.kshbsj') }}</view>
<!-- <uni-datetime-picker hasInput :show="state.FProReportTimeShow" v-model="state.FProReportTimes"
:visibleItemCount="3" disabled mode="datetime"></uni-datetime-picker> -->
<view class="zongjian"></view>
<view>{{ state.FProReportTimes }}</view>
</view>
<view class="timebox" v-if="state.type === '1'">
<view>开始投产个数</view>
<up-input placeholder="请输入开始投产个数" clearable inputmode="numeric" v-memo="state.qty"></up-input>
<view class="timebox">
<view>{{ t('index.scsl') }}</view>
<up-input :placeholder="t('index.scsl')" clearable inputmode="numeric" v-model="state.qty"
:disabled="state.type !== '2'"></up-input>
</view>
</view>
<view class="btnList">
<up-button v-show="state.type === '1'" class="btnItem" type="primary" shape="circle"
@click="PRD_MOPushIntoProFun"
text="确认"></up-button>
@click="PRD_MOPushIntoProFun()" :text="t('public.confirm')"></up-button>
<up-button v-show="state.type !== '1'" class="btnItem" type="primary" shape="circle"
@click="PRD_MORPTSaveFun"
text="确认"></up-button>
@click="PRD_MORPTSaveFun()" :text="t('public.confirm')"></up-button>
</view>
</view>
</view>
@ -48,6 +49,9 @@
import { PRD_MOEnterIntoPro, PRD_MOPushIntoPro, PRD_MORPTSave, PRD_MOViewIntoPro } from '../../common/request/api/api';
import { timeFormat } from '@/uni_modules/uview-plus';
import { pageDataInfo } from '../../stores/info.js';
import { useI18n } from 'vue-i18n'
const getI18n = useI18n()
const { t, locale } = getI18n
const pageDataInfoCom = pageDataInfo()
const state = reactive({
id: '',
@ -60,80 +64,101 @@
FProReportTimes: '',//
EnterIntoProData: {},
type: '',
qty:''
qty: ''
})
onShow(() => {
let pageData = pageDataInfoCom.userInfos
console.log(pageData);
state.EnterIntoProData = pageData
state.id = pageData.FID
state.id = pageData.Entry[0].Id
state.FBillNo = pageData.FBillNo
state.type = pageData.type
if (state.type === '1') state.qty = pageData.Entry[0].Qty
if (state.type === '3') state.qty = pageData.Entry[0].TestQty
if (state.type === '2') state.qty = pageData.Entry[0].ReportQty
if (state.type === '1' && state.FStartProTimes == '') {
state.FStartProTimes = timeFormat(pageData.time, 'yyyy-mm-dd hh:MM:ss')
}
if(pageData.FStartProTimes !== ''){
state.FStartProTimes = pageData.FStartProTimes
if (pageData.FStartProTimes !== '') {
state.FStartProTimes = pageData.FStartProTimes.replace("T", " ")
}
if (state.type === '2' && state.FProReportTimes == '') {
state.FProReportTimes = timeFormat(pageData.time, 'yyyy-mm-dd hh:MM:ss')
}
if(pageData.FProReportTimes !== ''){
state.FProReportTimes = pageData.FProReportTimes
if (pageData.FProReportTimes !== '') {
state.FProReportTimes = pageData.FProReportTimes.replace("T", " ")
}
if (state.type === '3' && state.FProTestTimes == '') {
state.FProTestTimes = timeFormat(pageData.time, 'yyyy-mm-dd hh:MM:ss')
}
if(pageData.FProTestTimes !== ''){
state.FProTestTimes = pageData.FProTestTimes
if (pageData.FProTestTimes !== '') {
state.FProTestTimes = pageData.FProTestTimes.replace("T", " ")
}
})
const titleText = () => {
if(state.type === '1') return '开始生产'
if(state.type === '2') return '开始汇报'
if(state.type === '3') return '开始测试'
if (state.type === '1') return t('index.kssc')
if (state.type === '3') return t('index.kscs')
if (state.type === '2') return t('index.kshb')
}
const PRD_MORPTSaveFun = () => {
PRD_MOViewIntoPro({
Number:state.FBillNo
}).then((res:any) => {
if(res.code === 200){
if(res.data.FRPFID !== ''){
PRD_MORPTSave({
Model:JSON.stringify({
FID:res.data.FRPFID,
FStartProTimes:state.FStartProTimes,
FProTestTimes:state.FProTestTimes,
FProReportTimes:state.FProReportTimes,
Number: state.FBillNo
}).then((res : any) => {
if (res.code === 200) {
if (res.data.FRPFID !== '') {
let obj1 = {
Model: JSON.stringify({
FID: res.data.FRPFID,
FStartProTimes: state.FStartProTimes,
FProTestTimes: state.FProTestTimes,
})
}).then((resItem:any) => {
if(resItem.code === 200){
uni.$u.toast('操作成功')
}
let obj2 = {
Model: JSON.stringify({
FID: res.data.FRPFID,
FStartProTimes: state.FStartProTimes,
FProTestTimes: state.FProTestTimes,
FProReportTimes: state.FProReportTimes,
FEntity: [{ FEntryID: res.data.Entry[0].FRPFENTRYID, FQuaQty: Number(state.qty) }]
})
}
PRD_MORPTSave(state.type === '3' ? obj1 : obj2).then((resItem : any) => {
if (resItem.code === 200) {
// uni.$u.toast(t('public.cg'))
if(state.type === '2'){
toPages('/pages/putInProd/print',state.EnterIntoProData)
}
}
})
} else {
uni.$u.toast('请先进行生产')
uni.$u.toast(t('index.qxjxsc'))
}
}
})
}
const PRD_MOPushIntoProFun = () => {
if (state.qty === '' || Number(state.qty) === 0) {
uni.$u.toast(t('index.slbnwk'))
return
}
PRD_MOPushIntoPro({
EntryIds: state.id + '',
EntryIds: state.id,
TargetFormId: "PRD_MORPT",
IsEnableDefaultRule: "true",
CustomParams: {
ScanEntry: [
{
FStartProTimes: state.FStartProTimes,
FENTRYID: state.id + '',
FENTRYID: state.id,
Qty: Number(state.qty)
}
]
}
}).then((res : any) => {
if(res.code === 200){
uni.$u.toast('操作成功')
if (res.code === 200) {
uni.$u.toast(t('public.cg'))
}
})
}
@ -145,12 +170,19 @@
}
return val[0].Value;
}
const toPages = (url : string, data : any = {}) => {
uni.$u.route({
url: url,
params: data
})
}
</script>
<style lang="scss" scoped>
:deep(.uni-date__x-input){
color: black !important;
:deep(.uni-date__x-input) {
color: black !important;
}
.app {
background-color: #F5F5F5;
@ -192,6 +224,7 @@
justify-content: space-between;
align-items: center;
margin-bottom: 32rpx;
.zongjian {
height: 1px;
flex: 1;

View File

@ -1,13 +1,13 @@
<template>
<view class="app status-bar-gap">
<view class="page">
<l-header title="生产投产" sticky></l-header>
<l-header :title="t('home.sctc')" 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"
<up-input :placeholder="t('index.scddbh')" 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>
@ -20,7 +20,7 @@
:style="{'height':state.scrollHeight+'px'}" @scrolltolower="fnScrollBottom()">
<view class="list-box-list" v-if="state.dataList.length > 0">
<view class="data-item" v-for="(item, index) in state.dataList" :key="index">
<view class="tit">生产订单编号{{item.FBillNo}}</view>
<view class="tit">{{ t('index.scddbh') }}{{item.FBillNo}}</view>
<view class="line-p"></view>
<view class="b-font">{{ t('receive.rq') }}{{item.FDateFormat}}</view>
</view>
@ -48,7 +48,7 @@
const { t, locale } = getI18n
const state = reactive({
queryString: '',
scrollableTabState: locale.value === 'en',
scrollableTabState: false,
dataList: [],
inputFocus: true,
scrollHeight: 0,

View File

@ -28,17 +28,17 @@
<view>{{ item.Lot }}</view>
</view>
<view class="itemBox">
<view>仓库</view>
<view>{{ t('index.ck') }}</view>
<view class="zongjian"></view>
<view>{{ item.MultiLanguageText }}</view>
</view>
<view class="itemBox">
<view>合格品入库数量</view>
<view>{{ t('index.hgrksl') }}</view>
<view class="zongjian"></view>
<view>{{ item.StockInQuaAuxQty }}</view>
</view>
<view class="itemBox">
<view>数量</view>
<view>{{ t('pubilc.qty') }}</view>
<view class="zongjian"></view>
<view>{{ item.CheckQty }}</view>
</view>
@ -128,7 +128,7 @@
MaterialName: formatLangTextValue(p.MaterialName), //
Lot: p.FLot_Text, //
CheckQty: p.Qty, //
MultiLanguageText:Object.keys(p.StockId).length ? formatLangTextValue(p.StockId.Name) : '暂无仓库',
MultiLanguageText:Object.keys(p.StockId).length ? formatLangTextValue(p.StockId.Name) : t('index.zwck'),
StockInQuaAuxQty:p.StockInQuaAuxQty
};
state.dataList.push(item);

View File

@ -1,8 +1,8 @@
<template>
<view class="app status-bar-gap">
<view class="page">
<l-header title="扫描记录" sticky #right>
<view style="margin-right: 32rpx;" @click="fStockFlexDetailMultiDeleteFun()">全部删除</view>
<l-header :title="t('public.smjl')" sticky #right>
<view style="margin-right: 32rpx;" @click="fStockFlexDetailMultiDeleteFun()">{{ t('index.qbsc') }}</view>
</l-header>
<view class="input-box">
<view class="input-item">
@ -15,8 +15,8 @@
</view>
</view>
<view class="records-listBox">
<scroll-view id="scroll-box" class="scroll-box" scroll-y="true"
:style="{'height':state.scrollHeight+'px'}" @scrolltolower="fnScrollBottom()">
<scroll-view id="scroll-box" class="scroll-box" scroll-y="true" :style="{'height':state.scrollHeight+'px'}"
@scrolltolower="fnScrollBottom()">
<view class="list-box-list">
<uni-swipe-action>
<uni-swipe-action-item :right-options="state.options" @click="onClick"
@ -26,39 +26,27 @@
<up-icon name="trash" color="#ffffff" size="28"></up-icon>
</view>
</template>
<view class="data-item"
:style="[{'background-color':'#ffffff'}]"
:key="index">
<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>{{ t('receive.djbh') }}</view>
<view class="zongjian"></view>
<view>{{ item.FVHUBFBillNo }}</view>
</view>
<view class="itemBox">
<view>物料编码</view>
<view>{{ t('public.wlbm') }}</view>
<view class="zongjian"></view>
<view>{{ item.FVHUBMaterialNumber }}</view>
</view>
<view class="itemBox">
<view>本次扫描数量</view>
<view>{{ t('public.qty') }}</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['FVHUBStock.FNumber'] }}</view>
</view>
<view class="itemBox">
<view>扫描时间</view>
<view>{{ t('receive.rq') }}</view>
<view class="zongjian"></view>
<view>{{ parseTime(item.FVHUBCreateDate, '{y}-{m}-{d} {h}:{i}') }}</view>
</view>
@ -66,7 +54,7 @@
</uni-swipe-action-item>
</uni-swipe-action>
</view>
<view v-if="state.dataList.length==0">
<view v-if="state.dataList.length==0">
<up-empty mode="list"></up-empty>
</view>
</scroll-view>
@ -78,15 +66,17 @@
<script lang="ts" setup>
import { reactive, nextTick, onMounted, ref, computed, watch } from 'vue';
import { onLoad, onShow, onReachBottom, } from '@dcloudio/uni-app'
import { useI18n } from 'vue-i18n'
import { parseTime } from '../../utils/tools.js';
// parseTime(p.FDate, '{y}-{m}-{d}');
import { fStockFlexDetailDelete, fStockFlexDetailMultiDelete, receiveBillList, temporaryScanList } from '../../common/request/api/api';
import { sqlite } from '../../stores/sqlite'
const DB = sqlite()
const inputRef = ref()
import { useI18n } from 'vue-i18n'
const getI18n = useI18n()
const { t, locale } = getI18n
const DB = sqlite()
const inputRef = ref()
const state = reactive({
queryString: '',
dataList: [],
@ -139,17 +129,17 @@
const navClick = (index : any) => { state.navIndex = index }
const onClick = (e : any) => {}
const swipeChange = (e : any, index : any) => {}
const fStockFlexDetailDeleteFun = (item:any) => {
const onClick = (e : any) => { }
const swipeChange = (e : any, index : any) => { }
const fStockFlexDetailDeleteFun = (item : any) => {
uni.showModal({
title : '提示', content : '确定要删除该条数据吗?', cancelText : '取消', confirmText: '确定',
success(res) {
title: t('index.ts'), content: t('index.qdysc'), cancelText: t('public.cancel'), confirmText: t('public.confirm'),
success(res) {
if (res.confirm) {
fStockFlexDetailDelete({Ids:item.FID + ''}).then((res:any) => {
if(res.code === 200) {
uni.$u.toast('已删除')
fStockFlexDetailDelete({ Ids: item.FID + '' }).then((res : any) => {
if (res.code === 200) {
uni.$u.toast(t('index.ysc'))
state.page.pageIndex = 1
fnDataList()
}
@ -162,12 +152,12 @@
}
const fStockFlexDetailMultiDeleteFun = () => {
uni.showModal({
title : '提示', content : '确定要删全部删除吗?', cancelText : '取消', confirmText: '确定',
success(res) {
title: t('index.ts'), content: t('index.qdyqbsc'), cancelText: t('public.cancel'), confirmText: t('public.confirm'),
success(res) {
if (res.confirm) {
fStockFlexDetailMultiDelete({FVHUBFormId:state.FormId}).then((res:any) => {
if(res.code === 200) {
uni.$u.toast('已全部删除')
fStockFlexDetailMultiDelete({ FVHUBFormId: state.FormId }).then((res : any) => {
if (res.code === 200) {
uni.$u.toast(t('index.tqbsc'))
state.page.pageIndex = 1
fnDataList()
}
@ -238,6 +228,7 @@
flex-direction: column;
height: 100%;
flex: 1;
.input-box {
background-color: white;
box-sizing: border-box;
@ -271,11 +262,13 @@
}
}
}
.records-listBox {
flex: 1;
.list-box-list {
width: 100%;
.itemRight {
display: flex;
align-items: center;

View File

@ -1,10 +1,10 @@
<template>
<view class="app status-bar-gap">
<view class="page">
<l-header title="生产补料" sticky></l-header>
<l-header :title="t('home.scbl')" sticky></l-header>
<view class="input-box">
<view class="input-item">
<up-input :placeholder="t('receive.djbh')" border="none" clearable inputAlign="left"
<up-input :placeholder="t('index.scdd')" border="none" clearable inputAlign="left"
v-model="state.queryString" @change="changeFun">
<template #prefix>
<up-icon name="search" color="#2979ff" size="24"></up-icon>
@ -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">生产用料清单单号{{item.FBillNo}}</view>
<view class="tit">{{ t('index.scylqddh') }}{{item.FBillNo}}</view>
<view class="line-p"></view>
<view class="b-font">{{ t('receive.rq') }}{{item.FDateFormat}}</view>
</view>

View File

@ -171,7 +171,7 @@
scanFrameRef.value.stateShow(true)
}
} else {
uni.$u.toast('并没有该条数据')
uni.$u.toast(t('index.bmygtsj'))
state.queryString = ''
}
})
@ -213,7 +213,7 @@
state.queryString = ''
if (res.data.IsSuccess) {
fnDataList(state.materialId);
uni.$u.toast('成功')
uni.$u.toast(t('public.cg'))
scanFrameRef.value.stateShow(false)
}
})
@ -240,7 +240,7 @@
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 = []
@ -281,14 +281,13 @@
fStockFlexDetailDelete({ Ids: ids.toString() }).then((res : any) => {
if (res.code === 200) {
fnDataList(state.materialId);
uni.$u.toast('操作成功')
uni.$u.toast(t(''))
}
})
}
})
} else {
uni.$u.toast('暂无扫描数据')
uni.$u.toast(t('verify.noDataMessage'))
}
}

View File

@ -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,
@ -238,6 +238,7 @@
if (resScanList.data.list.length != 0) {
resScanList.data.list.forEach((item : any) => {
ids.push(item.FVHUBEntryId)
checkIds.push(item.FID)
})
console.log(ids);
// debugger
@ -250,7 +251,7 @@
Ids: state.materialId
}).then((resCheck : any) => {
if (resCheck.code === 200) {
fStockFlexDetailDelete({ Ids: ids.toString() }).then((resDelete : any) => {
fStockFlexDetailDelete({ Ids: checkIds.toString() }).then((resDelete : any) => {
if (resDelete.code === 200) {
fnDataList(state.materialId);
uni.$u.toast(t('public.cg'))

View File

@ -1,23 +1,3 @@
## 0.9.52025-02-06
- 新增 完善下载失败时的处理逻辑
## 0.9.42024-12-28
- 修复 腾讯云在使用扩展存储时报错的 Bug
## 0.9.32024-12-23
- 修复 升级中心在大屏上的显示效果
## 0.9.22024-11-06
- 更新 部分 ts 类型
## 0.9.12024-11-01
- 更新 支持 HarmonyOS Next 设备整包更新、wgt 更新。需要 `HBuilderX 4.32+` [详情](https://doc.dcloud.net.cn/uniCloud/upgrade-center.html#uni-upgrade-center-app-harmonyos)
## 0.9.02024-10-30
- **重要更新** 在 uni-app x 项目中弃用之前弹窗方案使用[dialogPage](https://doc.dcloud.net.cn/uni-app-x/api/dialog-page.html)实现,需要 `HBuilderX 4.31+`
## 0.8.52024-10-26
- 优化 去除不必要代码
## 0.8.42024-10-26
- 修复 uni-app x 项目升级到 4.31 alpha 后中间有空隙的Bug
## 0.8.32024-07-31
- 修复 部分类型报错
## 0.8.22024-07-15
- 更新 static 下的静态图片放入 static/app 目录下,防止编译除 app 平台以外的平台时带入
## 0.8.12024-04-28
- 修复 在 HX 4.0.3+ uni-app x 项目运行到 Android 调不起安装的Bug
## 0.8.02024-04-15

View File

@ -1,7 +1,7 @@
{
"id": "uni-upgrade-center-app",
"displayName": "升级中心 uni-upgrade-center - App",
"version": "0.9.5",
"version": "0.8.1",
"description": "uni升级中心 - 客户端检查更新",
"keywords": [
"uniCloud",
@ -11,7 +11,7 @@
],
"repository": "https://gitee.com/dcloud/uni-upgrade-center/tree/master/uni_modules/uni-upgrade-center-app",
"engines": {
"HBuilderX": "^4.31"
"HBuilderX": "^4.03"
},
"dcloudext": {
"sale": {
@ -35,6 +35,7 @@
},
"uni_modules": {
"dependencies": [
"uni-installApk",
"uts-progressNotification",
"uts-openSchema"
],
@ -47,35 +48,33 @@
},
"client": {
"App": {
"app-vue": "y",
"app-nvue": "y",
"app-harmony": "u",
"app-uvue": "y"
"app-vue": "y",
"app-nvue": "u"
},
"H5-mobile": {
"Safari": "n",
"Android Browser": "n",
"微信浏览器(Android)": "n",
"QQ浏览器(Android)": "n"
"Safari": "y",
"Android Browser": "y",
"微信浏览器(Android)": "y",
"QQ浏览器(Android)": "y"
},
"H5-pc": {
"Chrome": "n",
"IE": "n",
"Edge": "n",
"Firefox": "n",
"Safari": "n"
"Chrome": "y",
"IE": "y",
"Edge": "y",
"Firefox": "y",
"Safari": "y"
},
"小程序": {
"微信": "n",
"阿里": "n",
"百度": "n",
"字节跳动": "n",
"QQ": "n",
"京东": "n"
"微信": "u",
"阿里": "u",
"百度": "u",
"字节跳动": "u",
"QQ": "u",
"京东": "u"
},
"快应用": {
"华为": "n",
"联盟": "n"
"华为": "u",
"联盟": "u"
},
"Vue": {
"vue2": "y",

File diff suppressed because it is too large Load Diff

View File

@ -1,15 +1,16 @@
import callCheckVersion, { UniUpgradeCenterResult } from "./call-check-version"
import { platform_iOS } from './utils'
// #ifdef UNI-APP-X
import { openSchema } from '@/uni_modules/uts-openSchema'
// #endif
// 推荐再App.vue中使用
const PACKAGE_INFO_KEY = '__package_info__'
// #ifdef APP-HARMONY
export default function (component?: any) : Promise<UniUpgradeCenterResult> {
// uni-app 项目无法从 vue 中导出 ComponentPublicInstance 类型,故使用条件编译
// #ifdef UNI-APP-X
export default function (component : ComponentPublicInstance | null = null) : Promise<UniUpgradeCenterResult> {
// #endif
// #ifndef APP-HARMONY
// #ifndef UNI-APP-X
export default function () : Promise<UniUpgradeCenterResult> {
// #endif
return new Promise<UniUpgradeCenterResult>((resolve, reject) => {
@ -18,13 +19,12 @@ export default function () : Promise<UniUpgradeCenterResult> {
const code = uniUpgradeCenterResult.code
const message = uniUpgradeCenterResult.message
const url = uniUpgradeCenterResult.url // 安装包下载地址
// 此处逻辑仅为示例,可自行编写
if (code > 0) {
// 腾讯云获取下载链接
if (/^cloud:\/\//.test(url)) {
const tcbRes = await uniCloud.getTempFileURL({ fileList: [url] });
if (typeof tcbRes.fileList[0].tempFileURL !== 'undefined') uniUpgradeCenterResult.url = tcbRes.fileList[0].tempFileURL;
}
// 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回
const tcbRes = await uniCloud.getTempFileURL({ fileList: [url] });
if (typeof tcbRes.fileList[0].tempFileURL !== 'undefined') uniUpgradeCenterResult.url = tcbRes.fileList[0].tempFileURL;
/**
*
@ -55,7 +55,6 @@ export default function () : Promise<UniUpgradeCenterResult> {
* UI风格
*/
// #ifndef UNI-APP-X
// #ifdef APP-PLUS
uni.setStorageSync(PACKAGE_INFO_KEY, uniUpgradeCenterResult)
uni.navigateTo({
url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`,
@ -65,27 +64,8 @@ export default function () : Promise<UniUpgradeCenterResult> {
}
})
// #endif
// #ifdef APP-HARMONY
if (component) {
component.show(true, uniUpgradeCenterResult)
} else {
reject({
code: -1,
message: '在 HarmonyOS Next 平台请传递组件使用'
})
}
// #endif
// #endif
// #ifdef UNI-APP-X
uni.setStorageSync(PACKAGE_INFO_KEY, uniUpgradeCenterResult)
uni.openDialogPage({
url: `/uni_modules/uni-upgrade-center-app/pages/uni-app-x/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`,
disableEscBack: true,
fail: (err) => {
console.error('更新弹框跳转失败', err)
uni.removeStorageSync(PACKAGE_INFO_KEY)
}
})
component?.$callMethod('show', true, uniUpgradeCenterResult)
// #endif
return resolve(uniUpgradeCenterResult)
@ -115,7 +95,7 @@ function updateUseModal(packageInfo : UniUpgradeCenterResult) : void {
} = packageInfo;
let isWGT = type === 'wgt'
let isiOS = !isWGT ? platform.includes(platform_iOS) : false;
let isiOS = !isWGT ? platform.includes('iOS') : false;
// #ifndef UNI-APP-X
let confirmText = isiOS ? '立即跳转更新' : '立即下载更新'
@ -164,19 +144,7 @@ function updateUseModal(packageInfo : UniUpgradeCenterResult) : void {
}, () => {
if (is_mandatory) {
//更新完重启app
// #ifdef APP-PLUS
plus.runtime.restart();
// #endif
// #ifdef APP-HARMONY
uni.showModal({
title: '安装成功',
content: '请手动重启应用',
showCancel: false,
success: res => {
plus.runtime.quit();
}
});
// #endif
return;
}
uni.showModal({
@ -184,12 +152,7 @@ function updateUseModal(packageInfo : UniUpgradeCenterResult) : void {
success: res => {
if (res.confirm) {
//更新完重启app
// #ifdef APP-PLUS
plus.runtime.restart();
// #endif
// #ifdef APP-HARMONY
plus.runtime.quit();
// #endif
}
}
});
@ -214,7 +177,7 @@ function updateUseModal(packageInfo : UniUpgradeCenterResult) : void {
fail: err => {
uni.showModal({
title: '更新失败',
content: err.errMsg,
content: err.message,
showCancel: false
});
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -5,10 +5,10 @@
"iPad"
],
"id": "__UNI__901D257",
"name": "美塞斯条码机",
"name": "Maxcess Barcode",
"version": {
"name": "1.0.4",
"code": 104
"name": "0.0.2",
"code": 2
},
"description": "",
"developer": {
@ -249,7 +249,11 @@
],
"backgroundColor": "#FFF",
"selectedIndex": 0,
"shown": true
"shown": true,
"child": [
"lauchwebview"
],
"selected": 0
}
},
"app-harmony": {

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

View File

@ -7,8 +7,8 @@
"id": "__UNI__901D257",
"name": "Maxcess Barcode",
"version": {
"name": "1.0.4",
"code": 104
"name": "0.0.2",
"code": 2
},
"description": "",
"developer": {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -163,6 +163,195 @@
line-height: 1;
}
/* 多行省略 */
.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;
@ -267,6 +456,68 @@
margin-right: 4px;
}
/* 多行省略 */
.multi-line-omit[data-v-8ff2a577] {
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-8ff2a577] {
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.uni-swipe[data-v-8ff2a577] {
position: relative;
overflow: hidden;
}
.uni-swipe_box[data-v-8ff2a577] {
display: flex;
flex-shrink: 0;
position: relative;
}
.uni-swipe_text--center[data-v-8ff2a577] {
width: 100%;
cursor: grab;
}
.uni-swipe_button-group[data-v-8ff2a577] {
box-sizing: border-box;
display: flex;
flex-direction: row;
position: absolute;
top: 0;
bottom: 0;
}
.button-group--left[data-v-8ff2a577] {
left: 0;
transform: translateX(-100%);
}
.button-group--right[data-v-8ff2a577] {
right: 0;
transform: translateX(100%);
}
.uni-swipe_button[data-v-8ff2a577] {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
padding: 0 20px;
}
.uni-swipe_button-text[data-v-8ff2a577] {
flex-shrink: 0;
font-size: 14px;
}
.ani[data-v-8ff2a577] {
transition-property: transform;
transition-duration: 0.3s;
transition-timing-function: cubic-bezier(0.165, 0.84, 0.44, 1);
}
/* 多行省略 */
.multi-line-omit[data-v-8dd5928e] {
word-break: break-all;
text-overflow: ellipsis;
@ -334,6 +585,92 @@
margin-top: 0.625rem;
}
/* 多行省略 */
.multi-line-omit[data-v-6a6aa8f1] {
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-6a6aa8f1] {
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.material-listBox1[data-v-6a6aa8f1] {
flex: 1;
}
.material-listBox1 .list-box-list[data-v-6a6aa8f1] {
width: 100%;
}
.material-listBox1 .list-box-list .data-item[data-v-6a6aa8f1] {
border: 1px solid #efeaea;
border-radius: 0.625rem;
box-shadow: 0 0.46875rem 0.46875rem #efeaea;
padding: 0.625rem 0.6875rem;
margin-bottom: 0.5rem;
background-color: #ffffff;
}
.material-listBox1 .list-box-list .data-item .itemBox[data-v-6a6aa8f1] {
line-height: 1.5625rem;
display: flex;
justify-content: space-between;
align-items: center;
}
.material-listBox1 .list-box-list .data-item .itemBox .zongjian[data-v-6a6aa8f1] {
height: 1px;
flex: 1;
background-color: #f0f0f0;
margin: 0 0.5rem;
}
/* 多行省略 */
.multi-line-omit[data-v-ef7f0ea3] {
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-ef7f0ea3] {
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.receive-listBox[data-v-ef7f0ea3] {
flex: 1;
}
.receive-listBox .list-box-list[data-v-ef7f0ea3] {
width: 100%;
}
.receive-listBox .list-box-list .data-item[data-v-ef7f0ea3] {
border: 1px solid #efeaea;
border-radius: 0.625rem;
box-shadow: 0 0.46875rem 0.46875rem #efeaea;
padding: 0.625rem 0.625rem 0;
margin-bottom: 0.625rem;
background-color: #ffffff;
}
.receive-listBox .list-box-list .data-item .tit[data-v-ef7f0ea3] {
font-size: 0.9375rem;
font-weight: bold;
padding: 0.625rem 0;
}
.receive-listBox .list-box-list .data-item .line-p[data-v-ef7f0ea3] {
border: 1px solid #efeaea;
}
.receive-listBox .list-box-list .data-item .b-font[data-v-ef7f0ea3] {
font-size: 0.78125rem;
padding: 0.625rem 0;
}
/* 多行省略 */
.multi-line-omit {
word-break: break-all;
text-overflow: ellipsis;

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long