ts-glitter 19.9.8 → 19.9.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 (113) hide show
  1. package/lowcode/Entry.js +1 -1
  2. package/lowcode/Entry.ts +1 -1
  3. package/lowcode/cms-plugin/app-release.js +222 -108
  4. package/lowcode/cms-plugin/app-release.ts +614 -478
  5. package/lowcode/public-components/product/pd-class.js +3 -0
  6. package/lowcode/public-components/product/pd-class.ts +3 -0
  7. package/lowcode/public-components/user-manager/um-login.js +1 -1
  8. package/lowcode/public-components/user-manager/um-login.ts +1 -1
  9. package/package.json +2 -2
  10. package/src/app-project/ios/proshake.xcodeproj/project.xcworkspace/xcuserdata/jianzhi.wang.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  11. package/src/helper/glitter-util.d.ts +1 -2
  12. package/src/helper/glitter-util.js +3 -3
  13. package/src/helper/glitter-util.js.map +1 -1
  14. package/src/helper/glitter-util.ts +100 -84
  15. package/src/app-project/work-space/1743699101363/Gemfile +0 -3
  16. package/src/app-project/work-space/1743699101363/fastlane/Appfile +0 -8
  17. package/src/app-project/work-space/1743699101363/fastlane/Deliverfile +0 -3
  18. package/src/app-project/work-space/1743699101363/fastlane/Fastfile +0 -26
  19. package/src/app-project/work-space/1743699101363/fastlane/README.md +0 -32
  20. package/src/app-project/work-space/1743699101363/fastlane/metadata/copyright.txt +0 -1
  21. package/src/app-project/work-space/1743699101363/fastlane/metadata/en-US/apple_tv_privacy_policy.txt +0 -1
  22. package/src/app-project/work-space/1743699101363/fastlane/metadata/en-US/description.txt +0 -1
  23. package/src/app-project/work-space/1743699101363/fastlane/metadata/en-US/keywords.txt +0 -1
  24. package/src/app-project/work-space/1743699101363/fastlane/metadata/en-US/marketing_url.txt +0 -1
  25. package/src/app-project/work-space/1743699101363/fastlane/metadata/en-US/name.txt +0 -1
  26. package/src/app-project/work-space/1743699101363/fastlane/metadata/en-US/privacy_url.txt +0 -1
  27. package/src/app-project/work-space/1743699101363/fastlane/metadata/en-US/promotional_text.txt +0 -1
  28. package/src/app-project/work-space/1743699101363/fastlane/metadata/en-US/release_notes.txt +0 -1
  29. package/src/app-project/work-space/1743699101363/fastlane/metadata/en-US/subtitle.txt +0 -1
  30. package/src/app-project/work-space/1743699101363/fastlane/metadata/en-US/support_url.txt +0 -1
  31. package/src/app-project/work-space/1743699101363/fastlane/metadata/primary_category.txt +0 -1
  32. package/src/app-project/work-space/1743699101363/fastlane/metadata/primary_first_sub_category.txt +0 -1
  33. package/src/app-project/work-space/1743699101363/fastlane/metadata/primary_second_sub_category.txt +0 -1
  34. package/src/app-project/work-space/1743699101363/fastlane/metadata/review_information/demo_password.txt +0 -1
  35. package/src/app-project/work-space/1743699101363/fastlane/metadata/review_information/demo_user.txt +0 -1
  36. package/src/app-project/work-space/1743699101363/fastlane/metadata/review_information/email_address.txt +0 -1
  37. package/src/app-project/work-space/1743699101363/fastlane/metadata/review_information/first_name.txt +0 -1
  38. package/src/app-project/work-space/1743699101363/fastlane/metadata/review_information/last_name.txt +0 -1
  39. package/src/app-project/work-space/1743699101363/fastlane/metadata/review_information/notes.txt +0 -1
  40. package/src/app-project/work-space/1743699101363/fastlane/metadata/review_information/phone_number.txt +0 -1
  41. package/src/app-project/work-space/1743699101363/fastlane/metadata/secondary_category.txt +0 -1
  42. package/src/app-project/work-space/1743699101363/fastlane/metadata/secondary_first_sub_category.txt +0 -1
  43. package/src/app-project/work-space/1743699101363/fastlane/metadata/secondary_second_sub_category.txt +0 -1
  44. package/src/app-project/work-space/1743699101363/fastlane/report.xml +0 -25
  45. package/src/app-project/work-space/1743699101363/fastlane/screenshots/README.txt +0 -30
  46. package/src/app-project/work-space/1743699101363/proshake/AppDelegate.swift +0 -93
  47. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/100.png +0 -0
  48. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/102.png +0 -0
  49. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/1024.png +0 -0
  50. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/114.png +0 -0
  51. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/120.png +0 -0
  52. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/128.png +0 -0
  53. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/144.png +0 -0
  54. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/152.png +0 -0
  55. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/16.png +0 -0
  56. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/167.png +0 -0
  57. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/172.png +0 -0
  58. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/180.png +0 -0
  59. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/196.png +0 -0
  60. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/20.png +0 -0
  61. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/216.png +0 -0
  62. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/256.png +0 -0
  63. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/29.png +0 -0
  64. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/32.png +0 -0
  65. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/40.png +0 -0
  66. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/48.png +0 -0
  67. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/50.png +0 -0
  68. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/512.png +0 -0
  69. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/55.png +0 -0
  70. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/57.png +0 -0
  71. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/58.png +0 -0
  72. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/60.png +0 -0
  73. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/64.png +0 -0
  74. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/66.png +0 -0
  75. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/72.png +0 -0
  76. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/76.png +0 -0
  77. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/80.png +0 -0
  78. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/87.png +0 -0
  79. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/88.png +0 -0
  80. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/92.png +0 -0
  81. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -354
  82. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/AppIcon.appiconset/original.png +0 -0
  83. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/Contents.json +0 -6
  84. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/preview.imageset/Contents.json +0 -23
  85. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/preview.imageset/original.png +0 -0
  86. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/preview.imageset//345/260/201/351/235/242 1.png +0 -0
  87. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/preview.imageset//345/260/201/351/235/242 2.png +0 -0
  88. package/src/app-project/work-space/1743699101363/proshake/Assets.xcassets/preview.imageset//345/260/201/351/235/242.png +0 -0
  89. package/src/app-project/work-space/1743699101363/proshake/Base.lproj/LaunchScreen.storyboard +0 -45
  90. package/src/app-project/work-space/1743699101363/proshake/Base.lproj/Main.storyboard +0 -45
  91. package/src/app-project/work-space/1743699101363/proshake/GlitterUI/index.html +0 -69
  92. package/src/app-project/work-space/1743699101363/proshake/GoogleService-Info.plist +0 -32
  93. package/src/app-project/work-space/1743699101363/proshake/Info.plist +0 -69
  94. package/src/app-project/work-space/1743699101363/proshake/SceneDelegate.swift +0 -70
  95. package/src/app-project/work-space/1743699101363/proshake/ViewController.swift +0 -68
  96. package/src/app-project/work-space/1743699101363/proshake/appstore.png +0 -0
  97. package/src/app-project/work-space/1743699101363/proshake/extension/ConversionJson.swift +0 -123
  98. package/src/app-project/work-space/1743699101363/proshake/extension/Public.swift +0 -679
  99. package/src/app-project/work-space/1743699101363/proshake/glitter-interface/BasicUtil.swift +0 -105
  100. package/src/app-project/work-space/1743699101363/proshake/glitter-interface/Ecommerce.swift +0 -138
  101. package/src/app-project/work-space/1743699101363/proshake/glitter-interface/GetInset.swift +0 -50
  102. package/src/app-project/work-space/1743699101363/proshake/glitter-interface/Notification.swift +0 -45
  103. package/src/app-project/work-space/1743699101363/proshake/playstore.png +0 -0
  104. package/src/app-project/work-space/1743699101363/proshake/proshake.entitlements +0 -8
  105. package/src/app-project/work-space/1743699101363/proshake/view-controler/MainView.swift +0 -15
  106. package/src/app-project/work-space/1743699101363/proshake/view-controler/MainView.xib +0 -35
  107. package/src/app-project/work-space/1743699101363/proshake/view-controler/SwiftUIView.swift +0 -18
  108. package/src/app-project/work-space/1743699101363/proshake.xcodeproj/project.pbxproj +0 -618
  109. package/src/app-project/work-space/1743699101363/proshake.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  110. package/src/app-project/work-space/1743699101363/proshake.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  111. package/src/app-project/work-space/1743699101363/proshake.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +0 -276
  112. package/src/app-project/work-space/1743699101363/proshake.xcodeproj/project.xcworkspace/xcuserdata/jianzhi.wang.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  113. package/src/app-project/work-space/1743699101363/proshake.xcodeproj/xcuserdata/jianzhi.wang.xcuserdatad/xcschemes/xcschememanagement.plist +0 -77
