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.
- package/package.json +12 -0
- package/src/App.vue +44 -0
- package/src/api/index.ts +19 -0
- package/src/api/modules/build-report/reportEditor.ts +526 -0
- package/src/api/modules/build-report/reportPermission.ts +64 -0
- package/src/api/modules/index.ts +69 -0
- package/src/api/modules/industry/green_mortgage.ts +42 -0
- package/src/api/modules/user/index.ts +4 -0
- package/src/api/request.ts +124 -0
- package/src/assets/sample-access-icon.png +0 -0
- package/src/assets/sample-pie-chart.png +0 -0
- package/src/assets/vue.svg +1 -0
- package/src/components/CapsuleScrollbar.vue +7 -0
- package/src/components/Export/ExcelExport.vue +592 -0
- package/src/components/Export/ExcelExport2.vue +494 -0
- package/src/components/Export/ExcelExport3.vue +342 -0
- package/src/components/Export/ExcelExport4.vue +665 -0
- package/src/components/Export/excelExport.js +547 -0
- package/src/components/Export/excelExport.ts +551 -0
- package/src/components/GEN-AI/index.vue +140 -0
- package/src/components/GEN-AI/index1.vue +422 -0
- package/src/components/GEN-AI/index10.vue +5 -0
- package/src/components/GEN-AI/index2.vue +548 -0
- package/src/components/GEN-AI/index3.vue +605 -0
- package/src/components/GEN-AI/index4.vue +609 -0
- package/src/components/GEN-AI/index5.vue +558 -0
- package/src/components/GEN-AI/index6.vue +634 -0
- package/src/components/GEN-AI/index7.vue +688 -0
- package/src/components/GEN-AI/index8.vue +458 -0
- package/src/components/GEN-AI/index9.vue +1217 -0
- package/src/components/GEN-AI/types.ts +12 -0
- package/src/components/GEN-AI/utils.ts +42 -0
- package/src/components/HelloWorld.vue +41 -0
- package/src/components/PageCard.vue +124 -0
- package/src/components/PageHeader.vue +32 -0
- package/src/components/backup/index5 copy.vue +556 -0
- package/src/components/backup/index5.vue +620 -0
- package/src/components/backup/index9 copy.vue +1029 -0
- package/src/components/backup/index9-pro.vue +1065 -0
- package/src/components/backup/index9.vue +1057 -0
- package/src/directives/btnLoading.ts +455 -0
- package/src/directives/debounce copy.ts +670 -0
- package/src/directives/debounce.ts +98 -0
- package/src/directives/index.ts +25 -0
- package/src/layouts/MainLayout.vue +129 -0
- package/src/main.ts +76 -0
- package/src/router/index.ts +142 -0
- package/src/router/menus.ts +28 -0
- package/src/store/modules/gen-ai/index.ts +1 -0
- package/src/store/modules/gen-ai/reportBuild.ts +37 -0
- package/src/style.css +79 -0
- package/src/styles/report-config-popover.css +39 -0
- package/src/styles/report-icon-btn.css +19 -0
- package/src/test/mock.ts +101 -0
- package/src/test/test1.vue +402 -0
- package/src/test/test2.vue +1689 -0
- package/src/types/gen-ai/build-report/reportEditor.ts +684 -0
- package/src/utils/function.ts +46 -0
- package/src/utils/gen-ai-navigation.ts +1 -0
- package/src/utils/gen-ai-scroll.ts +1 -0
- package/src/utils/openDataLoaderWordExport.ts +33 -0
- package/src/utils/pageScrollbar.ts +115 -0
- package/src/utils/randomTranscode.ts +87 -0
- package/src/utils/reportPdfExport.ts +44 -0
- package/src/views/Blank.vue +68 -0
- package/src/views/Home.vue +29 -0
- package/src/views/TemplateCenter/Knowledge.ts +83 -0
- package/src/views/TemplateCenter/data.d.ts +10 -0
- package/src/views/TemplateCenter/index.vue +1128 -0
- package/src/views/TemplateCenter/service.ts +69 -0
- package/src/views/gen-ai/build-report/chartStreamRefs.ts +174 -0
- package/src/views/gen-ai/build-report/coherence-check/index.vue +559 -0
- package/src/views/gen-ai/build-report/components/ReportChapterWorkspace.vue +4258 -0
- package/src/views/gen-ai/build-report/components/ReportConfigPanel.vue +727 -0
- package/src/views/gen-ai/build-report/components/ReportGenerateSettingsPanel.vue +2361 -0
- package/src/views/gen-ai/build-report/components/ReportGeneratingPanel.vue +1765 -0
- package/src/views/gen-ai/build-report/components/ReportPromptPanel.vue +614 -0
- package/src/views/gen-ai/build-report/components/ReportSourceFileSummary.vue +656 -0
- package/src/views/gen-ai/build-report/components/ReportSourcesPanel.vue +1327 -0
- package/src/views/gen-ai/build-report/components/ReportTemplateDetail.vue +191 -0
- package/src/views/gen-ai/build-report/components/ReportTemplateEditorFormPanel.vue +667 -0
- package/src/views/gen-ai/build-report/components/ReportTemplatePicker.vue +302 -0
- package/src/views/gen-ai/build-report/components/ReportWorkflowSidebar.vue +148 -0
- package/src/views/gen-ai/build-report/components/paramsSetting.vue +886 -0
- package/src/views/gen-ai/build-report/components/reportEdit.vue +2283 -0
- package/src/views/gen-ai/build-report/index.vue +856 -0
- package/src/views/gen-ai/build-report/report-domain.ts +1133 -0
- package/src/views/gen-ai/build-report/report-template-data.ts +295 -0
- package/src/views/gen-ai/build-report/useReportWorkflow.ts +1408 -0
- package/src/views/gen-ai/common/assets/NotoSans-SC.woff2 +0 -0
- package/src/views/gen-ai/common/assets/NotoSans-TC.woff2 +0 -0
- package/src/views/gen-ai/common/assets/NotoSans.woff2 +0 -0
- package/src/views/gen-ai/common/assets/fonts.css +278 -0
- package/src/views/gen-ai/common/assets/pagination.css +163 -0
- package/src/views/gen-ai/common/directives/btnLoading.ts +455 -0
- package/src/views/gen-ai/common/directives/debounce.ts +98 -0
- package/src/views/gen-ai/common/directives/index.ts +30 -0
- package/src/views/gen-ai/common/en.md +417 -0
- package/src/views/gen-ai/common/index.ts +36 -0
- package/src/views/gen-ai/common/types/component-expose.ts +9 -0
- package/src/views/gen-ai/common/utils/api-res-status.ts +7 -0
- package/src/views/gen-ai/common/utils/navigation.ts +59 -0
- package/src/views/gen-ai/common/utils/remote-request.ts +45 -0
- package/src/views/gen-ai/common/utils/scroll.ts +577 -0
- package/src/views/gen-ai/components/AIExport/docx-export.ts +950 -0
- package/src/views/gen-ai/components/AIExport/docxExport.ts +2566 -0
- package/src/views/gen-ai/components/AIExport/index.ts +52 -0
- package/src/views/gen-ai/components/AIExport/parseMarkdownHtml.ts +649 -0
- package/src/views/gen-ai/components/CapsuleScrollbar.vue +149 -0
- package/src/views/gen-ai/components/ChapterTitleScroll.vue +468 -0
- package/src/views/gen-ai/components/EntryHeroNavCards.vue +379 -0
- package/src/views/gen-ai/components/GenAiPagination.vue +52 -0
- package/src/views/gen-ai/components/ModelCard.vue +1114 -0
- package/src/views/gen-ai/components/Preview/FilePreviewPage.vue +947 -0
- package/src/views/gen-ai/components/Preview/PreviewCapsuleScroll.vue +205 -0
- package/src/views/gen-ai/components/Preview/PreviewOutlineTree.vue +148 -0
- package/src/views/gen-ai/components/Preview/index.ts +11 -0
- package/src/views/gen-ai/components/Preview/preview.ts +722 -0
- package/src/views/gen-ai/components/PromptField.vue +505 -0
- package/src/views/gen-ai/components/RecentReportsTable.vue +974 -0
- package/src/views/gen-ai/components/ReportCollapsibleSection.vue +172 -0
- package/src/views/gen-ai/components/ReportHistoryList.vue +637 -0
- package/src/views/gen-ai/components/ReportSectionConfirmPopover.vue +251 -0
- package/src/views/gen-ai/components/editor/ChapterTiptapEditor.vue +3139 -0
- package/src/views/gen-ai/components/editor/StructureBlockView.vue +441 -0
- package/src/views/gen-ai/components/editor/TiptapToolbar.vue +1036 -0
- package/src/views/gen-ai/components/editor/TypewriterDocEditor.vue +398 -0
- package/src/views/gen-ai/components/editor/_StructureOrgNode.vue +326 -0
- package/src/views/gen-ai/components/editor/index.ts +12 -0
- package/src/views/gen-ai/components/editor/parseMarkdownHtml.ts +667 -0
- package/src/views/gen-ai/gen-entry/api/index.ts +32 -0
- package/src/views/gen-ai/gen-entry/index.vue +287 -0
- package/src/views/gen-ai/gen-entry/types/index.ts +4 -0
- package/src/views/gen-ai/i.mark +2 -0
- package/src/views/gen-ai/management-center/index.vue +1815 -0
- package/src/views/gen-ai/management-center/mockData.ts +248 -0
- package/src/views/gen-ai/management-center/types/index.ts +37 -0
- package/src/views/gen-ai/model-manager/TemplateEditorFormPanel.vue +661 -0
- package/src/views/gen-ai/model-manager/api/index.ts +32 -0
- package/src/views/gen-ai/model-manager/api/mockApi.ts +33 -0
- package/src/views/gen-ai/model-manager/index.vue +1583 -0
- package/src/views/gen-ai/model-manager/mockData.ts +177 -0
- package/src/views/gen-ai/model-manager/template-detail-shared.ts +154 -0
- package/src/views/gen-ai/model-manager/template-editor.vue +345 -0
- package/src/views/gen-ai/model-manager/types/index.ts +40 -0
- package/src/views/gen-ai/model-manager/utils.ts +25 -0
- package/src/views/greenMortgage.vue +1834 -0
- package/src/vite-env.d.ts +46 -0
package/package.json
ADDED
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>
|
package/src/api/index.ts
ADDED
|
@@ -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
|