Merge branch 'devlop' of http://47.97.1.152:5880/r/pda-master into devlop
# Conflicts:
# common/request.js
| | |
| | | @import "colorui/icon.css";
|
| | | @import "static/css/wms.css/wms.css";
|
| | | @import "static/css/common.scss";
|
| | | @import "static/family/HarmonyOS_Sans_SC_Bold.ttf"
|
| | | |
| | | |
| | |
|
| | | /*每个页面公共css */
|
| | | body {
|
| | |
| | | color: #606266;
|
| | | font-family: Helvetica Neue, Helvetica, sans-serif;
|
| | | }
|
| | |
|
| | | @font-face {
|
| | | font-family: a1;
|
| | | src: url('static/family/HarmonyOS_Sans_SC_Bold.ttf') format('truetype');
|
| | | |
| | | }
|
| | | @font-face {
|
| | | font-family: a2;
|
| | | src: url('static/family/HarmonyOS_Sans_SC_Black.ttf') format('truetype');
|
| | | |
| | | }
|
| | | @font-face {
|
| | | font-family: a3;
|
| | | src: url('static/family/HarmonyOS_Sans_SC_Light.ttf') format('truetype');
|
| | | |
| | | }
|
| | | @font-face {
|
| | | font-family: a4;
|
| | | src: url('static/family/HarmonyOS_Sans_SC_Regular.ttf') format('truetype');
|
| | | |
| | | }
|
| | | .nav-list {
|
| | | display: flex;
|
| | | flex-wrap: wrap;
|
| | |
| | | const token = uni.getStorageSync('token');
|
| | | // const URL = 'http://47.76.147.249:8080/rsf-server/pda' + url;
|
| | | // const URL = 'http://test.zoneyung.net:8080/rsf-server/pda' + url;
|
| | | const URL = 'http://127.0.0.1:8080/rsf-server/pda' + url;
|
| | | const URL = 'http://192.168.51.35:8085/rsf-server/pda' + url;
|
| | | uni.request({
|
| | | url: URL,
|
| | | data: postData,
|
| New file |
| | |
| | | { |
| | | "app.name": "ZoneYung WMS", |
| | | "locale.auto": "System", |
| | | "locale.en": "English", |
| | | "locale.zh-hans": "简体中文", |
| | | "locale.zh-hant": "繁体中文", |
| | | "locale.ja": "日语", |
| | | "index.title": "Hello i18n", |
| | | "page.login":"Login", |
| | | "page.index":"Index", |
| | | "login":{ |
| | | "login": "login", |
| | | "loging": "loging", |
| | | "user": "username", |
| | | "pwd": "password", |
| | | "inputUser": "Please enter your account", |
| | | "inputPwd":"Please enter your password", |
| | | "remPwd":"remember password" |
| | | }, |
| | | "index":{ |
| | | "GR": "Goods Receipt", |
| | | "palletizing": "Palletizing", |
| | | "palletBuilding":"Pallet Building", |
| | | "inspectionRequest":"Inspection Request", |
| | | "qualityInspection":"Quality Inspection", |
| | | "defectiveMarking":"Defective Marking", |
| | | "manualPutaway":"Manual Putaway", |
| | | "stationBinding":"Station Binding", |
| | | "inboundInitiation":"Inbound Initiation", |
| | | "stationUnbinding":"Station Unbinding", |
| | | "bindAndInbound":"Binding And Inbound", |
| | | "quickPicking":"Quick Picking", |
| | | "wavePick":"Wave Picking", |
| | | "outLogin":"Login Out", |
| | | "language-change-confirm":"chenge", |
| | | "hello":"Hello, welcome to log in to the WMS system!", |
| | | "intro":"Make manufacturing and logistics more efficient", |
| | | "checkOrder":"checkOrder" |
| | | |
| | | |
| | | }, |
| | | "other":{ |
| | | |
| | | } |
| | | } |
| New file |
| | |
| | | import en from './en.json' |
| | | import zhHans from './zh-Hans.json' |
| | | import zhHant from './zh-Hant.json' |
| | | import ja from './ja.json' |
| | | export default { |
| | | en, |
| | | 'zh-Hans': zhHans, |
| | | 'zh-Hant': zhHant, |
| | | ja |
| | | } |
| New file |
| | |
| | | { |
| | | "locale.auto": "システム", |
| | | "locale.en": "英語", |
| | | "locale.zh-hans": "简体中文", |
| | | "locale.zh-hant": "繁体中文", |
| | | "locale.ja": "日语", |
| | | "index.title": "Hello i18n", |
| | | "index.home": "ホーム", |
| | | "index.component": "コンポーネント", |
| | | "index.api": "API", |
| | | "index.schema": "Schema", |
| | | "index.demo": "uni-app globalization", |
| | | "index.demo-description": "ユニフレームワーク、manifest.json、pages.json、タブバー、ページ、コンポーネント、APIを含める、Schema", |
| | | "index.detail": "詳細", |
| | | "index.language": "言語", |
| | | "index.language-info": "設定", |
| | | "index.system-language": "システム言語", |
| | | "index.application-language": "アプリケーション言語", |
| | | "index.language-change-confirm": "この設定を適用すると、アプリが再起動します", |
| | | "api.message": "メッセージ", |
| | | "schema.add": "追加", |
| | | "schema.add-success": "成功を追加" |
| | | } |
| New file |
| | |
| | | { |
| | | "common": { |
| | | "uni.app.quit": "もう一度押すと、アプリケーションが終了します", |
| | | "uni.async.error": "サーバーへの接続がタイムアウトしました。画面をクリックして再試行してください", |
| | | "uni.showActionSheet.cancel": "キャンセル", |
| | | "uni.showToast.unpaired": "使用するには、showToastとhideToastをペアにする必要があることに注意してください", |
| | | "uni.showLoading.unpaired": "使用するには、showLoadingとhideLoadingをペアにする必要があることに注意してください", |
| | | "uni.showModal.cancel": "キャンセル", |
| | | "uni.showModal.confirm": "OK", |
| | | "uni.chooseImage.cancel": "キャンセル", |
| | | "uni.chooseImage.sourceType.album": "アルバムから選択", |
| | | "uni.chooseImage.sourceType.camera": "カメラ", |
| | | "uni.chooseVideo.cancel": "キャンセル", |
| | | "uni.chooseVideo.sourceType.album": "アルバムから選択", |
| | | "uni.chooseVideo.sourceType.camera": "カメラ", |
| | | "uni.previewImage.cancel": "キャンセル", |
| | | "uni.previewImage.button.save": "画像を保存", |
| | | "uni.previewImage.save.success": "画像をアルバムに正常に保存します", |
| | | "uni.previewImage.save.fail": "画像をアルバムに保存できませんでした", |
| | | "uni.setClipboardData.success": "コンテンツがコピーされました", |
| | | "uni.scanCode.title": "スキャンコード", |
| | | "uni.scanCode.album": "アルバム", |
| | | "uni.scanCode.fail": "認識に失敗しました", |
| | | "uni.scanCode.flash.on": "タッチして点灯", |
| | | "uni.scanCode.flash.off": "タップして閉じる", |
| | | "uni.startSoterAuthentication.authContent": "指紋認識...", |
| | | "uni.picker.done": "完了", |
| | | "uni.picker.cancel": "キャンセル", |
| | | "uni.video.danmu": "「弾幕」", |
| | | "uni.video.volume": "ボリューム", |
| | | "uni.button.feedback.title": "質問のフィードバック", |
| | | "uni.button.feedback.send": "送信" |
| | | }, |
| | | "ios": {}, |
| | | "android": {} |
| | | } |
| New file |
| | |
| | | { |
| | | "app.name": "中扬 WMS", |
| | | "locale.auto": "系统", |
| | | "locale.en": "English", |
| | | "locale.zh-hans": "简体中文", |
| | | "locale.zh-hant": "繁体中文", |
| | | "locale.ja": "日语", |
| | | "index.title": "Hello i18n", |
| | | "index.home": "主页", |
| | | "page.login":"登录", |
| | | "page.index":"首页", |
| | | "login":{ |
| | | "login": "登录", |
| | | "loging": "登录中", |
| | | "user": "账号", |
| | | "pwd": "密码", |
| | | "inputUser": "请输入账号", |
| | | "inputPwd":"请输入密码", |
| | | "remPwd":"记住密码" |
| | | }, |
| | | "index":{ |
| | | "GR": "单据收货", |
| | | "palletizing": "单据组托", |
| | | "palletBuilding":"组托解绑", |
| | | "inspectionRequest":"报检", |
| | | "qualityInspection":"质检", |
| | | "defectiveMarking":"不良标记", |
| | | "manualPutaway":"人工上架", |
| | | "stationBinding":"站点绑定", |
| | | "inboundInitiation":"启动入库", |
| | | "stationUnbinding":"站点解绑", |
| | | "bindAndInbound":"绑定&入库", |
| | | "quickPicking":"快速拣货", |
| | | "wavePick":"波次拣货", |
| | | "outLogin":"退出登录", |
| | | "language-change-confirm":"确定切换?", |
| | | "hello":"您好,欢迎登录WMS系统!", |
| | | "intro":"让制造与物流更高效", |
| | | "checkOrder":"盘点" |
| | | |
| | | |
| | | }, |
| | | "other":{ |
| | | "asnNo":"ASN单号" |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | { |
| | | "locale.auto": "系統", |
| | | "locale.en": "English", |
| | | "locale.zh-hans": "简体中文", |
| | | "locale.zh-hant": "繁體中文", |
| | | "locale.ja": "日语", |
| | | "index.title": "Hello i18n", |
| | | "index.home": "主頁", |
| | | "login.login": "登录" |
| | | } |
| | |
| | | import App from './App' |
| | | import messages from './locale/index' |
| | | |
| | | let i18nConfig = { |
| | | locale: uni.getLocale(),// 获取已设置的语言 |
| | | messages |
| | | } |
| | | |
| | | // #ifndef VUE3 |
| | | import Vue from 'vue' |
| | | import VueI18n from 'vue-i18n' |
| | | Vue.use(VueI18n) |
| | | const i18n = new VueI18n(i18nConfig) |
| | | |
| | | Vue.config.productionTip = false |
| | | |
| | | import '@/common/bluetooth.js'; |
| | |
| | | Vue.prototype.$Mock = Mock; |
| | | |
| | | App.mpType = 'app' |
| | | |
| | | |
| | | try { |
| | | function isPromise(obj) { |
| | |
| | | } catch (error) { } |
| | | |
| | | const app = new Vue({ |
| | | i18n, |
| | | ...App |
| | | }) |
| | | app.$mount() |
| | |
| | | |
| | | // #ifdef VUE3 |
| | | import { createSSRApp } from 'vue' |
| | | import { createI18n } from 'vue-i18n' |
| | | const i18n = createI18n(i18nConfig) |
| | | export function createApp() { |
| | | const app = createSSRApp(App) |
| | | app.use(i18n) |
| | | return { |
| | | app |
| | | } |
| | |
| | | {
|
| | | "name": "中扬WMS",
|
| | | "appid": "__UNI__DA5854D",
|
| | | "description": "",
|
| | | "versionName": "20250225A",
|
| | | "versionCode": 146,
|
| | | "transformPx": false,
|
| | | /* 5+App特有相关 */
|
| | | "app-plus": {
|
| | | "usingComponents": true,
|
| | | "nvueStyleCompiler": "uni-app",
|
| | | "compilerVersion": 3,
|
| | | "splashscreen": {
|
| | | "alwaysShowBeforeRender": true,
|
| | | "waiting": true,
|
| | | "autoclose": true,
|
| | | "delay": 0
|
| | | },
|
| | | /* 模块配置 */
|
| | | "modules": {
|
| | | "Bluetooth": {}
|
| | | },
|
| | | /* 应用发布信息 */
|
| | | "distribute": {
|
| | | /* android打包配置 */
|
| | | "android": {
|
| | | "permissions": [
|
| | | "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
|
| | | "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
|
| | | "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
|
| | | "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
|
| | | "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
| | | "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
|
| | | "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
| | | "<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
| | | "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
|
| | | "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
|
| | | "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
|
| | | "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
| | | "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
| | | "<uses-feature android:name=\"android.hardware.camera\"/>",
|
| | | "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
|
| | | ]
|
| | | },
|
| | | /* ios打包配置 */
|
| | | "ios": {
|
| | | "dSYMs": false
|
| | | },
|
| | | /* SDK配置 */
|
| | | "sdkConfigs": {
|
| | | "ad": {}
|
| | | },
|
| | | "icons": {
|
| | | "android": {
|
| | | "hdpi": "unpackage/res/icons/72x72.png",
|
| | | "xhdpi": "unpackage/res/icons/96x96.png",
|
| | | "xxhdpi": "unpackage/res/icons/144x144.png",
|
| | | "xxxhdpi": "unpackage/res/icons/192x192.png"
|
| | | },
|
| | | "ios": {
|
| | | "appstore": "unpackage/res/icons/1024x1024.png",
|
| | | "ipad": {
|
| | | "app": "unpackage/res/icons/76x76.png",
|
| | | "app@2x": "unpackage/res/icons/152x152.png",
|
| | | "notification": "unpackage/res/icons/20x20.png",
|
| | | "notification@2x": "unpackage/res/icons/40x40.png",
|
| | | "proapp@2x": "unpackage/res/icons/167x167.png",
|
| | | "settings": "unpackage/res/icons/29x29.png",
|
| | | "settings@2x": "unpackage/res/icons/58x58.png",
|
| | | "spotlight": "unpackage/res/icons/40x40.png",
|
| | | "spotlight@2x": "unpackage/res/icons/80x80.png"
|
| | | },
|
| | | "iphone": {
|
| | | "app@2x": "unpackage/res/icons/120x120.png",
|
| | | "app@3x": "unpackage/res/icons/180x180.png",
|
| | | "notification@2x": "unpackage/res/icons/40x40.png",
|
| | | "notification@3x": "unpackage/res/icons/60x60.png",
|
| | | "settings@2x": "unpackage/res/icons/58x58.png",
|
| | | "settings@3x": "unpackage/res/icons/87x87.png",
|
| | | "spotlight@2x": "unpackage/res/icons/80x80.png",
|
| | | "spotlight@3x": "unpackage/res/icons/120x120.png"
|
| | | }
|
| | | }
|
| | | }
|
| | | },
|
| | | "nativePlugins": {
|
| | | "Hanyin-Plugin": {
|
| | | "__plugin_info__": {
|
| | | "name": "蓝牙连接汉印便携式打印机",
|
| | | "description": "app蓝牙连接汉印便携式打印机面单打印-----测试型号: HM-A300",
|
| | | "platforms": "Android",
|
| | | "url": "https://ext.dcloud.net.cn/plugin?id=2731",
|
| | | "android_package_name": "uni.UNIDA5854D",
|
| | | "ios_bundle_id": "",
|
| | | "isCloud": true,
|
| | | "bought": 1,
|
| | | "pid": "2731",
|
| | | "parameters": {}
|
| | | }
|
| | | }
|
| | | }
|
| | | },
|
| | | /* 快应用特有相关 */
|
| | | "quickapp": {},
|
| | | /* 小程序特有相关 */
|
| | | "mp-weixin": {
|
| | | "appid": "",
|
| | | "setting": {
|
| | | "urlCheck": false
|
| | | },
|
| | | "usingComponents": true
|
| | | },
|
| | | "mp-alipay": {
|
| | | "usingComponents": true
|
| | | },
|
| | | "mp-baidu": {
|
| | | "usingComponents": true
|
| | | },
|
| | | "mp-toutiao": {
|
| | | "usingComponents": true
|
| | | },
|
| | | "uniStatistics": {
|
| | | "enable": false
|
| | | },
|
| | | "vueVersion": "2",
|
| | | "h5": {
|
| | | "devServer": {
|
| | | "port": 8133
|
| | | }
|
| | | }
|
| | | } |
| | | { |
| | | "name" : "中扬wms", |
| | | "appid" : "__UNI__DA5854D", |
| | | "description" : "", |
| | | "versionName" : "20250613", |
| | | "versionCode" : 100, |
| | | "transformPx" : false, |
| | | /* 5+App特有相关 */ |
| | | "app-plus" : { |
| | | "usingComponents" : true, |
| | | "nvueStyleCompiler" : "uni-app", |
| | | "compilerVersion" : 3, |
| | | "splashscreen" : { |
| | | "alwaysShowBeforeRender" : true, |
| | | "waiting" : true, |
| | | "autoclose" : true, |
| | | "delay" : 0 |
| | | }, |
| | | /* 模块配置 */ |
| | | "modules" : { |
| | | "Bluetooth" : {} |
| | | }, |
| | | /* 应用发布信息 */ |
| | | "distribute" : { |
| | | /* android打包配置 */ |
| | | "android" : { |
| | | "permissions" : [ |
| | | "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>", |
| | | "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>", |
| | | "<uses-permission android:name=\"android.permission.VIBRATE\"/>", |
| | | "<uses-permission android:name=\"android.permission.READ_LOGS\"/>", |
| | | "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>", |
| | | "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>", |
| | | "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>", |
| | | "<uses-permission android:name=\"android.permission.CAMERA\"/>", |
| | | "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>", |
| | | "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>", |
| | | "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>", |
| | | "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>", |
| | | "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>", |
| | | "<uses-feature android:name=\"android.hardware.camera\"/>", |
| | | "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>" |
| | | ], |
| | | "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ] |
| | | }, |
| | | /* ios打包配置 */ |
| | | "ios" : { |
| | | "dSYMs" : false |
| | | }, |
| | | /* SDK配置 */ |
| | | "sdkConfigs" : { |
| | | "ad" : {} |
| | | }, |
| | | "icons" : { |
| | | "android" : { |
| | | "hdpi" : "unpackage/res/icons/72x72.png", |
| | | "xhdpi" : "unpackage/res/icons/96x96.png", |
| | | "xxhdpi" : "unpackage/res/icons/144x144.png", |
| | | "xxxhdpi" : "unpackage/res/icons/192x192.png" |
| | | }, |
| | | "ios" : { |
| | | "appstore" : "unpackage/res/icons/1024x1024.png", |
| | | "ipad" : { |
| | | "app" : "unpackage/res/icons/76x76.png", |
| | | "app@2x" : "unpackage/res/icons/152x152.png", |
| | | "notification" : "unpackage/res/icons/20x20.png", |
| | | "notification@2x" : "unpackage/res/icons/40x40.png", |
| | | "proapp@2x" : "unpackage/res/icons/167x167.png", |
| | | "settings" : "unpackage/res/icons/29x29.png", |
| | | "settings@2x" : "unpackage/res/icons/58x58.png", |
| | | "spotlight" : "unpackage/res/icons/40x40.png", |
| | | "spotlight@2x" : "unpackage/res/icons/80x80.png" |
| | | }, |
| | | "iphone" : { |
| | | "app@2x" : "unpackage/res/icons/120x120.png", |
| | | "app@3x" : "unpackage/res/icons/180x180.png", |
| | | "notification@2x" : "unpackage/res/icons/40x40.png", |
| | | "notification@3x" : "unpackage/res/icons/60x60.png", |
| | | "settings@2x" : "unpackage/res/icons/58x58.png", |
| | | "settings@3x" : "unpackage/res/icons/87x87.png", |
| | | "spotlight@2x" : "unpackage/res/icons/80x80.png", |
| | | "spotlight@3x" : "unpackage/res/icons/120x120.png" |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "nativePlugins" : { |
| | | "Hanyin-Plugin" : { |
| | | "__plugin_info__" : { |
| | | "name" : "蓝牙连接汉印便携式打印机", |
| | | "description" : "app蓝牙连接汉印便携式打印机面单打印-----测试型号: HM-A300", |
| | | "platforms" : "Android", |
| | | "url" : "https://ext.dcloud.net.cn/plugin?id=2731", |
| | | "android_package_name" : "uni.UNIDA5854D", |
| | | "ios_bundle_id" : "", |
| | | "isCloud" : true, |
| | | "bought" : 1, |
| | | "pid" : "2731", |
| | | "parameters" : {} |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | /* 快应用特有相关 */ |
| | | "quickapp" : {}, |
| | | /* 小程序特有相关 */ |
| | | "mp-weixin" : { |
| | | "appid" : "", |
| | | "setting" : { |
| | | "urlCheck" : false |
| | | }, |
| | | "usingComponents" : true |
| | | }, |
| | | "mp-alipay" : { |
| | | "usingComponents" : true |
| | | }, |
| | | "mp-baidu" : { |
| | | "usingComponents" : true |
| | | }, |
| | | "mp-toutiao" : { |
| | | "usingComponents" : true |
| | | }, |
| | | "uniStatistics" : { |
| | | "enable" : false |
| | | }, |
| | | "vueVersion" : "2", |
| | | "h5" : { |
| | | "devServer" : { |
| | | "port" : 8133 |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | { |
| | | "name": "pda-master", |
| | | "lockfileVersion": 3, |
| | | "requires": true, |
| | | "packages": { |
| | | "": { |
| | | "dependencies": { |
| | | "vue-i18n": "^8.2.1" |
| | | } |
| | | }, |
| | | "node_modules/vue-i18n": { |
| | | "version": "8.28.2", |
| | | "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.28.2.tgz", |
| | | "integrity": "sha512-C5GZjs1tYlAqjwymaaCPDjCyGo10ajUphiwA922jKt9n7KPpqR7oM1PCwYzhB/E7+nT3wfdG3oRre5raIT1rKA==", |
| | | "deprecated": "Vue I18n v8.x has reached EOL and is no longer actively maintained. About maintenance status, see https://vue-i18n.intlify.dev/guide/maintenance.html", |
| | | "license": "MIT" |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | { |
| | | "dependencies": { |
| | | "vue-i18n": "^8.2.1" |
| | | } |
| | | } |
| | |
| | | {
|
| | | "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
|
| | | {
|
| | | "path": "pages/login/login",
|
| | | "path": "pages/login/index",
|
| | | "style": {
|
| | | "navigationBarTitleText": "登 录"
|
| | | "navigationBarTitleText": "%page.login%"
|
| | | }
|
| | | },
|
| | | {
|
| | | "path": "pages/home/index",
|
| | | "style": {
|
| | | "navigationBarTitleText": "首页"
|
| | | "navigationBarTitleText": "%page.index%"
|
| | | }
|
| | | },
|
| | | {
|
| | | "path": "pages/outbound/wavePick",
|
| | | "style": {
|
| | | "navigationBarTitleText": "波次拣货"
|
| | | }
|
| | | },
|
| | | {
|
| | | "path": "pages/check/checkOrder",
|
| | | "style": {
|
| | | "navigationBarTitleText": "盘点单"
|
| | | }
|
| | | },
|
| | | {
|
| | | "path": "pages/check/checkOrderItem",
|
| | | "style": {
|
| | | "navigationBarTitleText": "初盘"
|
| | | }
|
| | | },
|
| | | {
|
| | | "path": "pages/check/firstCheck",
|
| | | "style": {
|
| | | "navigationBarTitleText": "初盘"
|
| | | }
|
| | | },
|
| | | {
|
| | | "path": "pages/outbound/wavePickItem",
|
| | | "style": {
|
| | | "navigationBarTitleText": "波次拣货"
|
| | | }
|
| | | },
|
| | | {
|
| | |
| | | {
|
| | | "path": "pages/rece/other",
|
| | | "style": {
|
| | | "navigationBarTitleText": "其他收货"
|
| | | "navigationBarTitleText": "单据收货"
|
| | | }
|
| | | },
|
| | | {
|
| | | "path": "pages/listing/disc",
|
| | | "style": {
|
| | | "navigationBarTitleText": "组盘"
|
| | | }
|
| | | },
|
| | | {
|
| | | "path": "pages/AGV/AGVStaBind",
|
| | | "style": {
|
| | | "navigationBarTitleText": "AGV站点绑定"
|
| | | }
|
| | | },
|
| | | {
|
| | | "path": "pages/AGV/StaUnBind",
|
| | | "style": {
|
| | | "navigationBarTitleText": "AGV站点解绑"
|
| | | }
|
| | | },
|
| | | {
|
| | | "path": "pages/AGV/StartInTask",
|
| | | "style": {
|
| | | "navigationBarTitleText": "AGV启动入库"
|
| | | }
|
| | | },
|
| | | {
|
| | | "path": "pages/AGV/BindAndInTask",
|
| | | "style": {
|
| | | "navigationBarTitleText": "AGV绑定&入库"
|
| | | }
|
| | | },
|
| | | {
|
| | | "path": "pages/listing/matnrPalletising",
|
| | | "style": {
|
| | | "navigationBarTitleText": "单据组托"
|
| | | }
|
| | | },
|
| | | {
|
| | | "path": "pages/listing/itemSelect",
|
| | | "style": {
|
| | | "navigationBarTitleText": "选择物料",
|
| | | "enablePullDownRefresh": false
|
| | | }
|
| | | },
|
| | | {
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | ],
|
| | | ,{
|
| | | "path" : "pages/listing/unPakin",
|
| | | "style" : |
| | | { |
| | | "navigationBarTitleText": "组托解绑" |
| | | } |
| | | |
| | | }
|
| | | ],
|
| | | "globalStyle": {
|
| | | "navigationBarTextStyle": "black",
|
| | | "navigationBarTitleText": "uni-app",
|
| New file |
| | |
| | | <template> |
| | | <view class="has-foot"> |
| | | <form> |
| | | <view class="cu-form-group margin-top"> |
| | | <view class="title">容器编号</view> |
| | | <input placeholder="请扫容器编号" v-model="container"></input> |
| | | <text class='cuIcon-search text-blue' @click="search"></text> |
| | | </view> |
| | | |
| | | <view class="cu-form-group "> |
| | | <view class="title">接驳站</view> |
| | | <input placeholder="请扫描接驳站条码" v-model="barcode" ></input> |
| | | </view> |
| | | </form> |
| | | |
| | | |
| | | |
| | | <view class="cu-list det menu sm-border padding"> |
| | | <block v-for="(item, index) in list" :key="index"> |
| | | <view class="cu-bar bg-white solid-bottom margin-top-sm"> |
| | | <view class="action"> |
| | | <view class="index"> |
| | | {{index+1}} |
| | | </view> |
| | | <view class="text-blue"> |
| | | {{`${item.maktx}`}} |
| | | </view> |
| | | </view> |
| | | <!-- <view class="action" > |
| | | <text @click="remove(index)" class="cuIcon-close text-red" style="font-size: 24px;"></text> |
| | | </view> --> |
| | | </view> |
| | | |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">ASN:</text> |
| | | </view> |
| | | <view class="action"> |
| | | <text class="text-grey ">{{item.asnCode}}</text> |
| | | </view> |
| | | </view> |
| | | |
| | | |
| | | |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">批次:</text> |
| | | </view> |
| | | <view class="action"> |
| | | <text class="text-grey ">{{item.batch}}</text> |
| | | </view> |
| | | </view> |
| | | |
| | | |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">收货数量:</text> |
| | | </view> |
| | | <view class="action"> |
| | | <text class="text-grey ">{{item.anfme}}</text> |
| | | </view> |
| | | </view> |
| | | |
| | | </block> |
| | | </view> |
| | | |
| | | |
| | | <view class="cu-bar btn-group foot"> |
| | | <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button> |
| | | <button class="cu-btn bg-blue shadow-blur" @click="confirm">绑定</button> |
| | | </view> |
| | | |
| | | <uni-popup ref="popup" class="cu-popup"> |
| | | <view class="popup-content"> |
| | | <view class="head"> |
| | | <text>推荐</text> |
| | | <text class='cuIcon-close text-red close' @click="close"></text> |
| | | </view> |
| | | |
| | | <div class="body"> |
| | | <view class="cu-list grid col-3 no-border"> |
| | | <view class="item" v-for="el in range"> |
| | | <view class="cu-btn round sm" :class="[el===curCode?'bg-blue':'line-blue']" |
| | | @click="itemChange(el)">{{el}}</view> |
| | | </view> |
| | | </view> |
| | | </div> |
| | | |
| | | <view class="cu-bar btn-group "> |
| | | <button class="cu-btn bg-blue shadow-blur" @click="popupSubmit">提交</button> |
| | | </view> |
| | | </view> |
| | | </uni-popup> |
| | | |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | request |
| | | } from '../../common/request.js' |
| | | import { |
| | | mapState, |
| | | mapMutations, |
| | | mapActions, |
| | | mapGetters |
| | | } from 'vuex'; |
| | | export default { |
| | | data() { |
| | | return { |
| | | barcode: '', |
| | | areaName: '', |
| | | locCode: '', |
| | | container: '', |
| | | list: [], |
| | | range: [], |
| | | curCode: '' |
| | | } |
| | | }, |
| | | computed: { |
| | | ...mapState('user', ['dynamicFields']), |
| | | }, |
| | | mounted() {}, |
| | | methods: { |
| | | async search() { |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/stock/operate/list', { |
| | | barcode: this.container, |
| | | sta: this.barcode |
| | | }) |
| | | if (code === 200) { |
| | | // const find = this.list.find(el => el.id === data.id); |
| | | // !find && |
| | | this.list = data |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | }) |
| | | } |
| | | }, |
| | | |
| | | remove(index) { |
| | | this.list.splice(index, 1); |
| | | }, |
| | | clear() { |
| | | this.list = [] |
| | | |
| | | this.container = '' |
| | | this.barcode = '' |
| | | }, |
| | | |
| | | open() { |
| | | this.$refs.popup.open() |
| | | }, |
| | | |
| | | close() { |
| | | this.$refs.popup.close() |
| | | }, |
| | | |
| | | popupSubmit() { |
| | | this.$refs.popup.close() |
| | | }, |
| | | itemChange(el) { |
| | | this.curCode = el |
| | | }, |
| | | |
| | | async confirm() { |
| | | if(this.container === '' || this.container ===null){ |
| | | uni.showToast({ |
| | | title: "容器码不能为空", |
| | | icon: "none", |
| | | }) |
| | | return ; |
| | | } |
| | | if(this.barcode === '' || this.barcode ===null){ |
| | | uni.showToast({ |
| | | title: "接驳站码不能为空", |
| | | icon: "none", |
| | | }) |
| | | return ; |
| | | } |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/AGV/staBind',{ |
| | | barcode: this.container, |
| | | sta: this.barcode |
| | | } |
| | | ) |
| | | if (code === 200) { |
| | | uni.showToast({ |
| | | title: '绑定成功' |
| | | }) |
| | | this.clear() |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | }) |
| | | } |
| | | |
| | | |
| | | |
| | | }, |
| | | |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | .index { |
| | | border: 1px solid #e54d42; |
| | | color: #e54d42; |
| | | border-radius: 50%; |
| | | display: block; |
| | | width: 50rpx; |
| | | height: 50rpx; |
| | | line-height: 48rpx; |
| | | text-align: center; |
| | | margin-right: 20rpx; |
| | | font-size: 30rpx; |
| | | } |
| | | |
| | | .text-blue { |
| | | color: #0081ff !important; |
| | | |
| | | } |
| | | |
| | | .item { |
| | | position: relative; |
| | | display: flex; |
| | | min-height: 80upx; |
| | | align-items: center; |
| | | } |
| | | |
| | | .uni-file-picker { |
| | | width: 100%; |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .uni-select__selector { |
| | | z-index: 999; |
| | | } |
| | | |
| | | .tj { |
| | | height: auto; |
| | | padding: 6px 8px; |
| | | display: inline-block; |
| | | border-radius: 6px; |
| | | } |
| | | |
| | | .item { |
| | | display: flex; |
| | | justify-content: center; |
| | | } |
| | | |
| | | .item .cu-btn { |
| | | font-size: 26upx; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <view class="has-foot"> |
| | | <form> |
| | | <view class="cu-form-group "> |
| | | <view class="title">接驳站</view> |
| | | <input placeholder="请扫描接驳站条码" v-model="barcode" ></input> |
| | | <text class='cuIcon-search text-blue' @click="search"></text> |
| | | </view> |
| | | <view class="cu-form-group "> |
| | | <view class="title">容器码</view> |
| | | <input placeholder="请扫描容器码" v-model="container" ></input> |
| | | <text class='cuIcon-search text-blue' @click="getList"></text> |
| | | </view> |
| | | <view class="cu-form-group"> |
| | | <view class="title">目标库区</view> |
| | | <view style="width: 75%;"> |
| | | <uni-data-select style="min-width: 50%; max-width: 100%;" v-model="whAreaId" :localdata="range" |
| | | placement="bottom" @change="selChange"></uni-data-select> |
| | | </view> |
| | | </view> |
| | | </form> |
| | | |
| | | |
| | | |
| | | <view class="cu-list det menu sm-border padding"> |
| | | <block v-for="(item, index) in list" :key="index"> |
| | | <view class="cu-bar bg-white solid-bottom margin-top-sm"> |
| | | <view class="action"> |
| | | <view class="index"> |
| | | {{index+1}} |
| | | </view> |
| | | <view class="text-blue"> |
| | | 编码: |
| | | {{`${item.matnrCode}`}} |
| | | </view> |
| | | </view> |
| | | <!-- <view class="action" > |
| | | <text @click="remove(index)" class="cuIcon-close text-red" style="font-size: 24px;"></text> |
| | | </view> --> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">名称:</text> |
| | | <text class="text-grey ">{{item.maktx}}</text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">ASN:</text> |
| | | </view> |
| | | <view class="action"> |
| | | <text class="text-grey ">{{item.asnCode}}</text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">批次:</text> |
| | | </view> |
| | | <view class="action"> |
| | | <text class="text-grey ">{{item.batch}}</text> |
| | | </view> |
| | | </view> |
| | | |
| | | |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">收货数量:</text> |
| | | </view> |
| | | <view class="action"> |
| | | <text class="text-grey ">{{item.anfme}}</text> |
| | | </view> |
| | | </view> |
| | | |
| | | </block> |
| | | </view> |
| | | |
| | | |
| | | <view class="cu-bar btn-group foot"> |
| | | <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button> |
| | | <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">启动</button> |
| | | </view> |
| | | |
| | | |
| | | |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | request |
| | | } from '../../common/request.js' |
| | | import { |
| | | mapState, |
| | | mapMutations, |
| | | mapActions, |
| | | mapGetters |
| | | } from 'vuex'; |
| | | export default { |
| | | data() { |
| | | return { |
| | | barcode: '', |
| | | areaName: '', |
| | | locCode: '', |
| | | container: '', |
| | | list: [], |
| | | range: [], |
| | | curCode: '', |
| | | whAreaId:'', |
| | | repeatClick: false, |
| | | |
| | | } |
| | | }, |
| | | computed: { |
| | | ...mapState('user', ['dynamicFields']), |
| | | }, |
| | | mounted() {}, |
| | | methods: { |
| | | selChange(val) { |
| | | uni.setStorageSync('whAreaId', val) |
| | | }, |
| | | async search() { |
| | | let that = this |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/staMsg/select', { |
| | | sta: this.barcode |
| | | }) |
| | | if (code === 200) { |
| | | that.range = data.warehouseAreasList.map(item => ({ |
| | | value: item.id, |
| | | text: item.name |
| | | })); |
| | | that.whAreaId = data.area |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | }) |
| | | } |
| | | }, |
| | | async getList() { |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/asnOrderItem/container', { |
| | | barcode: this.container, |
| | | type: 'unbind' |
| | | }) |
| | | if (code === 200) { |
| | | for (var i = 0; i < data.length; i++) { |
| | | data[i].receiptQty = 0; |
| | | } |
| | | this.list = data |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | } |
| | | }, |
| | | remove(index) { |
| | | this.list.splice(index, 1); |
| | | }, |
| | | clear() { |
| | | this.list = [] |
| | | this.range = [] |
| | | this.container = '' |
| | | this.barcode = '' |
| | | this.whAreaId = '' |
| | | }, |
| | | |
| | | open() { |
| | | this.$refs.popup.open() |
| | | }, |
| | | |
| | | close() { |
| | | this.$refs.popup.close() |
| | | }, |
| | | |
| | | popupSubmit() { |
| | | this.$refs.popup.close() |
| | | }, |
| | | itemChange(el) { |
| | | this.curCode = el |
| | | }, |
| | | |
| | | async confirm() { |
| | | if(this.barcode === '' || this.barcode ===null){ |
| | | uni.showToast({ |
| | | title: "接驳站码不能为空", |
| | | icon: "none", |
| | | }) |
| | | return ; |
| | | } |
| | | if(this.whAreaId === '' || this.whAreaId ===null){ |
| | | uni.showToast({ |
| | | title: "目标库区不能为空", |
| | | icon: "none", |
| | | }) |
| | | return ; |
| | | } |
| | | if(this.container === '' || this.container ===null){ |
| | | uni.showToast({ |
| | | title: "容器码不能为空", |
| | | icon: "none", |
| | | }) |
| | | return ; |
| | | } |
| | | this.repeatClick = true |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/AGV/bindAndIn/start',{ |
| | | sta: this.barcode, |
| | | area: this.whAreaId, |
| | | barcode : this.container |
| | | } |
| | | ) |
| | | if (code === 200) { |
| | | uni.showToast({ |
| | | title: '启动成功' |
| | | }) |
| | | this.clear() |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | }) |
| | | } |
| | | this.repeatClick = false |
| | | |
| | | |
| | | }, |
| | | |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | .index { |
| | | border: 1px solid #e54d42; |
| | | color: #e54d42; |
| | | border-radius: 50%; |
| | | display: block; |
| | | width: 50rpx; |
| | | height: 50rpx; |
| | | line-height: 48rpx; |
| | | text-align: center; |
| | | margin-right: 20rpx; |
| | | font-size: 30rpx; |
| | | } |
| | | |
| | | .text-blue { |
| | | color: #0081ff !important; |
| | | |
| | | } |
| | | |
| | | .item { |
| | | position: relative; |
| | | display: flex; |
| | | min-height: 80upx; |
| | | align-items: center; |
| | | } |
| | | |
| | | .uni-file-picker { |
| | | width: 100%; |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .uni-select__selector { |
| | | z-index: 999; |
| | | } |
| | | |
| | | .tj { |
| | | height: auto; |
| | | padding: 6px 8px; |
| | | display: inline-block; |
| | | border-radius: 6px; |
| | | } |
| | | |
| | | .item { |
| | | display: flex; |
| | | justify-content: center; |
| | | } |
| | | |
| | | .item .cu-btn { |
| | | font-size: 26upx; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <view class="has-foot"> |
| | | <form> |
| | | <view class="cu-form-group "> |
| | | <view class="title">接驳站</view> |
| | | <input placeholder="请扫描接驳站条码" v-model="barcode" ></input> |
| | | <text class='cuIcon-search text-blue' @click="search"></text> |
| | | </view> |
| | | </form> |
| | | <view class="flex solid-bottom padding-sm justify-between"> |
| | | <view class="text-blue">容器码:{{container}}</view> |
| | | |
| | | </view> |
| | | |
| | | |
| | | |
| | | <view class="cu-list det menu sm-border padding"> |
| | | <block v-for="(item, index) in list" :key="index"> |
| | | <view class="cu-bar bg-white solid-bottom margin-top-sm"> |
| | | <view class="action"> |
| | | <view class="index"> |
| | | {{index+1}} |
| | | </view> |
| | | <view class="text-blue"> |
| | | {{`${item.maktx}`}} |
| | | </view> |
| | | </view> |
| | | <!-- <view class="action" > |
| | | <text @click="remove(index)" class="cuIcon-close text-red" style="font-size: 24px;"></text> |
| | | </view> --> |
| | | </view> |
| | | |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">ASN:</text> |
| | | </view> |
| | | <view class="action"> |
| | | <text class="text-grey ">{{item.asnCode}}</text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">批次:</text> |
| | | </view> |
| | | <view class="action"> |
| | | <text class="text-grey ">{{item.batch}}</text> |
| | | </view> |
| | | </view> |
| | | |
| | | |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">收货数量:</text> |
| | | </view> |
| | | <view class="action"> |
| | | <text class="text-grey ">{{item.anfme}}</text> |
| | | </view> |
| | | </view> |
| | | |
| | | </block> |
| | | </view> |
| | | |
| | | |
| | | <view class="cu-bar btn-group foot"> |
| | | <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button> |
| | | <button class="cu-btn bg-blue shadow-blur" @click="confirm">解绑</button> |
| | | </view> |
| | | |
| | | <uni-popup ref="popup" class="cu-popup"> |
| | | <view class="popup-content"> |
| | | <view class="head"> |
| | | <text>推荐</text> |
| | | <text class='cuIcon-close text-red close' @click="close"></text> |
| | | </view> |
| | | |
| | | <div class="body"> |
| | | <view class="cu-list grid col-3 no-border"> |
| | | <view class="item" v-for="el in range"> |
| | | <view class="cu-btn round sm" :class="[el===curCode?'bg-blue':'line-blue']" |
| | | @click="itemChange(el)">{{el}}</view> |
| | | </view> |
| | | </view> |
| | | </div> |
| | | |
| | | <view class="cu-bar btn-group "> |
| | | <button class="cu-btn bg-blue shadow-blur" @click="popupSubmit">提交</button> |
| | | </view> |
| | | </view> |
| | | </uni-popup> |
| | | |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | request |
| | | } from '../../common/request.js' |
| | | import { |
| | | mapState, |
| | | mapMutations, |
| | | mapActions, |
| | | mapGetters |
| | | } from 'vuex'; |
| | | export default { |
| | | data() { |
| | | return { |
| | | barcode: '', |
| | | areaName: '', |
| | | locCode: '', |
| | | container: '', |
| | | list: [], |
| | | range: [], |
| | | curCode: '' |
| | | } |
| | | }, |
| | | computed: { |
| | | ...mapState('user', ['dynamicFields']), |
| | | }, |
| | | mounted() {}, |
| | | methods: { |
| | | async search() { |
| | | let that = this |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/staBind/list', { |
| | | sta: this.barcode |
| | | }) |
| | | if (code === 200) { |
| | | if(data.list.length >0){ |
| | | that.container = data.barcode |
| | | that.list = data.list |
| | | } |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | }) |
| | | } |
| | | }, |
| | | |
| | | remove(index) { |
| | | this.list.splice(index, 1); |
| | | }, |
| | | clear() { |
| | | this.list = [] |
| | | |
| | | this.container = '' |
| | | this.barcode = '' |
| | | }, |
| | | |
| | | open() { |
| | | this.$refs.popup.open() |
| | | }, |
| | | |
| | | close() { |
| | | this.$refs.popup.close() |
| | | }, |
| | | |
| | | popupSubmit() { |
| | | this.$refs.popup.close() |
| | | }, |
| | | itemChange(el) { |
| | | this.curCode = el |
| | | }, |
| | | |
| | | async confirm() { |
| | | if(this.barcode === '' || this.barcode ===null){ |
| | | uni.showToast({ |
| | | title: "接驳站码不能为空", |
| | | icon: "none", |
| | | }) |
| | | return ; |
| | | } |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/AGV/staUnBind',{ |
| | | sta: this.barcode |
| | | } |
| | | ) |
| | | if (code === 200) { |
| | | uni.showToast({ |
| | | title: '解绑成功' |
| | | }) |
| | | this.clear() |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | }) |
| | | } |
| | | |
| | | |
| | | |
| | | }, |
| | | |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | .index { |
| | | border: 1px solid #e54d42; |
| | | color: #e54d42; |
| | | border-radius: 50%; |
| | | display: block; |
| | | width: 50rpx; |
| | | height: 50rpx; |
| | | line-height: 48rpx; |
| | | text-align: center; |
| | | margin-right: 20rpx; |
| | | font-size: 30rpx; |
| | | } |
| | | |
| | | .text-blue { |
| | | color: #0081ff !important; |
| | | |
| | | } |
| | | |
| | | .item { |
| | | position: relative; |
| | | display: flex; |
| | | min-height: 80upx; |
| | | align-items: center; |
| | | } |
| | | |
| | | .uni-file-picker { |
| | | width: 100%; |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .uni-select__selector { |
| | | z-index: 999; |
| | | } |
| | | |
| | | .tj { |
| | | height: auto; |
| | | padding: 6px 8px; |
| | | display: inline-block; |
| | | border-radius: 6px; |
| | | } |
| | | |
| | | .item { |
| | | display: flex; |
| | | justify-content: center; |
| | | } |
| | | |
| | | .item .cu-btn { |
| | | font-size: 26upx; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <view class="has-foot"> |
| | | <form> |
| | | <view class="cu-form-group "> |
| | | <view class="title">接驳站</view> |
| | | <input placeholder="请扫描接驳站条码" v-model="barcode" ></input> |
| | | <text class='cuIcon-search text-blue' @click="search"></text> |
| | | </view> |
| | | <view class="cu-form-group"> |
| | | <view class="title">目标库区</view> |
| | | <view style="width: 75%;"> |
| | | <uni-data-select style="min-width: 50%; max-width: 100%;" v-model="whAreaId" :localdata="range" |
| | | placement="bottom" @change="selChange"></uni-data-select> |
| | | </view> |
| | | </view> |
| | | </form> |
| | | <view class="flex solid-bottom padding-sm justify-between"> |
| | | <view class="text-blue">容器码:{{container}}</view> |
| | | |
| | | </view> |
| | | |
| | | |
| | | |
| | | <view class="cu-list det menu sm-border padding"> |
| | | <block v-for="(item, index) in list" :key="index"> |
| | | <view class="cu-bar bg-white solid-bottom margin-top-sm"> |
| | | <view class="action"> |
| | | <view class="index"> |
| | | {{index+1}} |
| | | </view> |
| | | <view class="text-blue"> |
| | | {{`${item.maktx}`}} |
| | | </view> |
| | | </view> |
| | | <!-- <view class="action" > |
| | | <text @click="remove(index)" class="cuIcon-close text-red" style="font-size: 24px;"></text> |
| | | </view> --> |
| | | </view> |
| | | |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">ASN:</text> |
| | | </view> |
| | | <view class="action"> |
| | | <text class="text-grey ">{{item.asnCode}}</text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">批次:</text> |
| | | </view> |
| | | <view class="action"> |
| | | <text class="text-grey ">{{item.batch}}</text> |
| | | </view> |
| | | </view> |
| | | |
| | | |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">收货数量:</text> |
| | | </view> |
| | | <view class="action"> |
| | | <text class="text-grey ">{{item.anfme}}</text> |
| | | </view> |
| | | </view> |
| | | |
| | | </block> |
| | | </view> |
| | | |
| | | |
| | | <view class="cu-bar btn-group foot"> |
| | | <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button> |
| | | <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">启动</button> |
| | | </view> |
| | | |
| | | |
| | | |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | request |
| | | } from '../../common/request.js' |
| | | import { |
| | | mapState, |
| | | mapMutations, |
| | | mapActions, |
| | | mapGetters |
| | | } from 'vuex'; |
| | | export default { |
| | | data() { |
| | | return { |
| | | barcode: '', |
| | | areaName: '', |
| | | locCode: '', |
| | | container: '', |
| | | list: [], |
| | | range: [], |
| | | curCode: '', |
| | | whAreaId:'', |
| | | repeatClick: false, |
| | | |
| | | } |
| | | }, |
| | | computed: { |
| | | ...mapState('user', ['dynamicFields']), |
| | | }, |
| | | mounted() {}, |
| | | methods: { |
| | | selChange(val) { |
| | | uni.setStorageSync('whAreaId', val) |
| | | }, |
| | | async search() { |
| | | let that = this |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/staBind/list', { |
| | | sta: this.barcode |
| | | }) |
| | | if (code === 200) { |
| | | if(data.list.length >0){ |
| | | that.container = data.barcode |
| | | that.list = data.list |
| | | } |
| | | that.range = data.warehouseAreasList.map(item => ({ |
| | | value: item.id, |
| | | text: item.name |
| | | })); |
| | | that.whAreaId = data.area |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | }) |
| | | } |
| | | }, |
| | | |
| | | remove(index) { |
| | | this.list.splice(index, 1); |
| | | }, |
| | | clear() { |
| | | this.list = [] |
| | | |
| | | this.container = '' |
| | | this.barcode = '' |
| | | }, |
| | | |
| | | open() { |
| | | this.$refs.popup.open() |
| | | }, |
| | | |
| | | close() { |
| | | this.$refs.popup.close() |
| | | }, |
| | | |
| | | popupSubmit() { |
| | | this.$refs.popup.close() |
| | | }, |
| | | itemChange(el) { |
| | | this.curCode = el |
| | | }, |
| | | |
| | | async confirm() { |
| | | if(this.barcode === '' || this.barcode ===null){ |
| | | uni.showToast({ |
| | | title: "接驳站码不能为空", |
| | | icon: "none", |
| | | }) |
| | | return ; |
| | | } |
| | | if(this.whAreaId === '' || this.whAreaId ===null){ |
| | | uni.showToast({ |
| | | title: "目标库区不能为空", |
| | | icon: "none", |
| | | }) |
| | | return ; |
| | | } |
| | | this.repeatClick = true |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/AGV/task/start',{ |
| | | sta: this.barcode, |
| | | area: this.whAreaId |
| | | } |
| | | ) |
| | | if (code === 200) { |
| | | uni.showToast({ |
| | | title: '启动成功' |
| | | }) |
| | | this.clear() |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | }) |
| | | } |
| | | this.repeatClick = false |
| | | |
| | | |
| | | }, |
| | | |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | .index { |
| | | border: 1px solid #e54d42; |
| | | color: #e54d42; |
| | | border-radius: 50%; |
| | | display: block; |
| | | width: 50rpx; |
| | | height: 50rpx; |
| | | line-height: 48rpx; |
| | | text-align: center; |
| | | margin-right: 20rpx; |
| | | font-size: 30rpx; |
| | | } |
| | | |
| | | .text-blue { |
| | | color: #0081ff !important; |
| | | |
| | | } |
| | | |
| | | .item { |
| | | position: relative; |
| | | display: flex; |
| | | min-height: 80upx; |
| | | align-items: center; |
| | | } |
| | | |
| | | .uni-file-picker { |
| | | width: 100%; |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .uni-select__selector { |
| | | z-index: 999; |
| | | } |
| | | |
| | | .tj { |
| | | height: auto; |
| | | padding: 6px 8px; |
| | | display: inline-block; |
| | | border-radius: 6px; |
| | | } |
| | | |
| | | .item { |
| | | display: flex; |
| | | justify-content: center; |
| | | } |
| | | |
| | | .item .cu-btn { |
| | | font-size: 26upx; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <view class="has-foot"> |
| | | <form > |
| | | <view class="cu-form-group " v-show="!isconfirm"> |
| | | <view class="title">盘点单</view> |
| | | <input placeholder="请扫描盘点单号" v-model="barcode" @input="search()" focus></input> |
| | | <text class='cuIcon-close text-gray margin-right-xs' v-show="barcode!==''" @click="clearCode"></text> |
| | | </view> |
| | | |
| | | </form> |
| | | |
| | | |
| | | |
| | | <view class="cu-list det menu sm-border padding"> |
| | | <block v-for="(item, index) in list" :key="index"> |
| | | <view class="cu-list det menu " @click="clickTaskItem(index)"> |
| | | |
| | | |
| | | <view class="cu-bar bg-white solid-bottom margin-top-sm"> |
| | | <view class="action"> |
| | | <view class="index"> |
| | | {{index+1}} |
| | | </view> |
| | | </view> |
| | | <view class="content2"> |
| | | <text class="text-gray"><text class="text-black ">{{item.exceStatus$}}</text></text> |
| | | </view> |
| | | </view> |
| | | |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">盘点差异单:<text class="text-black ">{{item.orderCode}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">创建时间:<text class="text-black ">{{item.createTime$}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">库存数量:<text class="text-black ">{{item.anfme}}</text></text> |
| | | </view> |
| | | <view class="content"> |
| | | <text class="text-gray">盘点数量:<text class="text-black ">{{item.checkQty}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">盘点类型:<text class="text-black ">{{item.checkType$}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <progress :percent="Math.trunc((item.checkQty/item.anfme)*100) " show-info stroke-width="3" /> |
| | | </view> |
| | | </view> |
| | | |
| | | </view> |
| | | </block> |
| | | </view> |
| | | |
| | | |
| | | <view class="text-blue text-right padding-lr" v-show="isconfirm"> |
| | | 本次收货总数量:{{allCount}} |
| | | </view> |
| | | |
| | | <view class="cu-form-group " v-show="isconfirm"> |
| | | <view class="title">收货区</view> |
| | | <uni-data-select v-model="whAreaId" :localdata="range" placement="top" |
| | | @change="selChange"></uni-data-select> |
| | | </view> |
| | | |
| | | <view class="cu-bar btn-group foot" v-show="!isconfirm"> |
| | | <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button> |
| | | <button class="cu-btn bg-blue shadow-blur" @click="next">下一步</button> |
| | | </view> |
| | | |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | request |
| | | } from '../../common/request.js' |
| | | import { |
| | | mapState, |
| | | mapMutations, |
| | | mapActions, |
| | | mapGetters |
| | | } from 'vuex'; |
| | | export default { |
| | | data() { |
| | | return { |
| | | isClickItem:false, |
| | | clickItem:'', |
| | | QRbarcode:null, |
| | | barcode: '', |
| | | whAreaId: '', |
| | | list: [], |
| | | range: [], |
| | | isconfirm: false, |
| | | itemStyle: { |
| | | backgroundColor: '#42b983', |
| | | borderColor: '#42b983' |
| | | }, |
| | | } |
| | | }, |
| | | computed: { |
| | | ...mapState('user', ['dynamicFields']), |
| | | allCount() { |
| | | return this.list.reduce((acc, row) => +row.receiptQty + acc, 0) |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.search() |
| | | }, |
| | | methods: { |
| | | clickTaskItem(index){ |
| | | let that = this |
| | | uni.navigateTo({ |
| | | url: "./checkOrderItem", |
| | | // 通过eventChannel向被打开页面传送数据 |
| | | success: function(res) { |
| | | res.eventChannel.emit('checkItem', { |
| | | data: that.list[index] |
| | | }) |
| | | } |
| | | |
| | | }); |
| | | }, |
| | | typeChange(e){ |
| | | this.typeSelect = e.value |
| | | this.search() |
| | | }, |
| | | async search() { |
| | | this.list = [] |
| | | // if(this.barcode === '' || this.barcode ===null){ |
| | | // return ; |
| | | // } |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/getCheckList',{ |
| | | code:this.barcode |
| | | } |
| | | ) |
| | | if (code === 200) { |
| | | if (Object.keys(data).length === 0){ |
| | | uni.showToast({ |
| | | title: "未查询到波次数据", |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | } |
| | | this.list.push(...data) |
| | | |
| | | }else if(code == 401){ |
| | | setTimeout(() => { |
| | | uni.removeStorageSync('token'); |
| | | uni.reLaunch({ |
| | | url: "/pages/login/login" |
| | | }); |
| | | }, 1000); |
| | | }else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | } |
| | | |
| | | |
| | | }, |
| | | clearCode() { |
| | | this.barcode = '' |
| | | }, |
| | | remove(index) { |
| | | this.list.splice(index, 1); |
| | | }, |
| | | clear() { |
| | | this.list = [] |
| | | this.barcode = '' |
| | | }, |
| | | next() { |
| | | if (this.list.length) { |
| | | this.isconfirm = true |
| | | } else { |
| | | uni.showToast({ |
| | | icon: "none", |
| | | title: '未选物料标签' |
| | | }) |
| | | } |
| | | }, |
| | | prev() { |
| | | this.isconfirm = false |
| | | }, |
| | | selChange(val) { |
| | | uni.setStorageSync('whAreaId', val) |
| | | }, |
| | | async confirm() { |
| | | const newArr = this.list.map(item => { |
| | | return { |
| | | ...item, |
| | | receiptQty: item.receiptQty === null ? 0 : +item.receiptQty |
| | | }; |
| | | }); |
| | | if (this.whAreaId === '') { |
| | | uni.showToast({ |
| | | icon: "none", |
| | | title: '请选择收货区' |
| | | }) |
| | | } else { |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/orders/confirm', { |
| | | receipts: newArr, |
| | | whAreaId: this.whAreaId |
| | | }) |
| | | if (code === 200) { |
| | | uni.showToast({ |
| | | title: '收货成功' |
| | | }) |
| | | this.list = [] |
| | | this.barcode = '' |
| | | this.isconfirm = false |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | } |
| | | |
| | | } |
| | | }, |
| | | |
| | | DateChange(e, item) { |
| | | item.prodTime = e.detail.value |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | .index { |
| | | border: 1px solid #e54d42; |
| | | color: #e54d42; |
| | | border-radius: 50%; |
| | | display: block; |
| | | width: 50rpx; |
| | | height: 50rpx; |
| | | line-height: 48rpx; |
| | | text-align: center; |
| | | margin-right: 20rpx; |
| | | font-size: 30rpx; |
| | | } |
| | | |
| | | .text-blue { |
| | | color: #0081ff !important; |
| | | |
| | | } |
| | | |
| | | .item { |
| | | position: relative; |
| | | display: flex; |
| | | min-height: 80upx; |
| | | align-items: center; |
| | | } |
| | | .content2 { |
| | | /* background-color: coral; */ |
| | | width: 100%; |
| | | display: flex; |
| | | flex-direction: row; |
| | | align-items: center; |
| | | justify-content: flex-end; |
| | | margin-right: 10px; |
| | | color: #0081ff; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <view class="has-foot"> |
| | | <form> |
| | | <view class="cu-form-group" v-show="!isconfirm"> |
| | | <view class="title">盘点单号:<text class="text-black ">{{check.orderCode}}</text></view> |
| | | <!-- <text class='cuIcon-add text-blue' @click="returnPage"></text> --> |
| | | </view> |
| | | <view class="cu-form-group" v-show="!isconfirm"> |
| | | <view class="title">容器号</view> |
| | | <input placeholder="请扫描容器号" v-model="barcode" focus></input> |
| | | <text class='cuIcon-close text-gray margin-right-xs' v-show="barcode!==''" @click="clearCode"></text> |
| | | <text class='cuIcon-search text-blue' @click="search"></text> |
| | | </view> |
| | | <view class="cu-form-group" v-show="isconfirm"> |
| | | <view class="title">物料码</view> |
| | | <input placeholder="请扫描物料码" v-model="matnr" focus></input> |
| | | <text class='cuIcon-close text-gray margin-right-xs' v-show="matnr!==''" @click="clearCode"></text> |
| | | <text class='cuIcon-search text-blue' @click="addMatnr" v-show="matnr!==''"></text> |
| | | |
| | | </view> |
| | | </form> |
| | | |
| | | <view class="cu-list det menu sm-border padding"> |
| | | <block v-for="(item, index) in list" v-if="!isconfirm"> |
| | | <view class="cu-list det menu "> |
| | | <view class="cu-bar bg-white solid-bottom margin-top-sm"> |
| | | <view class="action"> |
| | | <view class="index"> |
| | | {{index+1}} |
| | | </view> |
| | | </view> |
| | | <view class="content2"> |
| | | <text class="text-gray"><text class="text-black ">{{item.exceStatus$}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">物料编码:<text class="text-black ">{{item.matnrCode}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">物料名称:<text class="text-black ">{{item.maktx}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">批次:<text class="text-black ">{{item.batch}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item" v-if="check.checkType === 0"> |
| | | <view class="content"> |
| | | <text class="text-gray">托盘库存数:<text class="text-black ">{{item.anfme}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <view class="cu-form-group padding-lr-0"> |
| | | <view class="title text-blue"><text class="text-red text-xl vertical-middle"></text>实盘数: |
| | | </view> |
| | | <uni-number-box style="width: 70%;" :max="max" v-model="item.checkQty" |
| | | :step='1'></uni-number-box> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <view class="cu-form-group padding-lr-0"> |
| | | <text class=" text-blue">备注:</text> |
| | | <input placeholder="请输入备注" v-model="item.memo"></input> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item" v-if="item.checkQty !== item.anfme && check.checkType === 0"> |
| | | <view class="content"> |
| | | <view class="cu-form-group padding-lr-0"> |
| | | <view class=" text-blue">差异原因:</view> |
| | | <view style="width: 80%;"> |
| | | <uni-data-select style="min-width: 90%; max-width: 90%;" v-model="item.reason" |
| | | :localdata="reasons" placement="top"></uni-data-select> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </block> |
| | | |
| | | <block v-for="(item, index) in matnrList"> |
| | | <view class="cu-list det menu "> |
| | | <view class="cu-bar bg-white solid-bottom margin-top-sm"> |
| | | <view class="action"> |
| | | <view class="index"> |
| | | {{index+1}} |
| | | </view> |
| | | </view> |
| | | <view class="action"> |
| | | <text @click="remove(index)" class="cuIcon-close text-red" style="font-size: 24px;"></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">物料编码:<text class="text-black ">{{item.matnrCode}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">物料名称:<text class="text-black ">{{item.maktx}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item" v-if="check.checkType === 0"> |
| | | <view class="content"> |
| | | <text class="text-gray">库存数:<text class="text-black ">{{item.anfme}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <view class="cu-form-group padding-lr-0"> |
| | | <text class=" text-blue">批次:</text> |
| | | <input placeholder="请输入批次" v-model="item.batch"></input> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <view class="cu-form-group padding-lr-0"> |
| | | <view class="title text-blue"><text class="text-red text-xl vertical-middle"></text>实盘数: |
| | | </view> |
| | | <uni-number-box style="width: 70%;" :max="max" v-model="item.checkQty" |
| | | :step='1'></uni-number-box> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <view class="cu-form-group padding-lr-0"> |
| | | <text class=" text-blue">备注:</text> |
| | | <input placeholder="请输入备注" v-model="item.memo"></input> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item" v-if="item.checkQty !== item.anfme && check.checkType === 0"> |
| | | <view class="content"> |
| | | <view class="cu-form-group padding-lr-0"> |
| | | <view class=" text-blue">差异原因</view> |
| | | <view style="width: 80%;"> |
| | | <uni-data-select style="min-width: 90%; max-width: 90%;" v-model="item.reason" |
| | | :localdata="reasons" placement="top"></uni-data-select> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </block> |
| | | </view> |
| | | |
| | | <view class="cu-bar btn-group foot" v-show="!isconfirm"> |
| | | <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button> |
| | | <button class="cu-btn bg-orange shadow-blur" @click="returnPage">添加明细</button> |
| | | <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="complete">提交</button> |
| | | </view> |
| | | |
| | | <view class="cu-bar btn-group foot" v-show="isconfirm"> |
| | | <button class="cu-btn text-blue line-blue shadow" @click="returnPage">返回</button> |
| | | <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="sureAdd">确定添加</button> |
| | | </view> |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | request |
| | | } from '../../common/request.js' |
| | | import { |
| | | mapState, |
| | | mapMutations, |
| | | mapActions, |
| | | mapGetters |
| | | } from 'vuex'; |
| | | export default { |
| | | data() { |
| | | return { |
| | | check: '', |
| | | list: [], |
| | | isconfirm: false, |
| | | barcode: '', |
| | | max: 99999999, |
| | | repeatClick: false, |
| | | reasons: [], |
| | | matnr: '', |
| | | matnrList:[] |
| | | |
| | | } |
| | | }, |
| | | computed: { |
| | | |
| | | |
| | | }, |
| | | mounted() { |
| | | this.getReasons() |
| | | }, |
| | | onLoad() { |
| | | let that = this |
| | | const eventChannel = this.getOpenerEventChannel(); |
| | | |
| | | eventChannel.on('checkItem', function(data) { |
| | | that.check = data.data |
| | | |
| | | }) |
| | | |
| | | }, |
| | | methods: { |
| | | sureAdd(){ |
| | | if(this.matnrList.length === 0){ |
| | | uni.showToast({ |
| | | title: "请添加物料明细", |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | return ; |
| | | } |
| | | this.list.push(...this.matnrList) |
| | | this.matnrList = [] |
| | | this.isconfirm = !this.isconfirm |
| | | }, |
| | | remove(index) { |
| | | this.matnrList.splice(index, 1); |
| | | }, |
| | | async addMatnr() { |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/selectAddMatnr', { |
| | | matnr:this.matnr |
| | | }) |
| | | if (code === 200) { |
| | | this.matnrList.push(data) |
| | | this.matnr = '' |
| | | } |
| | | }, |
| | | returnPage() { |
| | | this.matnrList = [] |
| | | this.isconfirm = !this.isconfirm |
| | | }, |
| | | async getReasons() { |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/getCheckDiffReasonList', {}, 'get') |
| | | if (code === 200) { |
| | | this.reasons = data.map(item => ({ |
| | | value: item.id, |
| | | text: item.label |
| | | })); |
| | | } |
| | | }, |
| | | clear() { |
| | | this.barcode = '' |
| | | this.list = [] |
| | | }, |
| | | clearCode() { |
| | | this.barcode = '' |
| | | this.matnr = '' |
| | | }, |
| | | async search() { |
| | | this.list = [] |
| | | // if(this.barcode === '' || this.barcode ===null){ |
| | | // return ; |
| | | // } |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/getCheckTaskItemList', { |
| | | barcode: this.barcode, |
| | | checkCode: this.check.orderCode |
| | | }) |
| | | if (code === 200) { |
| | | if (Object.keys(data).length === 0) { |
| | | uni.showToast({ |
| | | title: "该标签未查询到数据", |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | } |
| | | for (var i = 0; i < data.length; i++) { |
| | | data[i].checkQty = data[i].anfme |
| | | } |
| | | this.list = data |
| | | |
| | | } else if (code == 401) { |
| | | setTimeout(() => { |
| | | uni.removeStorageSync('token'); |
| | | uni.reLaunch({ |
| | | url: "/pages/login/login" |
| | | }); |
| | | }, 1000); |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | } |
| | | |
| | | |
| | | }, |
| | | async complete() { |
| | | |
| | | let that = this |
| | | if (that.barcode === '' || that.barcode === null) { |
| | | uni.showToast({ |
| | | title: "容器号为空", |
| | | icon: "error", |
| | | }) |
| | | return; |
| | | } |
| | | if (that.list === [] || that.list.length === 0) { |
| | | uni.showToast({ |
| | | title: "任务明细为空", |
| | | icon: "error", |
| | | }) |
| | | return; |
| | | } |
| | | this.repeatClick = true |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/saveCheckDiff', { |
| | | container: that.barcode, |
| | | checkId: that.check.id, |
| | | checkDiffItems: that.list |
| | | }) |
| | | if (code === 200) { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | }) |
| | | that.clear() |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | }) |
| | | } |
| | | this.repeatClick = false |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | .index { |
| | | border: 1px solid #e54d42; |
| | | color: #e54d42; |
| | | border-radius: 50%; |
| | | display: block; |
| | | width: 50rpx; |
| | | height: 50rpx; |
| | | line-height: 48rpx; |
| | | text-align: center; |
| | | margin-right: 20rpx; |
| | | font-size: 30rpx; |
| | | } |
| | | |
| | | .text-blue { |
| | | color: #0081ff !important; |
| | | |
| | | } |
| | | |
| | | .item { |
| | | position: relative; |
| | | display: flex; |
| | | min-height: 80upx; |
| | | align-items: center; |
| | | } |
| | | |
| | | .content2 { |
| | | /* background-color: coral; */ |
| | | width: 100%; |
| | | display: flex; |
| | | flex-direction: row; |
| | | align-items: center; |
| | | justify-content: flex-end; |
| | | margin-right: 10px; |
| | | color: #0081ff; |
| | | } |
| | | |
| | | .noMargin { |
| | | margin-top: 0px; |
| | | padding: 5px; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <view class="has-foot"> |
| | | <form> |
| | | <view class="cu-form-group" v-show="!isconfirm"> |
| | | <view class="title">容器号</view> |
| | | <input placeholder="请扫描容器号" v-model="barcode" focus></input> |
| | | <text class='cuIcon-close text-gray margin-right-xs' v-show="barcode!==''" @click="clearCode"></text> |
| | | <text class='cuIcon-search text-blue' @click="search"></text> |
| | | </view> |
| | | <view class="cu-form-group" v-show="isconfirm"> |
| | | <view class="title">物料码</view> |
| | | <input placeholder="请扫描物料码" v-model="matnr" focus></input> |
| | | <text class='cuIcon-close text-gray margin-right-xs' v-show="matnr!==''" @click="clearCode"></text> |
| | | <text class='cuIcon-search text-blue' @click="addMatnr" v-show="matnr!==''"></text> |
| | | |
| | | </view> |
| | | </form> |
| | | |
| | | <view class="cu-list det menu sm-border padding"> |
| | | <block v-for="(item, index) in list" v-if="!isconfirm"> |
| | | <view class="cu-list det menu "> |
| | | <view class="cu-bar bg-white solid-bottom margin-top-sm"> |
| | | <view class="action"> |
| | | <view class="index"> |
| | | {{index+1}} |
| | | </view> |
| | | </view> |
| | | <view class="content2"> |
| | | <text class="text-gray"><text class="text-black ">{{item.exceStatus$}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">物料编码:<text class="text-black ">{{item.matnrCode}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">物料名称:<text class="text-black ">{{item.maktx}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">批次:<text class="text-black ">{{item.batch}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item" v-if="check.checkType === 0"> |
| | | <view class="content"> |
| | | <text class="text-gray">托盘库存数:<text class="text-black ">{{item.anfme}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <view class="cu-form-group padding-lr-0"> |
| | | <view class="title text-blue"><text class="text-red text-xl vertical-middle"></text>实盘数: |
| | | </view> |
| | | <uni-number-box style="width: 70%;" :max="max" v-model="item.checkQty" |
| | | :step='1'></uni-number-box> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <view class="cu-form-group padding-lr-0"> |
| | | <text class=" text-blue">备注:</text> |
| | | <input placeholder="请输入备注" v-model="item.memo"></input> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item" v-if="item.checkQty !== item.anfme && check.checkType === 0"> |
| | | <view class="content"> |
| | | <view class="cu-form-group padding-lr-0"> |
| | | <view class=" text-blue">差异原因:</view> |
| | | <view style="width: 80%;"> |
| | | <uni-data-select style="min-width: 90%; max-width: 90%;" v-model="item.reason" |
| | | :localdata="reasons" placement="top"></uni-data-select> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </block> |
| | | |
| | | <block v-for="(item, index) in matnrList"> |
| | | <view class="cu-list det menu "> |
| | | <view class="cu-bar bg-white solid-bottom margin-top-sm"> |
| | | <view class="action"> |
| | | <view class="index"> |
| | | {{index+1}} |
| | | </view> |
| | | </view> |
| | | <view class="action"> |
| | | <text @click="remove(index)" class="cuIcon-close text-red" style="font-size: 24px;"></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">物料编码:<text class="text-black ">{{item.matnrCode}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">物料名称:<text class="text-black ">{{item.maktx}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item" v-if="check.checkType === 0"> |
| | | <view class="content"> |
| | | <text class="text-gray">库存数:<text class="text-black ">{{item.anfme}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <view class="cu-form-group padding-lr-0"> |
| | | <text class=" text-blue">批次:</text> |
| | | <input placeholder="请输入批次" v-model="item.batch"></input> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <view class="cu-form-group padding-lr-0"> |
| | | <view class="title text-blue"><text class="text-red text-xl vertical-middle"></text>实盘数: |
| | | </view> |
| | | <uni-number-box style="width: 70%;" :max="max" v-model="item.checkQty" |
| | | :step='1'></uni-number-box> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <view class="cu-form-group padding-lr-0"> |
| | | <text class=" text-blue">备注:</text> |
| | | <input placeholder="请输入备注" v-model="item.memo"></input> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item" v-if="item.checkQty !== item.anfme && check.checkType === 0"> |
| | | <view class="content"> |
| | | <view class="cu-form-group padding-lr-0"> |
| | | <view class=" text-blue">差异原因</view> |
| | | <view style="width: 80%;"> |
| | | <uni-data-select style="min-width: 90%; max-width: 90%;" v-model="item.reason" |
| | | :localdata="reasons" placement="top"></uni-data-select> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </block> |
| | | </view> |
| | | |
| | | <view class="cu-bar btn-group foot" v-show="!isconfirm"> |
| | | <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button> |
| | | <button class="cu-btn bg-orange shadow-blur" @click="returnPage">添加明细</button> |
| | | <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="complete">提交</button> |
| | | </view> |
| | | |
| | | <view class="cu-bar btn-group foot" v-show="isconfirm"> |
| | | <button class="cu-btn text-blue line-blue shadow" @click="returnPage">返回</button> |
| | | <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="sureAdd">确定添加</button> |
| | | </view> |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | request |
| | | } from '../../common/request.js' |
| | | import { |
| | | mapState, |
| | | mapMutations, |
| | | mapActions, |
| | | mapGetters |
| | | } from 'vuex'; |
| | | export default { |
| | | data() { |
| | | return { |
| | | check: '', |
| | | list: [], |
| | | isconfirm: false, |
| | | barcode: '', |
| | | max: 99999999, |
| | | repeatClick: false, |
| | | reasons: [], |
| | | matnr: '', |
| | | matnrList:[] |
| | | |
| | | } |
| | | }, |
| | | computed: { |
| | | |
| | | |
| | | }, |
| | | mounted() { |
| | | this.getReasons() |
| | | }, |
| | | onLoad() { |
| | | let that = this |
| | | const eventChannel = this.getOpenerEventChannel(); |
| | | |
| | | eventChannel.on('checkItem', function(data) { |
| | | that.check = data.data |
| | | |
| | | }) |
| | | |
| | | }, |
| | | methods: { |
| | | sureAdd(){ |
| | | if(this.matnrList.length === 0){ |
| | | uni.showToast({ |
| | | title: "请添加物料明细", |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | return ; |
| | | } |
| | | this.list.push(...this.matnrList) |
| | | this.matnrList = [] |
| | | this.isconfirm = !this.isconfirm |
| | | }, |
| | | remove(index) { |
| | | this.matnrList.splice(index, 1); |
| | | }, |
| | | async addMatnr() { |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/selectAddMatnr', { |
| | | matnr:this.matnr |
| | | }) |
| | | if (code === 200) { |
| | | this.matnrList.push(data) |
| | | this.matnr = '' |
| | | } |
| | | }, |
| | | returnPage() { |
| | | this.matnrList = [] |
| | | this.isconfirm = !this.isconfirm |
| | | }, |
| | | async getReasons() { |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/getCheckDiffReasonList', {}, 'get') |
| | | if (code === 200) { |
| | | this.reasons = data.map(item => ({ |
| | | value: item.id, |
| | | text: item.label |
| | | })); |
| | | } |
| | | }, |
| | | clear() { |
| | | this.barcode = '' |
| | | this.list = [] |
| | | }, |
| | | clearCode() { |
| | | this.barcode = '' |
| | | this.matnr = '' |
| | | }, |
| | | async search() { |
| | | this.list = [] |
| | | // if(this.barcode === '' || this.barcode ===null){ |
| | | // return ; |
| | | // } |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/getCheckTaskItemList2', { |
| | | barcode: this.barcode |
| | | }) |
| | | if (code === 200) { |
| | | if (Object.keys(data).length === 0) { |
| | | uni.showToast({ |
| | | title: "该标签未查询到数据", |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | } |
| | | for (var i = 0; i < data.checkDiffItems.length; i++) { |
| | | data.checkDiffItems[i].checkQty = data.checkDiffItems[i].anfme |
| | | } |
| | | this.list = data.checkDiffItems |
| | | this.check = data.checkDiff |
| | | |
| | | } else if (code == 401) { |
| | | setTimeout(() => { |
| | | uni.removeStorageSync('token'); |
| | | uni.reLaunch({ |
| | | url: "/pages/login/login" |
| | | }); |
| | | }, 1000); |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | } |
| | | |
| | | |
| | | }, |
| | | async complete() { |
| | | |
| | | let that = this |
| | | if (that.barcode === '' || that.barcode === null) { |
| | | uni.showToast({ |
| | | title: "容器号为空", |
| | | icon: "error", |
| | | }) |
| | | return; |
| | | } |
| | | if (that.list === [] || that.list.length === 0) { |
| | | uni.showToast({ |
| | | title: "任务明细为空", |
| | | icon: "error", |
| | | }) |
| | | return; |
| | | } |
| | | this.repeatClick = true |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/saveCheckDiff', { |
| | | container: that.barcode, |
| | | checkId: that.check.id, |
| | | checkDiffItems: that.list |
| | | }) |
| | | if (code === 200) { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | }) |
| | | that.clear() |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | }) |
| | | } |
| | | this.repeatClick = false |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | .index { |
| | | border: 1px solid #e54d42; |
| | | color: #e54d42; |
| | | border-radius: 50%; |
| | | display: block; |
| | | width: 50rpx; |
| | | height: 50rpx; |
| | | line-height: 48rpx; |
| | | text-align: center; |
| | | margin-right: 20rpx; |
| | | font-size: 30rpx; |
| | | } |
| | | |
| | | .text-blue { |
| | | color: #0081ff !important; |
| | | |
| | | } |
| | | |
| | | .item { |
| | | position: relative; |
| | | display: flex; |
| | | min-height: 80upx; |
| | | align-items: center; |
| | | } |
| | | |
| | | .content2 { |
| | | /* background-color: coral; */ |
| | | width: 100%; |
| | | display: flex; |
| | | flex-direction: row; |
| | | align-items: center; |
| | | justify-content: flex-end; |
| | | margin-right: 10px; |
| | | color: #0081ff; |
| | | } |
| | | |
| | | .noMargin { |
| | | margin-top: 0px; |
| | | padding: 5px; |
| | | } |
| | | </style> |
| | |
| | | <image src="../../static/img/toux.png" class="tx" mode="widthFix"></image>
|
| | | <view class="text-xl margin-top-sm margin-left-lg">
|
| | | <view class="text-blue text-bold text-xxl">
|
| | | 张经理
|
| | | {{user.username}}
|
| | | </view>
|
| | | <view class="text-gray">仓库主管 | zy32423423</view>
|
| | | </view>
|
| | |
| | | </view>
|
| | |
|
| | | <view class="cu-list grid col-4 no-border">
|
| | | <view class="cu-item">
|
| | | <!-- <view class="cu-item">
|
| | | <navigator hover-class='none' url="/pages/rece/standard" navigateTo>
|
| | | <view class="cuIcon-apps text-blue">
|
| | | </view>
|
| | | <text>标准收货</text>
|
| | | </navigator>
|
| | | </view>
|
| | | </view> -->
|
| | |
|
| | | <view class="cu-item">
|
| | | <navigator hover-class='none' url="/pages/rece/other" navigateTo>
|
| | | <view class="cuIcon-taoxiaopu text-blue">
|
| | | </view>
|
| | | <text>其他收货</text>
|
| | | <text>{{$t('index.GR')}}</text>
|
| | | </navigator>
|
| | | </view>
|
| | |
|
| | | <view class="cu-item">
|
| | | <!-- <view class="cu-item">
|
| | | <navigator hover-class='none' url="/pages/listing/disc" navigateTo>
|
| | | <view class="cuIcon-cardboard text-blue">
|
| | | </view>
|
| | | <text>组盘</text>
|
| | | </navigator>
|
| | | </view> -->
|
| | | <view class="cu-item">
|
| | | <navigator hover-class='none' url="/pages/listing/matnrPalletising" navigateTo>
|
| | | <view class="cuIcon-cardboard text-blue">
|
| | | </view>
|
| | | <text>{{$t('index.palletizing')}}</text>
|
| | | </navigator>
|
| | | </view>
|
| | |
|
| | | <!-- <view class="cu-item">
|
| | | <navigator hover-class='none' url="/pages/listing/untie" navigateTo>
|
| | | <view class="cu-item">
|
| | | <navigator hover-class='none' url="/pages/listing/unPakin" navigateTo>
|
| | | <view class="cuIcon-cardboardforbid text-blue">
|
| | | </view>
|
| | | <text>解绑</text>
|
| | | <text>{{$t('index.palletBuilding')}}</text>
|
| | | </navigator>
|
| | | </view> -->
|
| | | </view>
|
| | |
|
| | | <view class="cu-item">
|
| | | <navigator hover-class='none' url="/pages/inspect/report" navigateTo>
|
| | | <view class="cuIcon-edit text-blue">
|
| | | </view>
|
| | | <text>报检</text>
|
| | | <text>{{$t('index.inspectionRequest')}}</text>
|
| | | </navigator>
|
| | | </view>
|
| | |
|
| | |
| | | <navigator hover-class='none' url="/pages/inspect/check" navigateTo>
|
| | | <view class="cuIcon-warn text-blue">
|
| | | </view>
|
| | | <text>质检</text>
|
| | | <text>{{$t('index.qualityInspection')}}</text>
|
| | | </navigator>
|
| | | </view>
|
| | |
|
| | |
| | | <navigator hover-class='none' url="/pages/inspect/bad" navigateTo>
|
| | | <view class="cuIcon-appreciate text-blue">
|
| | | </view>
|
| | | <text>不良标记</text>
|
| | | <text>{{$t('index.defectiveMarking')}}</text>
|
| | | </navigator>
|
| | | </view>
|
| | |
|
| | |
| | | <navigator hover-class='none' url="/pages/listing/labour" navigateTo>
|
| | | <view class="cuIcon-friendadd text-blue">
|
| | | </view>
|
| | | <text>人工上架</text>
|
| | | <text>{{$t('index.manualPutaway')}}</text>
|
| | | </navigator>
|
| | | </view>
|
| | |
|
| | | <view class="cu-item">
|
| | | <navigator hover-class='none' url="/pages/listing/upper" navigateTo>
|
| | | <view class="cuIcon-punch text-blue">
|
| | | </view>
|
| | | <text>上架</text>
|
| | | </navigator>
|
| | | </view>
|
| | | <view class="cu-item">
|
| | | <navigator hover-class='none' url="/pages/phyz/inStock/inStock" navigateTo>
|
| | | <view class="cuIcon-punch text-blue">
|
| | | </view>
|
| | | <text>入库上架</text>
|
| | | </navigator>
|
| | | </view>
|
| | | |
| | | |
| | | </view>
|
| | | |
| | | <view class="cu-bar bg-white solid-bottom margin-top">
|
| | | <view class="action">
|
| | | <text class="cuIcon-title text-orange "></text> 出库
|
| | | </view> |
| | | <text class="cuIcon-title text-orange "></text> AGV
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <view class="cu-list grid col-4 no-border">
|
| | | <view class="cu-item">
|
| | | <navigator hover-class='none' url="/pages/AGV/AGVStaBind" navigateTo>
|
| | | <view class="cuIcon-punch text-blue">
|
| | | </view>
|
| | | <text>{{$t('index.stationBinding')}}</text>
|
| | | </navigator>
|
| | | </view>
|
| | | <view class="cu-item">
|
| | | <navigator hover-class='none' url="/pages/AGV/StartInTask" navigateTo>
|
| | | <view class="cuIcon-punch text-blue">
|
| | | </view>
|
| | | <text>{{$t('index.inboundInitiation')}}</text>
|
| | | </navigator>
|
| | | </view>
|
| | | <view class="cu-item">
|
| | | <navigator hover-class='none' url="/pages/AGV/StaUnBind" navigateTo>
|
| | | <view class="cuIcon-punch text-blue">
|
| | | </view>
|
| | | <text>{{$t('index.stationUnbinding')}}</text>
|
| | | </navigator>
|
| | | </view>
|
| | | <view class="cu-item">
|
| | | <navigator hover-class='none' url="/pages/AGV/BindAndInTask" navigateTo>
|
| | | <view class="cuIcon-punch text-blue">
|
| | | </view>
|
| | | <text>{{$t('index.bindAndInbound')}}</text>
|
| | | </navigator>
|
| | | </view>
|
| | | |
| | | </view>
|
| | |
|
| | | <view class="cu-bar bg-white solid-bottom margin-top">
|
| | | <view class="action">
|
| | | <text class="cuIcon-title text-orange "></text> 作业
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <view class="cu-list grid col-4 no-border">
|
| | | <view class="cu-item">
|
| | | <navigator hover-class='none' url="/pages/outbound/fastPicking" navigateTo>
|
| | | <view class="cuIcon-apps text-blue">
|
| | | </view>
|
| | | <text>快速拣货</text>
|
| | | <text>{{$t('index.quickPicking')}}</text>
|
| | | </navigator>
|
| | | </view>
|
| | | |
| | | <view class="cu-item">
|
| | | <navigator hover-class='none' url="/pages/outbound/wavePickItem" navigateTo>
|
| | | <view class="cuIcon-apps text-blue">
|
| | | </view>
|
| | | <text>{{$t('index.wavePick')}}</text>
|
| | | </navigator>
|
| | | </view>
|
| | | <view class="cu-item">
|
| | | <navigator hover-class='none' url="/pages/check/checkOrder" navigateTo>
|
| | | <view class="cuIcon-apps text-blue">
|
| | | </view>
|
| | | <text>{{$t('index.checkOrder')}}</text>
|
| | | </navigator>
|
| | | </view>
|
| | | <view class="cu-item">
|
| | | <navigator hover-class='none' url="/pages/check/firstCheck" navigateTo>
|
| | | <view class="cuIcon-apps text-blue">
|
| | | </view>
|
| | | <text>{{$t('index.checkOrder')}}</text>
|
| | | </navigator>
|
| | | </view>
|
| | |
|
| | | </view>
|
| | |
|
| | | <view class="padding flex flex-direction">
|
| | | <view class="cu-btn bg-red margin-tb-sm lg round" @click="equit">退出登录</view>
|
| | | <view class="cu-btn bg-red margin-tb-sm lg round" @click="equit">{{$t('index.outLogin')}}</view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | |
| | | export default {
|
| | | data() {
|
| | | return {
|
| | |
|
| | | user:{
|
| | | |
| | | }
|
| | | }
|
| | | },
|
| | | |
| | | onShow() {
|
| | | |
| | | |
| | | this.user = uni.getStorageSync('userData'); |
| | | },
|
| | | methods: {
|
| | | equit() {
|
| | |
| | | setTimeout(() => {
|
| | | uni.removeStorageSync('token');
|
| | | uni.reLaunch({
|
| | | url: "/pages/login/login"
|
| | | url: "/pages/login/index"
|
| | | });
|
| | | }, 1000);
|
| | | }
|
| | |
| | | mounted() {},
|
| | | methods: {
|
| | | async search() {
|
| | | // const {
|
| | | // code,
|
| | | // data,
|
| | | // msg
|
| | | // } = await request('/asnOrderItem/trackCode/' + this.barcode, {}, "get")
|
| | | // if (code === 200) {
|
| | | // const find = this.list.find(el => el.id === data.id);
|
| | | // !find && this.list.push(data)
|
| | | // } else {
|
| | | // uni.showToast({
|
| | | // title: msg,
|
| | | // icon: "none",
|
| | | // position: 'top'
|
| | | // })
|
| | | // }
|
| | | this.list = [{
|
| | | id: 1,
|
| | | maktx: '拉杆箱',
|
| | | maktxCode: '312312312',
|
| | | asnCode: 'asn123412',
|
| | | splrBatch: '3123123',
|
| | | stockUnit: '个',
|
| | | receiptQty: null
|
| | | }]
|
| | | const {
|
| | | code,
|
| | | data,
|
| | | msg
|
| | | } = await request('/defect/' + this.barcode, {}, "post")
|
| | | if (code === 200) {
|
| | | const find = this.list.find(el => el.id === data.id);
|
| | | !find && this.list.push(data)
|
| | | } else {
|
| | | uni.showToast({
|
| | | title: msg,
|
| | | icon: "none",
|
| | | position: 'top'
|
| | | })
|
| | | }
|
| | | // this.list = [{
|
| | | // id: 1,
|
| | | // maktx: '拉杆箱',
|
| | | // maktxCode: '312312312',
|
| | | // asnCode: 'asn123412',
|
| | | // splrBatch: '3123123',
|
| | | // stockUnit: '个',
|
| | | // receiptQty: null
|
| | | // }]
|
| | | },
|
| | | async confirm() {
|
| | | // const {
|
| | |
| | | <view class="title">容器号</view>
|
| | | <input placeholder="请扫描容器号" v-model="container" focus></input>
|
| | | <text class='cuIcon-search text-blue' @click="getList"></text>
|
| | | </view>
|
| | |
|
| | | <view class="cu-form-group ">
|
| | | </view> |
| | | <view class="cu-form-group">
|
| | | <view class="title">物料标签</view>
|
| | | <input placeholder="请扫描物料标签" v-model="barcode"></input>
|
| | | <text class='cuIcon-search text-blue' @click="search"></text>
|
| | |
| | |
|
| | | <view class="padding-lr margin-top-sm">
|
| | | <block v-for="(item, index) in list" :key="index">
|
| | | <view class="cu-list det menu sm-border margin-bottom-sm " :class="[item.trackCode===barcode&&'act']"
|
| | | <view class="cu-list det menu sm-border margin-bottom-sm "
|
| | | :ref="item.trackCode+'ref'">
|
| | | <view class="cu-bar bg-white solid-bottom ">
|
| | | <view class="action">
|
| | |
| | | <text @click="remove(index)" class="cuIcon-close text-red" style="font-size: 24px;"></text>
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">ASN:</text>
|
| | |
| | | <text class="text-grey ">{{item.asnCode}}</text>
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">物料条码:</text>
|
| | |
| | | <text class="text-grey ">{{item.trackCode}}</text>
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">供应商批次:</text>
|
| | |
| | | <text class="text-grey ">{{item.splrBatch}}</text>
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">库存批次:</text>
|
| | |
| | | <text class="text-grey ">{{item.batch}}</text>
|
| | | </view>
|
| | | </view>
|
| | |
|
| | |
|
| | |
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">平台行号: <text class="text-grey ">{{item.platformId}}</text></text>
|
| | |
| | | </view>
|
| | | <view class="content">
|
| | | <text class="text-black">收货数量: <text class="text-grey ">{{item.anfme}}</text></text>
|
| | | </view> |
| | | <view class="content"> |
| | | <text class="text-black">已上架数量: <text class="text-grey ">{{item.workQty + item.qty}}</text></text> |
| | | </view>
|
| | | <view class="content">
|
| | | <text class="text-black">已上架数量: <text
|
| | | class="text-grey ">{{item.workQty + item.qty}}</text></text>
|
| | | </view>
|
| | | </view>
|
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">可组盘数量: <text class="text-grey ">{{item.anfme - item.workQty}}</text></text> |
| | | </view>
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">可组盘数量: <text
|
| | | class="text-grey ">{{item.anfme - item.workQty}}</text></text>
|
| | | </view> |
| | | </view>
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <view class="cu-form-group padding-lr-0">
|
| | | <view class="title text-blue"><text
|
| | | class="text-red text-xl vertical-middle">*</text>组盘数量:
|
| | | </view>
|
| | | <input type="number" placeholder="请输入组盘数量" v-model="megreQty"></input>
|
| | | <uni-number-box style="width: 70%;" :max="max" v-model="item.receiptQty"
|
| | | :step='1'></uni-number-box>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | |
| | | </view>
|
| | | <view class="cu-bar btn-group foot">
|
| | | <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button>
|
| | | <button class="cu-btn bg-blue shadow-blur" @click="confirm">组盘</button>
|
| | | <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">组盘</button>
|
| | | </view>
|
| | |
|
| | | </view>
|
| | | </template>
|
| | |
|
| | |
| | | data() {
|
| | | return {
|
| | | barcode: '',
|
| | | container: '', |
| | | container: '',
|
| | | megreQty: '',
|
| | | list: [],
|
| | | range: [],
|
| | | isconfirm: false
|
| | | repeatClick: false,
|
| | | isconfirm: false,
|
| | | max: 99999999,
|
| | | |
| | | }
|
| | | },
|
| | | computed: {
|
| | |
| | | mounted() {},
|
| | | methods: {
|
| | | async search() {
|
| | | const find = this.list.find(el => el.trackCode === this.barcode);
|
| | | find ? this.scrollTo() : this.getDet();
|
| | |
|
| | | if (this.barcode == undefined || this.barcode == '') { |
| | | uni.showToast({ |
| | | icon: "none", |
| | | title: '物料标签不能为空!!' |
| | | }) |
| | | return |
| | | } |
| | | this.getDet();
|
| | | },
|
| | | async getDet() {
|
| | | const {
|
| | | code,
|
| | | data,
|
| | | msg
|
| | | } = await request('/asnOrderItem/trackCode/' + this.barcode, {}, "get")
|
| | | } = await request('/asnOrderItem/trackCode', {
|
| | | code: this.barcode,
|
| | | }, "post")
|
| | | if (code === 200) {
|
| | | data && this.list.push(data);
|
| | | for (var i = 0; i < data.length; i++) {
|
| | | data[i].receiptQty =1;
|
| | | data[i].selected = false; |
| | | }
|
| | | this.list = data
|
| | | } else {
|
| | | uni.showToast({
|
| | | title: msg,
|
| | |
| | | })
|
| | | }
|
| | | },
|
| | | async getList() {
|
| | | async getList() { |
| | | if (this.container == undefined || this.container == '') { |
| | | uni.showToast({ |
| | | icon: "none", |
| | | title: '容器号不能为空!!' |
| | | }) |
| | | return |
| | | }
|
| | | const {
|
| | | code,
|
| | | data,
|
| | |
| | | this.isconfirm = false
|
| | | },
|
| | | async confirm() {
|
| | | this.repeatClick = true
|
| | | const newArr = this.list.map(item => {
|
| | | return {
|
| | | ...item,
|
| | | anfme: item.anfme === null ? 0 : +item.anfme,
|
| | | receiptQty: this.megreQty,
|
| | | anfme: item.anfme === null ? 0 : +item.anfme, |
| | | };
|
| | | });
|
| | |
|
| | |
| | | msg
|
| | | } = await request('/waitPakin/merge', {
|
| | | items: newArr,
|
| | | barcode: this.container
|
| | | barcode: this.container,
|
| | | })
|
| | | if (code === 200) {
|
| | | uni.showToast({
|
| | |
| | | position: 'top'
|
| | | })
|
| | | }
|
| | | this.repeatClick = false
|
| | | },
|
| | | }
|
| | | }
|
| New file |
| | |
| | | <template> |
| | | <view> |
| | | <!-- 搜索框 --> |
| | | <view class="search-bar"> |
| | | <uni-search-bar v-model="condition" placeholder=" 输入批次/编码/单号" bgColor="#EEEEEE" @confirm="search()"/> |
| | | </view> |
| | | |
| | | |
| | | <view> |
| | | <view class="padding-lr margin-top-sm"> |
| | | <block v-for="(item, index) in matList" :key="index"> |
| | | <view class="cu-list det menu sm-border margin-bottom-sm " :class="[item.selected === true &&'act']" @click="selectedItem(index)"> |
| | | <view class="cu-bar bg-white solid-bottom " > |
| | | <view class="action"> |
| | | <view class="index"> |
| | | {{index+1}} |
| | | </view> |
| | | <view class="text-blue"> |
| | | 编码: |
| | | {{`${item.matnrCode}`}} |
| | | </view> |
| | | </view> |
| | | <view class="action"> |
| | | <text v-if="item.selected" class="cuIcon-check text-green" style="font-size: 24px;"></text> |
| | | <text v-else class="cuIcon-close text-red" style="font-size: 24px;"></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">ASN:</text> |
| | | </view> |
| | | <view class="action"> |
| | | <text class="text-grey ">{{item.asnCode}}</text> |
| | | </view> |
| | | </view> |
| | | |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">供应商批次:</text> |
| | | </view> |
| | | <view class="action"> |
| | | <text class="text-grey ">{{item.splrBatch}}</text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">质检状态:</text> |
| | | </view> |
| | | <view class="action"> |
| | | <text class="text-grey ">{{item.isptResult$}}</text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">库存单位: <text class="text-grey ">{{item.stockUnit}}</text></text> |
| | | </view> |
| | | <view class="content"> |
| | | <text class="text-black">收货数量: <text class="text-grey ">{{item.anfme}}</text></text> |
| | | </view> |
| | | <view class="content"> |
| | | <text class="text-black">已上架数量: <text |
| | | class="text-grey ">{{item.qty}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">可组盘数量: <text |
| | | class="text-grey ">{{item.anfme - item.workQty - item.qty}}</text></text> |
| | | </view> |
| | | </view> |
| | | |
| | | </view> |
| | | </block> |
| | | </view> |
| | | </view> |
| | | <view class="cu-bar btn-group foot"> |
| | | <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="back">确定</button> |
| | | </view> |
| | | <!-- <uni-load-more v-show="matList.length != 0" :status="status" :icon-size="16" :content-text="contentText" /> --> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | request |
| | | } from '../../common/request.js' |
| | | export default { |
| | | data() { |
| | | return { |
| | | matList: [], |
| | | condition:'', |
| | | baseUrl: '', |
| | | token: '', |
| | | itemStyle: { |
| | | border: "1px solid #e54d42", |
| | | }, |
| | | selectedList:[], |
| | | repeatClick: false, |
| | | matnrCode:'', |
| | | asnCode:'', |
| | | |
| | | } |
| | | }, |
| | | // onReachBottom() { |
| | | // this.status = 'more'; |
| | | // this.showMat(this.tagIdNow); |
| | | // }, |
| | | onLoad() { |
| | | // 没啥用了 |
| | | let that = this |
| | | // const eventChannel = this.$scope.eventChannel; // 兼容APP-NVUE |
| | | const eventChannel = this.getOpenerEventChannel(); |
| | | |
| | | // 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据 |
| | | eventChannel.on('data', function(data) { |
| | | that.getDet(data) |
| | | }) |
| | | }, |
| | | onShow() { |
| | | this.baseUrl = uni.getStorageSync('baseUrl'); |
| | | this.token = uni.getStorageSync('token'); |
| | | |
| | | }, |
| | | methods: { |
| | | search(){ |
| | | let req = { |
| | | matnrCode: this.condition, |
| | | asnCode: this.condition, |
| | | code: this.condition, |
| | | batch: this.condition |
| | | } |
| | | this.getDet(req); |
| | | }, |
| | | back() { |
| | | for (var i = 0; i < this.matList.length; i++) { |
| | | if(this.matList[i].selected === true){ |
| | | this.selectedList.push(this.matList[i]) |
| | | } |
| | | } |
| | | this.getOpenerEventChannel().emit('backData', {data: this.selectedList}); |
| | | uni.navigateBack({ |
| | | |
| | | }) |
| | | }, |
| | | selectedItem(index){ |
| | | |
| | | if(this.matList[index].selected === '' || this.matList[index].selected === null || this.matList[index].selected === undefined){ |
| | | this.matList[index].selected = true |
| | | }else{ |
| | | this.matList[index].selected = !this.matList[index].selected |
| | | } |
| | | }, |
| | | async getDet(req) { |
| | | let that = this; |
| | | uni.showLoading({ |
| | | title:'加载中...' |
| | | }) |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/asnOrderItem/trackCode', { |
| | | matnrCode: req.matnrCode, |
| | | asnCode: req.asnCode, |
| | | code: req.code, |
| | | batch: req.batch |
| | | }, "post") |
| | | if (code === 200) { |
| | | for (var i = 0; i < data.length; i++) { |
| | | data[i].receiptQty =0; |
| | | data[i].selected = false; |
| | | } |
| | | this.matList = data |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | } |
| | | uni.hideLoading(); |
| | | }, |
| | | |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | @import url('../../static/css/wms.css/wms.css'); |
| | | .index { |
| | | border: 1px solid #e54d42; |
| | | color: #e54d42; |
| | | border-radius: 50%; |
| | | display: block; |
| | | width: 50rpx; |
| | | height: 50rpx; |
| | | line-height: 48rpx; |
| | | text-align: center; |
| | | margin-right: 20rpx; |
| | | font-size: 30rpx; |
| | | } |
| | | |
| | | .text-blue { |
| | | color: #0081ff !important; |
| | | |
| | | } |
| | | |
| | | .act { |
| | | border: 1px solid #e54d42; |
| | | } |
| | | |
| | | .item { |
| | | position: relative; |
| | | display: flex; |
| | | min-height: 80upx; |
| | | align-items: center; |
| | | } |
| | | </style> |
| | |
| | | <template>
|
| | | <view class="has-foot">
|
| | | <form>
|
| | | <view class="cu-form-group margin-top">
|
| | | <view class="title">ASN单</view>
|
| | | <input placeholder="请扫描ASN单" v-model="asnCode" focus></input>
|
| | | </view>
|
| | |
|
| | | <view class="cu-form-group ">
|
| | | <view class="title">托盘</view>
|
| | | <input placeholder="请扫描托盘" v-model="container"></input>
|
| | | </view>
|
| | |
|
| | | <view class="cu-form-group ">
|
| | | <view class="title">物料码</view>
|
| | | <input placeholder="请扫描物料码" v-model="barcode"></input>
|
| | | <view class="title">容器码</view>
|
| | | <input placeholder="请扫描容器码" v-model="container"></input>
|
| | | <text class='cuIcon-search text-blue' @click="search"></text>
|
| | | </view>
|
| | | <view class="cu-form-group">
|
| | | <view class="title">库位码</view>
|
| | | <input placeholder="请扫描库位码" v-model="locCode"></input>
|
| | | </view>
|
| | | </form>
|
| | | <view class="cu-list det menu sm-border padding">
|
| | |
| | | {{index+1}}
|
| | | </view>
|
| | | <view class="text-blue">
|
| | | {{`${item.maktx}`}}
|
| | | 编码:{{`${item.matnrCode}`}}
|
| | | </view>
|
| | | </view>
|
| | | <view class="action">
|
| | | <text @click="remove(index)" class="cuIcon-close text-red" style="font-size: 24px;"></text>
|
| | | </view>
|
| | | |
| | | </view>
|
| | |
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">名称:</text>
|
| | | <text class="text-grey ">{{item.maktx}}</text>
|
| | | </view>
|
| | | |
| | | </view>
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">ASN:</text>
|
| | |
| | | <text class="text-grey ">{{item.asnCode}}</text>
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">托盘:</text>
|
| | | </view>
|
| | | <view class="action">
|
| | | <text class="text-grey ">{{item.barcode}}</text>
|
| | | </view>
|
| | | </view>
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">供应商批次:</text>
|
| | | </view>
|
| | | <view class="action">
|
| | | <text class="text-grey ">{{item.splrBatch}}</text>
|
| | | </view>
|
| | | </view>
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">库存批次:</text>
|
| | | <text class="text-black">批次:</text>
|
| | | </view>
|
| | | <view class="action">
|
| | | <text class="text-grey ">{{item.batch}}</text>
|
| | |
| | | </view>
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">收货数量:</text>
|
| | | <text class="text-black">数量:</text>
|
| | | </view>
|
| | | <view class="action">
|
| | | <text class="text-grey ">{{item.anfme}}</text>
|
| | |
| | | </block>
|
| | | </view>
|
| | |
|
| | | <view class="cu-form-group margin-bottom">
|
| | | <view class="title">库位码</view>
|
| | | <input placeholder="请扫描库位码" v-model="locCode"></input>
|
| | | </view>
|
| | | |
| | | <view class="cu-bar btn-group foot">
|
| | | <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button>
|
| | | <button class="cu-btn bg-blue shadow-blur" @click="confirm">上架</button>
|
| | |
| | | code,
|
| | | data,
|
| | | msg
|
| | | } = await request('/stock/operate/list', {
|
| | | asnCode: this.asnCode,
|
| | | barcode: this.container,
|
| | | matnrCode: this.barcode
|
| | | } = await request('/stock/operate/list', { |
| | | barcode: this.container, |
| | | })
|
| | | if (code === 200) {
|
| | | // const find = this.list.find(el => el.id === data.id);
|
| | | // !find && |
| | | this.list.push(data)
|
| | | this.list = data
|
| | | } else {
|
| | | uni.showToast({
|
| | | title: msg,
|
| | |
| | | },
|
| | |
|
| | | async confirm() {
|
| | | if (this.locCode !== '') {
|
| | | const {
|
| | | code,
|
| | | data,
|
| | | msg
|
| | | } = await request('/stock/operate', {
|
| | | itemList: this.list,
|
| | | locCode: this.locCode
|
| | | if (this.locCode === '' || this.locCode === null) {
|
| | | uni.showToast({
|
| | | title: '请输入库位',
|
| | | icon: "none",
|
| | | })
|
| | | if (code === 200) {
|
| | | uni.showToast({
|
| | | title: '上架成功'
|
| | | })
|
| | | this.list = []
|
| | | this.barcode = ''
|
| | | } else {
|
| | | uni.showToast({
|
| | | title: msg,
|
| | | icon: "none",
|
| | | })
|
| | | }
|
| | | return ;
|
| | | }
|
| | | if (this.container === '' || this.container === null) {
|
| | | uni.showToast({
|
| | | title: '请输入托盘码',
|
| | | icon: "none",
|
| | | })
|
| | | return ;
|
| | | }
|
| | | const {
|
| | | code,
|
| | | data,
|
| | | msg
|
| | | } = await request('/stock/operate', {
|
| | | itemList: this.list,
|
| | | locCode: this.locCode,
|
| | | barcode: this.container,
|
| | | |
| | | })
|
| | | if (code === 200) {
|
| | | uni.showToast({
|
| | | title: '上架成功'
|
| | | })
|
| | | this.list = []
|
| | | this.locCode = ''
|
| | | this.container = ''
|
| | | } else {
|
| | | uni.showToast({
|
| | | title: '请选择库位',
|
| | | title: msg,
|
| | | icon: "none",
|
| | | })
|
| | | }
|
| | | |
| | |
|
| | |
|
| | | },
|
| New file |
| | |
| | | <template> |
| | | <view class="has-foot"> |
| | | <view> |
| | | |
| | | <form> |
| | | <view class="cu-form-group margin-top"> |
| | | <view class="title">容器号</view> |
| | | <input placeholder="请扫描容器号" v-model="container" focus></input> |
| | | <text class='cuIcon-search text-blue' @click="getList"></text> |
| | | </view> |
| | | <view class="cu-form-group"> |
| | | <view class="title">物料编码</view> |
| | | <input placeholder="请扫描物料编码" v-model="matnrCode"></input> |
| | | <text class='cuIcon-search text-blue' @click="search"></text> |
| | | </view> |
| | | <view class="cu-form-group"> |
| | | <view class="title">ASN单号</view> |
| | | <input placeholder="请输入ASN单号" v-model="asnCode"></input> |
| | | </view> |
| | | </form> |
| | | |
| | | <view class="flex solid-bottom padding-sm justify-between"> |
| | | <view class="text-blue">物料总类:{{list.length}}</view> |
| | | <view class="text-blue">组盘总数:{{allCount}}</view> |
| | | </view> |
| | | |
| | | </view> |
| | | |
| | | <view class="padding-lr margin-top-sm"> |
| | | <block v-for="(item, index) in list" :key="index"> |
| | | <view class="cu-list det menu sm-border margin-bottom-sm " :class="[item.trackCode===barcode&&'act']" |
| | | :ref="item.trackCode+'ref'"> |
| | | <view class="cu-bar bg-white solid-bottom "> |
| | | <view class="action"> |
| | | <view class="index"> |
| | | {{index+1}} |
| | | </view> |
| | | <view class="text-blue"> |
| | | 编码: |
| | | {{`${item.matnrCode}`}} |
| | | </view> |
| | | </view> |
| | | <view class="action" v-if="!isconfirm"> |
| | | <text @click="remove(index)" class="cuIcon-close text-red" style="font-size: 24px;"></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">物料编码:</text> |
| | | <text class="text-grey ">{{item.maktx}}</text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">ASN:</text> |
| | | </view> |
| | | <view class="action"> |
| | | <text class="text-grey ">{{item.asnCode}}</text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">供应商批次:</text> |
| | | </view> |
| | | <view class="action"> |
| | | <text class="text-grey ">{{item.splrBatch}}</text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">质检结果: <text class="text-grey ">{{item.inspect}}</text></text> |
| | | </view> |
| | | </view> |
| | | <!-- <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">平台行号: <text class="text-grey ">{{item.platformId}}</text></text> |
| | | </view> |
| | | <view class="content"> |
| | | <text class="text-black">质检结果: <text class="text-grey ">{{item.inspect}}</text></text> |
| | | </view> |
| | | </view> --> |
| | | |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">库存单位: <text class="text-grey ">{{item.stockUnit}}</text></text> |
| | | </view> |
| | | <view class="content"> |
| | | <text class="text-black">收货数量: <text class="text-grey ">{{item.anfme}}</text></text> |
| | | </view> |
| | | <view class="content"> |
| | | <text class="text-black">已上架数量: <text |
| | | class="text-grey ">{{item.workQty + item.qty}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-black">可组盘数量: <text |
| | | class="text-grey ">{{item.anfme - item.workQty - item.qty}}</text></text> |
| | | </view> |
| | | |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <view class="cu-form-group padding-lr-0"> |
| | | <view class="title text-blue"><text |
| | | class="text-red text-xl vertical-middle">*</text>组盘数量: |
| | | </view> |
| | | <uni-number-box style="width: 70%;" :min="0" :max="max" :decimal="2" :step="0.01" v-model="item.receiptQty" |
| | | ></uni-number-box> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </block> |
| | | </view> |
| | | <view class="cu-bar btn-group foot"> |
| | | <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button> |
| | | <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">组盘</button> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | request |
| | | } from '../../common/request.js' |
| | | import { |
| | | mapState, |
| | | mapMutations, |
| | | mapActions, |
| | | mapGetters |
| | | } from 'vuex'; |
| | | export default { |
| | | data() { |
| | | return { |
| | | barcode: '', |
| | | container: '', |
| | | megreQty: '', |
| | | list: [], |
| | | range: [], |
| | | asnCode: '', |
| | | repeatClick: false, |
| | | isconfirm: false, |
| | | matnrCode:'', |
| | | max: 99999999, |
| | | } |
| | | }, |
| | | computed: { |
| | | ...mapState('user', ['dynamicFields']), |
| | | allCount() { |
| | | return this.list.reduce((acc, row) => +row.anfme + acc, 0) || 0 |
| | | } |
| | | }, |
| | | mounted() {}, |
| | | methods: { |
| | | async search() { |
| | | const find = this.list.find(el => el.trackCode === this.barcode); |
| | | find ? this.scrollTo() : this.getDet(); |
| | | |
| | | }, |
| | | getDet() { |
| | | let that = this; |
| | | uni.navigateTo({ |
| | | url: "../listing/itemSelect", |
| | | success: function(res) { |
| | | // 通过eventChannel向被打开页面传送数据 向另外一个页面传递值的 |
| | | res.eventChannel.emit('data', { |
| | | matnrCode: that.matnrCode, |
| | | asnCode: that.asnCode |
| | | }) |
| | | }, |
| | | events: { |
| | | // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据 另外一个页面传过来的 |
| | | backData: function(data) { |
| | | that.showBackData(data.data) |
| | | }, |
| | | }, |
| | | |
| | | |
| | | }); |
| | | }, |
| | | // async getDet() { |
| | | // let that = this; |
| | | // const { |
| | | // code, |
| | | // data, |
| | | // msg |
| | | // } = await request('/asnOrderItem/trackCode', { |
| | | // matnrCode: that.matnrCode, |
| | | // asnCode: that.asnCode |
| | | // }, "post") |
| | | // if (code === 200) { |
| | | // data.map(item => { |
| | | // item.receiptQty = 0; |
| | | // item.selected = false; |
| | | // }) |
| | | // // for (var i = 0; i < data.length; i++) { |
| | | // // data[i].receiptQty =1; |
| | | // // data[i].selected = false; |
| | | // // } |
| | | // if(data !== [] || data !== null){ |
| | | // uni.navigateTo({ |
| | | // url: "../listing/itemSelect", |
| | | // success: function(res) { |
| | | // // 通过eventChannel向被打开页面传送数据 向另外一个页面传递值的 |
| | | // res.eventChannel.emit('data', { |
| | | // item: data |
| | | // }) |
| | | // }, |
| | | // events: { |
| | | // // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据 另外一个页面传过来的 |
| | | // backData: function(data) { |
| | | // that.showBackData(data.data) |
| | | // }, |
| | | // }, |
| | | |
| | | |
| | | // }); |
| | | |
| | | // } |
| | | |
| | | // // this.list = data |
| | | // } else { |
| | | // uni.showToast({ |
| | | // title: msg, |
| | | // icon: "none", |
| | | // position: 'top' |
| | | // }) |
| | | // } |
| | | // }, |
| | | async getList() { |
| | | if(this.container === '' || this.container === null){ |
| | | uni.showToast({ |
| | | title: "容器码为空", |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | return ; |
| | | } |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/asnOrderItem/container', { |
| | | barcode: this.container |
| | | }) |
| | | if (code === 200) { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "success", |
| | | position: 'top' |
| | | }) |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | } |
| | | }, |
| | | showBackData(data){ |
| | | let status ; |
| | | data.map(item => { |
| | | this.list.push(item) |
| | | }) |
| | | let oldLength = this.list.length |
| | | this.list = this.list.filter((item, index, self) => |
| | | self.findIndex(i => ( |
| | | i.id === item.id // 根据id去重 |
| | | )) === index && item.isptResult === self[0].isptResult |
| | | ); |
| | | let newLength = this.list.length |
| | | |
| | | if(oldLength > newLength){ |
| | | this.showMsg("新明细被过滤,请检查状态") |
| | | |
| | | } |
| | | |
| | | }, |
| | | showMsg(msg){ |
| | | setTimeout(function() { |
| | | uni.showToast({ |
| | | icon: "none", |
| | | position: 'top', |
| | | title: msg, |
| | | duration:2000, |
| | | }) |
| | | }, 200); |
| | | |
| | | }, |
| | | scrollTo() { |
| | | const ref = this.$refs[`${this.barcode}ref`][0]; |
| | | uni.pageScrollTo({ |
| | | scrollTop: ref.$el.offsetTop, |
| | | duration: 300 |
| | | }) |
| | | }, |
| | | remove(index) { |
| | | this.list.splice(index, 1); |
| | | }, |
| | | clear() { |
| | | this.list = [] |
| | | this.barcode = '' |
| | | }, |
| | | next() { |
| | | if (this.list.length) { |
| | | this.isconfirm = true |
| | | } else { |
| | | uni.showToast({ |
| | | icon: "none", |
| | | title: '未选物料标签' |
| | | }) |
| | | } |
| | | }, |
| | | prev() { |
| | | this.isconfirm = false |
| | | }, |
| | | async confirm() { |
| | | if(this.container === '' || this.container === null){ |
| | | uni.showToast({ |
| | | title: "容器码为空", |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | return ; |
| | | } |
| | | if(this.list.length ===0 || this.list === null){ |
| | | uni.showToast({ |
| | | title: "未添加明细", |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | return ; |
| | | } |
| | | this.repeatClick = true |
| | | const newArr = this.list.map(item => { |
| | | |
| | | return { |
| | | ...item, |
| | | anfme: item.anfme === null ? 0 : +item.anfme, |
| | | }; |
| | | }); |
| | | |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/waitPakin/merge', { |
| | | items: newArr, |
| | | barcode: this.container, |
| | | }) |
| | | if (code === 200) { |
| | | uni.showToast({ |
| | | title: '组盘成功' |
| | | }) |
| | | this.list = [] |
| | | this.barcode = '' |
| | | this.container = '' |
| | | this.isconfirm = false |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | } |
| | | this.repeatClick = false |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | .index { |
| | | border: 1px solid #e54d42; |
| | | color: #e54d42; |
| | | border-radius: 50%; |
| | | display: block; |
| | | width: 50rpx; |
| | | height: 50rpx; |
| | | line-height: 48rpx; |
| | | text-align: center; |
| | | margin-right: 20rpx; |
| | | font-size: 30rpx; |
| | | } |
| | | |
| | | .text-blue { |
| | | color: #0081ff !important; |
| | | |
| | | } |
| | | |
| | | .act { |
| | | border: 1px solid #e54d42; |
| | | } |
| | | |
| | | .item { |
| | | position: relative; |
| | | display: flex; |
| | | min-height: 80upx; |
| | | align-items: center; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template>
|
| | | <view class="has-foot">
|
| | | <view>
|
| | | <form>
|
| | | <view class="cu-form-group ">
|
| | | <view class="title">容器号</view>
|
| | | <input placeholder="请扫描容器号" v-model="container" focus></input>
|
| | | <text class='cuIcon-search text-blue' @click="getList"></text>
|
| | | </view>
|
| | | <view class="cu-form-group">
|
| | | <view class="title">编码</view>
|
| | | <input placeholder="请扫描组托档编码" v-model="pkCode"></input>
|
| | | <text class='cuIcon-search text-blue' @click="getList"></text>
|
| | | </view>
|
| | | </form>
|
| | | <view class="flex solid-bottom padding-sm justify-between">
|
| | | <view class="text-blue">物料总类:{{list.length}}</view>
|
| | | <view class="text-blue">组盘总数:{{allCount}}</view>
|
| | | </view>
|
| | | </view>
|
| | | <view class="padding-lr margin-top-sm">
|
| | | <block v-for="(item, index) in list" :key="index">
|
| | | <view class="cu-list det menu sm-border margin-bottom-sm " :class="[item.trackCode===barcode&&'act']"
|
| | | :ref="item.trackCode+'ref'">
|
| | | <view class="cu-bar bg-white solid-bottom ">
|
| | | <view class="action">
|
| | | <view class="index">
|
| | | {{index+1}}
|
| | | </view>
|
| | | <view class="text-blue">
|
| | | 编码:
|
| | | {{`${item.matnrCode}`}}
|
| | | </view>
|
| | | </view>
|
| | | <view class="action" v-if="!isconfirm">
|
| | | <text @click="remove(index)" class="cuIcon-close text-red" style="font-size: 24px;"></text>
|
| | | </view>
|
| | | </view>
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">物料编码:</text>
|
| | | <text class="text-grey ">{{item.maktx}}</text>
|
| | | </view>
|
| | | </view>
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">ASN:</text>
|
| | | <text class="text-grey ">{{item.asnCode}}</text>
|
| | | </view> |
| | | </view>
|
| | | |
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">批次:</text>
|
| | | <text class="text-grey ">{{item.batch}}</text>
|
| | | </view> |
| | | </view>
|
| | | <view class="cu-item"> |
| | | <view class="content">
|
| | | <text class="text-black">质检状态:</text>
|
| | | <text class="text-grey ">{{item.isptResult$}}</text>
|
| | | </view> |
| | | </view>
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">库存单位: <text class="text-grey ">{{item.stockUnit}}</text></text>
|
| | | </view>
|
| | | </view> |
| | | <view class="cu-item">
|
| | |
|
| | | <view class="content">
|
| | | <text class="text-black">已组托数: <text class="text-grey ">{{item.anfme}}</text></text>
|
| | | </view>
|
| | | <view class="content">
|
| | | <text class="text-black">已执行数量: <text class="text-grey ">{{item.workQty}}</text></text>
|
| | | </view>
|
| | | </view>
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">可解绑数量: <text
|
| | | class="text-grey ">{{item.anfme - item.workQty}}</text></text>
|
| | | </view>
|
| | | </view>
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <view class="cu-form-group padding-lr-0">
|
| | | <view class="title text-blue"><text
|
| | | class="text-red text-xl vertical-middle">*</text>解绑数量:
|
| | | </view>
|
| | | <uni-number-box style="width: 70%;" :max="max" v-model="item.receiptQty"
|
| | | :step='1'></uni-number-box>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </block>
|
| | | </view>
|
| | | <view class="cu-bar btn-group foot">
|
| | | <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button>
|
| | | <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">解绑</button>
|
| | | </view>
|
| | | </view>
|
| | | </template>
|
| | |
|
| | | <script>
|
| | | import {
|
| | | request
|
| | | } from '../../common/request.js'
|
| | | import {
|
| | | mapState,
|
| | | mapMutations,
|
| | | mapActions,
|
| | | mapGetters
|
| | | } from 'vuex';
|
| | | export default {
|
| | | data() {
|
| | | return {
|
| | | barcode: '',
|
| | | container: '',
|
| | | megreQty: '',
|
| | | list: [],
|
| | | range: [],
|
| | | asnCode: '',
|
| | | repeatClick: false,
|
| | | isconfirm: false,
|
| | | matnrCode: '',
|
| | | max: 99999999,
|
| | | pkCode: '',
|
| | | }
|
| | | },
|
| | | computed: {
|
| | | ...mapState('user', ['dynamicFields']),
|
| | | allCount() {
|
| | | return this.list.reduce((acc, row) => +row.anfme + acc, 0) || 0
|
| | | }
|
| | | },
|
| | | mounted() {},
|
| | | methods: {
|
| | | async search() {
|
| | | const find = this.list.find(el => el.trackCode === this.barcode);
|
| | | find ? this.scrollTo() : this.getDet();
|
| | |
|
| | | },
|
| | | async getDet() {
|
| | | const {
|
| | | code,
|
| | | data,
|
| | | msg
|
| | | } = await request('/asnOrderItem/trackCode', {
|
| | | matnrCode: this.matnrCode,
|
| | | asnCode: this.asnCode
|
| | | }, "post")
|
| | | if (code === 200) { |
| | | for (var i = 0; i < data.length; i++) {
|
| | | data[i].receiptQty = 0;
|
| | | data[i].selected = false;
|
| | | }
|
| | | this.list = data
|
| | | } else {
|
| | | uni.showToast({
|
| | | title: msg,
|
| | | icon: "none",
|
| | | position: 'top'
|
| | | })
|
| | | }
|
| | | },
|
| | | async getList() {
|
| | | const {
|
| | | code,
|
| | | data,
|
| | | msg
|
| | | } = await request('/asnOrderItem/container', {
|
| | | barcode: this.container,
|
| | | code: this.pkCode,
|
| | | type: 'unbind'
|
| | | })
|
| | | if (code === 200) {
|
| | | for (var i = 0; i < data.length; i++) {
|
| | | data[i].receiptQty = 0; |
| | | }
|
| | | this.list = data
|
| | | } else {
|
| | | uni.showToast({
|
| | | title: msg,
|
| | | icon: "none",
|
| | | position: 'top'
|
| | | })
|
| | | }
|
| | | },
|
| | | scrollTo() {
|
| | | const ref = this.$refs[`${this.barcode}ref`][0];
|
| | | uni.pageScrollTo({
|
| | | scrollTop: ref.$el.offsetTop,
|
| | | duration: 300
|
| | | })
|
| | | },
|
| | | remove(index) {
|
| | | this.list.splice(index, 1);
|
| | | },
|
| | | clear() {
|
| | | this.list = []
|
| | | this.barcode = ''
|
| | | },
|
| | | next() {
|
| | | if (this.list.length) {
|
| | | this.isconfirm = true
|
| | | } else {
|
| | | uni.showToast({
|
| | | icon: "none",
|
| | | title: '未选物料标签'
|
| | | })
|
| | | }
|
| | | },
|
| | | prev() {
|
| | | this.isconfirm = false
|
| | | },
|
| | | async confirm() {
|
| | | this.repeatClick = true
|
| | | const newArr = this.list.map(item => {
|
| | |
|
| | | return {
|
| | | ...item, |
| | | extendFields: {},
|
| | | anfme: item.anfme === null ? 0 : +item.anfme,
|
| | | };
|
| | | });
|
| | |
|
| | | const {
|
| | | code,
|
| | | data,
|
| | | msg
|
| | | } = await request('/waitPakin/unbind', {
|
| | | items: newArr,
|
| | | barcode: this.container,
|
| | | })
|
| | | if (code === 200) {
|
| | | uni.showToast({
|
| | | title: '解绑成功'
|
| | | })
|
| | | this.list = []
|
| | | this.barcode = ''
|
| | | this.container = ''
|
| | | this.isconfirm = false
|
| | | } else {
|
| | | uni.showToast({
|
| | | title: msg,
|
| | | icon: "none",
|
| | | position: 'top'
|
| | | })
|
| | | }
|
| | | this.repeatClick = false
|
| | | },
|
| | | }
|
| | | }
|
| | | </script>
|
| | |
|
| | | <style>
|
| | | .index {
|
| | | border: 1px solid #e54d42;
|
| | | color: #e54d42;
|
| | | border-radius: 50%;
|
| | | display: block;
|
| | | width: 50rpx;
|
| | | height: 50rpx;
|
| | | line-height: 48rpx;
|
| | | text-align: center;
|
| | | margin-right: 20rpx;
|
| | | font-size: 30rpx;
|
| | | }
|
| | |
|
| | | .text-blue {
|
| | | color: #0081ff !important;
|
| | |
|
| | | }
|
| | |
|
| | | .act {
|
| | | border: 1px solid #e54d42;
|
| | | }
|
| | |
|
| | | .item {
|
| | | position: relative;
|
| | | display: flex;
|
| | | min-height: 80upx;
|
| | | align-items: center;
|
| | | }
|
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <view class="bodyView"> |
| | | <view class="topView"> |
| | | <image src="/static/img/login_top.png" mode="aspectFill"> |
| | | </image> |
| | | </view> |
| | | <view class="logoView"> |
| | | <image src="/static/img/newLogo.png" mode="aspectFit"> |
| | | </image> |
| | | </view> |
| | | <view class="bottomView"> |
| | | <view class="itemView" style="margin-bottom: 40px;"> |
| | | <view class="helloText">{{$t('index.hello')}}</view> |
| | | <view class="introText">{{$t('index.intro')}}</view> |
| | | </view> |
| | | <view class="itemView"> |
| | | <view class="textType3">{{$t('login.user')}}:</view> |
| | | <view class="input-wrapper"> |
| | | <input class="uni-input" v-model="user.userName" focus :placeholder="$t('login.inputUser')" /> |
| | | </view> |
| | | </view> |
| | | <view class="itemView"> |
| | | <view class="textType3">{{$t('login.pwd')}}:</view> |
| | | <view class="input-wrapper"> |
| | | <input class="uni-input" v-model="user.password" :placeholder="$t('login.inputPwd')" :password="!showPassword" /> |
| | | <image src="/static/img/login_noteye.png" class="eye-icon" v-if="showPassword" |
| | | @click="changePassword"></image> |
| | | <image src="/static/img/login_eye.png" class="eye-icon" v-if="!showPassword" |
| | | @click="changePassword"></image> |
| | | </view> |
| | | </view> |
| | | <view class="langAndRemView"> |
| | | <view class="check"> |
| | | <view > |
| | | <view>{{$t('login.remPwd')}}</view> |
| | | </view> |
| | | <view> |
| | | <switch :checked='remberPassword' color="#FFCC33" style="transform:scale(0.7)" @change="remberChange" /> |
| | | </view> |
| | | </view> |
| | | <view class="langView"> |
| | | <!-- 语言选择下拉菜单 --> |
| | | <view class="language-dropdown"> |
| | | <view class="selected-language" @click="toggleLanguageDropdown"> |
| | | <text>{{getCurrentLanguageText()}}</text> |
| | | <uni-icons type="bottom" size="14" color="#707070"></uni-icons> |
| | | </view> |
| | | <view class="language-options" v-if="showLanguageDropdown"> |
| | | <view class="language-option" v-for="(item, index) in locales" :key="index" @click="onLocaleChange(item)"> |
| | | <text>{{item.text}}</text> |
| | | <uni-icons type="checkmarkempty" size="14" color="#007AFF" v-if="item.code == applicationLocale"></uni-icons> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="itemView"> |
| | | <button class="loadingButton" @click="onLogin()" :loading="loading">{{btnText}}</button> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import md5 from '../../static/js/md5.js' |
| | | import { |
| | | request |
| | | } from '../../common/request.js' |
| | | export default{ |
| | | data(){ |
| | | return{ |
| | | showPassword: false, |
| | | loading: false, |
| | | showLanguageDropdown: false, |
| | | loginButton: 'login.login', |
| | | systemLocale: '', |
| | | applicationLocale: '', |
| | | remberPassword: true, |
| | | user: { |
| | | userName: '', |
| | | password: '', |
| | | }, |
| | | } |
| | | }, |
| | | computed:{ |
| | | locales() { |
| | | return [{ |
| | | text: this.$t('locale.auto'), |
| | | code: 'auto' |
| | | }, { |
| | | text: this.$t('locale.en'), |
| | | code: 'en' |
| | | }, |
| | | { |
| | | text: this.$t('locale.zh-hans'), |
| | | code: 'zh-Hans' |
| | | }, |
| | | { |
| | | text: this.$t('locale.zh-hant'), |
| | | code: 'zh-Hant' |
| | | }, |
| | | { |
| | | text: this.$t('locale.ja'), |
| | | code: 'ja' |
| | | } |
| | | ] |
| | | }, |
| | | btnText() { |
| | | return this.$t(this.loginButton); |
| | | } |
| | | }, |
| | | onLoad(){ |
| | | let systemInfo = uni.getSystemInfoSync(); |
| | | this.systemLocale = systemInfo.language; |
| | | this.applicationLocale = uni.getLocale(); |
| | | this.isAndroid = systemInfo.platform.toLowerCase() === 'android'; |
| | | uni.onLocaleChange((e) => { |
| | | this.applicationLocale = e.locale; |
| | | }) |
| | | |
| | | this.user = uni.getStorageSync('user') |
| | | if (!this.user) { |
| | | this.user = { |
| | | userName: '', |
| | | password: '' |
| | | } |
| | | } |
| | | }, |
| | | methods:{ |
| | | async onLogin() { |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/login', { |
| | | username: this.user.userName, |
| | | password: this.user.password, |
| | | }) |
| | | if (code === 200) { |
| | | this.loading = true; |
| | | this.loginButton = 'login.loging'; |
| | | uni.setStorageSync('token', data.accessToken); |
| | | uni.setStorageSync('userData', data.user); |
| | | if (this.remberPassword) { |
| | | uni.setStorageSync('user', this.user); |
| | | } else { |
| | | uni.removeStorageSync('user'); |
| | | } |
| | | this.goHome() |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg |
| | | }) |
| | | } |
| | | |
| | | }, |
| | | goHome() { |
| | | setTimeout(() => { |
| | | // this.getAuth2() |
| | | this.getFields() |
| | | uni.showToast({ |
| | | title: '登录成功' |
| | | }) |
| | | setTimeout(() => { |
| | | uni.reLaunch({ |
| | | url: '../home/index' |
| | | }); |
| | | }, 300) |
| | | }, 700) |
| | | }, |
| | | async getFields() { |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/dynamic/fields', {}, 'get') |
| | | if (code === 200) { |
| | | this.$store.commit('user/setFields', data) |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg |
| | | }) |
| | | } |
| | | }, |
| | | remberChange(e) { |
| | | this.remberPassword = !this.remberPassword |
| | | }, |
| | | // 显示/隐藏密码 |
| | | changePassword() { |
| | | this.showPassword = !this.showPassword; |
| | | }, |
| | | localChange() { |
| | | console.log(this.local) |
| | | if (this.isAndroid) { |
| | | uni.showModal({ |
| | | content: this.$t('index.language-change-confirm'), |
| | | success: (res) => { |
| | | if (res.confirm) { |
| | | uni.setLocale(this.local.value); |
| | | } |
| | | } |
| | | }) |
| | | } else { |
| | | uni.setLocale(this.local.value); |
| | | this.$i18n.locale = this.local.value; |
| | | } |
| | | }, |
| | | // 切换语言下拉菜单显示状态 |
| | | toggleLanguageDropdown() { |
| | | this.showLanguageDropdown = !this.showLanguageDropdown; |
| | | }, |
| | | |
| | | // 获取当前选择的语言文本 |
| | | getCurrentLanguageText() { |
| | | const currentLocale = this.locales.find(item => item.code === this.applicationLocale); |
| | | return currentLocale ? currentLocale.text : this.$t('locale.auto'); |
| | | }, |
| | | |
| | | // 语言选择改变 |
| | | onLocaleChange(e) { |
| | | if (this.isAndroid) { |
| | | uni.showModal({ |
| | | content: this.$t('index.language-change-confirm'), |
| | | success: (res) => { |
| | | if (res.confirm) { |
| | | uni.setLocale(e.code); |
| | | this.showLanguageDropdown = false; |
| | | } |
| | | } |
| | | }) |
| | | } else { |
| | | uni.setLocale(e.code); |
| | | this.$i18n.locale = e.code; |
| | | this.showLanguageDropdown = false; |
| | | } |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | .helloText{ |
| | | font-family: a2; |
| | | font-size: 20px; |
| | | margin-top: 10px; |
| | | margin-bottom: 5px; |
| | | } |
| | | .introText{ |
| | | font-family: a3; |
| | | font-size: 15px; |
| | | color: #ababab; |
| | | } |
| | | .textType3{ |
| | | font-family: a4; |
| | | } |
| | | .bodyView{ |
| | | display: flex; |
| | | flex-direction: column; |
| | | background-image: url("/static/img/login_backg.png"); |
| | | background-repeat: no-repeat; |
| | | background-size: cover; |
| | | background-position: center; |
| | | height: 100vh; |
| | | width: 100%; |
| | | } |
| | | .topView{ |
| | | flex: 7; |
| | | } |
| | | .topView image{ |
| | | width: 100%; |
| | | } |
| | | .logoView{ |
| | | flex: 1; |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | |
| | | } |
| | | .logoView image{ |
| | | width: 33%; |
| | | height: 50px; |
| | | margin-right: 20px; |
| | | } |
| | | .bottomView{ |
| | | flex: 15; |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: flex-start; |
| | | align-items: center; |
| | | } |
| | | .itemView{ |
| | | width: 90%; |
| | | height: 50px; |
| | | margin-bottom: 30px; |
| | | } |
| | | .langAndRemView{ |
| | | width: 90%; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | .langView{ |
| | | width: 30%; |
| | | } |
| | | .textImage{ |
| | | width: 60%; |
| | | height: 42px; |
| | | object-fit: cover; |
| | | margin-top: 20px; |
| | | margin-bottom: 30px; |
| | | } |
| | | |
| | | .input-wrapper { |
| | | /* #ifndef APP-NVUE */ |
| | | display: flex; |
| | | /* #endif */ |
| | | padding: 8px 13px; |
| | | flex-direction: row; |
| | | flex-wrap: nowrap; |
| | | background-color: #FFFFFF; |
| | | border-radius: 10px; |
| | | height: 45px; |
| | | align-items: center; |
| | | margin-top: 5px; |
| | | } |
| | | |
| | | .uni-input { |
| | | height: 28px; |
| | | line-height: 28px; |
| | | font-size: 15px; |
| | | padding: 0px; |
| | | flex: 1; |
| | | background-color: #FFFFFF; |
| | | |
| | | } |
| | | |
| | | .uni-icon { |
| | | font-family: uniicons; |
| | | font-size: 24px; |
| | | font-weight: normal; |
| | | font-style: normal; |
| | | width: 24px; |
| | | height: 24px; |
| | | line-height: 24px; |
| | | color: #999999; |
| | | } |
| | | |
| | | .uni-eye-active { |
| | | color: #007AFF; |
| | | } |
| | | |
| | | .eye-icon { |
| | | width: 20px; |
| | | height: 13px; |
| | | margin-left: 5px; |
| | | } |
| | | .loadingButton{ |
| | | background-color: #ffda1e; |
| | | font-family: a1; |
| | | } |
| | | .check { |
| | | |
| | | height: 100%; |
| | | display: flex; |
| | | font-size: 18px; |
| | | color: #606266; |
| | | justify-content: flex-start; |
| | | align-items: center; |
| | | |
| | | } |
| | | /* 语言选择下拉菜单 */ |
| | | .language-dropdown { |
| | | position: relative; |
| | | margin-bottom: 20rpx; |
| | | z-index: 10; |
| | | } |
| | | |
| | | .selected-language { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | padding: 15rpx 20rpx; |
| | | background-color: #f8f8f8; |
| | | border-radius: 8rpx; |
| | | border: 1px solid #e0e0e0; |
| | | } |
| | | |
| | | .language-options { |
| | | position: absolute; |
| | | bottom: 100%; |
| | | left: 0; |
| | | right: 0; |
| | | background-color: #ffffff; |
| | | border-radius: 8rpx; |
| | | box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); |
| | | border: 1px solid #e0e0e0; |
| | | margin-bottom: 5rpx; |
| | | } |
| | | |
| | | .language-option { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | padding: 15rpx 20rpx; |
| | | border-bottom: 1px solid #f0f0f0; |
| | | } |
| | | |
| | | .language-option:last-child { |
| | | border-bottom: none; |
| | | } |
| | | |
| | | .language-option:active { |
| | | background-color: #f5f5f5; |
| | | } |
| | | </style> |
| | |
| | | <template>
|
| | | <view>
|
| | | <!-- 设置 -->
|
| | | <!-- <view class="settings">
|
| | | <view class="settings">
|
| | | <view class="settings-btn">
|
| | | <uni-icons type="gear" size="30" color="#707070" @click="settings"></uni-icons>
|
| | | </view>
|
| | | </view> -->
|
| | | </view>
|
| | | <!-- logo -->
|
| | | <view class="logo">
|
| | | <view class="logo-box">
|
| | |
| | | </view>
|
| | | </view>
|
| | | <view class="content">
|
| | | <!-- 语言选择下拉菜单 -->
|
| | | <view class="language-dropdown">
|
| | | <view class="selected-language" @click="toggleLanguageDropdown">
|
| | | <text>{{getCurrentLanguageText()}}</text>
|
| | | <uni-icons type="bottom" size="14" color="#707070"></uni-icons>
|
| | | </view>
|
| | | <view class="language-options" v-if="showLanguageDropdown">
|
| | | <view class="language-option" v-for="(item, index) in locales" :key="index" @click="onLocaleChange(item)">
|
| | | <text>{{item.text}}</text>
|
| | | <uni-icons type="checkmarkempty" size="14" color="#007AFF" v-if="item.code == applicationLocale"></uni-icons>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | <!-- 账号 -->
|
| | | <view class="box shadow-warp">
|
| | | <view class="box-icon">
|
| | | <uni-icons type="person" size="20" color="#707070"></uni-icons>
|
| | | </view>
|
| | | <view class="box-text">账号:</view>
|
| | | <view class="box-text">{{$t('login.user')}}:</view>
|
| | | <view class="box-input">
|
| | | <input type="text" placeholder="请输入账号" v-model="user.userName"
|
| | | <input type="text" :placeholder="$t('login.inputUser')" v-model="user.userName"
|
| | | placeholder-style="font-size:14px;color:#ccc;">
|
| | | </view>
|
| | | <view class="box-show"></view>
|
| | |
| | | <view class="box-icon">
|
| | | <uni-icons type="locked" size="20" color="#707070"></uni-icons>
|
| | | </view>
|
| | | <view class="box-text">密码:</view>
|
| | | <view class="box-text">{{$t('login.pwd')}}:</view>
|
| | | <view class="box-input">
|
| | | <input :password="!showPassword" placeholder="请输入密码" v-model="user.password"
|
| | | <input :password="!showPassword" :placeholder="$t('login.inputPwd')" v-model="user.password"
|
| | | placeholder-style="font-size:14px;color:#ccc;">
|
| | | </view>
|
| | | <view class="box-show">
|
| | |
| | | <!-- 记住密码 -->
|
| | | <view class="check">
|
| | | <view class="check-left">
|
| | | <view>记住密码</view>
|
| | | <view>{{$t('login.remPwd')}}</view>
|
| | | </view>
|
| | | <view class="check-right">
|
| | | <switch :checked='remberPassword' color="#FFCC33" style="zoom:.5" @change="remberChange" />
|
| | |
| | | <!-- 登录按钮 -->
|
| | | <view class="submit">
|
| | | <view class="" style="width: 400rpx;">
|
| | | <button type="primary" @click="onLogin()" :loading="load.loading">{{load.btnText}}</button>
|
| | | |
| | | <button type="primary" @click="onLogin()" :loading="loading">{{btnText}}</button>
|
| | | </view>
|
| | |
|
| | | </view>
|
| | |
|
| | | <!-- 设置弹窗区域 -->
|
| | |
| | | <view class="popup-item">
|
| | | <view class="popup-item-left">项目:</view>
|
| | | <view class="popup-item-right"><input type="text" v-model="url.project"></view>
|
| | | </view>
|
| | | </view> |
| | | <view class="btn">
|
| | | <view class="btn-left" @click="close">取消</view>
|
| | | <view class="btn-right" @click="settingConfirm">确认</view>
|
| | |
| | | } from '../../common/request.js'
|
| | | export default {
|
| | | data() {
|
| | | return {
|
| | | return { |
| | | systemLocale: '',
|
| | | applicationLocale: '',
|
| | | version: '',
|
| | | showPassword: false,
|
| | | value: '',
|
| | |
| | | userName: '',
|
| | | password: '',
|
| | | },
|
| | | load: {
|
| | | loading: false,
|
| | | btnText: '登录'
|
| | | },
|
| | | loading: false, |
| | | msgType: 'success',
|
| | | filename: '',
|
| | | dialogContent: '',
|
| | | elements: [],
|
| | | colorList: ['cyan', 'blue', 'purple', 'mauve', 'pink', 'brown', 'red', 'orange', 'yellow', 'olive',
|
| | | 'olive', 'grey'
|
| | | ]
|
| | | ],
|
| | | showLanguageDropdown: false,
|
| | | loginButton: 'login.login'
|
| | | }
|
| | | },
|
| | | computed:{
|
| | | locales() {
|
| | | return [{
|
| | | text: this.$t('locale.auto'),
|
| | | code: 'auto'
|
| | | }, {
|
| | | text: this.$t('locale.en'),
|
| | | code: 'en'
|
| | | },
|
| | | {
|
| | | text: this.$t('locale.zh-hans'),
|
| | | code: 'zh-Hans'
|
| | | },
|
| | | {
|
| | | text: this.$t('locale.zh-hant'),
|
| | | code: 'zh-Hant'
|
| | | },
|
| | | {
|
| | | text: this.$t('locale.ja'),
|
| | | code: 'ja'
|
| | | }
|
| | | ]
|
| | | },
|
| | | btnText() { |
| | | return this.$t(this.loginButton); |
| | | }
|
| | | },
|
| | | onLoad() {
|
| | | let systemInfo = uni.getSystemInfoSync();
|
| | | this.systemLocale = systemInfo.language;
|
| | | this.applicationLocale = uni.getLocale();
|
| | | this.isAndroid = systemInfo.platform.toLowerCase() === 'android';
|
| | | uni.onLocaleChange((e) => {
|
| | | this.applicationLocale = e.locale;
|
| | | })
|
| | | |
| | | |
| | | this.user = uni.getStorageSync('user')
|
| | | this.url = uni.getStorageSync('url')
|
| | | this.baseUrl = uni.getStorageSync('baseUrl')
|
| | |
| | | project: ''
|
| | | }
|
| | | }
|
| | | },
|
| | | }, |
| | | onShow() {
|
| | | this.getVersion()
|
| | | },
|
| | | methods: {
|
| | | localChange() {
|
| | | console.log(this.local)
|
| | | if (this.isAndroid) {
|
| | | uni.showModal({
|
| | | content: this.$t('index.language-change-confirm'),
|
| | | success: (res) => {
|
| | | if (res.confirm) {
|
| | | uni.setLocale(this.local.value);
|
| | | }
|
| | | }
|
| | | })
|
| | | } else {
|
| | | uni.setLocale(this.local.value);
|
| | | this.$i18n.locale = this.local.value;
|
| | | }
|
| | | },
|
| | | // 切换语言下拉菜单显示状态
|
| | | toggleLanguageDropdown() {
|
| | | this.showLanguageDropdown = !this.showLanguageDropdown;
|
| | | },
|
| | | |
| | | // 获取当前选择的语言文本
|
| | | getCurrentLanguageText() {
|
| | | const currentLocale = this.locales.find(item => item.code === this.applicationLocale);
|
| | | return currentLocale ? currentLocale.text : this.$t('locale.auto');
|
| | | },
|
| | | |
| | | // 语言选择改变
|
| | | onLocaleChange(e) {
|
| | | if (this.isAndroid) {
|
| | | uni.showModal({
|
| | | content: this.$t('index.language-change-confirm'),
|
| | | success: (res) => {
|
| | | if (res.confirm) {
|
| | | uni.setLocale(e.code);
|
| | | this.showLanguageDropdown = false;
|
| | | }
|
| | | }
|
| | | })
|
| | | } else {
|
| | | uni.setLocale(e.code);
|
| | | this.$i18n.locale = e.code;
|
| | | this.showLanguageDropdown = false;
|
| | | }
|
| | | },
|
| | | // 显示/隐藏密码
|
| | | changePassword() {
|
| | | this.showPassword = !this.showPassword;
|
| | |
| | | },
|
| | | // 设置窗口开启按钮
|
| | | settings() {
|
| | | this.$refs.inputDialog.open()
|
| | | this.$refs.inputDialog.open('')
|
| | | },
|
| | | // 设置窗口确认修改按钮
|
| | | dialogInputConfirm() {
|
| | |
| | | password: this.user.password,
|
| | | })
|
| | | if (code === 200) {
|
| | | this.load.loading = true;
|
| | | this.load.btnText = '登录中';
|
| | | uni.setStorageSync('token', data.accessToken);
|
| | | if (this.remberPassword) {
|
| | | this.loading = true;
|
| | | this.loginButton = 'login.loging'; |
| | | uni.setStorageSync('token', data.accessToken); |
| | | uni.setStorageSync('userData', data.user); |
| | | if (this.remberPassword) { |
| | | uni.setStorageSync('user', this.user);
|
| | | } else {
|
| | | uni.removeStorageSync('user');
|
| | |
| | | </script>
|
| | | <style>
|
| | | @import url('../../static/css/wms.css/wms.css');
|
| | |
|
| | | |
| | | |
| | | /* 设置区域 */
|
| | | .settings {
|
| | | min-height: 100rpx;
|
| | |
| | | text-align: center;
|
| | | }
|
| | |
|
| | | .box-text {
|
| | | width: 100rpx;
|
| | | .box-text { |
| | | text-align: center;
|
| | | }
|
| | |
|
| | |
| | | font-size: 12px;
|
| | | color: #909399;
|
| | | }
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | | /* ------ */
|
| | |
|
| | | .shadow-warp {
|
| | |
| | | left: auto;
|
| | | transform: rotate(3deg);
|
| | | }
|
| | | </style> |
| | |
|
| | | /* 语言选择下拉菜单 */
|
| | | .language-dropdown {
|
| | | position: relative;
|
| | | margin-bottom: 20rpx;
|
| | | z-index: 10;
|
| | | }
|
| | | |
| | | .selected-language {
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | | align-items: center;
|
| | | padding: 15rpx 20rpx;
|
| | | background-color: #f8f8f8;
|
| | | border-radius: 8rpx;
|
| | | border: 1px solid #e0e0e0;
|
| | | }
|
| | | |
| | | .language-options {
|
| | | position: absolute;
|
| | | top: 100%;
|
| | | left: 0;
|
| | | right: 0;
|
| | | background-color: #ffffff;
|
| | | border-radius: 8rpx;
|
| | | box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
| | | border: 1px solid #e0e0e0;
|
| | | margin-top: 5rpx;
|
| | | }
|
| | | |
| | | .language-option {
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | | align-items: center;
|
| | | padding: 15rpx 20rpx;
|
| | | border-bottom: 1px solid #f0f0f0;
|
| | | }
|
| | | |
| | | .language-option:last-child {
|
| | | border-bottom: none;
|
| | | }
|
| | | |
| | | .language-option:active {
|
| | | background-color: #f5f5f5;
|
| | | }
|
| | |
|
| | | /* 其他样式 */
|
| | | .check {
|
| | | width: 78%;
|
| | | display: flex;
|
| | | font-size: 12px;
|
| | | color: #606266;
|
| | | margin-top: 10rpx;
|
| | | }
|
| | |
|
| | | .check-right {
|
| | | margin-left: auto;
|
| | | }
|
| | |
|
| | | .submit {
|
| | | display: flex;
|
| | | justify-content: center;
|
| | | position: fixed;
|
| | | width: 100%;
|
| | | bottom: 100rpx;
|
| | | }
|
| | |
|
| | | .version {
|
| | | position: fixed;
|
| | | width: 100%;
|
| | | bottom: 0;
|
| | | text-align: center;
|
| | | font-size: 12px;
|
| | | color: #909399;
|
| | | }
|
| | | /* ------ */
|
| | |
|
| | | .shadow-warp {
|
| | | position: relative;
|
| | | box-shadow: 0 0 10upx rgba(0, 0, 0, 0.1);
|
| | | }
|
| | |
|
| | | .shadow-warp:before,
|
| | | .shadow-warp:after {
|
| | | position: absolute;
|
| | | content: "";
|
| | | top: 20upx;
|
| | | bottom: 30upx;
|
| | | left: 20upx;
|
| | | width: 50%;
|
| | | box-shadow: 0 30upx 20upx rgba(0, 0, 0, 0.2);
|
| | | transform: rotate(-3deg);
|
| | | z-index: -1;
|
| | | }
|
| | |
|
| | | .shadow-warp:after {
|
| | | right: 20upx;
|
| | | left: auto;
|
| | | transform: rotate(3deg);
|
| | | }
|
| | | </style>
|
| | |
| | | <view class="has-foot"> |
| | | <form> |
| | | <view class="cu-form-group" v-show="!isconfirm"> |
| | | <view class="title">容器/库位码</view> |
| | | <input placeholder="请扫描容器/库位码" v-model="barcode" @input="search()" focus></input> |
| | | <view class="title">容器码</view> |
| | | <input placeholder="请扫描容器码" v-model="barcode" focus></input> |
| | | <text class='cuIcon-close text-gray margin-right-xs' v-show="barcode!==''" @click="clearCode"></text> |
| | | <text class='cuIcon-search text-blue' @click="search"></text> |
| | | </view> |
| | | |
| | | </form> |
| | | <view class="cu-form-group" v-show="isClickItem"> |
| | | <!-- <view class="cu-form-group" v-show="isClickItem"> |
| | | <view class="title">QR码</view> |
| | | <input placeholder="请扫描QR码" v-model="QRbarcode" ></input> |
| | | |
| | | </view> |
| | | </view> --> |
| | | |
| | | |
| | | <view class="cu-list det menu sm-border padding"> |
| | | <block v-for="(item, index) in list" :key="index"> |
| | | <view :style="clickItem === index ?itemStyle : {}" class="cu-list det menu " @click="clickTaskItem(index)"> |
| | | <view :style="clickItem === index ?itemStyle : {}" class="cu-list det menu " > |
| | | |
| | | |
| | | <view class="cu-bar bg-white solid-bottom margin-top-sm"> |
| | |
| | | <view class="content"> |
| | | <text class="text-gray">编码:<text class="text-black ">{{item.matnrCode}}</text></text> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">订单:<text class="text-black ">{{item.trackCode}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">出库单:<text class="text-black ">{{item.trackCode}}</text></text> |
| | | <text class="text-gray">出库单:<text class="text-black ">{{item.sourceCode}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | |
| | | <view class="content"> |
| | | <text class="text-gray">库存单位:<text class="text-black ">{{item.unit}}</text></text> |
| | | </view> |
| | | <view class="content"> |
| | | <text class="text-gray">质检结论:<text class="text-black ">{{item.matnrCode}}</text></text> |
| | | </view> |
| | | |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">标签:<text class="text-black ">{{item.matnrCode}}</text></text> |
| | | </view> |
| | | |
| | | </view> |
| | | |
| | | |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">存储数量:<text class="text-black ">{{item.matnrCode}}</text></text> |
| | | </view> |
| | | |
| | | <view class="content"> |
| | | <text class="text-gray">计划分拣数量:<text class="text-black ">{{item.anfme}}</text></text> |
| | | </view> |
| | |
| | | <view class="cu-item"> |
| | | <view class="content2"> |
| | | <text class="text-gray">本次分拣数量:</text> |
| | | <input type="number" v-model="item.workQty"></input> |
| | | <input type="number" v-model="item.anfme" disabled=""></input> |
| | | </view> |
| | | |
| | | </view> |
| | |
| | | </view> |
| | | |
| | | |
| | | <view class="text-blue text-right padding-lr" v-show="isconfirm"> |
| | | 本次收货总数量:{{allCount}} |
| | | </view> |
| | | |
| | | |
| | | <view class="cu-form-group " v-show="isconfirm"> |
| | | <view class="title">收货区</view> |
| | | <uni-data-select v-model="whAreaId" :localdata="range" placement="top" |
| | | @change="selChange"></uni-data-select> |
| | | </view> |
| | | |
| | | |
| | | <view class="cu-bar btn-group foot" v-show="!isconfirm"> |
| | | <view class="cu-bar btn-group foot" > |
| | | <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button> |
| | | <button class="cu-btn bg-blue shadow-blur" @click="next">下一步</button> |
| | | <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="complete">提交确认</button> |
| | | </view> |
| | | |
| | | <view class="cu-bar btn-group foot" v-show="isconfirm"> |
| | | <button class="cu-btn text-blue line-blue shadow" @click="prev">上一步</button> |
| | | <button class="cu-btn bg-blue shadow-blur" @click="confirm">提交收货</button> |
| | | </view> |
| | | |
| | | |
| | | </view> |
| | | </template> |
| | |
| | | backgroundColor: '#42b983', |
| | | borderColor: '#42b983' |
| | | }, |
| | | repeatClick: false |
| | | } |
| | | }, |
| | | computed: { |
| | |
| | | |
| | | |
| | | }, |
| | | async complete() { |
| | | let that = this |
| | | if(that.barcode === '' || that.barcode === null){ |
| | | uni.showToast({ |
| | | title: "容器号为空", |
| | | icon: "error", |
| | | }) |
| | | return ; |
| | | } |
| | | if(that.list === [] || that.list.length === 0){ |
| | | uni.showToast({ |
| | | title: "拣货明细为空", |
| | | icon: "error", |
| | | }) |
| | | return ; |
| | | } |
| | | that.repeatClick = true |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/saveOutTaskSts/'+that.barcode,{}, 'get') |
| | | if (code === 200) { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "success" |
| | | }) |
| | | that.clear() |
| | | |
| | | }else if(code == 401){ |
| | | setTimeout(() => { |
| | | uni.removeStorageSync('token'); |
| | | uni.reLaunch({ |
| | | url: "/pages/login/login" |
| | | }); |
| | | }, 1000); |
| | | }else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | } |
| | | that.repeatClick = false |
| | | |
| | | }, |
| | | clearCode() { |
| | | this.barcode = '' |
| | | }, |
| New file |
| | |
| | | <template> |
| | | <view class="has-foot"> |
| | | <form> |
| | | <view class="cu-form-group" v-show="!isconfirm"> |
| | | <view class="title">波次号</view> |
| | | <input placeholder="请扫描波次号" v-model="barcode" @input="search()" focus></input> |
| | | <text class='cuIcon-close text-gray margin-right-xs' v-show="barcode!==''" @click="clearCode"></text> |
| | | </view> |
| | | |
| | | </form> |
| | | |
| | | |
| | | |
| | | <view class="cu-list det menu sm-border padding"> |
| | | <block v-for="(item, index) in list" :key="index"> |
| | | <view class="cu-list det menu " @click="clickTaskItem(index)"> |
| | | |
| | | |
| | | <view class="cu-bar bg-white solid-bottom margin-top-sm"> |
| | | <view class="action"> |
| | | <view class="index"> |
| | | {{index+1}} |
| | | </view> |
| | | </view> |
| | | <view class="content2"> |
| | | <text class="text-gray"><text class="text-black ">{{item.exceStatus$}}</text></text> |
| | | </view> |
| | | </view> |
| | | |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">波次号:<text class="text-black ">{{item.code}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">创建时间:<text class="text-black ">{{item.createTime$}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">订单数:<text class="text-black ">{{item.orderNum}}</text></text> |
| | | </view> |
| | | <view class="content"> |
| | | <text class="text-gray">品类数量:<text class="text-black ">{{item.groupQty}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">总数量:<text class="text-black ">{{item.anfme}}</text></text> |
| | | </view> |
| | | <view class="content"> |
| | | <text class="text-gray">策略:<text class="text-black ">{{item.matnrCode}}</text></text> |
| | | </view> |
| | | </view> |
| | | |
| | | </view> |
| | | </block> |
| | | </view> |
| | | |
| | | |
| | | <view class="text-blue text-right padding-lr" v-show="isconfirm"> |
| | | 本次收货总数量:{{allCount}} |
| | | </view> |
| | | |
| | | <view class="cu-form-group " v-show="isconfirm"> |
| | | <view class="title">收货区</view> |
| | | <uni-data-select v-model="whAreaId" :localdata="range" placement="top" |
| | | @change="selChange"></uni-data-select> |
| | | </view> |
| | | |
| | | <view class="cu-bar btn-group foot" v-show="!isconfirm"> |
| | | <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button> |
| | | <button class="cu-btn bg-blue shadow-blur" @click="next">下一步</button> |
| | | </view> |
| | | |
| | | <view class="cu-bar btn-group foot" v-show="isconfirm"> |
| | | <button class="cu-btn text-blue line-blue shadow" @click="prev">上一步</button> |
| | | <button class="cu-btn bg-blue shadow-blur" @click="confirm">提交收货</button> |
| | | </view> |
| | | |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | request |
| | | } from '../../common/request.js' |
| | | import { |
| | | mapState, |
| | | mapMutations, |
| | | mapActions, |
| | | mapGetters |
| | | } from 'vuex'; |
| | | export default { |
| | | data() { |
| | | return { |
| | | isClickItem:false, |
| | | clickItem:'', |
| | | QRbarcode:null, |
| | | barcode: '', |
| | | whAreaId: '', |
| | | list: [], |
| | | range: [], |
| | | isconfirm: false, |
| | | itemStyle: { |
| | | backgroundColor: '#42b983', |
| | | borderColor: '#42b983' |
| | | }, |
| | | } |
| | | }, |
| | | computed: { |
| | | ...mapState('user', ['dynamicFields']), |
| | | allCount() { |
| | | return this.list.reduce((acc, row) => +row.receiptQty + acc, 0) |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.search() |
| | | }, |
| | | methods: { |
| | | clickTaskItem(index){ |
| | | let that = this |
| | | uni.navigateTo({ |
| | | url: "./wavePickItem", |
| | | // 通过eventChannel向被打开页面传送数据 |
| | | success: function(res) { |
| | | res.eventChannel.emit('waveItem', { |
| | | data: that.list[index] |
| | | }) |
| | | } |
| | | |
| | | }); |
| | | }, |
| | | typeChange(e){ |
| | | this.typeSelect = e.value |
| | | this.search() |
| | | }, |
| | | async search() { |
| | | this.list = [] |
| | | // if(this.barcode === '' || this.barcode ===null){ |
| | | // return ; |
| | | // } |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/getWaveList',{ |
| | | barcode:this.barcode |
| | | } |
| | | ) |
| | | if (code === 200) { |
| | | if (Object.keys(data).length === 0){ |
| | | uni.showToast({ |
| | | title: "未查询到波次数据", |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | } |
| | | this.list.push(...data) |
| | | |
| | | }else if(code == 401){ |
| | | setTimeout(() => { |
| | | uni.removeStorageSync('token'); |
| | | uni.reLaunch({ |
| | | url: "/pages/login/login" |
| | | }); |
| | | }, 1000); |
| | | }else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | } |
| | | |
| | | |
| | | }, |
| | | clearCode() { |
| | | this.barcode = '' |
| | | }, |
| | | remove(index) { |
| | | this.list.splice(index, 1); |
| | | }, |
| | | clear() { |
| | | this.list = [] |
| | | this.barcode = '' |
| | | }, |
| | | next() { |
| | | if (this.list.length) { |
| | | this.isconfirm = true |
| | | } else { |
| | | uni.showToast({ |
| | | icon: "none", |
| | | title: '未选物料标签' |
| | | }) |
| | | } |
| | | }, |
| | | prev() { |
| | | this.isconfirm = false |
| | | }, |
| | | selChange(val) { |
| | | uni.setStorageSync('whAreaId', val) |
| | | }, |
| | | async confirm() { |
| | | const newArr = this.list.map(item => { |
| | | return { |
| | | ...item, |
| | | receiptQty: item.receiptQty === null ? 0 : +item.receiptQty |
| | | }; |
| | | }); |
| | | if (this.whAreaId === '') { |
| | | uni.showToast({ |
| | | icon: "none", |
| | | title: '请选择收货区' |
| | | }) |
| | | } else { |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/orders/confirm', { |
| | | receipts: newArr, |
| | | whAreaId: this.whAreaId |
| | | }) |
| | | if (code === 200) { |
| | | uni.showToast({ |
| | | title: '收货成功' |
| | | }) |
| | | this.list = [] |
| | | this.barcode = '' |
| | | this.isconfirm = false |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | } |
| | | |
| | | } |
| | | }, |
| | | |
| | | DateChange(e, item) { |
| | | item.prodTime = e.detail.value |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | .index { |
| | | border: 1px solid #e54d42; |
| | | color: #e54d42; |
| | | border-radius: 50%; |
| | | display: block; |
| | | width: 50rpx; |
| | | height: 50rpx; |
| | | line-height: 48rpx; |
| | | text-align: center; |
| | | margin-right: 20rpx; |
| | | font-size: 30rpx; |
| | | } |
| | | |
| | | .text-blue { |
| | | color: #0081ff !important; |
| | | |
| | | } |
| | | |
| | | .item { |
| | | position: relative; |
| | | display: flex; |
| | | min-height: 80upx; |
| | | align-items: center; |
| | | } |
| | | .content2 { |
| | | /* background-color: coral; */ |
| | | width: 100%; |
| | | display: flex; |
| | | flex-direction: row; |
| | | align-items: center; |
| | | justify-content: flex-end; |
| | | margin-right: 10px; |
| | | color: #0081ff; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <view class="has-foot"> |
| | | <form> |
| | | <!-- <view class="cu-form-group" v-show="!isconfirm"> |
| | | <view class="title">波次号</view> |
| | | <text class="text-black ">{{wave.code}}</text> |
| | | </view> --> |
| | | <view class="cu-form-group" v-show="!isconfirm"> |
| | | <view class="title">容器号</view> |
| | | <input placeholder="请扫描容器号" v-model="barcode" focus></input> |
| | | <text class='cuIcon-close text-gray margin-right-xs' v-show="barcode!==''" @click="clearCode"></text> |
| | | <text class='cuIcon-search text-blue' @click="search"></text> |
| | | </view> |
| | | |
| | | </form> |
| | | |
| | | |
| | | |
| | | <view class="cu-list det menu sm-border padding"> |
| | | <block v-for="(item, index) in list"> |
| | | <view class="cu-list det menu "> |
| | | |
| | | <view class="cu-bar bg-white solid-bottom margin-top-sm"> |
| | | <view class="action"> |
| | | <view class="index"> |
| | | {{index+1}} |
| | | </view> |
| | | </view> |
| | | <view class="content2"> |
| | | <text class="text-gray"><text class="text-black ">{{item.exceStatus$}}</text></text> |
| | | </view> |
| | | </view> |
| | | |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">物料编码:<text class="text-black ">{{item.taskItem.matnrCode}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">物料名称:<text class="text-black ">{{item.taskItem.maktx}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">总数量:<text class="text-black ">{{item.taskItem.anfme}}</text></text> |
| | | </view> |
| | | </view> |
| | | |
| | | </view> |
| | | <view class="cu-list det menu noMargin " v-for="(item2,index2) in item.wkOrderItems"> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">{{index2+1}}.</text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">订单号:<text class="text-black ">{{item2.asnCode}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">需求数量:<text class="text-black ">{{item2.anfme}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">已拣数量:<text class="text-black ">{{item2.qty}}</text></text> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item" v-show="item2.anfme !== item2.qty"> |
| | | <view class="content"> |
| | | <view class="cu-form-group padding-lr-0"> |
| | | <view class="title text-blue"><text |
| | | class="text-red text-xl vertical-middle">*</text>拣:</view> |
| | | <uni-number-box style="width: 70%;" :max="max" v-model="item2.demandQty" |
| | | :step='1' ></uni-number-box> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="cu-item"> |
| | | <view class="content"> |
| | | <text class="text-gray">本次拣货数量:<text class="text-black ">{{item.wkOrderItems.reduce((total, item) => total + (Number(item.demandQty) ||0 ) , 0)}}</text></text> |
| | | </view> |
| | | </view> |
| | | |
| | | </block> |
| | | </view> |
| | | |
| | | |
| | | |
| | | |
| | | <view class="cu-bar btn-group foot" v-show="!isconfirm"> |
| | | <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button> |
| | | <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="complete">拣货完成</button> |
| | | </view> |
| | | |
| | | |
| | | |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | request |
| | | } from '../../common/request.js' |
| | | import { |
| | | mapState, |
| | | mapMutations, |
| | | mapActions, |
| | | mapGetters |
| | | } from 'vuex'; |
| | | export default { |
| | | data() { |
| | | return { |
| | | wave:'', |
| | | list: [], |
| | | isconfirm: false, |
| | | barcode:'', |
| | | max: 99999999, |
| | | repeatClick:false |
| | | |
| | | } |
| | | }, |
| | | computed: { |
| | | allCount() { |
| | | return this.list.reduce((acc, row) => +row.receiptQty + acc, 0) |
| | | }, |
| | | |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | onLoad() { |
| | | let that = this |
| | | const eventChannel = this.getOpenerEventChannel(); |
| | | |
| | | eventChannel.on('waveItem', function(data) { |
| | | that.wave = data.data |
| | | |
| | | }) |
| | | |
| | | }, |
| | | methods: { |
| | | clear() { |
| | | this.barcode = '' |
| | | this.list = [] |
| | | }, |
| | | clearCode() { |
| | | this.barcode = '' |
| | | }, |
| | | async search() { |
| | | this.list = [] |
| | | // if(this.barcode === '' || this.barcode ===null){ |
| | | // return ; |
| | | // } |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/getContainerWaveList',{ |
| | | barcode:this.barcode |
| | | } |
| | | ) |
| | | if (code === 200) { |
| | | if (Object.keys(data).length === 0){ |
| | | uni.showToast({ |
| | | title: "该标签未查询到数据", |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | } |
| | | this.list.push(...data) |
| | | |
| | | }else if(code == 401){ |
| | | setTimeout(() => { |
| | | uni.removeStorageSync('token'); |
| | | uni.reLaunch({ |
| | | url: "/pages/login/login" |
| | | }); |
| | | }, 1000); |
| | | }else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | position: 'top' |
| | | }) |
| | | } |
| | | |
| | | |
| | | }, |
| | | async complete() { |
| | | |
| | | let that = this |
| | | if(that.barcode === '' || that.barcode === null){ |
| | | uni.showToast({ |
| | | title: "容器号为空", |
| | | icon: "error", |
| | | }) |
| | | return ; |
| | | } |
| | | if(that.list === [] || that.list.length === 0){ |
| | | uni.showToast({ |
| | | title: "拣货明细为空", |
| | | icon: "error", |
| | | }) |
| | | return ; |
| | | } |
| | | this.repeatClick = true |
| | | const { |
| | | code, |
| | | data, |
| | | msg |
| | | } = await request('/saveWavePick',{ |
| | | container:that.barcode, |
| | | containerWaveDtos:that.list |
| | | }) |
| | | if (code === 200) { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | }) |
| | | that.clear() |
| | | } else { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: "none", |
| | | }) |
| | | } |
| | | this.repeatClick = false |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | .index { |
| | | border: 1px solid #e54d42; |
| | | color: #e54d42; |
| | | border-radius: 50%; |
| | | display: block; |
| | | width: 50rpx; |
| | | height: 50rpx; |
| | | line-height: 48rpx; |
| | | text-align: center; |
| | | margin-right: 20rpx; |
| | | font-size: 30rpx; |
| | | } |
| | | |
| | | .text-blue { |
| | | color: #0081ff !important; |
| | | |
| | | } |
| | | |
| | | .item { |
| | | position: relative; |
| | | display: flex; |
| | | min-height: 80upx; |
| | | align-items: center; |
| | | } |
| | | .content2 { |
| | | /* background-color: coral; */ |
| | | width: 100%; |
| | | display: flex; |
| | | flex-direction: row; |
| | | align-items: center; |
| | | justify-content: flex-end; |
| | | margin-right: 10px; |
| | | color: #0081ff; |
| | | } |
| | | .noMargin{ |
| | | margin-top: 0px; |
| | | padding: 5px; |
| | | } |
| | | </style> |
| | |
| | | <form>
|
| | | <view class="cu-form-group margin-top" v-show="!isconfirm">
|
| | | <view class="title">ASN单号</view>
|
| | | <input placeholder="请扫描ASN单号" v-model="asncode" @input="search" focus></input>
|
| | | <input placeholder="请扫描ASN单号" v-model="asncode" focus></input>
|
| | | <text class='cuIcon-close text-gray margin-right-xs' v-show="asncode!==''" @click="clearCode"></text>
|
| | | <!-- <text class='cuIcon-search text-blue' @click="search"></text> -->
|
| | | </view>
|
| | | <view class="cu-form-group" v-show="!isconfirm">
|
| | | <view class="title">物料标签</view>
|
| | | <input placeholder="请扫描物料标签" v-model="barcode"></input>
|
| | | <text class='cuIcon-search text-blue' @click="scrollTo"></text>
|
| | | <view class="title">物料编码</view>
|
| | | <input placeholder="请扫描物料编码" v-model="barcode"></input>
|
| | | <text class='cuIcon-close text-gray margin-right-xs' v-show="barcode!==''" @click="clearBarcode"></text>
|
| | | <text class='cuIcon-search text-blue' @click="search"></text>
|
| | | </view>
|
| | |
|
| | | </form>
|
| | |
| | | {{index+1}}
|
| | | </view>
|
| | | <view class="text-blue">
|
| | | {{`${item.maktx}`}}
|
| | | 编码:
|
| | | {{`${item.matnr}`}}
|
| | | </view>
|
| | | </view>
|
| | | <view class="action" v-if="!isconfirm">
|
| | |
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">ASN:</text>
|
| | | <text class="text-grey ">{{item.asnCode}}</text>
|
| | | </view>
|
| | | <view class="action">
|
| | | <text class="text-grey ">{{item.asnCode}}</text>
|
| | |
|
| | | </view>
|
| | | </view>
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">物料名称:</text>
|
| | | <text class="text-grey ">{{item.maktx}}</text>
|
| | | </view>
|
| | | </view>
|
| | |
|
| | |
| | | </view>
|
| | | </view> -->
|
| | |
|
| | | <view class="cu-item">
|
| | | <!-- <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">最大库存: <text class="text-grey ">{{item.maxQty}}</text></text>
|
| | | </view>
|
| | | <view class="content">
|
| | | <text class="text-black">实时库存: <text class="text-grey ">{{item.stockQty}}</text></text>
|
| | | </view>
|
| | | </view>
|
| | | </view> -->
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">平台行号: <text class="text-grey ">{{item.platformId}}</text></text>
|
| | | <text class="text-black">行号: <text class="text-grey ">{{item.platItemId}}</text></text>
|
| | | </view>
|
| | | <view class="content">
|
| | | <text class="text-black">质检结果: <text class="text-grey ">{{item.inspect}}</text></text>
|
| | |
| | | <view class="content">
|
| | | <text class="text-black">采购单位:<text class="text-grey ">{{item.purUnit}}</text></text>
|
| | | </view>
|
| | | <view class="content">
|
| | | <!-- <view class="content">
|
| | | <text class="text-black">库存单位: <text class="text-grey ">{{item.stockUnit}}</text></text>
|
| | | </view>
|
| | | </view> -->
|
| | | </view>
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | |
| | | <view class="cu-form-group padding-lr-0">
|
| | | <view class="title text-blue"><text
|
| | | class="text-red text-xl vertical-middle">*</text>收货数量:</view>
|
| | | <uni-number-box style="width: 70%;" v-model="item.receiptQty" :step='1'></uni-number-box>
|
| | | <uni-number-box style="width: 70%;" :max="max" v-model="item.receiptQty"
|
| | | :step='1'></uni-number-box>
|
| | | </view>
|
| | | </view>
|
| | | <view class="content" v-else>
|
| | |
| | | </view>
|
| | | </view>
|
| | | <view class="cu-item">
|
| | | <view class="content" v-if="!isconfirm">
|
| | | <view class="cu-form-group padding-lr-0">
|
| | | <view class="title text-blue">供应商批次:</view>
|
| | | <input placeholder="请输入供应商批次" v-model="item.splrBatch"></input>
|
| | | </view>
|
| | | </view>
|
| | | <view class="content" v-else>
|
| | | <text class="text-black">供应商批次:<text class="text-grey ">{{item.splrBatch}}</text></text>
|
| | |
|
| | | <view class="content">
|
| | | <text class="text-black">批次:<text class="text-grey ">{{item.splrBatch}}</text></text>
|
| | | </view>
|
| | | </view>
|
| | |
|
| | |
| | | <text class="text-black">生产日期:<text class="text-grey ">{{item.prodTime}}</text></text>
|
| | | </view>
|
| | | </view>
|
| | | <view class="cu-item grid col-1" v-if="!isconfirm">
|
| | | <!-- <view class="cu-item grid col-1" v-if="!isconfirm">
|
| | | <view v-for="el in dynamicFields" :key="el.id">
|
| | | <view class="cu-form-group padding-lr-0">
|
| | | <view class="title text-blue">{{el.fieldsAlise}}:</view>
|
| | | <input :placeholder='`请输入${el.fieldsAlise}`' v-model="item[el.fields]"></input>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | <view class="cu-item grid col-2" v-if="isconfirm">
|
| | | </view> -->
|
| | | <view class="cu-item grid col-2" v-if="item.extendFields">
|
| | | <view class="item" v-for="el in dynamicFields" :key="el.id">
|
| | | <text class="text-black">{{el.fieldsAlise}}:
|
| | | <text class="text-grey ">{{item[el.fields]}}</text></text>
|
| | | <text class="text-grey ">{{item.extendFields[el.fields]}}</text></text>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | |
| | |
|
| | | <view class="cu-form-group margin-bottom">
|
| | | <view class="title">收货区</view>
|
| | | <uni-data-select v-model="whAreaId" :localdata="range" placement="top"
|
| | | @change="selChange"></uni-data-select>
|
| | | <view style="width: 80%;">
|
| | | <uni-data-select style="min-width: 90%; max-width: 90%;" v-model="whAreaId" :localdata="range"
|
| | | placement="top" @change="selChange"></uni-data-select>
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <view class="cu-bar btn-group foot" v-show="!isconfirm">
|
| | |
| | | </view>
|
| | |
|
| | | <view class="cu-bar btn-group foot" v-show="isconfirm">
|
| | | <button class="cu-btn text-blue line-blue shadow" @click="prev">上一步</button> |
| | | <button class="cu-btn bg-blue shadow-blur" @click="confirm(false)">收货</button>
|
| | | <button class="cu-btn text-blue line-blue shadow" @click="prev">上一步</button>
|
| | | <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm(false)">收货</button>
|
| | | </view>
|
| | |
|
| | | </view>
|
| | |
| | | whAreaId: '',
|
| | | list: [],
|
| | | range: [],
|
| | | isconfirm: false
|
| | | repeatClick: false,
|
| | | isconfirm: false,
|
| | | max: 99999999,
|
| | | }
|
| | | },
|
| | | computed: {
|
| | | ...mapState('user', ['dynamicFields']),
|
| | | ...mapState('user', {
|
| | | dynFields: state => state.dynamicFields
|
| | | }),
|
| | | allCount() {
|
| | | return this.list.reduce((acc, row) => +row.receiptQty + acc, 0)
|
| | | }
|
| | |
| | | data,
|
| | | msg
|
| | | } = await request('/orders/other', {
|
| | | asnCode: this.asncode
|
| | | asnCode: this.asncode,
|
| | | matnrCode: this.barcode
|
| | | })
|
| | | if (code === 200) {
|
| | | this.list = [...data]
|
| | | this.list = data
|
| | | } else {
|
| | | uni.showToast({
|
| | | title: msg,
|
| | |
| | | clearCode() {
|
| | | this.asncode = ''
|
| | | },
|
| | | clearBarcode() {
|
| | | this.barcode = ''
|
| | | },
|
| | | scrollTo() {
|
| | | const ref = this.$refs[`${this.barcode}ref`][0];
|
| | | uni.pageScrollTo({
|
| | | scrollTop: ref.$el.offsetTop,
|
| | | duration: 300
|
| | | })
|
| | |
|
| | | // const ref = this.$refs[`${this.barcode}ref`][0];
|
| | | // uni.pageScrollTo({
|
| | | // scrollTop: ref.$el.offsetTop,
|
| | | // duration: 300
|
| | | // })
|
| | | },
|
| | | remove(index) {
|
| | | this.list.splice(index, 1);
|
| | |
| | | clear() {
|
| | | this.list = []
|
| | | this.barcode = ''
|
| | | this.asncode = ''
|
| | | this.whAreaId = ''
|
| | | this.range = []
|
| | | },
|
| | | next() {
|
| | | if (this.list.length) {
|
| | |
| | | prev() {
|
| | | this.isconfirm = false
|
| | | },
|
| | | selChange(val) { |
| | | console.log('-------->') |
| | | console.log(val)
|
| | | selChange(val) {
|
| | | uni.setStorageSync('whAreaId', val)
|
| | | },
|
| | | async complete(id) {
|
| | | this.repeatClick = true
|
| | | const {
|
| | | code,
|
| | | data,
|
| | |
| | | icon: "none",
|
| | | })
|
| | | }
|
| | | this.repeatClick = false
|
| | | },
|
| | | async confirm(isCom) {
|
| | | if (this.whAreaId === '') {
|
| | |
| | | title: '请选择收货区'
|
| | | })
|
| | | } else {
|
| | | console.log(this.dynFields)
|
| | | const newArr = this.list.map(item => {
|
| | | return {
|
| | | ...item,
|
| | | receiptQty: item.receiptQty === null ? 0 : +item.receiptQty
|
| | | receiptQty: item.receiptQty === null ? 0 : +item.receiptQty,
|
| | | // extendFields: this.dynFields.filter(el => el.unique == 1).map(exf => {
|
| | | // return {
|
| | | // [`${exf.fields}`]: item[exf.fields]
|
| | | // }
|
| | | // }).filter(field => Object.values(field)[0] != undefined)
|
| | | };
|
| | | }).filter(el => el.receiptQty !== 0);
|
| | |
|
| | |
|
| | | const {
|
| | | code,
|
| | |
| | | }
|
| | | }
|
| | | },
|
| | | async getRece() {
|
| | | async getRece() { |
| | | const {
|
| | | code,
|
| | | data,
|
| | |
| | | <view class="content" v-if="!isconfirm">
|
| | | <view class="cu-form-group padding-lr-0">
|
| | | <view class="title text-blue">收货数量:</view>
|
| | | <uni-number-box style="width: 70%;" v-model="item.receiptQty" :step='1'></uni-number-box>
|
| | | <uni-number-box style="width: 70%;" :max="max" v-model="item.receiptQty" :step='1'></uni-number-box>
|
| | | </view>
|
| | | </view>
|
| | | <view class="content" v-else>
|
| | |
| | |
|
| | | <view class="cu-bar btn-group foot" v-show="isconfirm">
|
| | | <button class="cu-btn text-blue line-blue shadow" @click="prev">上一步</button>
|
| | | <button class="cu-btn bg-blue shadow-blur" @click="confirm">提交收货</button>
|
| | | <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">提交收货</button>
|
| | | </view>
|
| | |
|
| | | </view>
|
| | |
| | | whAreaId: '',
|
| | | list: [],
|
| | | range: [],
|
| | | isconfirm: false
|
| | | isconfirm: false,
|
| | | repeatClick: false,
|
| | | max: 99999999
|
| | | }
|
| | | },
|
| | | computed: {
|
| | |
| | | title: '请选择收货区'
|
| | | })
|
| | | } else {
|
| | | this.repeatClick = true
|
| | | const {
|
| | | code,
|
| | | data,
|
| | |
| | | position: 'top'
|
| | | })
|
| | | }
|
| | |
|
| | | this.repeatClick = false
|
| | | }
|
| | | },
|
| | | async getRece() {
|