From a232dcf6d4a59c7c47e06b6619eb7566163f95b4 Mon Sep 17 00:00:00 2001
From: skyouc <creaycat@gmail.com>
Date: 星期三, 05 十一月 2025 19:26:46 +0800
Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/pda-master into devlop
---
package-lock.json | 19
pages/check/firstCheck.vue | 396 ++++
locale/zh-Hans.json | 49
static/family/HarmonyOS_Sans_SC_Black.ttf | 0
locale/en.json | 45
pages/AGV/BindAndInTask.vue | 294 +++
pages/AGV/StaUnBind.vue | 254 ++
App.vue | 24
pages/check/checkOrderItem.vue | 400 ++++
common/request.js | 2
locale/zh-Hant.json | 10
locale/index.js | 10
pages/home/index.vue | 132 +
pages/listing/unPakin.vue | 286 +++
main.js | 15
static/family/HarmonyOS_Sans_SC_Bold.ttf | 0
pages/check/checkOrder.vue | 283 +++
pages/outbound/wavePick.vue | 286 +++
pages/inspect/bad.vue | 48
pages/outbound/wavePickItem.vue | 277 +++
pages/listing/matnrPalletising.vue | 402 ++++
pages/login/login.vue | 264 ++
pages.json | 85
pages/outbound/fastPicking.vue | 103
locale/ja.json | 23
locale/uni-app.ja.json | 36
pages/AGV/AGVStaBind.vue | 265 ++
static/family/HarmonyOS_Sans_SC_Light.ttf | 0
static/img/login_top.png | 0
pages/rece/other.vue | 109
static/family/HarmonyOS_Sans_SC_Regular.ttf | 0
pages/rece/standard.vue | 11
static/img/login_eye.png | 0
pages/listing/itemSelect.vue | 218 ++
pages/login/index.vue | 415 ++++
static/img/login_text.png | 0
pages/listing/disc.vue | 82
manifest.json | 263 +-
static/img/login_noteye.png | 0
package.json | 5
pages/AGV/StartInTask.vue | 261 ++
pages/listing/labour.vue | 119
static/img/login_backg.png | 0
43 files changed, 5,068 insertions(+), 423 deletions(-)
diff --git a/App.vue b/App.vue
index 7ce7d3c..8d00500 100644
--- a/App.vue
+++ b/App.vue
@@ -115,6 +115,9 @@
@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 {
@@ -122,7 +125,26 @@
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;
diff --git a/common/request.js b/common/request.js
index 53b11d5..7645f4e 100644
--- a/common/request.js
+++ b/common/request.js
@@ -16,7 +16,7 @@
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,
diff --git a/locale/en.json b/locale/en.json
new file mode 100644
index 0000000..a960e47
--- /dev/null
+++ b/locale/en.json
@@ -0,0 +1,45 @@
+{
+ "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":{
+
+ }
+}
diff --git a/locale/index.js b/locale/index.js
new file mode 100644
index 0000000..1ea674e
--- /dev/null
+++ b/locale/index.js
@@ -0,0 +1,10 @@
+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
+}
diff --git a/locale/ja.json b/locale/ja.json
new file mode 100644
index 0000000..b2fa1b8
--- /dev/null
+++ b/locale/ja.json
@@ -0,0 +1,23 @@
+{
+ "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": "銉︺儖銉曘儸銉笺儬銉兗銈�乵anifest.json銆乸ages.json銆併偪銉栥儛銉笺�併儦銉笺偢銆併偝銉炽儩銉笺儘銉炽儓銆丄PI銈掑惈銈併倠銆丼chema",
+ "index.detail": "瑭崇窗",
+ "index.language": "瑷�瑾�",
+ "index.language-info": "瑷畾",
+ "index.system-language": "銈枫偣銉嗐儬瑷�瑾�",
+ "index.application-language": "銈€儣銉偙銉笺偡銉с兂瑷�瑾�",
+ "index.language-change-confirm": "銇撱伄瑷畾銈掗仼鐢ㄣ仚銈嬨仺銆併偄銉椼儶銇屽啀璧峰嫊銇椼伨銇�",
+ "api.message": "銉°儍銈汇兗銈�",
+ "schema.add": "杩藉姞",
+ "schema.add-success": "鎴愬姛銈掕拷鍔�"
+}
diff --git a/locale/uni-app.ja.json b/locale/uni-app.ja.json
new file mode 100644
index 0000000..41cef76
--- /dev/null
+++ b/locale/uni-app.ja.json
@@ -0,0 +1,36 @@
+{
+ "common": {
+ "uni.app.quit": "銈傘亞涓�搴︽娂銇欍仺銆併偄銉椼儶銈便兗銈枫儳銉炽亴绲備簡銇椼伨銇�",
+ "uni.async.error": "銈点兗銉愩兗銇搞伄鎺ョ稓銇屻偪銈ゃ儬銈€偊銉堛仐銇俱仐銇熴�傜敾闈€倰銈儶銉冦偗銇椼仸鍐嶈│琛屻仐銇︺亸銇犮仌銇�",
+ "uni.showActionSheet.cancel": "銈儯銉炽偦銉�",
+ "uni.showToast.unpaired": "浣跨敤銇欍倠銇伅銆乻howToast銇╤ideToast銈掋儦銈€伀銇欍倠蹇呰銇屻亗銈嬨亾銇ㄣ伀娉ㄦ剰銇椼仸銇忋仩銇曘亜",
+ "uni.showLoading.unpaired": "浣跨敤銇欍倠銇伅銆乻howLoading銇╤ideLoading銈掋儦銈€伀銇欍倠蹇呰銇屻亗銈嬨亾銇ㄣ伀娉ㄦ剰銇椼仸銇忋仩銇曘亜",
+ "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": "鐢诲儚銈掋偄銉儛銉犮伀姝e父銇繚瀛樸仐銇俱仚",
+ "uni.previewImage.save.fail": "鐢诲儚銈掋偄銉儛銉犮伀淇濆瓨銇с亶銇俱仜銈撱仹銇椼仧",
+ "uni.setClipboardData.success": "銈炽兂銉嗐兂銉勩亴銈炽償銉笺仌銈屻伨銇椼仧",
+ "uni.scanCode.title": "銈广偔銉c兂銈炽兗銉�",
+ "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": "璩晱銇儠銈c兗銉夈儛銉冦偗",
+ "uni.button.feedback.send": "閫佷俊"
+ },
+ "ios": {},
+ "android": {}
+}
diff --git a/locale/zh-Hans.json b/locale/zh-Hans.json
new file mode 100644
index 0000000..ff7223c
--- /dev/null
+++ b/locale/zh-Hans.json
@@ -0,0 +1,49 @@
+{
+ "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":"缁勬墭瑙g粦",
+ "inspectionRequest":"鎶ユ",
+ "qualityInspection":"璐ㄦ",
+ "defectiveMarking":"涓嶈壇鏍囪",
+ "manualPutaway":"浜哄伐涓婃灦",
+ "stationBinding":"绔欑偣缁戝畾",
+ "inboundInitiation":"鍚姩鍏ュ簱",
+ "stationUnbinding":"绔欑偣瑙g粦",
+ "bindAndInbound":"缁戝畾&鍏ュ簱",
+ "quickPicking":"蹇�熸嫞璐�",
+ "wavePick":"娉㈡鎷h揣",
+ "outLogin":"閫�鍑虹櫥褰�",
+ "language-change-confirm":"纭畾鍒囨崲?",
+ "hello":"鎮ㄥソ锛屾杩庣櫥褰昗MS绯荤粺锛�",
+ "intro":"璁╁埗閫犱笌鐗╂祦鏇撮珮鏁�",
+ "checkOrder":"鐩樼偣"
+
+
+ },
+ "other":{
+ "asnNo":"ASN鍗曞彿"
+
+ }
+
+
+}
diff --git a/locale/zh-Hant.json b/locale/zh-Hant.json
new file mode 100644
index 0000000..9e1a418
--- /dev/null
+++ b/locale/zh-Hant.json
@@ -0,0 +1,10 @@
+{
+ "locale.auto": "绯荤当",
+ "locale.en": "English",
+ "locale.zh-hans": "绠�浣撲腑鏂�",
+ "locale.zh-hant": "绻侀珨涓枃",
+ "locale.ja": "鏃ヨ",
+ "index.title": "Hello i18n",
+ "index.home": "涓婚爜",
+ "login.login": "鐧诲綍"
+}
diff --git a/main.js b/main.js
index 1f4d062..27d56ae 100644
--- a/main.js
+++ b/main.js
@@ -1,7 +1,17 @@
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';
@@ -13,6 +23,7 @@
Vue.prototype.$Mock = Mock;
App.mpType = 'app'
+
try {
function isPromise(obj) {
@@ -43,6 +54,7 @@
} catch (error) { }
const app = new Vue({
+ i18n,
...App
})
app.$mount()
@@ -50,8 +62,11 @@
// #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
}
diff --git a/manifest.json b/manifest.json
index 794f485..2c9bc8b 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,131 +1,132 @@
-{
- "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
- }
- }
-}
\ No newline at end of file
+{
+ "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
+ }
+ }
+}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..36e6485
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,19 @@
+{
+ "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"
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..3cac16e
--- /dev/null
+++ b/package.json
@@ -0,0 +1,5 @@
+{
+ "dependencies": {
+ "vue-i18n": "^8.2.1"
+ }
+}
diff --git a/pages.json b/pages.json
index 7316bfe..6b96799 100644
--- a/pages.json
+++ b/pages.json
@@ -1,15 +1,45 @@
{
"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": "娉㈡鎷h揣"
+ }
+ },
+ {
+ "path": "pages/check/checkOrder",
+ "style": {
+ "navigationBarTitleText": "鐩樼偣鍗�"
+ }
+ },
+ {
+ "path": "pages/check/checkOrderItem",
+ "style": {
+ "navigationBarTitleText": "鍒濈洏"
+ }
+ },
+ {
+ "path": "pages/check/firstCheck",
+ "style": {
+ "navigationBarTitleText": "鍒濈洏"
+ }
+ },
+ {
+ "path": "pages/outbound/wavePickItem",
+ "style": {
+ "navigationBarTitleText": "娉㈡鎷h揣"
}
},
{
@@ -21,13 +51,50 @@
{
"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绔欑偣瑙g粦"
+ }
+ },
+ {
+ "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
}
},
{
@@ -539,7 +606,15 @@
}
}
- ],
+ ,{
+ "path" : "pages/listing/unPakin",
+ "style" :
+ {
+ "navigationBarTitleText": "缁勬墭瑙g粦"
+ }
+
+ }
+ ],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
diff --git a/pages/AGV/AGVStaBind.vue b/pages/AGV/AGVStaBind.vue
new file mode 100644
index 0000000..98b034a
--- /dev/null
+++ b/pages/AGV/AGVStaBind.vue
@@ -0,0 +1,265 @@
+<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>
\ No newline at end of file
diff --git a/pages/AGV/BindAndInTask.vue b/pages/AGV/BindAndInTask.vue
new file mode 100644
index 0000000..eeb06ff
--- /dev/null
+++ b/pages/AGV/BindAndInTask.vue
@@ -0,0 +1,294 @@
+<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>
\ No newline at end of file
diff --git a/pages/AGV/StaUnBind.vue b/pages/AGV/StaUnBind.vue
new file mode 100644
index 0000000..1d0b407
--- /dev/null
+++ b/pages/AGV/StaUnBind.vue
@@ -0,0 +1,254 @@
+<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">瑙g粦</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: '瑙g粦鎴愬姛'
+ })
+ 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>
\ No newline at end of file
diff --git a/pages/AGV/StartInTask.vue b/pages/AGV/StartInTask.vue
new file mode 100644
index 0000000..d43db9e
--- /dev/null
+++ b/pages/AGV/StartInTask.vue
@@ -0,0 +1,261 @@
+<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>
\ No newline at end of file
diff --git a/pages/check/checkOrder.vue b/pages/check/checkOrder.vue
new file mode 100644
index 0000000..512783e
--- /dev/null
+++ b/pages/check/checkOrder.vue
@@ -0,0 +1,283 @@
+<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>
\ No newline at end of file
diff --git a/pages/check/checkOrderItem.vue b/pages/check/checkOrderItem.vue
new file mode 100644
index 0000000..e1b0a1d
--- /dev/null
+++ b/pages/check/checkOrderItem.vue
@@ -0,0 +1,400 @@
+<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>
\ No newline at end of file
diff --git a/pages/check/firstCheck.vue b/pages/check/firstCheck.vue
new file mode 100644
index 0000000..b35b830
--- /dev/null
+++ b/pages/check/firstCheck.vue
@@ -0,0 +1,396 @@
+<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>
\ No newline at end of file
diff --git a/pages/home/index.vue b/pages/home/index.vue
index c38f764..5ccdfae 100644
--- a/pages/home/index.vue
+++ b/pages/home/index.vue
@@ -4,7 +4,7 @@
<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>
@@ -19,43 +19,50 @@
</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>瑙g粦</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>
@@ -63,7 +70,7 @@
<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>
@@ -71,7 +78,7 @@
<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>
@@ -80,45 +87,90 @@
<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>
@@ -128,8 +180,16 @@
export default {
data() {
return {
-
+ user:{
+
+ }
}
+ },
+
+ onShow() {
+
+
+ this.user = uni.getStorageSync('userData');
},
methods: {
equit() {
@@ -140,7 +200,7 @@
setTimeout(() => {
uni.removeStorageSync('token');
uni.reLaunch({
- url: "/pages/login/login"
+ url: "/pages/login/index"
});
}, 1000);
}
diff --git a/pages/inspect/bad.vue b/pages/inspect/bad.vue
index e060cf0..5e3b9ea 100644
--- a/pages/inspect/bad.vue
+++ b/pages/inspect/bad.vue
@@ -135,30 +135,30 @@
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 {
diff --git a/pages/listing/disc.vue b/pages/listing/disc.vue
index 07f23f6..1eb779b 100644
--- a/pages/listing/disc.vue
+++ b/pages/listing/disc.vue
@@ -5,9 +5,8 @@
<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>
@@ -21,7 +20,7 @@
<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">
@@ -36,7 +35,6 @@
<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>
@@ -45,7 +43,6 @@
<text class="text-grey ">{{item.asnCode}}</text>
</view>
</view>
-
<view class="cu-item">
<view class="content">
<text class="text-black">鐗╂枡鏉$爜:</text>
@@ -54,7 +51,6 @@
<text class="text-grey ">{{item.trackCode}}</text>
</view>
</view>
-
<view class="cu-item">
<view class="content">
<text class="text-black">渚涘簲鍟嗘壒娆�:</text>
@@ -63,7 +59,6 @@
<text class="text-grey ">{{item.splrBatch}}</text>
</view>
</view>
-
<view class="cu-item">
<view class="content">
<text class="text-black">搴撳瓨鎵规:</text>
@@ -72,9 +67,6 @@
<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>
@@ -90,21 +82,26 @@
</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>
@@ -113,9 +110,8 @@
</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>
@@ -133,11 +129,14 @@
data() {
return {
barcode: '',
- container: '',
+ container: '',
megreQty: '',
list: [],
range: [],
- isconfirm: false
+ repeatClick: false,
+ isconfirm: false,
+ max: 99999999,
+
}
},
computed: {
@@ -149,18 +148,29 @@
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,
@@ -169,7 +179,14 @@
})
}
},
- async getList() {
+ async getList() {
+ if (this.container == undefined || this.container == '') {
+ uni.showToast({
+ icon: "none",
+ title: '瀹瑰櫒鍙蜂笉鑳戒负绌猴紒锛�'
+ })
+ return
+ }
const {
code,
data,
@@ -215,11 +232,11 @@
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,
};
});
@@ -229,7 +246,7 @@
msg
} = await request('/waitPakin/merge', {
items: newArr,
- barcode: this.container
+ barcode: this.container,
})
if (code === 200) {
uni.showToast({
@@ -246,6 +263,7 @@
position: 'top'
})
}
+ this.repeatClick = false
},
}
}
diff --git a/pages/listing/itemSelect.vue b/pages/listing/itemSelect.vue
new file mode 100644
index 0000000..b1ec2ba
--- /dev/null
+++ b/pages/listing/itemSelect.vue
@@ -0,0 +1,218 @@
+<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>
\ No newline at end of file
diff --git a/pages/listing/labour.vue b/pages/listing/labour.vue
index 65d16ca..5b27e05 100644
--- a/pages/listing/labour.vue
+++ b/pages/listing/labour.vue
@@ -1,20 +1,14 @@
<template>
<view class="has-foot">
<form>
- <view class="cu-form-group margin-top">
- <view class="title">ASN鍗�</view>
- <input placeholder="璇锋壂鎻廇SN鍗�" 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">
@@ -25,14 +19,18 @@
{{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>
@@ -41,26 +39,9 @@
<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>
@@ -68,7 +49,7 @@
</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>
@@ -78,10 +59,7 @@
</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>
@@ -119,15 +97,13 @@
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,
@@ -145,33 +121,44 @@
},
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",
})
}
+
},
diff --git a/pages/listing/matnrPalletising.vue b/pages/listing/matnrPalletising.vue
new file mode 100644
index 0000000..50618e4
--- /dev/null
+++ b/pages/listing/matnrPalletising.vue
@@ -0,0 +1,402 @@
+<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="璇疯緭鍏SN鍗曞彿" 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>
\ No newline at end of file
diff --git a/pages/listing/unPakin.vue b/pages/listing/unPakin.vue
new file mode 100644
index 0000000..dab82c2
--- /dev/null
+++ b/pages/listing/unPakin.vue
@@ -0,0 +1,286 @@
+<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>瑙g粦鏁伴噺:
+ </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">瑙g粦</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: '瑙g粦鎴愬姛'
+ })
+ 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>
\ No newline at end of file
diff --git a/pages/login/index.vue b/pages/login/index.vue
new file mode 100644
index 0000000..c807b4b
--- /dev/null
+++ b/pages/login/index.vue
@@ -0,0 +1,415 @@
+<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>
\ No newline at end of file
diff --git a/pages/login/login.vue b/pages/login/login.vue
index b775ac5..3430788 100644
--- a/pages/login/login.vue
+++ b/pages/login/login.vue
@@ -1,11 +1,11 @@
<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">
@@ -13,14 +13,27 @@
</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>
@@ -30,9 +43,9 @@
<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">
@@ -45,7 +58,7 @@
<!-- 璁颁綇瀵嗙爜 -->
<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" />
@@ -55,9 +68,9 @@
<!-- 鐧诲綍鎸夐挳 -->
<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>
<!-- 璁剧疆寮圭獥鍖哄煙 -->
@@ -77,7 +90,7 @@
<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>
@@ -110,7 +123,9 @@
} from '../../common/request.js'
export default {
data() {
- return {
+ return {
+ systemLocale: '',
+ applicationLocale: '',
version: '',
showPassword: false,
value: '',
@@ -125,20 +140,55 @@
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')
@@ -155,11 +205,56 @@
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;
@@ -169,7 +264,7 @@
},
// 璁剧疆绐楀彛寮�鍚寜閽�
settings() {
- this.$refs.inputDialog.open()
+ this.$refs.inputDialog.open('')
},
// 璁剧疆绐楀彛纭淇敼鎸夐挳
dialogInputConfirm() {
@@ -197,10 +292,11 @@
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');
@@ -412,7 +508,8 @@
</script>
<style>
@import url('../../static/css/wms.css/wms.css');
-
+
+
/* 璁剧疆鍖哄煙 */
.settings {
min-height: 100rpx;
@@ -465,8 +562,7 @@
text-align: center;
}
- .box-text {
- width: 100rpx;
+ .box-text {
text-align: center;
}
@@ -511,22 +607,6 @@
font-size: 12px;
color: #909399;
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
/* ------ */
.shadow-warp {
@@ -552,4 +632,104 @@
left: auto;
transform: rotate(3deg);
}
-</style>
\ No newline at end of file
+
+ /* 璇█閫夋嫨涓嬫媺鑿滃崟 */
+ .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>
diff --git a/pages/outbound/fastPicking.vue b/pages/outbound/fastPicking.vue
index c84be1c..44fa013 100644
--- a/pages/outbound/fastPicking.vue
+++ b/pages/outbound/fastPicking.vue
@@ -2,22 +2,23 @@
<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="璇锋壂鎻廞R鐮�" 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">
@@ -32,15 +33,10 @@
<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">
@@ -52,21 +48,12 @@
<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>
@@ -74,7 +61,7 @@
<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>
@@ -83,25 +70,16 @@
</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>
@@ -131,6 +109,7 @@
backgroundColor: '#42b983',
borderColor: '#42b983'
},
+ repeatClick: false
}
},
computed: {
@@ -192,6 +171,52 @@
},
+ 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: "鎷h揣鏄庣粏涓虹┖",
+ 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 = ''
},
diff --git a/pages/outbound/wavePick.vue b/pages/outbound/wavePick.vue
new file mode 100644
index 0000000..d7b1ef9
--- /dev/null
+++ b/pages/outbound/wavePick.vue
@@ -0,0 +1,286 @@
+<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>
\ No newline at end of file
diff --git a/pages/outbound/wavePickItem.vue b/pages/outbound/wavePickItem.vue
new file mode 100644
index 0000000..452fa27
--- /dev/null
+++ b/pages/outbound/wavePickItem.vue
@@ -0,0 +1,277 @@
+<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">鏈鎷h揣鏁伴噺:<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">鎷h揣瀹屾垚</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: "鎷h揣鏄庣粏涓虹┖",
+ 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>
\ No newline at end of file
diff --git a/pages/rece/other.vue b/pages/rece/other.vue
index 69359a8..0d7bdd3 100644
--- a/pages/rece/other.vue
+++ b/pages/rece/other.vue
@@ -3,14 +3,15 @@
<form>
<view class="cu-form-group margin-top" v-show="!isconfirm">
<view class="title">ASN鍗曞彿</view>
- <input placeholder="璇锋壂鎻廇SN鍗曞彿" v-model="asncode" @input="search" focus></input>
+ <input placeholder="璇锋壂鎻廇SN鍗曞彿" 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>
@@ -26,7 +27,8 @@
{{index+1}}
</view>
<view class="text-blue">
- {{`${item.maktx}`}}
+ 缂栫爜:
+ {{`${item.matnr}`}}
</view>
</view>
<view class="action" v-if="!isconfirm">
@@ -37,9 +39,16 @@
<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>
@@ -52,17 +61,17 @@
</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>
@@ -72,9 +81,9 @@
<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">
@@ -90,7 +99,8 @@
<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>
@@ -98,14 +108,9 @@
</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>
@@ -125,18 +130,18 @@
<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>
@@ -149,8 +154,10 @@
<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">
@@ -159,8 +166,8 @@
</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>
@@ -184,11 +191,16 @@
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)
}
@@ -205,10 +217,11 @@
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,
@@ -221,12 +234,16 @@
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);
@@ -234,6 +251,9 @@
clear() {
this.list = []
this.barcode = ''
+ this.asncode = ''
+ this.whAreaId = ''
+ this.range = []
},
next() {
if (this.list.length) {
@@ -248,12 +268,11 @@
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,
@@ -270,6 +289,7 @@
icon: "none",
})
}
+ this.repeatClick = false
},
async confirm(isCom) {
if (this.whAreaId === '') {
@@ -278,13 +298,18 @@
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,
@@ -311,7 +336,7 @@
}
}
},
- async getRece() {
+ async getRece() {
const {
code,
data,
diff --git a/pages/rece/standard.vue b/pages/rece/standard.vue
index e8beae2..3d6731d 100644
--- a/pages/rece/standard.vue
+++ b/pages/rece/standard.vue
@@ -80,7 +80,7 @@
<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>
@@ -156,7 +156,7 @@
<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>
@@ -179,7 +179,9 @@
whAreaId: '',
list: [],
range: [],
- isconfirm: false
+ isconfirm: false,
+ repeatClick: false,
+ max: 99999999
}
},
computed: {
@@ -264,6 +266,7 @@
title: '璇烽�夋嫨鏀惰揣鍖�'
})
} else {
+ this.repeatClick = true
const {
code,
data,
@@ -286,7 +289,7 @@
position: 'top'
})
}
-
+ this.repeatClick = false
}
},
async getRece() {
diff --git a/static/family/HarmonyOS_Sans_SC_Black.ttf b/static/family/HarmonyOS_Sans_SC_Black.ttf
new file mode 100644
index 0000000..824b3d4
--- /dev/null
+++ b/static/family/HarmonyOS_Sans_SC_Black.ttf
Binary files differ
diff --git a/static/family/HarmonyOS_Sans_SC_Bold.ttf b/static/family/HarmonyOS_Sans_SC_Bold.ttf
new file mode 100644
index 0000000..5c925d1
--- /dev/null
+++ b/static/family/HarmonyOS_Sans_SC_Bold.ttf
Binary files differ
diff --git a/static/family/HarmonyOS_Sans_SC_Light.ttf b/static/family/HarmonyOS_Sans_SC_Light.ttf
new file mode 100644
index 0000000..8cfbc9d
--- /dev/null
+++ b/static/family/HarmonyOS_Sans_SC_Light.ttf
Binary files differ
diff --git a/static/family/HarmonyOS_Sans_SC_Regular.ttf b/static/family/HarmonyOS_Sans_SC_Regular.ttf
new file mode 100644
index 0000000..aff150a
--- /dev/null
+++ b/static/family/HarmonyOS_Sans_SC_Regular.ttf
Binary files differ
diff --git a/static/img/login_backg.png b/static/img/login_backg.png
new file mode 100644
index 0000000..9390205
--- /dev/null
+++ b/static/img/login_backg.png
Binary files differ
diff --git a/static/img/login_eye.png b/static/img/login_eye.png
new file mode 100644
index 0000000..00f9cb5
--- /dev/null
+++ b/static/img/login_eye.png
Binary files differ
diff --git a/static/img/login_noteye.png b/static/img/login_noteye.png
new file mode 100644
index 0000000..bf4111f
--- /dev/null
+++ b/static/img/login_noteye.png
Binary files differ
diff --git a/static/img/login_text.png b/static/img/login_text.png
new file mode 100644
index 0000000..0d42775
--- /dev/null
+++ b/static/img/login_text.png
Binary files differ
diff --git a/static/img/login_top.png b/static/img/login_top.png
new file mode 100644
index 0000000..d13eafa
--- /dev/null
+++ b/static/img/login_top.png
Binary files differ
--
Gitblit v1.9.1