aegon-lv82 1.0.0

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 (148) hide show
  1. package/package.json +12 -0
  2. package/src/App.vue +44 -0
  3. package/src/api/index.ts +19 -0
  4. package/src/api/modules/build-report/reportEditor.ts +526 -0
  5. package/src/api/modules/build-report/reportPermission.ts +64 -0
  6. package/src/api/modules/index.ts +69 -0
  7. package/src/api/modules/industry/green_mortgage.ts +42 -0
  8. package/src/api/modules/user/index.ts +4 -0
  9. package/src/api/request.ts +124 -0
  10. package/src/assets/sample-access-icon.png +0 -0
  11. package/src/assets/sample-pie-chart.png +0 -0
  12. package/src/assets/vue.svg +1 -0
  13. package/src/components/CapsuleScrollbar.vue +7 -0
  14. package/src/components/Export/ExcelExport.vue +592 -0
  15. package/src/components/Export/ExcelExport2.vue +494 -0
  16. package/src/components/Export/ExcelExport3.vue +342 -0
  17. package/src/components/Export/ExcelExport4.vue +665 -0
  18. package/src/components/Export/excelExport.js +547 -0
  19. package/src/components/Export/excelExport.ts +551 -0
  20. package/src/components/GEN-AI/index.vue +140 -0
  21. package/src/components/GEN-AI/index1.vue +422 -0
  22. package/src/components/GEN-AI/index10.vue +5 -0
  23. package/src/components/GEN-AI/index2.vue +548 -0
  24. package/src/components/GEN-AI/index3.vue +605 -0
  25. package/src/components/GEN-AI/index4.vue +609 -0
  26. package/src/components/GEN-AI/index5.vue +558 -0
  27. package/src/components/GEN-AI/index6.vue +634 -0
  28. package/src/components/GEN-AI/index7.vue +688 -0
  29. package/src/components/GEN-AI/index8.vue +458 -0
  30. package/src/components/GEN-AI/index9.vue +1217 -0
  31. package/src/components/GEN-AI/types.ts +12 -0
  32. package/src/components/GEN-AI/utils.ts +42 -0
  33. package/src/components/HelloWorld.vue +41 -0
  34. package/src/components/PageCard.vue +124 -0
  35. package/src/components/PageHeader.vue +32 -0
  36. package/src/components/backup/index5 copy.vue +556 -0
  37. package/src/components/backup/index5.vue +620 -0
  38. package/src/components/backup/index9 copy.vue +1029 -0
  39. package/src/components/backup/index9-pro.vue +1065 -0
  40. package/src/components/backup/index9.vue +1057 -0
  41. package/src/directives/btnLoading.ts +455 -0
  42. package/src/directives/debounce copy.ts +670 -0
  43. package/src/directives/debounce.ts +98 -0
  44. package/src/directives/index.ts +25 -0
  45. package/src/layouts/MainLayout.vue +129 -0
  46. package/src/main.ts +76 -0
  47. package/src/router/index.ts +142 -0
  48. package/src/router/menus.ts +28 -0
  49. package/src/store/modules/gen-ai/index.ts +1 -0
  50. package/src/store/modules/gen-ai/reportBuild.ts +37 -0
  51. package/src/style.css +79 -0
  52. package/src/styles/report-config-popover.css +39 -0
  53. package/src/styles/report-icon-btn.css +19 -0
  54. package/src/test/mock.ts +101 -0
  55. package/src/test/test1.vue +402 -0
  56. package/src/test/test2.vue +1689 -0
  57. package/src/types/gen-ai/build-report/reportEditor.ts +684 -0
  58. package/src/utils/function.ts +46 -0
  59. package/src/utils/gen-ai-navigation.ts +1 -0
  60. package/src/utils/gen-ai-scroll.ts +1 -0
  61. package/src/utils/openDataLoaderWordExport.ts +33 -0
  62. package/src/utils/pageScrollbar.ts +115 -0
  63. package/src/utils/randomTranscode.ts +87 -0
  64. package/src/utils/reportPdfExport.ts +44 -0
  65. package/src/views/Blank.vue +68 -0
  66. package/src/views/Home.vue +29 -0
  67. package/src/views/TemplateCenter/Knowledge.ts +83 -0
  68. package/src/views/TemplateCenter/data.d.ts +10 -0
  69. package/src/views/TemplateCenter/index.vue +1128 -0
  70. package/src/views/TemplateCenter/service.ts +69 -0
  71. package/src/views/gen-ai/build-report/chartStreamRefs.ts +174 -0
  72. package/src/views/gen-ai/build-report/coherence-check/index.vue +559 -0
  73. package/src/views/gen-ai/build-report/components/ReportChapterWorkspace.vue +4258 -0
  74. package/src/views/gen-ai/build-report/components/ReportConfigPanel.vue +727 -0
  75. package/src/views/gen-ai/build-report/components/ReportGenerateSettingsPanel.vue +2361 -0
  76. package/src/views/gen-ai/build-report/components/ReportGeneratingPanel.vue +1765 -0
  77. package/src/views/gen-ai/build-report/components/ReportPromptPanel.vue +614 -0
  78. package/src/views/gen-ai/build-report/components/ReportSourceFileSummary.vue +656 -0
  79. package/src/views/gen-ai/build-report/components/ReportSourcesPanel.vue +1327 -0
  80. package/src/views/gen-ai/build-report/components/ReportTemplateDetail.vue +191 -0
  81. package/src/views/gen-ai/build-report/components/ReportTemplateEditorFormPanel.vue +667 -0
  82. package/src/views/gen-ai/build-report/components/ReportTemplatePicker.vue +302 -0
  83. package/src/views/gen-ai/build-report/components/ReportWorkflowSidebar.vue +148 -0
  84. package/src/views/gen-ai/build-report/components/paramsSetting.vue +886 -0
  85. package/src/views/gen-ai/build-report/components/reportEdit.vue +2283 -0
  86. package/src/views/gen-ai/build-report/index.vue +856 -0
  87. package/src/views/gen-ai/build-report/report-domain.ts +1133 -0
  88. package/src/views/gen-ai/build-report/report-template-data.ts +295 -0
  89. package/src/views/gen-ai/build-report/useReportWorkflow.ts +1408 -0
  90. package/src/views/gen-ai/common/assets/NotoSans-SC.woff2 +0 -0
  91. package/src/views/gen-ai/common/assets/NotoSans-TC.woff2 +0 -0
  92. package/src/views/gen-ai/common/assets/NotoSans.woff2 +0 -0
  93. package/src/views/gen-ai/common/assets/fonts.css +278 -0
  94. package/src/views/gen-ai/common/assets/pagination.css +163 -0
  95. package/src/views/gen-ai/common/directives/btnLoading.ts +455 -0
  96. package/src/views/gen-ai/common/directives/debounce.ts +98 -0
  97. package/src/views/gen-ai/common/directives/index.ts +30 -0
  98. package/src/views/gen-ai/common/en.md +417 -0
  99. package/src/views/gen-ai/common/index.ts +36 -0
  100. package/src/views/gen-ai/common/types/component-expose.ts +9 -0
  101. package/src/views/gen-ai/common/utils/api-res-status.ts +7 -0
  102. package/src/views/gen-ai/common/utils/navigation.ts +59 -0
  103. package/src/views/gen-ai/common/utils/remote-request.ts +45 -0
  104. package/src/views/gen-ai/common/utils/scroll.ts +577 -0
  105. package/src/views/gen-ai/components/AIExport/docx-export.ts +950 -0
  106. package/src/views/gen-ai/components/AIExport/docxExport.ts +2566 -0
  107. package/src/views/gen-ai/components/AIExport/index.ts +52 -0
  108. package/src/views/gen-ai/components/AIExport/parseMarkdownHtml.ts +649 -0
  109. package/src/views/gen-ai/components/CapsuleScrollbar.vue +149 -0
  110. package/src/views/gen-ai/components/ChapterTitleScroll.vue +468 -0
  111. package/src/views/gen-ai/components/EntryHeroNavCards.vue +379 -0
  112. package/src/views/gen-ai/components/GenAiPagination.vue +52 -0
  113. package/src/views/gen-ai/components/ModelCard.vue +1114 -0
  114. package/src/views/gen-ai/components/Preview/FilePreviewPage.vue +947 -0
  115. package/src/views/gen-ai/components/Preview/PreviewCapsuleScroll.vue +205 -0
  116. package/src/views/gen-ai/components/Preview/PreviewOutlineTree.vue +148 -0
  117. package/src/views/gen-ai/components/Preview/index.ts +11 -0
  118. package/src/views/gen-ai/components/Preview/preview.ts +722 -0
  119. package/src/views/gen-ai/components/PromptField.vue +505 -0
  120. package/src/views/gen-ai/components/RecentReportsTable.vue +974 -0
  121. package/src/views/gen-ai/components/ReportCollapsibleSection.vue +172 -0
  122. package/src/views/gen-ai/components/ReportHistoryList.vue +637 -0
  123. package/src/views/gen-ai/components/ReportSectionConfirmPopover.vue +251 -0
  124. package/src/views/gen-ai/components/editor/ChapterTiptapEditor.vue +3139 -0
  125. package/src/views/gen-ai/components/editor/StructureBlockView.vue +441 -0
  126. package/src/views/gen-ai/components/editor/TiptapToolbar.vue +1036 -0
  127. package/src/views/gen-ai/components/editor/TypewriterDocEditor.vue +398 -0
  128. package/src/views/gen-ai/components/editor/_StructureOrgNode.vue +326 -0
  129. package/src/views/gen-ai/components/editor/index.ts +12 -0
  130. package/src/views/gen-ai/components/editor/parseMarkdownHtml.ts +667 -0
  131. package/src/views/gen-ai/gen-entry/api/index.ts +32 -0
  132. package/src/views/gen-ai/gen-entry/index.vue +287 -0
  133. package/src/views/gen-ai/gen-entry/types/index.ts +4 -0
  134. package/src/views/gen-ai/i.mark +2 -0
  135. package/src/views/gen-ai/management-center/index.vue +1815 -0
  136. package/src/views/gen-ai/management-center/mockData.ts +248 -0
  137. package/src/views/gen-ai/management-center/types/index.ts +37 -0
  138. package/src/views/gen-ai/model-manager/TemplateEditorFormPanel.vue +661 -0
  139. package/src/views/gen-ai/model-manager/api/index.ts +32 -0
  140. package/src/views/gen-ai/model-manager/api/mockApi.ts +33 -0
  141. package/src/views/gen-ai/model-manager/index.vue +1583 -0
  142. package/src/views/gen-ai/model-manager/mockData.ts +177 -0
  143. package/src/views/gen-ai/model-manager/template-detail-shared.ts +154 -0
  144. package/src/views/gen-ai/model-manager/template-editor.vue +345 -0
  145. package/src/views/gen-ai/model-manager/types/index.ts +40 -0
  146. package/src/views/gen-ai/model-manager/utils.ts +25 -0
  147. package/src/views/greenMortgage.vue +1834 -0
  148. package/src/vite-env.d.ts +46 -0
