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