Merge branch 'Dev' of http://101.37.171.70:10101/r/~jhz/STUWMS into Dev
| New file |
| | |
| | | <template> |
| | | <view class="content"> |
| | | <scroll-view scroll-y="true" :style="{height: containerHeight}"> |
| | | <view class="options-wrapper" v-show="FIFOList.length != 0"> |
| | | <uni-card v-for="(FIFOItem,index) in FIFOList" :title="FIFOItem['物料名称']" |
| | | :extra="`数量: ${FIFOItem['数量']}`" @tap="" style="margin: 10px;"> |
| | | <view class="item-parent"> |
| | | <view class="item"> |
| | | <text>物料代码: </text> |
| | | {{ FIFOItem['物料代码'] }} |
| | | </view> |
| | | <view class="item"> |
| | | <text>仓库: </text> |
| | | {{ FIFOItem['仓库'] }} |
| | | </view> |
| | | <view class="item"> |
| | | <text >仓位: </text> |
| | | {{ FIFOItem['仓位'] }} |
| | | </view> |
| | | <view class="item"> |
| | | <text>规格型号: </text> |
| | | {{ FIFOItem['规格型号'] }} |
| | | </view> |
| | | <view class="item"> |
| | | <text>下架数量: </text> |
| | | {{ FIFOItem['下架数量'] }} |
| | | </view> |
| | | </view> |
| | | </uni-card> |
| | | </view> |
| | | <view class="over" v-show="FIFOList.length == 0">暂无数据</view> |
| | | </scroll-view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | // 先入先出列表显示模块 |
| | | name: "FIFOListComponent", |
| | | props: { |
| | | FIFOList: { |
| | | require: true, |
| | | type: [Array] |
| | | }, |
| | | Height: { |
| | | require: false, |
| | | type: [Number, String], |
| | | default: '100%' |
| | | }, |
| | | Unit: { |
| | | require: false, |
| | | type: [String], |
| | | default: 'px' |
| | | }, |
| | | |
| | | }, |
| | | data() { |
| | | return { |
| | | containerHeight: 0, |
| | | }; |
| | | }, |
| | | mounted() { |
| | | // 根据递入的高度数据 设定滚动容器高度 |
| | | if (typeof this.Height == 'string') { |
| | | this.containerHeight = this.Height |
| | | } else { |
| | | this.containerHeight = `${this.Height}${this.Unit}` |
| | | } |
| | | |
| | | }, |
| | | methods: { |
| | | |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | .content { |
| | | box-sizing: border-box; |
| | | border-radius: 15rpx 15rpx 0 0; |
| | | padding: 20rpx 20rpx 40rpx 20rpx; |
| | | background-color: #fff; |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 10rpx; |
| | | |
| | | .search-condition { |
| | | display: flex; |
| | | flex-direction: row; |
| | | align-items: center; |
| | | gap: 20rpx; |
| | | |
| | | .title { |
| | | width: 5rem; |
| | | text-align: right; |
| | | } |
| | | |
| | | .right { |
| | | flex: 1; |
| | | border-radius: 22rpx; |
| | | border: 1px solid #acacac; |
| | | height: auto; |
| | | |
| | | input { |
| | | width: 100%; |
| | | padding: 8rpx 20rpx; |
| | | font-size: 24rpx; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .buttons { |
| | | display: flex; |
| | | flex-direction: row; |
| | | gap: 20rpx; |
| | | justify-content: flex-end; |
| | | |
| | | >button { |
| | | display: inline-flex; |
| | | width: 4rem; |
| | | } |
| | | } |
| | | |
| | | .options-wrapper { |
| | | width: 100%; |
| | | |
| | | .item-parent { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | justify-content: space-between; |
| | | line-height: 120%; |
| | | |
| | | .item { |
| | | // width: 50%; |
| | | font-size: 26rpx; |
| | | margin-bottom: 12rpx; |
| | | color: #555; |
| | | margin-right: 20rpx; |
| | | |
| | | text { |
| | | color: #999; |
| | | font-size: 26rpx; |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | .uni-card--is-active { |
| | | background-color: rgba(0, 122, 255, 0.2); |
| | | } |
| | | } |
| | | </style> |
| | |
| | | |
| | | let i18nConfig = { |
| | | locale: uni.getLocale(),// 获取已设置的语言 |
| | | messages |
| | | messages, |
| | | silentTranslationWarn: true, |
| | | missing: function(locale, key, vm, values){ |
| | | // 页面中含有语言包中不存在的字段,需同步到数据库中 |
| | | console.log("[i18n]: 页面中key为: ", key ,"的字段在翻译文件中不存在,同步到数据库...") |
| | | |
| | | // 为降低同步的难度,APP中 对翻译模块的key 不采用数组的写法,统一使用 模块名.字段名的写法 |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | <view class="bottom-btn" id="bottom-btn"> |
| | | <button :class="EnableSubmit?'btn-a':'btn-c'" :disabled="!EnableSubmit" size="mini" |
| | | @tap="cmdSubmit">提交</button> |
| | | <button class="btn-a" size="mini" @tap="cmdAdd">新增</button> |
| | | <view style="flex: 1;"></view> |
| | | <!-- <button class="btn-d" size="mini" @tap="cmdDelete">删除</button> --> |
| | | <button class="btn-c" size="mini" @tap="cmdExit">退出</button> |
| | |
| | | }, |
| | | methods: { |
| | | handleUploadCallback(res) { // 文件上传回调 |
| | | console.log('file: ',res); |
| | | console.log('file: ', res); |
| | | let fileInfo = res.data[0] |
| | | this.attachmentInfo.push({ |
| | | fileName: fileInfo.name, |
| | |
| | | }) |
| | | }, |
| | | delFile(index) { |
| | | console.log('attachmentInfo: ',this.attachmentInfo[index]); |
| | | console.log('attachmentInfo: ', this.attachmentInfo[index]); |
| | | uni.showModal({ |
| | | title: '提示', |
| | | content: '确认要删除 " ' + this.attachmentInfo[index].fileName + ' " 删除后将不可恢复!', |
| | |
| | | this.getCode(code) |
| | | }) |
| | | }, |
| | | cmdAdd(){ |
| | | uni.redirectTo({ |
| | | url: "/pages/ZLGL/lailiaojianyan_fast/Kf_QCStockInCheckBill_Fast" |
| | | }) |
| | | }, |
| | | async cmdSubmit() { // 后端在单次上传文件提交后会删除本地文件,一次只能提交一个数据 |
| | | try { |
| | | let res = await CommonUtils.doRequest2Sync({ |
| | |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | |
| | | <view class="bottom-btn"> |
| | | <button class="btn-a" size="mini" @tap="submit">提交</button> |
| | | <button class="btn-c" size="mini" @tap="goBack">退出</button> |
| | |
| | | HStockPlaceNameList: [], |
| | | |
| | | Materlist: [], |
| | | |
| | | hform: { |
| | | HBillType: 1201, |
| | | HBillerID: uni.getStorageSync('HBillerID'), |
| | |
| | | HMaker: this.hform.HMaker, |
| | | HWhID: sHWHID, |
| | | HSPID: sHSPID, |
| | | HSCWHID: 0, |
| | | HSCSPID: 0, |
| | | HQty: sHQty, |
| | | // HRedBlueFlag: this.hform.HRedBlueFlag, |
| | | // SourceFlag: HSourceFlag, |
| | |
| | | { |
| | | img: '../../static/icon/icon16.png', |
| | | text: '其他入库校验', |
| | | url: '/pages/qitarukujiaoyan/Kf_OtherInBillCheckList', |
| | | url: '/pages/qitarukujiaoyan/Kf_OtherInBillCheck', |
| | | id: 27, |
| | | hidden: false, |
| | | }, |
| | |
| | | import { |
| | | CommonUtils |
| | | } from "../../utils/common"; |
| | | import { getLanguagePackJson } from "../../utils/i18n"; |
| | | export default { |
| | | components: { |
| | | hFormAlert |
| | |
| | | "杭州凯贝奈特": 'http://192.168.50.253:8080/API/', |
| | | "杭州凯贝奈特外网": 'http://erp.hzcabinet.cn:9090/API/', |
| | | "翁涛涛本地测试": 'http://localhost:81/API/', |
| | | "陈镐哲本地测试": 'http://192.168.0.123:81/API/', |
| | | "陈镐哲本地测试": 'http://192.168.0.121:81/API/', |
| | | "陈镐哲本地测试2": 'http://192.168.0.102:81/API/', |
| | | "张瑞广本地测试": 'http://localhost:8082/API/', |
| | | "余思杰本地测试": 'http://localhost:8082/LuBaoAPI/', |
| | | // 小卫内外网 |
| | |
| | | // 四维尔内外网 |
| | | "宁波四维尔-内网": "http://192.168.0.236:9010/API/", |
| | | "宁波四维尔-外网": "http://220.189.218.155:9010/API/", |
| | | // 锦隆 |
| | | "锦隆-智能家居": "http://192.168.1.11/API/" |
| | | }, |
| | | serverUrlName: '浙江智云迈思', |
| | | |
| | |
| | | serverUrl: uni.getStorageSync('serverUrl') || 'http://47.96.97.237/API/', |
| | | serverUrlCache: '', |
| | | } |
| | | }, |
| | | onLoad() { |
| | | this.ApplyLanguagePack(this.$i18n.locale) |
| | | }, |
| | | onShow() { |
| | | var logindata = uni.getStorageSync('loginData') || '' |
| | |
| | | this.getDataBases() |
| | | }, |
| | | methods: { |
| | | async ApplyLanguagePack(lang, forceUpdate = false) { |
| | | // 读取语言包并加载 |
| | | let languagePack = await getLanguagePackJson(lang) |
| | | // this.$i18n.setLocaleMessage(lang, JSON.parse(languagePack)) |
| | | this.$i18n.locale = lang |
| | | }, |
| | | onLanguageChangeHandler(e) { |
| | | //TODO: 动态获取后端的语言包文件,并将语言包应用到全局 |
| | | console.log('e: ', e.detail.value); |
| | | if (e.detail.value == 0) { |
| | | this.Language = '中文' |
| | | this.$i18n.locale = 'zh-Hans' |
| | | this.ApplyLanguagePack("zh-Hans") |
| | | // this.$i18n.locale = 'zh-Hans' |
| | | } |
| | | if (e.detail.value == 1) { |
| | | this.Language = 'English' |
| | | this.$i18n.locale = 'en' |
| | | this.ApplyLanguagePack("en") |
| | | // this.$i18n.locale = 'en' |
| | | } |
| | | }, |
| | | async InitOrgination() { |
| | |
| | | <view :class="tabs == 1 ? 'on':''" @tap="tabs = 1">表头信息</view> |
| | | <view :class="tabs == 2 ? 'on':''" @tap="tabs = 2">物料信息</view> |
| | | <view :class="tabs == 3 ? 'on':''" @tap="tabs = 3">条码信息</view> |
| | | <view :class="tabs == 4 ? 'on':''" @tap="tabs = 4">下架信息</view> |
| | | </view> |
| | | |
| | | <view v-if="tabs == 1"> |
| | |
| | | </view> |
| | | <view v-if="tabs == 2"> |
| | | <view class="list" v-for="(item,index) in Materlist" :key="index"> |
| | | <uni-card :title="item.物料名称" :extra="'数量:'+item.数量" style="margin: 10px;" @tap="delMater(item)"> |
| | | <uni-card :title="item.物料名称" :extra="'数量:'+item.数量" style="margin: 10px;" @tap="cmdDelete(item)"> |
| | | <view class="card-detail"> |
| | | <view class="detail"> |
| | | <text>单据号:</text>{{item.单据号}} |
| | |
| | | </view> |
| | | </view> |
| | | |
| | | <view v-if="tabs == 4"> |
| | | <FIFOListComponentVue :FIFOList="HFIFOList"></FIFOListComponentVue> |
| | | </view> |
| | | |
| | | <view class="bottom-btn"> |
| | | <button class="btn-a" size="mini" @tap="submit">提交</button> |
| | | <view style="flex: 1;"></view> |
| | |
| | | </template> |
| | | <script> |
| | | import getDateTime from '@/utils/getdateTime.js'; |
| | | import FIFOListComponentVue from "@/components/FIFOListModule/FIFOListComponent.vue" |
| | | import { |
| | | getUserInfo |
| | | } from "@/utils/auth.js"; |
| | |
| | | CommonUtils |
| | | } from "@/utils/common.js" |
| | | export default { |
| | | components: { |
| | | FIFOListComponentVue |
| | | }, |
| | | data() { |
| | | return { |
| | | userInfo: getUserInfo(), |
| | |
| | | HTMQty_B: '', |
| | | HWHName_B: '', |
| | | HSPName_B: '', |
| | | } |
| | | }, |
| | | HFIFOList: [], // 先进先出列表缓存 |
| | | } |
| | | }, |
| | | onLoad(e) { |
| | |
| | | this.getHBaseList() |
| | | }, |
| | | methods: { |
| | | cmdDelete(item) { |
| | | uni.showModal({ |
| | | title: '提示', |
| | | content: '确认要删除 " ' + item.物料名称 + ' " 所有扫码记录?删除后将不可恢复!', |
| | | success: (res) => { |
| | | if (res.confirm) { |
| | | CommonUtils.doRequest2({ |
| | | url: "/WEBSController/set_DeleteBarCodeByEntryID_BillCheck_New_Json", |
| | | data: { |
| | | HInterID: this.hform.HInterID, |
| | | HBillType: this.hform.HBillType, |
| | | HSourceInterID: item.HSourceInterID, |
| | | HSourceEntryID: item.HSourceEntryID, |
| | | HSourceBarCodeCtl: this.hform.HSourceBarCodeCtl |
| | | }, |
| | | resFunction: (res) => { |
| | | if (res.data.count == 1) { |
| | | |
| | | this.DisBillEntryList() |
| | | } else { |
| | | uni.showToast({ |
| | | title: res.data.Message, |
| | | icon: 'none' |
| | | }) |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | async refreshHBillState() { |
| | | this.HBillNoFocus = false |
| | | await this.$nextTick(() => { |
| | |
| | | HMaker: this.hform.HMaker, |
| | | HWhID: sHWHID, |
| | | HSPID: sHSPID, |
| | | HSCWHID: 0, |
| | | HSCSPID: 0, |
| | | HQty: sHQty, |
| | | // HRedBlueFlag: this.hform.HRedBlueFlag, |
| | | // SourceFlag: HSourceFlag, |
| | |
| | | } else { //物料条码 |
| | | this.tabs = 2 |
| | | console.log('data', data) |
| | | let exit = false |
| | | let controlState = data.hBackField |
| | | if (controlState == 1) { |
| | | // 启用强控制 禁止 不在先进先出列表中的 物料扫码 |
| | | CommonUtils.showTips({ |
| | | title: "温馨提示", |
| | | message: "物料不在先进先出列表中,禁止出库..." |
| | | }) |
| | | exit = true |
| | | } |
| | | if (controlState == 2) { |
| | | // 不启用强控制 不在先进先出列表中的物料 通过弹窗询问是否需要 出库 |
| | | uni.showModal({ |
| | | title: "温馨提示", |
| | | content: "物料不在先进先出列表中,请确认是否要出库...", |
| | | success: (res) => { |
| | | if (res.confirm) { |
| | | exit = false |
| | | } else if (res.cancel) { |
| | | // 取消出库 |
| | | exit = true |
| | | } |
| | | } |
| | | }) |
| | | |
| | | } |
| | | |
| | | if(exit) { |
| | | return |
| | | } |
| | | |
| | | if (!this.hform.HSourceBillNo) { |
| | | this.hform.HSupName = data.hSupNameField |
| | | this.hform.HSupID = data.hSupIDField |
| | |
| | | this.refreshBarCodeState() |
| | | } else { |
| | | CommonUtils.playSound(0); |
| | | this.refreshHBillState() |
| | | this.refreshBarCodeState() |
| | | uni.showToast({ |
| | | title: res.data.Message, |
| | | icon: 'none' |
| | |
| | | } |
| | | } catch (e) { |
| | | CommonUtils.playSound(0) |
| | | this.refreshHBillState() |
| | | this.refreshBarCodeState() |
| | | uni.showToast({ |
| | | title: '接口请求失败: ' + e, |
| | | icon: 'none' |
| | |
| | | if (res.data.count == 1) { |
| | | var data = res.data.data |
| | | this.Materlist = data.Materlist |
| | | this.HFIFOList = data.FIFOlist |
| | | if (!data.BarCodeDetailslist[0].HBarCode) { |
| | | this.hform.HMaterName_B = '' |
| | | this.hform.HMaterModel_B = '' |
| | |
| | | HMaker: this.hform.HMaker, |
| | | HWhID: sHWHID, |
| | | HSPID: sHSPID, |
| | | HSCWHID: 0, |
| | | HSCSPID: 0, |
| | | HQty: sHQty, |
| | | // HRedBlueFlag: this.hform.HRedBlueFlag, |
| | | // SourceFlag: HSourceFlag, |
| | |
| | | this.refreshHBarCodeFocus() |
| | | } else { |
| | | CommonUtils.playSound(0); |
| | | this.refreshHBillNoFocus() |
| | | this.refreshHBarCodeFocus() |
| | | uni.showToast({ |
| | | title: res.data.Message, |
| | | icon: 'none' |
| | |
| | | } |
| | | } catch (e) { |
| | | CommonUtils.playSound(0) |
| | | this.refreshHBillNoFocus() |
| | | this.refreshHBarCodeFocus() |
| | | uni.showToast({ |
| | | title: '接口请求失败: ' + e, |
| | | icon: 'none' |
| | |
| | | <view :class="tabs == 1 ? 'on':''" @tap="tabs = 1">表头信息</view> |
| | | <view :class="tabs == 2 ? 'on':''" @tap="tabs = 2">物料信息</view> |
| | | <view :class="tabs == 3 ? 'on':''" @tap="tabs = 3">条码信息</view> |
| | | <view :class="tabs == 4 ? 'on':''" @tap="tabs = 4">下架信息</view> |
| | | </view> |
| | | |
| | | <view v-if="tabs == 1"> |
| | |
| | | </view> |
| | | </view> |
| | | |
| | | <view v-if="tabs == 4"> |
| | | <FIFOListComponentVue :FIFOList="HFIFOList"></FIFOListComponentVue> |
| | | </view> |
| | | <view class="bottom-btn"> |
| | | <button class="btn-a" size="mini" @tap="submit">提交</button> |
| | | <view style="flex: 1;"></view> |
| | |
| | | import { |
| | | CommonUtils |
| | | } from "@/utils/common.js" |
| | | import FIFOListComponentVue from "@/components/FIFOListModule/FIFOListComponent.vue" |
| | | export default { |
| | | components: { |
| | | FIFOListComponentVue |
| | | }, |
| | | data() { |
| | | return { |
| | | userInfo: getUserInfo(), |
| | |
| | | HTMQty_B: '', |
| | | HWHName_B: '', |
| | | HSPName_B: '', |
| | | } |
| | | }, |
| | | HFIFOList: [], // 先进先出列表缓存 |
| | | } |
| | | }, |
| | | onLoad(e) { |
| | |
| | | HMaker: this.hform.HMaker, |
| | | HWhID: sHWHID, |
| | | HSPID: sHSPID, |
| | | HSCWHID: 0, |
| | | HSCSPID: 0, |
| | | HQty: sHQty, |
| | | // HRedBlueFlag: this.hform.HRedBlueFlag, |
| | | // SourceFlag: HSourceFlag, |
| | |
| | | } else { //物料条码 |
| | | this.tabs = 2 |
| | | console.log('data', data) |
| | | let exit = false |
| | | let controlState = data.hBackField |
| | | if (controlState == 1) { |
| | | // 启用强控制 禁止 不在先进先出列表中的 物料扫码 |
| | | CommonUtils.showTips({ |
| | | title: "温馨提示", |
| | | message: "物料不在先进先出列表中,禁止出库..." |
| | | }) |
| | | exit = true |
| | | } |
| | | if (controlState == 2) { |
| | | // 不启用强控制 不在先进先出列表中的物料 通过弹窗询问是否需要 出库 |
| | | uni.showModal({ |
| | | title: "温馨提示", |
| | | content: "物料不在先进先出列表中,请确认是否要出库...", |
| | | success: (res) => { |
| | | if (res.confirm) { |
| | | exit = false |
| | | } else if (res.cancel) { |
| | | // 取消出库 |
| | | exit = true |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | |
| | | if(exit) { |
| | | return |
| | | } |
| | | if (!this.hform.HSourceBillNo) { |
| | | this.hform.HSupName = data.hSupNameField |
| | | this.hform.HSupID = data.hSupIDField |
| | |
| | | this.hform.HQty = '' |
| | | } else { |
| | | CommonUtils.playSound(0); |
| | | this.refreshHBillState() |
| | | this.refreshBarCodeState() |
| | | uni.showToast({ |
| | | title: res.data.Message, |
| | | icon: 'none' |
| | |
| | | } |
| | | } catch (e) { |
| | | CommonUtils.playSound(0) |
| | | this.refreshHBillState() |
| | | this.refreshBarCodeState() |
| | | uni.showToast({ |
| | | title: '接口请求失败: ' + e, |
| | | icon: 'none' |
| | |
| | | if (res.data.count == 1) { |
| | | var data = res.data.data |
| | | this.Materlist = data.Materlist |
| | | this.HFIFOList = data.FIFOlist |
| | | if (!data.BarCodeDetailslist[0].HBarCode) { |
| | | this.hform.HMaterName_B = '' |
| | | this.hform.HMaterModel_B = '' |
| | |
| | | </view> |
| | | </view> |
| | | <view class="form-item"> |
| | | <view class="title">仓库:</view> |
| | | <view class="title">调出仓库:</view> |
| | | <view class="right"> |
| | | <uni-combox :candidates="arrayHWHName" placeholder="请输入(或扫描)仓库" v-model="hform.HWHName" |
| | | @input="HWHNameChange"></uni-combox> |
| | | <uni-combox :candidates="arrayHWHName" placeholder="请输入(或扫描)仓库" v-model="hform.HSCWHName" |
| | | @input="HSCWHNameChange"></uni-combox> |
| | | </view> |
| | | </view> |
| | | <view class="form-item"> |
| | | <view class="title">仓位:</view> |
| | | <view class="right" v-show="showHStockPlaceName"> |
| | | <view class="title">调出仓位:</view> |
| | | <view class="right" v-show="showHSCStockPlaceName"> |
| | | <uni-combox :candidates="arrayHStockPlaceName" placeholder="请输入(或扫描)仓位" |
| | | v-model="hform.HStockPlaceName" @input="HStockPlaceNameChange"></uni-combox> |
| | | v-model="hform.HSCSPName" @input="HSCStockPlaceNameChange"></uni-combox> |
| | | </view> |
| | | <view class="righton" v-show="!showHStockPlaceName"> |
| | | <input v-model="hform.HStockPlaceName" :disabled="!showHStockPlaceName" placeholder="不可操作" /> |
| | | <view class="righton" v-show="!showHSCStockPlaceName"> |
| | | <input v-model="hform.HSCSPName" :disabled="!showHStockPlaceName" placeholder="不可操作" /> |
| | | </view> |
| | | </view> |
| | | <view class="tabs"> |
| | | <view :class="tabs == 1 ? 'on':''" @tap="tabs = 1">表头信息</view> |
| | | <view :class="tabs == 2 ? 'on':''" @tap="tabs = 2">物料信息</view> |
| | | <view :class="tabs == 3 ? 'on':''" @tap="tabs = 3">条码信息</view> |
| | | <view :class="tabs == 4 ? 'on':''" @tap="tabs = 4">下架信息</view> |
| | | </view> |
| | | |
| | | <view v-if="tabs == 1"> |
| | | <view class="form-item"> |
| | | <view class="title">调入仓库:</view> |
| | | <view class="right"> |
| | | <uni-combox :candidates="arrayHWHName" placeholder="请输入(或扫描)仓库" v-model="hform.HWHName" |
| | | @input="HWHNameChange"></uni-combox> |
| | | </view> |
| | | </view> |
| | | <view class="form-item"> |
| | | <view class="title">调入仓位:</view> |
| | | <view class="right" v-show="showHStockPlaceName"> |
| | | <uni-combox :candidates="arrayHStockPlaceName" placeholder="请输入(或扫描)仓位" |
| | | v-model="hform.HStockPlaceName" @input="HStockPlaceNameChange"></uni-combox> |
| | | </view> |
| | | <view class="righton" v-show="!showHStockPlaceName"> |
| | | <input v-model="hform.HStockPlaceName" :disabled="!showHStockPlaceName" placeholder="不可操作" /> |
| | | </view> |
| | | </view> |
| | | <view class="form-item" v-show="showHBillNo"> |
| | | <view class="title">单据号:</view> |
| | | <view class="right" style="width: 380rpx;"> |
| | |
| | | </label> |
| | | </view> |
| | | <view v-if="tabs == 2"> |
| | | <view class="list" v-for="(item,index) in Materlist" :key="index"> |
| | | <view class="list" v-for="(item,index) in Materlist" :key="index" @tap.stop="cmdDelete(item)"> |
| | | <uni-card :title="item.物料名称" :extra="'数量:'+item.数量" style="margin: 10px;"> |
| | | <view class="card-detail"> |
| | | <view class="detail"> |
| | |
| | | </view> |
| | | </view> |
| | | |
| | | <view v-if="tabs == 4"> |
| | | <FIFOListComponentVue :FIFOList="HFIFOList"></FIFOListComponentVue> |
| | | </view> |
| | | |
| | | <view class="bottom-btn"> |
| | | <button class="btn-a" size="mini" @tap="submit">提交</button> |
| | | <view style="flex: 1;"></view> |
| | |
| | | </template> |
| | | <script> |
| | | import getDateTime from '@/utils/getdateTime.js'; |
| | | import FIFOListComponentVue from "@/components/FIFOListModule/FIFOListComponent.vue" |
| | | import { |
| | | getUserInfo |
| | | } from "@/utils/auth.js"; |
| | |
| | | CommonUtils |
| | | } from '../../utils/common'; |
| | | export default { |
| | | components: { |
| | | FIFOListComponentVue |
| | | }, |
| | | data() { |
| | | return { |
| | | HBillNoFocus: false, |
| | |
| | | OperationType: 1, |
| | | |
| | | showHStockPlaceName: false, |
| | | showHSCStockPlaceName: false, |
| | | HBillNoFocus: false, |
| | | BarCodeFocus: false, |
| | | showHBillNo: true, |
| | |
| | | |
| | | HBarCode: '', |
| | | HQty: '', |
| | | HWHName: getUserInfo().HWHName, |
| | | HWHID: getUserInfo().HWhID, |
| | | HStockPlaceName: getUserInfo().HSPName, |
| | | HStockPlaceID: getUserInfo().HSPID, |
| | | HWHName: "", |
| | | HWHID: 0, |
| | | HStockPlaceName: "", |
| | | HStockPlaceID: 0, |
| | | HSCWHName: getUserInfo().HWHName, |
| | | HSCWHID: getUserInfo().HWhID || 0, |
| | | HSCSPName: getUserInfo().HSPName, |
| | | HSCSPID: getUserInfo().HSPID || 0, |
| | | |
| | | HBillNo: '', |
| | | HInterID: '', |
| | |
| | | HSPName_B: '', |
| | | HSCWHName_B: '', |
| | | HSCSPName_B: '', |
| | | } |
| | | }, |
| | | HFIFOList: [], // 先进先出列表缓存 |
| | | } |
| | | }, |
| | | onLoad(e) { |
| | |
| | | this.getHBaseList() |
| | | }, |
| | | methods: { |
| | | cmdDelete(item){ |
| | | uni.showModal({ |
| | | title: '提示', |
| | | content: '确认要删除 " ' + item.物料名称 + ' " 所有扫码记录?删除后将不可恢复!', |
| | | success: (res) => { |
| | | if (res.confirm) { |
| | | CommonUtils.doRequest2({ |
| | | url: "/WEBSController/set_DeleteBarCodeByEntryID_BillCheck_New_Json", |
| | | data: { |
| | | HInterID: this.hform.HInterID, |
| | | HBillType: this.hform.HBillType, |
| | | HSourceInterID: item.HSourceInterID, |
| | | HSourceEntryID: item.HSourceEntryID, |
| | | HSourceBarCodeCtl: this.hform.HSourceBarCodeCtl |
| | | }, |
| | | resFunction: (res) => { |
| | | if (res.data.count == 1) { |
| | | |
| | | this.DisBillEntryList() |
| | | } else { |
| | | uni.showToast({ |
| | | title: res.data.Message, |
| | | icon: 'none' |
| | | }) |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | async refreshHBillState() { |
| | | this.HBillNoFocus = false |
| | | await this.$nextTick(() => { |
| | |
| | | }, |
| | | }); |
| | | }, |
| | | //选择仓库 |
| | | //选择调入仓库 |
| | | HWHNameChange(e) { |
| | | // var name = e.split("(") |
| | | console.log('调入仓库: ',e); |
| | | for (var i = 0; i < this.HWHNameList.length; i++) { |
| | | if (this.HWHNameList[i].仓库名称 == e) { |
| | | this.hform.HWHName = this.HWHNameList[i].仓库名称 |
| | |
| | | } |
| | | } |
| | | }, |
| | | //选择仓位 |
| | | // 选择调出仓库 |
| | | HSCWHNameChange(e) { |
| | | // var name = e.split("(") |
| | | console.log('调出仓库: ',e); |
| | | for (var i = 0; i < this.HWHNameList.length; i++) { |
| | | if (this.HWHNameList[i].仓库名称 == e) { |
| | | this.hform.HSCWHName = this.HWHNameList[i].仓库名称 |
| | | this.hform.HSCWHID = this.HWHNameList[i].HItemID |
| | | if (this.HWHNameList[i]['启用仓位'] == 'Y') { |
| | | this.showHSCStockPlaceName = true |
| | | } else { |
| | | this.hform.HStockPlaceName = '' |
| | | this.showHSCStockPlaceName = false |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | //选择调入仓位 |
| | | HStockPlaceNameChange(e) { |
| | | for (var i = 0; i < this.HStockPlaceNameList.length; i++) { |
| | | if (this.HStockPlaceNameList[i].仓位名称 == e) { |
| | | this.hform.HStockPlaceName = this.HStockPlaceNameList[i].仓位名称 |
| | | this.hform.HStockPlaceID = this.HStockPlaceNameList[i].HItemID |
| | | } |
| | | } |
| | | }, |
| | | //选择调出仓位 |
| | | HSCStockPlaceNameChange(e) { |
| | | for (var i = 0; i < this.HStockPlaceNameList.length; i++) { |
| | | if (this.HStockPlaceNameList[i].仓位名称 == e) { |
| | | this.hform.HSCSPName = this.HStockPlaceNameList[i].仓位名称 |
| | | this.hform.HSCSPID = this.HStockPlaceNameList[i].HItemID |
| | | } |
| | | } |
| | | }, |
| | |
| | | |
| | | var sHWHID = this.hform.HWHID |
| | | var sHSPID = this.hform.HStockPlaceID |
| | | let sHSCWHID = this.hform.HSCWHID |
| | | let sHSCSPID = this.hform.HSCSPID |
| | | var sHQty = this.hform.HQty |
| | | var sSourceBillNo = this.hform.HSourceBillNo |
| | | var sSourceBillType = this.hform.HMainSourceBillType |
| | |
| | | HMaker: this.hform.HMaker, |
| | | HWhID: sHWHID, |
| | | HSPID: sHSPID, |
| | | HSCWHID: sHSCWHID, |
| | | HSCSPID: sHSCSPID, |
| | | HQty: sHQty, |
| | | // HRedBlueFlag: this.hform.HRedBlueFlag, |
| | | // SourceFlag: HSourceFlag, |
| | |
| | | } else { //物料条码 |
| | | this.tabs = 2 |
| | | console.log('data', data) |
| | | // 是否强控 |
| | | let exit = false |
| | | let controlState = data.hBackField |
| | | if (controlState == 1) { |
| | | // 启用强控制 禁止 不在先进先出列表中的 物料扫码 |
| | | CommonUtils.showTips({ |
| | | title: "温馨提示", |
| | | message: "物料不在先进先出列表中,禁止出库..." |
| | | }) |
| | | exit = true |
| | | } |
| | | if (controlState == 2) { |
| | | // 不启用强控制 不在先进先出列表中的物料 通过弹窗询问是否需要 出库 |
| | | uni.showModal({ |
| | | title: "温馨提示", |
| | | content: "物料不在先进先出列表中,请确认是否要出库...", |
| | | success: (res) => { |
| | | if (res.confirm) { |
| | | exit = false |
| | | } else if (res.cancel) { |
| | | // 取消出库 |
| | | exit = true |
| | | } |
| | | } |
| | | }) |
| | | |
| | | } |
| | | if(exit) { |
| | | return |
| | | } |
| | | |
| | | if (!this.hform.HSourceBillNo) { |
| | | this.hform.HSupName = data.hSupNameField |
| | | this.hform.HSupID = data.hSupIDField |
| | |
| | | if (res.data.count == 1) { |
| | | var data = res.data.data |
| | | this.Materlist = data.Materlist |
| | | this.HFIFOList = data.FIFOlist |
| | | if (!data.BarCodeDetailslist[0].HBarCode) { |
| | | this.hform.HBarCode_B = '' |
| | | this.hform.HMaterName_B = '' |
| | |
| | | <view :class="tabs == 1 ? 'on':''" @tap="tabs = 1">表头信息</view> |
| | | <view :class="tabs == 2 ? 'on':''" @tap="tabs = 2">物料信息</view> |
| | | <view :class="tabs == 3 ? 'on':''" @tap="tabs = 3">条码信息</view> |
| | | <view :class="tabs == 4 ? 'on':''" @tap="tabs = 4">下架信息</view> |
| | | </view> |
| | | |
| | | <view v-if="tabs == 1"> |
| | |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | <view v-if="tabs == 4"> |
| | | <FIFOListComponentVue :FIFOList="HFIFOList"></FIFOListComponentVue> |
| | | </view> |
| | | |
| | | <view class="bottom-btn"> |
| | | <button class="btn-a" size="mini" @tap="submit">提交</button> |
| | |
| | | <script> |
| | | import getDateTime from '@/utils/getdateTime.js'; |
| | | import BillListPopupVue from '../../components/BillListPopup/BillListPopup_Check.vue'; |
| | | import FIFOListComponentVue from "@/components/FIFOListModule/FIFOListComponent.vue" |
| | | import { |
| | | getUserInfo |
| | | } from "@/utils/auth.js"; |
| | | import { |
| | | CommonUtils |
| | | } from '../../utils/common'; |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | |
| | | HTMQty_B: '', |
| | | HWHName_B: '', |
| | | HSPName_B: '', |
| | | } |
| | | }, |
| | | |
| | | HFIFOList: [], // 先进先出列表缓存 |
| | | } |
| | | }, |
| | | components: { |
| | | BillListPopupVue |
| | | BillListPopupVue, |
| | | FIFOListComponentVue |
| | | }, |
| | | onUnload() { |
| | | uni.$off('BillSelectComplete') |
| | |
| | | // await this.$nextTick(() => { |
| | | // this.HBarCodeFocus = true |
| | | // }) |
| | | setTimeout(() => { |
| | | this.HBarCodeFocus = true; |
| | | }, 300); |
| | | setTimeout(() => { |
| | | this.HBarCodeFocus = true; |
| | | }, 300); |
| | | }, |
| | | async refreshHBillNoFocus() { |
| | | this.HBillNoFocus = false |
| | |
| | | return |
| | | } |
| | | let targetUrl = () => { |
| | | if (/智云|惠康/.test(this.hform.HStockOrgName)) { |
| | | if (/惠康/.test(this.hform.HStockOrgName)) { |
| | | return "/WEBSController/get_BillBarCode_BillCheck_Json_MateOut_HuiKang" |
| | | } |
| | | return "/WEBSController/get_BillBarCode_BillCheck_Json" |
| | |
| | | HMaker: this.hform.HMaker, |
| | | HWhID: sHWHID, |
| | | HSPID: sHSPID, |
| | | HSCWHID: 0, |
| | | HSCSPID: 0, |
| | | HQty: sHQty, |
| | | // HRedBlueFlag: this.hform.HRedBlueFlag, |
| | | // SourceFlag: HSourceFlag, |
| | |
| | | } else { //物料条码 |
| | | this.tabs = 2 |
| | | console.log('data', data) |
| | | let exit = false |
| | | let controlState = data.hBackField |
| | | if (controlState == 1) { |
| | | // 启用强控制 禁止 不在先进先出列表中的 物料扫码 |
| | | CommonUtils.showTips({ |
| | | title: "温馨提示", |
| | | message: "物料不在先进先出列表中,禁止出库..." |
| | | }) |
| | | exit = true |
| | | } |
| | | if (controlState == 2) { |
| | | // 不启用强控制 不在先进先出列表中的物料 通过弹窗询问是否需要 出库 |
| | | uni.showModal({ |
| | | title: "温馨提示", |
| | | content: "物料不在先进先出列表中,请确认是否要出库...", |
| | | success: (res) => { |
| | | if (res.confirm) { |
| | | exit = false |
| | | } else if (res.cancel) { |
| | | // 取消出库 |
| | | exit = true |
| | | } |
| | | } |
| | | }) |
| | | |
| | | } |
| | | if(exit){ |
| | | return |
| | | } |
| | | |
| | | if (!this.hform.HSourceBillNo) { |
| | | this.hform.HSupName = data.hSupNameField |
| | | this.hform.HSupID = data.hSupIDField |
| | |
| | | this.refreshHBarCodeFocus() |
| | | //显示表体明细 |
| | | this.DisBillEntryList() |
| | | this.refreshHBarCodeFocus() |
| | | this.refreshHBarCodeFocus() |
| | | //清空数量 |
| | | this.hform.HQty = '' |
| | | } else { |
| | | this.refreshHBarCodeFocus() |
| | | CommonUtils.playSound(0); |
| | | this.refreshHBarCodeFocus() |
| | | this.refreshHBarCodeFocus() |
| | | uni.showToast({ |
| | | title: res.data.Message, |
| | | icon: 'none' |
| | |
| | | if (res.data.count == 1) { |
| | | var data = res.data.data |
| | | this.Materlist = data.Materlist |
| | | this.HFIFOList = data.FIFOlist |
| | | if (!data.BarCodeDetailslist[0].HBarCode) { |
| | | this.hform.HBarCode_B = '' |
| | | this.hform.HMaterName_B = '' |
| | |
| | | HMaker: this.hform.HMaker, |
| | | HWhID: sHWHID, |
| | | HSPID: sHSPID, |
| | | HSCWHID: 0, |
| | | HSCSPID: 0, |
| | | HQty: sHQty, |
| | | // HRedBlueFlag: this.hform.HRedBlueFlag, |
| | | // SourceFlag: HSourceFlag, |
| | |
| | | <view :class="tabs == 1 ? 'on':''" @tap="tabs = 1">表头信息</view> |
| | | <view :class="tabs == 2 ? 'on':''" @tap="tabs = 2">物料信息</view> |
| | | <view :class="tabs == 3 ? 'on':''" @tap="tabs = 3">条码信息</view> |
| | | <view :class="tabs == 4 ? 'on':''" @tap="tabs = 4">下架信息</view> |
| | | </view> |
| | | |
| | | <view v-if="tabs == 1"> |
| | |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | <view v-if="tabs == 4"> |
| | | <FIFOListComponentVue :FIFOList="HFIFOList"></FIFOListComponentVue> |
| | | </view> |
| | | |
| | | |
| | | <view class="bottom-btn"> |
| | | <button class="btn-a" size="mini" @tap="submit">提交</button> |
| | |
| | | </template> |
| | | <script> |
| | | import getDateTime from '@/utils/getdateTime.js'; |
| | | import FIFOListComponentVue from "@/components/FIFOListModule/FIFOListComponent.vue" |
| | | import { |
| | | getUserInfo |
| | | } from "@/utils/auth.js"; |
| | |
| | | CommonUtils |
| | | } from "@/utils/common.js" |
| | | export default { |
| | | components: { |
| | | FIFOListComponentVue |
| | | }, |
| | | data() { |
| | | return { |
| | | userInfo: getUserInfo(), |
| | |
| | | HTMQty_B: '', |
| | | HWHName_B: '', |
| | | HSPName_B: '', |
| | | } |
| | | }, |
| | | HFIFOList: [], // 先进先出列表缓存 |
| | | } |
| | | }, |
| | | onLoad(e) { |
| | |
| | | HMaker: this.hform.HMaker, |
| | | HWhID: sHWHID, |
| | | HSPID: sHSPID, |
| | | HSCWHID: 0, |
| | | HSCSPID: 0, |
| | | HQty: sHQty, |
| | | // HRedBlueFlag: this.hform.HRedBlueFlag, |
| | | // SourceFlag: HSourceFlag, |
| | |
| | | this.tabs = 2 |
| | | } else { //物料条码 |
| | | this.tabs = 2 |
| | | |
| | | let exit = false |
| | | let controlState = data.hBackField |
| | | if (controlState == 1) { |
| | | // 启用强控制 禁止 不在先进先出列表中的 物料扫码 |
| | | CommonUtils.showTips({ |
| | | title: "温馨提示", |
| | | message: "物料不在先进先出列表中,禁止出库..." |
| | | }) |
| | | exit = true |
| | | } |
| | | if (controlState == 2) { |
| | | // 不启用强控制 不在先进先出列表中的物料 通过弹窗询问是否需要 出库 |
| | | uni.showModal({ |
| | | title: "温馨提示", |
| | | content: "物料不在先进先出列表中,请确认是否要出库...", |
| | | success: (res) => { |
| | | if (res.confirm) { |
| | | exit = false |
| | | } else if (res.cancel) { |
| | | // 取消出库 |
| | | exit = true |
| | | } |
| | | } |
| | | }) |
| | | |
| | | } |
| | | |
| | | if(exit){ |
| | | return |
| | | } |
| | | |
| | | |
| | | if (!this.hform.HSourceBillNo) { |
| | | this.hform.HSupName = data.hSupNameField |
| | | this.hform.HSupID = data.hSupIDField |
| | |
| | | if (res.data.count == 1) { |
| | | var data = res.data.data |
| | | this.Materlist = data.Materlist |
| | | this.HFIFOList = data.FIFOlist |
| | | if (!data.BarCodeDetailslist[0].HBarCode) { |
| | | this.hform.HMaterName_B = '' |
| | | this.hform.HMaterModel_B = '' |
| | |
| | | <view :class="tabs == 1 ? 'on':''" @tap="tabs = 1">表头信息</view> |
| | | <view :class="tabs == 2 ? 'on':''" @tap="tabs = 2">物料信息</view> |
| | | <view :class="tabs == 3 ? 'on':''" @tap="tabs = 3">条码信息</view> |
| | | <view :class="tabs == 4 ? 'on':''" @tap="tabs = 4">下架信息</view> |
| | | </view> |
| | | |
| | | <view v-if="tabs == 1"> |
| | |
| | | </view> |
| | | </view> |
| | | <label class="checkbox" style="float: right !important;"> |
| | | <checkbox :checked="hform.chkHBarflag" style="transform:scale(0.8)" disabled color="#4f81fc" />条码核对 |
| | | <checkbox :checked="hform.chkHBarflag == 1" style="transform:scale(0.8)" disabled color="#4f81fc" />条码核对 |
| | | </label> |
| | | </view> |
| | | <view v-if="tabs == 2"> |
| | |
| | | </view> |
| | | <view class="over" v-if="Materlist.length == 0">暂无数据</view> |
| | | </view> |
| | | |
| | | <view v-if="tabs == 3"> |
| | | <view class="form-item"> |
| | | <view class="title">条码:</view> |
| | |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view v-if="tabs == 4"> |
| | | <FIFOListComponentVue :FIFOList="HFIFOList"></FIFOListComponentVue> |
| | | </view> |
| | | |
| | | <view class="bottom-btn"> |
| | | <button class="btn-a" size="mini" @tap="submit">提交</button> |
| | |
| | | </template> |
| | | <script> |
| | | import getDateTime from '@/utils/getdateTime.js'; |
| | | import FIFOListComponentVue from "@/components/FIFOListModule/FIFOListComponent.vue" |
| | | import { |
| | | getUserInfo |
| | | } from "@/utils/auth.js"; |
| | |
| | | CommonUtils |
| | | } from "@/utils/common.js" |
| | | export default { |
| | | components: { |
| | | FIFOListComponentVue |
| | | }, |
| | | data() { |
| | | return { |
| | | userInfo: getUserInfo(), |
| | |
| | | HTMQty_B: '', |
| | | HWHName_B: '', |
| | | HSPName_B: '', |
| | | } |
| | | }, |
| | | HFIFOList: [], // 先进先出列表缓存 |
| | | } |
| | | }, |
| | | onLoad(e) { |
| | |
| | | HMaker: this.hform.HMaker, |
| | | HWhID: sHWHID, |
| | | HSPID: sHSPID, |
| | | HSCWHID: 0, |
| | | HSCSPID: 0, |
| | | HQty: sHQty, |
| | | // HRedBlueFlag: this.hform.HRedBlueFlag, |
| | | // SourceFlag: HSourceFlag, |
| | |
| | | this.tabs = 2 |
| | | } else { //物料条码 |
| | | this.tabs = 2 |
| | | |
| | | let exit = false |
| | | let controlState = data.hBackField |
| | | if (controlState == 1) { |
| | | // 启用强控制 禁止 不在先进先出列表中的 物料扫码 |
| | | CommonUtils.showTips({ |
| | | title: "温馨提示", |
| | | message: "物料不在先进先出列表中,禁止出库..." |
| | | }) |
| | | exit = true |
| | | } |
| | | if (controlState == 2) { |
| | | // 不启用强控制 不在先进先出列表中的物料 通过弹窗询问是否需要 出库 |
| | | uni.showModal({ |
| | | title: "温馨提示", |
| | | content: "物料不在先进先出列表中,请确认是否要出库...", |
| | | success: (res) => { |
| | | if (res.confirm) { |
| | | exit = false |
| | | } else if (res.cancel) { |
| | | // 取消出库 |
| | | exit = true |
| | | } |
| | | } |
| | | }) |
| | | |
| | | } |
| | | if(exit){ |
| | | return |
| | | } |
| | | if (!this.hform.HSourceBillNo) { |
| | | this.hform.HSupName = data.hSupNameField |
| | | this.hform.HSupID = data.hSupIDField |
| | |
| | | if (res.data.count == 1) { |
| | | var data = res.data.data |
| | | this.Materlist = data.Materlist |
| | | this.HFIFOList = data.FIFOlist |
| | | if (!data.BarCodeDetailslist[0].HBarCode) { |
| | | this.hform.HMaterName_B = '' |
| | | this.hform.HMaterModel_B = '' |
| | |
| | | // 远程获取语言包并加载 |
| | | import i18n from "@/main"; |
| | | import { CommonUtils } from "./common.js" |
| | | import { |
| | | CommonUtils |
| | | } from "./common.js" |
| | | const MissingKeysMap = new Map() |
| | | |
| | | // 远程获取语言包 |
| | | export async function getLanguagePackJson(language, forceUpdate = false) { |
| | | try { |
| | | const res = await CommonUtils.doRequest2Async({ |
| | | url: '/Xt_grdAlignment_WMES/SelectMESLanguage_JSON', |
| | | data: { |
| | | language: language, |
| | | forceUpdate: forceUpdate |
| | | } |
| | | }) |
| | | let {data, Message, count} = res.data |
| | | if(count == 1) { |
| | | return data |
| | | }else { |
| | | CommonUtils.showTips({ |
| | | title: "温馨提示", |
| | | message: "[i18n]获取语言包失败: " + Message |
| | | }) |
| | | return |
| | | } |
| | | }catch(err) { |
| | | CommonUtils.showTips({ |
| | | title: "温馨提示", |
| | | message: "[i18n]获取语言包失败: " + err.message |
| | | }) |
| | | return |
| | | } |
| | | } |
| | | |
| | | export function addMissingKeyToMap(key) { |
| | | MissingKeysMap.set(key, key) |
| | | } |
| | | |
| | | // 添加缺失字段到远程数据库 |
| | | export async function syncMissingKeyToDB(){ |
| | | |
| | | // 清除缺失字段缓存 |
| | | MissingKeysMap.clear() |
| | | } |