package/lowcode/Entry.js CHANGED
@@ -141,7 +141,7 @@ export class Entry {
141
141
  }
142
142
  window.renderClock = (_b = window.renderClock) !== null && _b !== void 0 ? _b : createClock();
143
143
  console.log(`Entry-time:`, window.renderClock.stop());
144
- glitter.share.editerVersion = 'V_19.9.8';
144
+ glitter.share.editerVersion = 'V_19.9.9';
145
145
  glitter.share.start = new Date();
146
146
  const vm = { appConfig: [] };
147
147
  window.saasConfig = {
package/lowcode/Entry.ts CHANGED
@@ -140,7 +140,7 @@ export class Entry {
140
140
  }
141
141
  (window as any).renderClock = (window as any).renderClock ?? createClock();
142
142
  console.log(`Entry-time:`, (window as any).renderClock.stop());
143
- glitter.share.editerVersion = 'V_19.9.8';
143
+ glitter.share.editerVersion = 'V_19.9.9';
144
144
  glitter.share.start = new Date();
145
145
  const vm = { appConfig: [] };
146
146
  (window as any).saasConfig = {
@@ -15,12 +15,17 @@ export class AppRelease {
15
15
  const saasConfig = window.parent.saasConfig;
16
16
  const cId = gvc.glitter.getUUID();
17
17
  const html = String.raw;
18
+ let toggle = [];
18
19
  let loading = true;
19
20
  let postMDRefer = {
20
21
  name: '',
21
22
  logo: '',
22
23
  status: 'no',
23
24
  landing_page: '',
25
+ ios_google_redirect_uri: '',
26
+ ios_google_client_id: '',
27
+ ios_app_bundle_id: '',
28
+ android_app_bundle_id: '',
24
29
  store_name: '',
25
30
  store_sub_title: '',
26
31
  promote_img: '',
@@ -115,10 +120,10 @@ export class AppRelease {
115
120
  return BgWidget.spinner();
116
121
  }
117
122
  return BgWidget.container([
118
- html `<div class="title-container">
119
- ${BgWidget.title(html `<div class="d-flex align-items-center" style="gap: 10px;">
120
- APP管理
121
- ${(() => {
123
+ html ` <div class="title-container">
124
+ ${BgWidget.title(html ` <div class="d-flex align-items-center" style="gap: 10px;">
125
+ APP管理
126
+ ${(() => {
122
127
  switch (postMDRefer.status) {
123
128
  case 'no':
124
129
  return ``;
@@ -130,8 +135,8 @@ export class AppRelease {
130
135
  return BgWidget.warningInsignia('審核中');
131
136
  }
132
137
  })()}
133
- </div>`)}
134
- </div>`,
138
+ </div>`)}
139
+ </div>`,
135
140
  `<div class="mx-2 mx-lg-0">${BgWidget.warningInsignia(`審核通過時間約莫在7-14天,請確實填寫所有內容,已加快審核進度`)}</div>`,
136
141
  BgWidget.card(gvc.bindView(() => {
137
142
  const id = gvc.glitter.getUUID();
@@ -147,17 +152,17 @@ export class AppRelease {
147
152
  });
148
153
  });
149
154
  return html `
150
- <div class="d-flex flex-column" style="gap:5px;">
151
- ${[
155
+ <div class="d-flex flex-column" style="gap:5px;">
156
+ ${[
152
157
  `<div class="tx_normal fs-5 fw-500">APP佈景主題</div>`,
153
158
  `<div class="tx_normal fs-sm fw-500 text-body" style="white-space: nowrap;">上次更新時間: ${gvc.glitter.ut.dateFormat(new Date(template.updated_time), 'MM-dd hh:mm')}</div>`,
154
159
  ``,
155
160
  ].join('')}
156
- </div>
157
- <div class="flex-fill"></div>
158
- <div class="d-flex w-100" style="gap:10px;">
159
- <div class="flex-fill"></div>
160
- ${[
161
+ </div>
162
+ <div class="flex-fill"></div>
163
+ <div class="d-flex w-100" style="gap:10px;">
164
+ <div class="flex-fill"></div>
165
+ ${[
161
166
  BgWidget.save(gvc.event(() => {
162
167
  window.parent.glitter.setUrlParameter('function', 'user-editor');
163
168
  window.parent.glitter.setUrlParameter('device', 'mobile');
@@ -165,19 +170,19 @@ export class AppRelease {
165
170
  window.parent.location.reload();
166
171
  }), '主題設計'),
167
172
  ].join('')}
168
- </div>
169
- `;
173
+ </div>
174
+ `;
170
175
  }),
171
176
  divCreate: {
172
177
  class: `d-flex flex-column flex-lg-row align-items-lg-center `,
173
- }
178
+ },
174
179
  };
175
180
  })),
176
181
  [
177
182
  {
178
183
  title: '品牌內容',
179
184
  editor: (() => {
180
- let postMD = JSON.parse(JSON.stringify(postMDRefer));
185
+ let postMD = postMDRefer;
181
186
  const dialog = new ShareDialog(gvc.glitter);
182
187
  const id = gvc.glitter.getUUID();
183
188
  const html = String.raw;
@@ -188,34 +193,38 @@ export class AppRelease {
188
193
  return [
189
194
  BgWidget.editeInput({
190
195
  gvc: gvc,
191
- title: html `<div class="d-flex flex-column" style="gap:3px;">
192
- App 名稱 ${BgWidget.grayNote('將展示於APP Logo下方,建議不要超過14個字元')}
193
- </div>`,
196
+ title: html ` <div class="d-flex flex-column" style="gap:3px;">
197
+ App 名稱 ${BgWidget.grayNote('將展示於APP Logo下方,建議不要超過14個字元')}
198
+ </div>`,
194
199
  default: postMD.name || '',
195
200
  placeHolder: '請輸入APP名稱',
196
- callback: (text) => {
201
+ callback: text => {
197
202
  postMD.name = text;
198
203
  },
199
204
  }),
200
- html `<div class="w-100">
201
- <div class="d-flex flex-column mb-2" style="gap:3px;">APP Logo ${BgWidget.grayNote('圖片上傳尺寸為1024 * 1024')}</div>
202
- ${BgWidget.imageSelector(gvc, postMD.logo, (text) => {
205
+ html ` <div class="w-100">
206
+ <div class="d-flex flex-column mb-2" style="gap:3px;">
207
+ APP Logo ${BgWidget.grayNote('圖片上傳尺寸為1024 * 1024')}
208
+ </div>
209
+ ${BgWidget.imageSelector(gvc, postMD.logo, text => {
203
210
  postMD.logo = text;
204
211
  gvc.notifyDataChange(id);
205
212
  })}
206
- </div>`,
207
- html `<div class="w-100">
208
- <div class="d-flex flex-column mb-2" style="gap:3px;">APP啟動畫面 ${BgWidget.grayNote('圖片上傳尺寸為1080 * 2400')}</div>
209
- ${BgWidget.imageSelector(gvc, postMD.landing_page, (text) => {
213
+ </div>`,
214
+ html ` <div class="w-100">
215
+ <div class="d-flex flex-column mb-2" style="gap:3px;">
216
+ APP啟動畫面 ${BgWidget.grayNote('圖片上傳尺寸為1080 * 2400')}
217
+ </div>
218
+ ${BgWidget.imageSelector(gvc, postMD.landing_page, text => {
210
219
  postMD.landing_page = text;
211
220
  gvc.notifyDataChange(id);
212
221
  })}
213
- </div>`,
222
+ </div>`,
214
223
  html ` <div class="w-100 d-flex align-items-center justify-content-end">
215
- ${BgWidget.save(gvc.event(() => {
216
- save(false, postMD, (result) => { });
224
+ ${BgWidget.save(gvc.event(() => {
225
+ save(false, postMD, result => { });
217
226
  }), '儲存')}
218
- </div>`,
227
+ </div>`,
219
228
  ].join(`<div class="my-3"></div>`);
220
229
  },
221
230
  divCreate: {
@@ -228,7 +237,7 @@ export class AppRelease {
228
237
  {
229
238
  title: '上架資訊',
230
239
  editor: (() => {
231
- let postMD = JSON.parse(JSON.stringify(postMDRefer));
240
+ let postMD = postMDRefer;
232
241
  const id = gvc.glitter.getUUID();
233
242
  return [
234
243
  gvc.bindView(() => {
@@ -238,113 +247,105 @@ export class AppRelease {
238
247
  return [
239
248
  BgWidget.editeInput({
240
249
  gvc: gvc,
241
- title: html `<div class="d-flex flex-column" style="gap:3px;">
242
- App 名稱 ${BgWidget.grayNote('顯示在 Apple Store 與 Google Play 商城上的APP名稱')}
243
- </div>`,
250
+ title: html ` <div class="d-flex flex-column" style="gap:3px;">
251
+ App 名稱 ${BgWidget.grayNote('顯示在 Apple Store 與 Google Play 商城上的APP名稱')}
252
+ </div>`,
244
253
  default: postMD.store_name || '',
245
254
  placeHolder: '請輸入APP名稱',
246
- callback: (text) => {
255
+ callback: text => {
247
256
  postMD.store_name = text;
248
257
  },
249
258
  }),
250
259
  BgWidget.editeInput({
251
260
  gvc: gvc,
252
- title: html `<div class="d-flex flex-column" style="gap:3px;">App 副標題 ${BgWidget.grayNote('請輸入APP副標題')}</div>`,
261
+ title: html ` <div class="d-flex flex-column" style="gap:3px;">
262
+ App 副標題 ${BgWidget.grayNote('請輸入APP副標題')}
263
+ </div>`,
253
264
  default: postMD.store_sub_title || '',
254
265
  placeHolder: '請輸入副標題',
255
- callback: (text) => {
266
+ callback: text => {
256
267
  postMD.store_sub_title = text;
257
268
  },
258
269
  }),
259
- html `<div class="w-100">
260
- <div class="d-flex flex-column mb-2" style="gap:3px;">應用程式商店宣傳圖片 ${BgWidget.grayNote('圖片上傳尺寸為1024 * 500')}</div>
261
- <div class="position-relative">
262
- ${BgWidget.imageSelector(gvc, postMD.promote_img, (text) => {
270
+ html ` <div class="w-100">
271
+ <div class="d-flex flex-column mb-2" style="gap:3px;">
272
+ 應用程式商店宣傳圖片 ${BgWidget.grayNote('圖片上傳尺寸為1024 * 500')}
273
+ </div>
274
+ <div class="position-relative">
275
+ ${BgWidget.imageSelector(gvc, postMD.promote_img, text => {
263
276
  postMD.promote_img = text;
264
277
  gvc.notifyDataChange(id);
265
278
  })}
266
- </div>
267
- </div>`,
268
- BgWidget.textArea({
269
- gvc: gvc,
270
- title: html `<div class="d-flex flex-column" style="gap:3px; ">
271
- Google Play 簡短說明
272
- ${BgWidget.grayNote('「App 的簡短說明」是使用者在 Play 商店瀏覽應用程式時首先看到的文字介紹,讓他們快速了解您的 App 特點。使用者可點擊展開以閱讀完整說明,深入了解更多細節。')}
273
- </div>`,
274
- default: postMD.google_play_promote || '',
275
- placeHolder: '請輸入説明內文',
276
- callback: (text) => {
277
- postMD.google_play_promote = text;
278
- },
279
- }),
279
+ </div>
280
+ </div>`,
280
281
  BgWidget.textArea({
281
282
  gvc: gvc,
282
- title: html `<div class="d-flex flex-column" style="gap:3px; ">
283
- APP Store 簡短說明
284
- ${BgWidget.grayNote('「App 的簡短說明」是使用者在 App Store 瀏覽應用程式詳情時首先看到的文字介紹,讓他們快速了解您的 App 核心功能。使用者可以點擊展開以閱讀完整說明,獲取更多資訊。')}
285
- </div>`,
283
+ title: html ` <div class="d-flex flex-column" style="gap:3px; ">
284
+ APP簡短說明
285
+ ${BgWidget.grayNote('「App 的簡短說明」是使用者在 App Store 與 Google Play 瀏覽應用程式詳情時首先看到的文字介紹,讓他們快速了解您的 App 核心功能。使用者可以點擊展開以閱讀完整說明,獲取更多資訊。')}
286
+ </div>`,
286
287
  default: postMD.app_store_promote || '',
287
288
  placeHolder: '請輸入説明內文',
288
- callback: (text) => {
289
+ callback: text => {
289
290
  postMD.app_store_promote = text;
290
291
  },
291
292
  }),
292
293
  BgWidget.textArea({
293
294
  gvc: gvc,
294
- title: html `<div class="d-flex flex-column" style="gap:3px; ">
295
- 描述
296
- ${BgWidget.grayNote('此段描述將用來詳細介紹 App 的特性和功能,幫助使用者更好地了解您的應用程式提供的價值。請確保內容為純文字格式,無法支援 HTML 標籤或格式化功能。')}
297
- </div>`,
295
+ title: html ` <div class="d-flex flex-column" style="gap:3px; ">
296
+ 描述
297
+ ${BgWidget.grayNote('此段描述將用來詳細介紹 App 的特性和功能,幫助使用者更好地了解您的應用程式提供的價值。請確保內容為純文字格式,無法支援 HTML 標籤或格式化功能。')}
298
+ </div>`,
298
299
  default: postMD.description || '',
299
300
  placeHolder: '請輸入描述',
300
- callback: (text) => {
301
+ callback: text => {
301
302
  postMD.description = text;
302
303
  },
303
304
  }),
304
305
  BgWidget.editeInput({
305
306
  gvc: gvc,
306
- title: html `<div class="d-flex flex-column" style="gap:3px;">
307
- 版權標示
308
- ${BgWidget.grayNote('請提供擁有 App 專有權的個人或公司名稱,格式為獲得專有權的年份加上名稱(例如:“2024 SHOPNEX, Inc.”)。版權符號將會自動添加。')}
309
- </div>`,
307
+ title: html ` <div class="d-flex flex-column" style="gap:3px;">
308
+ 版權標示
309
+ ${BgWidget.grayNote('請提供擁有 App 專有權的個人或公司名稱,格式為獲得專有權的年份加上名稱(例如:“2024 SHOPNEX, Inc.”)。版權符號將會自動添加。')}
310
+ </div>`,
310
311
  default: postMD.copy_right || '',
311
312
  placeHolder: '版權內容',
312
- callback: (text) => {
313
+ callback: text => {
313
314
  postMD.copy_right = text;
314
315
  },
315
316
  }),
316
317
  BgWidget.editeInput({
317
318
  gvc: gvc,
318
- title: html `<div class="d-flex flex-column" style="gap:3px;">
319
- 應用程式搜尋關鍵詞
320
- ${BgWidget.grayNote('請輸入描述 App 的一個或多個關鍵詞(每個關鍵詞至少包含兩個字符),並以逗號分隔。應注意,App 名稱和公司名稱已可被應用程式商店搜尋,因此無需在關鍵字中重複新增。此外,請避免使用其他 App 或公司的名稱。')}
321
- </div>`,
319
+ title: html ` <div class="d-flex flex-column" style="gap:3px;">
320
+ 應用程式搜尋關鍵詞
321
+ ${BgWidget.grayNote('請輸入描述 App 的一個或多個關鍵詞(每個關鍵詞至少包含兩個字符),並以逗號分隔。應注意,App 名稱和公司名稱已可被應用程式商店搜尋,因此無需在關鍵字中重複新增。此外,請避免使用其他 App 或公司的名稱。')}
322
+ </div>`,
322
323
  default: postMD.keywords || '',
323
324
  placeHolder: '請輸入關鍵詞',
324
- callback: (text) => {
325
+ callback: text => {
325
326
  postMD.keywords = text;
326
327
  },
327
328
  }),
328
329
  BgWidget.editeInput({
329
330
  gvc: gvc,
330
- title: html `<div class="d-flex flex-column" style="gap:3px;">
331
- App 支援網址(URL)
332
- ${BgWidget.grayNote('如有疑問,用戶可透過提供的支援網站獲取幫助。該網站應包含真實聯絡資訊,方便用戶就 App 的問題、使用回饋或功能優化提出建議。請提供包含協議的完整網址(例如:http://support.shopnex.tw)。此支援網址將顯示給已購買此 App 的用戶,並僅在 App Store 中顯示。')}
333
- </div>`,
331
+ title: html ` <div class="d-flex flex-column" style="gap:3px;">
332
+ App 支援網址(URL)
333
+ ${BgWidget.grayNote('如有疑問,用戶可透過提供的支援網站獲取幫助。該網站應包含真實聯絡資訊,方便用戶就 App 的問題、使用回饋或功能優化提出建議。請提供包含協議的完整網址(例如:http://support.shopnex.tw)。此支援網址將顯示給已下載此 App 的用戶,並僅在 商店 中顯示。')}
334
+ </div>`,
334
335
  default: postMD.support_url || '',
335
336
  placeHolder: '請輸入網址',
336
- callback: (text) => {
337
+ callback: text => {
337
338
  postMD.support_url = text;
338
339
  },
339
340
  }),
340
341
  BgWidget.editeInput({
341
342
  gvc: gvc,
342
- title: html `<div class="d-flex flex-column" style="gap:3px;">
343
- 隱私政策網址(URL) ${BgWidget.grayNote('連結到你公司隱私政策的網址(URL)')}
344
- </div>`,
343
+ title: html ` <div class="d-flex flex-column" style="gap:3px;">
344
+ 隱私政策網址(URL) ${BgWidget.grayNote('連結到你公司隱私政策的網址(URL)')}
345
+ </div>`,
345
346
  default: postMD.privacy_url || '',
346
347
  placeHolder: '請輸入網址',
347
- callback: (text) => {
348
+ callback: text => {
348
349
  postMD.privacy_url = text;
349
350
  },
350
351
  }),
@@ -355,18 +356,78 @@ export class AppRelease {
355
356
  },
356
357
  };
357
358
  }),
358
- html `<div class="mt-3 w-100 d-flex align-items-center justify-content-end">
359
- ${BgWidget.save(gvc.event(() => {
360
- save(false, postMD, (result) => { });
359
+ html ` <div class="mt-3 w-100 d-flex align-items-center justify-content-end">
360
+ ${BgWidget.save(gvc.event(() => {
361
+ save(false, postMD, result => { });
362
+ }), '儲存')}
363
+ </div>`,
364
+ ].join(``);
365
+ })(),
366
+ },
367
+ {
368
+ title: 'IOS應用設定',
369
+ editor: (() => {
370
+ let postMD = postMDRefer;
371
+ const id = gvc.glitter.getUUID();
372
+ return [
373
+ gvc.bindView(() => {
374
+ return {
375
+ bind: id,
376
+ view: () => {
377
+ return [
378
+ BgWidget.editeInput({
379
+ gvc: gvc,
380
+ title: html ` <div class="d-flex flex-column" style="gap:3px;">
381
+ App 專案包名 ${BgWidget.grayNote('為空則預設為網域路徑')}
382
+ </div>`,
383
+ default: postMD.ios_app_bundle_id || '',
384
+ placeHolder: `${window.parent.glitter.share.editorViewModel.domain}`,
385
+ callback: text => {
386
+ postMD.ios_app_bundle_id = text;
387
+ gvc.notifyDataChange(id);
388
+ },
389
+ }),
390
+ `<div
391
+ onclick="${gvc.event(() => {
392
+ const dialog = new ShareDialog(gvc.glitter);
393
+ navigator.clipboard.writeText(postMD.ios_app_bundle_id ||
394
+ window.parent.glitter.share.editorViewModel
395
+ .domain);
396
+ dialog.successMessage({ text: '已複製至剪貼簿' });
397
+ })}"
398
+ >
399
+ ${BgWidget.editeInput({
400
+ readonly: true,
401
+ gvc: gvc,
402
+ title: html ` <div class="d-flex flex-column" style="gap:5px;">
403
+ LINE登入
404
+ ${BgWidget.grayNote('點擊複製專案ID至LINE開發者後台的『 iOS bundle ID 』欄位')}
405
+ </div>`,
406
+ default: postMD.ios_app_bundle_id ||
407
+ window.parent.glitter.share.editorViewModel.domain,
408
+ placeHolder: '',
409
+ callback: text => { },
410
+ })}
411
+ </div>`,
412
+ ].join(`<div class="my-3"></div>`);
413
+ },
414
+ divCreate: {
415
+ class: ``,
416
+ },
417
+ };
418
+ }),
419
+ html ` <div class="mt-3 w-100 d-flex align-items-center justify-content-end">
420
+ ${BgWidget.save(gvc.event(() => {
421
+ save(false, postMD, result => { });
361
422
  }), '儲存')}
362
- </div>`,
423
+ </div>`,
363
424
  ].join(``);
364
425
  })(),
365
426
  },
366
427
  {
367
428
  title: '聯絡資訊',
368
429
  editor: (() => {
369
- let postMD = JSON.parse(JSON.stringify(postMDRefer));
430
+ let postMD = postMDRefer;
370
431
  const dialog = new ShareDialog(gvc.glitter);
371
432
  const id = gvc.glitter.getUUID();
372
433
  return [
@@ -377,10 +438,12 @@ export class AppRelease {
377
438
  return [
378
439
  BgWidget.editeInput({
379
440
  gvc: gvc,
380
- title: html `<div class="d-flex flex-column" style="gap:3px;">聯絡信箱 ${BgWidget.grayNote('承辦人員會透過此信箱與您聯絡')}</div>`,
441
+ title: html ` <div class="d-flex flex-column" style="gap:3px;">
442
+ 聯絡信箱 ${BgWidget.grayNote('承辦人員會透過此信箱與您聯絡')}
443
+ </div>`,
381
444
  default: postMD.contact_email || '',
382
445
  placeHolder: '請輸入信箱',
383
- callback: (text) => {
446
+ callback: text => {
384
447
  function isValidEmail(email) {
385
448
  const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
386
449
  return emailPattern.test(email);
@@ -396,10 +459,12 @@ export class AppRelease {
396
459
  }),
397
460
  BgWidget.editeInput({
398
461
  gvc: gvc,
399
- title: html `<div class="d-flex flex-column" style="gap:3px;">聯絡電話 ${BgWidget.grayNote('承辦人員會透過此電話與您聯絡')}</div>`,
462
+ title: html ` <div class="d-flex flex-column" style="gap:3px;">
463
+ 聯絡電話 ${BgWidget.grayNote('承辦人員會透過此電話與您聯絡')}
464
+ </div>`,
400
465
  default: postMD.contact_phone || '',
401
466
  placeHolder: '請輸入電話',
402
- callback: (text) => {
467
+ callback: text => {
403
468
  function isValidUSPhoneNumber(phoneNumber) {
404
469
  const phonePattern = /^(\+1-?)?(\d{3})?-?\d{3}-?\d{4}$/;
405
470
  return phonePattern.test(phoneNumber);
@@ -420,28 +485,77 @@ export class AppRelease {
420
485
  },
421
486
  };
422
487
  }),
423
- html `<div class="mt-3 w-100 d-flex align-items-center justify-content-end">
424
- ${BgWidget.save(gvc.event(() => {
425
- save(false, postMD, (result) => { });
488
+ html ` <div class="mt-3 w-100 d-flex align-items-center justify-content-end">
489
+ ${BgWidget.save(gvc.event(() => {
490
+ save(false, postMD, result => { });
426
491
  }), '儲存')}
427
- </div>`,
492
+ </div>`,
428
493
  ].join('');
429
494
  })(),
430
495
  },
431
496
  ]
432
- .map((dd) => {
433
- return BgWidget.card(html `<div class="d-flex flex-column">
434
- ${BgWidget.title(dd.title, 'font-size:20px;')}
435
- <div class="flex-fill"></div>
436
- <div class="my-3">${dd.editor}</div>
437
- </div>`);
497
+ .map(dd => {
498
+ if (toggle.find(d1 => {
499
+ return d1 === dd.title;
500
+ })) {
501
+ return BgWidget.card(html ` <div class="d-flex flex-column">
502
+ <div
503
+ class="d-flex w-100 align-items-center"
504
+ style="cursor: pointer;"
505
+ onclick="${gvc.event(() => {
506
+ if (toggle.find(d1 => {
507
+ return d1 === dd.title;
508
+ })) {
509
+ toggle = toggle.filter(d1 => {
510
+ return d1 !== dd.title;
511
+ });
512
+ }
513
+ else {
514
+ toggle.push(dd.title);
515
+ }
516
+ gvc.notifyDataChange(cId);
517
+ })}"
518
+ >
519
+ ${BgWidget.title(dd.title, 'font-size:20px;')}
520
+ <div class="flex-fill"></div>
521
+ <div class="d-flex flex-column align-items-center justify-content-center" style="">
522
+ <i class="fa-solid fa-caret-up fw-bold fs-2"></i>
523
+ <div class="fw-bold" style="font-size: 14px;margin-top: -5px;">收合</div>
524
+ </div>
525
+ </div>
526
+ <div class="flex-fill"></div>
527
+ <div class="my-3">${dd.editor}</div>
528
+ </div>`);
529
+ }
530
+ else {
531
+ return BgWidget.card(` <div class="d-flex w-100 align-items-center" style="cursor: pointer;" onclick="${gvc.event(() => {
532
+ if (toggle.find(d1 => {
533
+ return d1 === dd.title;
534
+ })) {
535
+ toggle = toggle.filter(d1 => {
536
+ return d1 !== dd.title;
537
+ });
538
+ }
539
+ else {
540
+ toggle.push(dd.title);
541
+ }
542
+ gvc.notifyDataChange(cId);
543
+ })}">
544
+ ${BgWidget.title(dd.title, 'font-size:20px;')}
545
+ <div class="flex-fill"></div>
546
+ <div class="d-flex flex-column align-items-center justify-content-center" style="" >
547
+ <i class="fa-solid fa-caret-down fw-bold fs-2"></i>
548
+ <div class="fw-bold" style="font-size: 14px;margin-top: -5px;">展開</div>
549
+ </div>
550
+ </div>`);
551
+ }
438
552
  })
439
553
  .join(BgWidget.mbContainer(24)),
440
- html `<div class="update-bar-container">
441
- ${BgWidget.save(gvc.event(() => {
554
+ html ` <div class="update-bar-container">
555
+ ${BgWidget.save(gvc.event(() => {
442
556
  save(true, postMDRefer, () => { });
443
557
  }), '將APP提交審查')}
444
- </div>`,
558
+ </div>`,
445
559
  BgWidget.mbContainer(120),
446
560
  ].join(`<div class="my-3"></div>`));
447
561
  },