ts-glitter 20.6.7 → 20.6.9

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.
Files changed (160) hide show
  1. package/lowcode/Entry.js +2 -2
  2. package/lowcode/Entry.ts +2 -2
  3. package/lowcode/backend-manager/bg-blog.js +617 -621
  4. package/lowcode/backend-manager/bg-blog.ts +2323 -2325
  5. package/lowcode/backend-manager/bg-line.js +5 -4
  6. package/lowcode/backend-manager/bg-line.ts +5 -4
  7. package/lowcode/backend-manager/bg-list-component.js +9 -0
  8. package/lowcode/backend-manager/bg-list-component.ts +15 -1
  9. package/lowcode/backend-manager/bg-notify.js +6 -4
  10. package/lowcode/backend-manager/bg-notify.ts +6 -4
  11. package/lowcode/backend-manager/bg-product.js +145 -0
  12. package/lowcode/backend-manager/bg-product.ts +153 -0
  13. package/lowcode/backend-manager/bg-sns.js +5 -3
  14. package/lowcode/backend-manager/bg-sns.ts +5 -3
  15. package/lowcode/backend-manager/bg-widget.js +92 -4
  16. package/lowcode/backend-manager/bg-widget.ts +122 -6
  17. package/lowcode/backend-manager/splitPage.js +0 -39
  18. package/lowcode/backend-manager/splitPage.ts +0 -40
  19. package/lowcode/cms-plugin/auto-fcm-advertise.js +17 -5
  20. package/lowcode/cms-plugin/auto-fcm-advertise.ts +19 -6
  21. package/lowcode/cms-plugin/auto-fcm-history.js +2732 -0
  22. package/lowcode/cms-plugin/auto-fcm-history.ts +2995 -0
  23. package/lowcode/cms-plugin/cms-router.js +5 -0
  24. package/lowcode/cms-plugin/cms-router.ts +6 -0
  25. package/lowcode/cms-plugin/filter-options.js +80 -27
  26. package/lowcode/cms-plugin/filter-options.ts +83 -27
  27. package/lowcode/cms-plugin/language-backend.js +50 -39
  28. package/lowcode/cms-plugin/language-backend.ts +109 -95
  29. package/lowcode/cms-plugin/menus-setting.js +175 -151
  30. package/lowcode/cms-plugin/menus-setting.ts +620 -591
  31. package/lowcode/cms-plugin/model/order.d.ts +1 -0
  32. package/lowcode/cms-plugin/module/data.js +7 -7
  33. package/lowcode/cms-plugin/module/data.ts +262 -233
  34. package/lowcode/cms-plugin/module/delivery-html.js +18 -10
  35. package/lowcode/cms-plugin/module/delivery-html.ts +26 -10
  36. package/lowcode/cms-plugin/module/order-setting.js +458 -328
  37. package/lowcode/cms-plugin/module/order-setting.ts +622 -351
  38. package/lowcode/cms-plugin/module/product-excel.js +1 -1
  39. package/lowcode/cms-plugin/module/product-excel.ts +2 -1
  40. package/lowcode/cms-plugin/order/order-module.js +90 -1
  41. package/lowcode/cms-plugin/order/order-module.ts +106 -1
  42. package/lowcode/cms-plugin/pos-pages/payment-page.js +11 -8
  43. package/lowcode/cms-plugin/pos-pages/payment-page.ts +28 -15
  44. package/lowcode/cms-plugin/pos-pages/products-page.js +0 -39
  45. package/lowcode/cms-plugin/pos-pages/products-page.ts +0 -40
  46. package/lowcode/cms-plugin/shopping-collections.ts +1 -3
  47. package/lowcode/cms-plugin/shopping-finance-setting.js +19 -80
  48. package/lowcode/cms-plugin/shopping-finance-setting.ts +19 -87
  49. package/lowcode/cms-plugin/shopping-order-manager.js +122 -38
  50. package/lowcode/cms-plugin/shopping-order-manager.ts +160 -58
  51. package/lowcode/cms-plugin/shopping-product-setting.js +364 -376
  52. package/lowcode/cms-plugin/shopping-product-setting.ts +406 -415
  53. package/lowcode/cms-plugin/shopping-setting-advance.js +57 -16
  54. package/lowcode/cms-plugin/shopping-setting-advance.ts +69 -18
  55. package/lowcode/cms-plugin/user/user-module.js +2 -43
  56. package/lowcode/cms-plugin/user/user-module.ts +2 -46
  57. package/lowcode/cms-plugin/user-list.js +4 -6
  58. package/lowcode/cms-plugin/user-list.ts +35 -38
  59. package/lowcode/css/editor.css +42 -3
  60. package/lowcode/glitter-base/global/language.js +6 -1
  61. package/lowcode/glitter-base/global/language.ts +10 -4
  62. package/lowcode/glitter-base/global/payment-config.js +19 -16
  63. package/lowcode/glitter-base/global/payment-config.ts +22 -16
  64. package/lowcode/glitter-base/global/shipment-config.js +6 -5
  65. package/lowcode/glitter-base/global/shipment-config.ts +12 -10
  66. package/lowcode/glitter-base/route/fcm.js +21 -1
  67. package/lowcode/glitter-base/route/fcm.ts +22 -2
  68. package/lowcode/glitter-base/route/shopping.js +8 -32
  69. package/lowcode/glitter-base/route/shopping.ts +10 -33
  70. package/lowcode/glitter-base/route/user.js +11 -2
  71. package/lowcode/glitter-base/route/user.ts +23 -12
  72. package/lowcode/jspage/function-page/setting_editor.js +9 -0
  73. package/lowcode/jspage/function-page/setting_editor.ts +9 -0
  74. package/lowcode/public-components/blogs/list.js +223 -195
  75. package/lowcode/public-components/blogs/list.ts +383 -352
  76. package/lowcode/public-components/product/product-list.js +8 -4
  77. package/lowcode/public-components/product/product-list.ts +9 -4
  78. package/lowcode/public-components/terms-related/index.js +1 -1
  79. package/lowcode/public-components/terms-related/index.ts +1 -1
  80. package/lowcode/public-components/user-manager/um-login.js +1 -1
  81. package/lowcode/public-components/user-manager/um-login.ts +2 -2
  82. package/lowcode/public-components/user-manager/um-order.js +41 -5
  83. package/lowcode/public-components/user-manager/um-order.ts +58 -20
  84. package/lowcode/public-components/user-manager/um-voucher.ts +2 -2
  85. package/nhi4veq3gk.json +1 -0
  86. package/package.json +1 -1
  87. package/src/Language.d.ts +2 -0
  88. package/src/Language.js +66 -65
  89. package/src/Language.js.map +1 -1
  90. package/src/Language.ts +719 -715
  91. package/src/api-public/config/shipment-config.js +3 -2
  92. package/src/api-public/config/shipment-config.js.map +1 -1
  93. package/src/api-public/config/shipment-config.ts +3 -2
  94. package/src/api-public/controllers/ai-chat.js.map +1 -1
  95. package/src/api-public/controllers/ai-chat.ts +1 -2
  96. package/src/api-public/controllers/fcm.js +23 -58
  97. package/src/api-public/controllers/fcm.js.map +1 -1
  98. package/src/api-public/controllers/fcm.ts +28 -56
  99. package/src/api-public/controllers/shop.js +7 -1
  100. package/src/api-public/controllers/shop.js.map +1 -1
  101. package/src/api-public/controllers/shop.ts +17 -10
  102. package/src/api-public/controllers/user.js +1 -0
  103. package/src/api-public/controllers/user.js.map +1 -1
  104. package/src/api-public/controllers/user.ts +2 -0
  105. package/src/api-public/services/auto-send-email.js +247 -187
  106. package/src/api-public/services/auto-send-email.js.map +1 -1
  107. package/src/api-public/services/auto-send-email.ts +568 -505
  108. package/src/api-public/services/delivery.js +1 -1
  109. package/src/api-public/services/delivery.js.map +1 -1
  110. package/src/api-public/services/delivery.ts +6 -5
  111. package/src/api-public/services/financial-service.js +1 -2
  112. package/src/api-public/services/financial-service.js.map +1 -1
  113. package/src/api-public/services/financial-service.ts +4 -6
  114. package/src/api-public/services/manager.d.ts +4 -3
  115. package/src/api-public/services/manager.js +8 -12
  116. package/src/api-public/services/manager.js.map +1 -1
  117. package/src/api-public/services/manager.ts +57 -59
  118. package/src/api-public/services/model/handlePaymentTransaction.d.ts +1 -1
  119. package/src/api-public/services/model/handlePaymentTransaction.js +23 -3
  120. package/src/api-public/services/model/handlePaymentTransaction.js.map +1 -1
  121. package/src/api-public/services/model/handlePaymentTransaction.ts +25 -36
  122. package/src/api-public/services/schedule.d.ts +1 -0
  123. package/src/api-public/services/schedule.js +27 -0
  124. package/src/api-public/services/schedule.js.map +1 -1
  125. package/src/api-public/services/schedule.ts +30 -0
  126. package/src/api-public/services/shopping.d.ts +22 -2
  127. package/src/api-public/services/shopping.js +362 -90
  128. package/src/api-public/services/shopping.js.map +1 -1
  129. package/src/api-public/services/shopping.ts +481 -134
  130. package/src/api-public/services/user.d.ts +1 -0
  131. package/src/api-public/services/user.js +36 -16
  132. package/src/api-public/services/user.js.map +1 -1
  133. package/src/api-public/services/user.ts +42 -23
  134. package/src/api-public/services/workers.js +3 -3
  135. package/src/api-public/services/workers.js.map +1 -1
  136. package/src/api-public/services/workers.ts +103 -103
  137. package/src/app-project/serverless/src/modules/database.js +1 -1
  138. package/src/app-project/serverless/src/modules/database.js.map +1 -1
  139. package/src/app-project/serverless/src/modules/database.ts +171 -171
  140. package/src/controllers/template.d.ts +1 -1
  141. package/src/controllers/template.js +16 -16
  142. package/src/controllers/template.js.map +1 -1
  143. package/src/controllers/template.ts +98 -84
  144. package/src/modules/database.js +3 -1
  145. package/src/modules/database.js.map +1 -1
  146. package/src/modules/database.ts +185 -181
  147. package/src/modules/firebase.d.ts +17 -0
  148. package/src/modules/firebase.js +126 -0
  149. package/src/modules/firebase.js.map +1 -1
  150. package/src/modules/firebase.ts +169 -0
  151. package/src/public-config-initial/auto-fcm.js +8 -2
  152. package/src/public-config-initial/auto-fcm.js.map +1 -1
  153. package/src/public-config-initial/auto-fcm.ts +15 -6
  154. package/src/services/app.d.ts +2 -1
  155. package/src/services/app.js.map +1 -1
  156. package/src/services/app.ts +2 -1
  157. package/src/services/template.d.ts +3 -2
  158. package/src/services/template.js +2 -1
  159. package/src/services/template.js.map +1 -1
  160. package/src/services/template.ts +13 -20
