CatPtain commited on
Commit
384fef6
·
verified ·
1 Parent(s): 108f409

Upload 46 files

Browse files
Files changed (41) hide show
  1. frontend/.eslintrc.cjs +77 -0
  2. frontend/.gitignore +30 -0
  3. frontend/commitlint.config.cjs +16 -0
  4. frontend/dist/assets/index-Cr6mZSw1.css +0 -0
  5. frontend/dist/assets/index-Cvmd_Ycm.js +0 -0
  6. frontend/dist/favicon.ico +0 -0
  7. frontend/dist/icons/android-chrome-192x192.png +0 -0
  8. frontend/dist/icons/android-chrome-512x512.png +0 -0
  9. frontend/dist/icons/android-chrome-maskable-192x192.png +0 -0
  10. frontend/dist/icons/android-chrome-maskable-512x512.png +0 -0
  11. frontend/dist/icons/apple-touch-icon-152x152.png +0 -0
  12. frontend/dist/icons/favicon-16x16.png +0 -0
  13. frontend/dist/icons/favicon-32x32.png +0 -0
  14. frontend/dist/index.html +64 -0
  15. frontend/dist/mocks/AIPPT.json +475 -0
  16. frontend/dist/mocks/AIPPT_Outline.md +69 -0
  17. frontend/dist/mocks/slides.json +184 -0
  18. frontend/dist/mocks/template_1.json +0 -0
  19. frontend/dist/test-share.html +39 -0
  20. frontend/fix-mixins.cjs +61 -0
  21. frontend/fix-mixins.js +0 -0
  22. frontend/index.html +63 -0
  23. frontend/package-lock.json +0 -0
  24. frontend/package.json +75 -0
  25. frontend/public/favicon.ico +0 -0
  26. frontend/public/icons/android-chrome-192x192.png +0 -0
  27. frontend/public/icons/android-chrome-512x512.png +0 -0
  28. frontend/public/icons/android-chrome-maskable-192x192.png +0 -0
  29. frontend/public/icons/android-chrome-maskable-512x512.png +0 -0
  30. frontend/public/icons/apple-touch-icon-152x152.png +0 -0
  31. frontend/public/icons/favicon-16x16.png +0 -0
  32. frontend/public/icons/favicon-32x32.png +0 -0
  33. frontend/public/mocks/AIPPT.json +475 -0
  34. frontend/public/mocks/AIPPT_Outline.md +69 -0
  35. frontend/public/mocks/slides.json +184 -0
  36. frontend/public/mocks/template_1.json +0 -0
  37. frontend/public/test-share.html +39 -0
  38. frontend/tsconfig.app.json +13 -0
  39. frontend/tsconfig.json +11 -0
  40. frontend/tsconfig.node.json +19 -0
  41. frontend/vite.config.ts +43 -0
frontend/.eslintrc.cjs ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* eslint-env node */
2
+ require('@rushstack/eslint-patch/modern-module-resolution')
3
+
4
+ module.exports = {
5
+ root: true,
6
+ extends: [
7
+ 'plugin:vue/vue3-essential',
8
+ 'eslint:recommended',
9
+ '@vue/eslint-config-typescript'
10
+ ],
11
+ parserOptions: {
12
+ ecmaVersion: 'latest'
13
+ },
14
+ rules: {
15
+ 'curly': ['error', 'multi-line'],
16
+ 'eqeqeq': ['error', 'always'],
17
+ 'semi': ['error', 'never'],
18
+ 'indent': ['error', 2, {
19
+ 'SwitchCase': 1,
20
+ }],
21
+ 'quotes': ['error', 'single', {
22
+ 'avoidEscape': true,
23
+ 'allowTemplateLiterals': true,
24
+ }],
25
+ 'key-spacing': ['error', {
26
+ 'beforeColon': false,
27
+ 'afterColon': true,
28
+ 'mode': 'strict',
29
+ }],
30
+ 'no-empty': 'error',
31
+ 'no-else-return': 'error',
32
+ 'no-multi-spaces': 'error',
33
+ 'require-await': 'error',
34
+ 'brace-style': ['error', 'stroustrup'],
35
+ 'spaced-comment': ['error', 'always'],
36
+ 'arrow-spacing': 'error',
37
+ 'no-duplicate-imports': 'error',
38
+ 'comma-spacing': ['error', {
39
+ 'before': false,
40
+ 'after': true,
41
+ }],
42
+ 'default-case': 'error',
43
+ 'consistent-this': ['error', '_this'],
44
+ 'max-depth': ['error', 8],
45
+ 'max-lines': ['error', 1000],
46
+ 'no-multi-str': 'error',
47
+ 'space-infix-ops': 'error',
48
+ 'space-before-blocks': ['error', 'always'],
49
+ 'space-before-function-paren': ['error', {
50
+ 'named': 'never',
51
+ 'anonymous': 'never',
52
+ 'asyncArrow': 'always',
53
+ }],
54
+ 'keyword-spacing': ['error'],
55
+ 'prefer-const': 'error',
56
+ 'no-useless-return': 'error',
57
+ 'array-bracket-spacing': 'error',
58
+ 'no-useless-escape': 'off',
59
+ 'no-eval': 'error',
60
+ 'no-var': 'error',
61
+ 'no-with': 'error',
62
+ 'no-alert': 'warn',
63
+ 'no-console': 'warn',
64
+ 'no-debugger': 'error',
65
+ '@typescript-eslint/explicit-module-boundary-types': 'off',
66
+ '@typescript-eslint/ban-types': ['error', {
67
+ 'extendDefaults': true,
68
+ 'types': {
69
+ '{}': false,
70
+ },
71
+ }],
72
+ '@typescript-eslint/no-non-null-assertion': 'off',
73
+ '@typescript-eslint/consistent-type-imports': 'error',
74
+ 'vue/multi-word-component-names': 'off',
75
+ 'vue/no-reserved-component-names': 'off',
76
+ }
77
+ }
frontend/.gitignore ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Logs
2
+ logs
3
+ *.log
4
+ npm-debug.log*
5
+ yarn-debug.log*
6
+ yarn-error.log*
7
+ pnpm-debug.log*
8
+ lerna-debug.log*
9
+
10
+ node_modules
11
+ .DS_Store
12
+ dist
13
+ dist-ssr
14
+ coverage
15
+ *.local
16
+
17
+ /cypress/videos/
18
+ /cypress/screenshots/
19
+
20
+ # Editor directories and files
21
+ .vscode/*
22
+ !.vscode/extensions.json
23
+ .idea
24
+ *.suo
25
+ *.ntvs*
26
+ *.njsproj
27
+ *.sln
28
+ *.sw?
29
+
30
+ *.tsbuildinfo
frontend/commitlint.config.cjs ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * build 编译相关的修改,例如发布版本、对项目构建或者依赖的改动
3
+ * chore 其他修改, 比如改变构建流程、或者增加依赖库、工具等
4
+ * docs 文档修改
5
+ * feat 新特性、新功能
6
+ * fix 修改bug
7
+ * perf 优化相关,比如提升性能、体验
8
+ * refactor 代码重构
9
+ * revert 回滚到上一个版本
10
+ * style 代码格式修改
11
+ * test 测试用例修改
12
+ */
13
+ /* eslint-env node */
14
+ module.exports = {
15
+ extends: ['@commitlint/config-conventional'],
16
+ }
frontend/dist/assets/index-Cr6mZSw1.css ADDED
The diff for this file is too large to render. See raw diff
 
frontend/dist/assets/index-Cvmd_Ycm.js ADDED
The diff for this file is too large to render. See raw diff
 
