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
@@ -0,0 +1,69 @@
1
+ import { getToken, streamPostSse } from '../request'
2
+
3
+ /** @deprecated 已移除本地 Mock;保留導出避免舊引用報錯,恒為 false */
4
+ export const REPORT_STREAM_USE_MOCK = false
5
+
6
+ export const REPORT_STREAM_API_URL =
7
+ import.meta.env.VITE_REPORT_STREAM_URL || '/sse/aiStream'
8
+
9
+ /** @deprecated 已移除 Mock 正文;舊頁面若仍引用則為空字串 */
10
+ export const MOCK_REPORT_STREAM_TEXT = ''
11
+
12
+ export interface GenerateReportParams {
13
+ userId?: string
14
+ question?: string
15
+ chapters?: string[]
16
+ chapterVersions?: Record<string, string>
17
+ reportMode?: string
18
+ }
19
+
20
+ export interface AiStreamParams {
21
+ userId: string
22
+ question: string
23
+ }
24
+
25
+ async function* streamAiReportSse(
26
+ params: AiStreamParams,
27
+ signal?: AbortSignal
28
+ ): AsyncGenerator<string> {
29
+ for await (const block of streamPostSse({
30
+ url: REPORT_STREAM_API_URL,
31
+ data: params,
32
+ signal,
33
+ })) {
34
+ if (block.event === 'text') {
35
+ yield block.data
36
+ }
37
+ if (block.event === 'end') {
38
+ return
39
+ }
40
+ }
41
+ }
42
+
43
+ /** 与 basicInformationApi 同风格的 reportApi */
44
+ export const reportApi = {
45
+ getToken,
46
+
47
+ /** SSE 流式生成报告(POST + Token,event: text / end) */
48
+ async *streamAiReport(params: AiStreamParams, signal?: AbortSignal) {
49
+ yield* streamAiReportSse(params, signal)
50
+ },
51
+
52
+ async *generateReport(params: GenerateReportParams, signal?: AbortSignal) {
53
+ yield* streamGenerateReport(params, signal)
54
+ },
55
+ }
56
+
57
+ /** 僅真實 SSE;不再回落本地 Mock 正文 */
58
+ export async function* streamGenerateReport(
59
+ params: GenerateReportParams,
60
+ signal?: AbortSignal
61
+ ): AsyncGenerator<string> {
62
+ yield* streamAiReportSse(
63
+ {
64
+ userId: params.userId ?? 'user001',
65
+ question: params.question ?? '介绍一下SSE流式传输',
66
+ },
67
+ signal
68
+ )
69
+ }
@@ -0,0 +1,42 @@
1
+ import { postRequest } from '@/api/request'
2
+
3
+ export interface GreenMortgageQueryParams {
4
+ endYear: string
5
+ ratingList: string[]
6
+ startYear: string
7
+ }
8
+
9
+ export interface GreenMortgageApiResponse<T = unknown> {
10
+ data?: T
11
+ success?: boolean
12
+ message?: string
13
+ code?: string
14
+ }
15
+
16
+ export type GreenMortgageRatingsData = string[]
17
+
18
+ /** 評級選項 */
19
+ const GREEN_MORTGAGE_RATINGS_URL =
20
+ '/api/v1/Industry/GreenMortgage/GetGreenMortgageRatings'
21
+
22
+ /** 查詢列表 */
23
+ const GREEN_MORTGAGE_QUERY_URL =
24
+ '/api/v1/Industry/GreenMortgage/GetGreenMortgageQuery'
25
+
26
+ const greenMortgageApi = {
27
+ getGreenMortgageRatings() {
28
+ return postRequest<GreenMortgageApiResponse<GreenMortgageRatingsData>>({
29
+ url: GREEN_MORTGAGE_RATINGS_URL,
30
+ data: {},
31
+ })
32
+ },
33
+
34
+ getGreenMortgageQuery(params: GreenMortgageQueryParams) {
35
+ return postRequest<GreenMortgageApiResponse>({
36
+ url: GREEN_MORTGAGE_QUERY_URL,
37
+ data: params,
38
+ })
39
+ },
40
+ }
41
+
42
+ export default greenMortgageApi
@@ -0,0 +1,4 @@
1
+ /** 用户相关 API(占位,按业务扩展) */
2
+ const userApi = {}
3
+
4
+ export default userApi
@@ -0,0 +1,124 @@
1
+ export interface PostRequestOptions {
2
+ url: string
3
+ data?: unknown
4
+ signal?: AbortSignal
5
+ }
6
+
7
+ export function getToken(): string {
8
+ return localStorage.getItem('token') || ''
9
+ }
10
+
11
+ export function buildAuthHeaders(): HeadersInit {
12
+ const token = getToken()
13
+ return {
14
+ 'Content-Type': 'application/json',
15
+ ...(token ? { Authorization: `Bearer ${token}` } : {}),
16
+ }
17
+ }
18
+
19
+ /** 普通 POST JSON 請求(已含 method / Content-Type / Authorization) */
20
+ export async function postRequest<T = unknown>(options: PostRequestOptions): Promise<T> {
21
+ const response = await fetch(options.url, {
22
+ method: 'POST',
23
+ headers: buildAuthHeaders(),
24
+ body: JSON.stringify(options.data ?? {}),
25
+ signal: options.signal,
26
+ })
27
+
28
+ if (!response.ok) {
29
+ throw new Error(`請求失敗 ${response.status}`)
30
+ }
31
+
32
+ return response.json() as Promise<T>
33
+ }
34
+
35
+ /** SSE POST 請求(與 postRequest 相同 headers,返回原始 Response 供流式讀取) */
36
+ export async function postStreamRequest(options: PostRequestOptions): Promise<Response> {
37
+ const response = await fetch(options.url, {
38
+ method: 'POST',
39
+ headers: buildAuthHeaders(),
40
+ body: JSON.stringify(options.data ?? {}),
41
+ signal: options.signal,
42
+ })
43
+
44
+ if (!response.ok) {
45
+ throw new Error(`請求失敗 ${response.status}`)
46
+ }
47
+
48
+ return response
49
+ }
50
+
51
+ export interface SseBlock {
52
+ event: string
53
+ data: string
54
+ }
55
+
56
+ function parseSseBlock(block: string): SseBlock | null {
57
+ if (!block.trim()) return null
58
+
59
+ let event = ''
60
+ let data = ''
61
+ for (const rawLine of block.split(/\r?\n/)) {
62
+ const line = rawLine.replace(/^\uFEFF/, '')
63
+ if (/^event\s*:/i.test(line)) {
64
+ event = line.replace(/^event\s*:/i, '').trim()
65
+ } else if (/^data\s*:/i.test(line)) {
66
+ // 0916-1:data: 後剝一個可選空格。按字母分包時詞間空格常是「data: 」,
67
+ // strip 後變空會被上層跳過 → Themanufacturing;空包則還原為一個空格
68
+ const afterColon = line.replace(/^data\s*:/i, '')
69
+ let piece = afterColon.startsWith(' ') ? afterColon.slice(1) : afterColon
70
+ if (!piece && afterColon.startsWith(' ')) piece = ' '
71
+ data = data ? `${data}\n${piece}` : piece
72
+ // 0916-1
73
+ }
74
+ }
75
+ if (!event && /AUDIT-EVENT/i.test(block)) {
76
+ event = 'AUDIT-EVENT'
77
+ if (!data) {
78
+ const m = block.match(/data\s*:\s*([^\r\n]+)/i)
79
+ if (m?.[1]) data = m[1].trim()
80
+ }
81
+ }
82
+ if (!event && /^event\s*:\s*REF\b/im.test(block)) {
83
+ event = 'REF'
84
+ }
85
+
86
+ return { event, data }
87
+ }
88
+
89
+ /** SSE POST 流(event: text / end),基于 postRequest 同款 headers */
90
+ export async function* streamPostSse(options: PostRequestOptions): AsyncGenerator<SseBlock> {
91
+ const response = await postStreamRequest(options)
92
+ const stream = response.body
93
+ if (!stream) {
94
+ throw new Error('暫無數據')
95
+ }
96
+ const reader: ReadableStreamDefaultReader<Uint8Array> = stream.getReader()
97
+
98
+ const decoder = new TextDecoder('utf-8')
99
+ let buffer = ''
100
+
101
+ try {
102
+ while (true) {
103
+ const { done, value } = await reader.read()
104
+ if (done) break
105
+ if (!value) continue
106
+
107
+ buffer += decoder.decode(value, { stream: true }).replace(/\r\n/g, '\n').replace(/\r/g, '\n')
108
+ const blocks = buffer.split('\n\n')
109
+ buffer = blocks.pop() || ''
110
+
111
+ for (const block of blocks) {
112
+ const parsed = parseSseBlock(block)
113
+ if (parsed) yield parsed
114
+ }
115
+ }
116
+
117
+ if (buffer.trim()) {
118
+ const parsed = parseSseBlock(buffer)
119
+ if (parsed) yield parsed
120
+ }
121
+ } finally {
122
+ reader.releaseLock()
123
+ }
124
+ }
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>
@@ -0,0 +1,7 @@
1
+ <script setup lang="ts">
2
+ import InnerCapsuleScrollbar from '@/views/gen-ai/components/CapsuleScrollbar.vue'
3
+ </script>
4
+
5
+ <template>
6
+ <InnerCapsuleScrollbar v-bind="$attrs" />
7
+ </template>