Spaces:
Running
Running
Upload 46 files
Browse files- frontend/.eslintrc.cjs +77 -0
- frontend/.gitignore +30 -0
- frontend/commitlint.config.cjs +16 -0
- frontend/dist/assets/index-Cr6mZSw1.css +0 -0
- frontend/dist/assets/index-Cvmd_Ycm.js +0 -0
- frontend/dist/favicon.ico +0 -0
- frontend/dist/icons/android-chrome-192x192.png +0 -0
- frontend/dist/icons/android-chrome-512x512.png +0 -0
- frontend/dist/icons/android-chrome-maskable-192x192.png +0 -0
- frontend/dist/icons/android-chrome-maskable-512x512.png +0 -0
- frontend/dist/icons/apple-touch-icon-152x152.png +0 -0
- frontend/dist/icons/favicon-16x16.png +0 -0
- frontend/dist/icons/favicon-32x32.png +0 -0
- frontend/dist/index.html +64 -0
- frontend/dist/mocks/AIPPT.json +475 -0
- frontend/dist/mocks/AIPPT_Outline.md +69 -0
- frontend/dist/mocks/slides.json +184 -0
- frontend/dist/mocks/template_1.json +0 -0
- frontend/dist/test-share.html +39 -0
- frontend/fix-mixins.cjs +61 -0
- frontend/fix-mixins.js +0 -0
- frontend/index.html +63 -0
- frontend/package-lock.json +0 -0
- frontend/package.json +75 -0
- frontend/public/favicon.ico +0 -0
- frontend/public/icons/android-chrome-192x192.png +0 -0
- frontend/public/icons/android-chrome-512x512.png +0 -0
- frontend/public/icons/android-chrome-maskable-192x192.png +0 -0
- frontend/public/icons/android-chrome-maskable-512x512.png +0 -0
- frontend/public/icons/apple-touch-icon-152x152.png +0 -0
- frontend/public/icons/favicon-16x16.png +0 -0
- frontend/public/icons/favicon-32x32.png +0 -0
- frontend/public/mocks/AIPPT.json +475 -0
- frontend/public/mocks/AIPPT_Outline.md +69 -0
- frontend/public/mocks/slides.json +184 -0
- frontend/public/mocks/template_1.json +0 -0
- frontend/public/test-share.html +39 -0
- frontend/tsconfig.app.json +13 -0
- frontend/tsconfig.json +11 -0
- frontend/tsconfig.node.json +19 -0
- 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 |
+
})
|