@@ -2,639 +2,668 @@ 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
4
  import { EditorElem } from '../glitterBundle/plugins/editor-elem.js';
5
- import {LanguageBackend} from "./language-backend.js";
5
+ import { LanguageLocation } from '../glitter-base/global/language.js';
6
+ import { LanguageBackend } from './language-backend.js';
6
7
 
7
8
  const html = String.raw;
8
9
 
9
10
  interface MenuItem {
10
- link: string;
11
- title: string;
12
- items: MenuItem[];
11
+ link: string;
12
+ title: string;
13
+ items: MenuItem[];
13
14
  }
14
15
 
15
16
  export class MenusSetting {
16
- public static main(gvc: GVC, widget: any) {
17
- const html = String.raw;
18
- const glitter = gvc.glitter;
19
-
20
- const vm: {
21
- type: 'list' | 'add' | 'replace' | 'select';
22
- index: number;
23
- dataList: any;
24
- query?: string;
17
+ public static main(gvc: GVC, widget: any) {
18
+ const html = String.raw;
19
+ const glitter = gvc.glitter;
25
20
 
26
- } = {
27
- type: 'list',
28
- index: 0,
29
- dataList: undefined,
30
- query: ''
21
+ const vm: {
22
+ type: 'list' | 'add' | 'replace' | 'select';
23
+ index: number;
24
+ dataList: any;
25
+ query?: string;
26
+ } = {
27
+ type: 'list',
28
+ index: 0,
29
+ dataList: undefined,
30
+ query: '',
31
+ };
32
+ const filterID = gvc.glitter.getUUID();
33
+ let vmi: any = undefined;
31
34
 
32
- };
33
- const filterID = gvc.glitter.getUUID();
34
- let vmi: any = undefined;
35
+ function getDatalist() {
36
+ return vm.dataList.map((dd: any, index: number) => {
37
+ return [
38
+ {
39
+ key: '選單名稱',
40
+ value: html`<span class="tx_normal">${dd.title}</span>`,
41
+ },
42
+ ];
43
+ });
44
+ }
35
45
 
36
- function getDatalist() {
37
- return vm.dataList.map((dd: any, index: number) => {
38
- return [
39
- {
40
- key: '選單名稱',
41
- value: html`<span class="tx_normal">${dd.title}</span>`,
46
+ return gvc.bindView(() => {
47
+ const id = glitter.getUUID();
48
+ function refresh() {
49
+ gvc.notifyDataChange(id);
50
+ }
51
+ return {
52
+ bind: id,
53
+ dataList: [{ obj: vm, key: 'type' }],
54
+ view: () => {
55
+ if (vm.type === 'list') {
56
+ return BgWidget.container(html`
57
+ <div class="title-container">
58
+ ${BgWidget.title('選單管理')}
59
+ <div class="flex-fill"></div>
60
+ ${false
61
+ ? BgWidget.darkButton(
62
+ '新增',
63
+ gvc.event(() => {
64
+ vm.type = 'add';
65
+ gvc.notifyDataChange(id);
66
+ })
67
+ )
68
+ : ''}
69
+ </div>
70
+ ${BgWidget.container(
71
+ BgWidget.mainCard(
72
+ BgWidget.tableV3({
73
+ gvc: gvc,
74
+ getData: vmi => {
75
+ vm.dataList = [
76
+ { tag: 'menu-setting', title: '主選單' },
77
+ { tag: 'footer-setting', title: '頁腳' },
78
+ ];
79
+ vmi.pageSize = 1;
80
+ vmi.originalData = vm.dataList;
81
+ vmi.tableData = getDatalist();
82
+ vmi.loading = false;
83
+ vmi.callback();
42
84
  },
43
- ];
44
- });
45
- }
46
-
47
- return gvc.bindView(() => {
48
- const id = glitter.getUUID();
49
- function refresh(){
50
- gvc.notifyDataChange(id)
51
- }
52
- return {
53
- bind: id,
54
- dataList: [{ obj: vm, key: 'type' }],
55
- view: () => {
56
- if (vm.type === 'list') {
57
- return BgWidget.container(html`
58
- <div class="title-container">
59
- ${BgWidget.title('選單管理')}
60
- <div class="flex-fill"></div>
61
- ${false
62
- ? BgWidget.darkButton(
63
- '新增',
64
- gvc.event(() => {
65
- vm.type = 'add';
66
- gvc.notifyDataChange(id);
67
- })
68
- )
69
- : ''}
70
- </div>
71
- ${BgWidget.container(
72
- BgWidget.mainCard(
73
- BgWidget.tableV3({
74
- gvc: gvc,
75
- getData: (vmi) => {
76
- vm.dataList = [
77
- { tag: 'menu-setting', title: '主選單' },
78
- { tag: 'footer-setting', title: '頁腳' },
79
- ];
80
- vmi.pageSize = 1;
81
- vmi.originalData = vm.dataList;
82
- vmi.tableData = getDatalist();
83
- vmi.loading = false;
84
- vmi.callback();
85
- },
86
- rowClick: (data, index) => {
87
- vm.index = index;
88
- vm.type = 'replace';
89
- },
90
- filter: [],
91
- })
92
- )
93
- )}
94
- `);
95
- } else if (vm.type == 'add') {
96
- return BgWidget.container(
97
- this.setMenu({
98
- gvc: gvc,
99
- widget: widget,
100
- title: '新增選單',
101
- key: vm.dataList[vm.index].tag,
102
- goBack: () => {},
103
- })
104
- );
105
- } else {
106
- return BgWidget.container(
107
- this.setMenu({
108
- gvc: gvc,
109
- widget: widget,
110
- key: vm.dataList[vm.index].tag,
111
- title: vm.dataList[vm.index].title,
112
- goBack: () => {
113
- vm.type = 'list';
114
- gvc.notifyDataChange(id);
115
- },
116
- })
117
- );
118
- }
119
- },
120
- divCreate: {
121
- class: `mx-auto `,
122
- style: `max-width:100%;width:960px;`,
85
+ rowClick: (data, index) => {
86
+ vm.index = index;
87
+ vm.type = 'replace';
88
+ },
89
+ filter: [],
90
+ })
91
+ )
92
+ )}
93
+ `);
94
+ } else if (vm.type == 'add') {
95
+ return BgWidget.container(
96
+ this.setMenu({
97
+ gvc: gvc,
98
+ widget: widget,
99
+ title: '新增選單',
100
+ key: vm.dataList[vm.index].tag,
101
+ goBack: () => {},
102
+ })
103
+ );
104
+ } else {
105
+ return BgWidget.container(
106
+ this.setMenu({
107
+ gvc: gvc,
108
+ widget: widget,
109
+ key: vm.dataList[vm.index].tag,
110
+ title: vm.dataList[vm.index].title,
111
+ goBack: () => {
112
+ vm.type = 'list';
113
+ gvc.notifyDataChange(id);
123
114
  },
124
- };
125
- });
126
- }
115
+ })
116
+ );
117
+ }
118
+ },
119
+ divCreate: {
120
+ class: `mx-auto `,
121
+ style: `max-width:100%;width:960px;`,
122
+ },
123
+ };
124
+ });
125
+ }
127
126
 
128
- public static setMenu(cf: { goBack: () => void; gvc: GVC; widget: any; key: 'menu-setting' | 'footer-setting' | 'text-manager'; title: string }) {
129
- const vm: {
130
- id: string;
131
- link: {
132
- "en-US":MenuItem[],
133
- "zh-CN":MenuItem[],
134
- "zh-TW":MenuItem[]
135
- };
136
- loading: boolean;
137
- selected: boolean;
138
- language:'en-US'|'zh-CN'|'zh-TW'
139
- } = {
140
- id: cf.gvc.glitter.getUUID(),
141
- link: {
142
- "en-US":[],
143
- "zh-CN":[],
144
- "zh-TW":[]
145
- },
146
- selected: false,
147
- loading: true,
148
- language:(window.parent as any).store_info.language_setting.def
149
- };
127
+ public static setMenu(cf: {
128
+ goBack: () => void;
129
+ gvc: GVC;
130
+ widget: any;
131
+ key: 'menu-setting' | 'footer-setting' | 'text-manager';
132
+ title: string;
133
+ }) {
134
+ const vm: {
135
+ id: string;
136
+ link: {
137
+ 'en-US': MenuItem[];
138
+ 'zh-CN': MenuItem[];
139
+ 'zh-TW': MenuItem[];
140
+ };
141
+ loading: boolean;
142
+ selected: boolean;
143
+ language: LanguageLocation;
144
+ } = {
145
+ id: cf.gvc.glitter.getUUID(),
146
+ link: {
147
+ 'en-US': [],
148
+ 'zh-CN': [],
149
+ 'zh-TW': [],
150
+ },
151
+ selected: false,
152
+ loading: true,
153
+ language: (window.parent as any).store_info.language_setting.def,
154
+ };
150
155
 
151
- ApiUser.getPublicConfig(cf.key, 'manager').then((data: any) => {
152
- if (data.response.value) {
153
- vm.link = data.response.value;
154
- }
155
- gvc.notifyDataChange(vm.id);
156
- });
156
+ ApiUser.getPublicConfig(cf.key, 'manager').then((data: any) => {
157
+ if (data.response.value) {
158
+ vm.link = data.response.value;
159
+ }
160
+ gvc.notifyDataChange(vm.id);
161
+ });
157
162
 
158
- function clearNoNeedData(items: MenuItem[]) {
159
- items.map((dd) => {
160
- (dd as any).selected = undefined;
161
- clearNoNeedData(dd.items || []);
162
- });
163
- }
164
- function save() {
165
- for (const a of ["en-US",'zh-CN','zh-TW']){
166
- clearNoNeedData((vm.link as any)[a]);
167
- }
163
+ function clearNoNeedData(items: MenuItem[]) {
164
+ items.map(dd => {
165
+ (dd as any).selected = undefined;
166
+ clearNoNeedData(dd.items || []);
167
+ });
168
+ }
169
+ function save() {
170
+ for (const a of ['en-US', 'zh-CN', 'zh-TW']) {
171
+ clearNoNeedData((vm.link as any)[a]);
172
+ }
168
173
 
169
- cf.widget.event('loading', {
170
- title: '儲存中...',
171
- });
172
- ApiUser.setPublicConfig({
173
- key: cf.key,
174
- value: vm.link,
175
- user_id: 'manager',
176
- }).then((data) => {
177
- setTimeout(() => {
178
- cf.widget.event('loading', {
179
- visible: false,
180
- });
181
- cf.widget.event('success', {
182
- title: '儲存成功',
183
- });
184
- }, 1000);
185
- });
186
- }
187
- function selectAll(array: MenuItem) {
188
- (array as any).selected = true;
189
- array.items.map((dd) => {
190
- (dd as any).selected = true;
191
- selectAll(dd);
192
- });
193
- }
194
- function clearAll(array: MenuItem) {
195
- (array as any).selected = false;
196
- array.items.map((dd) => {
197
- (dd as any).selected = false;
198
- clearAll(dd);
199
- });
200
- }
201
- function allSelect(dd: any) {
202
- return (
203
- !dd.items.find((d1: any) => {
204
- return !(d1 as any).selected;
205
- }) && (dd as any).selected
206
- );
207
- }
208
- function getSelectCount(dd: any) {
209
- let count = 0;
210
- if (dd.selected) {
211
- count++;
212
- }
213
- dd.items.map((d1: any) => {
214
- count += getSelectCount(d1);
215
- });
216
- return count;
217
- }
218
- function deleteSelect(items: MenuItem[]) {
219
- return items.filter((d1) => {
220
- d1.items = deleteSelect(d1.items || []);
221
- return !(d1 as any).selected;
222
- });
223
- }
174
+ cf.widget.event('loading', {
175
+ title: '儲存中...',
176
+ });
177
+ ApiUser.setPublicConfig({
178
+ key: cf.key,
179
+ value: vm.link,
180
+ user_id: 'manager',
181
+ }).then(data => {
182
+ setTimeout(() => {
183
+ cf.widget.event('loading', {
184
+ visible: false,
185
+ });
186
+ cf.widget.event('success', {
187
+ title: '儲存成功',
188
+ });
189
+ }, 1000);
190
+ });
191
+ }
192
+ function selectAll(array: MenuItem) {
193
+ (array as any).selected = true;
194
+ array.items.map(dd => {
195
+ (dd as any).selected = true;
196
+ selectAll(dd);
197
+ });
198
+ }
199
+ function clearAll(array: MenuItem) {
200
+ (array as any).selected = false;
201
+ array.items.map(dd => {
202
+ (dd as any).selected = false;
203
+ clearAll(dd);
204
+ });
205
+ }
206
+ function allSelect(dd: any) {
207
+ return (
208
+ !dd.items.find((d1: any) => {
209
+ return !(d1 as any).selected;
210
+ }) && (dd as any).selected
211
+ );
212
+ }
213
+ function getSelectCount(dd: any) {
214
+ let count = 0;
215
+ if (dd.selected) {
216
+ count++;
217
+ }
218
+ dd.items.map((d1: any) => {
219
+ count += getSelectCount(d1);
220
+ });
221
+ return count;
222
+ }
223
+ function deleteSelect(items: MenuItem[]) {
224
+ return items.filter(d1 => {
225
+ d1.items = deleteSelect(d1.items || []);
226
+ return !(d1 as any).selected;
227
+ });
228
+ }
224
229
 
225
- const gvc = cf.gvc;
226
- function refresh(){
227
- gvc.notifyDataChange(vm.id)
228
- }
229
- return gvc.bindView(() => {
230
- return {
231
- bind: vm.id,
232
- view: () => {
233
- const link=vm.link[vm.language];
234
- return html`<div class="title-container" style="width: 856px; max-width: 100%;">
235
- ${BgWidget.goBack(
236
- cf.gvc.event(() => {
237
- cf.goBack();
238
- })
239
- )}${BgWidget.title(cf.title ?? '選單設定')}
240
- <div class="flex-fill"></div>
241
- ${LanguageBackend.switchBtn({
242
- gvc:gvc,
243
- language:vm.language,
244
- callback:(language)=>{
245
- vm.language=language
246
- refresh()
247
- }
248
- })}
230
+ const gvc = cf.gvc;
231
+ function refresh() {
232
+ gvc.notifyDataChange(vm.id);
233
+ }
234
+ return gvc.bindView(() => {
235
+ return {
236
+ bind: vm.id,
237
+ view: () => {
238
+ const link = vm.link[vm.language];
239
+ return html`<div class="title-container" style="width: 856px; max-width: 100%;">
240
+ ${BgWidget.goBack(
241
+ cf.gvc.event(() => {
242
+ cf.goBack();
243
+ })
244
+ )}${BgWidget.title(cf.title ?? '選單設定')}
245
+ <div class="flex-fill"></div>
246
+ ${LanguageBackend.switchBtn({
247
+ gvc: gvc,
248
+ language: vm.language,
249
+ callback: language => {
250
+ vm.language = language;
251
+ refresh();
252
+ },
253
+ })}
254
+ </div>
255
+ ${BgWidget.container(
256
+ html`<div
257
+ style="max-width:100%;width: 856px; padding: 20px; background: white; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.08); border-radius: 10px; overflow: hidden; justify-content: center; align-items: center; display: inline-flex"
258
+ >
259
+ <div style="width: 100%; position: relative">
260
+ <div
261
+ style="width: 100%; left: 0px; top: 0px; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 20px; display: inline-flex"
262
+ >
263
+ <div
264
+ class="w-100 ${getSelectCount({
265
+ items: link,
266
+ }) > 0
267
+ ? ``
268
+ : `d-none`}"
269
+ style="height: 40px; padding: 12px 18px;background: #F7F7F7; border-radius: 10px; justify-content: flex-end; align-items: center; gap: 8px; display: inline-flex"
270
+ >
271
+ <div
272
+ style="flex: 1 1 0; color: #393939; font-size: 14px; font-family: Noto Sans; font-weight: 700; word-wrap: break-word"
273
+ >
274
+ 已選取${getSelectCount({
275
+ items: link,
276
+ })}項
277
+ </div>
278
+ <div
279
+ 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"
280
+ >
281
+ <div
282
+ style="color: #393939; font-size: 14px; font-family: Noto Sans; font-weight: 400; word-wrap: break-word"
283
+ onclick="${gvc.event(() => {
284
+ vm.link[vm.language] = deleteSelect(link);
285
+ gvc.notifyDataChange(vm.id);
286
+ })}"
287
+ >
288
+ 刪除
249
289
  </div>
250
- ${BgWidget.container(
251
- html`<div
252
- style="max-width:100%;width: 856px; padding: 20px; background: white; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.08); border-radius: 10px; overflow: hidden; justify-content: center; align-items: center; display: inline-flex"
253
- >
254
- <div style="width: 100%; position: relative">
255
- <div style="width: 100%; left: 0px; top: 0px; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 20px; display: inline-flex">
290
+ </div>
291
+ </div>
292
+ <div
293
+ class="d-flex align-items-center"
294
+ style="width: 100%; height: 22px; position: relative;gap:29px;"
295
+ >
296
+ <div
297
+ class="${allSelect({
298
+ items: link,
299
+ selected: !link.find(dd => {
300
+ return !(dd as any).selected;
301
+ }),
302
+ })
303
+ ? `fa-solid fa-square-check`
304
+ : `fa-regular fa-square`}"
305
+ style="color:#393939;width: 16px; height: 16px;cursor: pointer;"
306
+ onclick="${cf.gvc.event((e, event) => {
307
+ event.stopPropagation();
308
+
309
+ if (
310
+ link.find(dd => {
311
+ return !(dd as any).selected;
312
+ })
313
+ ) {
314
+ selectAll({
315
+ items: link,
316
+ } as any);
317
+ } else {
318
+ clearAll({
319
+ items: link,
320
+ } as any);
321
+ }
322
+ gvc.notifyDataChange(vm.id);
323
+ })}"
324
+ ></div>
325
+ <div
326
+ style="left: 61px; top: 0px; color: #393939; font-size: 16px; font-family: Noto Sans; font-weight: 700; word-wrap: break-word"
327
+ >
328
+ 選單名稱 ${BgWidget.languageInsignia(vm.language, 'margin-left:5px;')}
329
+ </div>
330
+ </div>
331
+ <div
332
+ style="align-self: stretch; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 18px; display: flex"
333
+ >
334
+ ${(() => {
335
+ function renderItems(array: MenuItem[]): string {
336
+ const id = gvc.glitter.getUUID();
337
+ return (
338
+ gvc.bindView(() => {
339
+ return {
340
+ bind: id,
341
+ view: () => {
342
+ return array
343
+ .map((dd, index) => {
344
+ const list = html`
256
345
  <div
257
- class="w-100 ${getSelectCount({
258
- items: link,
259
- }) > 0
260
- ? ``
261
- : `d-none`}"
262
- style="height: 40px; padding: 12px 18px;background: #F7F7F7; border-radius: 10px; justify-content: flex-end; align-items: center; gap: 8px; display: inline-flex"
346
+ class=" w-100 "
347
+ style="width: 100%; justify-content: flex-start; align-items: center; gap: 5px; display: inline-flex;cursor: pointer;"
348
+ onclick="${cf.gvc.event(() => {
349
+ if (dd.items && dd.items.length > 0) {
350
+ (dd as any).toggle = !(dd as any).toggle;
351
+ gvc.notifyDataChange(vm.id);
352
+ }
353
+ })}"
263
354
  >
264
- <div style="flex: 1 1 0; color: #393939; font-size: 14px; font-family: Noto Sans; font-weight: 700; word-wrap: break-word">
265
- 已選取${getSelectCount({
266
- items: link,
267
- })}項
268
- </div>
355
+ <div
356
+ class="${allSelect(dd)
357
+ ? `fa-solid fa-square-check`
358
+ : `fa-regular fa-square`}"
359
+ style="color:#393939;width: 16px; height: 16px;"
360
+ onclick="${cf.gvc.event((e, event) => {
361
+ event.stopPropagation();
362
+ (dd as any).selected = !(dd as any).selected;
363
+ if ((dd as any).selected) {
364
+ selectAll(dd);
365
+ } else {
366
+ clearAll(dd);
367
+ }
368
+ gvc.notifyDataChange(vm.id);
369
+ })}"
370
+ ></div>
371
+ <div
372
+ class="hoverF2 pe-2 my-1"
373
+ style="width: 100%; justify-content: flex-start; align-items: center; gap: 8px; display: flex"
374
+ >
375
+ <i
376
+ class="ms-2 fa-solid fa-grip-dots-vertical color39 dragItem hoverBtn d-flex align-items-center justify-content-center"
377
+ style="cursor: pointer;width:25px;height: 25px;"
378
+ ></i>
269
379
  <div
270
- 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"
380
+ style="flex-direction: column; justify-content: center; align-items: flex-start; gap: 2px; display: inline-flex;white-space: normal;word-break: break-all;"
271
381
  >
382
+ <div
383
+ style="justify-content: flex-start; align-items: center; gap: 8px; display: inline-flex"
384
+ >
272
385
  <div
273
- style="color: #393939; font-size: 14px; font-family: Noto Sans; font-weight: 400; word-wrap: break-word"
274
- onclick="${gvc.event(() => {
275
- vm.link[vm.language] = deleteSelect(link);
276
- gvc.notifyDataChange(vm.id);
277
- })}"
386
+ style="color: #393939; font-size: 16px; font-family: Noto Sans; font-weight: 400; word-break: break-all;"
278
387
  >
279
- 刪除
388
+ ${dd.title}
280
389
  </div>
390
+ ${dd.items && dd.items.length > 0
391
+ ? !(dd as any).toggle
392
+ ? `<i class="fa-solid fa-angle-down color39"></i>`
393
+ : `<i class="fa-solid fa-angle-up color39"></i>`
394
+ : ``}
395
+ </div>
396
+ <div
397
+ style="justify-content: flex-start; align-items: center; gap: 8px; display: inline-flex;white-space: normal;word-break: break-all;"
398
+ >
399
+ <div
400
+ style="color: #3366BB; font-size: 14px; font-family: Noto Sans; font-weight: 400; line-height: 14px; word-wrap: break-word"
401
+ >
402
+ ${dd.title}
403
+ </div>
404
+ <div
405
+ style="color: #159240; font-size: 14px; font-family: Noto Sans; font-weight: 400; word-wrap: break-word"
406
+ >
407
+ ${dd.link}
408
+ </div>
409
+ </div>
281
410
  </div>
282
- </div>
283
- <div class="d-flex align-items-center" style="width: 100%; height: 22px; position: relative;gap:29px;">
411
+ <div class="flex-fill"></div>
284
412
  <div
285
- class="${allSelect({
286
- items: link,
287
- selected: !link.find((dd) => {
288
- return !(dd as any).selected;
289
- }),
290
- })
291
- ? `fa-solid fa-square-check`
292
- : `fa-regular fa-square`}"
293
- style="color:#393939;width: 16px; height: 16px;cursor: pointer;"
294
- onclick="${cf.gvc.event((e, event) => {
295
- event.stopPropagation();
296
-
297
- if (
298
- link.find((dd) => {
299
- return !(dd as any).selected;
300
- })
301
- ) {
302
- selectAll({
303
- items: link,
304
- } as any);
305
- } else {
306
- clearAll({
307
- items: link,
308
- } as any);
309
- }
413
+ class="child me-2"
414
+ onclick="${cf.gvc.event((e, event) => {
415
+ event.stopPropagation();
416
+ MenusSetting.editEvent(
417
+ {
418
+ link: '',
419
+ title: '',
420
+ items: [],
421
+ },
422
+ data => {
423
+ dd.items = dd.items || [];
424
+ dd.items.push(data);
310
425
  gvc.notifyDataChange(vm.id);
311
- })}"
312
- ></div>
313
- <div style="left: 61px; top: 0px; color: #393939; font-size: 16px; font-family: Noto Sans; font-weight: 700; word-wrap: break-word">選單名稱 ${BgWidget.languageInsignia(vm.language,'margin-left:5px;')}</div>
426
+ }
427
+ );
428
+ })}"
429
+ >
430
+ <i class="fa-solid fa-plus" style="color:#393939;"></i>
431
+ </div>
432
+ <div
433
+ class="child"
434
+ onclick="${cf.gvc.event((e, event) => {
435
+ event.stopPropagation();
436
+ MenusSetting.editEvent(dd, data => {
437
+ array[index] = data;
438
+ gvc.notifyDataChange(vm.id);
439
+ });
440
+ })}"
441
+ >
442
+ <i class="fa-solid fa-pencil" style="color:#393939;"></i>
443
+ </div>
444
+ </div>
314
445
  </div>
315
- <div style="align-self: stretch; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 18px; display: flex">
316
- ${(() => {
317
- function renderItems(array: MenuItem[]): string {
318
- const id = gvc.glitter.getUUID();
319
- return (
320
- gvc.bindView(() => {
321
- return {
322
- bind: id,
323
- view: () => {
324
- return array
325
- .map((dd, index) => {
326
- const list = html`
327
- <div
328
- class=" w-100 "
329
- style="width: 100%; justify-content: flex-start; align-items: center; gap: 5px; display: inline-flex;cursor: pointer;"
330
- onclick="${cf.gvc.event(() => {
331
- if (dd.items && dd.items.length > 0) {
332
- (dd as any).toggle = !(dd as any).toggle;
333
- gvc.notifyDataChange(vm.id);
334
- }
335
- })}"
336
- >
337
- <div
338
- class="${allSelect(dd) ? `fa-solid fa-square-check` : `fa-regular fa-square`}"
339
- style="color:#393939;width: 16px; height: 16px;"
340
- onclick="${cf.gvc.event((e, event) => {
341
- event.stopPropagation();
342
- (dd as any).selected = !(dd as any).selected;
343
- if ((dd as any).selected) {
344
- selectAll(dd);
345
- } else {
346
- clearAll(dd);
347
- }
348
- gvc.notifyDataChange(vm.id);
349
- })}"
350
- ></div>
351
- <div
352
- class="hoverF2 pe-2 my-1"
353
- style="width: 100%; justify-content: flex-start; align-items: center; gap: 8px; display: flex"
354
- >
355
- <i
356
- class="ms-2 fa-solid fa-grip-dots-vertical color39 dragItem hoverBtn d-flex align-items-center justify-content-center"
357
- style="cursor: pointer;width:25px;height: 25px;"
358
- ></i>
359
- <div
360
- style="flex-direction: column; justify-content: center; align-items: flex-start; gap: 2px; display: inline-flex;white-space: normal;word-break: break-all;"
361
- >
362
- <div style="justify-content: flex-start; align-items: center; gap: 8px; display: inline-flex">
363
- <div
364
- style="color: #393939; font-size: 16px; font-family: Noto Sans; font-weight: 400; word-break: break-all;"
365
- >
366
- ${dd.title}
367
- </div>
368
- ${dd.items && dd.items.length > 0
369
- ? !(dd as any).toggle
370
- ? `<i class="fa-solid fa-angle-down color39"></i>`
371
- : `<i class="fa-solid fa-angle-up color39"></i>`
372
- : ``}
373
- </div>
374
- <div
375
- style="justify-content: flex-start; align-items: center; gap: 8px; display: inline-flex;white-space: normal;word-break: break-all;"
376
- >
377
- <div
378
- style="color: #3366BB; font-size: 14px; font-family: Noto Sans; font-weight: 400; line-height: 14px; word-wrap: break-word"
379
- >
380
- ${dd.title}
381
- </div>
382
- <div
383
- style="color: #159240; font-size: 14px; font-family: Noto Sans; font-weight: 400; word-wrap: break-word"
384
- >
385
- ${dd.link}
386
- </div>
387
- </div>
388
- </div>
389
- <div class="flex-fill"></div>
390
- <div
391
- class="child me-2"
392
- onclick="${cf.gvc.event((e, event) => {
393
- event.stopPropagation();
394
- MenusSetting.editEvent(
395
- {
396
- link: '',
397
- title: '',
398
- items: [],
399
- },
400
- (data) => {
401
- dd.items = dd.items || [];
402
- dd.items.push(data);
403
- gvc.notifyDataChange(vm.id);
404
- }
405
- );
406
- })}"
407
- >
408
- <i class="fa-solid fa-plus" style="color:#393939;"></i>
409
- </div>
410
- <div
411
- class="child"
412
- onclick="${cf.gvc.event((e, event) => {
413
- event.stopPropagation();
414
- MenusSetting.editEvent(dd, (data) => {
415
- array[index] = data;
416
- gvc.notifyDataChange(vm.id);
417
- });
418
- })}"
419
- >
420
- <i class="fa-solid fa-pencil" style="color:#393939;"></i>
421
- </div>
422
- </div>
423
- </div>
424
- ${dd.items && dd.items.length > 0
425
- ? html`
426
- <div class=" w-100 ${(dd as any).toggle ? `` : `d-none`}" style="padding-left: 35px;">
427
- ${renderItems(dd.items as MenuItem[]) as any}
428
- </div>
429
- `
430
- : ``}
431
- `;
432
- return html`<li class="w-100 ">${list}</li>`;
433
- })
434
- .join('');
435
- },
436
- divCreate: {
437
- elem: 'ul',
438
- class: `w-100 my-2`,
439
- style: `display:flex;flex-direction: column;gap:18px;`,
440
- },
441
- onCreate: () => {
442
- gvc.glitter.addMtScript(
443
- [
444
- {
445
- src: `https://raw.githack.com/SortableJS/Sortable/master/Sortable.js`,
446
- },
447
- ],
448
- () => {},
449
- () => {}
450
- );
451
- const interval = setInterval(() => {
452
- //@ts-ignore
453
- if (window.Sortable) {
454
- try {
455
- gvc.addStyle(`
446
+ ${dd.items && dd.items.length > 0
447
+ ? html`
448
+ <div
449
+ class=" w-100 ${(dd as any).toggle ? `` : `d-none`}"
450
+ style="padding-left: 35px;"
451
+ >
452
+ ${renderItems(dd.items as MenuItem[]) as any}
453
+ </div>
454
+ `
455
+ : ``}
456
+ `;
457
+ return html`<li class="w-100 ">${list}</li>`;
458
+ })
459
+ .join('');
460
+ },
461
+ divCreate: {
462
+ elem: 'ul',
463
+ class: `w-100 my-2`,
464
+ style: `display:flex;flex-direction: column;gap:18px;`,
465
+ },
466
+ onCreate: () => {
467
+ gvc.glitter.addMtScript(
468
+ [
469
+ {
470
+ src: `https://raw.githack.com/SortableJS/Sortable/master/Sortable.js`,
471
+ },
472
+ ],
473
+ () => {},
474
+ () => {}
475
+ );
476
+ const interval = setInterval(() => {
477
+ //@ts-ignore
478
+ if (window.Sortable) {
479
+ try {
480
+ gvc.addStyle(`
456
481
  ul {
457
482
  list-style: none;
458
483
  padding: 0;
459
484
  }
460
485
  `);
461
- function swapArr(arr: any, index1: number, index2: number) {
462
- const data = arr[index1];
463
- arr.splice(index1, 1);
464
- arr.splice(index2, 0, data);
465
- }
466
- let startIndex = 0;
467
- //@ts-ignore
468
- Sortable.create(gvc.getBindViewElem(id).get(0), {
469
- group: id,
470
- animation: 100,
471
- handle: '.dragItem',
472
- onChange: function (evt: any) {},
473
- onEnd: (evt: any) => {
474
- swapArr(array, startIndex, evt.newIndex);
475
- gvc.notifyDataChange(id);
476
- },
477
- onStart: function (evt: any) {
478
- startIndex = evt.oldIndex;
479
- },
480
- });
481
- } catch (e) {}
482
- clearInterval(interval);
483
- }
484
- }, 100);
485
- },
486
- };
487
- }) +
488
- html` <div
489
- style="cursor:pointer;align-self: stretch; height: 50px; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 10px; display: flex"
490
- onclick="${cf.gvc.event(() => {
491
- MenusSetting.editEvent(
492
- {
493
- link: '',
494
- title: '',
495
- items: [],
496
- },
497
- (data) => {
498
- array.push(data);
499
- gvc.notifyDataChange(vm.id);
500
- }
501
- );
502
- })}"
503
- >
504
- <div
505
- style="align-self: stretch; height: 54px; border-radius: 10px; border: 1px #DDDDDD solid; justify-content: center; align-items: center; gap: 6px; display: inline-flex"
506
- >
507
- <i class="fa-solid fa-plus" style="color: #3366BB;font-size: 16px; "></i>
508
- <div style="color: #3366BB; font-size: 16px; font-family: Noto Sans; font-weight: 400; word-wrap: break-word">新增選單</div>
509
- </div>
510
- </div>`
511
- );
512
- }
513
-
514
- return renderItems(link);
515
- })()}
516
- </div>
517
- </div>
486
+ function swapArr(arr: any, index1: number, index2: number) {
487
+ const data = arr[index1];
488
+ arr.splice(index1, 1);
489
+ arr.splice(index2, 0, data);
490
+ }
491
+ let startIndex = 0;
492
+ //@ts-ignore
493
+ Sortable.create(gvc.getBindViewElem(id).get(0), {
494
+ group: id,
495
+ animation: 100,
496
+ handle: '.dragItem',
497
+ onChange: function (evt: any) {},
498
+ onEnd: (evt: any) => {
499
+ swapArr(array, startIndex, evt.newIndex);
500
+ gvc.notifyDataChange(id);
501
+ },
502
+ onStart: function (evt: any) {
503
+ startIndex = evt.oldIndex;
504
+ },
505
+ });
506
+ } catch (e) {}
507
+ clearInterval(interval);
508
+ }
509
+ }, 100);
510
+ },
511
+ };
512
+ }) +
513
+ html` <div
514
+ style="cursor:pointer;align-self: stretch; height: 50px; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 10px; display: flex"
515
+ onclick="${cf.gvc.event(() => {
516
+ MenusSetting.editEvent(
517
+ {
518
+ link: '',
519
+ title: '',
520
+ items: [],
521
+ },
522
+ data => {
523
+ array.push(data);
524
+ gvc.notifyDataChange(vm.id);
525
+ }
526
+ );
527
+ })}"
528
+ >
529
+ <div
530
+ style="align-self: stretch; height: 54px; border-radius: 10px; border: 1px #DDDDDD solid; justify-content: center; align-items: center; gap: 6px; display: inline-flex"
531
+ >
532
+ <i class="fa-solid fa-plus" style="color: #3366BB;font-size: 16px; "></i>
533
+ <div
534
+ style="color: #3366BB; font-size: 16px; font-family: Noto Sans; font-weight: 400; word-wrap: break-word"
535
+ >
536
+ 新增選單
518
537
  </div>
538
+ </div>
519
539
  </div>`
