ts-glitter 21.4.0 → 21.4.2

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 (97) hide show
  1. package/lowcode/Entry.js +18 -1
  2. package/lowcode/Entry.ts +19 -1
  3. package/lowcode/api/pageConfig.js +29 -10
  4. package/lowcode/api/pageConfig.ts +43 -11
  5. package/lowcode/backend-manager/bg-blog.js +5 -0
  6. package/lowcode/backend-manager/bg-blog.ts +5 -0
  7. package/lowcode/cms-plugin/menus-setting.js +15 -6
  8. package/lowcode/cms-plugin/menus-setting.ts +23 -6
  9. package/lowcode/cms-plugin/module/user-excel.js +11 -5
  10. package/lowcode/cms-plugin/module/user-excel.ts +11 -5
  11. package/lowcode/cms-plugin/shopping-discount-setting.js +236 -234
  12. package/lowcode/cms-plugin/shopping-discount-setting.ts +137 -134
  13. package/lowcode/cms-plugin/third-party-line.js +34 -0
  14. package/lowcode/cms-plugin/third-party-line.ts +34 -0
  15. package/lowcode/editor-components/global-editor.js +60 -0
  16. package/lowcode/editor-components/global-editor.ts +65 -0
  17. package/lowcode/editor-components/global-widget/bridge.js +40 -34
  18. package/lowcode/editor-components/global-widget/bridge.ts +42 -34
  19. package/lowcode/glitterBundle/html-component/global-widget.js +265 -170
  20. package/lowcode/glitterBundle/html-component/global-widget.ts +264 -159
  21. package/lowcode/index.html +1 -1
  22. package/lowcode/jspage/function-page/tool-setting.js +9 -1
  23. package/lowcode/jspage/function-page/tool-setting.ts +9 -1
  24. package/lowcode/jspage/main.js +78 -16
  25. package/lowcode/jspage/main.ts +108 -22
  26. package/lowcode/official_view_component/official/component.js +17 -10
  27. package/lowcode/official_view_component/official/component.ts +38 -27
  28. package/lowcode/public-components/blogs/blogs-01.js +200 -140
  29. package/lowcode/public-components/blogs/blogs-01.ts +232 -145
  30. package/lowcode/public-components/checkout/index.js +1 -1
  31. package/lowcode/public-components/checkout/index.ts +1 -1
  32. package/lowcode/public-components/headers/head-initial.ts +1 -1
  33. package/lowcode/public-components/headers/sy-02.js +1 -0
  34. package/lowcode/public-components/headers/sy-02.ts +1 -0
  35. package/lowcode/public-components/headers/sy-03.js +1 -0
  36. package/lowcode/public-components/headers/sy-03.ts +1 -0
  37. package/lowcode/public-components/headers/sy-04.js +1 -0
  38. package/lowcode/public-components/headers/sy-04.ts +1 -0
  39. package/lowcode/public-components/headers/sy-05.js +1 -0
  40. package/lowcode/public-components/headers/sy-05.ts +1 -0
  41. package/lowcode/public-components/product/product-detail.js +2 -2
  42. package/lowcode/public-components/product/product-detail.ts +4 -4
  43. package/lowcode/public-components/terms-related/index.ts +1 -0
  44. package/lowcode/public-components/user-manager/um-login.js +7 -1
  45. package/lowcode/public-components/user-manager/um-login.ts +8 -1
  46. package/package.json +1 -1
  47. package/src/api-public/models/glitter-finance.js +1 -2
  48. package/src/api-public/models/glitter-finance.js.map +1 -1
  49. package/src/api-public/services/checkout-event.js +1 -0
  50. package/src/api-public/services/checkout-event.js.map +1 -1
  51. package/src/api-public/services/checkout-event.ts +1 -0
  52. package/src/api-public/services/ezpay/tool.d.ts +0 -1
  53. package/src/api-public/services/user.js +7 -3
  54. package/src/api-public/services/user.js.map +1 -1
  55. package/src/api-public/services/user.ts +6 -3
  56. package/src/app-project/serverless/src/modules/database.d.ts +1 -1
  57. package/src/app-project/serverless/src/modules/redis.d.ts +1 -1
  58. package/src/controllers/template.js +2 -2
  59. package/src/controllers/template.js.map +1 -1
  60. package/src/controllers/template.ts +5 -2
  61. package/src/firebase/message.js +1 -2
  62. package/src/firebase/message.js.map +1 -1
  63. package/src/helper/app_creater.js +1 -2
  64. package/src/helper/app_creater.js.map +1 -1
  65. package/src/helper/glitter-util.d.ts +0 -1
  66. package/src/index.js +1 -1
  67. package/src/index.js.map +1 -1
  68. package/src/index.ts +1 -1
  69. package/src/lambda/interface.js +2 -2
  70. package/src/lambda/interface.js.map +1 -1
  71. package/src/modules/database.d.ts +1 -1
  72. package/src/run.js +1 -2
  73. package/src/run.js.map +1 -1
  74. package/src/seo-config.d.ts +1 -1
  75. package/src/seo-config.js +13 -12
  76. package/src/seo-config.js.map +1 -1
  77. package/src/seo-config.ts +18 -12
  78. package/src/services/app.d.ts +2 -1
  79. package/src/services/app.js +4 -2
  80. package/src/services/app.js.map +1 -1
  81. package/src/services/app.ts +5 -2
  82. package/src/services/backend-service.js +7 -17
  83. package/src/services/backend-service.js.map +1 -1
  84. package/src/services/saas-table-check.js +2 -2
  85. package/src/services/saas-table-check.js.map +1 -1
  86. package/src/services/seo.d.ts +2 -1
  87. package/src/services/seo.js +7 -4
  88. package/src/services/seo.js.map +1 -1
  89. package/src/services/seo.ts +7 -4
  90. package/src/services/ses.js +1 -2
  91. package/src/services/ses.js.map +1 -1
  92. package/src/services/template.d.ts +3 -1
  93. package/src/services/template.js +55 -34
  94. package/src/services/template.js.map +1 -1
  95. package/src/services/template.ts +68 -35
  96. package/nxv0ptv53w.json +0 -1
  97. package/omr85cp878.json +0 -1