package/package.json ADDED
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "aegon-lv82",
3
+ "version": "1.0.0",
4
+ "description": "",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1"
8
+ },
9
+ "keywords": [],
10
+ "author": "",
11
+ "license": "ISC"
12
+ }
package/src/App.vue ADDED
@@ -0,0 +1,44 @@
1
+ <template>
2
+ <router-view />
3
+ </template>
4
+
5
+ <style>
6
+ html,
7
+ body {
8
+ margin: 0;
9
+ min-height: 100%;
10
+ font-family: 'PingFang TC', 'SF Pro TC', -apple-system, BlinkMacSystemFont, 'Helvetica Neue',
11
+ 'Microsoft JhengHei', 'Noto Sans TC', sans-serif;
12
+ font-synthesis: none;
13
+ text-rendering: optimizeLegibility;
14
+ -webkit-font-smoothing: antialiased;
15
+ -moz-osx-font-smoothing: grayscale;
16
+ }
17
+
18
+ body {
19
+ color: #2d3139;
20
+ background: #f3f4f6;
21
+ }
22
+
23
+ body,
24
+ button,
25
+ input,
26
+ textarea,
27
+ select {
28
+ font-family: inherit;
29
+ }
30
+
31
+ #app {
32
+ width: 100%;
33
+ max-width: none;
34
+ margin: 0;
35
+ padding: 0;
36
+ text-align: left;
37
+ }
38
+
39
+ .is-v-debounce-loading {
40
+ cursor: wait !important;
41
+ opacity: 0.65;
42
+ pointer-events: none;
43
+ }
44
+ </style>
@@ -0,0 +1,19 @@
1
+ export {
2
+ postRequest,
3
+ postStreamRequest,
4
+ streamPostSse,
5
+ getToken,
6
+ buildAuthHeaders,
7
+ type PostRequestOptions,
8
+ type SseBlock,
9
+ } from './request'
10
+
11
+ export {
12
+ reportApi,
13
+ REPORT_STREAM_USE_MOCK,
14
+ MOCK_REPORT_STREAM_TEXT,
15
+ REPORT_STREAM_API_URL,
16
+ streamGenerateReport,
17
+ type GenerateReportParams,
18
+ type AiStreamParams,
19
+ } from './modules'
@@ -0,0 +1,526 @@
1
+ import { postRequest, streamPostSse } from '@/api/request'
2
+ import type {
3
+ GenAiAdjustInstanceParams,
4
+ GenAiAdjustInstanceSettingParams,
5
+ GenAiChangeSectionStatusParams,
6
+ GenAiChartAsStreamParams,
7
+ GenAiCoherenceCheckAdjustParams,
8
+ GenAiCoherenceCheckParams,
9
+ GenAiDeleteSectionVersionParams,
10
+ GenAiFinalInstanceParams,
11
+ GenAiGenerateAiPromptParams,
12
+ GenAiGenerateSectionContentParams,
13
+ GenAiGetSectionListParams,
14
+ GenAiGetSectionVersionListParams,
15
+ GenAiInstHistEnquiryParams,
16
+ GenAiSaveSectionVersionParams,
17
+ GenAiSimTradTransferParams,
18
+ GenAiUpdateSectionOrderParams,
19
+ GenAiUpdateSectionVersionNameParams,
20
+ } from '@/types/gen-ai/build-report/reportEditor'
21
+
22
+ /** 與歷史代碼 postReqeust 同名別名,便於對照遷移文檔 */
23
+ const postReqeust = postRequest
24
+
25
+ /**
26
+ * 兼容後端字段大小寫:existsInstanceVersionNo / existsInstanceVersionNO
27
+ * 有值 = 已通過連貫性檢查
28
+ */
29
+ export function pickExistsInstanceVersionNo(data: unknown): string | null {
30
+ if (!data || typeof data !== 'object') return null
31
+ const raw = data as Record<string, unknown>
32
+ const value = raw.existsInstanceVersionNo ?? raw.existsInstanceVersionNO
33
+ if (value == null || value === '') return null
34
+ const text = String(value).trim()
35
+ return text || null
36
+ }
37
+
38
+ const ADJUST_INSTANCE_URL = `/api/v1/Instance/Rpt/AdjustInstance`
39
+
40
+ async function postAdjustInstance(data: GenAiAdjustInstanceParams) {
41
+ const response = await postReqeust({
42
+ url: ADJUST_INSTANCE_URL,
43
+ data,
44
+ })
45
+ if (response) return response
46
+ throw new Error('暫無數據')
47
+ }
48
+
49
+ /** AdjustInstance 返回文本:prompt / 連貫性檢查正文 / instanceContents */
50
+ export function pickAdjustInstanceText(data: unknown): string {
51
+ if (typeof data === 'string') return data.trim()
52
+ if (!data || typeof data !== 'object') return ''
53
+ const rec = data as Record<string, unknown>
54
+ const fromField = String(
55
+ rec.promptDetail ?? rec.prompt ?? rec.sectionContent ?? rec.coherenceCheckContentText ?? ''
56
+ ).trim()
57
+ if (fromField) return fromField
58
+ const contents = Array.isArray(rec.instanceContents) ? rec.instanceContents : []
59
+ return contents
60
+ .map((item) => {
61
+ const row = item as Record<string, unknown>
62
+ const title = String(row.sectionTitle ?? '').trim()
63
+ const body = String(row.sectionContent ?? '').trim()
64
+ if (title && body) return `## ${title}\n\n${body}`
65
+ return body || title
66
+ })
67
+ .filter(Boolean)
68
+ .join('\n\n')
69
+ }
70
+
71
+ function isChartStreamDone(payload: string) {
72
+ const doneFlag = payload.trim()
73
+ return doneFlag === '[DONE]' || doneFlag === 'DONE' || doneFlag === 'Done'
74
+ }
75
+
76
+ function isChartStreamErrorEvent(event: string) {
77
+ return event.trim().toLowerCase() === 'error'
78
+ }
79
+
80
+ function pickChartStreamJsonError(payload: unknown): string | null {
81
+ if (!payload || typeof payload !== 'object') {
82
+ if (typeof payload !== 'string') return null
83
+ const text = payload.trim()
84
+ if (!text.startsWith('{')) return null
85
+ try {
86
+ return pickChartStreamJsonError(JSON.parse(text))
87
+ } catch {
88
+ return null
89
+ }
90
+ }
91
+ const json = payload as Record<string, unknown>
92
+ const header = json.respHeader
93
+ if (!header || typeof header !== 'object') return null
94
+ const rec = header as Record<string, unknown>
95
+ const err = rec.respError
96
+ if (err && typeof err === 'object') {
97
+ const e = err as Record<string, unknown>
98
+ const msg = e.errMsg || e.errAddMsg
99
+ if (msg != null && String(msg).trim()) return String(msg)
100
+ }
101
+ if (String(rec.respStatus ?? '') === '01') return '接口异常'
102
+ return null
103
+ }
104
+
105
+ /**
106
+ * POST /api/v1/ai/chartAsStream
107
+ * token / Content-Type 由 streamPostSse(同 postReqeust)處理
108
+ * signal:調用方 AbortController,用於取消進行中的 SSE(切頁 / 再次點擊生成)
109
+ */
110
+ const CHART_AUDIT_EVENT_STORAGE_KEY = 'gen-ai-chapter-chart-audit-event-id'
111
+ const AUDIT_EVENT_UUID_RE =
112
+ /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i
113
+
114
+ export type ChartAsStreamRefPayload = {
115
+ chunkId: string
116
+ filePath?: string
117
+ filePreviewUrl?: string
118
+ index: number
119
+ sourceName?: string
120
+ sourceText?: string
121
+ }
122
+
123
+ export type StreamChartAsStreamOptions = {
124
+ /** SSE event:AUDIT-EVENT 的 data(審計 ID 字符串) */
125
+ onAuditEvent?: (auditEventId: string) => void
126
+ /** SSE event:REF 的 data(引用 JSON,不當正文 yield) */
127
+ onRefEvent?: (ref: ChartAsStreamRefPayload) => void
128
+ }
129
+
130
+ function parseChartAsStreamRefPayload(raw: string): ChartAsStreamRefPayload | null {
131
+ const text = String(raw ?? '').trim()
132
+ if (!text || text[0] !== '{') return null
133
+ try {
134
+ const o = JSON.parse(text) as Record<string, unknown>
135
+ const chunkId = String(o.chunkId ?? o.chunkld ?? '').trim()
136
+ const indexRaw = Number(o.index)
137
+ const index = Number.isFinite(indexRaw) && indexRaw > 0 ? Math.floor(indexRaw) : 0
138
+ if (!chunkId || !index) return null
139
+ return {
140
+ chunkId,
141
+ filePath: String(o.filePath ?? '').trim() || undefined,
142
+ filePreviewUrl: String(o.filePreviewUrl ?? '').trim() || undefined,
143
+ index,
144
+ sourceName: String(o.sourceName ?? '').trim() || undefined,
145
+ sourceText: String(o.sourceText ?? '').trim() || undefined,
146
+ }
147
+ } catch {
148
+ return null
149
+ }
150
+ }
151
+
152
+ function isRefEventName(eventName: string) {
153
+ return String(eventName ?? '').trim().toUpperCase() === 'REF'
154
+ }
155
+
156
+ /** 把 AUDIT-EVENT 的 value(字符串)寫入後續流程(storage + 回調) */
157
+ function commitChartAuditEventId(
158
+ auditEventId: string,
159
+ options?: StreamChartAsStreamOptions
160
+ ) {
161
+ const id = String(auditEventId ?? '').trim()
162
+ if (!id) return
163
+ try {
164
+ sessionStorage.setItem(CHART_AUDIT_EVENT_STORAGE_KEY, id)
165
+ } catch {
166
+ /* ignore */
167
+ }
168
+ options?.onAuditEvent?.(id)
169
+ }
170
+
171
+ function isAuditEventName(eventName: string) {
172
+ const n = String(eventName ?? '')
173
+ .trim()
174
+ .toUpperCase()
175
+ .replace(/[\s_]+/g, '-')
176
+ return n === 'AUDIT-EVENT' || n === 'AUDITEVENT' || n.includes('AUDIT-EVENT')
177
+ }
178
+
179
+ async function* streamChartAsStreamLive(
180
+ data: GenAiChartAsStreamParams,
181
+ signal?: AbortSignal,
182
+ options?: StreamChartAsStreamOptions
183
+ ): AsyncGenerator<string> {
184
+ let pendingAuditEvent = false
185
+ try {
186
+ for await (const block of streamPostSse({
187
+ url: `/api/v1/ai/chartAsStream`,
188
+ data,
189
+ signal,
190
+ })) {
191
+ const eventName = String(block.event ?? '').trim()
192
+ // 0914:控制邏輯用 trim;正文 yield 必須保留原串,否則按字母拆包時詞間空格會被吃掉 → TheHongKong
193
+ const rawPayload = String(block.data ?? '')
194
+ const payload = rawPayload.trim()
195
+
196
+ if (isAuditEventName(eventName)) {
197
+ if (payload) {
198
+ commitChartAuditEventId(payload, options)
199
+ pendingAuditEvent = false
200
+ } else {
201
+ pendingAuditEvent = true
202
+ }
203
+ continue
204
+ }
205
+ if (pendingAuditEvent && payload) {
206
+ commitChartAuditEventId(payload, options)
207
+ pendingAuditEvent = false
208
+ // UUID 形狀則不當正文;否則仍可能是誤標,繼續走正文邏輯
209
+ if (AUDIT_EVENT_UUID_RE.test(payload)) continue
210
+ }
211
+
212
+ // Type:REF → 引用 JSON,存起來給 [ref:chunkId] tip,不進打字機正文
213
+ const refPayload = parseChartAsStreamRefPayload(rawPayload)
214
+ if (isRefEventName(eventName) || refPayload) {
215
+ if (refPayload) options?.onRefEvent?.(refPayload)
216
+ continue
217
+ }
218
+
219
+ if (isChartStreamErrorEvent(eventName)) {
220
+ throw new Error(payload || '接口异常')
221
+ }
222
+ const jsonError = pickChartStreamJsonError(payload)
223
+ if (jsonError) throw new Error(jsonError)
224
+ if (isChartStreamDone(payload)) return
225
+ // 默認 / message:正文流
226
+ if (eventName && eventName.toLowerCase() !== 'message') continue
227
+ if (rawPayload.length > 0) yield rawPayload
228
+ // 0914
229
+ }
230
+ } catch (error) {
231
+ console.error('获取streamChartAsStream失败', error)
232
+ throw error
233
+ }
234
+ }
235
+
236
+ const genAiReportEditorApi = {
237
+ /** 查詢章節下拉列表 GenaiReportSectionController/getSectionList */
238
+ fetchGenAiSectionList: async (data: GenAiGetSectionListParams) => {
239
+ try {
240
+ const response = await postReqeust({
241
+ url: `/api/v1/GenaiReportSectionController/getSectionList`,
242
+ data,
243
+ })
244
+ if (response) {
245
+ return response
246
+ } else {
247
+ throw new Error('暫無數據')
248
+ }
249
+ } catch (error) {
250
+ console.error('获取fetchGenAiSectionList失败', error)
251
+ throw error
252
+ }
253
+ },
254
+ /** 更新章節順序 GenaiReportSectionController/updateSectionOrder */
255
+ updateGenAiSectionOrder: async (data: GenAiUpdateSectionOrderParams) => {
256
+ try {
257
+ const response = await postReqeust({
258
+ url: `/api/v1/GenaiReportSectionController/updateSectionOrder`,
259
+ data,
260
+ })
261
+ if (response) {
262
+ return response
263
+ } else {
264
+ throw new Error('暫無數據')
265
+ }
266
+ } catch (error) {
267
+ console.error('获取updateGenAiSectionOrder失败', error)
268
+ throw error
269
+ }
270
+ },
271
+ /**
272
+ * 查詢版本列表 GenaiReportSectionController/getSectionVersionList
273
+ * 調試:返回項中 versionNo、hasOldAiContent 在「保存/存為草稿」須原值回傳;draftFlag 等為 Y/N
274
+ */
275
+ fetchGenAiSectionVersionList: async (data: GenAiGetSectionVersionListParams) => {
276
+ try {
277
+ const response = await postReqeust({
278
+ url: `/api/v1/GenaiReportSectionController/getSectionVersionList`,
279
+ data,
280
+ })
281
+ if (response) {
282
+ return response
283
+ } else {
284
+ throw new Error('暫無數據')
285
+ }
286
+ } catch (error) {
287
+ console.error('获取fetchGenAiSectionVersionList失败', error)
288
+ throw error
289
+ }
290
+ },
291
+ /**
292
+ * 更新版本名稱 GenaiReportSectionController/updateSectionVersionName
293
+ * 調試:章節歷史重命名點確認時調用;objectName=更新後名稱
294
+ */
295
+ updateGenAiSectionVersionName: async (data: GenAiUpdateSectionVersionNameParams) => {
296
+ try {
297
+ const response = await postReqeust({
298
+ url: `/api/v1/GenaiReportSectionController/updateSectionVersionName`,
299
+ data,
300
+ })
301
+ if (response) {
302
+ return response
303
+ } else {
304
+ throw new Error('暫無數據')
305
+ }
306
+ } catch (error) {
307
+ console.error('获取updateGenAiSectionVersionName失败', error)
308
+ throw error
309
+ }
310
+ },
311
+ /**
312
+ * 更新章節狀態(點編輯時調用) GenaiReportSectionController/changeSectionStatus
313
+ * 調試:action 傳 "EDIT" → 後臺將該章節狀態更新為 EDITING
314
+ */
315
+ changeGenAiSectionStatus: async (data: GenAiChangeSectionStatusParams) => {
316
+ try {
317
+ const response = await postReqeust({
318
+ url: `/api/v1/GenaiReportSectionController/changeSectionStatus`,
319
+ data,
320
+ })
321
+ if (response) {
322
+ return response
323
+ } else {
324
+ throw new Error('暫無數據')
325
+ }
326
+ } catch (error) {
327
+ console.error('获取changeGenAiSectionStatus失败', error)
328
+ throw error
329
+ }
330
+ },
331
+ /**
332
+ * 版本[保存]/[存為草稿] GenaiReportSectionController/saveSectionVersion
333
+ * 調試:
334
+ * - draftFlag "N"=保存 / "Y"=存為草稿
335
+ * - instanceId/sectionId/versionId/versionNo/hasOldAiContent 用 getSectionVersionList 原值
336
+ * - 存草稿時 contentText 可空,後臺不存該字段
337
+ */
338
+ saveGenAiSectionVersion: async (data: GenAiSaveSectionVersionParams) => {
339
+ try {
340
+ const response = await postReqeust({
341
+ url: `/api/v1/GenaiReportSectionController/saveSectionVersion`,
342
+ data,
343
+ })
344
+ if (response) {
345
+ return response
346
+ } else {
347
+ throw new Error('暫無數據')
348
+ }
349
+ } catch (error) {
350
+ console.error('获取saveGenAiSectionVersion失败', error)
351
+ throw error
352
+ }
353
+ },
354
+ /**
355
+ * 刪除版本及草稿 GenaiReportSectionController/deleteSectionVersion
356
+ * 調試:傳要刪除的 versionId + 操作人(updateUserId/Name/UnitSeq)
357
+ */
358
+ deleteGenAiSectionVersion: async (data: GenAiDeleteSectionVersionParams) => {
359
+ try {
360
+ const response = await postReqeust({
361
+ url: `/api/v1/GenaiReportSectionController/deleteSectionVersion`,
362
+ data,
363
+ })
364
+ if (response) {
365
+ return response
366
+ } else {
367
+ throw new Error('暫無數據')
368
+ }
369
+ } catch (error) {
370
+ console.error('获取deleteGenAiSectionVersion失败', error)
371
+ throw error
372
+ }
373
+ },
374
+ /**
375
+ * POST /api/v1/Instance/Rpt/AdjustInstance
376
+ * 報告頁僅 instanceId;AI_PROMPT / COHERENCE_CHECK_PROMPT / 生成章節 走同一接口
377
+ */
378
+ adjustGenAiInstance: async (data: GenAiAdjustInstanceParams) => {
379
+ try {
380
+ return await postAdjustInstance(data)
381
+ } catch (error) {
382
+ console.error('获取adjustGenAiInstance失败', error)
383
+ throw error
384
+ }
385
+ },
386
+ /** 生成章節內容(舊):AdjustInstance */
387
+ generateGenAiSectionContent: async (data: GenAiGenerateSectionContentParams) => {
388
+ try {
389
+ return await postAdjustInstance(data)
390
+ } catch (error) {
391
+ console.error('获取generateGenAiSectionContent失败', error)
392
+ throw error
393
+ }
394
+ },
395
+ /** 智能化生成 Prompt:AdjustInstance promptType=AI_PROMPT */
396
+ generateGenAiPrompt: async (data: GenAiGenerateAiPromptParams) => {
397
+ try {
398
+ return await postAdjustInstance(data)
399
+ } catch (error) {
400
+ console.error('获取generateGenAiPrompt失败', error)
401
+ throw error
402
+ }
403
+ },
404
+ /** 報告連貫性檢查:AdjustInstance promptType=COHERENCE_CHECK_PROMPT */
405
+ coherenceCheckAdjustInstance: async (data: GenAiCoherenceCheckAdjustParams) => {
406
+ try {
407
+ return await postAdjustInstance(data)
408
+ } catch (error) {
409
+ console.error('获取coherenceCheckAdjustInstance失败', error)
410
+ throw error
411
+ }
412
+ },
413
+ /** 生成章節 / 報告 SSE:POST /api/v1/ai/chartAsStream(僅真實流,無本地 Mock 回落) */
414
+ streamChartAsStream: async function* (
415
+ data: GenAiChartAsStreamParams,
416
+ signal?: AbortSignal,
417
+ options?: StreamChartAsStreamOptions
418
+ ): AsyncGenerator<string> {
419
+ yield* streamChartAsStreamLive(data, signal, options)
420
+ },
421
+ /**
422
+ * 報告歷史查詢 Instance/Rpt/InstHistEnquiry
423
+ * 調試:參數僅 instanceId;返回 data.instanceVersionVOList
424
+ * (sectionIdList / sectionVersionIdList 為逗號分隔字符串)
425
+ */
426
+ fetchGenAiInstanceHist: async (data: GenAiInstHistEnquiryParams) => {
427
+ try {
428
+ const response = await postReqeust({
429
+ url: `/api/v1/Instance/Rpt/InstHistEnquiry`,
430
+ data,
431
+ })
432
+ if (response) {
433
+ return response
434
+ } else {
435
+ throw new Error('暫無數據')
436
+ }
437
+ } catch (error) {
438
+ console.error('获取fetchGenAiInstanceHist失败', error)
439
+ throw error
440
+ }
441
+ },
442
+ /**
443
+ * 調整報告設置 Instance/Rpt/AdjustInstanceSetting
444
+ * 調試:勾選章節 / 拖動排序後調用;全部不選不調用
445
+ * versionIdList = 已勾選章節版本 UUID(上→下)
446
+ */
447
+ adjustGenAiInstanceSetting: async (data: GenAiAdjustInstanceSettingParams) => {
448
+ try {
449
+ const response = await postReqeust({
450
+ url: `/api/v1/Instance/Rpt/AdjustInstanceSetting`,
451
+ data,
452
+ })
453
+ if (response) {
454
+ return response
455
+ } else {
456
+ throw new Error('暫無數據')
457
+ }
458
+ } catch (error) {
459
+ console.error('获取adjustGenAiInstanceSetting失败', error)
460
+ throw error
461
+ }
462
+ },
463
+ /**
464
+ * 報告定稿 Instance/Rpt/FinalInstance
465
+ * 調試:生成報告設置頁點「生成報告」後調用
466
+ * versionIdList = 已勾選章節版本 UUID(上→下)
467
+ */
468
+ finalGenAiInstance: async (data: GenAiFinalInstanceParams) => {
469
+ try {
470
+ const response = await postReqeust({
471
+ url: `/api/v1/Instance/Rpt/FinalInstance`,
472
+ data,
473
+ })
474
+ if (response) {
475
+ return response
476
+ } else {
477
+ throw new Error('暫無數據')
478
+ }
479
+ } catch (error) {
480
+ console.error('获取finalGenAiInstance失败', error)
481
+ throw error
482
+ }
483
+ },
484
+ /**
485
+ * 繁簡轉換 Instance/Rpt/SimTradTransfer
486
+ * 調試:生成報告設置語言下拉;targetLang CHS=簡體 / CHT=繁體
487
+ */
488
+ simTradTransferGenAiInstance: async (data: GenAiSimTradTransferParams) => {
489
+ try {
490
+ const response = await postReqeust({
491
+ url: `/api/v1/Instance/Rpt/SimTradTransfer`,
492
+ data,
493
+ })
494
+ if (response) {
495
+ return response
496
+ } else {
497
+ throw new Error('暫無數據')
498
+ }
499
+ } catch (error) {
500
+ console.error('获取simTradTransferGenAiInstance失败', error)
501
+ throw error
502
+ }
503
+ },
504
+ /**
505
+ * 報告連貫性檢查 Instance/Rpt/CoherenceCheck
506
+ * 調試:生成報告設置「報告連貫性檢查」
507
+ */
508
+ coherenceCheckGenAiInstance: async (data: GenAiCoherenceCheckParams) => {
509
+ try {
510
+ const response = await postReqeust({
511
+ url: `/api/v1/Instance/Rpt/CoherenceCheck`,
512
+ data,
513
+ })
514
+ if (response) {
515
+ return response
516
+ } else {
517
+ throw new Error('暫無數據')
518
+ }
519
+ } catch (error) {
520
+ console.error('获取coherenceCheckGenAiInstance失败', error)
521
+ throw error
522
+ }
523
+ },
524
+ }
525
+
526
+ export default genAiReportEditorApi
@@ -0,0 +1,64 @@
1
+ import { postRequest } from '@/api/request'
2
+
3
+ /** 與歷史代碼 postReqeust 同名別名 */
4
+ const postReqeust = postRequest
5
+
6
+ export type GenAiReportPermissionEditorItem = {
7
+ instanceId?: string | null
8
+ seq?: number | null
9
+ userId?: string | null
10
+ userName?: string | null
11
+ userRole?: string | null
12
+ userUnitSeq?: string | null
13
+ userUnitSeqDesc?: string | null
14
+ updateDatetime?: string | null
15
+ updateUserId?: string | null
16
+ updateUserName?: string | null
17
+ updateUserUnitSeq?: string | null
18
+ updateUserUnitSeqDesc?: string | null
19
+ }
20
+
21
+ export type GenAiReportPermissionListParams = {
22
+ categoryId?: number
23
+ instanceId?: string
24
+ }
25
+
26
+ export type GenAiReportPermissionEditorListParams = {
27
+ instanceId?: string
28
+ }
29
+
30
+ const genAiReportPermissionApi = {
31
+ /** 報告編輯者 / 角色列表 */
32
+ fetchGenAiReportPermissionList: async (data: GenAiReportPermissionListParams = {}) => {
33
+ try {
34
+ const response = await postReqeust({
35
+ url: `/api/v1/GenaiReportPermissionController/getPermissionList`,
36
+ data,
37
+ })
38
+ if (response) return response
39
+ throw new Error('暫無數據')
40
+ } catch (error) {
41
+ console.error('获取fetchGenAiReportPermissionList失败', error)
42
+ throw error
43
+ }
44
+ },
45
+
46
+ /** 可選編輯者列表(導出小組成員) */
47
+ fetchGenAiReportPermissionEditorList: async (
48
+ data: GenAiReportPermissionEditorListParams = {}
49
+ ) => {
50
+ try {
51
+ const response = await postReqeust({
52
+ url: `/api/v1/GenaiReportPermissionController/getEditorList`,
53
+ data,
54
+ })
55
+ if (response) return response
56
+ throw new Error('暫無數據')
57
+ } catch (error) {
58
+ console.error('获取fetchGenAiReportPermissionEditorList失败', error)
59
+ throw error
60
+ }
61
+ },
62
+ }
63
+
64
+ export default genAiReportPermissionApi