ts-glitter 14.7.2 → 14.7.4

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 (45) hide show
  1. package/lowcode/Entry.js +1 -1
  2. package/lowcode/Entry.ts +1 -1
  3. package/lowcode/cms-plugin/ai-generator/editor-ai.js +63 -0
  4. package/lowcode/cms-plugin/ai-generator/editor-ai.ts +90 -0
  5. package/lowcode/cms-plugin/ai-generator/member-ai.js +183 -0
  6. package/lowcode/cms-plugin/ai-generator/member-ai.ts +187 -0
  7. package/lowcode/cms-plugin/ai-generator/product-ai.js +97 -106
  8. package/lowcode/cms-plugin/ai-generator/product-ai.ts +103 -112
  9. package/lowcode/cms-plugin/ai-message.js +615 -598
  10. package/lowcode/cms-plugin/ai-message.ts +603 -613
  11. package/lowcode/cms-plugin/product-config.js +66 -0
  12. package/lowcode/cms-plugin/product-config.ts +67 -0
  13. package/lowcode/cms-plugin/shopping-product-setting.js +7 -53
  14. package/lowcode/cms-plugin/shopping-product-setting.ts +9 -53
  15. package/lowcode/cms-plugin/user-list.js +33 -20
  16. package/lowcode/cms-plugin/user-list.ts +33 -19
  17. package/lowcode/css/editor.css +18 -0
  18. package/lowcode/glitter-base/route/user.js +10 -0
  19. package/lowcode/glitter-base/route/user.ts +10 -0
  20. package/lowcode/glitterBundle/html-component/global-widget.js +58 -0
  21. package/lowcode/glitterBundle/html-component/global-widget.ts +58 -1
  22. package/lowcode/jspage/function-page/setting_editor.ts +0 -2
  23. package/lowcode/official_view_component/official/component.js +1 -0
  24. package/lowcode/official_view_component/official/component.ts +2 -0
  25. package/lowcode/public-components/user-manager/um-order.js +2 -2
  26. package/lowcode/public-components/user-manager/um-order.ts +2 -2
  27. package/package.json +1 -1
  28. package/src/api-public/controllers/fcm.js.map +1 -1
  29. package/src/api-public/controllers/index.js +1 -0
  30. package/src/api-public/controllers/index.js.map +1 -1
  31. package/src/api-public/controllers/index.ts +1 -0
  32. package/src/api-public/controllers/rebate.js.map +1 -1
  33. package/src/api-public/controllers/user.js +10 -0
  34. package/src/api-public/controllers/user.js.map +1 -1
  35. package/src/api-public/controllers/user.ts +10 -0
  36. package/src/api-public/services/auto-send-email.js.map +1 -1
  37. package/src/api-public/services/chat.js.map +1 -1
  38. package/src/api-public/services/custom-code.js.map +1 -1
  39. package/src/api-public/services/rebate.js.map +1 -1
  40. package/src/api-public/services/share-permission.js.map +1 -1
  41. package/src/api-public/services/user.d.ts +1 -0
  42. package/src/api-public/services/user.js +11 -0
  43. package/src/api-public/services/user.js.map +1 -1
  44. package/src/api-public/services/user.ts +16 -0
  45. package/src/services/app.js.map +1 -1
package/lowcode/Entry.js CHANGED
@@ -80,7 +80,7 @@ export class Entry {
80
80
  }
81
81
  window.renderClock = (_a = window.renderClock) !== null && _a !== void 0 ? _a : clockF();
82
82
  console.log(`Entry-time:`, window.renderClock.stop());
83
- glitter.share.editerVersion = 'V_14.7.2';
83
+ glitter.share.editerVersion = 'V_14.7.4';
84
84
  glitter.share.start = new Date();