package/lowcode/Entry.js CHANGED
@@ -127,6 +127,23 @@ export class Entry {
127
127
  if (glitter.getUrlParameter('page') !== 'backend_manager') {
128
128
  Entry.checkRedirectPage(glitter);
129
129
  }
130
+ if (['pages/', 'hidden/', 'shop/'].find((dd) => {
131
+ return (glitter.getUrlParameter('page') || '').startsWith(dd) || ((glitter.getUrlParameter('page_refer') || '').startsWith(dd));
132
+ })) {
133
+ const og_path = glitter.getUrlParameter('page_refer') || glitter.getUrlParameter('page');
134
+ window.page_refer = og_path;
135
+ setInterval(() => {
136
+ if (glitter.getUrlParameter('page') === 'index') {
137
+ glitter.href = '/' + og_path;
138
+ }
139
+ else if (glitter.getUrlParameter('page') !== og_path) {
140
+ glitter.setUrlParameter('page_refer', og_path);
141
+ }
142
+ else {
143
+ glitter.setUrlParameter('page_refer', undefined);
144
+ }
145
+ }, 100);
146
+ }
130
147
  glitter.share.logID = glitter.getUUID();
131
148
  glitter.addStyle(`
132
149
  @media (prefers-reduced-motion: no-preference) {
@@ -146,7 +163,7 @@ export class Entry {
146
163
  }
147
164
  window.renderClock = (_b = window.renderClock) !== null && _b !== void 0 ? _b : createClock();
148
165
  console.log(`Entry-time:`, window.renderClock.stop());
149
- glitter.share.editerVersion = 'V_21.4.0';
166
+ glitter.share.editerVersion = 'V_21.4.2';
150
167
  glitter.share.start = new Date();
151
168
  const vm = { appConfig: [] };
152
169
  window.saasConfig = {
package/lowcode/Entry.ts CHANGED
@@ -131,6 +131,24 @@ export class Entry {
131
131
  if (glitter.getUrlParameter('page') !== 'backend_manager') {
132
132
  Entry.checkRedirectPage(glitter);
133
133
  }
134
+
135
+ //紀錄初始載入頁面,後續會帶入query當中用與替換Header避免跳頁
136
+ if(['pages/','hidden/','shop/'].find((dd)=>{
137
+ return (glitter.getUrlParameter('page') || '').startsWith(dd) || ((glitter.getUrlParameter('page_refer') || '').startsWith(dd))
138
+ })){
139
+ const og_path=glitter.getUrlParameter('page_refer') || glitter.getUrlParameter('page');
140
+ (window as any).page_refer=og_path;
141
+
142
+ setInterval(()=>{
143
+ if(glitter.getUrlParameter('page')==='index'){
144
+ glitter.href='/'+og_path
145
+ }else if(glitter.getUrlParameter('page')!==og_path){
146
+ glitter.setUrlParameter('page_refer',og_path)
147
+ }else{
148
+ glitter.setUrlParameter('page_refer',undefined)
149
+ }
150
+ },100)
151
+ }
134
152
  glitter.share.logID = glitter.getUUID();
135
153
  glitter.addStyle(`
136
154
  @media (prefers-reduced-motion: no-preference) {
@@ -150,7 +168,7 @@ export class Entry {
150
168
  }
151
169
  (window as any).renderClock = (window as any).renderClock ?? createClock();
152
170
  console.log(`Entry-time:`, (window as any).renderClock.stop());
153
- glitter.share.editerVersion = 'V_21.4.0';
171
+ glitter.share.editerVersion = 'V_21.4.2';
154
172
  glitter.share.start = new Date();
155
173
  const vm = { appConfig: [] };
156
174
  (window as any).saasConfig = {
@@ -11,6 +11,7 @@ import { config } from "../config.js";
11
11
  import { BaseApi } from "../glitterBundle/api/base.js";
12
12
  import { GlobalUser } from "../glitter-base/global/global-user.js";
13
13
  import { ShareDialog } from "../glitterBundle/dialog/ShareDialog.js";
14
+ import { ApiUser } from '../glitter-base/route/user.js';
14
15
  export class ApiPageConfig {
15
16
  constructor() {
16
17
  }
@@ -114,6 +115,7 @@ export class ApiPageConfig {
114
115
  (request.page_type) && (query.push(`page_type=${request.page_type}`));
115
116
  (request.me) && (query.push(`me=${request.me}`));
116
117
  (request.favorite) && (query.push(`favorite=${request.favorite}`));
118
+ window.page_refer && query.push(`page_refer=${window.page_refer}`);
117
119
  return query.join('&');
118
120
  })(),
119
121
  "type": "GET",
@@ -163,16 +165,33 @@ export class ApiPageConfig {
163
165
  });
164
166
  }
165
167
  static setPage(data) {
166
- return BaseApi.create({
167
- "url": config.url + `/api/v1/template`,
168
- "type": "PUT",
169
- "timeout": 0,
170
- "headers": {
171
- "Content-Type": "application/json",
172
- "Authorization": config.token
173
- },
174
- data: JSON.stringify(data)
175
- });
168
+ if (data.tag === 'c_header' && ['pages/', 'hidden/', 'shop/'].find((dd) => {
169
+ return window.parent.glitter.getUrlParameter('page').startsWith(dd);
170
+ })) {
171
+ return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
172
+ data.config[0].is_customer_header = true;
173
+ yield ApiUser.setPublicConfig({
174
+ key: 'c_header_' + window.parent.glitter.getUrlParameter('page'),
175
+ value: data.config,
176
+ user_id: 'manager',
177
+ });
178
+ resolve({
179
+ result: true
180
+ });
181
+ }));
182
+ }
183
+ else {
184
+ return BaseApi.create({
185
+ "url": config.url + `/api/v1/template`,
186
+ "type": "PUT",
187
+ "timeout": 0,
188
+ "headers": {
189
+ "Content-Type": "application/json",
190
+ "Authorization": config.token
191
+ },
192
+ data: JSON.stringify(data)
193
+ });
194
+ }
176
195
  }