frontend/dist/favicon.ico ADDED
frontend/dist/icons/android-chrome-192x192.png ADDED
frontend/dist/icons/android-chrome-512x512.png ADDED
frontend/dist/icons/android-chrome-maskable-192x192.png ADDED
frontend/dist/icons/android-chrome-maskable-512x512.png ADDED
frontend/dist/icons/apple-touch-icon-152x152.png ADDED
frontend/dist/icons/favicon-16x16.png ADDED
frontend/dist/icons/favicon-32x32.png ADDED
frontend/dist/index.html ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <link rel="icon" href="./favicon.ico">
6
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
7
+ <meta name="renderer" content="webkit">
8
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
9
+ <meta name="description" content="PPTist - 在线演示文稿(幻灯片)应用,还原了大部分 Office PowerPoint 常用功能,实现在线PPT的编辑、演示,支持导出PPT文件,支持AI生成PPT。" />
10
+ <meta name="keywords" content="pptist,ppt,powerpoint,office powerpoint,在线ppt,幻灯片,演示文稿,ppt在线制作,aippt" />
11
+ <title>PPTist - 在线演示文稿</title>
12
+
13
+ <style>
14
+ .first-screen-loading {
15
+ width: 200px;
16
+ height: 200px;
17
+ position: fixed;
18
+ top: 50%;
19
+ left: 50%;
20
+ margin-top: -100px;
21
+ margin-left: -100px;
22
+ display: flex;
23
+ flex-direction: column;
24
+ justify-content: center;
25
+ align-items: center;
26
+ }
27
+ .first-screen-loading-spinner {
28
+ width: 36px;
29
+ height: 36px;
30
+ border: 3px solid #d14424;
31
+ border-top-color: transparent;
32
+ border-radius: 50%;
33
+ box-sizing: border-box;
34
+ animation: spinner .8s linear infinite;
35
+ }
36
+ .first-screen-loading-text {
37
+ margin-top: 20px;
38
+ color: #d14424;
39
+ }
40
+ @keyframes spinner {
41
+ 0% {
42
+ transform: rotate(0deg);
43
+ }
44
+ 100% {
45
+ transform: rotate(360deg);
46
+ }
47
+ }
48
+ </style>
49
+ <script type="module" crossorigin src="./assets/index-Cvmd_Ycm.js"></script>
50
+ <link rel="stylesheet" crossorigin href="./assets/index-Cr6mZSw1.css">
51
+ </head>
52
+ <body>
53
+ <div id="app">
54
+ <div class="first-screen-loading">
55
+ <div class="first-screen-loading-spinner"></div>
56
+ <div class="first-screen-loading-text">正在加载中,请稍等 ...</div>
57
+ </div>
58
+ </div>
59
+ </body>
60
+
61
+ <script>
62
+ document.oncontextmenu = e => e.preventDefault()
63
+ </script>
64
+ </html>
frontend/dist/mocks/AIPPT.json ADDED
@@ -0,0 +1,475 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "cover",
4
+ "data": {
5
+ "title": "犯罪心理学研究",
6
+ "text": "探索犯罪心理的成因、特征及干预策略,助力犯罪预防与矫治。"
7
+ }
8
+ },
9
+ {
10
+ "type": "contents",
11
+ "data": {
12
+ "items": [
13
+ "犯罪心理学概述",
14
+ "犯罪心理的形成",
15
+ "犯罪类型与心理特征",
16
+ "犯罪心理评估与干预",
17
+ "犯罪心理学的应用",
18
+ "未来发展趋势"
19
+ ]
20
+ }
21
+ },
22
+ {
23
+ "type": "transition",
24
+ "data": {
25
+ "title": "犯罪心理学概述",
26
+ "text": "本章将介绍犯罪心理学的定义、历史、基本理论及其研究领域。"
27
+ }
28
+ },
29
+ {
30
+ "type": "content",
31
+ "data": {
32
+ "title": "定义与历史",
33
+ "items": [
34
+ {
35
+ "title": "犯罪心理学的定义",
36
+ "text": "犯罪心理学是研究犯罪行为及其心理机制的学科,旨在理解犯罪者的心理特征和行为动机。"
37
+ },
38
+ {
39
+ "title": "犯罪心理学的发展历史",
40
+ "text": "犯罪心理学起源于19世纪末,随着心理学和法学的发展逐渐形成独立学科。"
41
+ },
42
+ {
43
+ "title": "主要研究领域",
44
+ "text": "包括犯罪心理成因、犯罪类型分析、犯罪心理评估与干预等。"
45
+ },
46
+ {
47
+ "title": "与其他学科的关系",
48
+ "text": "犯罪心理学与法学、社会学、生物学等学科密切相关,共同探讨犯罪现象。"
49
+ }
50
+ ]
51
+ }
52
+ },
53
+ {
54
+ "type": "content",
55
+ "data": {
56
+ "title": "基本理论",
57
+ "items": [
58
+ {
59
+ "title": "生物学理论",
60
+ "text": "探讨遗传、神经生理等因素对犯罪行为的影响。"
61
+ },
62
+ {
63
+ "title": "心理学理论",
64
+ "text": "分析人格、认知、情感等心理因素与犯罪行为的关联。"
65
+ },
66
+ {
67
+ "title": "社会学理论",
68
+ "text": "研究社会环境、文化背景等对犯罪心理的塑造作用。"
69
+ },
70
+ {
71
+ "title": "综合理论",
72
+ "text": "结合生物学、心理学和社会学视角,全面解释犯罪心理。"
73
+ }
74
+ ]
75
+ }
76
+ },
77
+ {
78
+ "type": "transition",
79
+ "data": {
80
+ "title": "犯罪心理的形成",
81
+ "text": "本章将探讨个体因素、环境因素及心理过程对犯罪心理的影响。"
82
+ }
83
+ },
84
+ {
85
+ "type": "content",
86
+ "data": {
87
+ "title": "个体因素",
88
+ "items": [
89
+ {
90
+ "title": "遗传因素",
91
+ "text": "研究基因与犯罪行为之间的潜在联系。"
92
+ },
93
+ {
94
+ "title": "心理特质",
95
+ "text": "探讨人格特质如攻击性、冲动性与犯罪的关系。"
96
+ },
97
+ {
98
+ "title": "人格障碍",
99
+ "text": "分析反社会人格障碍等心理疾病对犯罪行为的推动作用。"
100
+ },
101
+ {
102
+ "title": "早期经历",
103
+ "text": "研究童年创伤、家庭暴力等对犯罪心理的长期影响。"
104
+ }
105
+ ]
106
+ }
107
+ },
108
+ {
109
+ "type": "content",
110
+ "data": {
111
+ "title": "环境因素",
112
+ "items": [
113
+ {
114
+ "title": "家庭环境",
115
+ "text": "探讨家庭结构、教育方式对犯罪心理的塑造作用。"
116
+ },
117
+ {
118
+ "title": "社会环境影响",
119
+ "text": "分析同伴压力、社区环境对犯罪行为的诱导作用。"
120
+ },
121
+ {
122
+ "title": "经济因素",
123
+ "text": "研究贫困、失业等经济问题与犯罪率的关系。"
124
+ },
125
+ {
126
+ "title": "文化背景",
127
+ "text": "探讨文化价值观对犯罪心理的影响。"
128
+ }
129
+ ]
130
+ }
131
+ },
132
+ {
133
+ "type": "content",
134
+ "data": {
135
+ "title": "心理过程",
136
+ "items": [
137
+ {
138
+ "title": "认知过程",
139
+ "text": "分析犯罪者的思维方式、决策模式及其对行为的影响。"
140
+ },
141
+ {
142
+ "title": "情感过程",
143
+ "text": "探讨情绪调节、情感缺失与犯罪行为的关系。"
144
+ },
145
+ {
146
+ "title": "行为动机",
147
+ "text": "研究犯罪者的内在动机,如利益驱动、报复心理等。"
148
+ },
149
+ {
150
+ "title": "决策机制",
151
+ "text": "分析犯罪者在实施犯罪前的决策过程及其心理机制。"
152
+ }
153
+ ]
154
+ }
155
+ },
156
+ {
157
+ "type": "transition",
158
+ "data": {
159
+ "title": "犯罪类型与心理特征",
160
+ "text": "本章将分析暴力犯罪、财产犯罪及网络犯罪的心理特征。"
161
+ }
162
+ },
163
+ {
164
+ "type": "content",
165
+ "data": {
166
+ "title": "暴力犯罪",
167
+ "items": [
168
+ {
169
+ "title": "谋杀心理特征",
170
+ "text": "探讨谋杀者的心理动机,如情感冲突、利益争夺等。"
171
+ },
172
+ {
173
+ "title": "抢劫���理特征",
174
+ "text": "分析抢劫者的冒险心理及对暴力的依赖。"
175
+ },
176
+ {
177
+ "title": "性犯罪心理特征",
178
+ "text": "研究性犯罪者的心理扭曲及行为模式。"
179
+ },
180
+ {
181
+ "title": "家庭暴力心理特征",
182
+ "text": "探讨家庭暴力施暴者的控制欲及情感缺陷。"
183
+ }
184
+ ]
185
+ }
186
+ },
187
+ {
188
+ "type": "content",
189
+ "data": {
190
+ "title": "财产犯罪",
191
+ "items": [
192
+ {
193
+ "title": "盗窃心理特征",
194
+ "text": "分析盗窃者的侥幸心理及对物质的渴望。"
195
+ },
196
+ {
197
+ "title": "诈骗心理特征",
198
+ "text": "探讨诈骗者的欺骗技巧及心理操纵能力。"
199
+ },
200
+ {
201
+ "title": "贪污心理特征",
202
+ "text": "研究贪污者的权力欲望及道德沦丧。"
203
+ },
204
+ {
205
+ "title": "洗钱心理特征",
206
+ "text": "分析洗钱者的风险规避心理及法律规避策略。"
207
+ }
208
+ ]
209
+ }
210
+ },
211
+ {
212
+ "type": "content",
213
+ "data": {
214
+ "title": "网络犯罪",
215
+ "items": [
216
+ {
217
+ "title": "黑客心理特征",
218
+ "text": "探讨黑客的技术崇拜及对权威的挑战心理。"
219
+ },
220
+ {
221
+ "title": "网络诈骗心理特征",
222
+ "text": "分析网络诈骗者的伪装能力及心理操纵技巧。"
223
+ },
224
+ {
225
+ "title": "网络暴力心理特征",
226
+ "text": "研究网络暴力施暴者的匿名心理及攻击性。"
227
+ },
228
+ {
229
+ "title": "网络成瘾与犯罪",
230
+ "text": "探讨网络成瘾者对虚拟世界的依赖及其与犯罪行为的关联。"
231
+ }
232
+ ]
233
+ }
234
+ },
235
+ {
236
+ "type": "transition",
237
+ "data": {
238
+ "title": "犯罪心理评估与干预",
239
+ "text": "本章将介绍犯罪心理评估方法及干预策略,探讨预防措施。"
240
+ }
241
+ },
242
+ {
243
+ "type": "content",
244
+ "data": {
245
+ "title": "评估方法",
246
+ "items": [
247
+ {
248
+ "title": "心理测试",
249
+ "text": "通过标准化测试评估犯罪者的心理状态及人格特征。"
250
+ },
251
+ {
252
+ "title": "行为观察",
253
+ "text": "观察犯罪者的日常行为,分析其行为模式及心理动机。"
254
+ },
255
+ {
256
+ "title": "访谈技巧",
257
+ "text": "通过深度访谈了解犯罪者的心理历程及犯罪动机。"
258
+ },
259
+ {
260
+ "title": "案例分析",
261
+ "text": "通过典型案例分析犯罪者的心理特征及行为规律。"
262
+ }
263
+ ]
264
+ }
265
+ },
266
+ {
267
+ "type": "content",
268
+ "data": {
269
+ "title": "干预策略",
270
+ "items": [
271
+ {
272
+ "title": "心理治疗",
273
+ "text": "通过心理咨询和治疗帮助犯罪者纠正心理问题。"
274
+ },
275
+ {
276
+ "title": "行为矫正",
277
+ "text": "通过行为训练帮助犯罪者改变不良行为模式。"
278
+ },
279
+ {
280
+ "title": "社会支持",
281
+ "text": "提供社会资源支持,帮助犯罪者重新融入社会。"
282
+ },
283
+ {
284
+ "title": "法律干预",
285
+ "text": "通过法律手段对犯罪行为进行约束和惩罚。"
286
+ }
287
+ ]
288
+ }
289
+ },
290
+ {
291
+ "type": "content",
292
+ "data": {
293
+ "title": "预防措施",
294
+ "items": [
295
+ {
296
+ "title": "早期干预",
297
+ "text": "通过早期心理干预预防潜在犯罪者的行为问题。"
298
+ },
299
+ {
300
+ "title": "教育预防",
301
+ "text": "通过教育提升公众的法律意识及心理健康水平。"
302
+ },
303
+ {
304
+ "title": "社区预防",
305
+ "text": "通过社区活动增强社会凝聚力,减少犯罪诱因。"
306
+ },
307
+ {
308
+ "title": "政策预防",
309
+ "text": "通过政策制定减少社会不平等,降低犯罪率。"
310
+ }
311
+ ]
312
+ }
313
+ },
314
+ {
315
+ "type": "transition",
316
+ "data": {
317
+ "title": "犯罪心理学的应用",
318
+ "text": "本章将探讨犯罪心理学在刑事司法、犯罪预防及研究教育中的应用。"
319
+ }
320
+ },
321
+ {
322
+ "type": "content",
323
+ "data": {
324
+ "title": "刑事司法系统",
325
+ "items": [
326
+ {
327
+ "title": "犯罪心理画像",
328
+ "text": "通过心理分析描绘犯罪者的特征,协助案件侦破。"
329
+ },
330
+ {
331
+ "title": "审讯技巧",
332
+ "text": "运用心理学方法提高审讯效率,获取真实供述。"
333
+ },
334
+ {
335
+ "title": "证人心理学",
336
+ "text": "研究证人的心理状态及其对证词可信度的影响。"
337
+ },
338
+ {
339
+ "title": "陪审团决策",
340
+ "text": "分析陪审员的心理过程及其对判决结果的影响。"
341
+ }
342
+ ]
343
+ }
344
+ },
345
+ {
346
+ "type": "content",
347
+ "data": {
348
+ "title": "犯罪预防与矫治",
349
+ "items": [
350
+ {
351
+ "title": "犯罪预防策略",
352
+ "text": "通过心理干预和社会支持预防犯罪行为的发生。"
353
+ },
354
+ {
355
+ "title": "监狱心理矫治",
356
+ "text": "通过心理治疗帮助服刑人员纠正心理问题,降低再犯率。"
357
+ },
358
+ {
359
+ "title": "社区矫正",
360
+ "text": "通过社区支持帮助犯罪者重新融入社会,减少再犯风险。"
361
+ },
362
+ {
363
+ "title": "再犯预防",
364
+ "text": "通过心理评估和干预降低犯罪者的再犯可能性。"
365
+ }
366
+ ]
367
+ }
368
+ },
369
+ {
370
+ "type": "content",
371
+ "data": {
372
+ "title": "研究与教育",
373
+ "items": [
374
+ {
375
+ "title": "犯罪心理学研究",
376
+ "text": "通过科学研究深化对犯罪心理的理解,推动学科发展。"
377
+ },
378
+ {
379
+ "title": "犯罪心理学教育",
380
+ "text": "通过教育培养专业人才,提升犯罪心理学的应用水平。"
381
+ },
382
+ {
383
+ "title": "专业培训",
384
+ "text": "通过培训提升司法人员的心理学知识和技能。"
385
+ },
386
+ {
387
+ "title": "学术交流",
388
+ "text": "通过学术交流促进犯罪心理学领域的国际合作与发展。"
389
+ }
390
+ ]
391
+ }
392
+ },
393
+ {
394
+ "type": "transition",
395
+ "data": {
396
+ "title": "未来发展趋势",
397
+ "text": "本章将探讨犯罪心理学在技术应用、跨学科合作及伦理挑战方面的未来发展方向。"
398
+ }
399
+ },
400
+ {
401
+ "type": "content",
402
+ "data": {
403
+ "title": "技术应用",
404
+ "items": [
405
+ {
406
+ "title": "人工智能与犯罪心理学",
407
+ "text": "利用人工智能技术分析犯罪数据,提升犯罪预测能力。"
408
+ },
409
+ {
410
+ "title": "大数据分析",
411
+ "text": "通过大数据技术挖掘犯罪行为的规律及心理特征。"
412
+ },
413
+ {
414
+ "title": "虚拟现实技术",
415
+ "text": "利用虚拟现实技术模拟犯罪场景,研究犯罪者的心理反应。"
416
+ },
417
+ {
418
+ "title": "神经科学研究",
419
+ "text": "通过神经科学研究探索犯罪行为的生物学基础。"
420
+ }
421
+ ]
422
+ }
423
+ },
424
+ {
425
+ "type": "content",
426
+ "data": {
427
+ "title": "跨学科合作",
428
+ "items": [
429
+ {
430
+ "title": "心理学与法律",
431
+ "text": "加强心理学与法学的合作,提升司法系统的科学性。"
432
+ },
433
+ {
434
+ "title": "心理学与医学",
435
+ "text": "通过心理学与医学的结合,深化对犯罪心理的理解。"
436
+ },
437
+ {
438
+ "title": "心理学与社会学",
439
+ "text": "通过心理学与社会学的交叉研究,全面分析犯罪现象。"
440
+ },
441
+ {
442
+ "title": "心理学与信息技术",
443
+ "text": "结合心理学与信息技术,开发犯罪预防与干预的新工具。"
444
+ }
445
+ ]
446
+ }
447
+ },
448
+ {
449
+ "type": "content",
450
+ "data": {
451
+ "title": "伦理与挑战",
452
+ "items": [
453
+ {
454
+ "title": "伦理问题",
455
+ "text": "探讨犯罪心理学研究中的伦理困境及解决方案。"
456
+ },
457
+ {
458
+ "title": "隐私保护",
459
+ "text": "研究犯罪心理学应用中如何保护个人隐私。"
460
+ },
461
+ {
462
+ "title": "数据安全",
463
+ "text": "分析犯罪心理学数据的安全风险及防护措施。"
464
+ },
465
+ {
466
+ "title": "未来挑战",
467
+ "text": "探讨犯罪心理学在未来发展中可能面临的技术与社会挑战。"
468
+ }
469
+ ]
470
+ }
471
+ },
472
+ {
473
+ "type": "end"
474
+ }
475
+ ]
frontend/dist/mocks/AIPPT_Outline.md ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 5G技术如何改变我们的生活
2
+ ## 5G技术概述
3
+ ### 5G的定义
4
+ - 第五代移动通信技术
5
+ - 基于4G技术的重大升级
6
+ ### 5G的关键特性
7
+ - 高速率
8
+ - 低时延
9
+ - 大容量
10
+ ### 5G的发展历程
11
+ - 早期研究阶段
12
+ - 标准制定阶段
13
+ - 商用推广阶段
14
+
15
+ ## 5G对通信领域的变革
16
+ ### 个人通信体验提升
17
+ - 高清视频通话无卡顿
18
+ - 快速下载大文件
19
+ - 多人在线游戏低延迟
20
+ ### 通信网络架构优化
21
+ - 网络切片技术实现差异化服务
22
+ - 边缘计算减少数据传输距离
23
+ ### 通信安全保障增强
24
+ - 新的加密算法保障数据安全
25
+ - 实时监测防范网络攻击
26
+
27
+ ## 5G与智能家居的融合
28
+ ### 智能家电控制
29
+ - 远程控制家电开关和运行模式
30
+ - 家电之间智能联动
31
+ ### 家庭安防升级
32
+ - 高清实时监控家庭情况
33
+ - 异常情况及时报警
34
+ ### 家居环境智能调节
35
+ - 自动调节室内温度、湿度
36
+ - 智能灯光控制营造氛围
37
+
38
+ ## 5G推动智能交通发展
39
+ ### 自动驾驶汽车
40
+ - 车辆间实时通信避免碰撞
41
+ - 高精度地图实时更新
42
+ ### 智能交通管理
43
+ - 实时监控交通流量并优化信号灯
44
+ - 快速处理交通事故
45
+ ### 公共交通智能化
46
+ - 实时公交信息查询
47
+ - 车内高速网络服务
48
+
49
+ ## 5G在医疗领域的应用
50
+ ### 远程医疗服务
51
+ - 专家远程诊断病情
52
+ - 远程手术指导
53
+ ### 医疗设备互联
54
+ - 可穿戴设备实时传输健康数据
55
+ - 医院内部设备信息共享
56
+ ### 智能医疗管理
57
+ - 电子病历快速调取
58
+ - 医疗资源智能分配
59
+
60
+ ## 5G助力工业互联网升级
61
+ ### 智能制造
62
+ - 生产设备实时监控和远程维护
63
+ - 柔性生产线智能调度
64
+ ### 工业物流优化
65
+ - 货物实时定位和跟踪
66
+ - 智能仓储管理
67
+ ### 工业安全保障
68
+ - 危险区域实时监测
69
+ - 事故预警和应急处理
frontend/dist/mocks/slides.json ADDED
@@ -0,0 +1,184 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "id": "test-slide-1",
4
+ "elements": [
5
+ {
6
+ "type": "shape",
7
+ "id": "4cbRxp",
8
+ "left": 0,
9
+ "top": 200,
10
+ "width": 546,
11
+ "height": 362.5,
12
+ "viewBox": [200, 200],
13
+ "path": "M 0 0 L 0 200 L 200 200 Z",
14
+ "fill": "#5b9bd5",
15
+ "fixedRatio": false,
16
+ "opacity": 0.7,
17
+ "rotate": 0
18
+ },
19
+ {
20
+ "type": "shape",
21
+ "id": "ookHrf",
22
+ "left": 0,
23
+ "top": 0,
24
+ "width": 300,
25
+ "height": 320,
26
+ "viewBox": [200, 200],
27
+ "path": "M 0 0 L 0 200 L 200 200 Z",
28
+ "fill": "#5b9bd5",
29
+ "fixedRatio": false,
30
+ "flipV": true,
31
+ "rotate": 0
32
+ },
33
+ {
34
+ "type": "text",
35
+ "id": "idn7Mx",
36
+ "left": 355,
37
+ "top": 65.25,
38
+ "width": 450,
39
+ "height": 188,
40
+ "lineHeight": 1.2,
41
+ "content": "<p><strong><span style=\"font-size: 112px;\">PPTist</span></strong></p>",
42
+ "rotate": 0,
43
+ "defaultFontName": "",
44
+ "defaultColor": "#333"
45
+ },
46
+ {
47
+ "type": "text",
48
+ "id": "7stmVP",
49
+ "left": 355,
50
+ "top": 253.25,
51
+ "width": 585,
52
+ "height": 56,
53
+ "content": "<p><span style=\"font-size: 24px;\">基于 Vue 3.x + TypeScript 的在线演示文稿应用</span></p>",
54
+ "rotate": 0,
55
+ "defaultFontName": "",
56
+ "defaultColor": "#333"
57
+ },
58
+ {
59
+ "type": "line",
60
+ "id": "FnpZs4",
61
+ "left": 361,
62
+ "top": 238,
63
+ "start": [0, 0],
64
+ "end": [549, 0],
65
+ "points": ["", ""],
66
+ "color": "#5b9bd5",
67
+ "style": "solid",
68
+ "width": 2
69
+ }
70
+ ],
71
+ "background": {
72
+ "type": "solid",
73
+ "color": "#ffffff"
74
+ }
75
+ },
76
+ {
77
+ "id": "test-slide-2",
78
+ "elements": [
79
+ {
80
+ "type": "text",
81
+ "id": "ptNnUJ",
82
+ "left": 145,
83
+ "top": 148,
84
+ "width": 711,
85
+ "height": 77,
86
+ "lineHeight": 1.2,
87
+ "content": "<p style=\"text-align: center;\"><strong><span style=\"font-size: 48px;\">在此处添加标题</span></strong></p>",
88
+ "rotate": 0,
89
+ "defaultFontName": "",
90
+ "defaultColor": "#333"
91
+ },
92
+ {
93
+ "type": "text",
94
+ "id": "mRHvQN",
95
+ "left": 207.50000000000003,
96
+ "top": 249.84259259259264,
97
+ "width": 585,
98
+ "height": 56,
99
+ "content": "<p style=\"text-align: center;\"><span style=\"font-size: 24px;\">在此处添加副标题</span></p>",
100
+ "rotate": 0,
101
+ "defaultFontName": "",
102
+ "defaultColor": "#333"
103
+ },
104
+ {
105
+ "type": "line",
106
+ "id": "7CQDwc",
107
+ "left": 323.09259259259267,
108
+ "top": 238.33333333333334,
109
+ "start": [0, 0],
110
+ "end": [354.8148148148148, 0],
111
+ "points": ["", ""],
112
+ "color": "#5b9bd5",
113
+ "style": "solid",
114
+ "width": 4
115
+ },
116
+ {
117
+ "type": "shape",
118
+ "id": "09wqWw",
119
+ "left": -27.648148148148138,
120
+ "top": 432.73148148148147,
121
+ "width": 1056.2962962962963,
122
+ "height": 162.96296296296296,
123
+ "viewBox": [200, 200],
124
+ "path": "M 0 20 C 40 -40 60 60 100 20 C 140 -40 160 60 200 20 L 200 180 C 140 240 160 140 100 180 C 40 240 60 140 0 180 L 0 20 Z",
125
+ "fill": "#5b9bd5",
126
+ "fixedRatio": false,
127
+ "rotate": 0
128
+ }
129
+ ],
130
+ "background": {
131
+ "type": "solid",
132
+ "color": "#fff"
133
+ }
134
+ },
135
+ {
136
+ "id": "test-slide-3",
137
+ "elements": [
138
+ {
139
+ "type": "shape",
140
+ "id": "vSheCJ",
141
+ "left": 183.5185185185185,
142
+ "top": 175.5092592592593,
143
+ "width": 605.1851851851851,
144
+ "height": 185.18518518518516,
145
+ "viewBox": [200, 200],
146
+ "path": "M 0 0 L 200 0 L 200 200 L 0 200 Z",
147
+ "fill": "#5b9bd5",
148
+ "fixedRatio": false,
149
+ "rotate": 0
150
+ },
151
+ {
152
+ "type": "shape",
153
+ "id": "Mpwv7x",
154
+ "left": 211.29629629629628,
155
+ "top": 201.80555555555557,
156
+ "width": 605.1851851851851,
157
+ "height": 185.18518518518516,
158
+ "viewBox": [200, 200],
159
+ "path": "M 0 0 L 200 0 L 200 200 L 0 200 Z",
160
+ "fill": "#5b9bd5",
161
+ "fixedRatio": false,
162
+ "rotate": 0,
163
+ "opacity": 0.7
164
+ },
165
+ {
166
+ "type": "text",
167
+ "id": "WQOTAp",
168
+ "left": 304.9074074074074,
169
+ "top": 198.10185185185182,
170
+ "width": 417.9629629629629,
171
+ "height": 140,
172
+ "content": "<p style=\"text-align: center;\"><strong><span style=\"font-size: 80px;\"><span style=\"color: rgb(255, 255, 255);\">感谢观看</span></span></strong></p>",
173
+ "rotate": 0,
174
+ "defaultFontName": "",
175
+ "defaultColor": "#333",
176
+ "wordSpace": 5
177
+ }
178
+ ],
179
+ "background": {
180
+ "type": "solid",
181
+ "color": "#fff"
182
+ }
183
+ }
184
+ ]
frontend/dist/mocks/template_1.json ADDED
The diff for this file is too large to render. See raw diff
 
