From 23d39057fd705d2405ac7da9c99d6f3570915d50 Mon Sep 17 00:00:00 2001
From: ibizdev <ibizdev@ibizsys.net>
Date: Tue, 11 Aug 2020 12:11:35 +0800
Subject: [PATCH] =?UTF-8?q?=20lab=5Fgzf=20=E9=83=A8=E7=BD=B2=E5=BE=AE?=
 =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=BA=94=E7=94=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../public/assets/json/view-config.json       |  60 +++
 .../eamservice-level_en_US.ts                 |   8 +
 .../eamservice-level_zh_CN.ts                 |   8 +
 .../eamwork-order/eamwork-order_en_US.ts      |  41 +-
 .../eamwork-order/eamwork-order_zh_CN.ts      |  41 +-
 .../entities/woorigin/woorigin_en_US.ts       |  23 ++
 .../entities/woorigin/woorigin_zh_CN.ts       |  23 ++
 .../src/mock/viewconfig/viewconfig.ts         |  48 +++
 .../base/app-index-view/page-register.ts      |   6 +
 .../src/pages/base/app-index-view/router.ts   | 338 +++++++++++++++
 ...eamservice-level-pickup-grid-view-base.tsx | 221 ++++++++++
 .../eamservice-level-pickup-grid-view.html    |  44 ++
 .../eamservice-level-pickup-grid-view.vue     |  24 ++
 .../eamservice-level-pickup-view-base.tsx     | 170 ++++++++
 .../eamservice-level-pickup-view.html         |  25 ++
 .../eamservice-level-pickup-view.vue          |  22 +
 .../eamwork-order-pickup-grid-view-base.tsx   | 221 ++++++++++
 .../eamwork-order-pickup-grid-view.html       |  44 ++
 .../eamwork-order-pickup-grid-view.vue        |  24 ++
 .../eamwork-order-pickup-view-base.tsx        | 170 ++++++++
 .../eamwork-order-pickup-view.html            |  25 ++
 .../eamwork-order-pickup-view.vue             |  22 +
 .../woorigin-pickup-grid-view-base.tsx        | 221 ++++++++++
 .../woorigin-pickup-grid-view.html            |  44 ++
 .../woorigin-pickup-grid-view.vue             |  24 ++
 .../woorigin-pickup-view-base.tsx             | 170 ++++++++
 .../woorigin-pickup-view.html                 |  25 ++
 .../woorigin-pickup-view.vue                  |  22 +
 .../src/store/modules/view-action/state.ts    |  63 +++
 .../eamservice-level-ui-service-base.ts       |   2 +
 .../eamwork-order-ui-service-base.ts          |   2 +
 .../woorigin/woorigin-ui-service-base.ts      |   2 +
 ...ewpickupviewpanel-pickupviewpanel-base.tsx | 265 ++++++++++++
 ...ewpickupviewpanel-pickupviewpanel-model.ts |  43 ++
 ...pickupviewpanel-pickupviewpanel-service.ts |  11 +
 ...p-viewpickupviewpanel-pickupviewpanel.html |  16 +
 ...p-viewpickupviewpanel-pickupviewpanel.less |   3 +
 ...up-viewpickupviewpanel-pickupviewpanel.vue |  22 +
 .../main-form/main-form-base.tsx              |  82 +++-
 .../main-form/main-form-model.ts              |  95 +++++
 .../main-form/main-form-service.ts            |  63 +++
 .../eamwork-order/main-form/main-form.html    | 268 ++++++++++--
 ...ewpickupviewpanel-pickupviewpanel-base.tsx | 265 ++++++++++++
 ...ewpickupviewpanel-pickupviewpanel-model.ts | 109 +++++
 ...pickupviewpanel-pickupviewpanel-service.ts |  11 +
 ...p-viewpickupviewpanel-pickupviewpanel.html |  16 +
 ...p-viewpickupviewpanel-pickupviewpanel.less |   3 +
 ...up-viewpickupviewpanel-pickupviewpanel.vue |  22 +
 .../default-searchform-base.tsx               |  82 ++++
 .../default-searchform-model.ts               |  31 ++
 .../default-searchform-service.ts             | 388 ++++++++++++++++++
 .../default-searchform.html                   |   9 +
 .../default-searchform/default-searchform.vue |  22 +
 .../woorigin/main-grid/main-grid-base.tsx     | 143 +++++++
 .../woorigin/main-grid/main-grid-model.ts     |  94 +++++
 .../woorigin/main-grid/main-grid-service.ts   | 345 ++++++++++++++++
 .../widgets/woorigin/main-grid/main-grid.html |  66 +++
 .../widgets/woorigin/main-grid/main-grid.vue  |  22 +
 ...ewpickupviewpanel-pickupviewpanel-base.tsx | 265 ++++++++++++
 ...ewpickupviewpanel-pickupviewpanel-model.ts |  43 ++
 ...pickupviewpanel-pickupviewpanel-service.ts |  11 +
 ...p-viewpickupviewpanel-pickupviewpanel.html |  16 +
 ...p-viewpickupviewpanel-pickupviewpanel.less |   3 +
 ...up-viewpickupviewpanel-pickupviewpanel.vue |  22 +
 .../src/main/resources/liquibase/h2_table.xml |  36 +-
 65 files changed, 5010 insertions(+), 65 deletions(-)
 create mode 100644 app_AssetManagement/src/pages/work-order/eamservice-level-pickup-grid-view/eamservice-level-pickup-grid-view-base.tsx
 create mode 100644 app_AssetManagement/src/pages/work-order/eamservice-level-pickup-grid-view/eamservice-level-pickup-grid-view.html
 create mode 100644 app_AssetManagement/src/pages/work-order/eamservice-level-pickup-grid-view/eamservice-level-pickup-grid-view.vue
 create mode 100644 app_AssetManagement/src/pages/work-order/eamservice-level-pickup-view/eamservice-level-pickup-view-base.tsx
 create mode 100644 app_AssetManagement/src/pages/work-order/eamservice-level-pickup-view/eamservice-level-pickup-view.html
 create mode 100644 app_AssetManagement/src/pages/work-order/eamservice-level-pickup-view/eamservice-level-pickup-view.vue
 create mode 100644 app_AssetManagement/src/pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view-base.tsx
 create mode 100644 app_AssetManagement/src/pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view.html
 create mode 100644 app_AssetManagement/src/pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view.vue
 create mode 100644 app_AssetManagement/src/pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view-base.tsx
 create mode 100644 app_AssetManagement/src/pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view.html
 create mode 100644 app_AssetManagement/src/pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view.vue
 create mode 100644 app_AssetManagement/src/pages/work-order/woorigin-pickup-grid-view/woorigin-pickup-grid-view-base.tsx
 create mode 100644 app_AssetManagement/src/pages/work-order/woorigin-pickup-grid-view/woorigin-pickup-grid-view.html
 create mode 100644 app_AssetManagement/src/pages/work-order/woorigin-pickup-grid-view/woorigin-pickup-grid-view.vue
 create mode 100644 app_AssetManagement/src/pages/work-order/woorigin-pickup-view/woorigin-pickup-view-base.tsx
 create mode 100644 app_AssetManagement/src/pages/work-order/woorigin-pickup-view/woorigin-pickup-view.html
 create mode 100644 app_AssetManagement/src/pages/work-order/woorigin-pickup-view/woorigin-pickup-view.vue
 create mode 100644 app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-base.tsx
 create mode 100644 app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-model.ts
 create mode 100644 app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-service.ts
 create mode 100644 app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.html
 create mode 100644 app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.less
 create mode 100644 app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue
 create mode 100644 app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-base.tsx
 create mode 100644 app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-model.ts
 create mode 100644 app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-service.ts
 create mode 100644 app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.html
 create mode 100644 app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.less
 create mode 100644 app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue
 create mode 100644 app_AssetManagement/src/widgets/woorigin/default-searchform/default-searchform-base.tsx
 create mode 100644 app_AssetManagement/src/widgets/woorigin/default-searchform/default-searchform-model.ts
 create mode 100644 app_AssetManagement/src/widgets/woorigin/default-searchform/default-searchform-service.ts
 create mode 100644 app_AssetManagement/src/widgets/woorigin/default-searchform/default-searchform.html
 create mode 100644 app_AssetManagement/src/widgets/woorigin/default-searchform/default-searchform.vue
 create mode 100644 app_AssetManagement/src/widgets/woorigin/main-grid/main-grid-base.tsx
 create mode 100644 app_AssetManagement/src/widgets/woorigin/main-grid/main-grid-model.ts
 create mode 100644 app_AssetManagement/src/widgets/woorigin/main-grid/main-grid-service.ts
 create mode 100644 app_AssetManagement/src/widgets/woorigin/main-grid/main-grid.html
 create mode 100644 app_AssetManagement/src/widgets/woorigin/main-grid/main-grid.vue
 create mode 100644 app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-base.tsx
 create mode 100644 app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-model.ts
 create mode 100644 app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-service.ts
 create mode 100644 app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.html
 create mode 100644 app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.less
 create mode 100644 app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue

diff --git a/app_AssetManagement/public/assets/json/view-config.json b/app_AssetManagement/public/assets/json/view-config.json
index b158198..6952f3d 100644
--- a/app_AssetManagement/public/assets/json/view-config.json
+++ b/app_AssetManagement/public/assets/json/view-config.json
@@ -19,6 +19,16 @@
         "viewtag": "04760f08f434367b552fa8ab8cf191dd",
         "memo": "绯荤粺鑷姩娣诲姞"
     },
+    "wooriginpickupview": {
+        "title": "宸ュ崟鏉ユ簮鏁版嵁閫夋嫨瑙嗗浘",
+        "caption": "宸ュ崟鏉ユ簮",
+        "viewtype": "DEPICKUPVIEW",
+        "viewmodule": "WorkOrder",
+        "viewname": "WOOriginPickupView",
+        "viewfilename": "woorigin-pickup-view",
+        "viewtag": "06ee1c500b1cb4aa576fb3b62b4ddb35",
+        "memo": "绯荤粺鑷姩娣诲姞"
+    },
     "eamassettreeexpview": {
         "title": "璧勪骇淇℃伅",
         "caption": "璧勪骇",
@@ -209,6 +219,16 @@
         "viewtag": "326f3b663c055e3f1ec6fa0d2c3f0223",
         "memo": ""
     },
+    "wooriginpickupgridview": {
+        "title": "宸ュ崟鏉ユ簮閫夋嫨琛ㄦ牸瑙嗗浘",
+        "caption": "宸ュ崟鏉ユ簮",
+        "viewtype": "DEPICKUPGRIDVIEW",
+        "viewmodule": "WorkOrder",
+        "viewname": "WOOriginPickupGridView",
+        "viewfilename": "woorigin-pickup-grid-view",
+        "viewtag": "34cf27e1eddc36c197176c5632b97179",
+        "memo": "绯荤粺鑷姩娣诲姞"
+    },
     "eamworkorderinfo_mainview": {
         "title": "宸ュ崟涓讳俊鎭�",
         "caption": "宸ュ崟",
@@ -389,6 +409,16 @@
         "viewtag": "687ed577b14b3da7a542f17d0a1a6529",
         "memo": "绯荤粺鑷姩娣诲姞"
     },
+    "eamservicelevelpickupview": {
+        "title": "鏈嶅姟绛夌骇鏁版嵁閫夋嫨瑙嗗浘",
+        "caption": "鏈嶅姟绛夌骇",
+        "viewtype": "DEPICKUPVIEW",
+        "viewmodule": "WorkOrder",
+        "viewname": "EAMServiceLevelPickupView",
+        "viewfilename": "eamservice-level-pickup-view",
+        "viewtag": "688cebc536955dbea3a807bd19d98fcc",
+        "memo": "绯荤粺鑷姩娣诲姞"
+    },
     "eamlocationtypepickupgridview": {
         "title": "鍔熻兘浣嶇疆绫诲瀷閫夋嫨琛ㄦ牸瑙嗗浘",
         "caption": "鍔熻兘浣嶇疆绫诲瀷",
@@ -629,6 +659,16 @@
         "viewtag": "9930ab7fa32bcb829b706489a25ca808",
         "memo": ""
     },
+    "eamworkorderpickupgridview": {
+        "title": "宸ュ崟閫夋嫨琛ㄦ牸瑙嗗浘",
+        "caption": "宸ュ崟",
+        "viewtype": "DEPICKUPGRIDVIEW",
+        "viewmodule": "WorkOrder",
+        "viewname": "EAMWorkOrderPickupGridView",
+        "viewfilename": "eamwork-order-pickup-grid-view",
+        "viewtag": "99fce329ae1f308142b5b735a41769eb",
+        "memo": "绯荤粺鑷姩娣诲姞"
+    },
     "eamdocumenttypeeditview": {
         "title": "鏂囨。绫诲瀷缂栬緫",
         "caption": "鏂囨。绫诲瀷",
@@ -849,6 +889,16 @@
         "viewtag": "bcdc34d8df9323426a402ba7b111fef2",
         "memo": ""
     },
+    "eamservicelevelpickupgridview": {
+        "title": "鏈嶅姟绛夌骇閫夋嫨琛ㄦ牸瑙嗗浘",
+        "caption": "鏈嶅姟绛夌骇",
+        "viewtype": "DEPICKUPGRIDVIEW",
+        "viewmodule": "WorkOrder",
+        "viewname": "EAMServiceLevelPickupGridView",
+        "viewfilename": "eamservice-level-pickup-grid-view",
+        "viewtag": "bea6d22548223244eec14d59f1471c6e",
+        "memo": "绯荤粺鑷姩娣诲姞"
+    },
     "eamassetlocationassetgridview": {
         "title": "璧勪骇淇℃伅",
         "caption": "璧勪骇",
@@ -1009,6 +1059,16 @@
         "viewtag": "ddfe97780b64a25b28b14a283fa27a61",
         "memo": "绯荤粺鑷姩娣诲姞"
     },