177
196
  static addPage(data) {
178
197
  return BaseApi.create({
@@ -3,6 +3,7 @@ import {BaseApi} from "../glitterBundle/api/base.js";
3
3
  import {GlobalUser} from "../glitter-base/global/global-user.js";
4
4
  import {EditorElem} from "../glitterBundle/plugins/editor-elem";
5
5
  import {ShareDialog} from "../glitterBundle/dialog/ShareDialog.js";
6
+ import { ApiUser } from '../glitter-base/route/user.js';
6
7
 
7
8
 
8
9
  export class ApiPageConfig {
@@ -123,7 +124,8 @@ export class ApiPageConfig {
123
124
  (request.type) && (query.push(`type=${request.type}`));
124
125
  (request.page_type) && (query.push(`page_type=${request.page_type}`));
125
126
  (request.me) && (query.push(`me=${request.me}`));
126
- (request.favorite) && (query.push(`favorite=${request.favorite}`))
127
+ (request.favorite) && (query.push(`favorite=${request.favorite}`));
128
+ (window as any).page_refer && query.push(`page_refer=${(window as any).page_refer}`);
127
129
  return query.join('&')
128
130
  })()
129
131
  ,
@@ -191,7 +193,7 @@ export class ApiPageConfig {
191
193
  public static setPage(data: {
192
194
  "id": number
193
195
  "appName": "lionDesign",
194
- "tag": "home",
196
+ "tag"?: any,
195
197
  "group"?: "首頁相關",
196
198
  "name"?: "首頁",
197
199
  "config"?: [],
@@ -199,17 +201,47 @@ export class ApiPageConfig {
199
201
  "page_type"?: string,
200
202
  favorite?: number,
201
203
  preview_image?: string
202
- }) {
204
+ }):Promise<{
205
+ result: boolean
206
+ }> {
207
+
208
+ if(data.tag==='c_header' && ['pages/','hidden/','shop/'].find((dd)=>{
209
+ return (window.parent as any).glitter.getUrlParameter('page').startsWith(dd)
210
+ })){
211
+ return new Promise(async (resolve,reject)=>{
212
+ (data.config as any)[0].is_customer_header=true
213
+ await ApiUser.setPublicConfig({
214
+ key: 'c_header_'+(window.parent as any).glitter.getUrlParameter('page'),
215
+ value: data.config,
216
+ user_id: 'manager',
217
+ })
218
+ resolve({
219
+ result: true
220
+ })
221
+ })
222
+ // return BaseApi.create({
223
+ // "url": config.url + `/api/v1/template`,
224
+ // "type": "PUT",
225
+ // "timeout": 0,
226
+ // "headers": {
227
+ // "Content-Type": "application/json",
228
+ // "Authorization": config.token
229
+ // },
230
+ // data: JSON.stringify(data)
231
+ // })
232
+ }else{
203
233
  return BaseApi.create({
204
- "url": config.url + `/api/v1/template`,
205
- "type": "PUT",
206
- "timeout": 0,
207
- "headers": {
208
- "Content-Type": "application/json",
209
- "Authorization": config.token
210
- },
211
- data: JSON.stringify(data)
234
+ "url": config.url + `/api/v1/template`,
235
+ "type": "PUT",
236
+ "timeout": 0,
237
+ "headers": {
238
+ "Content-Type": "application/json",
239
+ "Authorization": config.token
240
+ },
241
+ data: JSON.stringify(data)
212
242
  })
243
+ }
244
+
213
245
  }
214
246
 
215
247
  public static addPage(data: {
@@ -1132,6 +1132,11 @@ function detail(gvc, cf, vm, cVm, page_tab) {
1132
1132
  }, 400);
1133
1133
  function checkSwitchToUiEditor() {
1134
1134
  function next() {
1135
+ Object.keys(window.glitterInitialHelper.share).map((dd) => {
1136
+ if (dd.startsWith('getPageData-')) {
1137
+ window.glitterInitialHelper.share[dd] = undefined;
1138
+ }
1139
+ });
1135
1140
  localStorage.setItem('preview_data', JSON.stringify(vm.data.content));
1136
1141
  window.parent.glitter.setUrlParameter('page-id', vm.data.id);
1137
1142
  window.parent.glitter.setUrlParameter('language', language);
@@ -1266,6 +1266,11 @@ function detail(gvc: GVC, cf: any, vm: any, cVm: any, page_tab: 'page' | 'hidden
1266
1266
 
1267
1267
  function checkSwitchToUiEditor() {
1268
1268
  function next() {
1269
+ Object.keys((window as any).glitterInitialHelper.share).map((dd)=>{
1270
+ if(dd.startsWith('getPageData-')){
1271
+ (window as any).glitterInitialHelper.share[dd]=undefined
1272
+ }
1273
+ })
1269
1274
  localStorage.setItem('preview_data', JSON.stringify(vm.data.content));
1270
1275
  (window.parent as any).glitter.setUrlParameter('page-id', vm.data.id);
1271
1276
  (window.parent as any).glitter.setUrlParameter('language', language);
@@ -12,6 +12,7 @@ export class MenusSetting {
12
12
  index: 0,
13
13
  dataList: undefined,
14
14
  query: '',
15
+ tab: 'menu'
15
16
  };
16
17
  const filterID = gvc.glitter.getUUID();
17
18
  let vmi = undefined;
@@ -46,12 +47,20 @@ export class MenusSetting {
46
47
  }))
47
48
  : ''}
48
49
  </div>
50
+ ${BgWidget.tab([
51
+ { title: '主選單', key: 'menu' },
52
+ { title: '頁腳', key: 'footer' }
53
+ ], gvc, vm.tab, (text) => {
54
+ vm.tab = text;
55
+ gvc.notifyDataChange(id);
56
+ }, `margin-bottom:0px !important;`)}
49
57
  ${BgWidget.container(BgWidget.mainCard(BgWidget.tableV3({
50
58
  gvc: gvc,
51
59
  getData: vmi => {
52
60
  vm.dataList = [
53
- { tag: 'menu-setting', title: '主選單' },
54
- { tag: 'footer-setting', title: '頁腳' },
61
+ { tag: vm.tab === 'menu' ? 'menu-setting' : 'footer-setting', title: `
62
+ <div> ${vm.tab === 'menu' ? `頁首選單` : `頁腳選單`} <span style="font-size:12px;color:#36B;">系統預設</span></div>
63
+ ` }
55
64
  ];
56
65
  vmi.pageSize = 1;
57
66
  vmi.originalData = vm.dataList;
@@ -90,8 +99,8 @@ export class MenusSetting {
90
99
  }
91
100
  },
92
101
  divCreate: {
93
- class: `mx-auto `,
94
- style: `max-width:100%;width:960px;`,
102
+ class: `w-100 `,
103
+ style: `max-width:100%;`,
95
104
  },
96
105
  };
97
106
  });
@@ -187,7 +196,7 @@ export class MenusSetting {
187
196
  view: () => {
188
197
  var _a;
189
198
  const link = vm.link[vm.language];
190
- return html `<div class="title-container" style="width: 856px; max-width: 100%;">
199
+ return html `<div class="title-container" style="width: 100%; max-width: 100%;">
191
200
  ${BgWidget.goBack(cf.gvc.event(() => {
192
201
  cf.goBack();
193
202
  }))}${BgWidget.title((_a = cf.title) !== null && _a !== void 0 ? _a : '選單設定')}
@@ -202,7 +211,7 @@ export class MenusSetting {
202
211
  })}
203
212
  </div>
204
213
  ${BgWidget.container(html `<div
205
- 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"
214
+ style="max-width:100%;width: 100%; 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"
206
215
  >
207
216
  <div style="width: 100%; position: relative">
208
217
  <div
@@ -23,11 +23,13 @@ export class MenusSetting {
23
23
  index: number;
24
24
  dataList: any;
25
25
  query?: string;
26
+ tab:'menu'|'footer'
26
27
  } = {
27
28
  type: 'list',
28
29
  index: 0,
29
30
  dataList: undefined,
30
31
  query: '',
32
+ tab:'menu'
31
33
  };
32
34
  const filterID = gvc.glitter.getUUID();
33
35
  let vmi: any = undefined;
@@ -48,6 +50,7 @@ export class MenusSetting {
48
50
  function refresh() {
49
51
  gvc.notifyDataChange(id);
50
52
  }
53
+
51
54
  return {
52
55
  bind: id,
53
56
  dataList: [{ obj: vm, key: 'type' }],
@@ -67,14 +70,28 @@ export class MenusSetting {
67
70
  )
68
71
  : ''}
69
72
  </div>
73
+ ${BgWidget.tab(
74
+ [
75
+ { title: '主選單', key: 'menu' },
76
+ { title: '頁腳', key: 'footer' }
77
+ ],
78
+ gvc,
79
+ vm.tab,
80
+ (text) => {
81
+ vm.tab=text as any
82
+ gvc.notifyDataChange(id);
83
+ },
84
+ `margin-bottom:0px !important;`
85
+ )}
70
86
  ${BgWidget.container(
71
87
  BgWidget.mainCard(
72
88
  BgWidget.tableV3({
73
89
  gvc: gvc,
74
90
  getData: vmi => {
75
91
  vm.dataList = [
76
- { tag: 'menu-setting', title: '主選單' },
77
- { tag: 'footer-setting', title: '頁腳' },
92
+ { tag: vm.tab==='menu' ? 'menu-setting':'footer-setting', title: `
93
+ <div> ${vm.tab==='menu' ? `頁首選單`:`頁腳選單`} <span style="font-size:12px;color:#36B;">系統預設</span></div>
94
+ ` }
78
95
  ];
79
96
  vmi.pageSize = 1;
80
97
  vmi.originalData = vm.dataList;
@@ -117,8 +134,8 @@ export class MenusSetting {
117
134
  }
118
135
  },
119
136
  divCreate: {
120
- class: `mx-auto `,
121
- style: `max-width:100%;width:960px;`,
137
+ class: `w-100 `,
138
+ style: `max-width:100%;`,
122
139
  },
123
140
  };
124
141
  });
@@ -236,7 +253,7 @@ export class MenusSetting {
236
253
  bind: vm.id,
237
254
  view: () => {
238
255
  const link = vm.link[vm.language];
239
- return html`<div class="title-container" style="width: 856px; max-width: 100%;">
256
+ return html`<div class="title-container" style="width: 100%; max-width: 100%;">
240
257
  ${BgWidget.goBack(
241
258
  cf.gvc.event(() => {
242
259
  cf.goBack();
@@ -254,7 +271,7 @@ export class MenusSetting {
254
271
  </div>
255
272
  ${BgWidget.container(
256
273
  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"
274
+ style="max-width:100%;width: 100%; 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
275
  >
259
276
  <div style="width: 100%; position: relative">
260
277
  <div
@@ -223,19 +223,25 @@ export class UserExcel {
223
223
  const jsonData = yield Excel.parseExcelToJson(gvc, target.files[0]);
224
224
  dialog.dataLoading({ visible: false });
225
225
  const setUserEmails = [...new Set(jsonData.map(user => user['電子信箱']))];
226
- if (jsonData.length > setUserEmails.length) {
226
+ if (jsonData.filter((user) => {
227
+ return user['電子信箱'];
228
+ }).length > setUserEmails.filter((dd) => {
229
+ return dd;
230
+ }).length) {
227
231
  dialog.errorMessage({ text: '會員電子信箱不可重複' });
228
232
  return;
229
233
  }
230
234
  const setUserPhones = [...new Set(jsonData.map(user => user['電話']))];
231
- if (jsonData.length > setUserPhones.length) {
235
+ if (jsonData.filter((user) => {
236
+ return user['電話'];
237
+ }).length > setUserPhones.length) {
232
238
  dialog.errorMessage({ text: '會員電話不可重複' });
233
239
  return;
234
240
  }
235
241
  for (let i = 0; i < jsonData.length; i++) {
236
242
  const user = jsonData[i];
237
- if (!user['電子信箱']) {
238
- dialog.errorMessage({ text: '會員電子信箱不可為空' });
243
+ if (!user['電子信箱'] && !user['電話']) {
244
+ dialog.errorMessage({ text: '電話或信箱擇一必填' });
239
245
  return;
240
246
  }
241
247
  const userData = {
@@ -260,7 +266,7 @@ export class UserExcel {
260
266
  rebate: user['購物金餘額'],
261
267
  };
262
268
  jsonData[i] = {
263
- account: userData.email,
269
+ account: userData.email | userData.phone,
264
270
  pwd: gvc.glitter.getUUID(),
265
271
  userData: userData,
266
272
  };
@@ -364,13 +364,19 @@ export class UserExcel {
364
364
  dialog.dataLoading({ visible: false });
365
365
 
366
366
  const setUserEmails = [...new Set(jsonData.map(user => user['電子信箱']))];
367
- if (jsonData.length > setUserEmails.length) {
367
+ if (jsonData.filter((user)=>{
368
+ return user['電子信箱']
369
+ }).length > setUserEmails.filter((dd)=>{
370
+ return dd
371
+ }).length) {
368
372
  dialog.errorMessage({ text: '會員電子信箱不可重複' });
369
373
  return;
370
374
  }
371
375
 
372
376
  const setUserPhones = [...new Set(jsonData.map(user => user['電話']))];
373
- if (jsonData.length > setUserPhones.length) {
377
+ if (jsonData.filter((user)=>{
378
+ return user['電話']
379
+ }).length > setUserPhones.length) {
374
380
  dialog.errorMessage({ text: '會員電話不可重複' });
375
381
  return;
376
382
  }
@@ -378,8 +384,8 @@ export class UserExcel {
378
384
  for (let i = 0; i < jsonData.length; i++) {
379
385
  const user = jsonData[i];
380
386
 
381
- if (!user['電子信箱']) {
382
- dialog.errorMessage({ text: '會員電子信箱不可為空' });
387
+ if (!user['電子信箱'] && !user['電話']) {
388
+ dialog.errorMessage({ text: '電話或信箱擇一必填' });
383
389
  return;
384
390
  }
385
391
 
@@ -406,7 +412,7 @@ export class UserExcel {
406
412
  };
407
413
 
408
414
  jsonData[i] = {
409
- account: userData.email,
415
+ account: userData.email | userData.phone,
410
416
  pwd: gvc.glitter.getUUID(),
411
417
  userData: userData,
412
418
  };