frontend/dist/test-share.html ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Test Share Link Generation</title>
5
+ <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
6
+ </head>
7
+ <body>
8
+ <h1>Test Share Link Generation</h1>
9
+ <button onclick="testShareLink()">Generate Share Link</button>
10
+ <div id="result"></div>
11
+
12
+ <script>
13
+ async function testShareLink() {
14
+ const resultDiv = document.getElementById('result');
15
+ resultDiv.innerHTML = 'Testing...';
16
+
17
+ try {
18
+ const response = await axios.post('/api/public/generate-share-link', {
19
+ userId: 'user_1735716399333',
20
+ pptId: 'ppt_1735716399333',
21
+ slideIndex: 0
22
+ });
23
+
24
+ resultDiv.innerHTML = `
25
+ <h3>Success!</h3>
26
+ <pre>${JSON.stringify(response.data, null, 2)}</pre>
27
+ `;
28
+ } catch (error) {
29
+ resultDiv.innerHTML = `
30
+ <h3>Error!</h3>
31
+ <p>Status: ${error.response?.status}</p>
32
+ <p>Message: ${error.message}</p>
33
+ <pre>${JSON.stringify(error.response?.data, null, 2)}</pre>
34
+ `;
35
+ }
36
+ }
37
+ </script>
38
+ </body>
39
+ </html>
frontend/fix-mixins.cjs ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ // Mixin replacements
5
+ const mixinReplacements = {
6
+ '@include overflow-overlay();': 'overflow: auto;\n overflow: overlay;',
7
+ '@include absolute-0();': 'position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;',
8
+ '@include ellipsis-oneline();': 'overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;',
9
+ '@include flex-grid-layout();': 'display: flex;\n flex-wrap: wrap;\n align-content: flex-start;',
10
+ '@include flex-grid-layout-children(2, 48%);': 'width: 48%;\n margin-bottom: calc(#{100 - 2 * 48%} / #{2 - 1});\n\n &:not(:nth-child(2n)) {\n margin-right: calc(#{100 - 2 * 48%} / #{2 - 1});\n }',
11
+ '@include flex-grid-layout-children(3, 31%);': 'width: 31%;\n margin-bottom: calc(#{100 - 3 * 31%} / #{3 - 1});\n\n &:not(:nth-child(3n)) {\n margin-right: calc(#{100 - 3 * 31%} / #{3 - 1});\n }',
12
+ '@include flex-grid-layout-children(4, 24%);': 'width: 24%;\n margin-bottom: calc(#{100 - 4 * 24%} / #{4 - 1});\n\n &:not(:nth-child(4n)) {\n margin-right: calc(#{100 - 4 * 24%} / #{4 - 1});\n }',
13
+ '@include flex-grid-layout-children(5, 18%);': 'width: 18%;\n margin-bottom: calc(#{100 - 5 * 18%} / #{5 - 1});\n\n &:not(:nth-child(5n)) {\n margin-right: calc(#{100 - 5 * 18%} / #{5 - 1});\n }',
14
+ '@include flex-grid-layout-children(5, 16%);': 'width: 16%;\n margin-bottom: calc(#{100 - 5 * 16%} / #{5 - 1});\n\n &:not(:nth-child(5n)) {\n margin-right: calc(#{100 - 5 * 16%} / #{5 - 1});\n }',
15
+ '@include flex-grid-layout-children(5, 19%);': 'width: 19%;\n margin-bottom: calc(#{100 - 5 * 19%} / #{5 - 1});\n\n &:not(:nth-child(5n)) {\n margin-right: calc(#{100 - 5 * 19%} / #{5 - 1});\n }',
16
+ '@include flex-grid-layout-children(6, 14%);': 'width: 14%;\n margin-bottom: calc(#{100 - 6 * 14%} / #{6 - 1});\n\n &:not(:nth-child(6n)) {\n margin-right: calc(#{100 - 6 * 14%} / #{6 - 1});\n }',
17
+ '@include flex-grid-layout-children(8, 12%);': 'width: 12%;\n margin-bottom: calc(#{100 - 8 * 12%} / #{8 - 1});\n\n &:not(:nth-child(8n)) {\n margin-right: calc(#{100 - 8 * 12%} / #{8 - 1});\n }',
18
+ '@include flex-grid-layout-children(10, 8%);': 'width: 8%;\n margin-bottom: calc(#{100 - 10 * 8%} / #{10 - 1});\n\n &:not(:nth-child(10n)) {\n margin-right: calc(#{100 - 10 * 8%} / #{10 - 1});\n }',
19
+ '@include flex-grid-layout-children(10, 9%);': 'width: 9%;\n margin-bottom: calc(#{100 - 10 * 9%} / #{10 - 1});\n\n &:not(:nth-child(10n)) {\n margin-right: calc(#{100 - 10 * 9%} / #{10 - 1});\n }',
20
+ '@include flex-grid-layout-children(10, 7%);': 'width: 7%;\n margin-bottom: calc(#{100 - 10 * 7%} / #{10 - 1});\n\n &:not(:nth-child(10n)) {\n margin-right: calc(#{100 - 10 * 7%} / #{10 - 1});\n }'
21
+ };
22
+
23
+ function processFile(filePath) {
24
+ try {
25
+ let content = fs.readFileSync(filePath, 'utf8');
26
+ let modified = false;
27
+
28
+ for (const [mixin, replacement] of Object.entries(mixinReplacements)) {
29
+ if (content.includes(mixin)) {
30
+ content = content.replace(new RegExp(mixin.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g'), replacement);
31
+ modified = true;
32
+ }
33
+ }
34
+
35
+ if (modified) {
36
+ fs.writeFileSync(filePath, content, 'utf8');
37
+ console.log(`Fixed mixins in: ${filePath}`);
38
+ }
39
+ } catch (error) {
40
+ console.error(`Error processing ${filePath}:`, error.message);
41
+ }
42
+ }
43
+
44
+ function walkDirectory(dir) {
45
+ const files = fs.readdirSync(dir);
46
+
47
+ for (const file of files) {
48
+ const filePath = path.join(dir, file);
49
+ const stat = fs.statSync(filePath);
50
+
51
+ if (stat.isDirectory()) {
52
+ walkDirectory(filePath);
53
+ } else if (file.endsWith('.vue') || file.endsWith('.scss')) {
54
+ processFile(filePath);
55
+ }
56
+ }
57
+ }
58
+
59
+ // Start processing from src directory
60
+ walkDirectory('./src');
61
+ console.log('Mixin replacement completed!');
frontend/fix-mixins.js ADDED
File without changes
frontend/index.html ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <link rel="icon" href="/favicon.ico">
6
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
7
+ <meta name="renderer" content="webkit">
8
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
9
+ <meta name="description" content="PPTist - 在线演示文稿(幻灯片)应用,还原了大部分 Office PowerPoint 常用功能,实现在线PPT的编辑、演示,支持导出PPT文件,支持AI生成PPT。" />
10
+ <meta name="keywords" content="pptist,ppt,powerpoint,office powerpoint,在线ppt,幻灯片,演示文稿,ppt在线制作,aippt" />
11
+ <title>PPTist - 在线演示文稿</title>
12
+
13
+ <style>
14
+ .first-screen-loading {
15
+ width: 200px;
16
+ height: 200px;
17
+ position: fixed;
18
+ top: 50%;
19
+ left: 50%;
20
+ margin-top: -100px;
21
+ margin-left: -100px;
22
+ display: flex;
23
+ flex-direction: column;
24
+ justify-content: center;
25
+ align-items: center;
26
+ }
27
+ .first-screen-loading-spinner {
28
+ width: 36px;
29
+ height: 36px;
30
+ border: 3px solid #d14424;
31
+ border-top-color: transparent;
32
+ border-radius: 50%;
33
+ box-sizing: border-box;
34
+ animation: spinner .8s linear infinite;
35
+ }
36
+ .first-screen-loading-text {
37
+ margin-top: 20px;
38
+ color: #d14424;
39
+ }
40
+ @keyframes spinner {
41
+ 0% {
42
+ transform: rotate(0deg);
43
+ }
44
+ 100% {
45
+ transform: rotate(360deg);
46
+ }
47
+ }
48
+ </style>
49
+ </head>
50
+ <body>
51
+ <div id="app">
52
+ <div class="first-screen-loading">
53
+ <div class="first-screen-loading-spinner"></div>
54
+ <div class="first-screen-loading-text">正在加载中,请稍等 ...</div>
55
+ </div>
56
+ </div>
57
+ <script type="module" src="/src/main.ts"></script>
58
+ </body>
59
+
60
+ <script>
61
+ document.oncontextmenu = e => e.preventDefault()
62
+ </script>
63
+ </html>
frontend/package-lock.json ADDED
The diff for this file is too large to render. See raw diff
 
frontend/package.json ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "pptist",
3
+ "version": "2.0.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "vite build",
9
+ "build-with-check": "run-p type-check \"build-only {@}\" --",
10
+ "preview": "vite preview",
11
+ "build-only": "vite build",
12
+ "type-check": "vue-tsc --build --force",
13
+ "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",
14
+ "prepare": "husky install"
15
+ },
16
+ "dependencies": {
17
+ "@icon-park/vue-next": "^1.4.2",
18
+ "@types/html2canvas": "^0.5.35",
19
+ "animate.css": "^4.1.1",
20
+ "axios": "^1.7.9",
21
+ "clipboard": "^2.0.11",
22
+ "crypto-js": "^4.2.0",
23
+ "dexie": "^4.0.11",
24
+ "echarts": "^5.5.1",
25
+ "file-saver": "^2.0.5",
26
+ "hfmath": "^0.0.2",
27
+ "html-to-image": "^1.11.13",
28
+ "html2canvas": "^1.4.1",
29
+ "lodash": "^4.17.21",
30
+ "mitt": "^3.0.1",
31
+ "nanoid": "^5.0.7",
32
+ "number-precision": "^1.6.0",
33
+ "pinia": "^3.0.2",
34
+ "pptxgenjs": "^3.12.0",
35
+ "pptxtojson": "^1.3.2",
36
+ "prosemirror-commands": "^1.6.0",
37
+ "prosemirror-dropcursor": "^1.8.1",
38
+ "prosemirror-gapcursor": "^1.3.2",
39
+ "prosemirror-history": "^1.3.2",
40
+ "prosemirror-inputrules": "^1.4.0",
41
+ "prosemirror-keymap": "^1.2.2",
42
+ "prosemirror-model": "^1.22.2",
43
+ "prosemirror-schema-basic": "^1.2.3",
44
+ "prosemirror-schema-list": "^1.4.1",
45
+ "prosemirror-state": "^1.4.3",
46
+ "prosemirror-view": "^1.33.9",
47
+ "tinycolor2": "^1.6.0",
48
+ "tippy.js": "^6.3.7",
49
+ "vue": "^3.4.34",
50
+ "vue-router": "^4.5.1",
51
+ "vuedraggable": "^4.1.0"
52
+ },
53
+ "devDependencies": {
54
+ "@commitlint/cli": "^18.4.3",
55
+ "@commitlint/config-conventional": "^18.4.3",
56
+ "@rushstack/eslint-patch": "^1.3.3",
57
+ "@tsconfig/node18": "^18.2.2",
58
+ "@types/crypto-js": "^4.2.1",
59
+ "@types/file-saver": "^2.0.7",
60
+ "@types/lodash": "^4.14.202",
61
+ "@types/node": "^18.19.3",
62
+ "@types/tinycolor2": "^1.4.6",
63
+ "@vitejs/plugin-vue": "^5.1.0",
64
+ "@vue/eslint-config-typescript": "^12.0.0",
65
+ "@vue/tsconfig": "^0.5.0",
66
+ "eslint": "^8.49.0",
67
+ "eslint-plugin-vue": "^9.17.0",
68
+ "husky": "^8.0.3",
69
+ "npm-run-all2": "^6.1.1",
70
+ "sass": "^1.69.6",
71
+ "typescript": "~5.3.0",
72
+ "vite": "^5.3.5",
73
+ "vue-tsc": "^2.0.29"
74
+ }
75
+ }
frontend/public/favicon.ico ADDED
frontend/public/icons/android-chrome-192x192.png ADDED
frontend/public/icons/android-chrome-512x512.png ADDED
frontend/public/icons/android-chrome-maskable-192x192.png ADDED
frontend/public/icons/android-chrome-maskable-512x512.png ADDED
frontend/public/icons/apple-touch-icon-152x152.png ADDED
frontend/public/icons/favicon-16x16.png ADDED
frontend/public/icons/favicon-32x32.png ADDED
frontend/public/mocks/AIPPT.json ADDED
@@ -0,0 +1,475 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "cover",
4
+ "data": {
5
+ "title": "犯罪心理学研究",
6
+ "text": "探索犯罪心理的成因、特征及干预策略,助力犯罪预防与矫治。"
7
+ }
8
+ },
9
+ {
10
+ "type": "contents",
11
+ "data": {
12
+ "items": [
13
+ "犯罪心理学概述",
14
+ "犯罪心理的形成",
15
+ "犯罪类型与心理特征",
16
+ "犯罪心理评估与干预",
17
+ "犯罪心理学的应用",
18
+ "未来发展趋势"
19
+ ]
20
+ }
21
+ },
22
+ {
23
+ "type": "transition",
24
+ "data": {
25
+ "title": "犯罪心理学概述",
26
+ "text": "本章将介绍犯罪心理学的定义、历史、基本理论及其研究领域。"
27
+ }
28
+ },
29
+ {
30
+ "type": "content",
31
+ "data": {
32
+ "title": "定义与历史",
33
+ "items": [
34
+ {
35
+ "title": "犯罪心理学的定义",
36
+ "text": "犯罪心理学是研究犯罪行为及其心理机制的学科,旨在理解犯罪者的心理特征和行为动机。"
37
+ },
38
+ {
39
+ "title": "犯罪心理学的发展历史",
40
+ "text": "犯罪心理学起源于19世纪末,随着心理学和法学的发展逐渐形成独立学科。"
41
+ },
42
+ {
43
+ "title": "主要研究领域",
44
+ "text": "包括犯罪心理成因、犯罪类型分析、犯罪心理评估与干预等。"
45
+ },
46
+ {
47
+ "title": "与其他学科的关系",
48
+ "text": "犯罪心理学与法学、社会学、生物学等学科密切相关,共同探讨犯罪现象。"
49
+ }
50
+ ]
51
+ }
52
+ },
53
+ {
54
+ "type": "content",
55
+ "data": {
56
+ "title": "基本理论",
57
+ "items": [
58
+ {
59
+ "title": "生物学理论",
60
+ "text": "探讨遗传、神经生理等因素对犯罪行为的影响。"
61
+ },
62
+ {
63
+ "title": "心理学理论",
64
+ "text": "分析人格、认知、情感等心理因素与犯罪行为的关联。"
65
+ },
66
+ {
67
+ "title": "社会学理论",
68
+ "text": "研究社会环境、文化背景等对犯罪心理的塑造作用。"
69
+ },
70
+ {
71
+ "title": "综合理论",
72
+ "text": "结合生物学、心理学和社会学视角,全面解释犯罪心理。"
73
+ }
74
+ ]
75
+ }
76
+ },
77
+ {
78
+ "type": "transition",
79
+ "data": {
80
+ "title": "犯罪心理的形成",
81
+ "text": "本章将探讨个体因素、环境因素及心理过程对犯罪心理的影响。"
82
+ }
83
+ },
84
+ {
85
+ "type": "content",
86
+ "data": {
87
+ "title": "个体因素",
88
+ "items": [
89
+ {
90
+ "title": "遗传因素",
91
+ "text": "研究基因与犯罪行为之间的潜在联系。"
92
+ },
93
+ {
94
+ "title": "心理特质",
95
+ "text": "探讨人格特质如攻击性、冲动性与犯罪的关系。"
96
+ },
97
+ {
98
+ "title": "人格障碍",
99
+ "text": "分析反社会人格障碍等心理疾病对犯罪行为的推动作用。"
100
+ },
101
+ {
102
+ "title": "早期经历",
103
+ "text": "研究童年创伤、家庭暴力等对犯罪心理的长期影响。"
104
+ }
105
+ ]
106
+ }
107
+ },
108
+ {
109
+ "type": "content",
110
+ "data": {
111
+ "title": "环境因素",
112
+ "items": [
113
+ {
114
+ "title": "家庭环境",
115
+ "text": "探讨家庭结构、教育方式对犯罪心理的塑造作用。"
116
+ },
117
+ {
118
+ "title": "社会环境影响",
119
+ "text": "分析同伴压力、社区环境对犯罪行为的诱导作用。"
120
+ },
121
+ {
122
+ "title": "经济因素",
123
+ "text": "研究贫困、失业等经济问题与犯罪率的关系。"
124
+ },
125
+ {
126
+ "title": "文化背景",
127
+ "text": "探讨文化价值观对犯罪心理的影响。"
128
+ }
129
+ ]
130
+ }
131
+ },
132
+ {
133
+ "type": "content",
134
+ "data": {
135
+ "title": "心理过程",
136
+ "items": [
137
+ {
138
+ "title": "认知过程",
139
+ "text": "分析犯罪者的思维方式、决策模式及其对行为的影响。"
140
+ },
141
+ {
142
+ "title": "情感过程",
143
+ "text": "探讨情绪调节、情感缺失与犯罪行为的关系。"
144
+ },
145
+ {
146
+ "title": "行为动机",
147
+ "text": "研究犯罪者的内在动机,如利益驱动、报复心理等。"
148
+ },
149
+ {
150
+ "title": "决策机制",
151
+ "text": "分析犯罪者在实施犯罪前的决策过程及其心理机制。"
152
+ }
153
+ ]
154
+ }
155
+ },
156
+ {
157
+ "type": "transition",
158
+ "data": {
159
+ "title": "犯罪类型与心理特征",
160
+ "text": "本章将分析暴力犯罪、财产犯罪及网络犯罪的心理特征。"
161
+ }
162
+ },
163
+ {
164
+ "type": "content",
165
+ "data": {
166
+ "title": "暴力犯罪",
167
+ "items": [
168
+ {
169
+ "title": "谋杀心理特征",
170
+ "text": "探讨谋杀者的心理动机,如情感冲突、利益争夺等。"
171
+ },
172
+ {
173
+ "title": "抢劫���理特征",
174
+ "text": "分析抢劫者的冒险心理及对暴力的依赖。"
175
+ },
176
+ {
177
+ "title": "性犯罪心理特征",
178
+ "text": "研究性犯罪者的心理扭曲及行为模式。"
179
+ },
180
+ {
181
+ "title": "家庭暴力心理特征",
182
+ "text": "探讨家庭暴力施暴者的控制欲及情感缺陷。"
183
+ }
184
+ ]
185
+ }
186
+ },
187
+ {
188
+ "type": "content",
189
+ "data": {
190
+ "title": "财产犯罪",
191
+ "items": [
192
+ {
193
+ "title": "盗窃心理特征",
194
+ "text": "分析盗窃者的侥幸心理及对物质的渴望。"
195
+ },
196
+ {
197
+ "title": "诈骗心理特征",
198
+ "text": "探讨诈骗者的欺骗技巧及心理操纵能力。"
199
+ },
200
+ {
201
+ "title": "贪污心理特征",
202
+ "text": "研究贪污者的权力欲望及道德沦丧。"
203
+ },
204
+ {
205
+ "title": "洗钱心理特征",
206
+ "text": "分析洗钱者的风险规避心理及法律规避策略。"
207
+ }
208
+ ]
209
+ }
210
+ },
211
+ {
212
+ "type": "content",
213
+ "data": {
214
+ "title": "网络犯罪",
215
+ "items": [
216
+ {
217
+ "title": "黑客心理特征",
218
+ "text": "探讨黑客的技术崇拜及对权威的挑战心理。"
219
+ },
220
+ {
221
+ "title": "网络诈骗心理特征",
222
+ "text": "分析网络诈骗者的伪装能力及心理操纵技巧。"
223
+ },
224
+ {
225
+ "title": "网络暴力心理特征",
226
+ "text": "研究网络暴力施暴者的匿名心理及攻击性。"
227
+ },
228
+ {
229
+ "title": "网络成瘾与犯罪",
230
+ "text": "探讨网络成瘾者对虚拟世界的依赖及其与犯罪行为的关联。"
231
+ }
232
+ ]
233
+ }
234
+ },
235
+ {
236
+ "type": "transition",
237
+ "data": {
238
+ "title": "犯罪心理评估与干预",
239
+ "text": "本章将介绍犯罪心理评估方法及干预策略,探讨预防措施。"
240
+ }
241
+ },
242
+ {
243
+ "type": "content",
244
+ "data": {
245
+ "title": "评估方法",
246
+ "items": [
247
+ {
248
+ "title": "心理测试",
249
+ "text": "通过标准化测试评估犯罪者的心理状态及人格特征。"
250
+ },
251
+ {
252
+ "title": "行为观察",
253
+ "text": "观察犯罪者的日常行为,分析其行为模式及心理动机。"
254
+ },
255
+ {
256
+ "title": "访谈技巧",
257
+ "text": "通过深度访谈了解犯罪者的心理历程及犯罪动机。"
258
+ },
259
+ {
260
+ "title": "案例分析",
261
+ "text": "通过典型案例分析犯罪者的心理特征及行为规律。"
262
+ }
263
+ ]
264
+ }
265
+ },
266
+ {
267
+ "type": "content",
268
+ "data": {
269
+ "title": "干预策略",
270
+ "items": [
271
+ {
272
+ "title": "心理治疗",
273
+ "text": "通过心理咨询和治疗帮助犯罪者纠正心理问题。"
274
+ },
275
+ {
276
+ "title": "行为矫正",
277
+ "text": "通过行为训练帮助犯罪者改变不良行为模式。"
278
+ },
279
+ {
280
+ "title": "社会支持",
281
+ "text": "提供社会资源支持,帮助犯罪者重新融入社会。"
282
+ },
283
+ {
284
+ "title": "法律干预",
285
+ "text": "通过法律手段对犯罪行为进行约束和惩罚。"
286
+ }
287
+ ]
288
+ }
289
+ },
290
+ {
291
+ "type": "content",
292
+ "data": {
293
+ "title": "预防措施",
294
+ "items": [
295
+ {
296
+ "title": "早期干预",
297
+ "text": "通过早期心理干预预防潜在犯罪者的行为问题。"
298
+ },
299
+ {
300
+ "title": "教育预防",
301
+ "text": "通过教育提升公众的法律意识及心理健康水平。"
302
+ },
303
+ {
304
+ "title": "社区预防",
305
+ "text": "通过社区活动增强社会凝聚力,减少犯罪诱因。"
306
+ },
307
+ {
308
+ "title": "政策预防",
309
+ "text": "通过政策制定减少社会不平等,降低犯罪率。"
310
+ }
311
+ ]
312
+ }
313
+ },
314
+ {
315
+ "type": "transition",
316
+ "data": {
317
+ "title": "犯罪心理学的应用",
318
+ "text": "本章将探讨犯罪心理学在刑事司法、犯罪预防及研究教育中的应用。"
319
+ }
320
+ },
321
+ {
322
+ "type": "content",
323
+ "data": {
324
+ "title": "刑事司法系统",
325
+ "items": [
326
+ {
327
+ "title": "犯罪心理画像",
328
+ "text": "通过心理分析描绘犯罪者的特征,协助案件侦破。"
329
+ },
330
+ {
331
+ "title": "审讯技巧",
332
+ "text": "运用心理学方法提高审讯效率,获取真实供述。"
333
+ },
334
+ {
335
+ "title": "证人心理学",
336
+ "text": "研究证人的心理状态及其对证词可信度的影响。"
337
+ },
338
+ {
339
+ "title": "陪审团决策",
340
+ "text": "分析陪审员的心理过程及其对判决结果的影响。"
341
+ }
342
+ ]
343
+ }
344
+ },
345
+ {
346
+ "type": "content",
347
+ "data": {
348
+ "title": "犯罪预防与矫治",
349
+ "items": [
350
+ {
351
+ "title": "犯罪预防策略",
352
+ "text": "通过心理干预和社会支持预防犯罪行为的发生。"
353
+ },
354
+ {
355
+ "title": "监狱心理矫治",
356
+ "text": "通过心理治疗帮助服刑人员纠正心理问题,降低再犯率。"
357
+ },
358
+ {
359
+ "title": "社区矫正",
360
+ "text": "通过社区支持帮助犯罪者重新融入社会,减少再犯风险。"
361
+ },
362
+ {
363
+ "title": "再犯预防",
364
+ "text": "通过心理评估和干预降低犯罪者的再犯可能性。"
365
+ }
366
+ ]
367
+ }
368
+ },
369
+ {
370
+ "type": "content",
371
+ "data": {
372
+ "title": "研究与教育",
373
+ "items": [
374
+ {
375
+ "title": "犯罪心理学研究",
376
+ "text": "通过科学研究深化对犯罪心理的理解,推动学科发展。"
377
+ },
378
+ {
379
+ "title": "犯罪心理学教育",
380
+ "text": "通过教育培养专业人才,提升犯罪心理学的应用水平。"
381
+ },
382
+ {
383
+ "title": "专业培训",
384
+ "text": "通过培训提升司法人员的心理学知识和技能。"
385
+ },
386
+ {
387
+ "title": "学术交流",
388
+ "text": "通过学术交流促进犯罪心理学领域的国际合作与发展。"
389
+ }
390
+ ]
391
+ }
392
+ },
393
+ {
394
+ "type": "transition",
395
+ "data": {
396
+ "title": "未来发展趋势",
397
+ "text": "本章将探讨犯罪心理学在技术应用、跨学科合作及伦理挑战方面的未来发展方向。"
398
+ }
399
+ },
400
+ {
401
+ "type": "content",
402
+ "data": {
403
+ "title": "技术应用",
404
+ "items": [
405
+ {
406
+ "title": "人工智能与犯罪心理学",
407
+ "text": "利用人工智能技术分析犯罪数据,提升犯罪预测能力。"
408
+ },
409
+ {
410
+ "title": "大数据分析",
411
+ "text": "通过大数据技术挖掘犯罪行为的规律及心理特征。"
412
+ },
413
+ {
414
+ "title": "虚拟现实技术",
415
+ "text": "利用虚拟现实技术模拟犯罪场景,研究犯罪者的心理反应。"
416
+ },
417
+ {
418
+ "title": "神经科学研究",
419
+ "text": "通过神经科学研究探索犯罪行为的生物学基础。"
420
+ }
421
+ ]
422
+ }
423
+ },
424
+ {
425
+ "type": "content",
426
+ "data": {
427
+ "title": "跨学科合作",
428
+ "items": [
429
+ {
430
+ "title": "心理学与法律",
431
+ "text": "加强心理学与法学的合作,提升司法系统的科学性。"
432
+ },
433
+ {
434
+ "title": "心理学与医学",
435
+ "text": "通过心理学与医学的结合,深化对犯罪心理的理解。"
436
+ },
437
+ {
438
+ "title": "心理学与社会学",
439
+ "text": "通过心理学与社会学的交叉研究,全面分析犯罪现象。"
440
+ },
441
+ {
442
+ "title": "心理学与信息技术",
443
+ "text": "结合心理学与信息技术,开发犯罪预防与干预的新工具。"
444
+ }
445
+ ]
446
+ }
447
+ },
448
+ {
449
+ "type": "content",
450
+ "data": {
451
+ "title": "伦理与挑战",
452
+ "items": [
453
+ {
454
+ "title": "伦理问题",
455
+ "text": "探讨犯罪心理学研究中的伦理困境及解决方案。"
456
+ },
457
+ {
458
+ "title": "隐私保护",
459
+ "text": "研究犯罪心理学应用中如何保护个人隐私。"
460
+ },
461
+ {
462
+ "title": "数据安全",
463
+ "text": "分析犯罪心理学数据的安全风险及防护措施。"
464
+ },
465
+ {
466
+ "title": "未来挑战",
467
+ "text": "探讨犯罪心理学在未来发展中可能面临的技术与社会挑战。"
468
+ }
469
+ ]
470
+ }
471
+ },
472
+ {
473
+ "type": "end"
474
+ }
475
+ ]
frontend/public/mocks/AIPPT_Outline.md ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 5G技术如何改变我们的生活
2
+ ## 5G技术概述
3
+ ### 5G的定义
4
+ - 第五代移动通信技术
5
+ - 基于4G技术的重大升级
6
+ ### 5G的关键特性
7
+ - 高速率
8
+ - 低时延
9
+ - 大容量
10
+ ### 5G的发展历程
11
+ - 早期研究阶段
12
+ - 标准制定阶段
13
+ - 商用推广阶段
14
+
15
+ ## 5G对通信领域的变革
16
+ ### 个人通信体验提升
17
+ - 高清视频通话无卡顿
18
+ - 快速下载大文件
19
+ - 多人在线游戏低延迟
20
+ ### 通信网络架构优化
21
+ - 网络切片技术实现差异化服务
22
+ - 边缘计算减少数据传输距离
23
+ ### 通信安全保障增强
24
+ - 新的加密算法保障数据安全
25
+ - 实时监测防范网络攻击
26
+
27
+ ## 5G与智能家居的融合
28
+ ### 智能家电控制
29
+ - 远程控制家电开关和运行模式
30
+ - 家电之间智能联动
31
+ ### 家庭安防升级
32
+ - 高清实时监控家庭情况
33
+ - 异常情况及时报警
34
+ ### 家居环境智能调节
35
+ - 自动调节室内温度、湿度
36
+ - 智能灯光控制营造氛围
37
+
38
+ ## 5G推动智能交通发展
39
+ ### 自动驾驶汽车
40
+ - 车辆间实时通信避免碰撞
41
+ - 高精度地图实时更新
42
+ ### 智能交通管理
43
+ - 实时监控交通流量并优化信号灯
44
+ - 快速处理交通事故
45
+ ### 公共交通智能化
46
+ - 实时公交信息查询
47
+ - 车内高速网络服务
48
+
49
+ ## 5G在医疗领域的应用
50
+ ### 远程医疗服务
51
+ - 专家远程诊断病情
52
+ - 远程手术指导
53
+ ### 医疗设备互联
54
+ - 可穿戴设备实时传输健康数据
55
+ - 医院内部设备信息共享
56
+ ### 智能医疗管理
57
+ - 电子病历快速调取
58
+ - 医疗资源智能分配
59
+
60
+ ## 5G助力工业互联网升级
61
+ ### 智能制造
62
+ - 生产设备实时监控和远程维护
63
+ - 柔性生产线智能调度
64
+ ### 工业物流优化
65
+ - 货物实时定位和跟踪
66
+ - 智能仓储管理
67
+ ### 工业安全保障
68
+ - 危险区域实时监测
69
+ - 事故预警和应急处理
frontend/public/mocks/slides.json ADDED
@@ -0,0 +1,184 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "id": "test-slide-1",
4
+ "elements": [
5
+ {
6
+ "type": "shape",
7
+ "id": "4cbRxp",
8
+ "left": 0,
9
+ "top": 200,
10
+ "width": 546,
11
+ "height": 362.5,
12
+ "viewBox": [200, 200],
13
+ "path": "M 0 0 L 0 200 L 200 200 Z",
14
+ "fill": "#5b9bd5",
15
+ "fixedRatio": false,
16
+ "opacity": 0.7,
17
+ "rotate": 0
18
+ },
19
+ {
20
+ "type": "shape",
21
+ "id": "ookHrf",
22
+ "left": 0,
23
+ "top": 0,
24
+ "width": 300,
25
+ "height": 320,
26
+ "viewBox": [200, 200],
27
+ "path": "M 0 0 L 0 200 L 200 200 Z",
28
+ "fill": "#5b9bd5",
29
+ "fixedRatio": false,
30
+ "flipV": true,
31
+ "rotate": 0
32
+ },
33
+ {
34
+ "type": "text",
35
+ "id": "idn7Mx",
36
+ "left": 355,
37
+ "top": 65.25,
38
+ "width": 450,
39
+ "height": 188,
40
+ "lineHeight": 1.2,
41
+ "content": "<p><strong><span style=\"font-size: 112px;\">PPTist</span></strong></p>",
42
+ "rotate": 0,
43
+ "defaultFontName": "",
44
+ "defaultColor": "#333"
45
+ },
46
+ {
47
+ "type": "text",
48
+ "id": "7stmVP",
49
+ "left": 355,
50
+ "top": 253.25,
51
+ "width": 585,
52
+ "height": 56,
53
+ "content": "<p><span style=\"font-size: 24px;\">基于 Vue 3.x + TypeScript 的在线演示文稿应用</span></p>",
54
+ "rotate": 0,
55
+ "defaultFontName": "",
56
+ "defaultColor": "#333"
57
+ },
58
+ {
59
+ "type": "line",
60
+ "id": "FnpZs4",
61
+ "left": 361,
62
+ "top": 238,
63
+ "start": [0, 0],
64
+ "end": [549, 0],
65
+ "points": ["", ""],
66
+ "color": "#5b9bd5",
67
+ "style": "solid",
68
+ "width": 2
69
+ }
70
+ ],
71
+ "background": {
72
+ "type": "solid",
73
+ "color": "#ffffff"
74
+ }
75
+ },
76
+ {
77
+ "id": "test-slide-2",
78
+ "elements": [
79
+ {
80
+ "type": "text",
81
+ "id": "ptNnUJ",
82
+ "left": 145,
83
+ "top": 148,
84
+ "width": 711,
85
+ "height": 77,
86
+ "lineHeight": 1.2,
87
+ "content": "<p style=\"text-align: center;\"><strong><span style=\"font-size: 48px;\">在此处添加标题</span></strong></p>",
88
+ "rotate": 0,
89
+ "defaultFontName": "",
90
+ "defaultColor": "#333"
91
+ },
92
+ {
93
+ "type": "text",
94
+ "id": "mRHvQN",
95
+ "left": 207.50000000000003,
96
+ "top": 249.84259259259264,
97
+ "width": 585,
98
+ "height": 56,
99
+ "content": "<p style=\"text-align: center;\"><span style=\"font-size: 24px;\">在此处添加副标题</span></p>",
100
+ "rotate": 0,
101
+ "defaultFontName": "",
102
+ "defaultColor": "#333"
103
+ },
104
+ {
105
+ "type": "line",
106
+ "id": "7CQDwc",
107
+ "left": 323.09259259259267,
108
+ "top": 238.33333333333334,
109
+ "start": [0, 0],
110
+ "end": [354.8148148148148, 0],
111
+ "points": ["", ""],
112
+ "color": "#5b9bd5",
113
+ "style": "solid",
114
+ "width": 4
115
+ },
116
+ {
117
+ "type": "shape",
118
+ "id": "09wqWw",
119
+ "left": -27.648148148148138,
120
+ "top": 432.73148148148147,
121
+ "width": 1056.2962962962963,
122
+ "height": 162.96296296296296,
123
+ "viewBox": [200, 200],
124
+ "path": "M 0 20 C 40 -40 60 60 100 20 C 140 -40 160 60 200 20 L 200 180 C 140 240 160 140 100 180 C 40 240 60 140 0 180 L 0 20 Z",
125
+ "fill": "#5b9bd5",
126
+ "fixedRatio": false,
127
+ "rotate": 0
128
+ }
129
+ ],
130
+ "background": {
131
+ "type": "solid",
132
+ "color": "#fff"
133
+ }
134
+ },
135
+ {
136
+ "id": "test-slide-3",
137
+ "elements": [
138
+ {
139
+ "type": "shape",
140
+ "id": "vSheCJ",
141
+ "left": 183.5185185185185,
142
+ "top": 175.5092592592593,
143
+ "width": 605.1851851851851,
144
+ "height": 185.18518518518516,
145
+ "viewBox": [200, 200],
146
+ "path": "M 0 0 L 200 0 L 200 200 L 0 200 Z",
147
+ "fill": "#5b9bd5",
148
+ "fixedRatio": false,
149
+ "rotate": 0
150
+ },
151
+ {
152
+ "type": "shape",
153
+ "id": "Mpwv7x",
154
+ "left": 211.29629629629628,
155
+ "top": 201.80555555555557,
156
+ "width": 605.1851851851851,
157
+ "height": 185.18518518518516,
158
+ "viewBox": [200, 200],
159
+ "path": "M 0 0 L 200 0 L 200 200 L 0 200 Z",
160
+ "fill": "#5b9bd5",
161
+ "fixedRatio": false,
162
+ "rotate": 0,
163
+ "opacity": 0.7
164
+ },
165
+ {
166
+ "type": "text",
167
+ "id": "WQOTAp",
168
+ "left": 304.9074074074074,
169
+ "top": 198.10185185185182,
170
+ "width": 417.9629629629629,
171
+ "height": 140,
172
+ "content": "<p style=\"text-align: center;\"><strong><span style=\"font-size: 80px;\"><span style=\"color: rgb(255, 255, 255);\">感谢观看</span></span></strong></p>",
173
+ "rotate": 0,
174
+ "defaultFontName": "",
175
+ "defaultColor": "#333",
176
+ "wordSpace": 5
177
+ }
178
+ ],
179
+ "background": {
180
+ "type": "solid",
181
+ "color": "#fff"
182
+ }
183
+ }
184
+ ]
frontend/public/mocks/template_1.json ADDED
The diff for this file is too large to render. See raw diff
 
