ts-glitter 21.9.4 → 21.9.7
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/lowcode/Entry.js +1 -1
- package/lowcode/Entry.ts +1 -1
- package/lowcode/backend-manager/bg-blog.js +2 -0
- package/lowcode/backend-manager/bg-blog.ts +4 -0
- package/lowcode/backend-manager/bg-product.js +3 -3
- package/lowcode/backend-manager/bg-product.ts +3 -3
- package/lowcode/backend-manager/bg-widget.js +15 -11
- package/lowcode/backend-manager/bg-widget.ts +30 -21
- package/lowcode/cms-plugin/menus-setting.js +389 -141
- package/lowcode/cms-plugin/menus-setting.ts +519 -228
- package/lowcode/cms-plugin/shopping-collections.js +5 -38
- package/lowcode/cms-plugin/shopping-collections.ts +5 -47
- package/lowcode/jspage/function-page/setting_editor.js +0 -27
- package/lowcode/jspage/function-page/setting_editor.ts +27 -27
- package/lowcode/public-components/footer/footer-01.js +183 -158
- package/lowcode/public-components/footer/footer-01.ts +275 -256
- package/lowcode/public-components/footer/footer-02.js +83 -63
- package/lowcode/public-components/footer/footer-02.ts +160 -145
- package/lowcode/public-components/footer/footer-03.js +78 -60
- package/lowcode/public-components/footer/footer-03.ts +149 -137
- package/lowcode/public-components/headers/sy-02.js +17 -2
- package/lowcode/public-components/headers/sy-02.ts +18 -6
- package/lowcode/public-components/headers/sy-03.js +18 -4
- package/lowcode/public-components/headers/sy-03.ts +26 -15
- package/lowcode/public-components/headers/sy-04.js +18 -4
- package/lowcode/public-components/headers/sy-04.ts +26 -15
- package/lowcode/public-components/headers/sy-05.js +93 -68
- package/lowcode/public-components/headers/sy-05.ts +174 -151
- package/lowcode/public-components/product/pd-class.js +27 -8
- package/lowcode/public-components/product/pd-class.ts +60 -35
- package/package.json +1 -1
- package/src/api-public/controllers/index.js.map +1 -1
- package/src/api-public/controllers/user.js +2 -2
- package/src/api-public/controllers/user.js.map +1 -1
- package/src/api-public/controllers/user.ts +2 -3
- package/src/api-public/services/ai-robot.d.ts +0 -1
- package/src/api-public/services/fb-api.d.ts +0 -1
- package/src/api-public/services/fb-message.d.ts +0 -1
- package/src/api-public/services/fb-service.js +4 -4
- package/src/api-public/services/fb-service.js.map +1 -1
- package/src/api-public/services/financial-service.d.ts +0 -1
- package/src/api-public/services/financial-serviceV2.d.ts +0 -1
- package/src/api-public/services/line-message.d.ts +0 -1
- package/src/api-public/services/monitor.d.ts +0 -1
- package/src/api-public/services/share-permission.d.ts +1 -1
- package/src/api-public/services/shopee.d.ts +3 -4
- package/src/api-public/services/shopee.js +17 -7
- package/src/api-public/services/user.d.ts +0 -1
- package/src/api-public/services/user.js +19 -9
- package/src/api-public/services/user.js.map +1 -1
- package/src/api-public/services/user.ts +2 -2
- package/src/api-public/utils/ut-permission.d.ts +0 -1
- package/src/config.d.ts +1 -1
- package/src/index.js +20 -10
- package/src/modules/AWSLib.js +2 -3
- package/src/modules/AWSLib.js.map +1 -1
- package/src/modules/database.d.ts +1 -1
- package/src/modules/redis.d.ts +1 -1
- package/src/modules/tool.d.ts +4 -4
- package/src/modules/tool.js +1 -2
- package/src/modules/tool.js.map +1 -1
- package/src/run.js +1 -2
- package/src/run.js.map +1 -1
- package/src/seo-config.d.ts +0 -1
- package/src/seo-config.js +3 -3
- package/src/seo-config.js.map +1 -1
- package/src/services/app.d.ts +0 -1
- package/src/services/app.js +17 -7
- package/src/services/app.js.map +1 -1
- package/src/services/backend-service.js +17 -7
- package/src/services/backend-service.js.map +1 -1
- package/src/services/create-instance.js +3 -4
- package/src/services/create-instance.js.map +1 -1
- package/src/services/saas-table-check.js +2 -2
- package/src/services/seo.d.ts +0 -1
- package/src/services/template.d.ts +0 -1
- package/src/services/tool.js +2 -3
- package/src/services/tool.js.map +1 -1
|
@@ -1,45 +1,44 @@
|
|
|
1
1
|
import { GVC } from '../glitterBundle/GVController.js';
|
|
2
2
|
import { BgWidget } from '../backend-manager/bg-widget.js';
|
|
3
3
|
import { ApiUser } from '../glitter-base/route/user.js';
|
|
4
|
-
import { EditorElem } from '../glitterBundle/plugins/editor-elem.js';
|
|
5
4
|
import { LanguageLocation } from '../glitter-base/global/language.js';
|
|
6
5
|
import { LanguageBackend } from './language-backend.js';
|
|
7
6
|
import { ShareDialog } from '../glitterBundle/dialog/ShareDialog.js';
|
|
8
|
-
import { AiChat } from '../glitter-base/route/ai-chat.js';
|
|
9
7
|
|
|
10
8
|
const html = String.raw;
|
|
11
9
|
|
|
12
10
|
interface MenuItem {
|
|
13
11
|
link: string;
|
|
14
12
|
title: string;
|
|
13
|
+
visible_type: 'all' | 'loggedIn' | 'user' | 'level';
|
|
14
|
+
visible_data_array?: string[];
|
|
15
15
|
items: MenuItem[];
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
export class MenusSetting {
|
|
19
|
-
public static main(gvc: GVC, widget: any,def:'menu'|'footer') {
|
|
19
|
+
public static main(gvc: GVC, widget: any, def: 'menu' | 'footer') {
|
|
20
20
|
const html = String.raw;
|
|
21
21
|
const glitter = gvc.glitter;
|
|
22
|
+
const dialog = new ShareDialog(glitter);
|
|
22
23
|
|
|
23
24
|
const vm: {
|
|
24
25
|
type: 'list' | 'add' | 'replace' | 'select';
|
|
25
26
|
index: number;
|
|
26
27
|
dataList: any;
|
|
27
28
|
query?: string;
|
|
28
|
-
select:{title:string
|
|
29
|
-
tab:'menu'|'footer'
|
|
29
|
+
select: { title: string; tag: string };
|
|
30
|
+
tab: 'menu' | 'footer';
|
|
30
31
|
} = {
|
|
31
32
|
type: 'list',
|
|
32
33
|
index: 0,
|
|
33
34
|
dataList: undefined,
|
|
34
35
|
query: '',
|
|
35
|
-
tab:def || 'menu',
|
|
36
|
-
select:{title:'',tag:''}
|
|
36
|
+
tab: def || 'menu',
|
|
37
|
+
select: { title: '', tag: '' },
|
|
37
38
|
};
|
|
38
|
-
const filterID = gvc.glitter.getUUID();
|
|
39
|
-
let vmi: any = undefined;
|
|
40
39
|
|
|
41
40
|
function getDatalist() {
|
|
42
|
-
return vm.dataList.map((dd: any
|
|
41
|
+
return vm.dataList.map((dd: any) => {
|
|
43
42
|
return [
|
|
44
43
|
{
|
|
45
44
|
key: '選單名稱',
|
|
@@ -51,44 +50,39 @@ export class MenusSetting {
|
|
|
51
50
|
|
|
52
51
|
return gvc.bindView(() => {
|
|
53
52
|
const id = glitter.getUUID();
|
|
54
|
-
function refresh() {
|
|
55
|
-
gvc.notifyDataChange(id);
|
|
56
|
-
}
|
|
57
53
|
|
|
58
54
|
return {
|
|
59
55
|
bind: id,
|
|
60
56
|
dataList: [{ obj: vm, key: 'type' }],
|
|
61
57
|
view: () => {
|
|
62
58
|
if (vm.type === 'list') {
|
|
63
|
-
|
|
64
59
|
return BgWidget.container(html`
|
|
65
60
|
<div class="title-container">
|
|
66
61
|
${BgWidget.title('選單管理')}
|
|
67
62
|
<div class="flex-fill"></div>
|
|
68
63
|
${BgWidget.darkButton(
|
|
69
|
-
`新增${vm.tab==='menu' ?
|
|
64
|
+
`新增${vm.tab === 'menu' ? `頁首選單` : `頁腳選單`}`,
|
|
70
65
|
gvc.event(async () => {
|
|
71
|
-
let title=''
|
|
72
|
-
async function next(){
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
menu_all.list=
|
|
78
|
-
menu_all.list=[
|
|
66
|
+
let title = '';
|
|
67
|
+
async function next() {
|
|
68
|
+
dialog.dataLoading({ visible: true });
|
|
69
|
+
const tab = vm.tab === 'menu' ? `頁首選單` : `頁腳選單`;
|
|
70
|
+
let menu_all = (await ApiUser.getPublicConfig('menu-setting-list', 'manager')).response.value;
|
|
71
|
+
menu_all.list = menu_all.list ?? [];
|
|
72
|
+
menu_all.list = [
|
|
79
73
|
{
|
|
80
|
-
tag:gvc.glitter.getUUID(),
|
|
81
|
-
title:title || [tab
|
|
82
|
-
tab:vm.tab==='menu' ? 'menu-setting':'footer-setting'
|
|
83
|
-
}
|
|
74
|
+
tag: gvc.glitter.getUUID(),
|
|
75
|
+
title: title || [tab, `${menu_all.list.length + 1}`].join(''),
|
|
76
|
+
tab: vm.tab === 'menu' ? 'menu-setting' : 'footer-setting',
|
|
77
|
+
},
|
|
84
78
|
].concat(menu_all.list);
|
|
85
79
|
await ApiUser.setPublicConfig({
|
|
86
|
-
key:'menu-setting-list',
|
|
87
|
-
value:menu_all,
|
|
88
|
-
user_id:'manager'
|
|
80
|
+
key: 'menu-setting-list',
|
|
81
|
+
value: menu_all,
|
|
82
|
+
user_id: 'manager',
|
|
89
83
|
});
|
|
90
|
-
dialog.dataLoading({visible:false});
|
|
91
|
-
gvc.notifyDataChange(id)
|
|
84
|
+
dialog.dataLoading({ visible: false });
|
|
85
|
+
gvc.notifyDataChange(id);
|
|
92
86
|
}
|
|
93
87
|
BgWidget.settingDialog({
|
|
94
88
|
gvc: gvc,
|
|
@@ -96,69 +90,75 @@ export class MenusSetting {
|
|
|
96
90
|
innerHTML: (gvc: GVC) => {
|
|
97
91
|
return [
|
|
98
92
|
BgWidget.editeInput({
|
|
99
|
-
title:'',
|
|
100
|
-
callback:
|
|
101
|
-
title=text
|
|
93
|
+
title: '',
|
|
94
|
+
callback: text => {
|
|
95
|
+
title = text;
|
|
102
96
|
},
|
|
103
|
-
default:title,
|
|
104
|
-
gvc:gvc,
|
|
105
|
-
placeHolder:'請輸入選單名稱'
|
|
106
|
-
})
|
|
107
|
-
].join('')
|
|
97
|
+
default: title,
|
|
98
|
+
gvc: gvc,
|
|
99
|
+
placeHolder: '請輸入選單名稱',
|
|
100
|
+
}),
|
|
101
|
+
].join('');
|
|
108
102
|
},
|
|
109
103
|
footer_html: (gvc: GVC) => {
|
|
110
|
-
return BgWidget.save(
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
104
|
+
return BgWidget.save(
|
|
105
|
+
gvc.event(() => {
|
|
106
|
+
next();
|
|
107
|
+
gvc.closeDialog();
|
|
108
|
+
}),
|
|
109
|
+
'儲存'
|
|
110
|
+
);
|
|
114
111
|
},
|
|
115
|
-
width: 300
|
|
116
|
-
})
|
|
117
|
-
|
|
118
|
-
// vm.index = index;
|
|
119
|
-
// vm.type = 'replace';
|
|
112
|
+
width: 300,
|
|
113
|
+
});
|
|
120
114
|
})
|
|
121
115
|
)}
|
|
122
116
|
</div>
|
|
123
|
-
${def
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
117
|
+
${def
|
|
118
|
+
? ''
|
|
119
|
+
: BgWidget.tab(
|
|
120
|
+
[
|
|
121
|
+
{ title: '主選單', key: 'menu' },
|
|
122
|
+
{ title: '頁腳', key: 'footer' },
|
|
123
|
+
],
|
|
124
|
+
gvc,
|
|
125
|
+
vm.tab,
|
|
126
|
+
text => {
|
|
127
|
+
vm.tab = text as any;
|
|
128
|
+
gvc.notifyDataChange(id);
|
|
129
|
+
},
|
|
130
|
+
`${document.body.clientWidth < 800 ? '' : `margin-bottom:0px !important;`}
|
|
135
131
|
`
|
|
136
|
-
|
|
132
|
+
)}
|
|
137
133
|
${BgWidget.container(
|
|
138
134
|
BgWidget.mainCard(
|
|
139
135
|
BgWidget.tableV3({
|
|
140
136
|
gvc: gvc,
|
|
141
|
-
getData: async
|
|
142
|
-
const tag=vm.tab==='menu' ? 'menu-setting':'footer-setting'
|
|
143
|
-
let menu_all= (await ApiUser.getPublicConfig('menu-setting-list','manager')).response.value;
|
|
137
|
+
getData: async vmi => {
|
|
138
|
+
const tag = vm.tab === 'menu' ? 'menu-setting' : 'footer-setting';
|
|
139
|
+
let menu_all = (await ApiUser.getPublicConfig('menu-setting-list', 'manager')).response.value;
|
|
144
140
|
menu_all.list = menu_all.list ?? [];
|
|
145
141
|
vm.dataList = [
|
|
146
|
-
{
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
142
|
+
{
|
|
143
|
+
tag: tag,
|
|
144
|
+
title: html`
|
|
145
|
+
<div>
|
|
146
|
+
${vm.tab === 'menu' ? '頁首選單' : '頁腳選單'}
|
|
147
|
+
<span style="font-size: 12px; color: #36B;">系統預設</span>
|
|
148
|
+
</div>
|
|
149
|
+
`,
|
|
150
|
+
},
|
|
151
|
+
...menu_all.list.filter((d1: any) => d1.tab === tag),
|
|
152
152
|
];
|
|
153
|
-
|
|
153
|
+
|
|
154
154
|
vmi.pageSize = 1;
|
|
155
155
|
vmi.originalData = vm.dataList;
|
|
156
156
|
vmi.tableData = getDatalist();
|
|
157
157
|
vmi.loading = false;
|
|
158
158
|
vmi.callback();
|
|
159
159
|
},
|
|
160
|
-
rowClick: (
|
|
161
|
-
vm.select=vm.dataList[index]
|
|
160
|
+
rowClick: (_, index) => {
|
|
161
|
+
vm.select = vm.dataList[index];
|
|
162
162
|
vm.type = 'replace';
|
|
163
163
|
},
|
|
164
164
|
filter: [],
|
|
@@ -192,20 +192,14 @@ export class MenusSetting {
|
|
|
192
192
|
}
|
|
193
193
|
},
|
|
194
194
|
divCreate: {
|
|
195
|
-
class:
|
|
196
|
-
style:
|
|
195
|
+
class: 'w-100',
|
|
196
|
+
style: 'max-width: 100%;',
|
|
197
197
|
},
|
|
198
198
|
};
|
|
199
199
|
});
|
|
200
200
|
}
|
|
201
201
|
|
|
202
|
-
public static setMenu(cf: {
|
|
203
|
-
goBack: () => void;
|
|
204
|
-
gvc: GVC;
|
|
205
|
-
widget: any;
|
|
206
|
-
key: string;
|
|
207
|
-
title: string;
|
|
208
|
-
}) {
|
|
202
|
+
public static setMenu(cf: { goBack: () => void; gvc: GVC; widget: any; key: string; title: string }) {
|
|
209
203
|
const vm: {
|
|
210
204
|
id: string;
|
|
211
205
|
link: {
|
|
@@ -215,7 +209,7 @@ export class MenusSetting {
|
|
|
215
209
|
};
|
|
216
210
|
loading: boolean;
|
|
217
211
|
selected: boolean;
|
|
218
|
-
language: LanguageLocation
|
|
212
|
+
language: LanguageLocation;
|
|
219
213
|
} = {
|
|
220
214
|
id: cf.gvc.glitter.getUUID(),
|
|
221
215
|
link: {
|
|
@@ -225,8 +219,10 @@ export class MenusSetting {
|
|
|
225
219
|
},
|
|
226
220
|
selected: false,
|
|
227
221
|
loading: true,
|
|
228
|
-
language: (window.parent as any).store_info.language_setting.def
|
|
222
|
+
language: (window.parent as any).store_info.language_setting.def,
|
|
229
223
|
};
|
|
224
|
+
const gvc = cf.gvc;
|
|
225
|
+
const dialog = new ShareDialog(gvc.glitter);
|
|
230
226
|
|
|
231
227
|
ApiUser.getPublicConfig(cf.key, 'manager').then((data: any) => {
|
|
232
228
|
if (data.response.value) {
|
|
@@ -241,22 +237,24 @@ export class MenusSetting {
|
|
|
241
237
|
clearNoNeedData(dd.items || []);
|
|
242
238
|
});
|
|
243
239
|
}
|
|
240
|
+
|
|
244
241
|
async function save() {
|
|
245
242
|
for (const a of ['en-US', 'zh-CN', 'zh-TW']) {
|
|
246
|
-
(vm.link as any)[a]=(vm.link as any)[a]??[]
|
|
243
|
+
(vm.link as any)[a] = (vm.link as any)[a] ?? [];
|
|
247
244
|
clearNoNeedData((vm.link as any)[a]);
|
|
248
245
|
}
|
|
249
246
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
menu_all.list
|
|
254
|
-
|
|
255
|
-
|
|
247
|
+
dialog.dataLoading({ visible: true });
|
|
248
|
+
let menu_all = (await ApiUser.getPublicConfig('menu-setting-list', 'manager')).response.value;
|
|
249
|
+
menu_all.list = menu_all.list ?? [];
|
|
250
|
+
const find_ = menu_all.list.find((d1: any) => {
|
|
251
|
+
return d1.tag === cf.key;
|
|
252
|
+
});
|
|
253
|
+
find_ && (find_.title = cf.title);
|
|
256
254
|
await ApiUser.setPublicConfig({
|
|
257
|
-
key:'menu-setting-list',
|
|
258
|
-
value:menu_all,
|
|
259
|
-
user_id:'manager'
|
|
255
|
+
key: 'menu-setting-list',
|
|
256
|
+
value: menu_all,
|
|
257
|
+
user_id: 'manager',
|
|
260
258
|
});
|
|
261
259
|
ApiUser.setPublicConfig({
|
|
262
260
|
key: cf.key,
|
|
@@ -264,11 +262,12 @@ export class MenusSetting {
|
|
|
264
262
|
user_id: 'manager',
|
|
265
263
|
}).then(data => {
|
|
266
264
|
setTimeout(() => {
|
|
267
|
-
dialog.dataLoading({visible:false})
|
|
268
|
-
dialog.successMessage({text:'儲存成功'})
|
|
265
|
+
dialog.dataLoading({ visible: false });
|
|
266
|
+
dialog.successMessage({ text: '儲存成功' });
|
|
269
267
|
}, 1000);
|
|
270
268
|
});
|
|
271
269
|
}
|
|
270
|
+
|
|
272
271
|
function selectAll(array: MenuItem) {
|
|
273
272
|
(array as any).selected = true;
|
|
274
273
|
array.items.map(dd => {
|
|
@@ -276,6 +275,7 @@ export class MenusSetting {
|
|
|
276
275
|
selectAll(dd);
|
|
277
276
|
});
|
|
278
277
|
}
|
|
278
|
+
|
|
279
279
|
function clearAll(array: MenuItem) {
|
|
280
280
|
(array as any).selected = false;
|
|
281
281
|
array.items.map(dd => {
|
|
@@ -283,6 +283,7 @@ export class MenusSetting {
|
|
|
283
283
|
clearAll(dd);
|
|
284
284
|
});
|
|
285
285
|
}
|
|
286
|
+
|
|
286
287
|
function allSelect(dd: any) {
|
|
287
288
|
return (
|
|
288
289
|
!dd.items.find((d1: any) => {
|
|
@@ -290,6 +291,7 @@ export class MenusSetting {
|
|
|
290
291
|
}) && (dd as any).selected
|
|
291
292
|
);
|
|
292
293
|
}
|
|
294
|
+
|
|
293
295
|
function getSelectCount(dd: any) {
|
|
294
296
|
let count = 0;
|
|
295
297
|
if (dd.selected) {
|
|
@@ -300,6 +302,7 @@ export class MenusSetting {
|
|
|
300
302
|
});
|
|
301
303
|
return count;
|
|
302
304
|
}
|
|
305
|
+
|
|
303
306
|
function deleteSelect(items: MenuItem[]) {
|
|
304
307
|
return items.filter(d1 => {
|
|
305
308
|
d1.items = deleteSelect(d1.items || []);
|
|
@@ -307,15 +310,15 @@ export class MenusSetting {
|
|
|
307
310
|
});
|
|
308
311
|
}
|
|
309
312
|
|
|
310
|
-
const gvc = cf.gvc;
|
|
311
313
|
function refresh() {
|
|
312
314
|
gvc.notifyDataChange(vm.id);
|
|
313
315
|
}
|
|
316
|
+
|
|
314
317
|
return gvc.bindView(() => {
|
|
315
318
|
return {
|
|
316
319
|
bind: vm.id,
|
|
317
320
|
view: () => {
|
|
318
|
-
vm.link[vm.language]=vm.link[vm.language] ?? []
|
|
321
|
+
vm.link[vm.language] = vm.link[vm.language] ?? [];
|
|
319
322
|
const link = vm.link[vm.language];
|
|
320
323
|
|
|
321
324
|
return html`<div class="title-container" style="width: 100%; max-width: 100%;">
|
|
@@ -324,37 +327,41 @@ export class MenusSetting {
|
|
|
324
327
|
cf.goBack();
|
|
325
328
|
})
|
|
326
329
|
)}${BgWidget.title(cf.title ?? '選單設定')}
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
gvc
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
gvc
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
330
|
+
<div class="mx-2 ${['menu-setting', 'footer-setting', 'text-manager'].includes(cf.key) ? 'd-none' : ''}">
|
|
331
|
+
${BgWidget.grayButton(
|
|
332
|
+
'重新命名',
|
|
333
|
+
gvc.event(() => {
|
|
334
|
+
BgWidget.settingDialog({
|
|
335
|
+
gvc: gvc,
|
|
336
|
+
title: '重新命名',
|
|
337
|
+
innerHTML: (gvc: GVC) => {
|
|
338
|
+
return [
|
|
339
|
+
BgWidget.editeInput({
|
|
340
|
+
title: '',
|
|
341
|
+
callback: text => {
|
|
342
|
+
cf.title = text;
|
|
343
|
+
},
|
|
344
|
+
default: cf.title,
|
|
345
|
+
gvc: gvc,
|
|
346
|
+
placeHolder: '',
|
|
347
|
+
}),
|
|
348
|
+
].join('');
|
|
349
|
+
},
|
|
350
|
+
footer_html: (gvc: GVC) => {
|
|
351
|
+
return BgWidget.save(
|
|
352
|
+
gvc.event(() => {
|
|
353
|
+
gvc.closeDialog();
|
|
354
|
+
refresh();
|
|
355
|
+
}),
|
|
356
|
+
'儲存'
|
|
357
|
+
);
|
|
358
|
+
},
|
|
359
|
+
width: 500,
|
|
360
|
+
});
|
|
361
|
+
})
|
|
362
|
+
)}
|
|
363
|
+
</div>
|
|
356
364
|
<div class="flex-fill"></div>
|
|
357
|
-
|
|
358
365
|
${LanguageBackend.switchBtn({
|
|
359
366
|
gvc: gvc,
|
|
360
367
|
language: vm.language,
|
|
@@ -373,19 +380,13 @@ export class MenusSetting {
|
|
|
373
380
|
style="width: 100%; left: 0px; top: 0px; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 20px; display: inline-flex"
|
|
374
381
|
>
|
|
375
382
|
<div
|
|
376
|
-
class="w-100 ${getSelectCount({
|
|
377
|
-
items: link,
|
|
378
|
-
}) > 0
|
|
379
|
-
? ``
|
|
380
|
-
: `d-none`}"
|
|
383
|
+
class="w-100 ${getSelectCount({ items: link }) > 0 ? '' : 'd-none'}"
|
|
381
384
|
style="height: 40px; padding: 12px 18px;background: #F7F7F7; border-radius: 10px; justify-content: flex-end; align-items: center; gap: 8px; display: inline-flex"
|
|
382
385
|
>
|
|
383
386
|
<div
|
|
384
387
|
style="flex: 1 1 0; color: #393939; font-size: 14px; font-family: Noto Sans; font-weight: 700; word-wrap: break-word"
|
|
385
388
|
>
|
|
386
|
-
已選取${getSelectCount({
|
|
387
|
-
items: link,
|
|
388
|
-
})}項
|
|
389
|
+
已選取${getSelectCount({ items: link })}項
|
|
389
390
|
</div>
|
|
390
391
|
<div
|
|
391
392
|
style="cursor:pointer;padding: 4px 14px;background: white; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.10); border-radius: 20px; border: 1px #DDDDDD solid; justify-content: flex-start; align-items: flex-start; gap: 10px; display: flex"
|
|
@@ -408,28 +409,18 @@ export class MenusSetting {
|
|
|
408
409
|
<div
|
|
409
410
|
class="${allSelect({
|
|
410
411
|
items: link,
|
|
411
|
-
selected: !link.find(dd =>
|
|
412
|
-
return !(dd as any).selected;
|
|
413
|
-
}),
|
|
412
|
+
selected: !link.find(dd => !(dd as any).selected),
|
|
414
413
|
})
|
|
415
|
-
?
|
|
416
|
-
:
|
|
417
|
-
style="color
|
|
414
|
+
? 'fa-solid fa-square-check'
|
|
415
|
+
: 'fa-regular fa-square'}"
|
|
416
|
+
style="color: #393939; width: 16px; height: 16px; cursor: pointer;"
|
|
418
417
|
onclick="${cf.gvc.event((e, event) => {
|
|
419
418
|
event.stopPropagation();
|
|
420
419
|
|
|
421
|
-
if (
|
|
422
|
-
|
|
423
|
-
return !(dd as any).selected;
|
|
424
|
-
})
|
|
425
|
-
) {
|
|
426
|
-
selectAll({
|
|
427
|
-
items: link,
|
|
428
|
-
} as any);
|
|
420
|
+
if (link.find(dd => !(dd as any).selected)) {
|
|
421
|
+
selectAll({ items: link } as any);
|
|
429
422
|
} else {
|
|
430
|
-
clearAll({
|
|
431
|
-
items: link,
|
|
432
|
-
} as any);
|
|
423
|
+
clearAll({ items: link } as any);
|
|
433
424
|
}
|
|
434
425
|
gvc.notifyDataChange(vm.id);
|
|
435
426
|
})}"
|
|
@@ -455,7 +446,7 @@ export class MenusSetting {
|
|
|
455
446
|
.map((dd, index) => {
|
|
456
447
|
const list = html`
|
|
457
448
|
<div
|
|
458
|
-
class="
|
|
449
|
+
class="w-100"
|
|
459
450
|
style="width: 100%; justify-content: flex-start; align-items: center; gap: 5px; display: inline-flex;cursor: pointer;"
|
|
460
451
|
onclick="${cf.gvc.event(() => {
|
|
461
452
|
if (dd.items && dd.items.length > 0) {
|
|
@@ -469,7 +460,7 @@ export class MenusSetting {
|
|
|
469
460
|
? `fa-solid fa-square-check`
|
|
470
461
|
: `fa-regular fa-square`}"
|
|
471
462
|
style="color:#393939;width: 16px; height: 16px;"
|
|
472
|
-
onclick="${cf.gvc.event((
|
|
463
|
+
onclick="${cf.gvc.event((_, event) => {
|
|
473
464
|
event.stopPropagation();
|
|
474
465
|
(dd as any).selected = !(dd as any).selected;
|
|
475
466
|
if ((dd as any).selected) {
|
|
@@ -501,9 +492,9 @@ export class MenusSetting {
|
|
|
501
492
|
</div>
|
|
502
493
|
${dd.items && dd.items.length > 0
|
|
503
494
|
? !(dd as any).toggle
|
|
504
|
-
? `<i class="fa-solid fa-angle-down color39"></i>`
|
|
505
|
-
: `<i class="fa-solid fa-angle-up color39"></i>`
|
|
506
|
-
:
|
|
495
|
+
? html`<i class="fa-solid fa-angle-down color39"></i>`
|
|
496
|
+
: html`<i class="fa-solid fa-angle-up color39"></i>`
|
|
497
|
+
: ''}
|
|
507
498
|
</div>
|
|
508
499
|
<div
|
|
509
500
|
style="justify-content: flex-start; align-items: center; gap: 8px; display: inline-flex;white-space: normal;word-break: break-all;"
|
|
@@ -523,12 +514,13 @@ export class MenusSetting {
|
|
|
523
514
|
<div class="flex-fill"></div>
|
|
524
515
|
<div
|
|
525
516
|
class="child me-2"
|
|
526
|
-
onclick="${cf.gvc.event((
|
|
517
|
+
onclick="${cf.gvc.event((_, event) => {
|
|
527
518
|
event.stopPropagation();
|
|
528
519
|
MenusSetting.editEvent(
|
|
529
520
|
{
|
|
530
521
|
link: '',
|
|
531
522
|
title: '',
|
|
523
|
+
visible_type: 'all',
|
|
532
524
|
items: [],
|
|
533
525
|
},
|
|
534
526
|
data => {
|
|
@@ -543,7 +535,7 @@ export class MenusSetting {
|
|
|
543
535
|
</div>
|
|
544
536
|
<div
|
|
545
537
|
class="child"
|
|
546
|
-
onclick="${cf.gvc.event((
|
|
538
|
+
onclick="${cf.gvc.event((_, event) => {
|
|
547
539
|
event.stopPropagation();
|
|
548
540
|
MenusSetting.editEvent(dd, data => {
|
|
549
541
|
array[index] = data;
|
|
@@ -558,13 +550,13 @@ export class MenusSetting {
|
|
|
558
550
|
${dd.items && dd.items.length > 0
|
|
559
551
|
? html`
|
|
560
552
|
<div
|
|
561
|
-
class=" w-100 ${(dd as any).toggle ?
|
|
553
|
+
class=" w-100 ${(dd as any).toggle ? '' : 'd-none'}"
|
|
562
554
|
style="padding-left: 35px;"
|
|
563
555
|
>
|
|
564
556
|
${renderItems(dd.items as MenuItem[]) as any}
|
|
565
557
|
</div>
|
|
566
558
|
`
|
|
567
|
-
:
|
|
559
|
+
: ''}
|
|
568
560
|
`;
|
|
569
561
|
return html`<li class="w-100 ">${list}</li>`;
|
|
570
562
|
})
|
|
@@ -572,8 +564,8 @@ export class MenusSetting {
|
|
|
572
564
|
},
|
|
573
565
|
divCreate: {
|
|
574
566
|
elem: 'ul',
|
|
575
|
-
class:
|
|
576
|
-
style:
|
|
567
|
+
class: 'w-100 my-2',
|
|
568
|
+
style: 'display:flex; flex-direction: column; gap: 18px;',
|
|
577
569
|
},
|
|
578
570
|
onCreate: () => {
|
|
579
571
|
gvc.glitter.addMtScript(
|
|
@@ -590,11 +582,11 @@ export class MenusSetting {
|
|
|
590
582
|
if (window.Sortable) {
|
|
591
583
|
try {
|
|
592
584
|
gvc.addStyle(`
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
585
|
+
ul {
|
|
586
|
+
list-style: none;
|
|
587
|
+
padding: 0;
|
|
588
|
+
}
|
|
589
|
+
`);
|
|
598
590
|
function swapArr(arr: any, index1: number, index2: number) {
|
|
599
591
|
const data = arr[index1];
|
|
600
592
|
arr.splice(index1, 1);
|
|
@@ -629,6 +621,7 @@ export class MenusSetting {
|
|
|
629
621
|
{
|
|
630
622
|
link: '',
|
|
631
623
|
title: '',
|
|
624
|
+
visible_type: 'all',
|
|
632
625
|
items: [],
|
|
633
626
|
},
|
|
634
627
|
data => {
|
|
@@ -660,29 +653,30 @@ export class MenusSetting {
|
|
|
660
653
|
</div>`
|
|
661
654
|
)}
|
|
662
655
|
<div class="update-bar-container">
|
|
663
|
-
${
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
656
|
+
${['menu-setting', 'footer-setting', 'text-manager'].includes(cf.key)
|
|
657
|
+
? ''
|
|
658
|
+
: BgWidget.danger(
|
|
659
|
+
gvc.event(async () => {
|
|
660
|
+
dialog.checkYesOrNot({
|
|
661
|
+
text: '是否確認刪除?',
|
|
662
|
+
callback: async response => {
|
|
663
|
+
if (response) {
|
|
664
|
+
dialog.dataLoading({ visible: true });
|
|
665
|
+
let menu_all = (await ApiUser.getPublicConfig('menu-setting-list', 'manager')).response
|
|
666
|
+
.value;
|
|
667
|
+
menu_all.list = menu_all.list.filter((d1: any) => d1.tag != cf.key);
|
|
668
|
+
await ApiUser.setPublicConfig({
|
|
669
|
+
key: 'menu-setting-list',
|
|
670
|
+
value: menu_all,
|
|
671
|
+
user_id: 'manager',
|
|
672
|
+
});
|
|
673
|
+
dialog.dataLoading({ visible: false });
|
|
674
|
+
cf.goBack();
|
|
675
|
+
}
|
|
676
|
+
},
|
|
677
|
+
});
|
|
678
|
+
})
|
|
679
|
+
)}
|
|
686
680
|
${BgWidget.cancel(
|
|
687
681
|
gvc.event(() => {
|
|
688
682
|
cf.goBack();
|
|
@@ -704,49 +698,270 @@ export class MenusSetting {
|
|
|
704
698
|
|
|
705
699
|
public static editEvent(data: MenuItem, save: (data: MenuItem) => void) {
|
|
706
700
|
const gvc: GVC = (window.parent as any).glitter.pageConfig[0].gvc;
|
|
707
|
-
const
|
|
701
|
+
const glitter = gvc.glitter;
|
|
702
|
+
const rightMenu = glitter.share.NormalPageEditor;
|
|
703
|
+
|
|
704
|
+
const vm = {
|
|
705
|
+
search: '',
|
|
706
|
+
levelList: undefined as any,
|
|
707
|
+
userList: undefined as any,
|
|
708
|
+
visibleDataList: undefined as any,
|
|
709
|
+
cloneData: structuredClone(data),
|
|
710
|
+
show: false,
|
|
711
|
+
dataLoading: true,
|
|
712
|
+
};
|
|
713
|
+
|
|
714
|
+
const ids = {
|
|
715
|
+
main: glitter.getUUID(),
|
|
716
|
+
visibleSelect: glitter.getUUID(),
|
|
717
|
+
dataArray: glitter.getUUID(),
|
|
718
|
+
};
|
|
719
|
+
|
|
720
|
+
const setVisibleSelect = () => {
|
|
721
|
+
return gvc.bindView({
|
|
722
|
+
bind: ids.visibleSelect,
|
|
723
|
+
view: () => {
|
|
724
|
+
return html`
|
|
725
|
+
<div class="tx_normal fw-normal">選單可見對象</div>
|
|
726
|
+
<div class="d-flex align-items-center" style="margin-top: 8px; gap: 10px;">
|
|
727
|
+
${[
|
|
728
|
+
BgWidget.select({
|
|
729
|
+
gvc,
|
|
730
|
+
callback: value => {
|
|
731
|
+
data.visible_type = value;
|
|
732
|
+
data.visible_data_array = [];
|
|
733
|
+
vm.visibleDataList = [];
|
|
734
|
+
vm.show = false;
|
|
735
|
+
vm.dataLoading = true;
|
|
736
|
+
gvc.notifyDataChange([ids.visibleSelect, ids.dataArray]);
|
|
737
|
+
},
|
|
738
|
+
default: data.visible_type ?? 'all',
|
|
739
|
+
options: [
|
|
740
|
+
{ key: 'all', value: '所有顧客' },
|
|
741
|
+
{ key: 'loggedIn', value: '已登入顧客' },
|
|
742
|
+
{ key: 'user', value: '特定顧客' },
|
|
743
|
+
{ key: 'level', value: '特定會員等級' },
|
|
744
|
+
],
|
|
745
|
+
}),
|
|
746
|
+
['user', 'level'].includes(data.visible_type)
|
|
747
|
+
? BgWidget.grayButton(
|
|
748
|
+
'選擇',
|
|
749
|
+
gvc.event(() => {
|
|
750
|
+
if (!vm.show) {
|
|
751
|
+
vm.show = true;
|
|
752
|
+
gvc.notifyDataChange(ids.dataArray);
|
|
753
|
+
}
|
|
754
|
+
})
|
|
755
|
+
)
|
|
756
|
+
: '',
|
|
757
|
+
].join('')}
|
|
758
|
+
</div>
|
|
759
|
+
`;
|
|
760
|
+
},
|
|
761
|
+
divCreate: {
|
|
762
|
+
style: 'margin-top: 8px;',
|
|
763
|
+
},
|
|
764
|
+
});
|
|
765
|
+
};
|
|
766
|
+
|
|
767
|
+
const optionView = () => {
|
|
768
|
+
const id = glitter.getUUID();
|
|
769
|
+
|
|
770
|
+
return gvc.bindView({
|
|
771
|
+
bind: id,
|
|
772
|
+
view: () => {
|
|
773
|
+
function includesItem(item: any) {
|
|
774
|
+
const text = vm.search.toLowerCase();
|
|
775
|
+
return item.name?.toLowerCase().includes(text) || item.note?.toLowerCase().includes(text);
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
const targetList = data.visible_type === 'user' ? vm.userList : vm.levelList;
|
|
779
|
+
|
|
780
|
+
if (!targetList) {
|
|
781
|
+
return BgWidget.spinner({ container: { class: 'w-100' } });
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
const filterList = targetList.filter((item: any) => includesItem(item));
|
|
785
|
+
const filterListIdArray = new Set(filterList.map((item: any) => item.key));
|
|
786
|
+
|
|
787
|
+
return BgWidget.multiCheckboxContainer(gvc, filterList, data.visible_data_array ?? [], items => {
|
|
788
|
+
data.visible_data_array = [
|
|
789
|
+
...new Set(
|
|
790
|
+
(data.visible_data_array ?? [])
|
|
791
|
+
.filter(item => {
|
|
792
|
+
return !filterListIdArray.has(item);
|
|
793
|
+
})
|
|
794
|
+
.concat(items)
|
|
795
|
+
),
|
|
796
|
+
];
|
|
797
|
+
});
|
|
798
|
+
},
|
|
799
|
+
divCreate: {
|
|
800
|
+
style: 'max-height: 300px; overflow-y: auto; width: 100%;',
|
|
801
|
+
},
|
|
802
|
+
onCreate: () => {
|
|
803
|
+
if (vm.userList === undefined) {
|
|
804
|
+
this.getUserOption().then(data => {
|
|
805
|
+
vm.userList = data;
|
|
806
|
+
gvc.notifyDataChange(id);
|
|
807
|
+
});
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
if (vm.levelList === undefined) {
|
|
811
|
+
this.getLevelOption().then(data => {
|
|
812
|
+
vm.levelList = data;
|
|
813
|
+
gvc.notifyDataChange(id);
|
|
814
|
+
});
|
|
815
|
+
}
|
|
816
|
+
},
|
|
817
|
+
});
|
|
818
|
+
};
|
|
819
|
+
|
|
820
|
+
const setVisibleDataArray = () => {
|
|
821
|
+
return gvc.bindView({
|
|
822
|
+
bind: ids.dataArray,
|
|
823
|
+
view: () => {
|
|
824
|
+
if (data.visible_type === 'user' || data.visible_type === 'level') {
|
|
825
|
+
if (!vm.show) {
|
|
826
|
+
if (vm.dataLoading) {
|
|
827
|
+
return BgWidget.spinner({ container: { class: 'w-100' } });
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
return html`
|
|
831
|
+
<div class="mt-2">${data.visible_type === 'user' ? '顧客名稱' : '會員等級'}</div>
|
|
832
|
+
${BgWidget.horizontalLine()}
|
|
833
|
+
<div class="d-flex flex-column gap-1">
|
|
834
|
+
${Array.isArray(vm.visibleDataList)
|
|
835
|
+
? data.visible_type === 'user'
|
|
836
|
+
? vm.visibleDataList
|
|
837
|
+
.map(item => {
|
|
838
|
+
return html`<div class="d-flex gap-1">
|
|
839
|
+
<div>${item.userData.name}</div>
|
|
840
|
+
${BgWidget.grayNote(item.account)}
|
|
841
|
+
</div>`;
|
|
842
|
+
})
|
|
843
|
+
.join('')
|
|
844
|
+
: vm.visibleDataList
|
|
845
|
+
.map(item => {
|
|
846
|
+
return html`<div class="d-flex gap-1">
|
|
847
|
+
<div>${item.title.replace('會員等級 - ', '')}</div>
|
|
848
|
+
</div>`;
|
|
849
|
+
})
|
|
850
|
+
.join('')
|
|
851
|
+
: ''}
|
|
852
|
+
</div>
|
|
853
|
+
`;
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
return BgWidget.mainCard(
|
|
857
|
+
[
|
|
858
|
+
html`<div
|
|
859
|
+
class="d-flex align-items-center cursor_pointer"
|
|
860
|
+
onclick="${gvc.event(() => {
|
|
861
|
+
vm.show = false;
|
|
862
|
+
vm.dataLoading = true;
|
|
863
|
+
gvc.notifyDataChange(ids.dataArray);
|
|
864
|
+
})}"
|
|
865
|
+
>
|
|
866
|
+
${BgWidget.goBack('')}
|
|
867
|
+
<span>返回</span>
|
|
868
|
+
</div>`,
|
|
869
|
+
BgWidget.searchPlace(
|
|
870
|
+
gvc.event(e => {
|
|
871
|
+
vm.search = e.value;
|
|
872
|
+
gvc.notifyDataChange(ids.dataArray);
|
|
873
|
+
}),
|
|
874
|
+
vm.search || '',
|
|
875
|
+
'搜尋',
|
|
876
|
+
undefined,
|
|
877
|
+
'0',
|
|
878
|
+
'width: 100%;'
|
|
879
|
+
),
|
|
880
|
+
optionView(),
|
|
881
|
+
].join(''),
|
|
882
|
+
'd-flex flex-column align-items-start'
|
|
883
|
+
);
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
return '';
|
|
887
|
+
},
|
|
888
|
+
divCreate: {
|
|
889
|
+
class: 'mt-1 p-1',
|
|
890
|
+
},
|
|
891
|
+
onCreate: () => {
|
|
892
|
+
if (vm.dataLoading && (data.visible_type === 'user' || data.visible_type === 'level')) {
|
|
893
|
+
Promise.all([
|
|
894
|
+
Array.isArray(data.visible_data_array) && data.visible_data_array.length > 0
|
|
895
|
+
? data.visible_type === 'user'
|
|
896
|
+
? this.getUserList(data.visible_data_array)
|
|
897
|
+
: this.getLevelList(data.visible_data_array)
|
|
898
|
+
: [],
|
|
899
|
+
]).then(([visibleDataList]) => {
|
|
900
|
+
vm.visibleDataList = visibleDataList;
|
|
901
|
+
vm.dataLoading = false;
|
|
902
|
+
gvc.notifyDataChange(ids.dataArray);
|
|
903
|
+
});
|
|
904
|
+
}
|
|
905
|
+
},
|
|
906
|
+
});
|
|
907
|
+
};
|
|
908
|
+
|
|
909
|
+
const backToDefault = () => {
|
|
910
|
+
return html`<div
|
|
911
|
+
class="position-absolute bottom-0 left-0 w-100 d-flex align-items-center justify-content-end p-3 border-top pe-4"
|
|
912
|
+
style="gap: 10px; background-color: #fff"
|
|
913
|
+
>
|
|
914
|
+
${BgWidget.cancel(
|
|
915
|
+
gvc.event(() => {
|
|
916
|
+
data = vm.cloneData;
|
|
917
|
+
vm.show = false;
|
|
918
|
+
vm.dataLoading = true;
|
|
919
|
+
gvc.notifyDataChange(ids.main);
|
|
920
|
+
}),
|
|
921
|
+
'回到預設值'
|
|
922
|
+
)}
|
|
923
|
+
</div>`;
|
|
924
|
+
};
|
|
925
|
+
|
|
926
|
+
const view = [
|
|
927
|
+
BgWidget.editeInput({
|
|
928
|
+
gvc: gvc,
|
|
929
|
+
title: '選單名稱wwww',
|
|
930
|
+
default: data.title || '',
|
|
931
|
+
placeHolder: '請輸入選單名稱',
|
|
932
|
+
callback: text => {
|
|
933
|
+
data.title = text;
|
|
934
|
+
},
|
|
935
|
+
}),
|
|
936
|
+
BgWidget.linkList({
|
|
937
|
+
gvc: gvc,
|
|
938
|
+
title: '連結位置',
|
|
939
|
+
default: data.link || '',
|
|
940
|
+
placeHolder: '選擇或貼上外部連結',
|
|
941
|
+
callback: text => {
|
|
942
|
+
data.link = text;
|
|
943
|
+
},
|
|
944
|
+
}),
|
|
945
|
+
setVisibleSelect(),
|
|
946
|
+
setVisibleDataArray(),
|
|
947
|
+
backToDefault(),
|
|
948
|
+
]
|
|
949
|
+
.map(h => html`<div class="w-100">${h}</div>`)
|
|
950
|
+
.join('');
|
|
708
951
|
|
|
709
952
|
rightMenu.closeEvent = () => {
|
|
710
953
|
if (data.title.length > 0 || data.link.length > 0) {
|
|
711
954
|
save(data);
|
|
712
955
|
}
|
|
713
956
|
};
|
|
957
|
+
|
|
714
958
|
rightMenu.toggle({
|
|
715
959
|
visible: true,
|
|
716
960
|
title: '新增選單',
|
|
717
|
-
view:
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
bind: id,
|
|
722
|
-
view: () => {
|
|
723
|
-
return [
|
|
724
|
-
EditorElem.editeInput({
|
|
725
|
-
gvc: gvc,
|
|
726
|
-
title: '選單名稱',
|
|
727
|
-
default: data.title || '',
|
|
728
|
-
placeHolder: '請輸入選單名稱',
|
|
729
|
-
callback: text => {
|
|
730
|
-
data.title = text;
|
|
731
|
-
},
|
|
732
|
-
}),
|
|
733
|
-
BgWidget.linkList({
|
|
734
|
-
gvc: gvc,
|
|
735
|
-
title: '',
|
|
736
|
-
default: data.link || '',
|
|
737
|
-
placeHolder: '選擇或貼上外部連結',
|
|
738
|
-
callback: text => {
|
|
739
|
-
data.link = text;
|
|
740
|
-
},
|
|
741
|
-
}),
|
|
742
|
-
].join('');
|
|
743
|
-
},
|
|
744
|
-
divCreate: {
|
|
745
|
-
style: `padding:20px;`,
|
|
746
|
-
},
|
|
747
|
-
};
|
|
748
|
-
}),
|
|
749
|
-
].join(''),
|
|
961
|
+
view: gvc.bindView({
|
|
962
|
+
bind: ids.main,
|
|
963
|
+
view: () => html`<div class="d-flex flex-column p-3">${view}</div>`,
|
|
964
|
+
}),
|
|
750
965
|
right: true,
|
|
751
966
|
});
|
|
752
967
|
}
|
|
@@ -761,6 +976,7 @@ export class MenusSetting {
|
|
|
761
976
|
save(data);
|
|
762
977
|
}
|
|
763
978
|
};
|
|
979
|
+
|
|
764
980
|
rightMenu.toggle({
|
|
765
981
|
visible: true,
|
|
766
982
|
title: '新增分類',
|
|
@@ -791,7 +1007,7 @@ export class MenusSetting {
|
|
|
791
1007
|
].join('');
|
|
792
1008
|
},
|
|
793
1009
|
divCreate: {
|
|
794
|
-
style:
|
|
1010
|
+
style: 'padding: 20px;',
|
|
795
1011
|
},
|
|
796
1012
|
};
|
|
797
1013
|
}),
|
|
@@ -799,6 +1015,81 @@ export class MenusSetting {
|
|
|
799
1015
|
right: true,
|
|
800
1016
|
});
|
|
801
1017
|
}
|
|
1018
|
+
|
|
1019
|
+
//! 拿 user id
|
|
1020
|
+
static async getUserList(visible_data_array: string[]) {
|
|
1021
|
+
return await ApiUser.getUserList({
|
|
1022
|
+
page: 0,
|
|
1023
|
+
// limit: 99999,
|
|
1024
|
+
limit: 15,
|
|
1025
|
+
only_id: true,
|
|
1026
|
+
id: visible_data_array.join(','),
|
|
1027
|
+
}).then(dd => {
|
|
1028
|
+
try {
|
|
1029
|
+
return dd.response.data;
|
|
1030
|
+
} catch (error) {
|
|
1031
|
+
return [];
|
|
1032
|
+
}
|
|
1033
|
+
});
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
//! 拿會員選項
|
|
1037
|
+
static async getUserOption() {
|
|
1038
|
+
return await ApiUser.getUserList({
|
|
1039
|
+
page: 0,
|
|
1040
|
+
// limit: 99999,
|
|
1041
|
+
limit: 15,
|
|
1042
|
+
only_id: true,
|
|
1043
|
+
}).then(dd => {
|
|
1044
|
+
try {
|
|
1045
|
+
return (
|
|
1046
|
+
dd.response.data.map(
|
|
1047
|
+
(item: {
|
|
1048
|
+
userID: number;
|
|
1049
|
+
userData: {
|
|
1050
|
+
name: string;
|
|
1051
|
+
email: string;
|
|
1052
|
+
};
|
|
1053
|
+
}) => {
|
|
1054
|
+
return {
|
|
1055
|
+
key: item.userID,
|
|
1056
|
+
name: item.userData.name ?? '(尚無姓名)',
|
|
1057
|
+
note: item.userData.email,
|
|
1058
|
+
};
|
|
1059
|
+
}
|
|
1060
|
+
) ?? []
|
|
1061
|
+
);
|
|
1062
|
+
} catch (error) {
|
|
1063
|
+
return [];
|
|
1064
|
+
}
|
|
1065
|
+
});
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1068
|
+
//! 拿等級id
|
|
1069
|
+
static async getLevelList(visible_data_array: string[]) {
|
|
1070
|
+
return await ApiUser.getUserGroupList('level').then(r => {
|
|
1071
|
+
if (r.result && Array.isArray(r.response?.data)) {
|
|
1072
|
+
return r.response.data.filter((d: { tag: string; title: string }) => {
|
|
1073
|
+
return visible_data_array?.includes(d.tag === '' ? 'default' : d.tag);
|
|
1074
|
+
});
|
|
1075
|
+
}
|
|
1076
|
+
|
|
1077
|
+
return [];
|
|
1078
|
+
});
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
//! 拿等級選項
|
|
1082
|
+
static async getLevelOption() {
|
|
1083
|
+
return await ApiUser.getUserGroupList('level').then(r => {
|
|
1084
|
+
if (r.result && Array.isArray(r.response?.data)) {
|
|
1085
|
+
return r.response.data.map((d: { tag: string; title: string }) => ({
|
|
1086
|
+
key: d.tag || 'default',
|
|
1087
|
+
name: d.title.replace('會員等級 - ', ''),
|
|
1088
|
+
}));
|
|
1089
|
+
}
|
|
1090
|
+
return [];
|
|
1091
|
+
});
|
|
1092
|
+
}
|
|
802
1093
|
}
|
|
803
1094
|
|
|
804
1095
|
(window as any).glitter.setModule(import.meta.url, MenusSetting);
|