+    "eamworkorderpickupview": {
+        "title": "宸ュ崟鏁版嵁閫夋嫨瑙嗗浘",
+        "caption": "宸ュ崟",
+        "viewtype": "DEPICKUPVIEW",
+        "viewmodule": "WorkOrder",
+        "viewname": "EAMWorkOrderPickupView",
+        "viewfilename": "eamwork-order-pickup-view",
+        "viewtag": "e2c689498cfbde8c97c67a790b1831b8",
+        "memo": "绯荤粺鑷姩娣诲姞"
+    },
     "eamapplystateeditview": {
         "title": "缁存姢鐢宠鐘舵€佺紪杈戣鍥�",
         "caption": "缁存姢鐢宠鐘舵€�",
diff --git a/app_AssetManagement/src/locale/lanres/entities/eamservice-level/eamservice-level_en_US.ts b/app_AssetManagement/src/locale/lanres/entities/eamservice-level/eamservice-level_en_US.ts
index c1aee7d..e43930a 100644
--- a/app_AssetManagement/src/locale/lanres/entities/eamservice-level/eamservice-level_en_US.ts
+++ b/app_AssetManagement/src/locale/lanres/entities/eamservice-level/eamservice-level_en_US.ts
@@ -10,6 +10,14 @@ export default {
     description: "鎻忚堪",
   },
 	views: {
+		pickupview: {
+			caption: "鏈嶅姟绛夌骇",
+      		title: "鏈嶅姟绛夌骇鏁版嵁閫夋嫨瑙嗗浘",
+		},
+		pickupgridview: {
+			caption: "鏈嶅姟绛夌骇",
+      		title: "鏈嶅姟绛夌骇閫夋嫨琛ㄦ牸瑙嗗浘",
+		},
 		editview: {
 			caption: "鏈嶅姟绛夌骇",
       		title: "鏈嶅姟绛夌骇缂栬緫",
diff --git a/app_AssetManagement/src/locale/lanres/entities/eamservice-level/eamservice-level_zh_CN.ts b/app_AssetManagement/src/locale/lanres/entities/eamservice-level/eamservice-level_zh_CN.ts
index a66729c..5183bb2 100644
--- a/app_AssetManagement/src/locale/lanres/entities/eamservice-level/eamservice-level_zh_CN.ts
+++ b/app_AssetManagement/src/locale/lanres/entities/eamservice-level/eamservice-level_zh_CN.ts
@@ -9,6 +9,14 @@ export default {
     description: "鎻忚堪",
   },
 	views: {
+		pickupview: {
+			caption: "鏈嶅姟绛夌骇",
+      		title: "鏈嶅姟绛夌骇鏁版嵁閫夋嫨瑙嗗浘",
+		},
+		pickupgridview: {
+			caption: "鏈嶅姟绛夌骇",
+      		title: "鏈嶅姟绛夌骇閫夋嫨琛ㄦ牸瑙嗗浘",
+		},
 		editview: {
 			caption: "鏈嶅姟绛夌骇",
       		title: "鏈嶅姟绛夌骇缂栬緫",
diff --git a/app_AssetManagement/src/locale/lanres/entities/eamwork-order/eamwork-order_en_US.ts b/app_AssetManagement/src/locale/lanres/entities/eamwork-order/eamwork-order_en_US.ts
index a8b759e..1966e20 100644
--- a/app_AssetManagement/src/locale/lanres/entities/eamwork-order/eamwork-order_en_US.ts
+++ b/app_AssetManagement/src/locale/lanres/entities/eamwork-order/eamwork-order_en_US.ts
@@ -60,10 +60,18 @@ export default {
 			caption: "宸ュ崟",
       		title: "宸ュ崟缂栬緫瑙嗗浘",
 		},
+		pickupgridview: {
+			caption: "宸ュ崟",
+      		title: "宸ュ崟閫夋嫨琛ㄦ牸瑙嗗浘",
+		},
 		summaryview: {
 			caption: "宸ュ崟",
       		title: "宸ュ崟涓讳俊鎭湅鏉�",
 		},
+		pickupview: {
+			caption: "宸ュ崟",
+      		title: "宸ュ崟鏁版嵁閫夋嫨瑙嗗浘",
+		},
 		applywogridview: {
 			caption: "宸ュ崟",
       		title: "浜х敓鐨勫伐鍗�",
@@ -138,10 +146,10 @@ export default {
 	},
 	main_form: {
 		details: {
-			group1: "宸ュ崟鍩烘湰淇℃伅", 
+			group1: "鍩烘湰淇℃伅", 
+			grouppanel1: "璧勪骇淇℃伅", 
+			grouppanel2: "鎵ц淇℃伅", 
 			formpage1: "鍩烘湰淇℃伅", 
-			group2: "鎿嶄綔淇℃伅", 
-			formpage2: "鍏跺畠", 
 			srfupdatedate: "鏇存柊鏃堕棿", 
 			srforikey: "", 
 			srfkey: "宸ュ崟鏍囪瘑", 
@@ -150,7 +158,26 @@ export default {
 			srfuf: "", 
 			srfdeid: "", 
 			srfsourcekey: "", 
+			wonumber: "宸ュ崟缂栧彿", 
+			workordername: "宸ュ崟鍚嶇О", 
+			eamwotypename: "宸ュ崟绫诲瀷", 
+			pworkordername: "涓婄骇宸ュ崟", 
+			eamservicelevelname: "鏈嶅姟绛夌骇", 
+			mdate: "鍒跺畾鏃ユ湡", 
+			eamwooriginname: "宸ュ崟鏉ユ簮", 
+			assetname: "璧勪骇", 
+			eamlocationname: "鍔熻兘浣嶇疆", 
+			wodate: "鎵ц鏃ユ湡", 
+			begintime: "瀹為檯寮€濮嬫椂闂�", 
+			endtime: "瀹為檯缁撴潫鏃堕棿", 
+			worklength: "宸ユ椂", 
+			eamlocationid: "鍔熻兘浣嶇疆鏍囪瘑", 
 			workorderid: "宸ュ崟鏍囪瘑", 
+			eamservicelevelid: "鏈嶅姟绛夌骇鏍囪瘑", 
+			pworkorderid: "涓婄骇宸ュ崟鏍囪瘑", 
+			eamwotypeid: "宸ュ崟绫诲瀷鏍囪瘑", 
+			assetid: "璧勪骇鏍囪瘑", 
+			eamwooriginid: "宸ュ崟鏉ユ簮鏍囪瘑", 
 		},
 		uiactions: {
 		},
@@ -182,12 +209,12 @@ export default {
 		uiactions: {
 		},
 	},
-	grid_001_grid: {
+	main_grid: {
 		columns: {
-			eamwooriginname: "宸ュ崟鏉ユ簮",
 			wonumber: "宸ュ崟缂栧彿",
 			workordername: "宸ュ崟鍚嶇О",
 			eamwotypename: "宸ュ崟绫诲瀷",
+			eamwooriginname: "宸ュ崟鏉ユ簮",
 			assetname: "璧勪骇",
 			eamlocationname: "鍔熻兘浣嶇疆",
 			wodate: "鎵ц鏃ユ湡",
@@ -195,12 +222,12 @@ export default {
 		uiactions: {
 		},
 	},
-	main_grid: {
+	grid_001_grid: {
 		columns: {
+			eamwooriginname: "宸ュ崟鏉ユ簮",
 			wonumber: "宸ュ崟缂栧彿",
 			workordername: "宸ュ崟鍚嶇О",
 			eamwotypename: "宸ュ崟绫诲瀷",
-			eamwooriginname: "宸ュ崟鏉ユ簮",
 			assetname: "璧勪骇",
 			eamlocationname: "鍔熻兘浣嶇疆",
 			wodate: "鎵ц鏃ユ湡",
diff --git a/app_AssetManagement/src/locale/lanres/entities/eamwork-order/eamwork-order_zh_CN.ts b/app_AssetManagement/src/locale/lanres/entities/eamwork-order/eamwork-order_zh_CN.ts
index 94fb626..0dc284b 100644
--- a/app_AssetManagement/src/locale/lanres/entities/eamwork-order/eamwork-order_zh_CN.ts
+++ b/app_AssetManagement/src/locale/lanres/entities/eamwork-order/eamwork-order_zh_CN.ts
@@ -59,10 +59,18 @@ export default {
 			caption: "宸ュ崟",
       		title: "宸ュ崟缂栬緫瑙嗗浘",
 		},
+		pickupgridview: {
+			caption: "宸ュ崟",
+      		title: "宸ュ崟閫夋嫨琛ㄦ牸瑙嗗浘",
+		},
 		summaryview: {
 			caption: "宸ュ崟",
       		title: "宸ュ崟涓讳俊鎭湅鏉�",
 		},
+		pickupview: {
+			caption: "宸ュ崟",
+      		title: "宸ュ崟鏁版嵁閫夋嫨瑙嗗浘",
+		},
 		applywogridview: {
 			caption: "宸ュ崟",
       		title: "浜х敓鐨勫伐鍗�",
@@ -137,10 +145,10 @@ export default {
 	},
 	main_form: {
 		details: {
-			group1: "宸ュ崟鍩烘湰淇℃伅", 
+			group1: "鍩烘湰淇℃伅", 
+			grouppanel1: "璧勪骇淇℃伅", 
+			grouppanel2: "鎵ц淇℃伅", 
 			formpage1: "鍩烘湰淇℃伅", 
-			group2: "鎿嶄綔淇℃伅", 
-			formpage2: "鍏跺畠", 
 			srfupdatedate: "鏇存柊鏃堕棿", 
 			srforikey: "", 
 			srfkey: "宸ュ崟鏍囪瘑", 
@@ -149,7 +157,26 @@ export default {
 			srfuf: "", 
 			srfdeid: "", 
 			srfsourcekey: "", 
+			wonumber: "宸ュ崟缂栧彿", 
+			workordername: "宸ュ崟鍚嶇О", 
+			eamwotypename: "宸ュ崟绫诲瀷", 
+			pworkordername: "涓婄骇宸ュ崟", 
+			eamservicelevelname: "鏈嶅姟绛夌骇", 
+			mdate: "鍒跺畾鏃ユ湡", 
+			eamwooriginname: "宸ュ崟鏉ユ簮", 
+			assetname: "璧勪骇", 
+			eamlocationname: "鍔熻兘浣嶇疆", 
+			wodate: "鎵ц鏃ユ湡", 
+			begintime: "瀹為檯寮€濮嬫椂闂�", 
+			endtime: "瀹為檯缁撴潫鏃堕棿", 
+			worklength: "宸ユ椂", 
+			eamlocationid: "鍔熻兘浣嶇疆鏍囪瘑", 
 			workorderid: "宸ュ崟鏍囪瘑", 
+			eamservicelevelid: "鏈嶅姟绛夌骇鏍囪瘑", 
+			pworkorderid: "涓婄骇宸ュ崟鏍囪瘑", 
+			eamwotypeid: "宸ュ崟绫诲瀷鏍囪瘑", 
+			assetid: "璧勪骇鏍囪瘑", 
+			eamwooriginid: "宸ュ崟鏉ユ簮鏍囪瘑", 
 		},
 		uiactions: {
 		},
@@ -181,12 +208,12 @@ export default {
 		uiactions: {
 		},
 	},
-	grid_001_grid: {
+	main_grid: {
 		columns: {
-			eamwooriginname: "宸ュ崟鏉ユ簮",
 			wonumber: "宸ュ崟缂栧彿",
 			workordername: "宸ュ崟鍚嶇О",
 			eamwotypename: "宸ュ崟绫诲瀷",
+			eamwooriginname: "宸ュ崟鏉ユ簮",
 			assetname: "璧勪骇",
 			eamlocationname: "鍔熻兘浣嶇疆",
 			wodate: "鎵ц鏃ユ湡",
@@ -194,12 +221,12 @@ export default {
 		uiactions: {
 		},
 	},
-	main_grid: {
+	grid_001_grid: {
 		columns: {
+			eamwooriginname: "宸ュ崟鏉ユ簮",
 			wonumber: "宸ュ崟缂栧彿",
 			workordername: "宸ュ崟鍚嶇О",
 			eamwotypename: "宸ュ崟绫诲瀷",
-			eamwooriginname: "宸ュ崟鏉ユ簮",
 			assetname: "璧勪骇",
 			eamlocationname: "鍔熻兘浣嶇疆",
 			wodate: "鎵ц鏃ユ湡",
diff --git a/app_AssetManagement/src/locale/lanres/entities/woorigin/woorigin_en_US.ts b/app_AssetManagement/src/locale/lanres/entities/woorigin/woorigin_en_US.ts
index 2a2c456..5365864 100644
--- a/app_AssetManagement/src/locale/lanres/entities/woorigin/woorigin_en_US.ts
+++ b/app_AssetManagement/src/locale/lanres/entities/woorigin/woorigin_en_US.ts
@@ -9,4 +9,27 @@ export default {
     updatedate: "鏇存柊鏃堕棿",
     woorigintype: "宸ュ崟鏉ユ簮绫诲瀷",
   },
+	views: {
+		pickupview: {
+			caption: "宸ュ崟鏉ユ簮",
+      		title: "宸ュ崟鏉ユ簮鏁版嵁閫夋嫨瑙嗗浘",
+		},
+		pickupgridview: {
+			caption: "宸ュ崟鏉ユ簮",
+      		title: "宸ュ崟鏉ユ簮閫夋嫨琛ㄦ牸瑙嗗浘",
+		},
+	},
+	main_grid: {
+		columns: {
+		},
+		uiactions: {
+		},
+	},
+	default_searchform: {
+		details: {
+			formpage1: "甯歌鏉′欢", 
+		},
+		uiactions: {
+		},
+	},
 };
\ No newline at end of file
diff --git a/app_AssetManagement/src/locale/lanres/entities/woorigin/woorigin_zh_CN.ts b/app_AssetManagement/src/locale/lanres/entities/woorigin/woorigin_zh_CN.ts
index 8dc71c1..ae1ec61 100644
--- a/app_AssetManagement/src/locale/lanres/entities/woorigin/woorigin_zh_CN.ts
+++ b/app_AssetManagement/src/locale/lanres/entities/woorigin/woorigin_zh_CN.ts
@@ -8,4 +8,27 @@ export default {
     updatedate: "鏇存柊鏃堕棿",
     woorigintype: "宸ュ崟鏉ユ簮绫诲瀷",
   },
+	views: {
+		pickupview: {
+			caption: "宸ュ崟鏉ユ簮",
+      		title: "宸ュ崟鏉ユ簮鏁版嵁閫夋嫨瑙嗗浘",
+		},
+		pickupgridview: {
+			caption: "宸ュ崟鏉ユ簮",
+      		title: "宸ュ崟鏉ユ簮閫夋嫨琛ㄦ牸瑙嗗浘",
+		},
+	},
+	main_grid: {
+		columns: {
+		},
+		uiactions: {
+		},
+	},
+	default_searchform: {
+		details: {
+			formpage1: "甯歌鏉′欢", 
+		},
+		uiactions: {
+		},
+	},
 };
\ No newline at end of file
diff --git a/app_AssetManagement/src/mock/viewconfig/viewconfig.ts b/app_AssetManagement/src/mock/viewconfig/viewconfig.ts
index f7c2b64..fdedb86 100644
--- a/app_AssetManagement/src/mock/viewconfig/viewconfig.ts
+++ b/app_AssetManagement/src/mock/viewconfig/viewconfig.ts
@@ -23,6 +23,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => {
             "viewname": "EAMDocumentAssetTypeDocGridView",
             "viewtag": "04760f08f434367b552fa8ab8cf191dd"
         },
+        "wooriginpickupview": {
+            "title": "宸ュ崟鏉ユ簮鏁版嵁閫夋嫨瑙嗗浘",
+            "caption": "宸ュ崟鏉ユ簮",
+            "viewtype": "DEPICKUPVIEW",
+            "viewmodule": "WorkOrder",
+            "viewname": "WOOriginPickupView",
+            "viewtag": "06ee1c500b1cb4aa576fb3b62b4ddb35"
+        },
         "eamassettreeexpview": {
             "title": "璧勪骇淇℃伅",
             "caption": "璧勪骇",
@@ -175,6 +183,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => {
             "viewname": "EAMWorkOrderQuickCreateView",
             "viewtag": "326f3b663c055e3f1ec6fa0d2c3f0223"
         },
+        "wooriginpickupgridview": {
+            "title": "宸ュ崟鏉ユ簮閫夋嫨琛ㄦ牸瑙嗗浘",
+            "caption": "宸ュ崟鏉ユ簮",
+            "viewtype": "DEPICKUPGRIDVIEW",
+            "viewmodule": "WorkOrder",
+            "viewname": "WOOriginPickupGridView",
+            "viewtag": "34cf27e1eddc36c197176c5632b97179"
+        },
         "eamworkorderinfo_mainview": {
             "title": "宸ュ崟涓讳俊鎭�",
             "caption": "宸ュ崟",
@@ -319,6 +335,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => {
             "viewname": "EAMWOTypePickupView",
             "viewtag": "687ed577b14b3da7a542f17d0a1a6529"
         },
+        "eamservicelevelpickupview": {
+            "title": "鏈嶅姟绛夌骇鏁版嵁閫夋嫨瑙嗗浘",
+            "caption": "鏈嶅姟绛夌骇",
+            "viewtype": "DEPICKUPVIEW",
+            "viewmodule": "WorkOrder",
+            "viewname": "EAMServiceLevelPickupView",
+            "viewtag": "688cebc536955dbea3a807bd19d98fcc"
+        },
         "eamlocationtypepickupgridview": {
             "title": "鍔熻兘浣嶇疆绫诲瀷閫夋嫨琛ㄦ牸瑙嗗浘",
             "caption": "鍔熻兘浣嶇疆绫诲瀷",
@@ -511,6 +535,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => {
             "viewname": "EAMDocumentGridView",
             "viewtag": "9930ab7fa32bcb829b706489a25ca808"
         },
+        "eamworkorderpickupgridview": {
+            "title": "宸ュ崟閫夋嫨琛ㄦ牸瑙嗗浘",
+            "caption": "宸ュ崟",
+            "viewtype": "DEPICKUPGRIDVIEW",
+            "viewmodule": "WorkOrder",
+            "viewname": "EAMWorkOrderPickupGridView",
+            "viewtag": "99fce329ae1f308142b5b735a41769eb"
+        },
         "eamdocumenttypeeditview": {
             "title": "鏂囨。绫诲瀷缂栬緫",
             "caption": "鏂囨。绫诲瀷",
@@ -687,6 +719,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => {
             "viewname": "EAMAssetQuickCreateView",
             "viewtag": "bcdc34d8df9323426a402ba7b111fef2"
         },
+        "eamservicelevelpickupgridview": {
+            "title": "鏈嶅姟绛夌骇閫夋嫨琛ㄦ牸瑙嗗浘",
+            "caption": "鏈嶅姟绛夌骇",
+            "viewtype": "DEPICKUPGRIDVIEW",
+            "viewmodule": "WorkOrder",
+            "viewname": "EAMServiceLevelPickupGridView",
+            "viewtag": "bea6d22548223244eec14d59f1471c6e"
+        },
         "eamassetlocationassetgridview": {
             "title": "璧勪骇淇℃伅",
             "caption": "璧勪骇",
@@ -815,6 +855,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => {
             "viewname": "EAMAssetStatePickupView",
             "viewtag": "ddfe97780b64a25b28b14a283fa27a61"
         },
+        "eamworkorderpickupview": {
+            "title": "宸ュ崟鏁版嵁閫夋嫨瑙嗗浘",
+            "caption": "宸ュ崟",
+            "viewtype": "DEPICKUPVIEW",
+            "viewmodule": "WorkOrder",
+            "viewname": "EAMWorkOrderPickupView",
+            "viewtag": "e2c689498cfbde8c97c67a790b1831b8"
+        },
         "eamapplystateeditview": {
             "title": "缁存姢鐢宠鐘舵€佺紪杈戣鍥�",
             "caption": "缁存姢鐢宠鐘舵€�",
diff --git a/app_AssetManagement/src/pages/base/app-index-view/page-register.ts b/app_AssetManagement/src/pages/base/app-index-view/page-register.ts
index 1fdca13..fabfbc3 100644
--- a/app_AssetManagement/src/pages/base/app-index-view/page-register.ts
+++ b/app_AssetManagement/src/pages/base/app-index-view/page-register.ts
@@ -3,8 +3,10 @@ export const PageComponents = {
                 Vue.component('eamspare-parts-group-grid-view', () => import('@pages/asset/eamspare-parts-group-grid-view/eamspare-parts-group-grid-view.vue'));
         Vue.component('eamapply-info-main-view', () => import('@pages/apply/eamapply-info-main-view/eamapply-info-main-view.vue'));
         Vue.component('eamasset-state-model-line-edit-view', () => import('@pages/asset/eamasset-state-model-line-edit-view/eamasset-state-model-line-edit-view.vue'));
+        Vue.component('eamservice-level-pickup-grid-view', () => import('@pages/work-order/eamservice-level-pickup-grid-view/eamservice-level-pickup-grid-view.vue'));
         Vue.component('eamasset-tree-exp-view', () => import('@pages/asset/eamasset-tree-exp-view/eamasset-tree-exp-view.vue'));
         Vue.component('eamapply-asset-apply-grid-view', () => import('@pages/apply/eamapply-asset-apply-grid-view/eamapply-asset-apply-grid-view.vue'));
+        Vue.component('woorigin-pickup-grid-view', () => import('@pages/work-order/woorigin-pickup-grid-view/woorigin-pickup-grid-view.vue'));
         Vue.component('eamlocation-tree-exp-view', () => import('@pages/location/eamlocation-tree-exp-view/eamlocation-tree-exp-view.vue'));
         Vue.component('eamlocation-quick-create-view', () => import('@pages/location/eamlocation-quick-create-view/eamlocation-quick-create-view.vue'));
         Vue.component('eamservice-level-grid-view', () => import('@pages/work-order/eamservice-level-grid-view/eamservice-level-grid-view.vue'));
@@ -32,6 +34,7 @@ export const PageComponents = {
         Vue.component('eamlocation-type-pickup-grid-view', () => import('@pages/location/eamlocation-type-pickup-grid-view/eamlocation-type-pickup-grid-view.vue'));
         Vue.component('eamwork-order-summary-view', () => import('@pages/work-order/eamwork-order-summary-view/eamwork-order-summary-view.vue'));
         Vue.component('eamasset-summary-view', () => import('@pages/asset/eamasset-summary-view/eamasset-summary-view.vue'));
+        Vue.component('eamwork-order-pickup-view', () => import('@pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view.vue'));
         Vue.component('eamplan-edit-view', () => import('@pages/plan/eamplan-edit-view/eamplan-edit-view.vue'));
         Vue.component('eamasset-state-model-line-grid-view', () => import('@pages/asset/eamasset-state-model-line-grid-view/eamasset-state-model-line-grid-view.vue'));
         Vue.component('eamlocation-type-grid-view', () => import('@pages/location/eamlocation-type-grid-view/eamlocation-type-grid-view.vue'));
@@ -81,6 +84,7 @@ export const PageComponents = {
         Vue.component('eamapply-type-pickup-view', () => import('@pages/apply/eamapply-type-pickup-view/eamapply-type-pickup-view.vue'));
         Vue.component('eamwork-order-child-wogrid-view', () => import('@pages/work-order/eamwork-order-child-wogrid-view/eamwork-order-child-wogrid-view.vue'));
         Vue.component('eamwork-order-info-main-view', () => import('@pages/work-order/eamwork-order-info-main-view/eamwork-order-info-main-view.vue'));
+        Vue.component('eamwork-order-pickup-grid-view', () => import('@pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view.vue'));
         Vue.component('eamspare-parts-group-pickup-view', () => import('@pages/asset/eamspare-parts-group-pickup-view/eamspare-parts-group-pickup-view.vue'));
         Vue.component('eamasset-state-pickup-view', () => import('@pages/asset/eamasset-state-pickup-view/eamasset-state-pickup-view.vue'));
         Vue.component('eamasset-state-grid-view', () => import('@pages/asset/eamasset-state-grid-view/eamasset-state-grid-view.vue'));
@@ -102,6 +106,7 @@ export const PageComponents = {
         Vue.component('eamlocation-state-model-line-edit-view', () => import('@pages/location/eamlocation-state-model-line-edit-view/eamlocation-state-model-line-edit-view.vue'));
         Vue.component('eamasset-pickup-grid-view', () => import('@pages/asset/eamasset-pickup-grid-view/eamasset-pickup-grid-view.vue'));
         Vue.component('eamlocation-state-list-exp-view', () => import('@pages/location/eamlocation-state-list-exp-view/eamlocation-state-list-exp-view.vue'));
+        Vue.component('woorigin-pickup-view', () => import('@pages/work-order/woorigin-pickup-view/woorigin-pickup-view.vue'));
         Vue.component('eamlocation-type-edit-view', () => import('@pages/location/eamlocation-type-edit-view/eamlocation-type-edit-view.vue'));
         Vue.component('eamspare-parts-group-info-main-view', () => import('@pages/asset/eamspare-parts-group-info-main-view/eamspare-parts-group-info-main-view.vue'));
         Vue.component('eamlocation-summary-view', () => import('@pages/location/eamlocation-summary-view/eamlocation-summary-view.vue'));
@@ -110,6 +115,7 @@ export const PageComponents = {
         Vue.component('eamapply-type-grid-view', () => import('@pages/apply/eamapply-type-grid-view/eamapply-type-grid-view.vue'));
         Vue.component('eamwork-order-asset-wogrid-view', () => import('@pages/work-order/eamwork-order-asset-wogrid-view/eamwork-order-asset-wogrid-view.vue'));
         Vue.component('eamwork-order-quick-create-view', () => import('@pages/work-order/eamwork-order-quick-create-view/eamwork-order-quick-create-view.vue'));
+        Vue.component('eamservice-level-pickup-view', () => import('@pages/work-order/eamservice-level-pickup-view/eamservice-level-pickup-view.vue'));
         Vue.component('eamplan-summary-view', () => import('@pages/plan/eamplan-summary-view/eamplan-summary-view.vue'));
         Vue.component('eamspare-parts-proedit-view', () => import('@pages/asset/eamspare-parts-proedit-view/eamspare-parts-proedit-view.vue'));
     }
diff --git a/app_AssetManagement/src/pages/base/app-index-view/router.ts b/app_AssetManagement/src/pages/base/app-index-view/router.ts
index 97def17..bac8192 100644
--- a/app_AssetManagement/src/pages/base/app-index-view/router.ts
+++ b/app_AssetManagement/src/pages/base/app-index-view/router.ts
@@ -116,6 +116,20 @@ const router = new Router({
                     },
                     component: () => import('@pages/asset/eamasset-state-model-line-edit-view/eamasset-state-model-line-edit-view.vue'),
                 },
+                {
+                    path: 'eamservicelevels/:eamservicelevel?/pickupgridview/:pickupgridview?',
+                    meta: {
+                        caption: 'entities.eamservicelevel.views.pickupgridview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'eamservicelevels', parameterName: 'eamservicelevel' },
+                            { pathName: 'pickupgridview', parameterName: 'pickupgridview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/eamservice-level-pickup-grid-view/eamservice-level-pickup-grid-view.vue'),
+                },
                 {
                     path: 'eamlocations/:eamlocation?/eamassets/:eamasset?/treeexpview/:treeexpview?',
                     meta: {
@@ -190,6 +204,20 @@ const router = new Router({
                     },
                     component: () => import('@pages/apply/eamapply-asset-apply-grid-view/eamapply-asset-apply-grid-view.vue'),
                 },
+                {
+                    path: 'woorigins/:woorigin?/pickupgridview/:pickupgridview?',
+                    meta: {
+                        caption: 'entities.woorigin.views.pickupgridview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'woorigins', parameterName: 'woorigin' },
+                            { pathName: 'pickupgridview', parameterName: 'pickupgridview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/woorigin-pickup-grid-view/woorigin-pickup-grid-view.vue'),
+                },
                 {
                     path: 'eamlocations/:eamlocation?/treeexpview/:treeexpview?',
                     meta: {
@@ -895,6 +923,147 @@ const router = new Router({
                     },
                     component: () => import('@pages/asset/eamasset-summary-view/eamasset-summary-view.vue'),
                 },
+                {
+                    path: 'eamlocations/:eamlocation?/eamassets/:eamasset?/eamplans/:eamplan?/eamworkorders/:eamworkorder?/pickupview/:pickupview?',
+                    meta: {
+                        caption: 'entities.eamworkorder.views.pickupview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'eamlocations', parameterName: 'eamlocation' },
+                            { pathName: 'eamassets', parameterName: 'eamasset' },
+                            { pathName: 'eamplans', parameterName: 'eamplan' },
+                            { pathName: 'eamworkorders', parameterName: 'eamworkorder' },
+                            { pathName: 'pickupview', parameterName: 'pickupview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view.vue'),
+                },
+                {
+                    path: 'eamlocations/:eamlocation?/eamassets/:eamasset?/eamapplies/:eamapply?/eamworkorders/:eamworkorder?/pickupview/:pickupview?',
+                    meta: {
+                        caption: 'entities.eamworkorder.views.pickupview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'eamlocations', parameterName: 'eamlocation' },
+                            { pathName: 'eamassets', parameterName: 'eamasset' },
+                            { pathName: 'eamapplies', parameterName: 'eamapply' },
+                            { pathName: 'eamworkorders', parameterName: 'eamworkorder' },
+                            { pathName: 'pickupview', parameterName: 'pickupview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view.vue'),
+                },
+                {
+                    path: 'eamassets/:eamasset?/eamplans/:eamplan?/eamworkorders/:eamworkorder?/pickupview/:pickupview?',
+                    meta: {
+                        caption: 'entities.eamworkorder.views.pickupview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'eamassets', parameterName: 'eamasset' },
+                            { pathName: 'eamplans', parameterName: 'eamplan' },
+                            { pathName: 'eamworkorders', parameterName: 'eamworkorder' },
+                            { pathName: 'pickupview', parameterName: 'pickupview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view.vue'),
+                },
+                {
+                    path: 'eamlocations/:eamlocation?/eamassets/:eamasset?/eamworkorders/:eamworkorder?/pickupview/:pickupview?',
+                    meta: {
+                        caption: 'entities.eamworkorder.views.pickupview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'eamlocations', parameterName: 'eamlocation' },
+                            { pathName: 'eamassets', parameterName: 'eamasset' },
+                            { pathName: 'eamworkorders', parameterName: 'eamworkorder' },
+                            { pathName: 'pickupview', parameterName: 'pickupview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view.vue'),
+                },
+                {
+                    path: 'eamassets/:eamasset?/eamapplies/:eamapply?/eamworkorders/:eamworkorder?/pickupview/:pickupview?',
+                    meta: {
+                        caption: 'entities.eamworkorder.views.pickupview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'eamassets', parameterName: 'eamasset' },
+                            { pathName: 'eamapplies', parameterName: 'eamapply' },
+                            { pathName: 'eamworkorders', parameterName: 'eamworkorder' },
+                            { pathName: 'pickupview', parameterName: 'pickupview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view.vue'),
+                },
+                {
+                    path: 'eamplans/:eamplan?/eamworkorders/:eamworkorder?/pickupview/:pickupview?',
+                    meta: {
+                        caption: 'entities.eamworkorder.views.pickupview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'eamplans', parameterName: 'eamplan' },
+                            { pathName: 'eamworkorders', parameterName: 'eamworkorder' },
+                            { pathName: 'pickupview', parameterName: 'pickupview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view.vue'),
+                },
+                {
+                    path: 'eamassets/:eamasset?/eamworkorders/:eamworkorder?/pickupview/:pickupview?',
+                    meta: {
+                        caption: 'entities.eamworkorder.views.pickupview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'eamassets', parameterName: 'eamasset' },
+                            { pathName: 'eamworkorders', parameterName: 'eamworkorder' },
+                            { pathName: 'pickupview', parameterName: 'pickupview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view.vue'),
+                },
+                {
+                    path: 'eamapplies/:eamapply?/eamworkorders/:eamworkorder?/pickupview/:pickupview?',
+                    meta: {
+                        caption: 'entities.eamworkorder.views.pickupview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'eamapplies', parameterName: 'eamapply' },
+                            { pathName: 'eamworkorders', parameterName: 'eamworkorder' },
+                            { pathName: 'pickupview', parameterName: 'pickupview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view.vue'),
+                },
+                {
+                    path: 'eamworkorders/:eamworkorder?/pickupview/:pickupview?',
+                    meta: {
+                        caption: 'entities.eamworkorder.views.pickupview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'eamworkorders', parameterName: 'eamworkorder' },
+                            { pathName: 'pickupview', parameterName: 'pickupview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view.vue'),
+                },
                 {
                     path: 'eamlocations/:eamlocation?/eamassets/:eamasset?/eamplans/:eamplan?/editview/:editview?',
                     meta: {
@@ -2587,6 +2756,147 @@ const router = new Router({
                     },
                     component: () => import('@pages/work-order/eamwork-order-info-main-view/eamwork-order-info-main-view.vue'),
                 },
+                {
+                    path: 'eamlocations/:eamlocation?/eamassets/:eamasset?/eamplans/:eamplan?/eamworkorders/:eamworkorder?/pickupgridview/:pickupgridview?',
+                    meta: {
+                        caption: 'entities.eamworkorder.views.pickupgridview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'eamlocations', parameterName: 'eamlocation' },
+                            { pathName: 'eamassets', parameterName: 'eamasset' },
+                            { pathName: 'eamplans', parameterName: 'eamplan' },
+                            { pathName: 'eamworkorders', parameterName: 'eamworkorder' },
+                            { pathName: 'pickupgridview', parameterName: 'pickupgridview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view.vue'),
+                },
+                {
+                    path: 'eamlocations/:eamlocation?/eamassets/:eamasset?/eamapplies/:eamapply?/eamworkorders/:eamworkorder?/pickupgridview/:pickupgridview?',
+                    meta: {
+                        caption: 'entities.eamworkorder.views.pickupgridview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'eamlocations', parameterName: 'eamlocation' },
+                            { pathName: 'eamassets', parameterName: 'eamasset' },
+                            { pathName: 'eamapplies', parameterName: 'eamapply' },
+                            { pathName: 'eamworkorders', parameterName: 'eamworkorder' },
+                            { pathName: 'pickupgridview', parameterName: 'pickupgridview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view.vue'),
+                },
+                {
+                    path: 'eamassets/:eamasset?/eamplans/:eamplan?/eamworkorders/:eamworkorder?/pickupgridview/:pickupgridview?',
+                    meta: {
+                        caption: 'entities.eamworkorder.views.pickupgridview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'eamassets', parameterName: 'eamasset' },
+                            { pathName: 'eamplans', parameterName: 'eamplan' },
+                            { pathName: 'eamworkorders', parameterName: 'eamworkorder' },
+                            { pathName: 'pickupgridview', parameterName: 'pickupgridview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view.vue'),
+                },
+                {
+                    path: 'eamlocations/:eamlocation?/eamassets/:eamasset?/eamworkorders/:eamworkorder?/pickupgridview/:pickupgridview?',
+                    meta: {
+                        caption: 'entities.eamworkorder.views.pickupgridview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'eamlocations', parameterName: 'eamlocation' },
+                            { pathName: 'eamassets', parameterName: 'eamasset' },
+                            { pathName: 'eamworkorders', parameterName: 'eamworkorder' },
+                            { pathName: 'pickupgridview', parameterName: 'pickupgridview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view.vue'),
+                },
+                {
+                    path: 'eamassets/:eamasset?/eamapplies/:eamapply?/eamworkorders/:eamworkorder?/pickupgridview/:pickupgridview?',
+                    meta: {
+                        caption: 'entities.eamworkorder.views.pickupgridview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'eamassets', parameterName: 'eamasset' },
+                            { pathName: 'eamapplies', parameterName: 'eamapply' },
+                            { pathName: 'eamworkorders', parameterName: 'eamworkorder' },
+                            { pathName: 'pickupgridview', parameterName: 'pickupgridview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view.vue'),
+                },
+                {
+                    path: 'eamplans/:eamplan?/eamworkorders/:eamworkorder?/pickupgridview/:pickupgridview?',
+                    meta: {
+                        caption: 'entities.eamworkorder.views.pickupgridview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'eamplans', parameterName: 'eamplan' },
+                            { pathName: 'eamworkorders', parameterName: 'eamworkorder' },
+                            { pathName: 'pickupgridview', parameterName: 'pickupgridview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view.vue'),
+                },
+                {
+                    path: 'eamassets/:eamasset?/eamworkorders/:eamworkorder?/pickupgridview/:pickupgridview?',
+                    meta: {
+                        caption: 'entities.eamworkorder.views.pickupgridview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'eamassets', parameterName: 'eamasset' },
+                            { pathName: 'eamworkorders', parameterName: 'eamworkorder' },
+                            { pathName: 'pickupgridview', parameterName: 'pickupgridview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view.vue'),
+                },
+                {
+                    path: 'eamapplies/:eamapply?/eamworkorders/:eamworkorder?/pickupgridview/:pickupgridview?',
+                    meta: {
+                        caption: 'entities.eamworkorder.views.pickupgridview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'eamapplies', parameterName: 'eamapply' },
+                            { pathName: 'eamworkorders', parameterName: 'eamworkorder' },
+                            { pathName: 'pickupgridview', parameterName: 'pickupgridview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view.vue'),
+                },
+                {
+                    path: 'eamworkorders/:eamworkorder?/pickupgridview/:pickupgridview?',
+                    meta: {
+                        caption: 'entities.eamworkorder.views.pickupgridview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'eamworkorders', parameterName: 'eamworkorder' },
+                            { pathName: 'pickupgridview', parameterName: 'pickupgridview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view.vue'),
+                },
                 {
                     path: 'eamsparepartsgroups/:eamsparepartsgroup?/pickupview/:pickupview?',
                     meta: {
@@ -3175,6 +3485,20 @@ const router = new Router({
                     },
                     component: () => import('@pages/location/eamlocation-state-list-exp-view/eamlocation-state-list-exp-view.vue'),
                 },
+                {
+                    path: 'woorigins/:woorigin?/pickupview/:pickupview?',
+                    meta: {
+                        caption: 'entities.woorigin.views.pickupview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'woorigins', parameterName: 'woorigin' },
+                            { pathName: 'pickupview', parameterName: 'pickupview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/woorigin-pickup-view/woorigin-pickup-view.vue'),
+                },
                 {
                     path: 'eamlocationtypes/:eamlocationtype?/editview/:editview?',
                     meta: {
@@ -3571,6 +3895,20 @@ const router = new Router({
                     },
                     component: () => import('@pages/work-order/eamwork-order-quick-create-view/eamwork-order-quick-create-view.vue'),
                 },
+                {
+                    path: 'eamservicelevels/:eamservicelevel?/pickupview/:pickupview?',
+                    meta: {
+                        caption: 'entities.eamservicelevel.views.pickupview.title',
+                        info:'',
+                        parameters: [
+                            { pathName: 'appindexview', parameterName: 'appindexview' },
+                            { pathName: 'eamservicelevels', parameterName: 'eamservicelevel' },
+                            { pathName: 'pickupview', parameterName: 'pickupview' },
+                        ],
+                        requireAuth: true,
+                    },
+                    component: () => import('@pages/work-order/eamservice-level-pickup-view/eamservice-level-pickup-view.vue'),
+                },
                 {
                     path: 'eamlocations/:eamlocation?/eamassets/:eamasset?/eamplans/:eamplan?/summaryview/:summaryview?',
                     meta: {
diff --git a/app_AssetManagement/src/pages/work-order/eamservice-level-pickup-grid-view/eamservice-level-pickup-grid-view-base.tsx b/app_AssetManagement/src/pages/work-order/eamservice-level-pickup-grid-view/eamservice-level-pickup-grid-view-base.tsx
new file mode 100644
index 0000000..05c5c7a
--- /dev/null
+++ b/app_AssetManagement/src/pages/work-order/eamservice-level-pickup-grid-view/eamservice-level-pickup-grid-view-base.tsx
@@ -0,0 +1,221 @@
+import { Subject } from 'rxjs';
+import { PickupGridViewBase } from '@/studio-core';
+import EAMServiceLevelService from '@/service/eamservice-level/eamservice-level-service';
+import EAMServiceLevelAuthService from '@/authservice/eamservice-level/eamservice-level-auth-service';
+import PickupGridViewEngine from '@engine/view/pickup-grid-view-engine';
+import EAMServiceLevelUIService from '@/uiservice/eamservice-level/eamservice-level-ui-service';
+
+/**
+ * 鏈嶅姟绛夌骇閫夋嫨琛ㄦ牸瑙嗗浘瑙嗗浘鍩虹被
+ *
+ * @export
+ * @class EAMServiceLevelPickupGridViewBase
+ * @extends {PickupGridViewBase}
+ */
+export class EAMServiceLevelPickupGridViewBase extends PickupGridViewBase {
+    /**
+     * 瑙嗗浘瀵瑰簲搴旂敤瀹炰綋鍚嶇О
+     *
+     * @protected
+     * @type {string}
+     * @memberof EAMServiceLevelPickupGridViewBase
+     */
+    protected appDeName: string = 'eamservicelevel';
+
+    /**
+     * 搴旂敤瀹炰綋涓婚敭
+     *
+     * @protected
+     * @type {string}
+     * @memberof EAMServiceLevelPickupGridViewBase
+     */
+    protected appDeKey: string = 'eamservicelevelid';
+
+    /**
+     * 搴旂敤瀹炰綋涓讳俊鎭�
+     *
+     * @protected
+     * @type {string}
+     * @memberof EAMServiceLevelPickupGridViewBase
+     */
+    protected appDeMajor: string = 'eamservicelevelname';
+
+    /**
+     * 瀹炰綋鏈嶅姟瀵硅薄
+     *
+     * @type {EAMServiceLevelService}
+     * @memberof EAMServiceLevelPickupGridViewBase
+     */
+    protected appEntityService: EAMServiceLevelService = new EAMServiceLevelService;
+
+    /**
+     * 瀹炰綋鏉冮檺鏈嶅姟瀵硅薄
+     *
+     * @type EAMServiceLevelUIService
+     * @memberof EAMServiceLevelPickupGridViewBase
+     */
+    public appUIService: EAMServiceLevelUIService = new EAMServiceLevelUIService(this.$store);
+
+
+    /**
+     * 璁℃暟鍣ㄦ湇鍔″璞¢泦鍚�
+     *
+     * @protected
+     * @type {Array<*>}
+     * @memberof EAMServiceLevelPickupGridViewBase
+     */    
+    protected counterServiceArray: Array<any> = [];
+
+    /**
+     * 瑙嗗浘妯″瀷鏁版嵁
+     *
+     * @protected
+     * @type {*}
+     * @memberof EAMServiceLevelPickupGridViewBase
+     */
+    protected model: any = {
+        srfCaption: 'entities.eamservicelevel.views.pickupgridview.caption',
+        srfTitle: 'entities.eamservicelevel.views.pickupgridview.title',
+        srfSubTitle: 'entities.eamservicelevel.views.pickupgridview.subtitle',
+        dataInfo: ''
+    }
+
+    /**
+     * 瀹瑰櫒妯″瀷
+     *
+     * @protected
+     * @type {*}
+     * @memberof EAMServiceLevelPickupGridViewBase
+     */
+    protected containerModel: any = {
+        view_grid: { name: 'grid', type: 'GRID' },
+        view_searchform: { name: 'searchform', type: 'SEARCHFORM' },
+    };
+
+
+	/**
+     * 瑙嗗浘鍞竴鏍囪瘑
+     *
+     * @protected
+     * @type {string}
+     * @memberof ViewBase
+     */
+	protected viewtag: string = 'bea6d22548223244eec14d59f1471c6e';
+
+
+    /**
+     * 瑙嗗浘寮曟搸
+     *
+     * @public
+     * @type {Engine}
+     * @memberof EAMServiceLevelPickupGridViewBase
+     */
+    public engine: PickupGridViewEngine = new PickupGridViewEngine();
+
+    /**
+     * 寮曟搸鍒濆鍖�
+     *
+     * @public
+     * @memberof EAMServiceLevelPickupGridViewBase
+     */
+    public engineInit(): void {
+        this.engine.init({
+            view: this,
+            grid: this.$refs.grid,
+            searchform: this.$refs.searchform,
+            keyPSDEField: 'eamservicelevel',
+            majorPSDEField: 'eamservicelevelname',
+            isLoadDefault: true,
+        });
+    }
+
+    /**
+     * grid 閮ㄤ欢 selectionchange 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof EAMServiceLevelPickupGridViewBase
+     */
+    public grid_selectionchange($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('grid', 'selectionchange', $event);
+    }
+
+    /**
+     * grid 閮ㄤ欢 beforeload 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof EAMServiceLevelPickupGridViewBase
+     */
+    public grid_beforeload($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('grid', 'beforeload', $event);
+    }
+
+    /**
+     * grid 閮ㄤ欢 rowdblclick 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof EAMServiceLevelPickupGridViewBase
+     */
+    public grid_rowdblclick($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('grid', 'rowdblclick', $event);
+    }
+
+    /**
+     * grid 閮ㄤ欢 load 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof EAMServiceLevelPickupGridViewBase
+     */
+    public grid_load($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('grid', 'load', $event);
+    }
+
+    /**
+     * searchform 閮ㄤ欢 save 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof EAMServiceLevelPickupGridViewBase
+     */
+    public searchform_save($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('searchform', 'save', $event);
+    }
+
+    /**
+     * searchform 閮ㄤ欢 search 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof EAMServiceLevelPickupGridViewBase
+     */
+    public searchform_search($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('searchform', 'search', $event);
+    }
+
+    /**
+     * searchform 閮ㄤ欢 load 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof EAMServiceLevelPickupGridViewBase
+     */
+    public searchform_load($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('searchform', 'load', $event);
+    }
+
+
+
+    /**
+     * 鏄惁灞曞紑鎼滅储琛ㄥ崟
+     *
+     * @protected
+     * @type {boolean}
+     * @memberof EAMServiceLevelPickupGridViewBase
+     */
+    protected isExpandSearchForm: boolean = true;
+
+
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/pages/work-order/eamservice-level-pickup-grid-view/eamservice-level-pickup-grid-view.html b/app_AssetManagement/src/pages/work-order/eamservice-level-pickup-grid-view/eamservice-level-pickup-grid-view.html
new file mode 100644
index 0000000..70dc472
--- /dev/null
+++ b/app_AssetManagement/src/pages/work-order/eamservice-level-pickup-grid-view/eamservice-level-pickup-grid-view.html
@@ -0,0 +1,44 @@
+<studio-view-style2 viewName="eamservicelevelpickupgridview" viewTitle="鏈嶅姟绛夌骇閫夋嫨琛ㄦ牸瑙嗗浘" class='depickupgridview eamservice-level-pickup-grid-view'>
+    <template slot='title'>
+    <span class='caption-info'>{{viewCaption}}</span>
+    </template>
+    <template slot="searchForm">
+                <view_searchform 
+            :viewState="viewState"  
+            :viewparams="viewparams" 
+            :context="context" 
+            :showBusyIndicator="true"
+            v-show="isExpandSearchForm"
+            loaddraftAction="FilterGetDraft"
+            loadAction="FilterGet"
+        
+            name="searchform"  
+            ref='searchform' 
+            @save="searchform_save($event)"  
+            @search="searchform_search($event)"  
+            @load="searchform_load($event)"  
+            @closeview="closeView($event)">
+        </view_searchform>
+    </template>
+    <view_grid 
+        :viewState="viewState"  
+        :viewparams="viewparams" 
+        :context="context" 
+        :isSingleSelect="isGridSingleSelect"
+        :selectedData="selectedData"
+        :showBusyIndicator="true"
+        updateAction=""
+        removeAction="Remove"
+        loaddraftAction=""
+        loadAction=""
+        createAction=""
+        fetchAction="FetchDefault"
+        name="grid"  
+        ref='grid' 
+        @selectionchange="grid_selectionchange($event)"  
+        @beforeload="grid_beforeload($event)"  
+        @rowdblclick="grid_rowdblclick($event)"  
+        @load="grid_load($event)"  
+        @closeview="closeView($event)">
+    </view_grid>
+</studio-view-style2>
\ No newline at end of file
diff --git a/app_AssetManagement/src/pages/work-order/eamservice-level-pickup-grid-view/eamservice-level-pickup-grid-view.vue b/app_AssetManagement/src/pages/work-order/eamservice-level-pickup-grid-view/eamservice-level-pickup-grid-view.vue
new file mode 100644
index 0000000..15ad8a1
--- /dev/null
+++ b/app_AssetManagement/src/pages/work-order/eamservice-level-pickup-grid-view/eamservice-level-pickup-grid-view.vue
@@ -0,0 +1,24 @@
+<template src="./eamservice-level-pickup-grid-view.html"/>
+<script lang='tsx'>
+import { Component } from 'vue-property-decorator';
+import { VueLifeCycleProcessing } from '@/studio-core';
+import { EAMServiceLevelPickupGridViewBase } from './eamservice-level-pickup-grid-view-base';
+import view_grid from '@widgets/eamservice-level/main-grid/main-grid.vue';
+import view_searchform from '@widgets/eamservice-level/default-searchform/default-searchform.vue';
+
+/**
+ * 鏈嶅姟绛夌骇閫夋嫨琛ㄦ牸瑙嗗浘瑙嗗浘
+ *
+ * @export
+ * @class EAMServiceLevelPickupGridView
+ * @extends {EAMServiceLevelPickupGridViewBase}
+ */
+@Component({
+    components: {
+        view_grid, 
+        view_searchform, 
+    }
+})
+@VueLifeCycleProcessing()
+export default class EAMServiceLevelPickupGridView extends EAMServiceLevelPickupGridViewBase { }
+</script>
diff --git a/app_AssetManagement/src/pages/work-order/eamservice-level-pickup-view/eamservice-level-pickup-view-base.tsx b/app_AssetManagement/src/pages/work-order/eamservice-level-pickup-view/eamservice-level-pickup-view-base.tsx
new file mode 100644
index 0000000..fd02598
--- /dev/null
+++ b/app_AssetManagement/src/pages/work-order/eamservice-level-pickup-view/eamservice-level-pickup-view-base.tsx
@@ -0,0 +1,170 @@
+import { Subject } from 'rxjs';
+import { PickupViewBase } from '@/studio-core';
+import EAMServiceLevelService from '@/service/eamservice-level/eamservice-level-service';
+import EAMServiceLevelAuthService from '@/authservice/eamservice-level/eamservice-level-auth-service';
+import PickupViewEngine from '@engine/view/pickup-view-engine';
+import EAMServiceLevelUIService from '@/uiservice/eamservice-level/eamservice-level-ui-service';
+
+/**
+ * 鏈嶅姟绛夌骇鏁版嵁閫夋嫨瑙嗗浘瑙嗗浘鍩虹被
+ *
+ * @export
+ * @class EAMServiceLevelPickupViewBase
+ * @extends {PickupViewBase}
+ */
+export class EAMServiceLevelPickupViewBase extends PickupViewBase {
+    /**
+     * 瑙嗗浘瀵瑰簲搴旂敤瀹炰綋鍚嶇О
+     *
+     * @protected
+     * @type {string}
+     * @memberof EAMServiceLevelPickupViewBase
+     */
+    protected appDeName: string = 'eamservicelevel';
+
+    /**
+     * 搴旂敤瀹炰綋涓婚敭
+     *
+     * @protected
+     * @type {string}
+     * @memberof EAMServiceLevelPickupViewBase
+     */
+    protected appDeKey: string = 'eamservicelevelid';
+
+    /**
+     * 搴旂敤瀹炰綋涓讳俊鎭�
+     *
+     * @protected
+     * @type {string}
+     * @memberof EAMServiceLevelPickupViewBase
+     */
+    protected appDeMajor: string = 'eamservicelevelname';
+
+    /**
+     * 瀹炰綋鏈嶅姟瀵硅薄
+     *
+     * @type {EAMServiceLevelService}
+     * @memberof EAMServiceLevelPickupViewBase
+     */
+    protected appEntityService: EAMServiceLevelService = new EAMServiceLevelService;
+
+    /**
+     * 瀹炰綋鏉冮檺鏈嶅姟瀵硅薄
+     *
+     * @type EAMServiceLevelUIService
+     * @memberof EAMServiceLevelPickupViewBase
+     */
+    public appUIService: EAMServiceLevelUIService = new EAMServiceLevelUIService(this.$store);
+
+
+    /**
+     * 璁℃暟鍣ㄦ湇鍔″璞¢泦鍚�
+     *
+     * @protected
+     * @type {Array<*>}
+     * @memberof EAMServiceLevelPickupViewBase
+     */    
+    protected counterServiceArray: Array<any> = [];
+
+    /**
+     * 瑙嗗浘妯″瀷鏁版嵁
+     *
+     * @protected
+     * @type {*}
+     * @memberof EAMServiceLevelPickupViewBase
+     */
+    protected model: any = {
+        srfCaption: 'entities.eamservicelevel.views.pickupview.caption',
+        srfTitle: 'entities.eamservicelevel.views.pickupview.title',
+        srfSubTitle: 'entities.eamservicelevel.views.pickupview.subtitle',
+        dataInfo: ''
+    }
+
+    /**
+     * 瀹瑰櫒妯″瀷
+     *
+     * @protected
+     * @type {*}
+     * @memberof EAMServiceLevelPickupViewBase
+     */
+    protected containerModel: any = {
+        view_pickupviewpanel: { name: 'pickupviewpanel', type: 'PICKUPVIEWPANEL' },
+        view_okbtn: { name: 'okbtn', type: 'button', text: '纭畾', disabled: true },
+        view_cancelbtn: { name: 'cancelbtn', type: 'button', text: '鍙栨秷', disabled: false },
+        view_leftbtn: { name: 'leftbtn', type: 'button', text: '宸︾Щ', disabled: true },
+        view_rightbtn: { name: 'rightbtn', type: 'button', text: '鍙崇Щ', disabled: true },
+        view_allleftbtn: { name: 'allleftbtn', type: 'button', text: '鍏ㄩ儴宸︾Щ', disabled: true },
+        view_allrightbtn: { name: 'allrightbtn', type: 'button', text: '鍏ㄩ儴鍙崇Щ', disabled: true },
+    };
+
+
+	/**
+     * 瑙嗗浘鍞竴鏍囪瘑
+     *
+     * @protected
+     * @type {string}
+     * @memberof ViewBase
+     */
+	protected viewtag: string = '688cebc536955dbea3a807bd19d98fcc';
+
+
+    /**
+     * 瑙嗗浘寮曟搸
+     *
+     * @public
+     * @type {Engine}
+     * @memberof EAMServiceLevelPickupViewBase
+     */
+    public engine: PickupViewEngine = new PickupViewEngine();
+
+    /**
+     * 寮曟搸鍒濆鍖�
+     *
+     * @public
+     * @memberof EAMServiceLevelPickupViewBase
+     */
+    public engineInit(): void {
+        this.engine.init({
+            view: this,
+            pickupviewpanel: this.$refs.pickupviewpanel,
+            keyPSDEField: 'eamservicelevel',
+            majorPSDEField: 'eamservicelevelname',
+            isLoadDefault: true,
+        });
+    }
+
+    /**
+     * pickupviewpanel 閮ㄤ欢 selectionchange 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof EAMServiceLevelPickupViewBase
+     */
+    public pickupviewpanel_selectionchange($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('pickupviewpanel', 'selectionchange', $event);
+    }
+
+    /**
+     * pickupviewpanel 閮ㄤ欢 activated 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof EAMServiceLevelPickupViewBase
+     */
+    public pickupviewpanel_activated($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('pickupviewpanel', 'activated', $event);
+    }
+
+    /**
+     * pickupviewpanel 閮ㄤ欢 load 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof EAMServiceLevelPickupViewBase
+     */
+    public pickupviewpanel_load($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('pickupviewpanel', 'load', $event);
+    }
+
+
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/pages/work-order/eamservice-level-pickup-view/eamservice-level-pickup-view.html b/app_AssetManagement/src/pages/work-order/eamservice-level-pickup-view/eamservice-level-pickup-view.html
new file mode 100644
index 0000000..3edf469
--- /dev/null
+++ b/app_AssetManagement/src/pages/work-order/eamservice-level-pickup-view/eamservice-level-pickup-view.html
@@ -0,0 +1,25 @@
+<studio-view-style2 viewName="eamservicelevelpickupview" viewTitle="鏈嶅姟绛夌骇鏁版嵁閫夋嫨瑙嗗浘" class='depickupview eamservice-level-pickup-view'>
+    <div class="content-container pickup-view">
+                <view_pickupviewpanel 
+                    :viewState="viewState"  
+                    :viewparams="JSON.parse(JSON.stringify(viewparams))" 
+                    :context="JSON.parse(JSON.stringify(context))" 
+                    :isSingleSelect="isSingleSelect"
+                    :selectedData="selectedData"
+                    :isShowButton="isShowButton"
+                    name="pickupviewpanel"  
+                    ref='pickupviewpanel' 
+                    @selectionchange="pickupviewpanel_selectionchange($event)"  
+                    @activated="pickupviewpanel_activated($event)"  
+                    @load="pickupviewpanel_load($event)"  
+                    @closeview="closeView($event)">
+                </view_pickupviewpanel>
+        </div>
+        <template slot="footer">
+            <div v-if="isShowButton" :style="{ textAlign: 'right' }">
+                <i-button type="primary" :disabled="this.viewSelections.length > 0 ? false : true" @click="onClickOk.apply(_self, arguments)">{{this.containerModel.view_okbtn.text}}</i-button>
+                    &nbsp;&nbsp;
+                <i-button @click="onClickCancel.apply(_self, arguments)">{{this.containerModel.view_cancelbtn.text}}</i-button>
+            </div>
+        </template>
+</studio-view-style2>
\ No newline at end of file
diff --git a/app_AssetManagement/src/pages/work-order/eamservice-level-pickup-view/eamservice-level-pickup-view.vue b/app_AssetManagement/src/pages/work-order/eamservice-level-pickup-view/eamservice-level-pickup-view.vue
new file mode 100644
index 0000000..dc29601
--- /dev/null
+++ b/app_AssetManagement/src/pages/work-order/eamservice-level-pickup-view/eamservice-level-pickup-view.vue
@@ -0,0 +1,22 @@
+<template src="./eamservice-level-pickup-view.html"/>
+<script lang='tsx'>
+import { Component } from 'vue-property-decorator';
+import { VueLifeCycleProcessing } from '@/studio-core';
+import { EAMServiceLevelPickupViewBase } from './eamservice-level-pickup-view-base';
+import view_pickupviewpanel from '@widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue';
+
+/**
+ * 鏈嶅姟绛夌骇鏁版嵁閫夋嫨瑙嗗浘瑙嗗浘
+ *
+ * @export
+ * @class EAMServiceLevelPickupView
+ * @extends {EAMServiceLevelPickupViewBase}
+ */
+@Component({
+    components: {
+        view_pickupviewpanel, 
+    }
+})
+@VueLifeCycleProcessing()
+export default class EAMServiceLevelPickupView extends EAMServiceLevelPickupViewBase { }
+</script>
diff --git a/app_AssetManagement/src/pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view-base.tsx b/app_AssetManagement/src/pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view-base.tsx
new file mode 100644
index 0000000..54f1180
--- /dev/null
+++ b/app_AssetManagement/src/pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view-base.tsx
@@ -0,0 +1,221 @@
+import { Subject } from 'rxjs';
+import { PickupGridViewBase } from '@/studio-core';
+import EAMWorkOrderService from '@/service/eamwork-order/eamwork-order-service';
+import EAMWorkOrderAuthService from '@/authservice/eamwork-order/eamwork-order-auth-service';
+import PickupGridViewEngine from '@engine/view/pickup-grid-view-engine';
+import EAMWorkOrderUIService from '@/uiservice/eamwork-order/eamwork-order-ui-service';
+
+/**
+ * 宸ュ崟閫夋嫨琛ㄦ牸瑙嗗浘瑙嗗浘鍩虹被
+ *
+ * @export
+ * @class EAMWorkOrderPickupGridViewBase
+ * @extends {PickupGridViewBase}
+ */
+export class EAMWorkOrderPickupGridViewBase extends PickupGridViewBase {
+    /**
+     * 瑙嗗浘瀵瑰簲搴旂敤瀹炰綋鍚嶇О
+     *
+     * @protected
+     * @type {string}
+     * @memberof EAMWorkOrderPickupGridViewBase
+     */
+    protected appDeName: string = 'eamworkorder';
+
+    /**
+     * 搴旂敤瀹炰綋涓婚敭
+     *
+     * @protected
+     * @type {string}
+     * @memberof EAMWorkOrderPickupGridViewBase
+     */
+    protected appDeKey: string = 'workorderid';
+
+    /**
+     * 搴旂敤瀹炰綋涓讳俊鎭�
+     *
+     * @protected
+     * @type {string}
+     * @memberof EAMWorkOrderPickupGridViewBase
+     */
+    protected appDeMajor: string = 'workordername';
+
+    /**
+     * 瀹炰綋鏈嶅姟瀵硅薄
+     *
+     * @type {EAMWorkOrderService}
+     * @memberof EAMWorkOrderPickupGridViewBase
+     */
+    protected appEntityService: EAMWorkOrderService = new EAMWorkOrderService;
+
+    /**
+     * 瀹炰綋鏉冮檺鏈嶅姟瀵硅薄
+     *
+     * @type EAMWorkOrderUIService
+     * @memberof EAMWorkOrderPickupGridViewBase
+     */
+    public appUIService: EAMWorkOrderUIService = new EAMWorkOrderUIService(this.$store);
+
+
+    /**
+     * 璁℃暟鍣ㄦ湇鍔″璞¢泦鍚�
+     *
+     * @protected
+     * @type {Array<*>}
+     * @memberof EAMWorkOrderPickupGridViewBase
+     */    
+    protected counterServiceArray: Array<any> = [];
+
+    /**
+     * 瑙嗗浘妯″瀷鏁版嵁
+     *
+     * @protected
+     * @type {*}
+     * @memberof EAMWorkOrderPickupGridViewBase
+     */
+    protected model: any = {
+        srfCaption: 'entities.eamworkorder.views.pickupgridview.caption',
+        srfTitle: 'entities.eamworkorder.views.pickupgridview.title',
+        srfSubTitle: 'entities.eamworkorder.views.pickupgridview.subtitle',
+        dataInfo: ''
+    }
+
+    /**
+     * 瀹瑰櫒妯″瀷
+     *
+     * @protected
+     * @type {*}
+     * @memberof EAMWorkOrderPickupGridViewBase
+     */
+    protected containerModel: any = {
+        view_grid: { name: 'grid', type: 'GRID' },
+        view_searchform: { name: 'searchform', type: 'SEARCHFORM' },
+    };
+
+
+	/**
+     * 瑙嗗浘鍞竴鏍囪瘑
+     *
+     * @protected
+     * @type {string}
+     * @memberof ViewBase
+     */
+	protected viewtag: string = '99fce329ae1f308142b5b735a41769eb';
+
+
+    /**
+     * 瑙嗗浘寮曟搸
+     *
+     * @public
+     * @type {Engine}
+     * @memberof EAMWorkOrderPickupGridViewBase
+     */
+    public engine: PickupGridViewEngine = new PickupGridViewEngine();
+
+    /**
+     * 寮曟搸鍒濆鍖�
+     *
+     * @public
+     * @memberof EAMWorkOrderPickupGridViewBase
+     */
+    public engineInit(): void {
+        this.engine.init({
+            view: this,
+            grid: this.$refs.grid,
+            searchform: this.$refs.searchform,
+            keyPSDEField: 'eamworkorder',
+            majorPSDEField: 'workordername',
+            isLoadDefault: true,
+        });
+    }
+
+    /**
+     * grid 閮ㄤ欢 selectionchange 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof EAMWorkOrderPickupGridViewBase
+     */
+    public grid_selectionchange($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('grid', 'selectionchange', $event);
+    }
+
+    /**
+     * grid 閮ㄤ欢 beforeload 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof EAMWorkOrderPickupGridViewBase
+     */
+    public grid_beforeload($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('grid', 'beforeload', $event);
+    }
+
+    /**
+     * grid 閮ㄤ欢 rowdblclick 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof EAMWorkOrderPickupGridViewBase
+     */
+    public grid_rowdblclick($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('grid', 'rowdblclick', $event);
+    }
+
+    /**
+     * grid 閮ㄤ欢 load 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof EAMWorkOrderPickupGridViewBase
+     */
+    public grid_load($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('grid', 'load', $event);
+    }
+
+    /**
+     * searchform 閮ㄤ欢 save 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof EAMWorkOrderPickupGridViewBase
+     */
+    public searchform_save($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('searchform', 'save', $event);
+    }
+
+    /**
+     * searchform 閮ㄤ欢 search 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof EAMWorkOrderPickupGridViewBase
+     */
+    public searchform_search($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('searchform', 'search', $event);
+    }
+
+    /**
+     * searchform 閮ㄤ欢 load 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof EAMWorkOrderPickupGridViewBase
+     */
+    public searchform_load($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('searchform', 'load', $event);
+    }
+
+
+
+    /**
+     * 鏄惁灞曞紑鎼滅储琛ㄥ崟
+     *
+     * @protected
+     * @type {boolean}
+     * @memberof EAMWorkOrderPickupGridViewBase
+     */
+    protected isExpandSearchForm: boolean = true;
+
+
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view.html b/app_AssetManagement/src/pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view.html
new file mode 100644
index 0000000..f99b4bf
--- /dev/null
+++ b/app_AssetManagement/src/pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view.html
@@ -0,0 +1,44 @@
+<studio-view-style2 viewName="eamworkorderpickupgridview" viewTitle="宸ュ崟閫夋嫨琛ㄦ牸瑙嗗浘" class='depickupgridview eamwork-order-pickup-grid-view'>
+    <template slot='title'>
+    <span class='caption-info'>{{viewCaption}}</span>
+    </template>
+    <template slot="searchForm">
+                <view_searchform 
+            :viewState="viewState"  
+            :viewparams="viewparams" 
+            :context="context" 
+            :showBusyIndicator="true"
+            v-show="isExpandSearchForm"
+            loaddraftAction="FilterGetDraft"
+            loadAction="FilterGet"
+        
+            name="searchform"  
+            ref='searchform' 
+            @save="searchform_save($event)"  
+            @search="searchform_search($event)"  
+            @load="searchform_load($event)"  
+            @closeview="closeView($event)">
+        </view_searchform>
+    </template>
+    <view_grid 
+        :viewState="viewState"  
+        :viewparams="viewparams" 
+        :context="context" 
+        :isSingleSelect="isGridSingleSelect"
+        :selectedData="selectedData"
+        :showBusyIndicator="true"
+        updateAction=""
+        removeAction="Remove"
+        loaddraftAction=""
+        loadAction=""
+        createAction=""
+        fetchAction="FetchDefault"
+        name="grid"  
+        ref='grid' 
+        @selectionchange="grid_selectionchange($event)"  
+        @beforeload="grid_beforeload($event)"  
+        @rowdblclick="grid_rowdblclick($event)"  
+        @load="grid_load($event)"  
+        @closeview="closeView($event)">
+    </view_grid>
+</studio-view-style2>
\ No newline at end of file
diff --git a/app_AssetManagement/src/pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view.vue b/app_AssetManagement/src/pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view.vue
new file mode 100644
index 0000000..1e4eaf6
--- /dev/null
+++ b/app_AssetManagement/src/pages/work-order/eamwork-order-pickup-grid-view/eamwork-order-pickup-grid-view.vue
@@ -0,0 +1,24 @@
+<template src="./eamwork-order-pickup-grid-view.html"/>
+<script lang='tsx'>
+import { Component } from 'vue-property-decorator';
+import { VueLifeCycleProcessing } from '@/studio-core';
+import { EAMWorkOrderPickupGridViewBase } from './eamwork-order-pickup-grid-view-base';
+import view_grid from '@widgets/eamwork-order/main-grid/main-grid.vue';
+import view_searchform from '@widgets/eamwork-order/default-searchform/default-searchform.vue';
+
+/**
+ * 宸ュ崟閫夋嫨琛ㄦ牸瑙嗗浘瑙嗗浘
+ *
+ * @export
+ * @class EAMWorkOrderPickupGridView
+ * @extends {EAMWorkOrderPickupGridViewBase}
+ */
+@Component({
+    components: {
+        view_grid, 
+        view_searchform, 
+    }
+})
+@VueLifeCycleProcessing()
+export default class EAMWorkOrderPickupGridView extends EAMWorkOrderPickupGridViewBase { }
+</script>
diff --git a/app_AssetManagement/src/pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view-base.tsx b/app_AssetManagement/src/pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view-base.tsx
new file mode 100644
index 0000000..71ebbe1
--- /dev/null
+++ b/app_AssetManagement/src/pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view-base.tsx
@@ -0,0 +1,170 @@
+import { Subject } from 'rxjs';
+import { PickupViewBase } from '@/studio-core';
+import EAMWorkOrderService from '@/service/eamwork-order/eamwork-order-service';
+import EAMWorkOrderAuthService from '@/authservice/eamwork-order/eamwork-order-auth-service';
+import PickupViewEngine from '@engine/view/pickup-view-engine';
+import EAMWorkOrderUIService from '@/uiservice/eamwork-order/eamwork-order-ui-service';
+
+/**
+ * 宸ュ崟鏁版嵁閫夋嫨瑙嗗浘瑙嗗浘鍩虹被
+ *
+ * @export
+ * @class EAMWorkOrderPickupViewBase
+ * @extends {PickupViewBase}
+ */
+export class EAMWorkOrderPickupViewBase extends PickupViewBase {
+    /**
+     * 瑙嗗浘瀵瑰簲搴旂敤瀹炰綋鍚嶇О
+     *
+     * @protected
+     * @type {string}
+     * @memberof EAMWorkOrderPickupViewBase
+     */
+    protected appDeName: string = 'eamworkorder';
+
+    /**
+     * 搴旂敤瀹炰綋涓婚敭
+     *
+     * @protected
+     * @type {string}
+     * @memberof EAMWorkOrderPickupViewBase
+     */
+    protected appDeKey: string = 'workorderid';
+
+    /**
+     * 搴旂敤瀹炰綋涓讳俊鎭�
+     *
+     * @protected
+     * @type {string}
+     * @memberof EAMWorkOrderPickupViewBase
+     */
+    protected appDeMajor: string = 'workordername';
+
+    /**
+     * 瀹炰綋鏈嶅姟瀵硅薄
+     *
+     * @type {EAMWorkOrderService}
+     * @memberof EAMWorkOrderPickupViewBase
+     */
+    protected appEntityService: EAMWorkOrderService = new EAMWorkOrderService;
+
+    /**
+     * 瀹炰綋鏉冮檺鏈嶅姟瀵硅薄
+     *
+     * @type EAMWorkOrderUIService
+     * @memberof EAMWorkOrderPickupViewBase
+     */
+    public appUIService: EAMWorkOrderUIService = new EAMWorkOrderUIService(this.$store);
+
+
+    /**
+     * 璁℃暟鍣ㄦ湇鍔″璞¢泦鍚�
+     *
+     * @protected
+     * @type {Array<*>}
+     * @memberof EAMWorkOrderPickupViewBase
+     */    
+    protected counterServiceArray: Array<any> = [];
+
+    /**
+     * 瑙嗗浘妯″瀷鏁版嵁
+     *
+     * @protected
+     * @type {*}
+     * @memberof EAMWorkOrderPickupViewBase
+     */
+    protected model: any = {
+        srfCaption: 'entities.eamworkorder.views.pickupview.caption',
+        srfTitle: 'entities.eamworkorder.views.pickupview.title',
+        srfSubTitle: 'entities.eamworkorder.views.pickupview.subtitle',
+        dataInfo: ''
+    }
+
+    /**
+     * 瀹瑰櫒妯″瀷
+     *
+     * @protected
+     * @type {*}
+     * @memberof EAMWorkOrderPickupViewBase
+     */
+    protected containerModel: any = {
+        view_pickupviewpanel: { name: 'pickupviewpanel', type: 'PICKUPVIEWPANEL' },
+        view_okbtn: { name: 'okbtn', type: 'button', text: '纭畾', disabled: true },
+        view_cancelbtn: { name: 'cancelbtn', type: 'button', text: '鍙栨秷', disabled: false },
+        view_leftbtn: { name: 'leftbtn', type: 'button', text: '宸︾Щ', disabled: true },
+        view_rightbtn: { name: 'rightbtn', type: 'button', text: '鍙崇Щ', disabled: true },
+        view_allleftbtn: { name: 'allleftbtn', type: 'button', text: '鍏ㄩ儴宸︾Щ', disabled: true },
+        view_allrightbtn: { name: 'allrightbtn', type: 'button', text: '鍏ㄩ儴鍙崇Щ', disabled: true },
+    };
+
+
+	/**
+     * 瑙嗗浘鍞竴鏍囪瘑
+     *
+     * @protected
+     * @type {string}
+     * @memberof ViewBase
+     */
+	protected viewtag: string = 'e2c689498cfbde8c97c67a790b1831b8';
+
+
+    /**
+     * 瑙嗗浘寮曟搸
+     *
+     * @public
+     * @type {Engine}
+     * @memberof EAMWorkOrderPickupViewBase
+     */
+    public engine: PickupViewEngine = new PickupViewEngine();
+
+    /**
+     * 寮曟搸鍒濆鍖�
+     *
+     * @public
+     * @memberof EAMWorkOrderPickupViewBase
+     */
+    public engineInit(): void {
+        this.engine.init({
+            view: this,
+            pickupviewpanel: this.$refs.pickupviewpanel,
+            keyPSDEField: 'eamworkorder',
+            majorPSDEField: 'workordername',
+            isLoadDefault: true,
+        });
+    }
+
+    /**
+     * pickupviewpanel 閮ㄤ欢 selectionchange 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof EAMWorkOrderPickupViewBase
+     */
+    public pickupviewpanel_selectionchange($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('pickupviewpanel', 'selectionchange', $event);
+    }
+
+    /**
+     * pickupviewpanel 閮ㄤ欢 activated 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof EAMWorkOrderPickupViewBase
+     */
+    public pickupviewpanel_activated($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('pickupviewpanel', 'activated', $event);
+    }
+
+    /**
+     * pickupviewpanel 閮ㄤ欢 load 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof EAMWorkOrderPickupViewBase
+     */
+    public pickupviewpanel_load($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('pickupviewpanel', 'load', $event);
+    }
+
+
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view.html b/app_AssetManagement/src/pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view.html
new file mode 100644
index 0000000..a3d13c0
--- /dev/null
+++ b/app_AssetManagement/src/pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view.html
@@ -0,0 +1,25 @@
+<studio-view-style2 viewName="eamworkorderpickupview" viewTitle="宸ュ崟鏁版嵁閫夋嫨瑙嗗浘" class='depickupview eamwork-order-pickup-view'>
+    <div class="content-container pickup-view">
+                <view_pickupviewpanel 
+                    :viewState="viewState"  
+                    :viewparams="JSON.parse(JSON.stringify(viewparams))" 
+                    :context="JSON.parse(JSON.stringify(context))" 
+                    :isSingleSelect="isSingleSelect"
+                    :selectedData="selectedData"
+                    :isShowButton="isShowButton"
+                    name="pickupviewpanel"  
+                    ref='pickupviewpanel' 
+                    @selectionchange="pickupviewpanel_selectionchange($event)"  
+                    @activated="pickupviewpanel_activated($event)"  
+                    @load="pickupviewpanel_load($event)"  
+                    @closeview="closeView($event)">
+                </view_pickupviewpanel>
+        </div>
+        <template slot="footer">
+            <div v-if="isShowButton" :style="{ textAlign: 'right' }">
+                <i-button type="primary" :disabled="this.viewSelections.length > 0 ? false : true" @click="onClickOk.apply(_self, arguments)">{{this.containerModel.view_okbtn.text}}</i-button>
+                    &nbsp;&nbsp;
+                <i-button @click="onClickCancel.apply(_self, arguments)">{{this.containerModel.view_cancelbtn.text}}</i-button>
+            </div>
+        </template>
+</studio-view-style2>
\ No newline at end of file
diff --git a/app_AssetManagement/src/pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view.vue b/app_AssetManagement/src/pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view.vue
new file mode 100644
index 0000000..9986bf4
--- /dev/null
+++ b/app_AssetManagement/src/pages/work-order/eamwork-order-pickup-view/eamwork-order-pickup-view.vue
@@ -0,0 +1,22 @@
+<template src="./eamwork-order-pickup-view.html"/>
+<script lang='tsx'>
+import { Component } from 'vue-property-decorator';
+import { VueLifeCycleProcessing } from '@/studio-core';
+import { EAMWorkOrderPickupViewBase } from './eamwork-order-pickup-view-base';
+import view_pickupviewpanel from '@widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue';
+
+/**
+ * 宸ュ崟鏁版嵁閫夋嫨瑙嗗浘瑙嗗浘
+ *
+ * @export
+ * @class EAMWorkOrderPickupView
+ * @extends {EAMWorkOrderPickupViewBase}
+ */
+@Component({
+    components: {
+        view_pickupviewpanel, 
+    }
+})
+@VueLifeCycleProcessing()
+export default class EAMWorkOrderPickupView extends EAMWorkOrderPickupViewBase { }
+</script>
diff --git a/app_AssetManagement/src/pages/work-order/woorigin-pickup-grid-view/woorigin-pickup-grid-view-base.tsx b/app_AssetManagement/src/pages/work-order/woorigin-pickup-grid-view/woorigin-pickup-grid-view-base.tsx
new file mode 100644
index 0000000..45c749d
--- /dev/null
+++ b/app_AssetManagement/src/pages/work-order/woorigin-pickup-grid-view/woorigin-pickup-grid-view-base.tsx
@@ -0,0 +1,221 @@
+import { Subject } from 'rxjs';
+import { PickupGridViewBase } from '@/studio-core';
+import WOOriginService from '@/service/woorigin/woorigin-service';
+import WOOriginAuthService from '@/authservice/woorigin/woorigin-auth-service';
+import PickupGridViewEngine from '@engine/view/pickup-grid-view-engine';
+import WOOriginUIService from '@/uiservice/woorigin/woorigin-ui-service';
+
+/**
+ * 宸ュ崟鏉ユ簮閫夋嫨琛ㄦ牸瑙嗗浘瑙嗗浘鍩虹被
+ *
+ * @export
+ * @class WOOriginPickupGridViewBase
+ * @extends {PickupGridViewBase}
+ */
+export class WOOriginPickupGridViewBase extends PickupGridViewBase {
+    /**
+     * 瑙嗗浘瀵瑰簲搴旂敤瀹炰綋鍚嶇О
+     *
+     * @protected
+     * @type {string}
+     * @memberof WOOriginPickupGridViewBase
+     */
+    protected appDeName: string = 'woorigin';
+
+    /**
+     * 搴旂敤瀹炰綋涓婚敭
+     *
+     * @protected
+     * @type {string}
+     * @memberof WOOriginPickupGridViewBase
+     */
+    protected appDeKey: string = 'eamwooriginid';
+
+    /**
+     * 搴旂敤瀹炰綋涓讳俊鎭�
+     *
+     * @protected
+     * @type {string}
+     * @memberof WOOriginPickupGridViewBase
+     */
+    protected appDeMajor: string = 'eamwooriginname';
+
+    /**
+     * 瀹炰綋鏈嶅姟瀵硅薄
+     *
+     * @type {WOOriginService}
+     * @memberof WOOriginPickupGridViewBase
+     */
+    protected appEntityService: WOOriginService = new WOOriginService;
+
+    /**
+     * 瀹炰綋鏉冮檺鏈嶅姟瀵硅薄
+     *
+     * @type WOOriginUIService
+     * @memberof WOOriginPickupGridViewBase
+     */
+    public appUIService: WOOriginUIService = new WOOriginUIService(this.$store);
+
+
+    /**
+     * 璁℃暟鍣ㄦ湇鍔″璞¢泦鍚�
+     *
+     * @protected
+     * @type {Array<*>}
+     * @memberof WOOriginPickupGridViewBase
+     */    
+    protected counterServiceArray: Array<any> = [];
+
+    /**
+     * 瑙嗗浘妯″瀷鏁版嵁
+     *
+     * @protected
+     * @type {*}
+     * @memberof WOOriginPickupGridViewBase
+     */
+    protected model: any = {
+        srfCaption: 'entities.woorigin.views.pickupgridview.caption',
+        srfTitle: 'entities.woorigin.views.pickupgridview.title',
+        srfSubTitle: 'entities.woorigin.views.pickupgridview.subtitle',
+        dataInfo: ''
+    }
+
+    /**
+     * 瀹瑰櫒妯″瀷
+     *
+     * @protected
+     * @type {*}
+     * @memberof WOOriginPickupGridViewBase
+     */
+    protected containerModel: any = {
+        view_grid: { name: 'grid', type: 'GRID' },
+        view_searchform: { name: 'searchform', type: 'SEARCHFORM' },
+    };
+
+
+	/**
+     * 瑙嗗浘鍞竴鏍囪瘑
+     *
+     * @protected
+     * @type {string}
+     * @memberof ViewBase
+     */
+	protected viewtag: string = '34cf27e1eddc36c197176c5632b97179';
+
+
+    /**
+     * 瑙嗗浘寮曟搸
+     *
+     * @public
+     * @type {Engine}
+     * @memberof WOOriginPickupGridViewBase
+     */
+    public engine: PickupGridViewEngine = new PickupGridViewEngine();
+
+    /**
+     * 寮曟搸鍒濆鍖�
+     *
+     * @public
+     * @memberof WOOriginPickupGridViewBase
+     */
+    public engineInit(): void {
+        this.engine.init({
+            view: this,
+            grid: this.$refs.grid,
+            searchform: this.$refs.searchform,
+            keyPSDEField: 'woorigin',
+            majorPSDEField: 'wooriginname',
+            isLoadDefault: true,
+        });
+    }
+
+    /**
+     * grid 閮ㄤ欢 selectionchange 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof WOOriginPickupGridViewBase
+     */
+    public grid_selectionchange($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('grid', 'selectionchange', $event);
+    }
+
+    /**
+     * grid 閮ㄤ欢 beforeload 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof WOOriginPickupGridViewBase
+     */
+    public grid_beforeload($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('grid', 'beforeload', $event);
+    }
+
+    /**
+     * grid 閮ㄤ欢 rowdblclick 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof WOOriginPickupGridViewBase
+     */
+    public grid_rowdblclick($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('grid', 'rowdblclick', $event);
+    }
+
+    /**
+     * grid 閮ㄤ欢 load 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof WOOriginPickupGridViewBase
+     */
+    public grid_load($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('grid', 'load', $event);
+    }
+
+    /**
+     * searchform 閮ㄤ欢 save 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof WOOriginPickupGridViewBase
+     */
+    public searchform_save($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('searchform', 'save', $event);
+    }
+
+    /**
+     * searchform 閮ㄤ欢 search 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof WOOriginPickupGridViewBase
+     */
+    public searchform_search($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('searchform', 'search', $event);
+    }
+
+    /**
+     * searchform 閮ㄤ欢 load 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof WOOriginPickupGridViewBase
+     */
+    public searchform_load($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('searchform', 'load', $event);
+    }
+
+
+
+    /**
+     * 鏄惁灞曞紑鎼滅储琛ㄥ崟
+     *
+     * @protected
+     * @type {boolean}
+     * @memberof WOOriginPickupGridViewBase
+     */
+    protected isExpandSearchForm: boolean = true;
+
+
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/pages/work-order/woorigin-pickup-grid-view/woorigin-pickup-grid-view.html b/app_AssetManagement/src/pages/work-order/woorigin-pickup-grid-view/woorigin-pickup-grid-view.html
new file mode 100644
index 0000000..bbc4c05
--- /dev/null
+++ b/app_AssetManagement/src/pages/work-order/woorigin-pickup-grid-view/woorigin-pickup-grid-view.html
@@ -0,0 +1,44 @@
+<studio-view-style2 viewName="wooriginpickupgridview" viewTitle="宸ュ崟鏉ユ簮閫夋嫨琛ㄦ牸瑙嗗浘" class='depickupgridview woorigin-pickup-grid-view'>
+    <template slot='title'>
+    <span class='caption-info'>{{viewCaption}}</span>
+    </template>
+    <template slot="searchForm">
+                <view_searchform 
+            :viewState="viewState"  
+            :viewparams="viewparams" 
+            :context="context" 
+            :showBusyIndicator="true"
+            v-show="isExpandSearchForm"
+            loaddraftAction="FilterGetDraft"
+            loadAction="FilterGet"
+        
+            name="searchform"  
+            ref='searchform' 
+            @save="searchform_save($event)"  
+            @search="searchform_search($event)"  
+            @load="searchform_load($event)"  
+            @closeview="closeView($event)">
+        </view_searchform>
+    </template>
+    <view_grid 
+        :viewState="viewState"  
+        :viewparams="viewparams" 
+        :context="context" 
+        :isSingleSelect="isGridSingleSelect"
+        :selectedData="selectedData"
+        :showBusyIndicator="true"
+        updateAction=""
+        removeAction="Remove"
+        loaddraftAction=""
+        loadAction=""
+        createAction=""
+        fetchAction="FetchDefault"
+        name="grid"  
+        ref='grid' 
+        @selectionchange="grid_selectionchange($event)"  
+        @beforeload="grid_beforeload($event)"  
+        @rowdblclick="grid_rowdblclick($event)"  
+        @load="grid_load($event)"  
+        @closeview="closeView($event)">
+    </view_grid>
+</studio-view-style2>
\ No newline at end of file
diff --git a/app_AssetManagement/src/pages/work-order/woorigin-pickup-grid-view/woorigin-pickup-grid-view.vue b/app_AssetManagement/src/pages/work-order/woorigin-pickup-grid-view/woorigin-pickup-grid-view.vue
new file mode 100644
index 0000000..8b7d4a4
--- /dev/null
+++ b/app_AssetManagement/src/pages/work-order/woorigin-pickup-grid-view/woorigin-pickup-grid-view.vue
@@ -0,0 +1,24 @@
+<template src="./woorigin-pickup-grid-view.html"/>
+<script lang='tsx'>
+import { Component } from 'vue-property-decorator';
+import { VueLifeCycleProcessing } from '@/studio-core';
+import { WOOriginPickupGridViewBase } from './woorigin-pickup-grid-view-base';
+import view_grid from '@widgets/woorigin/main-grid/main-grid.vue';
+import view_searchform from '@widgets/woorigin/default-searchform/default-searchform.vue';
+
+/**
+ * 宸ュ崟鏉ユ簮閫夋嫨琛ㄦ牸瑙嗗浘瑙嗗浘
+ *
+ * @export
+ * @class WOOriginPickupGridView
+ * @extends {WOOriginPickupGridViewBase}
+ */
+@Component({
+    components: {
+        view_grid, 
+        view_searchform, 
+    }
+})
+@VueLifeCycleProcessing()
+export default class WOOriginPickupGridView extends WOOriginPickupGridViewBase { }
+</script>
diff --git a/app_AssetManagement/src/pages/work-order/woorigin-pickup-view/woorigin-pickup-view-base.tsx b/app_AssetManagement/src/pages/work-order/woorigin-pickup-view/woorigin-pickup-view-base.tsx
new file mode 100644
index 0000000..d0fbf92
--- /dev/null
+++ b/app_AssetManagement/src/pages/work-order/woorigin-pickup-view/woorigin-pickup-view-base.tsx
@@ -0,0 +1,170 @@
+import { Subject } from 'rxjs';
+import { PickupViewBase } from '@/studio-core';
+import WOOriginService from '@/service/woorigin/woorigin-service';
+import WOOriginAuthService from '@/authservice/woorigin/woorigin-auth-service';
+import PickupViewEngine from '@engine/view/pickup-view-engine';
+import WOOriginUIService from '@/uiservice/woorigin/woorigin-ui-service';
+
+/**
+ * 宸ュ崟鏉ユ簮鏁版嵁閫夋嫨瑙嗗浘瑙嗗浘鍩虹被
+ *
+ * @export
+ * @class WOOriginPickupViewBase
+ * @extends {PickupViewBase}
+ */
+export class WOOriginPickupViewBase extends PickupViewBase {
+    /**
+     * 瑙嗗浘瀵瑰簲搴旂敤瀹炰綋鍚嶇О
+     *
+     * @protected
+     * @type {string}
+     * @memberof WOOriginPickupViewBase
+     */
+    protected appDeName: string = 'woorigin';
+
+    /**
+     * 搴旂敤瀹炰綋涓婚敭
+     *
+     * @protected
+     * @type {string}
+     * @memberof WOOriginPickupViewBase
+     */
+    protected appDeKey: string = 'eamwooriginid';
+
+    /**
+     * 搴旂敤瀹炰綋涓讳俊鎭�
+     *
+     * @protected
+     * @type {string}
+     * @memberof WOOriginPickupViewBase
+     */
+    protected appDeMajor: string = 'eamwooriginname';
+
+    /**
+     * 瀹炰綋鏈嶅姟瀵硅薄
+     *
+     * @type {WOOriginService}
+     * @memberof WOOriginPickupViewBase
+     */
+    protected appEntityService: WOOriginService = new WOOriginService;
+
+    /**
+     * 瀹炰綋鏉冮檺鏈嶅姟瀵硅薄
+     *
+     * @type WOOriginUIService
+     * @memberof WOOriginPickupViewBase
+     */
+    public appUIService: WOOriginUIService = new WOOriginUIService(this.$store);
+
+
+    /**
+     * 璁℃暟鍣ㄦ湇鍔″璞¢泦鍚�
+     *
+     * @protected
+     * @type {Array<*>}
+     * @memberof WOOriginPickupViewBase
+     */    
+    protected counterServiceArray: Array<any> = [];
+
+    /**
+     * 瑙嗗浘妯″瀷鏁版嵁
+     *
+     * @protected
+     * @type {*}
+     * @memberof WOOriginPickupViewBase
+     */
+    protected model: any = {
+        srfCaption: 'entities.woorigin.views.pickupview.caption',
+        srfTitle: 'entities.woorigin.views.pickupview.title',
+        srfSubTitle: 'entities.woorigin.views.pickupview.subtitle',
+        dataInfo: ''
+    }
+
+    /**
+     * 瀹瑰櫒妯″瀷
+     *
+     * @protected
+     * @type {*}
+     * @memberof WOOriginPickupViewBase
+     */
+    protected containerModel: any = {
+        view_pickupviewpanel: { name: 'pickupviewpanel', type: 'PICKUPVIEWPANEL' },
+        view_okbtn: { name: 'okbtn', type: 'button', text: '纭畾', disabled: true },
+        view_cancelbtn: { name: 'cancelbtn', type: 'button', text: '鍙栨秷', disabled: false },
+        view_leftbtn: { name: 'leftbtn', type: 'button', text: '宸︾Щ', disabled: true },
+        view_rightbtn: { name: 'rightbtn', type: 'button', text: '鍙崇Щ', disabled: true },
+        view_allleftbtn: { name: 'allleftbtn', type: 'button', text: '鍏ㄩ儴宸︾Щ', disabled: true },
+        view_allrightbtn: { name: 'allrightbtn', type: 'button', text: '鍏ㄩ儴鍙崇Щ', disabled: true },
+    };
+
+
+	/**
+     * 瑙嗗浘鍞竴鏍囪瘑
+     *
+     * @protected
+     * @type {string}
+     * @memberof ViewBase
+     */
+	protected viewtag: string = '06ee1c500b1cb4aa576fb3b62b4ddb35';
+
+
+    /**
+     * 瑙嗗浘寮曟搸
+     *
+     * @public
+     * @type {Engine}
+     * @memberof WOOriginPickupViewBase
+     */
+    public engine: PickupViewEngine = new PickupViewEngine();
+
+    /**
+     * 寮曟搸鍒濆鍖�
+     *
+     * @public
+     * @memberof WOOriginPickupViewBase
+     */
+    public engineInit(): void {
+        this.engine.init({
+            view: this,
+            pickupviewpanel: this.$refs.pickupviewpanel,
+            keyPSDEField: 'woorigin',
+            majorPSDEField: 'wooriginname',
+            isLoadDefault: true,
+        });
+    }
+
+    /**
+     * pickupviewpanel 閮ㄤ欢 selectionchange 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof WOOriginPickupViewBase
+     */
+    public pickupviewpanel_selectionchange($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('pickupviewpanel', 'selectionchange', $event);
+    }
+
+    /**
+     * pickupviewpanel 閮ㄤ欢 activated 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof WOOriginPickupViewBase
+     */
+    public pickupviewpanel_activated($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('pickupviewpanel', 'activated', $event);
+    }
+
+    /**
+     * pickupviewpanel 閮ㄤ欢 load 浜嬩欢
+     *
+     * @param {*} [args={}]
+     * @param {*} $event
+     * @memberof WOOriginPickupViewBase
+     */
+    public pickupviewpanel_load($event: any, $event2?: any): void {
+        this.engine.onCtrlEvent('pickupviewpanel', 'load', $event);
+    }
+
+
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/pages/work-order/woorigin-pickup-view/woorigin-pickup-view.html b/app_AssetManagement/src/pages/work-order/woorigin-pickup-view/woorigin-pickup-view.html
new file mode 100644
index 0000000..e73d808
--- /dev/null
+++ b/app_AssetManagement/src/pages/work-order/woorigin-pickup-view/woorigin-pickup-view.html
@@ -0,0 +1,25 @@
+<studio-view-style2 viewName="wooriginpickupview" viewTitle="宸ュ崟鏉ユ簮鏁版嵁閫夋嫨瑙嗗浘" class='depickupview woorigin-pickup-view'>
+    <div class="content-container pickup-view">
+                <view_pickupviewpanel 
+                    :viewState="viewState"  
+                    :viewparams="JSON.parse(JSON.stringify(viewparams))" 
+                    :context="JSON.parse(JSON.stringify(context))" 
+                    :isSingleSelect="isSingleSelect"
+                    :selectedData="selectedData"
+                    :isShowButton="isShowButton"
+                    name="pickupviewpanel"  
+                    ref='pickupviewpanel' 
+                    @selectionchange="pickupviewpanel_selectionchange($event)"  
+                    @activated="pickupviewpanel_activated($event)"  
+                    @load="pickupviewpanel_load($event)"  
+                    @closeview="closeView($event)">
+                </view_pickupviewpanel>
+        </div>
+        <template slot="footer">
+            <div v-if="isShowButton" :style="{ textAlign: 'right' }">
+                <i-button type="primary" :disabled="this.viewSelections.length > 0 ? false : true" @click="onClickOk.apply(_self, arguments)">{{this.containerModel.view_okbtn.text}}</i-button>
+                    &nbsp;&nbsp;
+                <i-button @click="onClickCancel.apply(_self, arguments)">{{this.containerModel.view_cancelbtn.text}}</i-button>
+            </div>
+        </template>
+</studio-view-style2>
\ No newline at end of file
diff --git a/app_AssetManagement/src/pages/work-order/woorigin-pickup-view/woorigin-pickup-view.vue b/app_AssetManagement/src/pages/work-order/woorigin-pickup-view/woorigin-pickup-view.vue
new file mode 100644
index 0000000..ef9cbe7
--- /dev/null
+++ b/app_AssetManagement/src/pages/work-order/woorigin-pickup-view/woorigin-pickup-view.vue
@@ -0,0 +1,22 @@
+<template src="./woorigin-pickup-view.html"/>
+<script lang='tsx'>
+import { Component } from 'vue-property-decorator';
+import { VueLifeCycleProcessing } from '@/studio-core';
+import { WOOriginPickupViewBase } from './woorigin-pickup-view-base';
+import view_pickupviewpanel from '@widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue';
+
+/**
+ * 宸ュ崟鏉ユ簮鏁版嵁閫夋嫨瑙嗗浘瑙嗗浘
+ *
+ * @export
+ * @class WOOriginPickupView
+ * @extends {WOOriginPickupViewBase}
+ */
+@Component({
+    components: {
+        view_pickupviewpanel, 
+    }
+})
+@VueLifeCycleProcessing()
+export default class WOOriginPickupView extends WOOriginPickupViewBase { }
+</script>
diff --git a/app_AssetManagement/src/store/modules/view-action/state.ts b/app_AssetManagement/src/store/modules/view-action/state.ts
index 223cf14..d8602ad 100644
--- a/app_AssetManagement/src/store/modules/view-action/state.ts
+++ b/app_AssetManagement/src/store/modules/view-action/state.ts
@@ -23,6 +23,16 @@ export const viewstate: any = {
                 '7d7cbe6f35cdf729007b90156298a515',
             ],
         },
+        {
+            viewtag: '06ee1c500b1cb4aa576fb3b62b4ddb35',
+            viewmodule: 'WorkOrder',
+            viewname: 'WOOriginPickupView',
+            viewaction: '',
+            viewdatachange: false,
+            refviews: [
+                '34cf27e1eddc36c197176c5632b97179',
+            ],
+        },
         {
             viewtag: '075e8b706da4cd2328cf2239fd6f4d06',
             viewmodule: 'Asset',
@@ -222,6 +232,15 @@ export const viewstate: any = {
                 '687ed577b14b3da7a542f17d0a1a6529',
             ],
         },
+        {
+            viewtag: '34cf27e1eddc36c197176c5632b97179',
+            viewmodule: 'WorkOrder',
+            viewname: 'WOOriginPickupGridView',
+            viewaction: '',
+            viewdatachange: false,
+            refviews: [
+            ],
+        },
         {
             viewtag: '35d4b9cdba8869e6da734043cbd4f9a8',
             viewmodule: 'WorkOrder',
@@ -400,6 +419,16 @@ export const viewstate: any = {
                 'ba1263ca3437b411e86c330836d2a64b',
             ],
         },
+        {
+            viewtag: '688cebc536955dbea3a807bd19d98fcc',
+            viewmodule: 'WorkOrder',
+            viewname: 'EAMServiceLevelPickupView',
+            viewaction: '',
+            viewdatachange: false,
+            refviews: [
+                'bea6d22548223244eec14d59f1471c6e',
+            ],
+        },
         {
             viewtag: '6a395ea52232233416d9c7120518863d',
             viewmodule: 'Location',
@@ -607,6 +636,12 @@ export const viewstate: any = {
             viewaction: '',
             viewdatachange: false,
             refviews: [
+                '906130a9861c2b0cff3173c9e171c1d1',
+                '2b28313d0f3925fa44b8683eb5ea54d6',
+                '06ee1c500b1cb4aa576fb3b62b4ddb35',
+                '688cebc536955dbea3a807bd19d98fcc',
+                '687ed577b14b3da7a542f17d0a1a6529',
+                'e2c689498cfbde8c97c67a790b1831b8',
             ],
         },
         {
@@ -649,6 +684,15 @@ export const viewstate: any = {
                 '7d7cbe6f35cdf729007b90156298a515',
             ],
         },
+        {
+            viewtag: '99fce329ae1f308142b5b735a41769eb',
+            viewmodule: 'WorkOrder',
+            viewname: 'EAMWorkOrderPickupGridView',
+            viewaction: '',
+            viewdatachange: false,
+            refviews: [
+            ],
+        },
         {
             viewtag: '9cfb79c7e6fd653338c0366c9d304384',
             viewmodule: 'Asset',
@@ -870,6 +914,15 @@ export const viewstate: any = {
                 '2b28313d0f3925fa44b8683eb5ea54d6',
             ],
         },
+        {
+            viewtag: 'bea6d22548223244eec14d59f1471c6e',
+            viewmodule: 'WorkOrder',
+            viewname: 'EAMServiceLevelPickupGridView',
+            viewaction: '',
+            viewdatachange: false,
+            refviews: [
+            ],
+        },
         {
             viewtag: 'c6a93309b2a9d12617cdbaf29731d2a4',
             viewmodule: 'Asset',
@@ -1055,6 +1108,16 @@ export const viewstate: any = {
                 'aec3c3b9b959ac67bf41fe45cca7808b',
             ],
         },
+        {
+            viewtag: 'e2c689498cfbde8c97c67a790b1831b8',
+            viewmodule: 'WorkOrder',
+            viewname: 'EAMWorkOrderPickupView',
+            viewaction: '',
+            viewdatachange: false,
+            refviews: [
+                '99fce329ae1f308142b5b735a41769eb',
+            ],
+        },
         {
             viewtag: 'e82ae69965b5b61347246f54ab96dc6f',
             viewmodule: 'Asset',
diff --git a/app_AssetManagement/src/uiservice/eamservice-level/eamservice-level-ui-service-base.ts b/app_AssetManagement/src/uiservice/eamservice-level/eamservice-level-ui-service-base.ts
index 7f40611..ffb73f7 100644
--- a/app_AssetManagement/src/uiservice/eamservice-level/eamservice-level-ui-service-base.ts
+++ b/app_AssetManagement/src/uiservice/eamservice-level/eamservice-level-ui-service-base.ts
@@ -89,6 +89,8 @@ export default class EAMServiceLevelUIServiceBase extends UIService {
      * @memberof  EAMServiceLevelUIServiceBase
      */  
     public initViewMap(){
+        this.allViewMap.set('PICKUPVIEW:',{viewname:'pickupview',srfappde:'eamservicelevels'});
+        this.allViewMap.set(':',{viewname:'pickupgridview',srfappde:'eamservicelevels'});
         this.allViewMap.set('EDITVIEW:',{viewname:'editview',srfappde:'eamservicelevels'});
         this.allViewMap.set('MDATAVIEW:',{viewname:'gridview',srfappde:'eamservicelevels'});
     }
diff --git a/app_AssetManagement/src/uiservice/eamwork-order/eamwork-order-ui-service-base.ts b/app_AssetManagement/src/uiservice/eamwork-order/eamwork-order-ui-service-base.ts
index 153b47c..13ccedd 100644
--- a/app_AssetManagement/src/uiservice/eamwork-order/eamwork-order-ui-service-base.ts
+++ b/app_AssetManagement/src/uiservice/eamwork-order/eamwork-order-ui-service-base.ts
@@ -96,7 +96,9 @@ export default class EAMWorkOrderUIServiceBase extends UIService {
         this.allViewMap.set('MDATAVIEW:',{viewname:'gridview',srfappde:'eamworkorders'});
         this.allViewMap.set(':',{viewname:'childwogridview',srfappde:'eamworkorders'});
         this.allViewMap.set('EDITVIEW:',{viewname:'editview',srfappde:'eamworkorders'});
+        this.allViewMap.set(':',{viewname:'pickupgridview',srfappde:'eamworkorders'});
         this.allViewMap.set(':',{viewname:'summaryview',srfappde:'eamworkorders'});
+        this.allViewMap.set('PICKUPVIEW:',{viewname:'pickupview',srfappde:'eamworkorders'});
         this.allViewMap.set(':',{viewname:'applywogridview',srfappde:'eamworkorders'});
     }
 
diff --git a/app_AssetManagement/src/uiservice/woorigin/woorigin-ui-service-base.ts b/app_AssetManagement/src/uiservice/woorigin/woorigin-ui-service-base.ts
index 9703f0f..fca506b 100644
--- a/app_AssetManagement/src/uiservice/woorigin/woorigin-ui-service-base.ts
+++ b/app_AssetManagement/src/uiservice/woorigin/woorigin-ui-service-base.ts
@@ -89,6 +89,8 @@ export default class WOOriginUIServiceBase extends UIService {
      * @memberof  WOOriginUIServiceBase
      */  
     public initViewMap(){
+        this.allViewMap.set('PICKUPVIEW:',{viewname:'pickupview',srfappde:'woorigins'});
+        this.allViewMap.set(':',{viewname:'pickupgridview',srfappde:'woorigins'});
     }
 
     /**
diff --git a/app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-base.tsx b/app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-base.tsx
new file mode 100644
index 0000000..b7b2926
--- /dev/null
+++ b/app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-base.tsx
@@ -0,0 +1,265 @@
+import { Prop, Provide, Emit, Model } from 'vue-property-decorator';
+import { Subject, Subscription } from 'rxjs';
+import { Watch, MainControlBase } from '@/studio-core';
+import EAMServiceLevelService from '@/service/eamservice-level/eamservice-level-service';
+import PickupViewpickupviewpanelService from './pickup-viewpickupviewpanel-pickupviewpanel-service';
+import EAMServiceLevelUIService from '@/uiservice/eamservice-level/eamservice-level-ui-service';
+import PickupViewpickupviewpanelModel from './pickup-viewpickupviewpanel-pickupviewpanel-model';
+
+
+/**
+ * pickupviewpanel閮ㄤ欢鍩虹被
+ *
+ * @export
+ * @class MainControlBase
+ * @extends {PickupViewpickupviewpanelPickupviewpanelBase}
+ */
+export class PickupViewpickupviewpanelPickupviewpanelBase extends MainControlBase {
+
+    /**
+     * 鑾峰彇閮ㄤ欢绫诲瀷
+     *
+     * @protected
+     * @type {string}
+     * @memberof PickupViewpickupviewpanelPickupviewpanelBase
+     */
+    protected controlType: string = 'PICKUPVIEWPANEL';
+
+    /**
+     * 寤烘瀯閮ㄤ欢鏈嶅姟瀵硅薄
+     *
+     * @type {PickupViewpickupviewpanelService}
+     * @memberof PickupViewpickupviewpanelPickupviewpanelBase
+     */
+    public service: PickupViewpickupviewpanelService = new PickupViewpickupviewpanelService({ $store: this.$store });
+
+    /**
+     * 瀹炰綋鏈嶅姟瀵硅薄
+     *
+     * @type {EAMServiceLevelService}
+     * @memberof PickupViewpickupviewpanelPickupviewpanelBase
+     */
+    public appEntityService: EAMServiceLevelService = new EAMServiceLevelService({ $store: this.$store });
+
+    /**
+     * 搴旂敤瀹炰綋鍚嶇О
+     *
+     * @protected
+     * @type {string}
+     * @memberof PickupViewpickupviewpanelPickupviewpanelBase
+     */
+    protected appDeName: string = 'eamservicelevel';
+
+    /**
+     * 搴旂敤瀹炰綋涓枃鍚嶇О
+     *
+     * @protected
+     * @type {string}
+     * @memberof PickupViewpickupviewpanelPickupviewpanelBase
+     */
+    protected appDeLogicName: string = '鏈嶅姟绛夌骇';
+
+
+    /**
+     * 閫変腑鏁版嵁瀛楃涓�
+     *
+     * @type {string}
+     * @memberof PickupViewpickupviewpanel
+     */
+    @Prop() public selectedData?: string;
+
+    /**
+     * 鑾峰彇澶氶」鏁版嵁
+     *
+     * @returns {any[]}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public getDatas(): any[] {
+        return [];
+    }
+
+    /**
+     * 鑾峰彇鍗曢」鏍�
+     *
+     * @returns {*}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public getData(): any {
+        return {};
+    }
+
+    /**
+     * 瑙嗗浘鍚嶇О
+     *
+     * @type {*}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public view: any = {
+        viewname: 'eamservice-level-pickup-grid-view',
+        data: {},
+    }
+
+    /**
+     * 灞€閮ㄤ笂涓嬫枃
+     *
+     * @type {*}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public localContext: any = null;
+
+    /**
+     * 灞€閮ㄨ鍥惧弬鏁�
+     *
+     * @type {*}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public localViewParam: any = null;
+
+    /**
+     * 瑙嗗浘鏁版嵁
+     *
+     * @type {*}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public viewdata: string  = JSON.stringify(this.context);
+
+    /**
+     * 瑙嗗浘鍙傛暟
+     *
+     * @type {*}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public viewparam: string  = JSON.stringify(this.viewparams);
+
+    /**
+     * 鏄惁鏄剧ず鎸夐挳
+     *
+     * @type {boolean}
+     * @memberof PickupViewpickupviewpanel
+     */
+    @Prop({default: true}) public isShowButton!: boolean;
+
+    /**
+     * 鏄惁鍗曢€�
+     *
+     * @type {boolean}
+     * @memberof PickupViewpickupviewpanel
+     */
+    @Prop() public isSingleSelect?: boolean;
+
+    /**
+     * 鍒濆鍖栧畬鎴�
+     *
+     * @type {boolean}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public inited: boolean = false;
+
+    /**
+     * 瑙嗗浘鏁版嵁鍙樺寲
+     *
+     * @param {*} $event
+     * @memberof PickupViewpickupviewpanel
+     */
+    public onViewDatasChange($event: any): void {
+        if($event.length>0){
+          $event.forEach((item:any,index:any) => {
+              let srfmajortext = item['eamservicelevelname'];
+              if(srfmajortext){
+                Object.assign($event[index],{srfmajortext: srfmajortext});
+              }
+          });
+        }
+        this.$emit('selectionchange', $event);
+    }
+
+    /**
+     * 瑙嗗浘鏁版嵁琚縺娲�
+     *
+     * @param {*} $event
+     * @memberof PickupViewpickupviewpanel
+     */
+    public viewDatasActivated($event: any): void {
+        this.$emit('activated', $event);
+    }
+
+    /**
+     * 瑙嗗浘鍔犺浇瀹屾垚
+     *
+     * @param {*} $event
+     * @memberof PickupViewpickupviewpanel
+     */
+    public onViewLoad($event: any): void {
+        this.$emit('load', $event);
+    }
+
+    /**
+     * vue 鐢熷懡鍛ㄦ湡
+     *
+     * @memberof PickupViewpickupviewpanel
+     */
+    public created() {
+        this.afterCreated();
+    }
+
+    /**
+     * 鎵цcreated鍚庣殑閫昏緫
+     *
+     *  @memberof PickupViewpickupviewpanel
+     */    
+    public afterCreated(){
+        this.initNavParam();
+        if (this.viewState) {
+            this.viewStateEvent = this.viewState.subscribe(({ tag, action, data }) => {
+                if (!Object.is(tag, this.name)) {
+                    return;
+                }
+                if (Object.is('load', action)) {
+                    this.viewdata = JSON.stringify(this.context);
+                    this.viewparam = JSON.stringify(Object.assign(data, this.viewparams));
+                    this.inited = true;
+                }
+            });
+        }
+    }
+
+    /**
+     * 鍒濆鍖栧鑸弬鏁�
+     *
+     *  @memberof PickupViewpickupviewpanel
+     */  
+    public initNavParam(){
+        if(this.localContext && Object.keys(this.localContext).length >0){
+            let _context:any = this.$util.computedNavData({},this.context,this.viewparams,this.localContext);
+            Object.assign(this.context,_context);
+        }
+        if(this.localViewParam && Object.keys(this.localViewParam).length >0){
+            let _param:any = this.$util.computedNavData({},this.context,this.viewparams,this.localViewParam);
+            Object.assign(this.viewparams,_param);
+        }
+        this.viewdata = JSON.stringify(this.context);
+        this.viewparam = JSON.stringify(this.viewparams);
+    }
+
+
+    /**
+     * vue 鐢熷懡鍛ㄦ湡
+     *
+     * @memberof PickupViewpickupviewpanel
+     */
+    public destroyed() {
+        this.afterDestroy();
+    }
+
+    /**
+     * 鎵цdestroyed鍚庣殑閫昏緫
+     *
+     * @memberof PickupViewpickupviewpanel
+     */
+    public afterDestroy() {
+        if (this.viewStateEvent) {
+            this.viewStateEvent.unsubscribe();
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-model.ts b/app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-model.ts
new file mode 100644
index 0000000..ab8bced
--- /dev/null
+++ b/app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-model.ts
@@ -0,0 +1,43 @@
+/**
+ * PickupViewpickupviewpanel 閮ㄤ欢妯″瀷
+ *
+ * @export
+ * @class PickupViewpickupviewpanelModel
+ */
+export default class PickupViewpickupviewpanelModel {
+
+  /**
+    * 鑾峰彇鏁版嵁椤归泦鍚�
+    *
+    * @returns {any[]}
+    * @memberof PickupViewpickupviewpanelModel
+    */
+  public getDataItems(): any[] {
+    return [
+      {
+        name: 'createman',
+      },
+      {
+        name: 'createdate',
+      },
+      {
+        name: 'eamservicelevel',
+        prop: 'eamservicelevelid',
+      },
+      {
+        name: 'updateman',
+      },
+      {
+        name: 'eamservicelevelname',
+      },
+      {
+        name: 'updatedate',
+      },
+      {
+        name: 'description',
+      },
+    ]
+  }
+
+
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-service.ts b/app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-service.ts
new file mode 100644
index 0000000..40156ed
--- /dev/null
+++ b/app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-service.ts
@@ -0,0 +1,11 @@
+import { Http } from '@/utils';
+import ControlService from '@/widgets/control-service';
+
+/**
+ * PickupViewpickupviewpanel 閮ㄤ欢鏈嶅姟瀵硅薄
+ *
+ * @export
+ * @class PickupViewpickupviewpanelService
+ */
+export default class PickupViewpickupviewpanelService extends ControlService {
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.html b/app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.html
new file mode 100644
index 0000000..04586a4
--- /dev/null
+++ b/app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.html
@@ -0,0 +1,16 @@
+<div class='pickupviewpanel'>
+    <component 
+        v-if="inited && view.viewname && !Object.is(view.viewname, '')" 
+        :is="view.viewname"
+        class="viewcontainer3"
+        :viewdata="viewdata"
+        :viewparam="viewparam"
+        :viewDefaultUsage="false"
+        :isSingleSelect="isSingleSelect"
+        :selectedData="selectedData"
+        :isShowButton="isShowButton"
+        @viewdataschange="onViewDatasChange.apply(_self, arguments)"
+        @viewdatasactivated="viewDatasActivated.apply(_self, arguments)"
+        @viewload="onViewLoad.apply(_self, arguments)">
+    </component>
+</div>
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.less b/app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.less
new file mode 100644
index 0000000..e1cc9ac
--- /dev/null
+++ b/app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.less
@@ -0,0 +1,3 @@
+.pickupviewpanel{
+  width: 100%;
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue b/app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue
new file mode 100644
index 0000000..a8b2ec5
--- /dev/null
+++ b/app_AssetManagement/src/widgets/eamservice-level/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue
@@ -0,0 +1,22 @@
+<template src="./pickup-viewpickupviewpanel-pickupviewpanel.html"/>
+<script lang='tsx'>
+import { Component } from 'vue-property-decorator';
+import { VueLifeCycleProcessing } from '@/studio-core';
+import { PickupViewpickupviewpanelPickupviewpanelBase } from './pickup-viewpickupviewpanel-pickupviewpanel-base';
+ 
+
+/**
+ * pickupviewpanel閮ㄤ欢
+ *
+ * @export
+ * @class PickupViewpickupviewpanelPickupviewpanel
+ * @extends {PickupViewpickupviewpanelPickupviewpanelBase}
+ */
+@Component({
+    components: {
+         
+    }
+})
+@VueLifeCycleProcessing()
+export default class PickupViewpickupviewpanelPickupviewpanel extends PickupViewpickupviewpanelPickupviewpanelBase { }
+</script>
diff --git a/app_AssetManagement/src/widgets/eamwork-order/main-form/main-form-base.tsx b/app_AssetManagement/src/widgets/eamwork-order/main-form/main-form-base.tsx
index 64c449a..febf724 100644
--- a/app_AssetManagement/src/widgets/eamwork-order/main-form/main-form-base.tsx
+++ b/app_AssetManagement/src/widgets/eamwork-order/main-form/main-form-base.tsx
@@ -82,7 +82,26 @@ export class MainEditFormBase extends EditFormControlBase {
         srfuf: null,
         srfdeid: null,
         srfsourcekey: null,
+        wonumber: null,
+        workordername: null,
+        eamwotypename: null,
+        pworkordername: null,
+        eamservicelevelname: null,
+        mdate: null,
+        eamwooriginname: null,
+        assetname: null,
+        eamlocationname: null,
+        wodate: null,
+        begintime: null,
+        endtime: null,
+        worklength: null,
+        eamlocationid: null,
         workorderid: null,
+        eamservicelevelid: null,
+        pworkorderid: null,
+        eamwotypeid: null,
+        assetid: null,
+        eamwooriginid: null,
         eamworkorder:null,
     };
 
@@ -93,6 +112,22 @@ export class MainEditFormBase extends EditFormControlBase {
      * @memberof MainEditFormBase
      */
     public rules: any = {
+        wonumber: [
+            { required: true, type: 'string', message: '宸ュ崟缂栧彿 鍊间笉鑳戒负绌�', trigger: 'change' },
+            { required: true, type: 'string', message: '宸ュ崟缂栧彿 鍊间笉鑳戒负绌�', trigger: 'blur' },
+        ],
+        workordername: [
+            { required: true, type: 'string', message: '宸ュ崟鍚嶇О 鍊间笉鑳戒负绌�', trigger: 'change' },
+            { required: true, type: 'string', message: '宸ュ崟鍚嶇О 鍊间笉鑳戒负绌�', trigger: 'blur' },
+        ],
+        eamwotypename: [
+            { required: true, type: 'string', message: '宸ュ崟绫诲瀷 鍊间笉鑳戒负绌�', trigger: 'change' },
+            { required: true, type: 'string', message: '宸ュ崟绫诲瀷 鍊间笉鑳戒负绌�', trigger: 'blur' },
+        ],
+        assetname: [
+            { required: true, type: 'string', message: '璧勪骇 鍊间笉鑳戒负绌�', trigger: 'change' },
+            { required: true, type: 'string', message: '璧勪骇 鍊间笉鑳戒负绌�', trigger: 'blur' },
+        ],
     }
 
     /**
@@ -111,13 +146,13 @@ export class MainEditFormBase extends EditFormControlBase {
      * @memberof MainEditFormBase
      */
     public detailsModel: any = {
-        group1: new FormGroupPanelModel({ caption: '宸ュ崟鍩烘湰淇℃伅', detailType: 'GROUPPANEL', name: 'group1', visible: true, isShowCaption: true, form: this, showMoreMode: 0, uiActionGroup: { caption: '', langbase: 'entities.eamworkorder.main_form', extractMode: 'ITEM', details: [] } }),
+        group1: new FormGroupPanelModel({ caption: '鍩烘湰淇℃伅', detailType: 'GROUPPANEL', name: 'group1', visible: true, isShowCaption: true, form: this, showMoreMode: 0, uiActionGroup: { caption: '', langbase: 'entities.eamworkorder.main_form', extractMode: 'ITEM', details: [] } }),
 
-        formpage1: new FormPageModel({ caption: '鍩烘湰淇℃伅', detailType: 'FORMPAGE', name: 'formpage1', visible: true, isShowCaption: true, form: this, showMoreMode: 0 }),
+        grouppanel1: new FormGroupPanelModel({ caption: '璧勪骇淇℃伅', detailType: 'GROUPPANEL', name: 'grouppanel1', visible: true, isShowCaption: true, form: this, showMoreMode: 0, uiActionGroup: { caption: '', langbase: 'entities.eamworkorder.main_form', extractMode: 'ITEM', details: [] } }),
 
-        group2: new FormGroupPanelModel({ caption: '鎿嶄綔淇℃伅', detailType: 'GROUPPANEL', name: 'group2', visible: true, isShowCaption: true, form: this, showMoreMode: 0, uiActionGroup: { caption: '', langbase: 'entities.eamworkorder.main_form', extractMode: 'ITEM', details: [] } }),
+        grouppanel2: new FormGroupPanelModel({ caption: '鎵ц淇℃伅', detailType: 'GROUPPANEL', name: 'grouppanel2', visible: true, isShowCaption: true, form: this, showMoreMode: 0, uiActionGroup: { caption: '', langbase: 'entities.eamworkorder.main_form', extractMode: 'ITEM', details: [] } }),
 
-        formpage2: new FormPageModel({ caption: '鍏跺畠', detailType: 'FORMPAGE', name: 'formpage2', visible: true, isShowCaption: true, form: this, showMoreMode: 0 }),
+        formpage1: new FormPageModel({ caption: '鍩烘湰淇℃伅', detailType: 'FORMPAGE', name: 'formpage1', visible: true, isShowCaption: true, form: this, showMoreMode: 0 }),
 
         srfupdatedate: new FormItemModel({ caption: '鏇存柊鏃堕棿', detailType: 'FORMITEM', name: 'srfupdatedate', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
 
@@ -135,8 +170,45 @@ export class MainEditFormBase extends EditFormControlBase {
 
         srfsourcekey: new FormItemModel({ caption: '', detailType: 'FORMITEM', name: 'srfsourcekey', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
 
+        wonumber: new FormItemModel({ caption: '宸ュ崟缂栧彿', detailType: 'FORMITEM', name: 'wonumber', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
+
+        workordername: new FormItemModel({ caption: '宸ュ崟鍚嶇О', detailType: 'FORMITEM', name: 'workordername', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
+
+        eamwotypename: new FormItemModel({ caption: '宸ュ崟绫诲瀷', detailType: 'FORMITEM', name: 'eamwotypename', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
+
+        pworkordername: new FormItemModel({ caption: '涓婄骇宸ュ崟', detailType: 'FORMITEM', name: 'pworkordername', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
+
+        eamservicelevelname: new FormItemModel({ caption: '鏈嶅姟绛夌骇', detailType: 'FORMITEM', name: 'eamservicelevelname', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
+
+        mdate: new FormItemModel({ caption: '鍒跺畾鏃ユ湡', detailType: 'FORMITEM', name: 'mdate', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
+
+        eamwooriginname: new FormItemModel({ caption: '宸ュ崟鏉ユ簮', detailType: 'FORMITEM', name: 'eamwooriginname', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
+
+        assetname: new FormItemModel({ caption: '璧勪骇', detailType: 'FORMITEM', name: 'assetname', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
+
+        eamlocationname: new FormItemModel({ caption: '鍔熻兘浣嶇疆', detailType: 'FORMITEM', name: 'eamlocationname', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
+
+        wodate: new FormItemModel({ caption: '鎵ц鏃ユ湡', detailType: 'FORMITEM', name: 'wodate', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
+
+        begintime: new FormItemModel({ caption: '瀹為檯寮€濮嬫椂闂�', detailType: 'FORMITEM', name: 'begintime', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
+
+        endtime: new FormItemModel({ caption: '瀹為檯缁撴潫鏃堕棿', detailType: 'FORMITEM', name: 'endtime', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
+
+        worklength: new FormItemModel({ caption: '宸ユ椂', detailType: 'FORMITEM', name: 'worklength', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
+
+        eamlocationid: new FormItemModel({ caption: '鍔熻兘浣嶇疆鏍囪瘑', detailType: 'FORMITEM', name: 'eamlocationid', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
+
         workorderid: new FormItemModel({ caption: '宸ュ崟鏍囪瘑', detailType: 'FORMITEM', name: 'workorderid', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
 
-        form: new FormTabPanelModel({ caption: 'form', detailType: 'TABPANEL', name: 'form', visible: true, isShowCaption: true, form: this, tabPages: [{ name: 'formpage1', index: 0, visible: true }, { name: 'formpage2', index: 1, visible: true }] }),
+        eamservicelevelid: new FormItemModel({ caption: '鏈嶅姟绛夌骇鏍囪瘑', detailType: 'FORMITEM', name: 'eamservicelevelid', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
+
+        pworkorderid: new FormItemModel({ caption: '涓婄骇宸ュ崟鏍囪瘑', detailType: 'FORMITEM', name: 'pworkorderid', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
+
+        eamwotypeid: new FormItemModel({ caption: '宸ュ崟绫诲瀷鏍囪瘑', detailType: 'FORMITEM', name: 'eamwotypeid', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
+
+        assetid: new FormItemModel({ caption: '璧勪骇鏍囪瘑', detailType: 'FORMITEM', name: 'assetid', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
+
+        eamwooriginid: new FormItemModel({ caption: '宸ュ崟鏉ユ簮鏍囪瘑', detailType: 'FORMITEM', name: 'eamwooriginid', visible: true, isShowCaption: true, form: this, showMoreMode: 0, disabled: false, enableCond: 3 }),
+
     };
 }
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/eamwork-order/main-form/main-form-model.ts b/app_AssetManagement/src/widgets/eamwork-order/main-form/main-form-model.ts
index a8525b3..7c6b0b3 100644
--- a/app_AssetManagement/src/widgets/eamwork-order/main-form/main-form-model.ts
+++ b/app_AssetManagement/src/widgets/eamwork-order/main-form/main-form-model.ts
@@ -55,11 +55,106 @@ export default class MainModel {
       {
         name: 'srfsourcekey',
       },
+      {
+        name: 'wonumber',
+        prop: 'wonumber',
+        dataType: 'TEXT',
+      },
+      {
+        name: 'workordername',
+        prop: 'workordername',
+        dataType: 'TEXT',
+      },
+      {
+        name: 'eamwotypename',
+        prop: 'eamwotypename',
+        dataType: 'PICKUPTEXT',
+      },
+      {
+        name: 'pworkordername',
+        prop: 'pworkordername',
+        dataType: 'PICKUPTEXT',
+      },
+      {
+        name: 'eamservicelevelname',
+        prop: 'eamservicelevelname',
+        dataType: 'PICKUPTEXT',
+      },
+      {
+        name: 'mdate',
+        prop: 'mdate',
+        dataType: 'DATETIME',
+      },
+      {
+        name: 'eamwooriginname',
+        prop: 'wooriginname',
+        dataType: 'PICKUPTEXT',
+      },
+      {
+        name: 'assetname',
+        prop: 'assetname',
+        dataType: 'PICKUPTEXT',
+      },
+      {
+        name: 'eamlocationname',
+        prop: 'eamlocationname',
+        dataType: 'PICKUPTEXT',
+      },
+      {
+        name: 'wodate',
+        prop: 'wodate',
+        dataType: 'DATETIME',
+      },
+      {
+        name: 'begintime',
+        prop: 'begintime',
+        dataType: 'DATETIME',
+      },
+      {
+        name: 'endtime',
+        prop: 'endtime',
+        dataType: 'DATETIME',
+      },
+      {
+        name: 'worklength',
+        prop: 'worklength',
+        dataType: 'FLOAT',
+      },
+      {
+        name: 'eamlocationid',
+        prop: 'eamlocationid',
+        dataType: 'PICKUP',
+      },
       {
         name: 'workorderid',
         prop: 'workorderid',
         dataType: 'GUID',
       },
+      {
+        name: 'eamservicelevelid',
+        prop: 'eamservicelevelid',
+        dataType: 'PICKUP',
+      },
+      {
+        name: 'pworkorderid',
+        prop: 'pworkorderid',
+        dataType: 'PICKUP',
+      },
+      {
+        name: 'eamwotypeid',
+        prop: 'eamwotypeid',
+        dataType: 'PICKUP',
+      },
+      {
+        name: 'assetid',
+        prop: 'assetid',
+        dataType: 'PICKUP',
+      },
+      {
+        name: 'eamwooriginid',
+        prop: 'wooriginid',
+        dataType: 'PICKUP',
+      },
       {
         name: 'eamworkorder',
         prop: 'workorderid',
diff --git a/app_AssetManagement/src/widgets/eamwork-order/main-form/main-form-service.ts b/app_AssetManagement/src/widgets/eamwork-order/main-form/main-form-service.ts
index b03230d..ea57eed 100644
--- a/app_AssetManagement/src/widgets/eamwork-order/main-form/main-form-service.ts
+++ b/app_AssetManagement/src/widgets/eamwork-order/main-form/main-form-service.ts
@@ -2,6 +2,11 @@ import { Http,Util,Errorlog } from '@/utils';
 import ControlService from '@/widgets/control-service';
 import EAMWorkOrderService from '@/service/eamwork-order/eamwork-order-service';
 import MainModel from './main-form-model';
+import EAMWOTypeService from '@/service/eamwotype/eamwotype-service';
+import EAMServiceLevelService from '@/service/eamservice-level/eamservice-level-service';
+import WOOriginService from '@/service/woorigin/woorigin-service';
+import EAMAssetService from '@/service/eamasset/eamasset-service';
+import EAMLocationService from '@/service/eamlocation/eamlocation-service';
 
 
 /**
@@ -41,6 +46,46 @@ export default class MainService extends ControlService {
         this.model = new MainModel();
     }
 
+    /**
+     * 宸ュ崟绫诲瀷鏈嶅姟瀵硅薄
+     *
+     * @type {EAMWOTypeService}
+     * @memberof MainService
+     */
+    public eamwotypeService: EAMWOTypeService = new EAMWOTypeService();
+
+    /**
+     * 鏈嶅姟绛夌骇鏈嶅姟瀵硅薄
+     *
+     * @type {EAMServiceLevelService}
+     * @memberof MainService
+     */
+    public eamservicelevelService: EAMServiceLevelService = new EAMServiceLevelService();
+
+    /**
+     * 宸ュ崟鏉ユ簮鏈嶅姟瀵硅薄
+     *
+     * @type {WOOriginService}
+     * @memberof MainService
+     */
+    public wooriginService: WOOriginService = new WOOriginService();
+
+    /**
+     * 璧勪骇鏈嶅姟瀵硅薄
+     *
+     * @type {EAMAssetService}
+     * @memberof MainService
+     */
+    public eamassetService: EAMAssetService = new EAMAssetService();
+
+    /**
+     * 鍔熻兘浣嶇疆鏈嶅姟瀵硅薄
+     *
+     * @type {EAMLocationService}
+     * @memberof MainService
+     */
+    public eamlocationService: EAMLocationService = new EAMLocationService();
+
     /**
      * 澶勭悊鏁版嵁
      *
@@ -82,6 +127,24 @@ export default class MainService extends ControlService {
     public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> {
         data.page = data.page ? data.page : 0;
         data.size = data.size ? data.size : 1000;
+        if (Object.is(serviceName, 'EAMWOTypeService') && Object.is(interfaceName, 'FetchDefault')) {
+            return this.doItems(this.eamwotypeService.FetchDefault(JSON.parse(JSON.stringify(context)),data, isloading), 'eamwotypeid', 'eamwotype');
+        }
+        if (Object.is(serviceName, 'EAMWorkOrderService') && Object.is(interfaceName, 'FetchDefault')) {
+            return this.doItems(this.appEntityService.FetchDefault(JSON.parse(JSON.stringify(context)), data, isloading), 'workorderid', 'eamworkorder');
+        }
+        if (Object.is(serviceName, 'EAMServiceLevelService') && Object.is(interfaceName, 'FetchDefault')) {
+            return this.doItems(this.eamservicelevelService.FetchDefault(JSON.parse(JSON.stringify(context)),data, isloading), 'eamservicelevelid', 'eamservicelevel');
+        }
+        if (Object.is(serviceName, 'WOOriginService') && Object.is(interfaceName, 'FetchDefault')) {
+            return this.doItems(this.wooriginService.FetchDefault(JSON.parse(JSON.stringify(context)),data, isloading), 'wooriginid', 'woorigin');
+        }
+        if (Object.is(serviceName, 'EAMAssetService') && Object.is(interfaceName, 'FetchDefault')) {
+            return this.doItems(this.eamassetService.FetchDefault(JSON.parse(JSON.stringify(context)),data, isloading), 'assetid', 'eamasset');
+        }
+        if (Object.is(serviceName, 'EAMLocationService') && Object.is(interfaceName, 'FetchDefault')) {
+            return this.doItems(this.eamlocationService.FetchDefault(JSON.parse(JSON.stringify(context)),data, isloading), 'eamlocationid', 'eamlocation');
+        }
 
         return Promise.reject([])
     }
diff --git a/app_AssetManagement/src/widgets/eamwork-order/main-form/main-form.html b/app_AssetManagement/src/widgets/eamwork-order/main-form/main-form.html
index c22e541..fe37053 100644
--- a/app_AssetManagement/src/widgets/eamwork-order/main-form/main-form.html
+++ b/app_AssetManagement/src/widgets/eamwork-order/main-form/main-form.html
@@ -1,50 +1,262 @@
 <i-form :model="this.data" class='app-form' ref='form'  id='eamworkorder_main' style="">
     <input style="display:none;" />
     <row >
-    <tabs :animated="false" size="small" name='main' :value="detailsModel.form.activiedPage" 
-        @on-click="detailsModel.form.clickPage($event)">
-            <tab-pane v-show="detailsModel.formpage1.visible" name='formpage1' :index="0" tab='main' class=''  
-                :label="(h) =>{
-                    return h('span',{
-                        class:'caption'
-                    },[
-                    $t('entities.eamworkorder.main_form.details.formpage1')
-                    ])
-                }">
-                    
+            
 <i-col class="form-layout-container" v-show="detailsModel.group1.visible" :style="{}"  :lg="{ span: 24, offset: 0 }">
     <app-form-group :model="detailsModel.group1" layoutType="TABLE_24COL" titleStyle="" class='' :uiActionGroup="detailsModel.group1.uiActionGroup" @groupuiactionclick="groupUIActionClick($event)" :caption="$t('entities.eamworkorder.main_form.details.group1')" :isShowCaption="true" uiStyle="DEFAULT" :titleBarCloseMode="0" :isInfoGroupMode="false" >    
     <app-form-group-data-panel slot="dataInfoPanel" :model="detailsModel.group1" :data="data" :context="context" :viewparams="viewparams"/>
     <row>
-            
+        <i-col class="form-layout-container" v-show="detailsModel.wonumber.visible" :style="{}"  :md="{ span: 12, offset: 0 }" :lg="{ span: 8, offset: 0 }" :xl="{ span: 6, offset: 0 }">
+    <app-form-item name='wonumber' :itemRules="this.rules.wonumber" class='' :caption="$t('entities.eamworkorder.main_form.details.wonumber')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.wonumber.error" :isEmptyCaption="false" labelPos="LEFT">
+    <input-box 
+    v-model="data.wonumber"  
+    @enter="onEnter($event)"  
+     unit=""  
+    :disabled="detailsModel.wonumber.disabled" 
+    type='text' 
+    style="">
+</input-box>
+
+</app-form-item>
+
+</i-col>
+<i-col class="form-layout-container" v-show="detailsModel.workordername.visible" :style="{}"  :md="{ span: 12, offset: 0 }" :lg="{ span: 8, offset: 0 }" :xl="{ span: 6, offset: 0 }">
+    <app-form-item name='workordername' :itemRules="this.rules.workordername" class='' :caption="$t('entities.eamworkorder.main_form.details.workordername')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.workordername.error" :isEmptyCaption="false" labelPos="LEFT">
+    <input-box 
+    v-model="data.workordername"  
+    @enter="onEnter($event)"  
+     unit=""  
+    :disabled="detailsModel.workordername.disabled" 
+    type='text' 
+    style="">
+</input-box>
+
+</app-form-item>
+
+</i-col>
+<i-col class="form-layout-container" v-show="detailsModel.eamwotypename.visible" :style="{}"  :md="{ span: 12, offset: 0 }" :lg="{ span: 8, offset: 0 }" :xl="{ span: 6, offset: 0 }">
+    <app-form-item name='eamwotypename' :itemRules="this.rules.eamwotypename" class='' :caption="$t('entities.eamworkorder.main_form.details.eamwotypename')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.eamwotypename.error" :isEmptyCaption="false" labelPos="LEFT">
+    
+<app-picker 
+  :formState="formState"
+  :data="data"
+  :context="context"
+  :viewparams="viewparams"
+  :localContext ='{ }' 
+  :localParam ='{ }' 
+  :disabled="detailsModel.eamwotypename.disabled"
+  name='eamwotypename'
+  deMajorField='eamwotypename'
+  deKeyField='eamwotype'
+  :service="service"
+  :acParams="{ serviceName: 'EAMWOTypeService', interfaceName: 'FetchDefault'}"
+  valueitem='eamwotypeid' 
+  :value="data.eamwotypename"
+  :pickupView="{ viewname: 'eamwotype-pickup-view', title: $t('entities.eamwotype.views.pickupview.title'), deResParameters: [], parameters: [{ pathName: 'eamwotypes', parameterName: 'eamwotype' }, { pathName: 'pickupview', parameterName: 'pickupview' } ], placement:'' }"
+  style=""  
+  @formitemvaluechange="onFormItemValueChange($event)">
+</app-picker>
+
+</app-form-item>
+
+</i-col>
+<i-col class="form-layout-container" v-show="detailsModel.pworkordername.visible" :style="{}"  :md="{ span: 12, offset: 0 }" :lg="{ span: 8, offset: 0 }" :xl="{ span: 6, offset: 0 }">
+    <app-form-item name='pworkordername' :itemRules="this.rules.pworkordername" class='' :caption="$t('entities.eamworkorder.main_form.details.pworkordername')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.pworkordername.error" :isEmptyCaption="false" labelPos="LEFT">
+    
+<app-picker 
+  :formState="formState"
+  :data="data"
+  :context="context"
+  :viewparams="viewparams"
+  :localContext ='{ }' 
+  :localParam ='{ }' 
+  :disabled="detailsModel.pworkordername.disabled"
+  name='pworkordername'
+  deMajorField='workordername'
+  deKeyField='eamworkorder'
+  :service="service"
+  :acParams="{ serviceName: 'EAMWorkOrderService', interfaceName: 'FetchDefault'}"
+  valueitem='pworkorderid' 
+  :value="data.pworkordername"
+  :pickupView="{ viewname: 'eamwork-order-pickup-view', title: $t('entities.eamworkorder.views.pickupview.title'), deResParameters: [{ pathName: 'eamapplies', parameterName: 'eamapply' }, ], parameters: [{ pathName: 'eamworkorders', parameterName: 'eamworkorder' }, { pathName: 'pickupview', parameterName: 'pickupview' } ], placement:'' }"
+  style=""  
+  @formitemvaluechange="onFormItemValueChange($event)">
+</app-picker>
+
+</app-form-item>
+
+</i-col>
+<i-col class="form-layout-container" v-show="detailsModel.eamservicelevelname.visible" :style="{}"  :md="{ span: 12, offset: 0 }" :lg="{ span: 8, offset: 0 }" :xl="{ span: 6, offset: 0 }">
+    <app-form-item name='eamservicelevelname' :itemRules="this.rules.eamservicelevelname" class='' :caption="$t('entities.eamworkorder.main_form.details.eamservicelevelname')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.eamservicelevelname.error" :isEmptyCaption="false" labelPos="LEFT">
+    
+<app-picker 
+  :formState="formState"
+  :data="data"
+  :context="context"
+  :viewparams="viewparams"
+  :localContext ='{ }' 
+  :localParam ='{ }' 
+  :disabled="detailsModel.eamservicelevelname.disabled"
+  name='eamservicelevelname'
+  deMajorField='eamservicelevelname'
+  deKeyField='eamservicelevel'
+  :service="service"
+  :acParams="{ serviceName: 'EAMServiceLevelService', interfaceName: 'FetchDefault'}"
+  valueitem='eamservicelevelid' 
+  :value="data.eamservicelevelname"
+  :pickupView="{ viewname: 'eamservice-level-pickup-view', title: $t('entities.eamservicelevel.views.pickupview.title'), deResParameters: [], parameters: [{ pathName: 'eamservicelevels', parameterName: 'eamservicelevel' }, { pathName: 'pickupview', parameterName: 'pickupview' } ], placement:'' }"
+  style=""  
+  @formitemvaluechange="onFormItemValueChange($event)">
+</app-picker>
+
+</app-form-item>
+
+</i-col>
+<i-col class="form-layout-container" v-show="detailsModel.mdate.visible" :style="{}"  :md="{ span: 12, offset: 0 }" :lg="{ span: 8, offset: 0 }" :xl="{ span: 6, offset: 0 }">
+    <app-form-item name='mdate' :itemRules="this.rules.mdate" class='' :caption="$t('entities.eamworkorder.main_form.details.mdate')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.mdate.error" :isEmptyCaption="false" labelPos="LEFT">
+    <date-picker type="datetime" :transfer="true" format="yyyy-MM-dd HH:mm:ss" placeholder="璇烽€夋嫨鏃堕棿..." :value="data.mdate" :disabled="detailsModel.mdate.disabled" style="min-width: 150px; width:160px;" @on-change="(val1, val2) => { this.data.mdate = val1 }"></date-picker>
+
+</app-form-item>
+
+</i-col>
+<i-col class="form-layout-container" v-show="detailsModel.eamwooriginname.visible" :style="{}"  :md="{ span: 12, offset: 0 }" :lg="{ span: 8, offset: 0 }" :xl="{ span: 6, offset: 0 }">
+    <app-form-item name='eamwooriginname' :itemRules="this.rules.eamwooriginname" class='' :caption="$t('entities.eamworkorder.main_form.details.eamwooriginname')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.eamwooriginname.error" :isEmptyCaption="false" labelPos="LEFT">
+    
+<app-picker 
+  :formState="formState"
+  :data="data"
+  :context="context"
+  :viewparams="viewparams"
+  :localContext ='{ }' 
+  :localParam ='{ }' 
+  :disabled="detailsModel.eamwooriginname.disabled"
+  name='eamwooriginname'
+  deMajorField='wooriginname'
+  deKeyField='woorigin'
+  :service="service"
+  :acParams="{ serviceName: 'WOOriginService', interfaceName: 'FetchDefault'}"
+  valueitem='eamwooriginid' 
+  :value="data.eamwooriginname"
+  :pickupView="{ viewname: 'woorigin-pickup-view', title: $t('entities.woorigin.views.pickupview.title'), deResParameters: [], parameters: [{ pathName: 'woorigins', parameterName: 'woorigin' }, { pathName: 'pickupview', parameterName: 'pickupview' } ], placement:'' }"
+  style=""  
+  @formitemvaluechange="onFormItemValueChange($event)">
+</app-picker>
+
+</app-form-item>
+
+</i-col>
+    
     </row>
 </app-form-group>
 
 </i-col>
+<i-col class="form-layout-container" v-show="detailsModel.grouppanel1.visible" :style="{}"  :lg="{ span: 24, offset: 0 }">
+    <app-form-group :model="detailsModel.grouppanel1" layoutType="TABLE_24COL" titleStyle="" class='' :uiActionGroup="detailsModel.grouppanel1.uiActionGroup" @groupuiactionclick="groupUIActionClick($event)" :caption="$t('entities.eamworkorder.main_form.details.grouppanel1')" :isShowCaption="true" uiStyle="DEFAULT" :titleBarCloseMode="0" :isInfoGroupMode="false" >    
+    <app-form-group-data-panel slot="dataInfoPanel" :model="detailsModel.grouppanel1" :data="data" :context="context" :viewparams="viewparams"/>
+    <row>
+        <i-col class="form-layout-container" v-show="detailsModel.assetname.visible" :style="{}"  :md="{ span: 12, offset: 0 }" :lg="{ span: 8, offset: 0 }" :xl="{ span: 6, offset: 0 }">
+    <app-form-item name='assetname' :itemRules="this.rules.assetname" class='' :caption="$t('entities.eamworkorder.main_form.details.assetname')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.assetname.error" :isEmptyCaption="false" labelPos="LEFT">
+    
+<app-picker 
+  :formState="formState"
+  :data="data"
+  :context="context"
+  :viewparams="viewparams"
+  :localContext ='{ }' 
+  :localParam ='{ }' 
+  :disabled="detailsModel.assetname.disabled"
+  name='assetname'
+  deMajorField='assetname'
+  deKeyField='eamasset'
+  :service="service"
+  :acParams="{ serviceName: 'EAMAssetService', interfaceName: 'FetchDefault'}"
+  valueitem='assetid' 
+  :value="data.assetname"
+  :pickupView="{ viewname: 'eamasset-pickup-view', title: $t('entities.eamasset.views.pickupview.title'), deResParameters: [{ pathName: 'eamlocations', parameterName: 'eamlocation' }, ], parameters: [{ pathName: 'eamassets', parameterName: 'eamasset' }, { pathName: 'pickupview', parameterName: 'pickupview' } ], placement:'' }"
+  style=""  
+  @formitemvaluechange="onFormItemValueChange($event)">
+</app-picker>
+
+</app-form-item>
+
+</i-col>
+<i-col class="form-layout-container" v-show="detailsModel.eamlocationname.visible" :style="{}"  :md="{ span: 12, offset: 0 }" :lg="{ span: 8, offset: 0 }" :xl="{ span: 6, offset: 0 }">
+    <app-form-item name='eamlocationname' :itemRules="this.rules.eamlocationname" class='' :caption="$t('entities.eamworkorder.main_form.details.eamlocationname')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.eamlocationname.error" :isEmptyCaption="false" labelPos="LEFT">
+    
+<app-picker 
+  :formState="formState"
+  :data="data"
+  :context="context"
+  :viewparams="viewparams"
+  :localContext ='{ }' 
+  :localParam ='{ }' 
+  :disabled="detailsModel.eamlocationname.disabled"
+  name='eamlocationname'
+  deMajorField='eamlocationname'
+  deKeyField='eamlocation'
+  :service="service"
+  :acParams="{ serviceName: 'EAMLocationService', interfaceName: 'FetchDefault'}"
+  valueitem='eamlocationid' 
+  :value="data.eamlocationname"
+  :pickupView="{ viewname: 'eamlocation-pickup-view', title: $t('entities.eamlocation.views.pickupview.title'), deResParameters: [], parameters: [{ pathName: 'eamlocations', parameterName: 'eamlocation' }, { pathName: 'pickupview', parameterName: 'pickupview' } ], placement:'' }"
+  style=""  
+  @formitemvaluechange="onFormItemValueChange($event)">
+</app-picker>
 
+</app-form-item>
 
-            </tab-pane> 
-            <tab-pane v-show="detailsModel.formpage2.visible" name='formpage2' :index="1" tab='main' class=''  
-                :label="(h) =>{
-                    return h('span',{
-                        class:'caption'
-                    },[
-                    $t('entities.eamworkorder.main_form.details.formpage2')
-                    ])
-                }">
-                    
-<i-col class="form-layout-container" v-show="detailsModel.group2.visible" :style="{}"  :lg="{ span: 24, offset: 0 }">
-    <app-form-group :model="detailsModel.group2" layoutType="TABLE_24COL" titleStyle="" class='' :uiActionGroup="detailsModel.group2.uiActionGroup" @groupuiactionclick="groupUIActionClick($event)" :caption="$t('entities.eamworkorder.main_form.details.group2')" :isShowCaption="true" uiStyle="DEFAULT" :titleBarCloseMode="0" :isInfoGroupMode="false" >    
-    <app-form-group-data-panel slot="dataInfoPanel" :model="detailsModel.group2" :data="data" :context="context" :viewparams="viewparams"/>
+</i-col>
+    
+    </row>
+</app-form-group>
+
+</i-col>
+<i-col class="form-layout-container" v-show="detailsModel.grouppanel2.visible" :style="{}"  :lg="{ span: 24, offset: 0 }">
+    <app-form-group :model="detailsModel.grouppanel2" layoutType="TABLE_24COL" titleStyle="" class='' :uiActionGroup="detailsModel.grouppanel2.uiActionGroup" @groupuiactionclick="groupUIActionClick($event)" :caption="$t('entities.eamworkorder.main_form.details.grouppanel2')" :isShowCaption="true" uiStyle="DEFAULT" :titleBarCloseMode="0" :isInfoGroupMode="false" >    
+    <app-form-group-data-panel slot="dataInfoPanel" :model="detailsModel.grouppanel2" :data="data" :context="context" :viewparams="viewparams"/>
     <row>
-            
+        <i-col class="form-layout-container" v-show="detailsModel.wodate.visible" :style="{}"  :md="{ span: 12, offset: 0 }" :lg="{ span: 8, offset: 0 }" :xl="{ span: 6, offset: 0 }">
+    <app-form-item name='wodate' :itemRules="this.rules.wodate" class='' :caption="$t('entities.eamworkorder.main_form.details.wodate')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.wodate.error" :isEmptyCaption="false" labelPos="LEFT">
+    <date-picker type="datetime" :transfer="true" format="yyyy-MM-dd HH:mm:ss" placeholder="璇烽€夋嫨鏃堕棿..." :value="data.wodate" :disabled="detailsModel.wodate.disabled" style="min-width: 150px; width:160px;" @on-change="(val1, val2) => { this.data.wodate = val1 }"></date-picker>
+
+</app-form-item>
+
+</i-col>
+<i-col class="form-layout-container" v-show="detailsModel.begintime.visible" :style="{}"  :md="{ span: 12, offset: 0 }" :lg="{ span: 8, offset: 0 }" :xl="{ span: 6, offset: 0 }">
+    <app-form-item name='begintime' :itemRules="this.rules.begintime" class='' :caption="$t('entities.eamworkorder.main_form.details.begintime')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.begintime.error" :isEmptyCaption="false" labelPos="LEFT">
+    <date-picker type="datetime" :transfer="true" format="yyyy-MM-dd HH:mm:ss" placeholder="璇烽€夋嫨鏃堕棿..." :value="data.begintime" :disabled="detailsModel.begintime.disabled" style="min-width: 150px; width:160px;" @on-change="(val1, val2) => { this.data.begintime = val1 }"></date-picker>
+
+</app-form-item>
+
+</i-col>
+<i-col class="form-layout-container" v-show="detailsModel.endtime.visible" :style="{}"  :md="{ span: 12, offset: 0 }" :lg="{ span: 8, offset: 0 }" :xl="{ span: 6, offset: 0 }">
+    <app-form-item name='endtime' :itemRules="this.rules.endtime" class='' :caption="$t('entities.eamworkorder.main_form.details.endtime')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.endtime.error" :isEmptyCaption="false" labelPos="LEFT">
+    <date-picker type="datetime" :transfer="true" format="yyyy-MM-dd HH:mm:ss" placeholder="璇烽€夋嫨鏃堕棿..." :value="data.endtime" :disabled="detailsModel.endtime.disabled" style="min-width: 150px; width:160px;" @on-change="(val1, val2) => { this.data.endtime = val1 }"></date-picker>
+
+</app-form-item>
+
+</i-col>
+<i-col class="form-layout-container" v-show="detailsModel.worklength.visible" :style="{}"  :md="{ span: 12, offset: 0 }" :lg="{ span: 8, offset: 0 }" :xl="{ span: 6, offset: 0 }">
+    <app-form-item name='worklength' :itemRules="this.rules.worklength" class='' :caption="$t('entities.eamworkorder.main_form.details.worklength')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.worklength.error" :isEmptyCaption="false" labelPos="LEFT">
+    <input-box 
+    v-model="data.worklength"  
+    @enter="onEnter($event)"  
+     unit=""  
+    :disabled="detailsModel.worklength.disabled" 
+    type='number' 
+    :precision="2"
+    style="">
+</input-box>
+
+</app-form-item>
+
+</i-col>
+    
     </row>
 </app-form-group>
 
 </i-col>
 
 
-            </tab-pane> 
-    </tabs>
     </row>
 </i-form>
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-base.tsx b/app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-base.tsx
new file mode 100644
index 0000000..266eaad
--- /dev/null
+++ b/app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-base.tsx
@@ -0,0 +1,265 @@
+import { Prop, Provide, Emit, Model } from 'vue-property-decorator';
+import { Subject, Subscription } from 'rxjs';
+import { Watch, MainControlBase } from '@/studio-core';
+import EAMWorkOrderService from '@/service/eamwork-order/eamwork-order-service';
+import PickupViewpickupviewpanelService from './pickup-viewpickupviewpanel-pickupviewpanel-service';
+import EAMWorkOrderUIService from '@/uiservice/eamwork-order/eamwork-order-ui-service';
+import PickupViewpickupviewpanelModel from './pickup-viewpickupviewpanel-pickupviewpanel-model';
+
+
+/**
+ * pickupviewpanel閮ㄤ欢鍩虹被
+ *
+ * @export
+ * @class MainControlBase
+ * @extends {PickupViewpickupviewpanelPickupviewpanelBase}
+ */
+export class PickupViewpickupviewpanelPickupviewpanelBase extends MainControlBase {
+
+    /**
+     * 鑾峰彇閮ㄤ欢绫诲瀷
+     *
+     * @protected
+     * @type {string}
+     * @memberof PickupViewpickupviewpanelPickupviewpanelBase
+     */
+    protected controlType: string = 'PICKUPVIEWPANEL';
+
+    /**
+     * 寤烘瀯閮ㄤ欢鏈嶅姟瀵硅薄
+     *
+     * @type {PickupViewpickupviewpanelService}
+     * @memberof PickupViewpickupviewpanelPickupviewpanelBase
+     */
+    public service: PickupViewpickupviewpanelService = new PickupViewpickupviewpanelService({ $store: this.$store });
+
+    /**
+     * 瀹炰綋鏈嶅姟瀵硅薄
+     *
+     * @type {EAMWorkOrderService}
+     * @memberof PickupViewpickupviewpanelPickupviewpanelBase
+     */
+    public appEntityService: EAMWorkOrderService = new EAMWorkOrderService({ $store: this.$store });
+
+    /**
+     * 搴旂敤瀹炰綋鍚嶇О
+     *
+     * @protected
+     * @type {string}
+     * @memberof PickupViewpickupviewpanelPickupviewpanelBase
+     */
+    protected appDeName: string = 'eamworkorder';
+
+    /**
+     * 搴旂敤瀹炰綋涓枃鍚嶇О
+     *
+     * @protected
+     * @type {string}
+     * @memberof PickupViewpickupviewpanelPickupviewpanelBase
+     */
+    protected appDeLogicName: string = '宸ュ崟';
+
+
+    /**
+     * 閫変腑鏁版嵁瀛楃涓�
+     *
+     * @type {string}
+     * @memberof PickupViewpickupviewpanel
+     */
+    @Prop() public selectedData?: string;
+
+    /**
+     * 鑾峰彇澶氶」鏁版嵁
+     *
+     * @returns {any[]}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public getDatas(): any[] {
+        return [];
+    }
+
+    /**
+     * 鑾峰彇鍗曢」鏍�
+     *
+     * @returns {*}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public getData(): any {
+        return {};
+    }
+
+    /**
+     * 瑙嗗浘鍚嶇О
+     *
+     * @type {*}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public view: any = {
+        viewname: 'eamwork-order-pickup-grid-view',
+        data: {},
+    }
+
+    /**
+     * 灞€閮ㄤ笂涓嬫枃
+     *
+     * @type {*}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public localContext: any = null;
+
+    /**
+     * 灞€閮ㄨ鍥惧弬鏁�
+     *
+     * @type {*}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public localViewParam: any = null;
+
+    /**
+     * 瑙嗗浘鏁版嵁
+     *
+     * @type {*}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public viewdata: string  = JSON.stringify(this.context);
+
+    /**
+     * 瑙嗗浘鍙傛暟
+     *
+     * @type {*}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public viewparam: string  = JSON.stringify(this.viewparams);
+
+    /**
+     * 鏄惁鏄剧ず鎸夐挳
+     *
+     * @type {boolean}
+     * @memberof PickupViewpickupviewpanel
+     */
+    @Prop({default: true}) public isShowButton!: boolean;
+
+    /**
+     * 鏄惁鍗曢€�
+     *
+     * @type {boolean}
+     * @memberof PickupViewpickupviewpanel
+     */
+    @Prop() public isSingleSelect?: boolean;
+
+    /**
+     * 鍒濆鍖栧畬鎴�
+     *
+     * @type {boolean}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public inited: boolean = false;
+
+    /**
+     * 瑙嗗浘鏁版嵁鍙樺寲
+     *
+     * @param {*} $event
+     * @memberof PickupViewpickupviewpanel
+     */
+    public onViewDatasChange($event: any): void {
+        if($event.length>0){
+          $event.forEach((item:any,index:any) => {
+              let srfmajortext = item['workordername'];
+              if(srfmajortext){
+                Object.assign($event[index],{srfmajortext: srfmajortext});
+              }
+          });
+        }
+        this.$emit('selectionchange', $event);
+    }
+
+    /**
+     * 瑙嗗浘鏁版嵁琚縺娲�
+     *
+     * @param {*} $event
+     * @memberof PickupViewpickupviewpanel
+     */
+    public viewDatasActivated($event: any): void {
+        this.$emit('activated', $event);
+    }
+
+    /**
+     * 瑙嗗浘鍔犺浇瀹屾垚
+     *
+     * @param {*} $event
+     * @memberof PickupViewpickupviewpanel
+     */
+    public onViewLoad($event: any): void {
+        this.$emit('load', $event);
+    }
+
+    /**
+     * vue 鐢熷懡鍛ㄦ湡
+     *
+     * @memberof PickupViewpickupviewpanel
+     */
+    public created() {
+        this.afterCreated();
+    }
+
+    /**
+     * 鎵цcreated鍚庣殑閫昏緫
+     *
+     *  @memberof PickupViewpickupviewpanel
+     */    
+    public afterCreated(){
+        this.initNavParam();
+        if (this.viewState) {
+            this.viewStateEvent = this.viewState.subscribe(({ tag, action, data }) => {
+                if (!Object.is(tag, this.name)) {
+                    return;
+                }
+                if (Object.is('load', action)) {
+                    this.viewdata = JSON.stringify(this.context);
+                    this.viewparam = JSON.stringify(Object.assign(data, this.viewparams));
+                    this.inited = true;
+                }
+            });
+        }
+    }
+
+    /**
+     * 鍒濆鍖栧鑸弬鏁�
+     *
+     *  @memberof PickupViewpickupviewpanel
+     */  
+    public initNavParam(){
+        if(this.localContext && Object.keys(this.localContext).length >0){
+            let _context:any = this.$util.computedNavData({},this.context,this.viewparams,this.localContext);
+            Object.assign(this.context,_context);
+        }
+        if(this.localViewParam && Object.keys(this.localViewParam).length >0){
+            let _param:any = this.$util.computedNavData({},this.context,this.viewparams,this.localViewParam);
+            Object.assign(this.viewparams,_param);
+        }
+        this.viewdata = JSON.stringify(this.context);
+        this.viewparam = JSON.stringify(this.viewparams);
+    }
+
+
+    /**
+     * vue 鐢熷懡鍛ㄦ湡
+     *
+     * @memberof PickupViewpickupviewpanel
+     */
+    public destroyed() {
+        this.afterDestroy();
+    }
+
+    /**
+     * 鎵цdestroyed鍚庣殑閫昏緫
+     *
+     * @memberof PickupViewpickupviewpanel
+     */
+    public afterDestroy() {
+        if (this.viewStateEvent) {
+            this.viewStateEvent.unsubscribe();
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-model.ts b/app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-model.ts
new file mode 100644
index 0000000..83b2d80
--- /dev/null
+++ b/app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-model.ts
@@ -0,0 +1,109 @@
+/**
+ * PickupViewpickupviewpanel 閮ㄤ欢妯″瀷
+ *
+ * @export
+ * @class PickupViewpickupviewpanelModel
+ */
+export default class PickupViewpickupviewpanelModel {
+
+  /**
+    * 鑾峰彇鏁版嵁椤归泦鍚�
+    *
+    * @returns {any[]}
+    * @memberof PickupViewpickupviewpanelModel
+    */
+  public getDataItems(): any[] {
+    return [
+      {
+        name: 'eamworkorder',
+        prop: 'workorderid',
+      },
+      {
+        name: 'workordername',
+      },
+      {
+        name: 'createdate',
+      },
+      {
+        name: 'createman',
+      },
+      {
+        name: 'updatedate',
+      },
+      {
+        name: 'updateman',
+      },
+      {
+        name: 'eamwotypeid',
+      },
+      {
+        name: 'assetid',
+      },
+      {
+        name: 'eamlocationid',
+      },
+      {
+        name: 'pworkorderid',
+      },
+      {
+        name: 'wooriginid',
+      },
+      {
+        name: 'wonumber',
+      },
+      {
+        name: 'mdate',
+      },
+      {
+        name: 'wodate',
+      },
+      {
+        name: 'begintime',
+      },
+      {
+        name: 'endtime',
+      },
+      {
+        name: 'eamservicelevelid',
+      },
+      {
+        name: 'worklength',
+      },
+      {
+        name: 'assetname',
+      },
+      {
+        name: 'eamlocationname',
+      },
+      {
+        name: 'eamservicelevelname',
+      },
+      {
+        name: 'wooriginname',
+      },
+      {
+        name: 'eamwotypename',
+      },
+      {
+        name: 'pworkordername',
+      },
+      {
+        name: 'description',
+      },
+      {
+        name: 'orgid',
+      },
+      {
+        name: 'orgname',
+      },
+      {
+        name: 'deptid',
+      },
+      {
+        name: 'deptname',
+      },
+    ]
+  }
+
+
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-service.ts b/app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-service.ts
new file mode 100644
index 0000000..40156ed
--- /dev/null
+++ b/app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-service.ts
@@ -0,0 +1,11 @@
+import { Http } from '@/utils';
+import ControlService from '@/widgets/control-service';
+
+/**
+ * PickupViewpickupviewpanel 閮ㄤ欢鏈嶅姟瀵硅薄
+ *
+ * @export
+ * @class PickupViewpickupviewpanelService
+ */
+export default class PickupViewpickupviewpanelService extends ControlService {
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.html b/app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.html
new file mode 100644
index 0000000..04586a4
--- /dev/null
+++ b/app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.html
@@ -0,0 +1,16 @@
+<div class='pickupviewpanel'>
+    <component 
+        v-if="inited && view.viewname && !Object.is(view.viewname, '')" 
+        :is="view.viewname"
+        class="viewcontainer3"
+        :viewdata="viewdata"
+        :viewparam="viewparam"
+        :viewDefaultUsage="false"
+        :isSingleSelect="isSingleSelect"
+        :selectedData="selectedData"
+        :isShowButton="isShowButton"
+        @viewdataschange="onViewDatasChange.apply(_self, arguments)"
+        @viewdatasactivated="viewDatasActivated.apply(_self, arguments)"
+        @viewload="onViewLoad.apply(_self, arguments)">
+    </component>
+</div>
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.less b/app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.less
new file mode 100644
index 0000000..e1cc9ac
--- /dev/null
+++ b/app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.less
@@ -0,0 +1,3 @@
+.pickupviewpanel{
+  width: 100%;
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue b/app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue
new file mode 100644
index 0000000..a8b2ec5
--- /dev/null
+++ b/app_AssetManagement/src/widgets/eamwork-order/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue
@@ -0,0 +1,22 @@
+<template src="./pickup-viewpickupviewpanel-pickupviewpanel.html"/>
+<script lang='tsx'>
+import { Component } from 'vue-property-decorator';
+import { VueLifeCycleProcessing } from '@/studio-core';
+import { PickupViewpickupviewpanelPickupviewpanelBase } from './pickup-viewpickupviewpanel-pickupviewpanel-base';
+ 
+
+/**
+ * pickupviewpanel閮ㄤ欢
+ *
+ * @export
+ * @class PickupViewpickupviewpanelPickupviewpanel
+ * @extends {PickupViewpickupviewpanelPickupviewpanelBase}
+ */
+@Component({
+    components: {
+         
+    }
+})
+@VueLifeCycleProcessing()
+export default class PickupViewpickupviewpanelPickupviewpanel extends PickupViewpickupviewpanelPickupviewpanelBase { }
+</script>
diff --git a/app_AssetManagement/src/widgets/woorigin/default-searchform/default-searchform-base.tsx b/app_AssetManagement/src/widgets/woorigin/default-searchform/default-searchform-base.tsx
new file mode 100644
index 0000000..321e1ba
--- /dev/null
+++ b/app_AssetManagement/src/widgets/woorigin/default-searchform/default-searchform-base.tsx
@@ -0,0 +1,82 @@
+import { Prop, Provide, Emit, Model } from 'vue-property-decorator';
+import { Subject, Subscription } from 'rxjs';
+import { Watch, SearchFormControlBase } from '@/studio-core';
+import WOOriginService from '@/service/woorigin/woorigin-service';
+import DefaultService from './default-searchform-service';
+import WOOriginUIService from '@/uiservice/woorigin/woorigin-ui-service';
+import { FormButtonModel, FormPageModel, FormItemModel, FormDRUIPartModel, FormPartModel, FormGroupPanelModel, FormIFrameModel, FormRowItemModel, FormTabPageModel, FormTabPanelModel, FormUserControlModel } from '@/model/form-detail';
+import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
+
+
+/**
+ * searchform閮ㄤ欢鍩虹被
+ *
+ * @export
+ * @class SearchFormControlBase
+ * @extends {DefaultSearchFormBase}
+ */
+export class DefaultSearchFormBase extends SearchFormControlBase {
+
+    /**
+     * 鑾峰彇閮ㄤ欢绫诲瀷
+     *
+     * @protected
+     * @type {string}
+     * @memberof DefaultSearchFormBase
+     */
+    protected controlType: string = 'SEARCHFORM';
+
+    /**
+     * 寤烘瀯閮ㄤ欢鏈嶅姟瀵硅薄
+     *
+     * @type {DefaultService}
+     * @memberof DefaultSearchFormBase
+     */
+    public service: DefaultService = new DefaultService({ $store: this.$store });
+
+    /**
+     * 瀹炰綋鏈嶅姟瀵硅薄
+     *
+     * @type {WOOriginService}
+     * @memberof DefaultSearchFormBase
+     */
+    public appEntityService: WOOriginService = new WOOriginService({ $store: this.$store });
+
+    /**
+     * 搴旂敤瀹炰綋鍚嶇О
+     *
+     * @protected
+     * @type {string}
+     * @memberof DefaultSearchFormBase
+     */
+    protected appDeName: string = 'woorigin';
+
+    /**
+     * 搴旂敤瀹炰綋涓枃鍚嶇О
+     *
+     * @protected
+     * @type {string}
+     * @memberof DefaultSearchFormBase
+     */
+    protected appDeLogicName: string = '宸ュ崟鏉ユ簮';
+
+    /**
+     * 琛ㄥ崟鏁版嵁瀵硅薄
+     *
+     * @type {*}
+     * @memberof DefaultSearchFormBase
+     */
+    public data: any = {
+    };
+
+    /**
+     * 璇︽儏妯″瀷闆嗗悎
+     *
+     * @type {*}
+     * @memberof DefaultSearchFormBase
+     */
+    public detailsModel: any = {
+        formpage1: new FormPageModel({ caption: '甯歌鏉′欢', detailType: 'FORMPAGE', name: 'formpage1', visible: true, isShowCaption: true, form: this })
+, 
+    };
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/woorigin/default-searchform/default-searchform-model.ts b/app_AssetManagement/src/widgets/woorigin/default-searchform/default-searchform-model.ts
new file mode 100644
index 0000000..c9c5858
--- /dev/null
+++ b/app_AssetManagement/src/widgets/woorigin/default-searchform/default-searchform-model.ts
@@ -0,0 +1,31 @@
+/**
+ * Default 閮ㄤ欢妯″瀷
+ *
+ * @export
+ * @class DefaultModel
+ */
+export default class DefaultModel {
+
+  /**
+  * 鑾峰彇鏁版嵁椤归泦鍚�
+  *
+  * @returns {any[]}
+  * @memberof DefaultModel
+  */
+  public getDataItems(): any[] {
+    return [
+      {
+        name: 'srfwfmemo',
+        prop: 'srfwfmemo',
+        dataType: 'TEXT',
+      },
+      // 鍓嶇鏂板淇敼鏍囪瘑锛屾柊澧炰负"0",淇敼涓�"1"鎴栨湭璁惧€�
+      {
+        name: 'srffrontuf',
+        prop: 'srffrontuf',
+        dataType: 'TEXT',
+      },
+    ]
+  }
+
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/woorigin/default-searchform/default-searchform-service.ts b/app_AssetManagement/src/widgets/woorigin/default-searchform/default-searchform-service.ts
new file mode 100644
index 0000000..48f844f
--- /dev/null
+++ b/app_AssetManagement/src/widgets/woorigin/default-searchform/default-searchform-service.ts
@@ -0,0 +1,388 @@
+import { Http,Util,Errorlog } from '@/utils';
+import ControlService from '@/widgets/control-service';
+import WOOriginService from '@/service/woorigin/woorigin-service';
+import DefaultModel from './default-searchform-model';
+
+
+/**
+ * Default 閮ㄤ欢鏈嶅姟瀵硅薄
+ *
+ * @export
+ * @class DefaultService
+ */
+export default class DefaultService extends ControlService {
+
+    /**
+     * 宸ュ崟鏉ユ簮鏈嶅姟瀵硅薄
+     *
+     * @type {WOOriginService}
+     * @memberof DefaultService
+     */
+    public appEntityService: WOOriginService = new WOOriginService({ $store: this.getStore() });
+
+    /**
+     * 璁剧疆浠庢暟鎹ā寮�
+     *
+     * @type {boolean}
+     * @memberof DefaultService
+     */
+    public setTempMode(){
+        this.isTempMode = false;
+    }
+
+    /**
+     * Creates an instance of DefaultService.
+     * 
+     * @param {*} [opts={}]
+     * @memberof DefaultService
+     */
+    constructor(opts: any = {}) {
+        super(opts);
+        this.model = new DefaultModel();
+    }
+
+    /**
+     * 澶勭悊鏁版嵁
+     *
+     * @private
+     * @param {Promise<any>} promise
+     * @returns {Promise<any>}
+     * @memberof DefaultService
+     */
+    private doItems(promise: Promise<any>, deKeyField: string, deName: string): Promise<any> {
+        return new Promise((resolve, reject) => {
+            promise.then((response: any) => {
+                if (response && response.status === 200) {
+                    const data = response.data;
+                    data.forEach((item:any,index:number) =>{
+                        item[deName] = item[deKeyField];
+                        data[index] = item;
+                    });
+                    resolve(data);
+                } else {
+                    reject([])
+                }
+            }).catch((response: any) => {
+                reject([])
+            });
+        });
+    }
+
+    /**
+     * 鑾峰彇璺ㄥ疄浣撴暟鎹泦鍚�
+     *
+     * @param {string} serviceName 鏈嶅姟鍚嶇О
+     * @param {string} interfaceName 鎺ュ彛鍚嶇О
+     * @param {*} data
+     * @param {boolean} [isloading]
+     * @returns {Promise<any[]>}
+     * @memberof  DefaultService
+     */
+    @Errorlog
+    public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> {
+        data.page = data.page ? data.page : 0;
+        data.size = data.size ? data.size : 1000;
+
+        return Promise.reject([])
+    }
+
+    /**
+     * 鍚姩宸ヤ綔娴�
+     *
+     * @param {string} action
+     * @param {*} [context={}]
+     * @param {*} [data={}]
+     * @param {boolean} [isloading]
+     * @param {*} [localdata]
+     * @returns {Promise<any>}
+     * @memberof DefaultService
+     */
+    @Errorlog
+    public wfstart(action: string,context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise<any> {
+        data = this.handleWFData(data);
+        context = this.handleRequestData(action,context,data).context;
+        return new Promise((resolve: any, reject: any) => {
+            let result: Promise<any>;
+            const _appEntityService: any = this.appEntityService;
+            if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
+                result = _appEntityService[action](context,data, isloading,localdata);
+            } else {
+                result = this.appEntityService.WFStart(context,data, isloading,localdata);
+            }
+            result.then((response) => {
+                this.handleResponse(action, response);
+                resolve(response);
+            }).catch(response => {
+                reject(response);
+            });
+        });
+    }
+
+    /**
+     * 鎻愪氦宸ヤ綔娴�
+     *
+     * @param {string} action
+     * @param {*} [context={}]
+     * @param {*} [data={}]
+     * @param {boolean} [isloading]
+     * @param {*} [localdata]
+     * @returns {Promise<any>}
+     * @memberof DefaultService
+     */
+    @Errorlog
+    public wfsubmit(action: string,context: any = {}, data: any = {}, isloading?: boolean,localdata?:any): Promise<any> {
+        data = this.handleWFData(data,true);
+        context = this.handleRequestData(action,context,data,true).context;
+        return new Promise((resolve: any, reject: any) => {
+            let result: Promise<any>;
+            const _appEntityService: any = this.appEntityService;
+            if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
+                result = _appEntityService[action](context,data, isloading,localdata);
+            } else {
+                result = this.appEntityService.WFSubmit(context,data, isloading,localdata);
+            }
+            result.then((response) => {
+                this.handleResponse(action, response);
+                resolve(response);
+            }).catch(response => {
+                reject(response);
+            });
+        });
+    }
+
+    /**
+     * 娣诲姞鏁版嵁
+     *
+     * @param {string} action
+     * @param {*} [context={}]
+     * @param {*} [data={}]
+     * @param {boolean} [isloading]
+     * @returns {Promise<any>}
+     * @memberof DefaultService
+     */
+    @Errorlog
+    public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
+        const {data:Data,context:Context} = this.handleRequestData(action,context,data);
+        return new Promise((resolve: any, reject: any) => {
+            let result: Promise<any>;
+            const _appEntityService: any = this.appEntityService;
+            if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
+                result = _appEntityService[action](Context,Data, isloading);
+            } else {
+                result = this.appEntityService.Create(Context,Data, isloading);
+            }
+            result.then((response) => {
+                this.handleResponse(action, response);
+                resolve(response);
+            }).catch(response => {
+                reject(response);
+            });
+        });
+    }
+
+    /**
+     * 鍒犻櫎鏁版嵁
+     *
+     * @param {string} action
+     * @param {*} [context={}]
+     * @param {*} [data={}]
+     * @param {boolean} [isloading]
+     * @returns {Promise<any>}
+     * @memberof DefaultService
+     */
+    @Errorlog
+    public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
+        const {data:Data,context:Context} = this.handleRequestData(action,context,data);
+        return new Promise((resolve: any, reject: any) => {
+            let result: Promise<any>;
+            const _appEntityService: any = this.appEntityService;
+            if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
+                result = _appEntityService[action](Context,Data, isloading);
+            } else {
+                result = this.appEntityService.Remove(Context,Data, isloading);
+            }
+            result.then((response) => {
+                resolve(response);
+            }).catch(response => {
+                reject(response);
+            });
+        });
+    }
+
+    /**
+     * 淇敼鏁版嵁
+     *
+     * @param {string} action
+     * @param {*} [context={}]
+     * @param {*} [data={}]
+     * @param {boolean} [isloading]
+     * @returns {Promise<any>}
+     * @memberof DefaultService
+     */
+    @Errorlog
+    public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
+        const {data:Data,context:Context} = this.handleRequestData(action,context,data);
+        return new Promise((resolve: any, reject: any) => {
+            let result: Promise<any>;
+            const _appEntityService: any = this.appEntityService;
+            if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
+                result = _appEntityService[action](Context,Data, isloading);
+            } else {
+                result = this.appEntityService.Update(Context,Data, isloading);
+            }
+            result.then((response) => {
+                this.handleResponse(action, response);
+                resolve(response);
+            }).catch(response => {
+                reject(response);
+            });
+        });
+    }
+
+    /**
+     * 鏌ヨ鏁版嵁
+     *
+     * @param {string} action
+     * @param {*} [context={}]
+     * @param {*} [data={}]
+     * @param {boolean} [isloading]
+     * @returns {Promise<any>}
+     * @memberof DefaultService
+     */
+    @Errorlog
+    public get(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
+        const {data:Data,context:Context} = this.handleRequestData(action,context,data);
+        return new Promise((resolve: any, reject: any) => {
+            let result: Promise<any>;
+            const _appEntityService: any = this.appEntityService;
+            if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
+                result = _appEntityService[action](Context,Data, isloading);
+            } else {
+                result = this.appEntityService.Get(Context,Data, isloading);
+            }
+            result.then((response) => {
+                this.handleResponse(action, response);
+                resolve(response);
+            }).catch(response => {
+                reject(response);
+            });
+        });
+    }
+
+    /**
+     * 鍔犺浇鑽夌ǹ
+     *
+     * @param {string} action
+     * @param {*} [context={}]
+     * @param {*} [data={}]
+     * @param {boolean} [isloading]
+     * @returns {Promise<any>}
+     * @memberof DefaultService
+     */
+    @Errorlog
+    public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise<any> {
+        const {data:Data,context:Context} = this.handleRequestData(action,context,data);
+        return new Promise((resolve: any, reject: any) => {
+            let result: Promise<any>;
+            const _appEntityService: any = this.appEntityService;
+            if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
+                result = _appEntityService[action](Context,Data, isloading);
+            } else {
+                result = this.appEntityService.GetDraft(Context,Data, isloading);
+            }
+            result.then((response) => {
+                this.handleResponse(action, response, true);
+                resolve(response);
+            }).catch(response => {
+                reject(response);
+            });
+        });
+    }
+
+     /**
+     * 鍓嶅彴閫昏緫
+     * @param {string} action
+     * @param {*} [context={}]
+     * @param {*} [data={}]
+     * @param {boolean} [isloading]
+     * @returns {Promise<any>}
+     * @memberof DefaultService
+     */
+    @Errorlog
+    public frontLogic(action:string,context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
+        const {data:Data,context:Context} = this.handleRequestData(action,context,data);
+        return new Promise((resolve: any, reject: any)=>{
+            let result: Promise<any>;
+            const _appEntityService: any = this.appEntityService;
+            if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
+                result = _appEntityService[action](Context,Data, isloading);
+            } else {
+                return Promise.reject({ status: 500, data: { title: '澶辫触', message: '绯荤粺寮傚父' } });
+            }
+            result.then((response) => {
+                this.handleResponse(action, response,true);
+                resolve(response);
+            }).catch(response => {
+                reject(response);
+            });
+        })
+    }
+
+    /**
+     * 澶勭悊璇锋眰鏁版嵁
+     * 
+     * @param action 琛屼负 
+     * @param data 鏁版嵁
+     * @memberof DefaultService
+     */
+    public handleRequestData(action: string,context:any, data: any = {},isMerge:boolean = false){
+        let mode: any = this.getMode();
+        if (!mode && mode.getDataItems instanceof Function) {
+            return data;
+        }
+        let formItemItems: any[] = mode.getDataItems();
+        let requestData:any = {};
+        if(isMerge && (data && data.viewparams)){
+            Object.assign(requestData,data.viewparams);
+        }
+        formItemItems.forEach((item:any) =>{
+            if(item && item.dataType && Object.is(item.dataType,'FONTKEY')){
+                if(item && item.prop){
+                    requestData[item.prop] = context[item.name];
+                }
+            }else{
+                if(item && item.prop){
+                    requestData[item.prop] = data[item.name];
+                }
+            }
+        });
+        let tempContext:any = JSON.parse(JSON.stringify(context));
+        if(tempContext && tempContext.srfsessionid){
+            tempContext.srfsessionkey = tempContext.srfsessionid;
+            delete tempContext.srfsessionid;
+        }
+        return {context:tempContext,data:requestData};
+    }
+
+    /**
+     * 閫氳繃灞炴€у悕绉拌幏鍙栬〃鍗曢」鍚嶇О
+     * 
+     * @param name 瀹炰綋灞炴€у悕绉� 
+     * @memberof DefaultService
+     */
+    public getItemNameByDeName(name:string) :string{
+        let itemName = name;
+        let mode: any = this.getMode();
+        if (!mode && mode.getDataItems instanceof Function) {
+            return name;
+        }
+        let formItemItems: any[] = mode.getDataItems();
+        formItemItems.forEach((item:any)=>{
+            if(item.prop === name){
+                itemName = item.name;
+            }
+        });
+        return itemName.trim();
+    }
+
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/woorigin/default-searchform/default-searchform.html b/app_AssetManagement/src/widgets/woorigin/default-searchform/default-searchform.html
new file mode 100644
index 0000000..d103503
--- /dev/null
+++ b/app_AssetManagement/src/widgets/woorigin/default-searchform/default-searchform.html
@@ -0,0 +1,9 @@
+<i-form :model="this.data" class='app-search-form' ref='searchform' style="">
+  <input style="display:none;"/>
+  <div class="search-button">
+    <i-button size="small" type="primary" ghost @click="onSearch.apply(_self, arguments)">{{$t('app.searchButton.search')}}</i-button>
+    <i-button size="small" type="default" ghost @click="onReset.apply(_self, arguments)">{{this.$t('app.searchButton.reset')}}</i-button>
+  </div>
+  <div class="form-content">
+          </div>
+</i-form>
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/woorigin/default-searchform/default-searchform.vue b/app_AssetManagement/src/widgets/woorigin/default-searchform/default-searchform.vue
new file mode 100644
index 0000000..d482c73
--- /dev/null
+++ b/app_AssetManagement/src/widgets/woorigin/default-searchform/default-searchform.vue
@@ -0,0 +1,22 @@
+<template src="./default-searchform.html"/>
+<script lang='tsx'>
+import { Component } from 'vue-property-decorator';
+import { VueLifeCycleProcessing } from '@/studio-core';
+import { DefaultSearchFormBase } from './default-searchform-base';
+ 
+
+/**
+ * searchform閮ㄤ欢
+ *
+ * @export
+ * @class DefaultSearchForm
+ * @extends {DefaultSearchFormBase}
+ */
+@Component({
+    components: {
+         
+    }
+})
+@VueLifeCycleProcessing()
+export default class DefaultSearchForm extends DefaultSearchFormBase { }
+</script>
diff --git a/app_AssetManagement/src/widgets/woorigin/main-grid/main-grid-base.tsx b/app_AssetManagement/src/widgets/woorigin/main-grid/main-grid-base.tsx
new file mode 100644
index 0000000..aa516a9
--- /dev/null
+++ b/app_AssetManagement/src/widgets/woorigin/main-grid/main-grid-base.tsx
@@ -0,0 +1,143 @@
+import { Prop, Provide, Emit, Model } from 'vue-property-decorator';
+import { Subject, Subscription } from 'rxjs';
+import { Watch, GridControlBase } from '@/studio-core';
+import WOOriginService from '@/service/woorigin/woorigin-service';
+import MainService from './main-grid-service';
+import WOOriginUIService from '@/uiservice/woorigin/woorigin-ui-service';
+import { FormItemModel } from '@/model/form-detail';
+
+
+/**
+ * grid閮ㄤ欢鍩虹被
+ *
+ * @export
+ * @class GridControlBase
+ * @extends {MainGridBase}
+ */
+export class MainGridBase extends GridControlBase {
+
+    /**
+     * 鑾峰彇閮ㄤ欢绫诲瀷
+     *
+     * @protected
+     * @type {string}
+     * @memberof MainGridBase
+     */
+    protected controlType: string = 'GRID';
+
+    /**
+     * 寤烘瀯閮ㄤ欢鏈嶅姟瀵硅薄
+     *
+     * @type {MainService}
+     * @memberof MainGridBase
+     */
+    public service: MainService = new MainService({ $store: this.$store });
+
+    /**
+     * 瀹炰綋鏈嶅姟瀵硅薄
+     *
+     * @type {WOOriginService}
+     * @memberof MainGridBase
+     */
+    public appEntityService: WOOriginService = new WOOriginService({ $store: this.$store });
+
+    /**
+     * 搴旂敤瀹炰綋鍚嶇О
+     *
+     * @protected
+     * @type {string}
+     * @memberof MainGridBase
+     */
+    protected appDeName: string = 'woorigin';
+
+    /**
+     * 搴旂敤瀹炰綋涓枃鍚嶇О
+     *
+     * @protected
+     * @type {string}
+     * @memberof MainGridBase
+     */
+    protected appDeLogicName: string = '宸ュ崟鏉ユ簮';
+
+    /**
+     * 鐣岄潰UI鏈嶅姟瀵硅薄
+     *
+     * @type {WOOriginUIService}
+     * @memberof MainBase
+     */  
+    public appUIService:WOOriginUIService = new WOOriginUIService(this.$store);
+
+    /**
+     * 鐣岄潰琛屼负妯″瀷
+     *
+     * @type {*}
+     * @memberof MainBase
+     */  
+    public ActionModel: any = {
+    };
+
+    /**
+     * 鏈湴缂撳瓨鏍囪瘑
+     *
+     * @protected
+     * @type {string}
+     * @memberof MainBase
+     */
+    protected localStorageTag: string = 'eamwoorigin_main_grid';
+
+    /**
+     * 鎵€鏈夊垪鎴愬憳
+     *
+     * @type {any[]}
+     * @memberof MainGridBase
+     */
+    public allColumns: any[] = [
+    ]
+
+    /**
+     * 鑾峰彇琛ㄦ牸琛屾ā鍨�
+     *
+     * @type {*}
+     * @memberof MainGridBase
+     */
+    public getGridRowModel(){
+        return {
+          srfkey: new FormItemModel(),
+        }
+    }
+
+    /**
+     * 灞炴€у€艰鍒�
+     *
+     * @type {*}
+     * @memberof MainGridBase
+     */
+    public rules: any = {
+        srfkey: [
+            { required: false, validator: (rule:any, value:any, callback:any) => { return (rule.required && (value === null || value === undefined || value === "")) ? false : true;}, message: '宸ュ崟鏉ユ簮鏍囪瘑 鍊间笉鑳戒负绌�', trigger: 'change' },
+            { required: false, validator: (rule:any, value:any, callback:any) => { return (rule.required && (value === null || value === undefined || value === "")) ? false : true;}, message: '宸ュ崟鏉ユ簮鏍囪瘑 鍊间笉鑳戒负绌�', trigger: 'blur' },
+        ],
+    }
+
+    /**
+     * 鑾峰彇瀵瑰簲鍒梒lass
+     *
+     * @type {*}
+     * @memberof MainBase
+     */
+    public hasRowEdit: any = {
+    };
+
+    /**
+     * 鑾峰彇瀵瑰簲鍒梒lass
+     *
+     * @param {*} $args row 琛屾暟鎹紝column 鍒楁暟鎹紝rowIndex 琛岀储寮曪紝鍒楃储寮�
+     * @returns {void}
+     * @memberof MainBase
+     */
+    public getCellClassName(args: {row: any, column: any, rowIndex: number, columnIndex: number}): any {
+        return ( this.hasRowEdit[args.column.property] && this.actualIsOpenEdit ) ? "edit-cell" : "info-cell";
+    }
+
+
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/woorigin/main-grid/main-grid-model.ts b/app_AssetManagement/src/widgets/woorigin/main-grid/main-grid-model.ts
new file mode 100644
index 0000000..2e1a816
--- /dev/null
+++ b/app_AssetManagement/src/widgets/woorigin/main-grid/main-grid-model.ts
@@ -0,0 +1,94 @@
+/**
+ * Main 閮ㄤ欢妯″瀷
+ *
+ * @export
+ * @class MainModel
+ */
+export default class MainModel {
+
+	/**
+	 * 鏄惁鏄疄浣撴暟鎹鍑�
+	 *
+	 * @returns {any[]}
+	 * @memberof MainGridMode
+	 */
+	public isDEExport: boolean = false;
+
+	/**
+	 * 鑾峰彇鏁版嵁椤归泦鍚�
+	 *
+	 * @returns {any[]}
+	 * @memberof MainGridMode
+	 */
+	public getDataItems(): any[] {
+    if(this.isDEExport){
+		  return [
+      ]
+    }else{
+		  return [
+        {
+          name: 'eamwoorigintype',
+          prop: 'woorigintype',
+          dataType: 'SSCODELIST',
+        },
+        {
+          name: 'srfmajortext',
+          prop: 'wooriginname',
+          dataType: 'TEXT',
+        },
+        {
+          name: 'srfdatatype',
+          prop: 'woorigintype',
+          dataType: 'SSCODELIST',
+        },
+        {
+          name: 'srfdataaccaction',
+          prop: 'wooriginid',
+          dataType: 'GUID',
+        },
+        {
+          name: 'srfkey',
+          prop: 'wooriginid',
+          dataType: 'GUID',
+          isEditable:true
+        },
+        {
+          name: 'woorigin',
+          prop: 'wooriginid',
+        },
+
+        {
+          name:'size',
+          prop:'size'
+        },
+        {
+          name:'query',
+          prop:'query'
+        },
+        {
+          name:'filter',
+          prop:'filter'
+        },
+        {
+          name:'page',
+          prop:'page'
+        },
+        {
+          name:'sort',
+          prop:'sort'
+        },
+        {
+          name:'srfparentdata',
+          prop:'srfparentdata'
+        },
+        // 鍓嶇鏂板淇敼鏍囪瘑锛屾柊澧炰负"0",淇敼涓�"1"鎴栨湭璁惧€�
+        {
+          name: 'srffrontuf',
+          prop: 'srffrontuf',
+          dataType: 'TEXT',
+        },
+      ]
+    }
+  }
+
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/woorigin/main-grid/main-grid-service.ts b/app_AssetManagement/src/widgets/woorigin/main-grid/main-grid-service.ts
new file mode 100644
index 0000000..ac772d8
--- /dev/null
+++ b/app_AssetManagement/src/widgets/woorigin/main-grid/main-grid-service.ts
@@ -0,0 +1,345 @@
+import { Http,Util,Errorlog } from '@/utils';
+import ControlService from '@/widgets/control-service';
+import WOOriginService from '@/service/woorigin/woorigin-service';
+import MainModel from './main-grid-model';
+
+
+/**
+ * Main 閮ㄤ欢鏈嶅姟瀵硅薄
+ *
+ * @export
+ * @class MainService
+ */
+export default class MainService extends ControlService {
+
+    /**
+     * 宸ュ崟鏉ユ簮鏈嶅姟瀵硅薄
+     *
+     * @type {WOOriginService}
+     * @memberof MainService
+     */
+    public appEntityService: WOOriginService = new WOOriginService({ $store: this.getStore() });
+
+    /**
+     * 璁剧疆浠庢暟鎹ā寮�
+     *
+     * @type {boolean}
+     * @memberof MainService
+     */
+    public setTempMode(){
+        this.isTempMode = false;
+    }
+
+    /**
+     * Creates an instance of MainService.
+     * 
+     * @param {*} [opts={}]
+     * @memberof MainService
+     */
+    constructor(opts: any = {}) {
+        super(opts);
+        this.model = new MainModel();
+    }
+
+
+    /**
+     * 澶勭悊鏁版嵁
+     *
+     * @public
+     * @param {Promise<any>} promise
+     * @returns {Promise<any>}
+     * @memberof MainService
+     */
+    public doItems(promise: Promise<any>, deKeyField: string, deName: string): Promise<any> {
+        return new Promise((resolve, reject) => {
+            promise.then((response: any) => {
+                if (response && response.status === 200) {
+                    const data = response.data;
+                    data.forEach((item:any,index:number) =>{
+                        item[deName] = item[deKeyField];
+                        data[index] = item;
+                    });
+                    resolve(data);
+                } else {
+                    reject([])
+                }
+            }).catch((response: any) => {
+                reject([])
+            });
+        });
+    }
+
+    /**
+     * 鑾峰彇璺ㄥ疄浣撴暟鎹泦鍚�
+     *
+     * @param {string} serviceName 鏈嶅姟鍚嶇О
+     * @param {string} interfaceName 鎺ュ彛鍚嶇О
+     * @param {*} data
+     * @param {boolean} [isloading]
+     * @returns {Promise<any[]>}
+     * @memberof  MainService
+     */
+    @Errorlog
+    public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> {
+        data.page = data.page ? data.page : 0;
+        data.size = data.size ? data.size : 1000;
+
+        return Promise.reject([])
+    }
+
+    /**
+     * 娣诲姞鏁版嵁
+     *
+     * @param {string} action
+     * @param {*} [context={}]
+     * @param {*} [data={}]
+     * @param {boolean} [isloading]
+     * @returns {Promise<any>}
+     * @memberof MainService
+     */
+    @Errorlog
+    public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
+        const {data:Data,context:Context} = this.handleRequestDataWithUpdate(action,context,data,true);
+        return new Promise((resolve: any, reject: any) => {
+            const _appEntityService: any = this.appEntityService;
+            let result: Promise<any>;
+            if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
+                result = _appEntityService[action](Context,Data, isloading);
+            }else{
+                result =_appEntityService.Create(Context,Data, isloading);
+            }
+            result.then((response) => {
+                this.handleResponse(action, response);
+                resolve(response);
+            }).catch(response => {
+                reject(response);
+            });      
+        });
+    }
+
+    /**
+     * 鍒犻櫎鏁版嵁
+     *
+     * @param {string} action
+     * @param {*} [context={}]
+     * @param {*} [data={}]
+     * @param {boolean} [isloading]
+     * @returns {Promise<any>}
+     * @memberof MainService
+     */
+    @Errorlog
+    public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
+        const {data:Data,context:Context} = this.handleRequestData(action,context,data,true);
+        return new Promise((resolve: any, reject: any) => {
+            const _appEntityService: any = this.appEntityService;
+            let result: Promise<any>;
+            if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
+                result = _appEntityService[action](Context,Data, isloading);
+            }else{
+                result =_appEntityService.Remove(Context,Data, isloading);
+            }
+            result.then((response) => {
+                resolve(response);
+            }).catch(response => {
+                reject(response);
+            });      
+        });
+    }
+
+    /**
+     * 淇敼鏁版嵁
+     *
+     * @param {string} action
+     * @param {*} [context={}]
+     * @param {*} [data={}]
+     * @param {boolean} [isloading]
+     * @returns {Promise<any>}
+     * @memberof MainService
+     */
+    @Errorlog
+    public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
+        const {data:Data,context:Context} = this.handleRequestDataWithUpdate(action,context,data,true);
+        return new Promise((resolve: any, reject: any) => {
+            const _appEntityService: any = this.appEntityService;
+            let result: Promise<any>;
+            if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
+                result = _appEntityService[action](Context,Data,isloading);
+            }else{
+                result =_appEntityService.Update(Context,Data,isloading);
+            }
+            result.then((response) => {
+                this.handleResponse(action, response);
+                resolve(response);
+            }).catch(response => {
+                reject(response);
+            });      
+        });
+    }
+
+    /**
+     * 鑾峰彇鏁版嵁
+     *
+     * @param {string} action
+     * @param {*} [context={}]
+     * @param {*} [data={}]
+     * @param {boolean} [isloading]
+     * @returns {Promise<any>}
+     * @memberof MainService
+     */
+    @Errorlog
+    public get(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
+        const {data:Data,context:Context} = this.handleRequestData(action,context,data,true);
+        return new Promise((resolve: any, reject: any) => {
+            let result: Promise<any>;
+            const _appEntityService: any = this.appEntityService;
+            if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
+                result = _appEntityService[action](Context,Data, isloading);
+            } else {
+                result = this.appEntityService.Get(Context,Data, isloading);
+            }
+            result.then((response) => {
+                //澶勭悊杩斿洖鏁版嵁锛岃ˉ鍏呭垽鏂爣璇�
+                if(response.data){
+                    Object.assign(response.data,{srfuf:0});
+                }
+                resolve(response);
+            }).catch(response => {
+                reject(response);
+            });
+        });
+    }
+
+    /**
+     * 鏌ヨ鏁版嵁
+     *
+     * @param {string} action
+     * @param {*} [context={}]
+     * @param {*} [data={}]
+     * @param {boolean} [isloading]
+     * @returns {Promise<any>}
+     * @memberof MainService
+     */
+    @Errorlog
+    public search(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
+        const {data:Data,context:Context} = this.handleRequestData(action,context,data,true);
+        return new Promise((resolve: any, reject: any) => {
+            const _appEntityService: any = this.appEntityService;
+            let result: Promise<any>;
+            if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
+                result = _appEntityService[action](Context,Data, isloading);
+            }else{
+                result =_appEntityService.FetchDefault(Context,Data, isloading);
+            }
+            result.then((response) => {
+                this.handleResponse(action, response);
+                resolve(response);
+            }).catch(response => {
+                reject(response);
+            });      
+        });
+    }
+
+
+    /**
+     * 鍔犺浇鑽夌ǹ
+     *
+     * @param {string} action
+     * @param {*} [context={}]
+     * @param {*} [data={}]
+     * @param {boolean} [isloading]
+     * @returns {Promise<any>}
+     * @memberof MainService
+     */
+    @Errorlog
+    public loadDraft(action: string, context: any = {}, data: any = {}, isloading?: boolean): Promise<any> {
+        const {data:Data,context:Context} = this.handleRequestData(action,context,data,true);
+        return new Promise((resolve: any, reject: any) => {
+            let result: Promise<any>;
+            const _appEntityService: any = this.appEntityService;
+            if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
+                result = _appEntityService[action](Context,Data, isloading);
+            } else {
+                result = this.appEntityService.GetDraft(Context,Data, isloading);
+            }
+            result.then((response) => {
+                //澶勭悊杩斿洖鏁版嵁锛岃ˉ鍏呭垽鏂爣璇�
+                if(response.data){
+                    Object.assign(response.data,{srfuf:'0'});
+                    //浠跨湡涓婚敭鏁版嵁
+                    response.data.wooriginid = Util.createUUID();
+                }
+                this.handleResponse(action, response, true);
+                resolve(response);
+            }).catch(response => {
+                reject(response);
+            });
+        });
+    }
+
+
+    /**
+     * 鍓嶅彴閫昏緫
+     * @param {string} action
+     * @param {*} [context={}]
+     * @param {*} [data={}]
+     * @param {boolean} [isloading]
+     * @returns {Promise<any>}
+     * @memberof MainService
+     */
+    @Errorlog
+    public frontLogic(action:string,context: any = {}, data: any = {}, isloading?: boolean): Promise<any> {
+        const {data:Data,context:Context} = this.handleRequestData(action,context,data,true);
+        return new Promise((resolve: any, reject: any)=>{
+            let result: Promise<any>;
+            const _appEntityService: any = this.appEntityService;
+            if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
+                result = _appEntityService[action](Context,Data, isloading);
+            } else {
+                return Promise.reject({ status: 500, data: { title: '澶辫触', message: '绯荤粺寮傚父' } });
+            }
+            result.then((response) => {
+                this.handleResponse(action, response);
+                resolve(response);
+            }).catch(response => {
+                reject(response);
+            });
+        })
+    }
+
+    /**
+     * 澶勭悊璇锋眰鏁版嵁(淇敼鎴栧鍔犳暟鎹�)
+     * 
+     * @param action 琛屼负 
+     * @param data 鏁版嵁
+     * @memberof MainService
+     */
+    public handleRequestDataWithUpdate(action: string,context:any ={},data: any = {},isMerge:boolean = false){
+        let model: any = this.getMode();
+        if (!model && model.getDataItems instanceof Function) {
+            return data;
+        }
+        let dataItems: any[] = model.getDataItems();
+        let requestData:any = {};
+        if(isMerge && (data && data.viewparams)){
+            Object.assign(requestData,data.viewparams);
+        }
+        dataItems.forEach((item:any) =>{
+            if(item && item.dataType && Object.is(item.dataType,'FONTKEY')){
+                if(item && item.prop && item.name ){
+                    requestData[item.prop] = context[item.name];
+                }
+            }else{
+                if(item && item.isEditable && item.prop && item.name && (data[item.name] || Object.is(data[item.name],0)) ){
+                    requestData[item.prop] = data[item.name];
+                }
+            }
+        });
+        let tempContext:any = JSON.parse(JSON.stringify(context));
+        if(tempContext && tempContext.srfsessionid){
+            tempContext.srfsessionkey = tempContext.srfsessionid;
+            delete tempContext.srfsessionid;
+        }
+        return {context:tempContext,data:requestData};
+    }
+    
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/woorigin/main-grid/main-grid.html b/app_AssetManagement/src/widgets/woorigin/main-grid/main-grid.html
new file mode 100644
index 0000000..c594276
--- /dev/null
+++ b/app_AssetManagement/src/widgets/woorigin/main-grid/main-grid.html
@@ -0,0 +1,66 @@
+<div :class="{ 'grid': true, 'show-paging-bar': isEnablePagingBar, 'hidden-paging-bar': !isEnablePagingBar }">
+    <i-form>
+    <el-table v-if="isDisplay === true"
+        :default-sort="{ prop: minorSortPSDEF, order: Object.is(minorSortDir, 'ASC') ? 'ascending' : Object.is(minorSortDir, 'DESC') ? 'descending' : '' }"  
+        @sort-change="onSortChange($event)"  
+        :border="isDragendCol"
+        :highlight-current-row ="isSingleSelect"
+        :row-class-name="getRowClassName.bind(_self)"
+        :cell-class-name="getCellClassName.bind(_self)"
+        size="mini"
+        stripe
+        @row-click="rowClick($event)"  
+        @select-all="selectAll($event)"  
+        @select="select($event)"  
+        @row-class-name="onRowClassName($event)"  
+        @row-dblclick="rowDBLClick($event)"  
+        ref='multipleTable' :data="items" :show-header="!isHideHeader">
+            <template slot="empty">
+                鏃犳暟鎹� 
+                <span class="quick-toolbar">
+                </span>
+            </template>
+            <template v-if="!isSingleSelect">
+                <el-table-column align="center" type='selection' :width="checkboxColWidth"></el-table-column>
+            </template>
+            <template v-if="adaptiveState">
+                <el-table-column></el-table-column>
+            </template>
+    </el-table>
+    <row class='grid-pagination' v-show="items.length > 0">
+        <page class='pull-right' @on-change="pageOnChange($event)" 
+            @on-page-size-change="onPageSizeChange($event)"
+            :transfer="true" :total="totalRecord"
+            show-sizer :current="curPage" :page-size="limit"
+            :page-size-opts="[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]" show-elevator show-total>
+            <span>
+                <span class="page-column">
+                    <poptip transfer placement="top-start">
+                        <i-button icon="md-menu">{{$t('app.gridpage.choicecolumns')}}</i-button>
+                        <div slot="content">
+                            <template v-for="col in allColumns">
+                                <div :key="col.name"><el-checkbox v-model="col.show" @change="onColChange()">{{$t(col.langtag)}}</el-checkbox></div>
+                            </template>
+                        </div>
+                    </poptip>
+                </span>
+                <span v-if="selections.length > 0" class="batch-toolbar">
+                </span>
+                <span class="page-button"><i-button icon="md-refresh" :title="$t('app.gridpage.refresh')" @click="pageRefresh()"></i-button></span>&nbsp;
+                <span>
+                    {{$t('app.gridpage.show')}}&nbsp;
+                    <span>
+                        <template v-if="items.length === 1">
+                        1
+                        </template>
+                        <template v-else>
+                            <span>{{(curPage - 1) * limit + 1}}&nbsp;-&nbsp;{{totalRecord > curPage * limit ? curPage * limit : totalRecord}}</span>
+                        </template>
+                    </span>&nbsp;
+                    {{$t('app.gridpage.records')}}锛寋{$t('app.gridpage.totle')}}&nbsp;{{totalRecord}}&nbsp;{{$t('app.gridpage.records')}}
+                </span>
+            </span>
+        </page>
+    </row>
+  </i-form>
+</div>
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/woorigin/main-grid/main-grid.vue b/app_AssetManagement/src/widgets/woorigin/main-grid/main-grid.vue
new file mode 100644
index 0000000..149aa83
--- /dev/null
+++ b/app_AssetManagement/src/widgets/woorigin/main-grid/main-grid.vue
@@ -0,0 +1,22 @@
+<template src="./main-grid.html"/>
+<script lang='tsx'>
+import { Component } from 'vue-property-decorator';
+import { VueLifeCycleProcessing } from '@/studio-core';
+import { MainGridBase } from './main-grid-base';
+ 
+
+/**
+ * grid閮ㄤ欢
+ *
+ * @export
+ * @class MainGrid
+ * @extends {MainGridBase}
+ */
+@Component({
+    components: {
+         
+    }
+})
+@VueLifeCycleProcessing()
+export default class MainGrid extends MainGridBase { }
+</script>
diff --git a/app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-base.tsx b/app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-base.tsx
new file mode 100644
index 0000000..3685c53
--- /dev/null
+++ b/app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-base.tsx
@@ -0,0 +1,265 @@
+import { Prop, Provide, Emit, Model } from 'vue-property-decorator';
+import { Subject, Subscription } from 'rxjs';
+import { Watch, MainControlBase } from '@/studio-core';
+import WOOriginService from '@/service/woorigin/woorigin-service';
+import PickupViewpickupviewpanelService from './pickup-viewpickupviewpanel-pickupviewpanel-service';
+import WOOriginUIService from '@/uiservice/woorigin/woorigin-ui-service';
+import PickupViewpickupviewpanelModel from './pickup-viewpickupviewpanel-pickupviewpanel-model';
+
+
+/**
+ * pickupviewpanel閮ㄤ欢鍩虹被
+ *
+ * @export
+ * @class MainControlBase
+ * @extends {PickupViewpickupviewpanelPickupviewpanelBase}
+ */
+export class PickupViewpickupviewpanelPickupviewpanelBase extends MainControlBase {
+
+    /**
+     * 鑾峰彇閮ㄤ欢绫诲瀷
+     *
+     * @protected
+     * @type {string}
+     * @memberof PickupViewpickupviewpanelPickupviewpanelBase
+     */
+    protected controlType: string = 'PICKUPVIEWPANEL';
+
+    /**
+     * 寤烘瀯閮ㄤ欢鏈嶅姟瀵硅薄
+     *
+     * @type {PickupViewpickupviewpanelService}
+     * @memberof PickupViewpickupviewpanelPickupviewpanelBase
+     */
+    public service: PickupViewpickupviewpanelService = new PickupViewpickupviewpanelService({ $store: this.$store });
+
+    /**
+     * 瀹炰綋鏈嶅姟瀵硅薄
+     *
+     * @type {WOOriginService}
+     * @memberof PickupViewpickupviewpanelPickupviewpanelBase
+     */
+    public appEntityService: WOOriginService = new WOOriginService({ $store: this.$store });
+
+    /**
+     * 搴旂敤瀹炰綋鍚嶇О
+     *
+     * @protected
+     * @type {string}
+     * @memberof PickupViewpickupviewpanelPickupviewpanelBase
+     */
+    protected appDeName: string = 'woorigin';
+
+    /**
+     * 搴旂敤瀹炰綋涓枃鍚嶇О
+     *
+     * @protected
+     * @type {string}
+     * @memberof PickupViewpickupviewpanelPickupviewpanelBase
+     */
+    protected appDeLogicName: string = '宸ュ崟鏉ユ簮';
+
+
+    /**
+     * 閫変腑鏁版嵁瀛楃涓�
+     *
+     * @type {string}
+     * @memberof PickupViewpickupviewpanel
+     */
+    @Prop() public selectedData?: string;
+
+    /**
+     * 鑾峰彇澶氶」鏁版嵁
+     *
+     * @returns {any[]}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public getDatas(): any[] {
+        return [];
+    }
+
+    /**
+     * 鑾峰彇鍗曢」鏍�
+     *
+     * @returns {*}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public getData(): any {
+        return {};
+    }
+
+    /**
+     * 瑙嗗浘鍚嶇О
+     *
+     * @type {*}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public view: any = {
+        viewname: 'woorigin-pickup-grid-view',
+        data: {},
+    }
+
+    /**
+     * 灞€閮ㄤ笂涓嬫枃
+     *
+     * @type {*}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public localContext: any = null;
+
+    /**
+     * 灞€閮ㄨ鍥惧弬鏁�
+     *
+     * @type {*}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public localViewParam: any = null;
+
+    /**
+     * 瑙嗗浘鏁版嵁
+     *
+     * @type {*}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public viewdata: string  = JSON.stringify(this.context);
+
+    /**
+     * 瑙嗗浘鍙傛暟
+     *
+     * @type {*}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public viewparam: string  = JSON.stringify(this.viewparams);
+
+    /**
+     * 鏄惁鏄剧ず鎸夐挳
+     *
+     * @type {boolean}
+     * @memberof PickupViewpickupviewpanel
+     */
+    @Prop({default: true}) public isShowButton!: boolean;
+
+    /**
+     * 鏄惁鍗曢€�
+     *
+     * @type {boolean}
+     * @memberof PickupViewpickupviewpanel
+     */
+    @Prop() public isSingleSelect?: boolean;
+
+    /**
+     * 鍒濆鍖栧畬鎴�
+     *
+     * @type {boolean}
+     * @memberof PickupViewpickupviewpanel
+     */
+    public inited: boolean = false;
+
+    /**
+     * 瑙嗗浘鏁版嵁鍙樺寲
+     *
+     * @param {*} $event
+     * @memberof PickupViewpickupviewpanel
+     */
+    public onViewDatasChange($event: any): void {
+        if($event.length>0){
+          $event.forEach((item:any,index:any) => {
+              let srfmajortext = item['wooriginname'];
+              if(srfmajortext){
+                Object.assign($event[index],{srfmajortext: srfmajortext});
+              }
+          });
+        }
+        this.$emit('selectionchange', $event);
+    }
+
+    /**
+     * 瑙嗗浘鏁版嵁琚縺娲�
+     *
+     * @param {*} $event
+     * @memberof PickupViewpickupviewpanel
+     */
+    public viewDatasActivated($event: any): void {
+        this.$emit('activated', $event);
+    }
+
+    /**
+     * 瑙嗗浘鍔犺浇瀹屾垚
+     *
+     * @param {*} $event
+     * @memberof PickupViewpickupviewpanel
+     */
+    public onViewLoad($event: any): void {
+        this.$emit('load', $event);
+    }
+
+    /**
+     * vue 鐢熷懡鍛ㄦ湡
+     *
+     * @memberof PickupViewpickupviewpanel
+     */
+    public created() {
+        this.afterCreated();
+    }
+
+    /**
+     * 鎵цcreated鍚庣殑閫昏緫
+     *
+     *  @memberof PickupViewpickupviewpanel
+     */    
+    public afterCreated(){
+        this.initNavParam();
+        if (this.viewState) {
+            this.viewStateEvent = this.viewState.subscribe(({ tag, action, data }) => {
+                if (!Object.is(tag, this.name)) {
+                    return;
+                }
+                if (Object.is('load', action)) {
+                    this.viewdata = JSON.stringify(this.context);
+                    this.viewparam = JSON.stringify(Object.assign(data, this.viewparams));
+                    this.inited = true;
+                }
+            });
+        }
+    }
+
+    /**
+     * 鍒濆鍖栧鑸弬鏁�
+     *
+     *  @memberof PickupViewpickupviewpanel
+     */  
+    public initNavParam(){
+        if(this.localContext && Object.keys(this.localContext).length >0){
+            let _context:any = this.$util.computedNavData({},this.context,this.viewparams,this.localContext);
+            Object.assign(this.context,_context);
+        }
+        if(this.localViewParam && Object.keys(this.localViewParam).length >0){
+            let _param:any = this.$util.computedNavData({},this.context,this.viewparams,this.localViewParam);
+            Object.assign(this.viewparams,_param);
+        }
+        this.viewdata = JSON.stringify(this.context);
+        this.viewparam = JSON.stringify(this.viewparams);
+    }
+
+
+    /**
+     * vue 鐢熷懡鍛ㄦ湡
+     *
+     * @memberof PickupViewpickupviewpanel
+     */
+    public destroyed() {
+        this.afterDestroy();
+    }
+
+    /**
+     * 鎵цdestroyed鍚庣殑閫昏緫
+     *
+     * @memberof PickupViewpickupviewpanel
+     */
+    public afterDestroy() {
+        if (this.viewStateEvent) {
+            this.viewStateEvent.unsubscribe();
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-model.ts b/app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-model.ts
new file mode 100644
index 0000000..587a278
--- /dev/null
+++ b/app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-model.ts
@@ -0,0 +1,43 @@
+/**
+ * PickupViewpickupviewpanel 閮ㄤ欢妯″瀷
+ *
+ * @export
+ * @class PickupViewpickupviewpanelModel
+ */
+export default class PickupViewpickupviewpanelModel {
+
+  /**
+    * 鑾峰彇鏁版嵁椤归泦鍚�
+    *
+    * @returns {any[]}
+    * @memberof PickupViewpickupviewpanelModel
+    */
+  public getDataItems(): any[] {
+    return [
+      {
+        name: 'woorigin',
+        prop: 'wooriginid',
+      },
+      {
+        name: 'wooriginname',
+      },
+      {
+        name: 'createman',
+      },
+      {
+        name: 'createdate',
+      },
+      {
+        name: 'updateman',
+      },
+      {
+        name: 'updatedate',
+      },
+      {
+        name: 'woorigintype',
+      },
+    ]
+  }
+
+
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-service.ts b/app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-service.ts
new file mode 100644
index 0000000..40156ed
--- /dev/null
+++ b/app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-service.ts
@@ -0,0 +1,11 @@
+import { Http } from '@/utils';
+import ControlService from '@/widgets/control-service';
+
+/**
+ * PickupViewpickupviewpanel 閮ㄤ欢鏈嶅姟瀵硅薄
+ *
+ * @export
+ * @class PickupViewpickupviewpanelService
+ */
+export default class PickupViewpickupviewpanelService extends ControlService {
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.html b/app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.html
new file mode 100644
index 0000000..04586a4
--- /dev/null
+++ b/app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.html
@@ -0,0 +1,16 @@
+<div class='pickupviewpanel'>
+    <component 
+        v-if="inited && view.viewname && !Object.is(view.viewname, '')" 
+        :is="view.viewname"
+        class="viewcontainer3"
+        :viewdata="viewdata"
+        :viewparam="viewparam"
+        :viewDefaultUsage="false"
+        :isSingleSelect="isSingleSelect"
+        :selectedData="selectedData"
+        :isShowButton="isShowButton"
+        @viewdataschange="onViewDatasChange.apply(_self, arguments)"
+        @viewdatasactivated="viewDatasActivated.apply(_self, arguments)"
+        @viewload="onViewLoad.apply(_self, arguments)">
+    </component>
+</div>
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.less b/app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.less
new file mode 100644
index 0000000..e1cc9ac
--- /dev/null
+++ b/app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.less
@@ -0,0 +1,3 @@
+.pickupviewpanel{
+  width: 100%;
+}
\ No newline at end of file
diff --git a/app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue b/app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue
new file mode 100644
index 0000000..a8b2ec5
--- /dev/null
+++ b/app_AssetManagement/src/widgets/woorigin/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue
@@ -0,0 +1,22 @@
+<template src="./pickup-viewpickupviewpanel-pickupviewpanel.html"/>
+<script lang='tsx'>
+import { Component } from 'vue-property-decorator';
+import { VueLifeCycleProcessing } from '@/studio-core';
+import { PickupViewpickupviewpanelPickupviewpanelBase } from './pickup-viewpickupviewpanel-pickupviewpanel-base';
+ 
+
+/**
+ * pickupviewpanel閮ㄤ欢
+ *
+ * @export
+ * @class PickupViewpickupviewpanelPickupviewpanel
+ * @extends {PickupViewpickupviewpanelPickupviewpanelBase}
+ */
+@Component({
+    components: {
+         
+    }
+})
+@VueLifeCycleProcessing()
+export default class PickupViewpickupviewpanelPickupviewpanel extends PickupViewpickupviewpanelPickupviewpanelBase { }
+</script>
diff --git a/assetmanagement-core/src/main/resources/liquibase/h2_table.xml b/assetmanagement-core/src/main/resources/liquibase/h2_table.xml
index febd1fd..649f032 100644
--- a/assetmanagement-core/src/main/resources/liquibase/h2_table.xml
+++ b/assetmanagement-core/src/main/resources/liquibase/h2_table.xml
@@ -128,7 +128,7 @@
 
 
     <!--杈撳嚭瀹炰綋[EAMASSET]鏁版嵁缁撴瀯 -->
-    <changeSet author="a_LAB01_e85d8801c" id="tab-eamasset-99-6">
+    <changeSet author="a_LAB01_e85d8801c" id="tab-eamasset-101-6">
         <createTable tableName="ASSET">
                 <column name="ASSETID" remarks="" type="VARCHAR(100)">
                     <constraints primaryKey="true" primaryKeyName="PK_EAMASSET_ASSETID"/>
@@ -492,7 +492,7 @@
 
 
     <!--杈撳嚭瀹炰綋[EAMPLAN]鏁版嵁缁撴瀯 -->
-    <changeSet author="a_LAB01_e85d8801c" id="tab-eamplan-65-21">
+    <changeSet author="a_LAB01_e85d8801c" id="tab-eamplan-66-21">
         <createTable tableName="EAMPLAN">
                 <column name="UPDATEDATE" remarks="" type="DATETIME">
                 </column>
@@ -602,7 +602,7 @@
 
 
     <!--杈撳嚭瀹炰綋[EAMSERVICELEVEL]鏁版嵁缁撴瀯 -->
-    <changeSet author="a_LAB01_e85d8801c" id="tab-eamservicelevel-18-25">
+    <changeSet author="a_LAB01_e85d8801c" id="tab-eamservicelevel-20-25">
         <createTable tableName="EAMSERVICELEVEL">
                 <column name="CREATEMAN" remarks="" type="VARCHAR(60)">
                 </column>
@@ -756,7 +756,7 @@
 
 
     <!--杈撳嚭瀹炰綋[EAMWORKORDER]鏁版嵁缁撴瀯 -->
-    <changeSet author="a_LAB01_e85d8801c" id="tab-eamworkorder-103-32">
+    <changeSet author="a_LAB01_e85d8801c" id="tab-eamworkorder-109-32">
         <createTable tableName="WORKORDER">
                 <column name="WORKORDERID" remarks="" type="VARCHAR(100)">
                     <constraints primaryKey="true" primaryKeyName="PK_EAMWORKORDER_WORKORDERID"/>
@@ -810,7 +810,7 @@
 
 
     <!--杈撳嚭瀹炰綋[EAMWOORIGIN]鏁版嵁缁撴瀯 -->
-    <changeSet author="a_LAB01_e85d8801c" id="tab-eamwoorigin-16-33">
+    <changeSet author="a_LAB01_e85d8801c" id="tab-eamwoorigin-18-33">
         <createTable tableName="EAMWOORIGIN">
                 <column name="EAMWOORIGINID" remarks="" type="VARCHAR(100)">
                     <constraints primaryKey="true" primaryKeyName="PK_EAMWOORIGIN_EAMWOORIGINID"/>
@@ -854,16 +854,16 @@
        <addForeignKeyConstraint baseColumnNames="EAMAPPLYSTATEMODELID" baseTableName="EAMAPPLYTYPE" constraintName="DER1N_EAMAPPLYTYPE_EAMAPPLYSTA" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="EAMAPPLYSTATEMODELID" referencedTableName="EAMAPPLYSTATEMODEL" validate="true"/>
     </changeSet>
         <!--杈撳嚭瀹炰綋[EAMASSET]澶栭敭鍏崇郴 -->
-    <changeSet author="a_LAB01_e85d8801c" id="fk-eamasset-99-41">
+    <changeSet author="a_LAB01_e85d8801c" id="fk-eamasset-101-41">
        <addForeignKeyConstraint baseColumnNames="EAMASSETSTATEID" baseTableName="ASSET" constraintName="DER1N_EAMASSET_EAMASSETSTATE_E" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="EAMASSETSTATEID" referencedTableName="EAMASSETSTATE" validate="true"/>
     </changeSet>
-    <changeSet author="a_LAB01_e85d8801c" id="fk-eamasset-99-42">
+    <changeSet author="a_LAB01_e85d8801c" id="fk-eamasset-101-42">
        <addForeignKeyConstraint baseColumnNames="EAMASSETTYPEID" baseTableName="ASSET" constraintName="DER1N_EAMASSET_EAMASSETTYPE_EA" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="EAMASSETTYPEID" referencedTableName="EAMASSETTYPE" validate="true"/>
     </changeSet>
-    <changeSet author="a_LAB01_e85d8801c" id="fk-eamasset-99-43">
+    <changeSet author="a_LAB01_e85d8801c" id="fk-eamasset-101-43">
        <addForeignKeyConstraint baseColumnNames="PASSETID" baseTableName="ASSET" constraintName="DER1N_EAMASSET_EAMASSET_PASSET" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="ASSETID" referencedTableName="ASSET" validate="true"/>
     </changeSet>
-    <changeSet author="a_LAB01_e85d8801c" id="fk-eamasset-99-44">
+    <changeSet author="a_LAB01_e85d8801c" id="fk-eamasset-101-44">
        <addForeignKeyConstraint baseColumnNames="EAMLOCATIONID" baseTableName="ASSET" constraintName="DER1N_EAMASSET_EAMLOCATION_EAM" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="EAMLOCATIONID" referencedTableName="EAMLOCATION" validate="true"/>
     </changeSet>
         <!--杈撳嚭瀹炰綋[EAMASSETPARTSGROUP]澶栭敭鍏崇郴 -->
@@ -917,13 +917,13 @@
         <!--杈撳嚭瀹炰綋[EAMMONITORPOINT]澶栭敭鍏崇郴 -->
         <!--杈撳嚭瀹炰綋[EAMPRODUCT]澶栭敭鍏崇郴 -->
         <!--杈撳嚭瀹炰綋[EAMPLAN]澶栭敭鍏崇郴 -->
-    <changeSet author="a_LAB01_e85d8801c" id="fk-eamplan-65-59">
+    <changeSet author="a_LAB01_e85d8801c" id="fk-eamplan-66-59">
        <addForeignKeyConstraint baseColumnNames="ASSETID" baseTableName="EAMPLAN" constraintName="DER1N_EAMPLAN_EAMASSET_ASSETID" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="ASSETID" referencedTableName="ASSET" validate="true"/>
     </changeSet>
-    <changeSet author="a_LAB01_e85d8801c" id="fk-eamplan-65-60">
+    <changeSet author="a_LAB01_e85d8801c" id="fk-eamplan-66-60">
        <addForeignKeyConstraint baseColumnNames="EAMLOCATIONID" baseTableName="EAMPLAN" constraintName="DER1N_EAMPLAN_EAMLOCATION_EAML" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="EAMLOCATIONID" referencedTableName="EAMLOCATION" validate="true"/>
     </changeSet>
-    <changeSet author="a_LAB01_e85d8801c" id="fk-eamplan-65-61">
+    <changeSet author="a_LAB01_e85d8801c" id="fk-eamplan-66-61">
        <addForeignKeyConstraint baseColumnNames="EAMMONITORPOINTID" baseTableName="EAMPLAN" constraintName="DER1N_EAMPLAN_EAMMONITORPOINT_" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="EAMMONITORPOINTID" referencedTableName="EAMMONITORPOINT" validate="true"/>
     </changeSet>
         <!--杈撳嚭瀹炰綋[EAMPLANCDT]澶栭敭鍏崇郴 -->
@@ -967,22 +967,22 @@
        <addForeignKeyConstraint baseColumnNames="EAMWOSTATEMODELID" baseTableName="EAMWOTYPE" constraintName="DER1N_EAMWOTYPE_EAMWOSTATEMODE" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="EAMWOSTATEMODELID" referencedTableName="EAMWOSTATEMODEL" validate="true"/>
     </changeSet>
         <!--杈撳嚭瀹炰綋[EAMWORKORDER]澶栭敭鍏崇郴 -->
-    <changeSet author="a_LAB01_e85d8801c" id="fk-eamworkorder-103-73">
+    <changeSet author="a_LAB01_e85d8801c" id="fk-eamworkorder-109-73">
        <addForeignKeyConstraint baseColumnNames="ASSETID" baseTableName="WORKORDER" constraintName="DER1N_EAMWORKORDER_EAMASSET_AS" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="ASSETID" referencedTableName="ASSET" validate="true"/>
     </changeSet>
-    <changeSet author="a_LAB01_e85d8801c" id="fk-eamworkorder-103-74">
+    <changeSet author="a_LAB01_e85d8801c" id="fk-eamworkorder-109-74">
        <addForeignKeyConstraint baseColumnNames="EAMLOCATIONID" baseTableName="WORKORDER" constraintName="DER1N_EAMWORKORDER_EAMLOCATION" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="EAMLOCATIONID" referencedTableName="EAMLOCATION" validate="true"/>
     </changeSet>
-    <changeSet author="a_LAB01_e85d8801c" id="fk-eamworkorder-103-75">
+    <changeSet author="a_LAB01_e85d8801c" id="fk-eamworkorder-109-75">
        <addForeignKeyConstraint baseColumnNames="EAMSERVICELEVELID" baseTableName="WORKORDER" constraintName="DER1N_EAMWORKORDER_EAMSERVICEL" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="EAMSERVICELEVELID" referencedTableName="EAMSERVICELEVEL" validate="true"/>
     </changeSet>
-    <changeSet author="a_LAB01_e85d8801c" id="fk-eamworkorder-103-76">
+    <changeSet author="a_LAB01_e85d8801c" id="fk-eamworkorder-109-76">
        <addForeignKeyConstraint baseColumnNames="EAMWOORIGINID" baseTableName="WORKORDER" constraintName="DER1N_EAMWORKORDER_EAMWOORIGIN" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="EAMWOORIGINID" referencedTableName="EAMWOORIGIN" validate="true"/>
     </changeSet>
-    <changeSet author="a_LAB01_e85d8801c" id="fk-eamworkorder-103-77">
+    <changeSet author="a_LAB01_e85d8801c" id="fk-eamworkorder-109-77">
        <addForeignKeyConstraint baseColumnNames="PWORKORDERID" baseTableName="WORKORDER" constraintName="DER1N_EAMWORKORDER_EAMWORKORDE" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="WORKORDERID" referencedTableName="WORKORDER" validate="true"/>
     </changeSet>
-    <changeSet author="a_LAB01_e85d8801c" id="fk-eamworkorder-103-78">
+    <changeSet author="a_LAB01_e85d8801c" id="fk-eamworkorder-109-78">
        <addForeignKeyConstraint baseColumnNames="EAMWOTYPEID" baseTableName="WORKORDER" constraintName="DER1N_EAMWORKORDER_EAMWOTYPE_E" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="EAMWOTYPEID" referencedTableName="EAMWOTYPE" validate="true"/>
     </changeSet>
         <!--杈撳嚭瀹炰綋[EAMWOORIGIN]澶栭敭鍏崇郴 -->
-- 
2.21.0