@things-factory/ops-master 10.0.19 → 10.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-client/bootstrap.d.ts +18 -0
- package/dist-client/bootstrap.js +36 -0
- package/dist-client/bootstrap.js.map +1 -0
- package/dist-client/index.d.ts +15 -1
- package/dist-client/index.js +18 -1
- package/dist-client/index.js.map +1 -1
- package/dist-client/pages/master/equipment-class.d.ts +12 -0
- package/dist-client/pages/master/equipment-class.js +42 -0
- package/dist-client/pages/master/equipment-class.js.map +1 -0
- package/dist-client/pages/master/equipment.d.ts +12 -0
- package/dist-client/pages/master/equipment.js +57 -0
- package/dist-client/pages/master/equipment.js.map +1 -0
- package/dist-client/pages/master/grist-iso-duration.d.ts +20 -0
- package/dist-client/pages/master/grist-iso-duration.js +70 -0
- package/dist-client/pages/master/grist-iso-duration.js.map +1 -0
- package/dist-client/pages/master/grist-reference.d.ts +91 -0
- package/dist-client/pages/master/grist-reference.js +419 -0
- package/dist-client/pages/master/grist-reference.js.map +1 -0
- package/dist-client/pages/master/import-rows.d.ts +35 -0
- package/dist-client/pages/master/import-rows.js +66 -0
- package/dist-client/pages/master/import-rows.js.map +1 -0
- package/dist-client/pages/master/iso-duration.d.ts +34 -0
- package/dist-client/pages/master/iso-duration.js +76 -0
- package/dist-client/pages/master/iso-duration.js.map +1 -0
- package/dist-client/pages/master/master-options.d.ts +33 -0
- package/dist-client/pages/master/master-options.js +47 -0
- package/dist-client/pages/master/master-options.js.map +1 -0
- package/dist-client/pages/master/master-page-base.d.ts +357 -0
- package/dist-client/pages/master/master-page-base.js +626 -0
- package/dist-client/pages/master/master-page-base.js.map +1 -0
- package/dist-client/pages/master/material-class.d.ts +12 -0
- package/dist-client/pages/master/material-class.js +42 -0
- package/dist-client/pages/master/material-class.js.map +1 -0
- package/dist-client/pages/master/material-definition.d.ts +12 -0
- package/dist-client/pages/master/material-definition.js +62 -0
- package/dist-client/pages/master/material-definition.js.map +1 -0
- package/dist-client/pages/master/operation-definition.d.ts +12 -0
- package/dist-client/pages/master/operation-definition.js +49 -0
- package/dist-client/pages/master/operation-definition.js.map +1 -0
- package/dist-client/pages/master/operational-location.d.ts +84 -0
- package/dist-client/pages/master/operational-location.js +426 -0
- package/dist-client/pages/master/operational-location.js.map +1 -0
- package/dist-client/pages/master/person.d.ts +12 -0
- package/dist-client/pages/master/person.js +41 -0
- package/dist-client/pages/master/person.js.map +1 -0
- package/dist-client/pages/master/personnel-class.d.ts +12 -0
- package/dist-client/pages/master/personnel-class.js +43 -0
- package/dist-client/pages/master/personnel-class.js.map +1 -0
- package/dist-client/pages/master/physical-asset-class.d.ts +12 -0
- package/dist-client/pages/master/physical-asset-class.js +40 -0
- package/dist-client/pages/master/physical-asset-class.js.map +1 -0
- package/dist-client/pages/master/physical-asset.d.ts +12 -0
- package/dist-client/pages/master/physical-asset.js +41 -0
- package/dist-client/pages/master/physical-asset.js.map +1 -0
- package/dist-client/pages/master/recipe-definition.d.ts +136 -0
- package/dist-client/pages/master/recipe-definition.js +404 -0
- package/dist-client/pages/master/recipe-definition.js.map +1 -0
- package/dist-client/pages/master/reference-targets.d.ts +42 -0
- package/dist-client/pages/master/reference-targets.js +82 -0
- package/dist-client/pages/master/reference-targets.js.map +1 -0
- package/dist-client/pages/master/route-definition.d.ts +19 -0
- package/dist-client/pages/master/route-definition.js +40 -0
- package/dist-client/pages/master/route-definition.js.map +1 -0
- package/dist-client/pages/master/stop-reason.d.ts +12 -0
- package/dist-client/pages/master/stop-reason.js +48 -0
- package/dist-client/pages/master/stop-reason.js.map +1 -0
- package/dist-client/pages/master/test-specification.d.ts +93 -0
- package/dist-client/pages/master/test-specification.js +449 -0
- package/dist-client/pages/master/test-specification.js.map +1 -0
- package/dist-client/pages/master-axes.d.ts +20 -29
- package/dist-client/pages/master-axes.js +32 -182
- package/dist-client/pages/master-axes.js.map +1 -1
- package/dist-client/route.d.ts +1 -1
- package/dist-client/route.js +76 -3
- package/dist-client/route.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/service/asset/asset-lifecycle.d.ts +30 -7
- package/dist-server/service/asset/asset-lifecycle.js +33 -6
- package/dist-server/service/asset/asset-lifecycle.js.map +1 -1
- package/dist-server/service/asset/asset-master-resolver.d.ts +9 -0
- package/dist-server/service/asset/asset-master-resolver.js +41 -0
- package/dist-server/service/asset/asset-master-resolver.js.map +1 -1
- package/dist-server/service/asset/asset-master.js +1 -1
- package/dist-server/service/asset/asset-master.js.map +1 -1
- package/dist-server/service/asset/asset-query.d.ts +9 -1
- package/dist-server/service/asset/asset-query.js +28 -6
- package/dist-server/service/asset/asset-query.js.map +1 -1
- package/dist-server/service/asset/physical-asset-class.js +1 -1
- package/dist-server/service/asset/physical-asset-class.js.map +1 -1
- package/dist-server/service/asset/physical-asset.d.ts +17 -4
- package/dist-server/service/asset/physical-asset.js +6 -6
- package/dist-server/service/asset/physical-asset.js.map +1 -1
- package/dist-server/service/equipment/equipment-class.js +1 -1
- package/dist-server/service/equipment/equipment-class.js.map +1 -1
- package/dist-server/service/equipment/equipment-master-resolver.d.ts +9 -0
- package/dist-server/service/equipment/equipment-master-resolver.js +58 -0
- package/dist-server/service/equipment/equipment-master-resolver.js.map +1 -1
- package/dist-server/service/equipment/equipment-master.d.ts +3 -2
- package/dist-server/service/equipment/equipment-master.js +21 -4
- package/dist-server/service/equipment/equipment-master.js.map +1 -1
- package/dist-server/service/equipment/equipment-query.d.ts +9 -1
- package/dist-server/service/equipment/equipment-query.js +28 -6
- package/dist-server/service/equipment/equipment-query.js.map +1 -1
- package/dist-server/service/equipment/equipment.d.ts +27 -1
- package/dist-server/service/equipment/equipment.js +8 -3
- package/dist-server/service/equipment/equipment.js.map +1 -1
- package/dist-server/service/equipment/state-period-rules.d.ts +19 -0
- package/dist-server/service/equipment/state-period-rules.js +35 -1
- package/dist-server/service/equipment/state-period-rules.js.map +1 -1
- package/dist-server/service/index.d.ts +4 -1
- package/dist-server/service/index.js +11 -2
- package/dist-server/service/index.js.map +1 -1
- package/dist-server/service/location/location-master-resolver.d.ts +29 -0
- package/dist-server/service/location/location-master-resolver.js +228 -1
- package/dist-server/service/location/location-master-resolver.js.map +1 -1
- package/dist-server/service/location/location-query.d.ts +9 -1
- package/dist-server/service/location/location-query.js +24 -9
- package/dist-server/service/location/location-query.js.map +1 -1
- package/dist-server/service/location/operational-location.d.ts +37 -0
- package/dist-server/service/location/operational-location.js +22 -2
- package/dist-server/service/location/operational-location.js.map +1 -1
- package/dist-server/service/master-axis.js +2 -2
- package/dist-server/service/master-axis.js.map +1 -1
- package/dist-server/service/master-conformance-resolver.d.ts +34 -0
- package/dist-server/service/master-conformance-resolver.js +143 -0
- package/dist-server/service/master-conformance-resolver.js.map +1 -0
- package/dist-server/service/master-conformance.d.ts +80 -0
- package/dist-server/service/master-conformance.js +266 -0
- package/dist-server/service/master-conformance.js.map +1 -0
- package/dist-server/service/master-page-query.d.ts +33 -0
- package/dist-server/service/master-page-query.js +55 -0
- package/dist-server/service/master-page-query.js.map +1 -0
- package/dist-server/service/master-page.d.ts +85 -0
- package/dist-server/service/master-page.js +104 -0
- package/dist-server/service/master-page.js.map +1 -0
- package/dist-server/service/material/material-class.js +1 -1
- package/dist-server/service/material/material-class.js.map +1 -1
- package/dist-server/service/material/material-definition.js +2 -2
- package/dist-server/service/material/material-definition.js.map +1 -1
- package/dist-server/service/material/material-master-resolver.d.ts +62 -0
- package/dist-server/service/material/material-master-resolver.js +213 -0
- package/dist-server/service/material/material-master-resolver.js.map +1 -1
- package/dist-server/service/material/material-query.d.ts +9 -1
- package/dist-server/service/material/material-query.js +28 -6
- package/dist-server/service/material/material-query.js.map +1 -1
- package/dist-server/service/material/recipe-index.d.ts +23 -0
- package/dist-server/service/material/recipe-index.js +44 -0
- package/dist-server/service/material/recipe-index.js.map +1 -0
- package/dist-server/service/operation/operation-definition.d.ts +1 -1
- package/dist-server/service/operation/operation-definition.js +4 -4
- package/dist-server/service/operation/operation-definition.js.map +1 -1
- package/dist-server/service/operation/operation-master-resolver.d.ts +24 -0
- package/dist-server/service/operation/operation-master-resolver.js +107 -0
- package/dist-server/service/operation/operation-master-resolver.js.map +1 -1
- package/dist-server/service/operation/operation-query.d.ts +10 -2
- package/dist-server/service/operation/operation-query.js +25 -10
- package/dist-server/service/operation/operation-query.js.map +1 -1
- package/dist-server/service/personnel/person.js +3 -3
- package/dist-server/service/personnel/person.js.map +1 -1
- package/dist-server/service/personnel/personnel-class.d.ts +1 -1
- package/dist-server/service/personnel/personnel-class.js +2 -2
- package/dist-server/service/personnel/personnel-class.js.map +1 -1
- package/dist-server/service/personnel/personnel-master-resolver.d.ts +9 -0
- package/dist-server/service/personnel/personnel-master-resolver.js +43 -0
- package/dist-server/service/personnel/personnel-master-resolver.js.map +1 -1
- package/dist-server/service/personnel/personnel-master.js +1 -1
- package/dist-server/service/personnel/personnel-master.js.map +1 -1
- package/dist-server/service/personnel/personnel-query.d.ts +9 -1
- package/dist-server/service/personnel/personnel-query.js +28 -6
- package/dist-server/service/personnel/personnel-query.js.map +1 -1
- package/dist-server/service/recipe/recipe-definition.d.ts +3 -3
- package/dist-server/service/recipe/recipe-definition.js +3 -3
- package/dist-server/service/recipe/recipe-definition.js.map +1 -1
- package/dist-server/service/recipe/recipe-master-resolver.d.ts +1 -1
- package/dist-server/service/recipe/recipe-master-resolver.js +1 -1
- package/dist-server/service/recipe/recipe-master-resolver.js.map +1 -1
- package/dist-server/service/recipe/recipe-master.d.ts +1 -1
- package/dist-server/service/recipe/recipe-master.js +2 -2
- package/dist-server/service/recipe/recipe-master.js.map +1 -1
- package/dist-server/service/recipe/recipe-query.d.ts +11 -3
- package/dist-server/service/recipe/recipe-query.js +30 -9
- package/dist-server/service/recipe/recipe-query.js.map +1 -1
- package/dist-server/service/recipe/route-definition.d.ts +6 -6
- package/dist-server/service/recipe/route-definition.js +6 -6
- package/dist-server/service/recipe/route-definition.js.map +1 -1
- package/dist-server/service/resource/class-lineage.d.ts +46 -0
- package/dist-server/service/resource/class-lineage.js +80 -0
- package/dist-server/service/resource/class-lineage.js.map +1 -0
- package/dist-server/service/resource/class-members.d.ts +36 -0
- package/dist-server/service/resource/class-members.js +50 -0
- package/dist-server/service/resource/class-members.js.map +1 -0
- package/dist-server/service/resource/referrers.d.ts +54 -0
- package/dist-server/service/resource/referrers.js +99 -0
- package/dist-server/service/resource/referrers.js.map +1 -0
- package/dist-server/service/test-spec/criteria-check.d.ts +53 -0
- package/dist-server/service/test-spec/criteria-check.js +142 -0
- package/dist-server/service/test-spec/criteria-check.js.map +1 -0
- package/dist-server/service/test-spec/criteria-rows.d.ts +89 -0
- package/dist-server/service/test-spec/criteria-rows.js +139 -0
- package/dist-server/service/test-spec/criteria-rows.js.map +1 -0
- package/dist-server/service/test-spec/test-spec-master-resolver.d.ts +33 -7
- package/dist-server/service/test-spec/test-spec-master-resolver.js +137 -2
- package/dist-server/service/test-spec/test-spec-master-resolver.js.map +1 -1
- package/dist-server/service/test-spec/test-spec-query.d.ts +9 -1
- package/dist-server/service/test-spec/test-spec-query.js +23 -9
- package/dist-server/service/test-spec/test-spec-query.js.map +1 -1
- package/dist-server/service/test-spec/test-specification.js +1 -1
- package/dist-server/service/test-spec/test-specification.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/helps/ops-master/equipment-class.ko.md +11 -0
- package/helps/ops-master/equipment-class.md +11 -0
- package/helps/ops-master/equipment.ko.md +11 -0
- package/helps/ops-master/equipment.md +11 -0
- package/helps/ops-master/material-class.ko.md +11 -0
- package/helps/ops-master/material-class.md +11 -0
- package/helps/ops-master/material-definition.ko.md +11 -0
- package/helps/ops-master/material-definition.md +11 -0
- package/helps/ops-master/operation-definition.ko.md +11 -0
- package/helps/ops-master/operation-definition.md +11 -0
- package/helps/ops-master/operational-location.ko.md +11 -0
- package/helps/ops-master/operational-location.md +11 -0
- package/helps/ops-master/person.ko.md +11 -0
- package/helps/ops-master/person.md +11 -0
- package/helps/ops-master/personnel-class.ko.md +11 -0
- package/helps/ops-master/personnel-class.md +11 -0
- package/helps/ops-master/physical-asset-class.ko.md +11 -0
- package/helps/ops-master/physical-asset-class.md +11 -0
- package/helps/ops-master/physical-asset.ko.md +11 -0
- package/helps/ops-master/physical-asset.md +11 -0
- package/helps/ops-master/recipe-definition.ko.md +11 -0
- package/helps/ops-master/recipe-definition.md +11 -0
- package/helps/ops-master/route-definition.ko.md +11 -0
- package/helps/ops-master/route-definition.md +11 -0
- package/helps/ops-master/stop-reason.ko.md +11 -0
- package/helps/ops-master/stop-reason.md +11 -0
- package/helps/ops-master/test-specification.ko.md +11 -0
- package/helps/ops-master/test-specification.md +11 -0
- package/package.json +5 -5
- package/things-factory.config.js +22 -2
- package/translations/en.json +86 -3
- package/translations/ja.json +92 -1
- package/translations/ko.json +93 -10
- package/translations/ms.json +92 -1
- package/translations/zh.json +92 -1
- package/dist-client/pages/master-list.d.ts +0 -68
- package/dist-client/pages/master-list.js +0 -239
- package/dist-client/pages/master-list.js.map +0 -1
|
@@ -1,189 +1,39 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 마스터
|
|
2
|
+
* 마스터 축의 **이름 목록** — 옛 주소를 새 주소로 보내는 데만 쓴다.
|
|
3
3
|
*
|
|
4
|
-
* ── 왜
|
|
5
|
-
* 열두 축의
|
|
6
|
-
*
|
|
4
|
+
* ── 왜 이만큼만 남았나 ─────────────────────────────────────────────────────
|
|
5
|
+
* 이 파일에는 열두 축의 컬럼 선언이 250줄 들어 있었다. 화면이 하나였을 때의 것이다. 화면이 축마다
|
|
6
|
+
* 갈린 뒤로는 **각 화면 파일이 자기 컬럼을 갖고**, 여기 있던 선언은 아무도 읽지 않게 되었다.
|
|
7
|
+
* 읽히는 것은 `key` 하나뿐이다(`route.ts` 가 옛 주소를 새 주소로 보낼 때).
|
|
7
8
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* 안 읽히는데 그럴듯하게 서 있는 선언은 위험하다. 실제로 그랬다 — 자재 화면에 컬럼을 더하러 와서
|
|
10
|
+
* 이 파일을 먼저 고쳤고, 화면은 하나도 안 변했다. 그 사이 이 파일의 선언은 진짜 화면과 어긋나 있었다
|
|
11
|
+
* (자재의 유형·계보·제조법 칸이 없고, 주석에 「이 칸은 API 가 안 준다」고 적힌 낡은 사연이 남아 있었다).
|
|
12
|
+
*
|
|
13
|
+
* **컬럼을 고치려면 그 축의 화면 파일을 고친다** — `pages/master/<축>.ts`.
|
|
11
14
|
*/
|
|
12
|
-
/**
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
/* 이 등급이 요구하는 검사. 자격 인터록이 이 칸을 읽는다 — 비어 있으면 아무 검사도 요구하지 않는다. */
|
|
32
|
-
{ name: 'testSpecificationIds', label: 'required-tests', type: 'list', width: 200 },
|
|
33
|
-
...EFFECTIVE
|
|
34
|
-
]
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
key: 'person',
|
|
38
|
-
query: 'persons',
|
|
39
|
-
mutation: 'updateMultiplePerson',
|
|
40
|
-
title: 'person',
|
|
41
|
-
columns: [
|
|
42
|
-
...IDENTITY,
|
|
43
|
-
{ name: 'personnelClassIds', label: 'personnel-classes', type: 'list', width: 200 },
|
|
44
|
-
{ name: 'homeLocation', label: 'home-location', type: 'string', width: 140 },
|
|
45
|
-
{ name: 'workCalendar', label: 'work-calendar', type: 'json', width: 200 },
|
|
46
|
-
{ name: 'testResults', label: 'test-results', type: 'json', width: 200 },
|
|
47
|
-
...EFFECTIVE
|
|
48
|
-
]
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
key: 'equipmentClass',
|
|
52
|
-
query: 'equipmentClasses',
|
|
53
|
-
mutation: 'updateMultipleEquipmentClass',
|
|
54
|
-
title: 'equipment-class',
|
|
55
|
-
columns: [...IDENTITY, { name: 'baseIds', label: 'base-classes', type: 'list', width: 180 }, ...EFFECTIVE]
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
key: 'equipment',
|
|
59
|
-
query: 'equipmentList',
|
|
60
|
-
mutation: 'updateMultipleEquipment',
|
|
61
|
-
title: 'equipment',
|
|
62
|
-
columns: [
|
|
63
|
-
...IDENTITY,
|
|
64
|
-
/*
|
|
65
|
-
* 설비의 등급은 **하나**이고 이름이 `kind` 다(표준 EquipmentClassID · 계약의 kind 자리).
|
|
66
|
-
* 전에는 `equipmentClassIds` 라는 배열 칸을 물었는데 그런 칸이 없다. GraphQL 은 칸 하나가
|
|
67
|
-
* 틀리면 질의를 통째로 오류로 내므로, 설비 마스터 화면이 전부 400 이었다.
|
|
68
|
-
*/
|
|
69
|
-
{ name: 'kind', label: 'equipment-class', type: 'string', width: 200 },
|
|
70
|
-
{ name: 'identity', label: 'identity', type: 'string', width: 200 },
|
|
71
|
-
{ name: 'homeLocation', label: 'home-location', type: 'string', width: 140 },
|
|
72
|
-
/* 계획 조업 시간의 바탕. 비어 있으면 OEE 의 가동률이 「모름」이 된다. */
|
|
73
|
-
{ name: 'workCalendar', label: 'work-calendar', type: 'json', width: 200 },
|
|
74
|
-
...EFFECTIVE
|
|
75
|
-
]
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
key: 'stopReason',
|
|
79
|
-
query: 'stopReasonList',
|
|
80
|
-
mutation: 'updateMultipleStopReason',
|
|
81
|
-
title: 'stop-reason',
|
|
82
|
-
columns: [
|
|
83
|
-
...IDENTITY,
|
|
84
|
-
/* 어느 상태의 사유인가. 이 칸이 가동률을 깎느냐 마느냐를 가른다. */
|
|
85
|
-
{ name: 'status', label: 'state', type: 'string', width: 130 },
|
|
86
|
-
{ name: 'parentName', label: 'parent-reason', type: 'string', width: 150 },
|
|
87
|
-
{ name: 'detailRequired', label: 'detail-required', type: 'boolean', width: 110 },
|
|
88
|
-
...EFFECTIVE
|
|
89
|
-
]
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
key: 'physicalAssetClass',
|
|
93
|
-
query: 'physicalAssetClasses',
|
|
94
|
-
mutation: 'updateMultiplePhysicalAssetClass',
|
|
95
|
-
title: 'asset-class',
|
|
96
|
-
columns: [
|
|
97
|
-
...IDENTITY,
|
|
98
|
-
{ name: 'baseIds', label: 'base-classes', type: 'list', width: 180 },
|
|
99
|
-
{ name: 'testSpecificationIds', label: 'required-tests', type: 'list', width: 200 },
|
|
100
|
-
...EFFECTIVE
|
|
101
|
-
]
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
key: 'physicalAsset',
|
|
105
|
-
query: 'physicalAssets',
|
|
106
|
-
mutation: 'updateMultiplePhysicalAsset',
|
|
107
|
-
title: 'asset',
|
|
108
|
-
columns: [
|
|
109
|
-
...IDENTITY,
|
|
110
|
-
{ name: 'assetClassIds', label: 'asset-classes', type: 'list', width: 180 },
|
|
111
|
-
{ name: 'identity', label: 'grai', type: 'string', width: 200 },
|
|
112
|
-
/* 정격 사용 횟수. 비어 있으면 횟수로 막지 않는다. */
|
|
113
|
-
{ name: 'cycleLimit', label: 'cycle-limit', type: 'number', width: 110 },
|
|
114
|
-
{ name: 'testResults', label: 'calibrations', type: 'json', width: 200 },
|
|
115
|
-
...EFFECTIVE
|
|
116
|
-
]
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
key: 'materialClass',
|
|
120
|
-
query: 'materialClasses',
|
|
121
|
-
mutation: 'updateMultipleMaterialClass',
|
|
122
|
-
title: 'material-class',
|
|
123
|
-
columns: [...IDENTITY, { name: 'baseIds', label: 'base-classes', type: 'list', width: 180 }, ...EFFECTIVE]
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
key: 'materialDefinition',
|
|
127
|
-
query: 'materialDefinitions',
|
|
128
|
-
mutation: 'updateMultipleMaterialDefinition',
|
|
129
|
-
title: 'material',
|
|
130
|
-
columns: [
|
|
131
|
-
...IDENTITY,
|
|
132
|
-
{ name: 'materialClassIds', label: 'material-classes', type: 'list', width: 180 },
|
|
133
|
-
/*
|
|
134
|
-
* GTIN · 단위 · 보관처는 **API 가 내주지 않는다.** 전에는 `identity`·`uom`·`locationType` 을
|
|
135
|
-
* 물었는데 `MaterialDefinition` 에 그런 칸이 없다. GraphQL 은 칸 하나가 틀리면 질의를 통째로
|
|
136
|
-
* 오류로 내므로, 자재 마스터 화면이 전부 400 이었다.
|
|
137
|
-
*
|
|
138
|
-
* 그 값들이 어디에 사는지 모르는 채로 다른 칸을 대신 물지 않는다. 지금은 `properties` 로
|
|
139
|
-
* 있는 그대로 보이고, 제 칸이 생기면 그때 나눈다.
|
|
140
|
-
*/
|
|
141
|
-
{ name: 'properties', label: 'properties', type: 'json', width: 240 },
|
|
142
|
-
...EFFECTIVE
|
|
143
|
-
]
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
key: 'operationalLocation',
|
|
147
|
-
query: 'operationalLocations',
|
|
148
|
-
mutation: 'updateMultipleOperationalLocation',
|
|
149
|
-
title: 'location',
|
|
150
|
-
columns: [
|
|
151
|
-
...IDENTITY,
|
|
152
|
-
/* 스키마의 이름은 `level`·`parentId` 다. 전에는 `equipmentLevel`·`parentName` 을 물어 화면이 400 이었다. */
|
|
153
|
-
{ name: 'level', label: 'equipment-level', type: 'string', width: 140 },
|
|
154
|
-
{ name: 'parentId', label: 'parent-location', type: 'string', width: 150 },
|
|
155
|
-
{ name: 'type', label: 'location-type', type: 'string', width: 140 },
|
|
156
|
-
{ name: 'capacity', label: 'capacity', type: 'number', width: 90 },
|
|
157
|
-
...EFFECTIVE
|
|
158
|
-
]
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
key: 'operationDefinition',
|
|
162
|
-
query: 'operationDefinitions',
|
|
163
|
-
mutation: 'updateMultipleOperationDefinition',
|
|
164
|
-
title: 'operation',
|
|
165
|
-
columns: [
|
|
166
|
-
...IDENTITY,
|
|
167
|
-
{ name: 'intent', label: 'intent', type: 'string', width: 110 },
|
|
168
|
-
{ name: 'locationType', label: 'location-type', type: 'string', width: 140 },
|
|
169
|
-
{ name: 'resourceType', label: 'resource-type', type: 'string', width: 140 },
|
|
170
|
-
/* 품목당 표준 시간. 없으면 OEE 의 성능률이 「모름」이 된다. ISO 8601 기간 표기다. */
|
|
171
|
-
{ name: 'duration', label: 'duration', type: 'string', width: 110 },
|
|
172
|
-
/* 요구 인원. 자격 인터록이 이 칸을 읽는다. */
|
|
173
|
-
{ name: 'personnelSpecification', label: 'personnel-spec', type: 'json', width: 200 },
|
|
174
|
-
{ name: 'bizStep', label: 'biz-step', type: 'string', width: 200 },
|
|
175
|
-
...EFFECTIVE
|
|
176
|
-
]
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
key: 'testSpecification',
|
|
180
|
-
query: 'testSpecifications',
|
|
181
|
-
mutation: 'updateMultipleTestSpecification',
|
|
182
|
-
title: 'test-specification',
|
|
183
|
-
columns: [...IDENTITY, ...EFFECTIVE]
|
|
184
|
-
}
|
|
15
|
+
/**
|
|
16
|
+
* 축의 이름들.
|
|
17
|
+
*
|
|
18
|
+
* 순서는 뜻이 없다. 새 축이 생기면 여기에 더하고 `pages/master/` 에 화면을 만든다. 여기에만 더하면
|
|
19
|
+
* 옛 주소가 없는 화면으로 간다.
|
|
20
|
+
*/
|
|
21
|
+
export const MASTER_AXIS_KEYS = [
|
|
22
|
+
'personnelClass',
|
|
23
|
+
'person',
|
|
24
|
+
'equipmentClass',
|
|
25
|
+
'equipment',
|
|
26
|
+
'stopReason',
|
|
27
|
+
'physicalAssetClass',
|
|
28
|
+
'physicalAsset',
|
|
29
|
+
'materialClass',
|
|
30
|
+
'materialDefinition',
|
|
31
|
+
'operationalLocation',
|
|
32
|
+
'operationDefinition',
|
|
33
|
+
'testSpecification'
|
|
185
34
|
];
|
|
186
|
-
|
|
187
|
-
|
|
35
|
+
/** 아는 축인가. 모르는 이름이면 옛 주소를 새 주소로 보내지 않는다. */
|
|
36
|
+
export function isMasterAxisKey(key) {
|
|
37
|
+
return MASTER_AXIS_KEYS.includes(key);
|
|
188
38
|
}
|
|
189
39
|
//# sourceMappingURL=master-axes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"master-axes.js","sourceRoot":"","sources":["../../client/pages/master-axes.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * 마스터 열두 축의 **화면 쪽 선언** — 축마다 다른 것만 적는다.\n *\n * ── 왜 화면이 하나인가 ─────────────────────────────────────────────────────\n * 열두 축의 화면이 하는 일이 같다: 목록을 보이고, 그리드에서 고치고, 저장한다. 화면을 열둘 만들면\n * 규칙 하나를 고칠 때 열두 곳을 고쳐야 하고, 한 곳을 빠뜨리면 그 축만 다르게 동작한다.\n *\n * ── 왜 서버의 축 표와 따로 두나 ────────────────────────────────────────────\n * 서버가 아는 것은 「어느 표에서 읽나 · 무엇으로 찾나」이고, 화면이 아는 것은 「어느 칸을 어떤 모양으로\n * 보이나」다. 서로 다른 물음이라 한 표에 담으면 양쪽 다 지저분해진다. 축의 이름(`key`)만 같게 둔다.\n */\n\nexport type ColumnType = 'string' | 'number' | 'boolean' | 'date' | 'json' | 'list'\n\nexport interface AxisColumn {\n name: string\n /** 화면 문구 키. `field.<이것>`. */\n label: string\n type: ColumnType\n width?: number\n /** 고칠 수 없는 칸. 자동으로 붙는 값이 여기 온다. */\n readonly?: boolean\n}\n\nexport interface MasterAxisView {\n key: string\n /** GraphQL 조회 이름 — 서버가 낸 그대로. */\n query: string\n /** GraphQL 저장 이름. */\n mutation: string\n /** 제목 문구 키. `title.<이것>`. */\n title: string\n columns: AxisColumn[]\n}\n\n/** 열두 축이 공통으로 갖는 끝 칸들 — ISA-95 유효 기간. */\nconst EFFECTIVE: AxisColumn[] = [\n { name: 'effectiveStart', label: 'effective-start', type: 'date', width: 150 },\n { name: 'effectiveEnd', label: 'effective-end', type: 'date', width: 150 }\n]\n\n/** 이름과 설명은 열두 축이 모두 갖는다. */\nconst IDENTITY: AxisColumn[] = [\n { name: 'name', label: 'name', type: 'string', width: 160 },\n { name: 'description', label: 'description', type: 'string', width: 200 }\n]\n\nexport const MASTER_AXIS_VIEWS: readonly MasterAxisView[] = [\n {\n key: 'personnelClass',\n query: 'personnelClasses',\n mutation: 'updateMultiplePersonnelClass',\n title: 'personnel-class',\n columns: [\n ...IDENTITY,\n { name: 'baseIds', label: 'base-classes', type: 'list', width: 180 },\n /* 이 등급이 요구하는 검사. 자격 인터록이 이 칸을 읽는다 — 비어 있으면 아무 검사도 요구하지 않는다. */\n { name: 'testSpecificationIds', label: 'required-tests', type: 'list', width: 200 },\n ...EFFECTIVE\n ]\n },\n {\n key: 'person',\n query: 'persons',\n mutation: 'updateMultiplePerson',\n title: 'person',\n columns: [\n ...IDENTITY,\n { name: 'personnelClassIds', label: 'personnel-classes', type: 'list', width: 200 },\n { name: 'homeLocation', label: 'home-location', type: 'string', width: 140 },\n { name: 'workCalendar', label: 'work-calendar', type: 'json', width: 200 },\n { name: 'testResults', label: 'test-results', type: 'json', width: 200 },\n ...EFFECTIVE\n ]\n },\n {\n key: 'equipmentClass',\n query: 'equipmentClasses',\n mutation: 'updateMultipleEquipmentClass',\n title: 'equipment-class',\n columns: [...IDENTITY, { name: 'baseIds', label: 'base-classes', type: 'list', width: 180 }, ...EFFECTIVE]\n },\n {\n key: 'equipment',\n query: 'equipmentList',\n mutation: 'updateMultipleEquipment',\n title: 'equipment',\n columns: [\n ...IDENTITY,\n /*\n * 설비의 등급은 **하나**이고 이름이 `kind` 다(표준 EquipmentClassID · 계약의 kind 자리).\n * 전에는 `equipmentClassIds` 라는 배열 칸을 물었는데 그런 칸이 없다. GraphQL 은 칸 하나가\n * 틀리면 질의를 통째로 오류로 내므로, 설비 마스터 화면이 전부 400 이었다.\n */\n { name: 'kind', label: 'equipment-class', type: 'string', width: 200 },\n { name: 'identity', label: 'identity', type: 'string', width: 200 },\n { name: 'homeLocation', label: 'home-location', type: 'string', width: 140 },\n /* 계획 조업 시간의 바탕. 비어 있으면 OEE 의 가동률이 「모름」이 된다. */\n { name: 'workCalendar', label: 'work-calendar', type: 'json', width: 200 },\n ...EFFECTIVE\n ]\n },\n {\n key: 'stopReason',\n query: 'stopReasonList',\n mutation: 'updateMultipleStopReason',\n title: 'stop-reason',\n columns: [\n ...IDENTITY,\n /* 어느 상태의 사유인가. 이 칸이 가동률을 깎느냐 마느냐를 가른다. */\n { name: 'status', label: 'state', type: 'string', width: 130 },\n { name: 'parentName', label: 'parent-reason', type: 'string', width: 150 },\n { name: 'detailRequired', label: 'detail-required', type: 'boolean', width: 110 },\n ...EFFECTIVE\n ]\n },\n {\n key: 'physicalAssetClass',\n query: 'physicalAssetClasses',\n mutation: 'updateMultiplePhysicalAssetClass',\n title: 'asset-class',\n columns: [\n ...IDENTITY,\n { name: 'baseIds', label: 'base-classes', type: 'list', width: 180 },\n { name: 'testSpecificationIds', label: 'required-tests', type: 'list', width: 200 },\n ...EFFECTIVE\n ]\n },\n {\n key: 'physicalAsset',\n query: 'physicalAssets',\n mutation: 'updateMultiplePhysicalAsset',\n title: 'asset',\n columns: [\n ...IDENTITY,\n { name: 'assetClassIds', label: 'asset-classes', type: 'list', width: 180 },\n { name: 'identity', label: 'grai', type: 'string', width: 200 },\n /* 정격 사용 횟수. 비어 있으면 횟수로 막지 않는다. */\n { name: 'cycleLimit', label: 'cycle-limit', type: 'number', width: 110 },\n { name: 'testResults', label: 'calibrations', type: 'json', width: 200 },\n ...EFFECTIVE\n ]\n },\n {\n key: 'materialClass',\n query: 'materialClasses',\n mutation: 'updateMultipleMaterialClass',\n title: 'material-class',\n columns: [...IDENTITY, { name: 'baseIds', label: 'base-classes', type: 'list', width: 180 }, ...EFFECTIVE]\n },\n {\n key: 'materialDefinition',\n query: 'materialDefinitions',\n mutation: 'updateMultipleMaterialDefinition',\n title: 'material',\n columns: [\n ...IDENTITY,\n { name: 'materialClassIds', label: 'material-classes', type: 'list', width: 180 },\n /*\n * GTIN · 단위 · 보관처는 **API 가 내주지 않는다.** 전에는 `identity`·`uom`·`locationType` 을\n * 물었는데 `MaterialDefinition` 에 그런 칸이 없다. GraphQL 은 칸 하나가 틀리면 질의를 통째로\n * 오류로 내므로, 자재 마스터 화면이 전부 400 이었다.\n *\n * 그 값들이 어디에 사는지 모르는 채로 다른 칸을 대신 물지 않는다. 지금은 `properties` 로\n * 있는 그대로 보이고, 제 칸이 생기면 그때 나눈다.\n */\n { name: 'properties', label: 'properties', type: 'json', width: 240 },\n ...EFFECTIVE\n ]\n },\n {\n key: 'operationalLocation',\n query: 'operationalLocations',\n mutation: 'updateMultipleOperationalLocation',\n title: 'location',\n columns: [\n ...IDENTITY,\n /* 스키마의 이름은 `level`·`parentId` 다. 전에는 `equipmentLevel`·`parentName` 을 물어 화면이 400 이었다. */\n { name: 'level', label: 'equipment-level', type: 'string', width: 140 },\n { name: 'parentId', label: 'parent-location', type: 'string', width: 150 },\n { name: 'type', label: 'location-type', type: 'string', width: 140 },\n { name: 'capacity', label: 'capacity', type: 'number', width: 90 },\n ...EFFECTIVE\n ]\n },\n {\n key: 'operationDefinition',\n query: 'operationDefinitions',\n mutation: 'updateMultipleOperationDefinition',\n title: 'operation',\n columns: [\n ...IDENTITY,\n { name: 'intent', label: 'intent', type: 'string', width: 110 },\n { name: 'locationType', label: 'location-type', type: 'string', width: 140 },\n { name: 'resourceType', label: 'resource-type', type: 'string', width: 140 },\n /* 품목당 표준 시간. 없으면 OEE 의 성능률이 「모름」이 된다. ISO 8601 기간 표기다. */\n { name: 'duration', label: 'duration', type: 'string', width: 110 },\n /* 요구 인원. 자격 인터록이 이 칸을 읽는다. */\n { name: 'personnelSpecification', label: 'personnel-spec', type: 'json', width: 200 },\n { name: 'bizStep', label: 'biz-step', type: 'string', width: 200 },\n ...EFFECTIVE\n ]\n },\n {\n key: 'testSpecification',\n query: 'testSpecifications',\n mutation: 'updateMultipleTestSpecification',\n title: 'test-specification',\n columns: [...IDENTITY, ...EFFECTIVE]\n }\n]\n\nexport function masterAxisViewOf(key: string): MasterAxisView | undefined {\n return MASTER_AXIS_VIEWS.find(axis => axis.key === key)\n}\n"]}
|
|
1
|
+
{"version":3,"file":"master-axes.js","sourceRoot":"","sources":["../../client/pages/master-axes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,gBAAgB;IAChB,QAAQ;IACR,gBAAgB;IAChB,WAAW;IACX,YAAY;IACZ,oBAAoB;IACpB,eAAe;IACf,eAAe;IACf,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;IACrB,mBAAmB;CACX,CAAA;AAIV,4CAA4C;AAC5C,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAQ,gBAAsC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;AAC9D,CAAC","sourcesContent":["/**\n * 마스터 축의 **이름 목록** — 옛 주소를 새 주소로 보내는 데만 쓴다.\n *\n * ── 왜 이만큼만 남았나 ─────────────────────────────────────────────────────\n * 이 파일에는 열두 축의 컬럼 선언이 250줄 들어 있었다. 화면이 하나였을 때의 것이다. 화면이 축마다\n * 갈린 뒤로는 **각 화면 파일이 자기 컬럼을 갖고**, 여기 있던 선언은 아무도 읽지 않게 되었다.\n * 읽히는 것은 `key` 하나뿐이다(`route.ts` 가 옛 주소를 새 주소로 보낼 때).\n *\n * 안 읽히는데 그럴듯하게 서 있는 선언은 위험하다. 실제로 그랬다 — 자재 화면에 컬럼을 더하러 와서\n * 이 파일을 먼저 고쳤고, 화면은 하나도 안 변했다. 그 사이 이 파일의 선언은 진짜 화면과 어긋나 있었다\n * (자재의 유형·계보·제조법 칸이 없고, 주석에 「이 칸은 API 가 안 준다」고 적힌 낡은 사연이 남아 있었다).\n *\n * **컬럼을 고치려면 그 축의 화면 파일을 고친다** — `pages/master/<축>.ts`.\n */\n\n/**\n * 축의 이름들.\n *\n * 순서는 뜻이 없다. 새 축이 생기면 여기에 더하고 `pages/master/` 에 화면을 만든다. 여기에만 더하면\n * 옛 주소가 없는 화면으로 간다.\n */\nexport const MASTER_AXIS_KEYS = [\n 'personnelClass',\n 'person',\n 'equipmentClass',\n 'equipment',\n 'stopReason',\n 'physicalAssetClass',\n 'physicalAsset',\n 'materialClass',\n 'materialDefinition',\n 'operationalLocation',\n 'operationDefinition',\n 'testSpecification'\n] as const\n\nexport type MasterAxisKey = (typeof MASTER_AXIS_KEYS)[number]\n\n/** 아는 축인가. 모르는 이름이면 옛 주소를 새 주소로 보내지 않는다. */\nexport function isMasterAxisKey(key: string): key is MasterAxisKey {\n return (MASTER_AXIS_KEYS as readonly string[]).includes(key)\n}\n"]}
|
package/dist-client/route.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export default function route(page: string):
|
|
1
|
+
export default function route(page: string): string | undefined;
|
package/dist-client/route.js
CHANGED
|
@@ -1,8 +1,81 @@
|
|
|
1
|
+
import { isMasterAxisKey } from './pages/master-axes.js';
|
|
2
|
+
/*
|
|
3
|
+
* 마스터 화면은 축마다 하나다 — 이유는 `pages/master/master-page-base.ts` 에 적었다.
|
|
4
|
+
*
|
|
5
|
+
* 손으로 열두 벌 적는다. 축 목록에서 만들면 요소가 자기 코드를 가질 수 없고, 그러면 축이 자기
|
|
6
|
+
* 인터페이스를 요구할 때 공용 화면에 분기를 넣게 된다 — 갈라 놓은 이유와 어긋난다.
|
|
7
|
+
*/
|
|
1
8
|
export default function route(page) {
|
|
2
9
|
switch (page) {
|
|
3
|
-
case 'ops-master-
|
|
4
|
-
import('./pages/master-
|
|
5
|
-
return 'ops-master-
|
|
10
|
+
case 'ops-master-personnel-class':
|
|
11
|
+
import('./pages/master/personnel-class');
|
|
12
|
+
return 'ops-master-personnel-class';
|
|
13
|
+
case 'ops-master-person':
|
|
14
|
+
import('./pages/master/person');
|
|
15
|
+
return 'ops-master-person';
|
|
16
|
+
case 'ops-master-equipment-class':
|
|
17
|
+
import('./pages/master/equipment-class');
|
|
18
|
+
return 'ops-master-equipment-class';
|
|
19
|
+
case 'ops-master-equipment':
|
|
20
|
+
import('./pages/master/equipment');
|
|
21
|
+
return 'ops-master-equipment';
|
|
22
|
+
case 'ops-master-stop-reason':
|
|
23
|
+
import('./pages/master/stop-reason');
|
|
24
|
+
return 'ops-master-stop-reason';
|
|
25
|
+
case 'ops-master-physical-asset-class':
|
|
26
|
+
import('./pages/master/physical-asset-class');
|
|
27
|
+
return 'ops-master-physical-asset-class';
|
|
28
|
+
case 'ops-master-physical-asset':
|
|
29
|
+
import('./pages/master/physical-asset');
|
|
30
|
+
return 'ops-master-physical-asset';
|
|
31
|
+
case 'ops-master-material-class':
|
|
32
|
+
import('./pages/master/material-class');
|
|
33
|
+
return 'ops-master-material-class';
|
|
34
|
+
case 'ops-master-material-definition':
|
|
35
|
+
import('./pages/master/material-definition');
|
|
36
|
+
return 'ops-master-material-definition';
|
|
37
|
+
case 'ops-master-operational-location':
|
|
38
|
+
import('./pages/master/operational-location');
|
|
39
|
+
return 'ops-master-operational-location';
|
|
40
|
+
case 'ops-master-operation-definition':
|
|
41
|
+
import('./pages/master/operation-definition');
|
|
42
|
+
return 'ops-master-operation-definition';
|
|
43
|
+
case 'ops-master-test-specification':
|
|
44
|
+
import('./pages/master/test-specification');
|
|
45
|
+
return 'ops-master-test-specification';
|
|
46
|
+
case 'ops-master-route-definition':
|
|
47
|
+
import('./pages/master/route-definition');
|
|
48
|
+
return 'ops-master-route-definition';
|
|
49
|
+
case 'ops-master-recipe-definition':
|
|
50
|
+
import('./pages/master/recipe-definition');
|
|
51
|
+
return 'ops-master-recipe-definition';
|
|
52
|
+
/*
|
|
53
|
+
* 옛 주소 — `ops-master-list?axis=person`.
|
|
54
|
+
*
|
|
55
|
+
* 이 화면을 축마다 갈랐지만 **옛 주소가 남아 있다.** 북마크 · helps 문서 · MDI 에 열려 있던 탭이
|
|
56
|
+
* 그것을 가리킨다. 지우면 그 사람들에게 「페이지를 찾을 수 없습니다」가 나온다.
|
|
57
|
+
*
|
|
58
|
+
* ── 넘김은 라우팅 단계에서 한다 ─────────────────────────────────────────
|
|
59
|
+
* 처음에는 넘기는 화면을 하나 만들어 그 안에서 navigate 했다. 그러면 **그 화면이 MDI 탭을 하나
|
|
60
|
+
* 만들고 그 자리에 남는다** — 사용자는 이름 없는 빈 탭을 얻는다. navigate 는 주소만 바꾸고 이미
|
|
61
|
+
* 만들어진 탭을 지우지 않는다.
|
|
62
|
+
*
|
|
63
|
+
* 셸은 route() 가 `/` 로 시작하는 값을 돌려주면 페이지를 만들지 않고 그 주소로 넘긴다
|
|
64
|
+
* (`@operato/shell` 의 loadPage). 그래서 탭이 생기지 않는다.
|
|
65
|
+
*
|
|
66
|
+
* 축을 못 알아보면 넘기지 않는다 — 첫 축으로 대신 보내면 사용자는 자기가 다른 곳에 온 것을 모른다.
|
|
67
|
+
*
|
|
68
|
+
* 임시 호환이므로 **릴리즈 점검에서 비운다.**
|
|
69
|
+
*/
|
|
70
|
+
case 'ops-master-list': {
|
|
71
|
+
const key = new URLSearchParams(location.search).get('axis');
|
|
72
|
+
if (!key || !isMasterAxisKey(key)) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const { pathname } = location;
|
|
76
|
+
const base = pathname.slice(0, pathname.lastIndexOf('/'));
|
|
77
|
+
return `${base}/ops-master-${key.replace(/[A-Z]/g, c => '-' + c.toLowerCase())}`;
|
|
78
|
+
}
|
|
6
79
|
}
|
|
7
80
|
}
|
|
8
81
|
//# sourceMappingURL=route.js.map
|
package/dist-client/route.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.js","sourceRoot":"","sources":["../client/route.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,IAAY;IACxC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,iBAAiB;
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../client/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,IAAY;IACxC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,4BAA4B;YAC/B,MAAM,CAAC,gCAAgC,CAAC,CAAA;YACxC,OAAO,4BAA4B,CAAA;QACrC,KAAK,mBAAmB;YACtB,MAAM,CAAC,uBAAuB,CAAC,CAAA;YAC/B,OAAO,mBAAmB,CAAA;QAC5B,KAAK,4BAA4B;YAC/B,MAAM,CAAC,gCAAgC,CAAC,CAAA;YACxC,OAAO,4BAA4B,CAAA;QACrC,KAAK,sBAAsB;YACzB,MAAM,CAAC,0BAA0B,CAAC,CAAA;YAClC,OAAO,sBAAsB,CAAA;QAC/B,KAAK,wBAAwB;YAC3B,MAAM,CAAC,4BAA4B,CAAC,CAAA;YACpC,OAAO,wBAAwB,CAAA;QACjC,KAAK,iCAAiC;YACpC,MAAM,CAAC,qCAAqC,CAAC,CAAA;YAC7C,OAAO,iCAAiC,CAAA;QAC1C,KAAK,2BAA2B;YAC9B,MAAM,CAAC,+BAA+B,CAAC,CAAA;YACvC,OAAO,2BAA2B,CAAA;QACpC,KAAK,2BAA2B;YAC9B,MAAM,CAAC,+BAA+B,CAAC,CAAA;YACvC,OAAO,2BAA2B,CAAA;QACpC,KAAK,gCAAgC;YACnC,MAAM,CAAC,oCAAoC,CAAC,CAAA;YAC5C,OAAO,gCAAgC,CAAA;QACzC,KAAK,iCAAiC;YACpC,MAAM,CAAC,qCAAqC,CAAC,CAAA;YAC7C,OAAO,iCAAiC,CAAA;QAC1C,KAAK,iCAAiC;YACpC,MAAM,CAAC,qCAAqC,CAAC,CAAA;YAC7C,OAAO,iCAAiC,CAAA;QAC1C,KAAK,+BAA+B;YAClC,MAAM,CAAC,mCAAmC,CAAC,CAAA;YAC3C,OAAO,+BAA+B,CAAA;QACxC,KAAK,6BAA6B;YAChC,MAAM,CAAC,iCAAiC,CAAC,CAAA;YACzC,OAAO,6BAA6B,CAAA;QACtC,KAAK,8BAA8B;YACjC,MAAM,CAAC,kCAAkC,CAAC,CAAA;YAC1C,OAAO,8BAA8B,CAAA;QAEvC;;;;;;;;;;;;;;;;;WAiBG;QACH,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,GAAG,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAE5D,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,OAAM;YACR,CAAC;YAED,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAA;YAC7B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA;YAEzD,OAAO,GAAG,IAAI,eAAe,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,CAAA;QAClF,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import { isMasterAxisKey } from './pages/master-axes.js'\n\n/*\n * 마스터 화면은 축마다 하나다 — 이유는 `pages/master/master-page-base.ts` 에 적었다.\n *\n * 손으로 열두 벌 적는다. 축 목록에서 만들면 요소가 자기 코드를 가질 수 없고, 그러면 축이 자기\n * 인터페이스를 요구할 때 공용 화면에 분기를 넣게 된다 — 갈라 놓은 이유와 어긋난다.\n */\nexport default function route(page: string) {\n switch (page) {\n case 'ops-master-personnel-class':\n import('./pages/master/personnel-class')\n return 'ops-master-personnel-class'\n case 'ops-master-person':\n import('./pages/master/person')\n return 'ops-master-person'\n case 'ops-master-equipment-class':\n import('./pages/master/equipment-class')\n return 'ops-master-equipment-class'\n case 'ops-master-equipment':\n import('./pages/master/equipment')\n return 'ops-master-equipment'\n case 'ops-master-stop-reason':\n import('./pages/master/stop-reason')\n return 'ops-master-stop-reason'\n case 'ops-master-physical-asset-class':\n import('./pages/master/physical-asset-class')\n return 'ops-master-physical-asset-class'\n case 'ops-master-physical-asset':\n import('./pages/master/physical-asset')\n return 'ops-master-physical-asset'\n case 'ops-master-material-class':\n import('./pages/master/material-class')\n return 'ops-master-material-class'\n case 'ops-master-material-definition':\n import('./pages/master/material-definition')\n return 'ops-master-material-definition'\n case 'ops-master-operational-location':\n import('./pages/master/operational-location')\n return 'ops-master-operational-location'\n case 'ops-master-operation-definition':\n import('./pages/master/operation-definition')\n return 'ops-master-operation-definition'\n case 'ops-master-test-specification':\n import('./pages/master/test-specification')\n return 'ops-master-test-specification'\n case 'ops-master-route-definition':\n import('./pages/master/route-definition')\n return 'ops-master-route-definition'\n case 'ops-master-recipe-definition':\n import('./pages/master/recipe-definition')\n return 'ops-master-recipe-definition'\n\n /*\n * 옛 주소 — `ops-master-list?axis=person`.\n *\n * 이 화면을 축마다 갈랐지만 **옛 주소가 남아 있다.** 북마크 · helps 문서 · MDI 에 열려 있던 탭이\n * 그것을 가리킨다. 지우면 그 사람들에게 「페이지를 찾을 수 없습니다」가 나온다.\n *\n * ── 넘김은 라우팅 단계에서 한다 ─────────────────────────────────────────\n * 처음에는 넘기는 화면을 하나 만들어 그 안에서 navigate 했다. 그러면 **그 화면이 MDI 탭을 하나\n * 만들고 그 자리에 남는다** — 사용자는 이름 없는 빈 탭을 얻는다. navigate 는 주소만 바꾸고 이미\n * 만들어진 탭을 지우지 않는다.\n *\n * 셸은 route() 가 `/` 로 시작하는 값을 돌려주면 페이지를 만들지 않고 그 주소로 넘긴다\n * (`@operato/shell` 의 loadPage). 그래서 탭이 생기지 않는다.\n *\n * 축을 못 알아보면 넘기지 않는다 — 첫 축으로 대신 보내면 사용자는 자기가 다른 곳에 온 것을 모른다.\n *\n * 임시 호환이므로 **릴리즈 점검에서 비운다.**\n */\n case 'ops-master-list': {\n const key = new URLSearchParams(location.search).get('axis')\n\n if (!key || !isMasterAxisKey(key)) {\n return\n }\n\n const { pathname } = location\n const base = pathname.slice(0, pathname.lastIndexOf('/'))\n\n return `${base}/ops-master-${key.replace(/[A-Z]/g, c => '-' + c.toLowerCase())}`\n }\n }\n}\n"]}
|