@things-factory/meta-ui 5.0.0-zeta.7 → 5.0.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/client/bootstrap.js +37 -11
- package/client/pages/menu/dynamic-menu.js +160 -144
- package/client/route.js +32 -8
- package/client/utils/meta-util.js +219 -155
- package/package.json +3 -3
- package/client/mixin/handler-basic-button-mixin.js +0 -1
- package/client/mixin/handler-common-button-mixin.js +0 -1
- package/client/mixin/handler-custom-button-mixin.js +0 -1
- package/client/mixin/handler-graphql-mixin.js +0 -34
- package/client/mixin/handler-grist-button-mixin.js +0 -1
- package/client/mixin/meta-set-mixin.js +0 -1
- package/client/mixin/meta-util-mixin.js +0 -1
- package/client/mixin/render-basic-form-mixin.js +0 -23
- package/client/mixin/render-basic-grist-mixin.js +0 -16
- package/client/mixin/render-button-mixin.js +0 -15
- package/client/mixin/render-grist-mixin.js +0 -37
- package/client/mixin/render-search-mixin.js +0 -1
- package/client/pages/basic-form-element.js +0 -9
- package/client/pages/basic-grist-element.js +0 -11
- package/client/pages/basic-grist-page.js +0 -12
package/client/bootstrap.js
CHANGED
|
@@ -13,13 +13,13 @@ export default function bootstrap() {
|
|
|
13
13
|
|
|
14
14
|
auth.on('profile', async ({ credential, domains, domain }) => {
|
|
15
15
|
// 1. 용어 다운로드
|
|
16
|
-
let locale = MetaUtil.currentLocale()
|
|
17
|
-
await TermsUtil.downloadTerminologies(locale)
|
|
16
|
+
let locale = MetaUtil.currentLocale();
|
|
17
|
+
await TermsUtil.downloadTerminologies(locale);
|
|
18
18
|
|
|
19
19
|
// 2. 메뉴 정보를 서버로 부터 받아서 적용
|
|
20
|
-
let menuRoutes = await MetaUtil.myDynamicMenus()
|
|
20
|
+
let menuRoutes = await MetaUtil.myDynamicMenus();
|
|
21
21
|
let realMenus = menuRoutes.menus;
|
|
22
|
-
updateMenuTemplate(realMenus)
|
|
22
|
+
updateMenuTemplate(realMenus);
|
|
23
23
|
|
|
24
24
|
// 3. 동적 메뉴 관리 화면 추가
|
|
25
25
|
store.dispatch({
|
|
@@ -43,23 +43,49 @@ export default function bootstrap() {
|
|
|
43
43
|
navigate('config-terminology')
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
|
-
})
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
// 5. 모든 routes 정보 추출
|
|
49
|
+
let allRoutes = menuRoutes.routes;
|
|
47
50
|
|
|
48
|
-
//
|
|
51
|
+
// 6. store의 모듈 정보 조회 & 마지막 application 모듈 정보를 추출
|
|
49
52
|
let modules = store.getState().app.modules;
|
|
50
|
-
let allModules = Object.assign([], modules)
|
|
53
|
+
let allModules = Object.assign([], modules);
|
|
51
54
|
let appModule = allModules[allModules.length - 1];
|
|
52
|
-
appModule.routes = menuRoutes.routes;
|
|
53
55
|
|
|
54
|
-
//
|
|
56
|
+
// 7. 최종 애플리케이션 모듈의 routes 정보 교체
|
|
57
|
+
appModule.routes = allRoutes.filter(r => {
|
|
58
|
+
return r.template && !r.template.startsWith('@things-factory')
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
// 8. meta-ui 모듈 추출
|
|
62
|
+
let metaUiModule = allModules.find(m => {
|
|
63
|
+
return m.name == '@things-factory/meta-ui'
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
// 9. meta-ui의 routes 정보 교체
|
|
67
|
+
let metaUiRoutes = allRoutes.filter(r => {
|
|
68
|
+
let isMetaUiRoute = r.template && r.template.startsWith('@things-factory/meta-ui');
|
|
69
|
+
if(isMetaUiRoute) {
|
|
70
|
+
r.template = r.template.replace('@things-factory/meta-ui/client', '.')
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return isMetaUiRoute;
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
this.routes.forEach(r => {
|
|
77
|
+
metaUiRoutes.push({ page : r.page, tagname : r.tagname })
|
|
78
|
+
});
|
|
79
|
+
metaUiModule.routes = metaUiRoutes;
|
|
80
|
+
|
|
81
|
+
// 10. store에 모듈 업데이트
|
|
55
82
|
store.dispatch({
|
|
56
83
|
type: UPDATE_MODULES,
|
|
57
84
|
modules: allModules
|
|
58
85
|
})
|
|
59
86
|
|
|
60
|
-
//
|
|
87
|
+
// 11. 첫 페이지를 리로딩 처리 (shell/app.js에서 리로딩 처리시에는 라우팅 정보가 없어서 처리를 못하므로 여기서 다시 한번 해줌...)
|
|
61
88
|
// TODO 먼저 PAGE_NOT_FOUND 화면이 나온 후에 화면이 나오는 부분 처리 필요 ...
|
|
62
89
|
store.dispatch(navigateWithSilence(location))
|
|
63
90
|
})
|
|
64
|
-
|
|
65
91
|
}
|
|
@@ -1,17 +1,16 @@
|
|
|
1
|
+
import '@things-factory/form-ui'
|
|
2
|
+
import '@things-factory/grist-ui'
|
|
3
|
+
import './dynamic-menu-template.js'
|
|
4
|
+
|
|
1
5
|
import { css, html } from 'lit-element'
|
|
2
6
|
|
|
3
|
-
import {
|
|
7
|
+
import { CommonGristStyles, ScrollbarStyles } from '@operato/styles'
|
|
4
8
|
import { i18next, localize } from '@things-factory/i18n-base'
|
|
5
9
|
import { PageView } from '@things-factory/shell'
|
|
6
10
|
import { isMobileDevice } from '@things-factory/utils'
|
|
7
|
-
import { openPopup } from '@things-factory/layout-base'
|
|
8
11
|
|
|
9
|
-
import '@things-factory/form-ui'
|
|
10
|
-
import '@things-factory/grist-ui'
|
|
11
|
-
import './dynamic-menu-template.js'
|
|
12
|
-
|
|
13
|
-
import { TermsUtil } from './../../utils/terms-util'
|
|
14
12
|
import { MetaUtil } from '../../utils/meta-util'
|
|
13
|
+
import { TermsUtil } from '../../utils/terms-util'
|
|
15
14
|
|
|
16
15
|
class DynamicMenu extends localize(i18next)(PageView) {
|
|
17
16
|
static get properties() {
|
|
@@ -28,87 +27,95 @@ class DynamicMenu extends localize(i18next)(PageView) {
|
|
|
28
27
|
CommonGristStyles,
|
|
29
28
|
ScrollbarStyles,
|
|
30
29
|
css`
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
30
|
+
:host {
|
|
31
|
+
display: flex;
|
|
32
|
+
flex-direction: column;
|
|
33
|
+
overflow-x: auto;
|
|
34
|
+
background-color: var(--main-section-background-color);
|
|
35
|
+
}
|
|
36
|
+
.container {
|
|
37
|
+
flex: 1;
|
|
38
|
+
display: grid;
|
|
39
|
+
overflow: hidden;
|
|
40
|
+
grid-template-rows: 50% 50%;
|
|
41
|
+
}
|
|
42
|
+
.container_detail {
|
|
43
|
+
background-color: var(--main-section-background-color);
|
|
44
|
+
display: flex;
|
|
45
|
+
flex-direction: column;
|
|
46
|
+
flex: 1;
|
|
47
|
+
overflow-y: auto;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
h2 {
|
|
51
|
+
padding: var(--subtitle-padding);
|
|
52
|
+
font: var(--subtitle-font);
|
|
53
|
+
color: var(--subtitle-text-color);
|
|
54
|
+
border-bottom: var(--subtitle-border-bottom);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.container_detail h2 {
|
|
58
|
+
margin: var(--grist-title-margin);
|
|
59
|
+
border: var(--grist-title-border);
|
|
60
|
+
font: var(--grist-title-font);
|
|
61
|
+
color: var(--secondary-color);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.container_detail h2 mwc-icon {
|
|
65
|
+
vertical-align: middle;
|
|
66
|
+
margin: var(--grist-title-icon-margin);
|
|
67
|
+
font-size: var(--grist-title-icon-size);
|
|
68
|
+
color: var(--grist-title-icon-color);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
h2 {
|
|
72
|
+
padding-bottom: var(--grist-title-with-grid-padding);
|
|
73
|
+
}
|
|
74
|
+
ox-grist {
|
|
75
|
+
overflow-y: auto;
|
|
76
|
+
flex: 1;
|
|
77
|
+
}
|
|
78
|
+
.button-container {
|
|
79
|
+
padding: var(--button-container-padding);
|
|
80
|
+
margin: var(--button-container-margin);
|
|
81
|
+
text-align: var(--button-container-align);
|
|
82
|
+
background-color: var(--button-container-background);
|
|
83
|
+
height: var(--button-container-height);
|
|
84
|
+
text-align: right;
|
|
85
|
+
padding-right: 12px;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
mwc-button {
|
|
89
|
+
margin-left: 7px;
|
|
90
|
+
margin-top: 7px;
|
|
91
|
+
}
|
|
92
|
+
`
|
|
93
|
+
]
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
// 화면
|
|
96
|
+
// 화면
|
|
97
97
|
render() {
|
|
98
98
|
return html`
|
|
99
99
|
<div slot="headroom">
|
|
100
100
|
<div id="filters">
|
|
101
|
-
<ox-filters-form-base
|
|
102
|
-
|
|
101
|
+
<ox-filters-form-base
|
|
102
|
+
.filters=${this.searchFields}
|
|
103
|
+
@filters-change=${e => {
|
|
104
|
+
this.groupGrist?.fetch()
|
|
105
|
+
}}
|
|
106
|
+
></ox-filters-form-base>
|
|
103
107
|
</div>
|
|
104
108
|
</div>
|
|
105
|
-
<div class=
|
|
109
|
+
<div class="container">
|
|
106
110
|
<div class="container_detail">
|
|
107
|
-
<h2>
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
.
|
|
111
|
+
<h2><mwc-icon>list_alt</mwc-icon>${TermsUtil.tTitle('menu_group')}</h2>
|
|
112
|
+
<ox-grist
|
|
113
|
+
id="group-grist"
|
|
114
|
+
.config=${this.groupConfig}
|
|
115
|
+
.mode=${isMobileDevice() ? 'LIST' : 'GRID'}
|
|
116
|
+
auto-fetch
|
|
117
|
+
.fetchHandler=${this.fetchGroupHandler.bind(this)}
|
|
118
|
+
>
|
|
112
119
|
</ox-grist>
|
|
113
120
|
<div id="button-container" class="button-container">
|
|
114
121
|
<mwc-button raised label="${TermsUtil.tButton('save')}" @click=${e => this.saveGroup()}></mwc-button>
|
|
@@ -116,8 +123,13 @@ class DynamicMenu extends localize(i18next)(PageView) {
|
|
|
116
123
|
</div>
|
|
117
124
|
</div>
|
|
118
125
|
<div class="container_detail">
|
|
119
|
-
<ox-grist
|
|
120
|
-
|
|
126
|
+
<ox-grist
|
|
127
|
+
id="detail-grist"
|
|
128
|
+
.config=${this.detailConfig}
|
|
129
|
+
.mode=${isMobileDevice() ? 'LIST' : 'GRID'}
|
|
130
|
+
explcit-fetch
|
|
131
|
+
.fetchHandler=${this.fetchDetailHandler.bind(this)}
|
|
132
|
+
>
|
|
121
133
|
</ox-grist>
|
|
122
134
|
<div id="button-container" class="button-container">
|
|
123
135
|
<mwc-button raised label="${TermsUtil.tButton('save')}" @click=${e => this.saveMenu()}></mwc-button>
|
|
@@ -130,7 +142,7 @@ class DynamicMenu extends localize(i18next)(PageView) {
|
|
|
130
142
|
|
|
131
143
|
get context() {
|
|
132
144
|
return {
|
|
133
|
-
title: TermsUtil.tTitle('dynamic_menu')
|
|
145
|
+
title: TermsUtil.tTitle('dynamic_menu')
|
|
134
146
|
}
|
|
135
147
|
}
|
|
136
148
|
|
|
@@ -139,7 +151,7 @@ class DynamicMenu extends localize(i18next)(PageView) {
|
|
|
139
151
|
}
|
|
140
152
|
|
|
141
153
|
/**
|
|
142
|
-
* 메뉴 그룹 그리드
|
|
154
|
+
* 메뉴 그룹 그리드
|
|
143
155
|
*/
|
|
144
156
|
get groupGrist() {
|
|
145
157
|
return this.shadowRoot.querySelector('#group-grist')
|
|
@@ -159,16 +171,18 @@ class DynamicMenu extends localize(i18next)(PageView) {
|
|
|
159
171
|
/**
|
|
160
172
|
* @description 부모 메뉴 (메뉴 그룹) 선택시 하위 메뉴 리스트 조회
|
|
161
173
|
*********************************
|
|
162
|
-
* @param {Object} param0
|
|
174
|
+
* @param {Object} param0
|
|
163
175
|
*/
|
|
164
176
|
async fetchDetailHandler({ page, limit, sorters = [{ name: 'rank' }, { name: 'name' }] }) {
|
|
165
|
-
if(this.menuGroupId) {
|
|
166
|
-
let filters = [
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
177
|
+
if (this.menuGroupId) {
|
|
178
|
+
let filters = [
|
|
179
|
+
{
|
|
180
|
+
name: 'parent',
|
|
181
|
+
operator: 'eq',
|
|
182
|
+
value: this.menuGroupId
|
|
183
|
+
}
|
|
184
|
+
]
|
|
185
|
+
|
|
172
186
|
let selectFields = `
|
|
173
187
|
id
|
|
174
188
|
name
|
|
@@ -180,28 +194,25 @@ class DynamicMenu extends localize(i18next)(PageView) {
|
|
|
180
194
|
hiddenFlag
|
|
181
195
|
iconPath
|
|
182
196
|
`
|
|
183
|
-
return await MetaUtil.searchByPagination('menus', filters, sorters, page, limit, selectFields)
|
|
197
|
+
return await MetaUtil.searchByPagination('menus', filters, sorters, page, limit, selectFields)
|
|
184
198
|
}
|
|
185
199
|
}
|
|
186
200
|
|
|
187
201
|
/**
|
|
188
202
|
* @description 부모 메뉴 (메뉴 그룹) 조회
|
|
189
203
|
****************************************
|
|
190
|
-
* @param {Object} param0
|
|
191
|
-
* @returns
|
|
204
|
+
* @param {Object} param0
|
|
205
|
+
* @returns
|
|
192
206
|
*/
|
|
193
207
|
async fetchGroupHandler({ page, limit, sorters = [{ name: 'rank' }, { name: 'name' }] }) {
|
|
194
|
-
// 선택된 부모 메뉴 ID 초기화
|
|
195
|
-
this.menuGroupId = null
|
|
208
|
+
// 선택된 부모 메뉴 ID 초기화
|
|
209
|
+
this.menuGroupId = null
|
|
196
210
|
|
|
197
|
-
if(this.detailGrist && this.detailGrist.data) {
|
|
198
|
-
this.detailGrist.data = {}
|
|
211
|
+
if (this.detailGrist && this.detailGrist.data) {
|
|
212
|
+
this.detailGrist.data = {}
|
|
199
213
|
}
|
|
200
214
|
|
|
201
|
-
let filters = [
|
|
202
|
-
...await this.searchForm.getQueryFilters(),
|
|
203
|
-
{ name: 'parent', operator: 'is_null', value: '' }
|
|
204
|
-
];
|
|
215
|
+
let filters = [...(await this.searchForm.getQueryFilters()), { name: 'parent', operator: 'is_null', value: '' }]
|
|
205
216
|
|
|
206
217
|
let selectFields = `
|
|
207
218
|
id
|
|
@@ -215,7 +226,7 @@ class DynamicMenu extends localize(i18next)(PageView) {
|
|
|
215
226
|
hiddenFlag
|
|
216
227
|
iconPath
|
|
217
228
|
`
|
|
218
|
-
return await MetaUtil.searchByPagination('menus', filters, sorters, page, limit, selectFields)
|
|
229
|
+
return await MetaUtil.searchByPagination('menus', filters, sorters, page, limit, selectFields)
|
|
219
230
|
}
|
|
220
231
|
|
|
221
232
|
/*******************************************/
|
|
@@ -223,38 +234,37 @@ class DynamicMenu extends localize(i18next)(PageView) {
|
|
|
223
234
|
/*******************************************/
|
|
224
235
|
|
|
225
236
|
/**
|
|
226
|
-
* 메뉴 그룹 Create / Update
|
|
237
|
+
* 메뉴 그룹 Create / Update
|
|
227
238
|
*/
|
|
228
239
|
async saveGroup() {
|
|
229
|
-
await MetaUtil.updateMultipleData(this.groupGrist, 'updateMultipleMenu')
|
|
240
|
+
await MetaUtil.updateMultipleData(this.groupGrist, 'updateMultipleMenu')
|
|
230
241
|
}
|
|
231
242
|
|
|
232
243
|
/**
|
|
233
|
-
* 메뉴 그룹 Delete
|
|
234
|
-
* @returns
|
|
244
|
+
* 메뉴 그룹 Delete
|
|
245
|
+
* @returns
|
|
235
246
|
*/
|
|
236
247
|
async deleteGroup() {
|
|
237
248
|
await MetaUtil.deleteListByGristSelected(this.groupGrist, 'deleteMenus')
|
|
238
249
|
}
|
|
239
250
|
|
|
240
251
|
/**
|
|
241
|
-
* 메뉴 Create / Update
|
|
252
|
+
* 메뉴 Create / Update
|
|
242
253
|
*/
|
|
243
254
|
async saveMenu() {
|
|
244
|
-
let cudRecords = this.detailGrist.dirtyRecords
|
|
255
|
+
let cudRecords = this.detailGrist.dirtyRecords
|
|
245
256
|
|
|
246
257
|
if (!cudRecords || cudRecords.length == 0) {
|
|
247
|
-
MetaUtil.showAlertPopup('text.nothing_selected', 'text.there_is_nothing_to_delete', 'info', 'confirm')
|
|
248
|
-
|
|
258
|
+
MetaUtil.showAlertPopup('text.nothing_selected', 'text.there_is_nothing_to_delete', 'info', 'confirm')
|
|
249
259
|
} else {
|
|
250
|
-
let patches = MetaUtil.patchForUpdateMultiple(cudRecords)
|
|
260
|
+
let patches = MetaUtil.patchForUpdateMultiple(cudRecords)
|
|
251
261
|
|
|
252
262
|
patches.forEach(patch => {
|
|
253
263
|
patch.menuType = 'SCREEN'
|
|
254
|
-
patch.parent = { id
|
|
264
|
+
patch.parent = { id: this.menuGroupId }
|
|
255
265
|
})
|
|
256
266
|
|
|
257
|
-
let result = await MetaUtil.updateMultiple('updateMultipleMenu', patches)
|
|
267
|
+
let result = await MetaUtil.updateMultiple('updateMultipleMenu', patches)
|
|
258
268
|
if (result) {
|
|
259
269
|
this.detailGrist.fetch()
|
|
260
270
|
}
|
|
@@ -262,38 +272,38 @@ class DynamicMenu extends localize(i18next)(PageView) {
|
|
|
262
272
|
}
|
|
263
273
|
|
|
264
274
|
/**
|
|
265
|
-
* 메뉴 Delete
|
|
266
|
-
* @returns
|
|
275
|
+
* 메뉴 Delete
|
|
276
|
+
* @returns
|
|
267
277
|
*/
|
|
268
278
|
async deleteMenu() {
|
|
269
279
|
await MetaUtil.deleteListByGristSelected(this.detailGrist, 'deleteMenus')
|
|
270
280
|
}
|
|
271
281
|
|
|
272
282
|
groupMenuQuery(record) {
|
|
273
|
-
this.menuGroupId = record.id
|
|
274
|
-
this.detailGrist.fetch()
|
|
283
|
+
this.menuGroupId = record.id
|
|
284
|
+
this.detailGrist.fetch()
|
|
275
285
|
}
|
|
276
286
|
|
|
277
287
|
/**
|
|
278
|
-
* 메뉴 템플릿을 편집 할 수 있는 팝업을 오픈한다.
|
|
279
|
-
* @param {Object} record
|
|
288
|
+
* 메뉴 템플릿을 편집 할 수 있는 팝업을 오픈한다.
|
|
289
|
+
* @param {Object} record
|
|
280
290
|
*/
|
|
281
|
-
async openMenuTemplatePopup(record){
|
|
282
|
-
let menuTemplateElement = MetaUtil.createCustomElement('dynamic-menu-template', 'dynamic-menu-template')
|
|
283
|
-
menuTemplateElement.title = TermsUtil.tLabel('template')
|
|
284
|
-
menuTemplateElement.recordId = record.id
|
|
285
|
-
await MetaUtil.openPopupByElement(record.name, 'large', menuTemplateElement, true)
|
|
291
|
+
async openMenuTemplatePopup(record) {
|
|
292
|
+
let menuTemplateElement = MetaUtil.createCustomElement('dynamic-menu-template', 'dynamic-menu-template')
|
|
293
|
+
menuTemplateElement.title = TermsUtil.tLabel('template')
|
|
294
|
+
menuTemplateElement.recordId = record.id
|
|
295
|
+
await MetaUtil.openPopupByElement(record.name, 'large', menuTemplateElement, true)
|
|
286
296
|
}
|
|
287
297
|
|
|
288
298
|
/**
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
299
|
+
* LifeCycle
|
|
300
|
+
* 화면 레더링 설정
|
|
301
|
+
*/
|
|
292
302
|
async pageInitialized() {
|
|
293
303
|
// 공통 코드 메뉴타입 조회
|
|
294
|
-
let menuTypes = await MetaUtil.getCodeSelectorData('MENU_TYPE')
|
|
304
|
+
let menuTypes = await MetaUtil.getCodeSelectorData('MENU_TYPE')
|
|
295
305
|
|
|
296
|
-
// 조회 필드
|
|
306
|
+
// 조회 필드
|
|
297
307
|
this.searchFields = [
|
|
298
308
|
// name, type, label, operator, optionValues
|
|
299
309
|
MetaUtil.getGristSearchColumnConfig('name', 'string', 'name', 'i_like'),
|
|
@@ -301,21 +311,24 @@ class DynamicMenu extends localize(i18next)(PageView) {
|
|
|
301
311
|
MetaUtil.getGristSearchColumnConfig('hiddenFlag', 'checkbox', 'hidden_flag', 'eq')
|
|
302
312
|
]
|
|
303
313
|
|
|
304
|
-
// 메뉴 그룹 그리드 설정
|
|
314
|
+
// 메뉴 그룹 그리드 설정
|
|
305
315
|
this.groupConfig = {
|
|
306
316
|
rows: MetaUtil.getGristSelectableConfig(false),
|
|
307
317
|
pagination: MetaUtil.getGristPagination50Config(),
|
|
308
318
|
appendable: true,
|
|
309
319
|
columns: [
|
|
310
320
|
...MetaUtil.getGristGuttersDefaultConfig(false),
|
|
311
|
-
{
|
|
321
|
+
{
|
|
322
|
+
type: 'gutter',
|
|
323
|
+
gutterName: 'button',
|
|
324
|
+
icon: 'menu_open',
|
|
312
325
|
handlers: {
|
|
313
326
|
click: (_columns, _data, _column, record, _rowIndex) => {
|
|
314
327
|
if (record.id) {
|
|
315
|
-
this.groupMenuQuery(record)
|
|
328
|
+
this.groupMenuQuery(record)
|
|
316
329
|
}
|
|
317
330
|
}
|
|
318
|
-
}
|
|
331
|
+
}
|
|
319
332
|
},
|
|
320
333
|
// type, name, align, editable, sortable, width
|
|
321
334
|
MetaUtil.getGristColumnConfig('integer', 'rank', 'right', true, false, 60),
|
|
@@ -328,7 +341,7 @@ class DynamicMenu extends localize(i18next)(PageView) {
|
|
|
328
341
|
editable: false,
|
|
329
342
|
align: 'left',
|
|
330
343
|
renderer: (value, column, record, rowIndex, field) => {
|
|
331
|
-
return record.name ? TermsUtil.tMenu(record.name) : ''
|
|
344
|
+
return record.name ? TermsUtil.tMenu(record.name) : ''
|
|
332
345
|
}
|
|
333
346
|
},
|
|
334
347
|
sortable: false,
|
|
@@ -339,25 +352,28 @@ class DynamicMenu extends localize(i18next)(PageView) {
|
|
|
339
352
|
MetaUtil.getGristSelectorColumnConfig('menuType', 'menu_type', 'left', false, 100, true, menuTypes),
|
|
340
353
|
// type, name, displayName, align, editable, sortable, width
|
|
341
354
|
MetaUtil.getGristColumnConfig2('string', 'iconPath', 'icon', 'left', true, false, 100),
|
|
342
|
-
MetaUtil.getGristColumnConfig2('boolean', 'hiddenFlag', 'hidden_flag', 'center', true, false, 100)
|
|
355
|
+
MetaUtil.getGristColumnConfig2('boolean', 'hiddenFlag', 'hidden_flag', 'center', true, false, 100)
|
|
343
356
|
]
|
|
344
357
|
}
|
|
345
358
|
|
|
346
|
-
// 메뉴 그리드 설정
|
|
359
|
+
// 메뉴 그리드 설정
|
|
347
360
|
this.detailConfig = {
|
|
348
361
|
rows: MetaUtil.getGristSelectableConfig(false),
|
|
349
362
|
pagination: MetaUtil.getGristPagination50Config(),
|
|
350
363
|
appendable: true,
|
|
351
364
|
columns: [
|
|
352
365
|
...MetaUtil.getGristGuttersDefaultConfig(false),
|
|
353
|
-
{
|
|
366
|
+
{
|
|
367
|
+
type: 'gutter',
|
|
368
|
+
gutterName: 'button',
|
|
369
|
+
icon: 'code',
|
|
354
370
|
handlers: {
|
|
355
371
|
click: (_columns, _data, _column, record, _rowIndex) => {
|
|
356
372
|
if (record.id) {
|
|
357
|
-
this.openMenuTemplatePopup(record)
|
|
373
|
+
this.openMenuTemplatePopup(record)
|
|
358
374
|
}
|
|
359
375
|
}
|
|
360
|
-
}
|
|
376
|
+
}
|
|
361
377
|
},
|
|
362
378
|
MetaUtil.getGristColumnConfig('integer', 'rank', 'right', true, false, 55),
|
|
363
379
|
MetaUtil.getGristColumnConfig('string', 'name', 'left', true, false, 135),
|
|
@@ -369,7 +385,7 @@ class DynamicMenu extends localize(i18next)(PageView) {
|
|
|
369
385
|
editable: false,
|
|
370
386
|
align: 'left',
|
|
371
387
|
renderer: (value, column, record, rowIndex, field) => {
|
|
372
|
-
return record.name ? TermsUtil.tMenu(record.name) : ''
|
|
388
|
+
return record.name ? TermsUtil.tMenu(record.name) : ''
|
|
373
389
|
}
|
|
374
390
|
},
|
|
375
391
|
sortable: false,
|
|
@@ -380,10 +396,10 @@ class DynamicMenu extends localize(i18next)(PageView) {
|
|
|
380
396
|
MetaUtil.getGristColumnConfig('string', 'routing', 'left', true, false, 175),
|
|
381
397
|
MetaUtil.getGristColumnConfig2('string', 'detailFormId', 'page_location', 'left', true, false, 450),
|
|
382
398
|
MetaUtil.getGristColumnConfig2('string', 'iconPath', 'icon', 'left', true, false, 125),
|
|
383
|
-
MetaUtil.getGristColumnConfig2('boolean', 'hiddenFlag', 'hidden_flag', 'center', true, false, 95)
|
|
399
|
+
MetaUtil.getGristColumnConfig2('boolean', 'hiddenFlag', 'hidden_flag', 'center', true, false, 95)
|
|
384
400
|
]
|
|
385
|
-
}
|
|
401
|
+
}
|
|
386
402
|
}
|
|
387
403
|
}
|
|
388
404
|
|
|
389
|
-
customElements.define('dynamic-menu', DynamicMenu)
|
|
405
|
+
customElements.define('dynamic-menu', DynamicMenu)
|
package/client/route.js
CHANGED
|
@@ -1,10 +1,34 @@
|
|
|
1
|
+
import { store } from '@things-factory/shell'
|
|
2
|
+
|
|
1
3
|
export default function route(page) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
if (page == 'dynamic-menu') {
|
|
5
|
+
import('./pages/menu/dynamic-menu')
|
|
6
|
+
return page
|
|
7
|
+
|
|
8
|
+
} else if(page == 'config-terminology') {
|
|
9
|
+
import('./pages/terms/config-terminology')
|
|
10
|
+
return page
|
|
11
|
+
|
|
12
|
+
} else {
|
|
13
|
+
let storage = store.getState();
|
|
14
|
+
|
|
15
|
+
if(storage && storage.app && storage.app.modules) {
|
|
16
|
+
let modules = storage.app.modules;
|
|
17
|
+
let metaUiMod = modules.find(m => {
|
|
18
|
+
return m.name == '@things-factory/meta-ui'
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
if(metaUiMod && metaUiMod.routes) {
|
|
22
|
+
let metaUiRoutes = metaUiMod.routes;
|
|
23
|
+
let metaRoute = metaUiRoutes.find(mapping => mapping.page == page)
|
|
24
|
+
|
|
25
|
+
if (metaRoute) {
|
|
26
|
+
import (`${metaRoute.template}`)
|
|
27
|
+
return page
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return '';
|
|
9
33
|
}
|
|
10
|
-
}
|
|
34
|
+
}
|