frontend/public/test-share.html ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Test Share Link Generation</title>
5
+ <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
6
+ </head>
7
+ <body>
8
+ <h1>Test Share Link Generation</h1>
9
+ <button onclick="testShareLink()">Generate Share Link</button>
10
+ <div id="result"></div>
11
+
12
+ <script>
13
+ async function testShareLink() {
14
+ const resultDiv = document.getElementById('result');
15
+ resultDiv.innerHTML = 'Testing...';
16
+
17
+ try {
18
+ const response = await axios.post('/api/public/generate-share-link', {
19
+ userId: 'user_1735716399333',
20
+ pptId: 'ppt_1735716399333',
21
+ slideIndex: 0
22
+ });
23
+
24
+ resultDiv.innerHTML = `
25
+ <h3>Success!</h3>
26
+ <pre>${JSON.stringify(response.data, null, 2)}</pre>
27
+ `;
28
+ } catch (error) {
29
+ resultDiv.innerHTML = `
30
+ <h3>Error!</h3>
31
+ <p>Status: ${error.response?.status}</p>
32
+ <p>Message: ${error.message}</p>
33
+ <pre>${JSON.stringify(error.response?.data, null, 2)}</pre>
34
+ `;
35
+ }
36
+ }
37
+ </script>
38
+ </body>
39
+ </html>
frontend/tsconfig.app.json ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "extends": "@vue/tsconfig/tsconfig.dom.json",
3
+ "include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
4
+ "exclude": ["src/**/__tests__/*"],
5
+ "compilerOptions": {
6
+ "composite": true,
7
+ "noEmit": true,
8
+ "baseUrl": ".",
9
+ "paths": {
10
+ "@/*": ["./src/*"]
11
+ }
12
+ }
13
+ }
frontend/tsconfig.json ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "files": [],
3
+ "references": [
4
+ {
5
+ "path": "./tsconfig.node.json"
6
+ },
7
+ {
8
+ "path": "./tsconfig.app.json"
9
+ }
10
+ ]
11
+ }
frontend/tsconfig.node.json ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "compilerOptions": {
3
+ "composite": true,
4
+ "noEmit": true,
5
+ "module": "ESNext",
6
+ "moduleResolution": "Bundler",
7
+ "types": ["node"],
8
+ "allowSyntheticDefaultImports": true,
9
+ "strict": true,
10
+ "target": "ES2022"
11
+ },
12
+ "include": [
13
+ "vite.config.*",
14
+ "vitest.config.*",
15
+ "cypress.config.*",
16
+ "nightwatch.conf.*",
17
+ "playwright.config.*"
18
+ ]
19
+ }
frontend/vite.config.ts ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { fileURLToPath, URL } from 'node:url'
2
+
3
+ import { defineConfig } from 'vite'
4
+ import vue from '@vitejs/plugin-vue'
5
+ import { fileURLToPath, URL } from 'node:url'
6
+
7
+ // https://vitejs.dev/config/
8
+ export default defineConfig({
9
+ base: '',
10
+ plugins: [
11
+ vue(),
12
+ ],
13
+ optimizeDeps: {
14
+ include: ['html2canvas']
15
+ },
16
+ build: {
17
+ rollupOptions: {
18
+ external: ['html2canvas']
19
+ }
20
+ },
21
+ server: {
22
+ host: '127.0.0.1',
23
+ port: 7860,
24
+ proxy: {
25
+ '/api': {
26
+ target: 'http://localhost:7861', // 后端运行在7861端口
27
+ changeOrigin: true,
28
+ }
29
+ }
30
+ },
31
+ css: {
32
+ preprocessorOptions: {
33
+ scss: {
34
+ api: 'modern-compiler'
35
+ },
36
+ },
37
+ },
38
+ resolve: {
39
+ alias: {
40
+ '@': fileURLToPath(new URL('./src', import.meta.url))
41
+ }
42
+ }
43
+ })