520
- )}
521
- <div class="update-bar-container">
522
- ${BgWidget.cancel(
523
- gvc.event(() => {
524
- cf.goBack();
525
- })
526
- )}
527
- ${BgWidget.save(
528
- gvc.event(() => {
529
- save();
530
- })
531
- )}
532
- </div>`;
533
- },
534
- divCreate: {
535
- style: `padding-bottom:60px;`,
536
- },
537
- };
538
- });
539
- }
540
+ );
541
+ }
540
542
 
541
- public static editEvent(data: MenuItem, save: (data: MenuItem) => void) {
542
- const gvc: GVC = (window.parent as any).glitter.pageConfig[0].gvc;
543
- const rightMenu = (window.parent as any).glitter.share.NormalPageEditor;
543
+ return renderItems(link);
544
+ })()}
545
+ </div>
546
+ </div>
547
+ </div>
548
+ </div>`
549
+ )}
550
+ <div class="update-bar-container">
551
+ ${BgWidget.cancel(
552
+ gvc.event(() => {
553
+ cf.goBack();
554
+ })
555
+ )}
556
+ ${BgWidget.save(
557
+ gvc.event(() => {
558
+ save();
559
+ })
560
+ )}
561
+ </div>`;
562
+ },
563
+ divCreate: {
564
+ style: `padding-bottom:60px;`,
565
+ },
566
+ };
567
+ });
568
+ }
544
569
 
545
- rightMenu.closeEvent = () => {
546
- if (data.title.length > 0 || data.link.length > 0) {
547
- save(data);
548
- }
549
- };
550
- rightMenu.toggle({
551
- visible: true,
552
- title: '新增選單',
553
- view: [
554
- gvc.bindView(() => {
555
- const id = gvc.glitter.getUUID();
556
- return {
557
- bind: id,
558
- view: () => {
559
- return [
560
- EditorElem.editeInput({
561
- gvc: gvc,
562
- title: '選單名稱',
563
- default: data.title || '',
564
- placeHolder: '請輸入選單名稱',
565
- callback: (text) => {
566
- data.title = text;
567
- },
568
- }),
569
- BgWidget.linkList({
570
- gvc: gvc,
571
- title: '',
572
- default: data.link || '',
573
- placeHolder: '選擇或貼上外部連結',
574
- callback: (text) => {
575
- data.link = text;
576
- },
577
- }),
578
- ].join('');
579
- },
580
- divCreate: {
581
- style: `padding:20px;`,
582
- },
583
- };
570
+ public static editEvent(data: MenuItem, save: (data: MenuItem) => void) {
571
+ const gvc: GVC = (window.parent as any).glitter.pageConfig[0].gvc;
572
+ const rightMenu = (window.parent as any).glitter.share.NormalPageEditor;
573
+
574
+ rightMenu.closeEvent = () => {
575
+ if (data.title.length > 0 || data.link.length > 0) {
576
+ save(data);
577
+ }
578
+ };
579
+ rightMenu.toggle({
580
+ visible: true,
581
+ title: '新增選單',
582
+ view: [
583
+ gvc.bindView(() => {
584
+ const id = gvc.glitter.getUUID();
585
+ return {
586
+ bind: id,
587
+ view: () => {
588
+ return [
589
+ EditorElem.editeInput({
590
+ gvc: gvc,
591
+ title: '選單名稱',
592
+ default: data.title || '',
593
+ placeHolder: '請輸入選單名稱',
594
+ callback: text => {
595
+ data.title = text;
596
+ },
584
597
  }),
585
- ].join(''),
586
- right: true,
587
- });
588
- }
598
+ BgWidget.linkList({
599
+ gvc: gvc,
600
+ title: '',
601
+ default: data.link || '',
602
+ placeHolder: '選擇或貼上外部連結',
603
+ callback: text => {
604
+ data.link = text;
605
+ },
606
+ }),
607
+ ].join('');
608
+ },
609
+ divCreate: {
610
+ style: `padding:20px;`,
611
+ },
612
+ };
613
+ }),
614
+ ].join(''),
615
+ right: true,
616
+ });
617
+ }
589
618
 
590
- public static collectionEvent(data: MenuItem, save: (data: MenuItem) => boolean) {
591
- const gvc: GVC = (window.parent as any).glitter.pageConfig[0].gvc;
592
- const rightMenu = (window.parent as any).glitter.share.NormalPageEditor;
593
- const id = gvc.glitter.getUUID();
619
+ public static collectionEvent(data: MenuItem, save: (data: MenuItem) => boolean) {
620
+ const gvc: GVC = (window.parent as any).glitter.pageConfig[0].gvc;
621
+ const rightMenu = (window.parent as any).glitter.share.NormalPageEditor;
622
+ const id = gvc.glitter.getUUID();
594
623
 
595
- rightMenu.closeEvent = () => {
596
- if (data.title.length > 0 && data.link.length > 0) {
597
- save(data);
598
- }
599
- };
600
- rightMenu.toggle({
601
- visible: true,
602
- title: '新增分類',
603
- view: [
604
- gvc.bindView(() => {
605
- return {
606
- bind: id,
607
- view: () => {
608
- return [
609
- BgWidget.editeInput({
610
- gvc: gvc,
611
- title: '分類名稱',
612
- default: data.title || '',
613
- placeHolder: '請輸入分類名稱',
614
- callback: (text) => {
615
- data.title = text;
616
- },
617
- }),
618
- BgWidget.editeInput({
619
- gvc: gvc,
620
- title: '',
621
- default: data.link || '',
622
- placeHolder: '請輸入分類標籤',
623
- callback: (text) => {
624
- data.link = text;
625
- },
626
- }),
627
- ].join('');
628
- },
629
- divCreate: {
630
- style: `padding:20px;`,
631
- },
632
- };
624
+ rightMenu.closeEvent = () => {
625
+ if (data.title.length > 0 && data.link.length > 0) {
626
+ save(data);
627
+ }
628
+ };
629
+ rightMenu.toggle({
630
+ visible: true,
631
+ title: '新增分類',
632
+ view: [
633
+ gvc.bindView(() => {
634
+ return {
635
+ bind: id,
636
+ view: () => {
637
+ return [
638
+ BgWidget.editeInput({
639
+ gvc: gvc,
640
+ title: '分類名稱',
641
+ default: data.title || '',
642
+ placeHolder: '請輸入分類名稱',
643
+ callback: text => {
644
+ data.title = text;
645
+ },
633
646
  }),
634
- ].join(''),
635
- right: true,
636
- });
637
- }
647
+ BgWidget.editeInput({
648
+ gvc: gvc,
649
+ title: '',
650
+ default: data.link || '',
651
+ placeHolder: '請輸入分類標籤',
652
+ callback: text => {
653
+ data.link = text;
654
+ },
655
+ }),
656
+ ].join('');
657
+ },
658
+ divCreate: {
659
+ style: `padding:20px;`,
660
+ },
661
+ };
662
+ }),
663
+ ].join(''),
664
+ right: true,
665
+ });
666
+ }
638
667
  }
639
668
 
640
669
  (window as any).glitter.setModule(import.meta.url, MenusSetting);