85
85
  const vm = {
86
86
  appConfig: [],
package/lowcode/Entry.ts CHANGED
@@ -82,7 +82,7 @@ export class Entry {
82
82
 
83
83
  (window as any).renderClock = (window as any).renderClock ?? clockF();
84
84
  console.log(`Entry-time:`, (window as any).renderClock.stop());
85
- glitter.share.editerVersion = 'V_14.7.2';
85
+ glitter.share.editerVersion = 'V_14.7.4';
86
86
  glitter.share.start = new Date();
87
87
  const vm: {
88
88
  appConfig: any;
@@ -0,0 +1,63 @@
1
+ import { BgWidget } from "../../backend-manager/bg-widget.js";
2
+ import { EditorElem } from "../../glitterBundle/plugins/editor-elem.js";
3
+ import { ShareDialog } from "../../glitterBundle/dialog/ShareDialog.js";
4
+ export class EditorAi {
5
+ static view(gvc) {
6
+ const html = String.raw;
7
+ let message = '';
8
+ return html `
9
+ <div class="p-2">
10
+ ${[
11
+ html `
12
+ <lottie-player src="${gvc.glitter.root_path}lottie/ai.json"
13
+ class="mx-auto my-n4" speed="1"
14
+ style="max-width: 100%;width: 250px;height:250px;" loop
15
+ autoplay></lottie-player>`,
16
+ `<div class="w-100 d-flex align-items-center justify-content-center my-3">${BgWidget.grayNote('點擊想要調整的元件之後,在輸入 AI 語句進行調整', `font-weight: 500;`)}</div>`,
17
+ html `
18
+ <div class="w-100" onclick="${gvc.event(() => {
19
+ if (!gvc.glitter.share.editorViewModel.selectItem) {
20
+ const dialog = new ShareDialog(gvc.glitter);
21
+ dialog.errorMessage({ text: '請先點擊要編輯的元件' });
22
+ }
23
+ })}">
24
+ ${EditorElem.editeText({
25
+ gvc: gvc,
26
+ title: '',
27
+ default: '',
28
+ placeHolder: `字體大小20px,距離左邊20px,背景顏色黃色,字體顏色藍色,標題為歡迎來到SHOPNEX開店平台.`,
29
+ callback: (text) => {
30
+ message = text;
31
+ },
32
+ min_height: 100
33
+ })}
34
+ </div>`,
35
+ html `
36
+ <div class="w-100 d-flex align-items-center justify-content-end">
37
+ ${BgWidget.save(gvc.event(() => {
38
+ const dialog = new ShareDialog(gvc.glitter);
39
+ if (!message) {
40
+ dialog.errorMessage({ text: '請輸入描述語句' });
41
+ return;
42
+ }
43
+ dialog.dataLoading({ visible: true });
44
+ gvc.glitter.getModule(new URL('./editor/ai-editor.js', gvc.glitter.root_path).href, (AiEditor) => {
45
+ AiEditor.editView(message, gvc.glitter.share.editorViewModel.selectItem, (result) => {
46
+ dialog.dataLoading({ visible: false });
47
+ if (result) {
48
+ dialog.successMessage({ text: `已為你調整元件『${result}』` });
49
+ gvc.glitter.share.editorViewModel.selectItem.refreshComponent();
50
+ gvc.glitter.closeDrawer();
51
+ }
52
+ else {
53
+ dialog.errorMessage({ text: 'AI無法理解你的意思,請輸入更確切的需求' });
54
+ }
55
+ });
56
+ });
57
+ }), "調整元素", "w-100 mt-3 py-2")}
58
+ </div>`
59
+ ].join('<div class="my-2"></div>')}
60
+ </div>`;
61
+ }
62
+ }
63
+ window.glitter.setModule(import.meta.url, EditorAi);
@@ -0,0 +1,90 @@
1
+ import {GVC} from "../../glitterBundle/GVController.js";
2
+ import {BgWidget} from "../../backend-manager/bg-widget.js";
3
+ import {EditorElem} from "../../glitterBundle/plugins/editor-elem.js";
4
+ import {ShareDialog} from "../../glitterBundle/dialog/ShareDialog.js";
5
+
6
+
7
+ export class EditorAi {
8
+ public static view(gvc: GVC) {
9
+ const html = String.raw
10
+ let message = ''
11
+ return html`
12
+ <div class="p-2">
13
+ ${[
14
+ html`
15
+ <lottie-player src="${gvc.glitter.root_path}lottie/ai.json"
16
+ class="mx-auto my-n4" speed="1"
17
+ style="max-width: 100%;width: 250px;height:250px;" loop
18
+ autoplay></lottie-player>`,
19
+ `<div class="w-100 d-flex align-items-center justify-content-center my-3">${BgWidget.grayNote('點擊想要調整的元件之後,在輸入 AI 語句進行調整', `font-weight: 500;`)}</div>`,
20
+ html`
21
+ <div class="w-100" onclick="${gvc.event(() => {
22
+ if (!gvc.glitter.share.editorViewModel.selectItem) {
23
+ const dialog = new ShareDialog(gvc.glitter)
24
+ dialog.errorMessage({text: '請先點擊要編輯的元件'})
25
+ }
26
+ })}">
27
+ ${EditorElem.editeText({
28
+ gvc: gvc,
29
+ title: '',
30
+ default: '',
31
+ placeHolder: `字體大小20px,距離左邊20px,背景顏色黃色,字體顏色藍色,標題為歡迎來到SHOPNEX開店平台.`,
32
+ callback: (text) => {
33
+ message = text;
34
+ },
35
+ min_height: 100
36
+ })}
37
+ </div>`,
38
+ html`
39
+ <div class="w-100 d-flex align-items-center justify-content-end">
40
+ ${BgWidget.save(gvc.event(() => {
41
+ const dialog = new ShareDialog(gvc.glitter)
42
+ if (!message) {
43
+ dialog.errorMessage({text: '請輸入描述語句'})
44
+ return
45
+ }
46
+
47
+ dialog.dataLoading({visible: true})
48
+ gvc.glitter.getModule(new URL('./editor/ai-editor.js', gvc.glitter.root_path).href, (AiEditor) => {
49
+ AiEditor.editView(message, gvc.glitter.share.editorViewModel.selectItem, (result: any) => {
50
+ dialog.dataLoading({visible: false})
51
+ if (result) {
52
+ dialog.successMessage({text: `已為你調整元件『${result}』`})
53
+ gvc.glitter.share.editorViewModel.selectItem.refreshComponent()
54
+ gvc.glitter.closeDrawer()
55
+ } else {
56
+ dialog.errorMessage({text: 'AI無法理解你的意思,請輸入更確切的需求'})
57
+ }
58
+
59
+ })
60
+ });
61
+
62
+ // const dialog = new ShareDialog(gvc.glitter)
63
+ // dialog.dataLoading({visible: true})
64
+ // AiChat.generateHtml({
65
+ // app_name: (window as any).appName,
66
+ // text: message
67
+ // }).then((res) => {
68
+ // if (res.result && res.response.data.usage === 0) {
69
+ // dialog.dataLoading({visible: false})
70
+ // dialog.errorMessage({text: `很抱歉你的AI代幣不足,請先前往加值`})
71
+ // } else if (res.result && (!res.response.data.obj.result)) {
72
+ // dialog.dataLoading({visible: false})
73
+ // dialog.errorMessage({text: `AI無法理解你的需求,請給出具體一點的描述`})
74
+ // } else if (!res.result) {
75
+ // dialog.dataLoading({visible: false})
76
+ // dialog.errorMessage({text: `發生錯誤`})
77
+ // } else {
78
+ //
79
+ // dialog.successMessage({text: `AI生成完畢,使用了『${res.response.data.usage}』點 AI Points.`})
80
+ //
81
+ // }
82
+ // })
83
+ }), "調整元素", "w-100 mt-3 py-2")}
84
+ </div>`
85
+ ].join('<div class="my-2"></div>')}
86
+ </div>`
87
+ }
88
+ }
89
+
90
+ (window as any).glitter.setModule(import.meta.url, EditorAi);
@@ -0,0 +1,183 @@
1
+ import { BgWidget } from "../../backend-manager/bg-widget.js";
2
+ import { ShareDialog } from "../../glitterBundle/dialog/ShareDialog.js";
3
+ import { AiChat } from "../../glitter-base/route/ai-chat.js";
4
+ export class MemberAi {
5
+ static addMember(gvc, member_data, refresh) {
6
+ const dialog = new ShareDialog(gvc.glitter);
7
+ const html = String.raw;
8
+ const language = window.parent.store_info.language_setting.def;
9
+ let place_holder = '顧客姓名是王小明,電子信箱是sam12345@gmail.com,電話號碼是0912345678,生日是民國83年11月5日,地址是台北市大安區望安路10號,備註來自Facebook的消費用戶。';
10
+ let message = place_holder;
11
+ return html `
12
+ <div class="">
13
+ ${[
14
+ html `
15
+ <lottie-player src="${gvc.glitter.root_path}lottie/ai.json" class="mx-auto my-n4"
16
+ speed="1"
17
+ style="max-width: 100%;width: 250px;height:250px;" loop
18
+ autoplay></lottie-player>`,
19
+ `<div class="w-100 d-flex align-items-center justify-content-center my-3">${BgWidget.grayNote('透過 AI 可以幫你快速新增會員資料', `font-weight: 500;`)}</div>`,
20
+ html `
21
+ <div class="w-100" ">
22
+ ${BgWidget.textArea({
23
+ gvc: gvc,
24
+ title: '',
25
+ default: message,
26
+ placeHolder: place_holder,
27
+ callback: (text) => {
28
+ message = text;
29
+ },
30
+ style: `min-height:100px;`
31
+ })}
32
+ </div>`,
33
+ `<div class="w-100 d-flex align-items-center justify-content-end">
34
+ ${BgWidget.save(gvc.event(() => {
35
+ const dialog = new ShareDialog(gvc.glitter);
36
+ dialog.dataLoading({ visible: true });
37
+ AiChat.editorHtml({
38
+ text: message,
39
+ format: MemberAi.schema,
40
+ assistant: `你是後台小幫手,幫我新增對應的會員資料`,
41
+ token: window.parent.saasConfig.config.token
42
+ }).then((res) => {
43
+ dialog.dataLoading({ visible: false });
44
+ const obj = res.response.data && res.response.data.obj;
45
+ if (obj) {
46
+ const usage = res.response.data.usage;
47
+ if (usage) {
48
+ (obj.name) && (member_data.name = obj.name);
49
+ (obj.email) && (member_data.email = obj.email);
50
+ (obj.phone) && (member_data.phone = obj.phone);
51
+ (obj.birth) && (member_data.birth = obj.birth);
52
+ (obj.address) && (member_data.address = obj.address);
53
+ (obj.managerNote) && (member_data.managerNote = obj.managerNote);
54
+ dialog.successMessage({ text: `生成成功,消耗了『${usage}』點 AI-Points` });
55
+ refresh();
56
+ gvc.closeDialog();
57
+ }
58
+ else {
59
+ dialog.errorMessage({ text: 'AI Points 點數不足' });
60
+ }
61
+ }
62
+ else {
63
+ dialog.errorMessage({ text: '發生錯誤' });
64
+ }
65
+ });
66
+ }), "確認生成", "w-100 mt-3 py-4 fs-6")}
67
+ </div>`
68
+ ].join('<div class="my-2"></div>')}
69
+ </div>`;
70
+ }
71
+ static generateRichText(gvc, callback) {
72
+ const dialog = new ShareDialog(gvc.glitter);
73
+ BgWidget.settingDialog({
74
+ gvc: gvc,
75
+ title: 'AI 內容生成',
76
+ innerHTML: (gvc) => {
77
+ const html = String.raw;
78
+ let message = '';
79
+ return html `
80
+ <div class="">
81
+ ${[
82
+ html `
83
+ <lottie-player src="${gvc.glitter.root_path}lottie/ai.json" class="mx-auto my-n4"
84
+ speed="1"
85
+ style="max-width: 100%;width: 250px;height:250px;" loop
86
+ autoplay></lottie-player>`,
87
+ `<div class="w-100 d-flex align-items-center justify-content-center my-3">${BgWidget.grayNote('透過 AI 可以快速幫您生成內文', `font-weight: 500;`)}</div>`,
88
+ html `
89
+ <div class="w-100" ">
90
+ ${BgWidget.textArea({
91
+ gvc: gvc,
92
+ title: '',
93
+ default: message,
94
+ placeHolder: `幫我生成一個4*3的說明表格,內容是針對健康保健。`,
95
+ callback: (text) => {
96
+ message = text;
97
+ },
98
+ style: `min-height:100px;`
99
+ })}
100
+ </div>`,
101
+ html `
102
+ <div class="w-100 d-flex align-items-center justify-content-end">
103
+ ${BgWidget.save(gvc.event(() => {
104
+ const dialog = new ShareDialog(gvc.glitter);
105
+ dialog.dataLoading({ visible: true });
106
+ AiChat.generateHtml({
107
+ token: window.parent.saasConfig.config.token,
108
+ app_name: window.parent.appName,
109
+ text: message
110
+ }).then((res) => {
111
+ if (res.result && res.response.data.usage === 0) {
112
+ dialog.dataLoading({ visible: false });
113
+ dialog.errorMessage({ text: `很抱歉你的AI代幣不足,請先前往加值` });
114
+ }
115
+ else if (res.result && (!res.response.data.obj.result)) {
116
+ dialog.dataLoading({ visible: false });
117
+ dialog.errorMessage({ text: `AI無法理解你的需求,請給出具體一點的描述` });
118
+ }
119
+ else if (!res.result) {
120
+ dialog.dataLoading({ visible: false });
121
+ dialog.errorMessage({ text: `發生錯誤` });
122
+ }
123
+ else {
124
+ callback(res.response.data.obj.html);
125
+ dialog.dataLoading({ visible: false });
126
+ dialog.successMessage({ text: `AI生成完畢,使用了『${res.response.data.usage}』點 AI Points.` });
127
+ gvc.closeDialog();
128
+ }
129
+ });
130
+ }), "確認生成", "w-100 mt-3 py-2")}
131
+ </div>`
132
+ ].join('<div class="my-2"></div>')}
133
+ </div>`;
134
+ },
135
+ footer_html: (gvc) => {
136
+ return ``;
137
+ },
138
+ width: 500
139
+ });
140
+ }
141
+ }
142
+ MemberAi.schema = {
143
+ "name": "customer_data",
144
+ "strict": true,
145
+ "schema": {
146
+ "type": "object",
147
+ "properties": {
148
+ "name": {
149
+ "type": "string",
150
+ "description": "顧客的姓名"
151
+ },
152
+ "email": {
153
+ "type": "string",
154
+ "description": "顧客的電子信箱"
155
+ },
156
+ "phone": {
157
+ "type": "string",
158
+ "description": "顧客的電話"
159
+ },
160
+ "birth": {
161
+ "type": "string",
162
+ "description": "顧客的西元出生日期,範例19981223"
163
+ },
164
+ "address": {
165
+ "type": "string",
166
+ "description": "顧客的地址"
167
+ },
168
+ "managerNote": {
169
+ "type": "string",
170
+ "description": "顧客的備註"
171
+ }
172
+ },
173
+ "required": [
174
+ "name",
175
+ "email",
176
+ "phone",
177
+ "birth",
178
+ "address",
179
+ "managerNote"
180
+ ],
181
+ "additionalProperties": false
182
+ }
183
+ };
@@ -0,0 +1,187 @@
1
+ import {GVC} from "../../glitterBundle/GVController.js";
2
+ import {BgWidget} from "../../backend-manager/bg-widget.js";
3
+ import {ApiUser} from "../../glitter-base/route/user.js";
4
+ import {AiPointsApi} from "../../glitter-base/route/ai-points-api.js";
5
+ import {ShareDialog} from "../../glitterBundle/dialog/ShareDialog.js";
6
+ import {AiChat} from "../../glitter-base/route/ai-chat.js";
7
+ import {AddComponent} from "../../editor/add-component.js";
8
+
9
+ export class MemberAi {
10
+ public static schema = {
11
+ "name": "customer_data",
12
+ "strict": true,
13
+ "schema": {
14
+ "type": "object",
15
+ "properties": {
16
+ "name": {
17
+ "type": "string",
18
+ "description": "顧客的姓名"
19
+ },
20
+ "email": {
21
+ "type": "string",
22
+ "description": "顧客的電子信箱"
23
+ },
24
+ "phone": {
25
+ "type": "string",
26
+ "description": "顧客的電話"
27
+ },
28
+ "birth": {
29
+ "type": "string",
30
+ "description": "顧客的西元出生日期,範例19981223"
31
+ },
32
+ "address": {
33
+ "type": "string",
34
+ "description": "顧客的地址"
35
+ },
36
+ "managerNote": {
37
+ "type": "string",
38
+ "description": "顧客的備註"
39
+ }
40
+ },
41
+ "required": [
42
+ "name",
43
+ "email",
44
+ "phone",
45
+ "birth",
46
+ "address",
47
+ "managerNote"
48
+ ],
49
+ "additionalProperties": false
50
+ }
51
+ }
52
+
53
+ public static addMember(gvc: GVC, member_data: any, refresh: () => void) {
54
+ const dialog = new ShareDialog(gvc.glitter)
55
+ const html = String.raw
56
+ //當前預設語言
57
+ const language = (window.parent as any).store_info.language_setting.def;
58
+ let place_holder = '顧客姓名是王小明,電子信箱是sam12345@gmail.com,電話號碼是0912345678,生日是民國83年11月5日,地址是台北市大安區望安路10號,備註來自Facebook的消費用戶。'
59
+ let message = place_holder
60
+ return html`
61
+ <div class="">
62
+ ${[
63
+ html`
64
+ <lottie-player src="${gvc.glitter.root_path}lottie/ai.json" class="mx-auto my-n4"
65
+ speed="1"
66
+ style="max-width: 100%;width: 250px;height:250px;" loop
67
+ autoplay></lottie-player>`,
68
+ `<div class="w-100 d-flex align-items-center justify-content-center my-3">${BgWidget.grayNote('透過 AI 可以幫你快速新增會員資料', `font-weight: 500;`)}</div>`,
69
+ html`
70
+ <div class="w-100" ">
71
+ ${BgWidget.textArea({
72
+ gvc: gvc,
73
+ title: '',
74
+ default: message,
75
+ placeHolder: place_holder,
76
+ callback: (text) => {
77
+ message = text;
78
+ },
79
+ style: `min-height:100px;`
80
+ })}
81
+ </div>`,
82
+ `<div class="w-100 d-flex align-items-center justify-content-end">
83
+ ${BgWidget.save(gvc.event(() => {
84
+ const dialog = new ShareDialog(gvc.glitter)
85
+ dialog.dataLoading({visible: true})
86
+ AiChat.editorHtml({
87
+ text: message,
88
+ format: MemberAi.schema,
89
+ assistant: `你是後台小幫手,幫我新增對應的會員資料`,
90
+ token: (window.parent as any).saasConfig.config.token
91
+ }).then((res) => {
92
+ dialog.dataLoading({visible: false})
93
+ const obj = res.response.data && res.response.data.obj
94
+ if (obj) {
95
+ const usage = res.response.data.usage
96
+ if (usage) {
97
+ (obj.name) && (member_data.name = obj.name);
98
+ (obj.email) && (member_data.email = obj.email);
99
+ (obj.phone) && (member_data.phone = obj.phone);
100
+ (obj.birth) && (member_data.birth = obj.birth);
101
+ (obj.address) && (member_data.address = obj.address);
102
+ (obj.managerNote) && (member_data.managerNote = obj.managerNote);
103
+ dialog.successMessage({text: `生成成功,消耗了『${usage}』點 AI-Points`})
104
+ refresh()
105
+ gvc.closeDialog()
106
+ } else {
107
+ dialog.errorMessage({text: 'AI Points 點數不足'})
108
+ }
109
+ } else {
110
+ dialog.errorMessage({text: '發生錯誤'})
111
+ }
112
+ })
113
+ }), "確認生成", "w-100 mt-3 py-4 fs-6")}
114
+ </div>`
115
+ ].join('<div class="my-2"></div>')}
116
+ </div>`
117
+ }
118
+
119
+ public static generateRichText(gvc: GVC, callback: (text: string) => void) {
120
+ const dialog = new ShareDialog(gvc.glitter)
121
+ BgWidget.settingDialog({
122
+ gvc: gvc,
123
+ title: 'AI 內容生成',
124
+ innerHTML: (gvc: GVC) => {
125
+ const html = String.raw
126
+ let message = ''
127
+ return html`
128
+ <div class="">
129
+ ${[
130
+ html`
131
+ <lottie-player src="${gvc.glitter.root_path}lottie/ai.json" class="mx-auto my-n4"
132
+ speed="1"
133
+ style="max-width: 100%;width: 250px;height:250px;" loop
134
+ autoplay></lottie-player>`,
135
+ `<div class="w-100 d-flex align-items-center justify-content-center my-3">${BgWidget.grayNote('透過 AI 可以快速幫您生成內文', `font-weight: 500;`)}</div>`,
136
+ html`
137
+ <div class="w-100" ">
138
+ ${BgWidget.textArea({
139
+ gvc: gvc,
140
+ title: '',
141
+ default: message,
142
+ placeHolder: `幫我生成一個4*3的說明表格,內容是針對健康保健。`,
143
+ callback: (text) => {
144
+ message = text;
145
+ },
146
+ style: `min-height:100px;`
147
+ })}
148
+ </div>`,
149
+ html`
150
+ <div class="w-100 d-flex align-items-center justify-content-end">
151
+ ${BgWidget.save(gvc.event(() => {
152
+ const dialog = new ShareDialog(gvc.glitter)
153
+ dialog.dataLoading({visible: true})
154
+ AiChat.generateHtml({
155
+ token: (window.parent as any).saasConfig.config.token,
156
+ app_name: (window.parent as any).appName,
157
+ text: message
158
+ }).then((res) => {
159
+ if (res.result && res.response.data.usage === 0) {
160
+ dialog.dataLoading({visible: false})
161
+ dialog.errorMessage({text: `很抱歉你的AI代幣不足,請先前往加值`})
162
+ } else if (res.result && (!res.response.data.obj.result)) {
163
+ dialog.dataLoading({visible: false})
164
+ dialog.errorMessage({text: `AI無法理解你的需求,請給出具體一點的描述`})
165
+ } else if (!res.result) {
166
+ dialog.dataLoading({visible: false})
167
+ dialog.errorMessage({text: `發生錯誤`})
168
+ } else {
169
+ callback(res.response.data.obj.html)
170
+ dialog.dataLoading({visible: false})
171
+ dialog.successMessage({text: `AI生成完畢,使用了『${res.response.data.usage}』點 AI Points.`})
172
+ gvc.closeDialog()
173
+
174
+ }
175
+ })
176
+ }), "確認生成", "w-100 mt-3 py-2")}
177
+ </div>`
178
+ ].join('<div class="my-2"></div>')}
179
+ </div>`
180
+ },
181
+ footer_html: (gvc: GVC) => {
182
+ return ``
183
+ },
184
+ width: 500
185
+ });
186
+ }
187
+ }