cst-exam 项目复盘

cst-exam 项目复盘
寻觅~流光cst-exam
一.项目基本架构:
1 | src/ |
二.配置@/路径:
配置快捷导入的@/路径: 在 SvelteKit 中配置快捷路径(如 @/
指向 src/
),可以通过修改 vite.config.js
来实现。SvelteKit 基于 Vite,所以路径别名配置是一样的。
步骤如下:
- 安装路径别名辅助插件
1 | pnpm add -D @rollup/plugin-alias |
- 修改
vite.config.js
,添加resolve.alias
配置:
1 | // vite.config.js |
需要注意的是,上面的配置不生效!!!
需要在svelte.config.js
中进行配置:
1 | import adapter from "@sveltejs/adapter-node"; |
原因:
三.配置代码统一格式化:
- 安装 Prettier 及相关插件
1 | npm install -D prettier prettier-plugin-svelte |
- 添加
.prettierrc
配置文件
1 | { |
- 添加
.prettierignore
忽略文件(可选)
1 | node_modules.build; |
- VS Code 配置自动保存时格式化(推荐)
打开 VS Code 的设置(快捷键:Ctrl + ,
),搜索并启用:
- ✅
Format On Save
- ✅
Editor: Default Formatter
选择 Prettier
或者编辑 .vscode/settings.json
(推荐放进项目中):
1 | { |
更详细的写法:
1 | .vscode/settings.json |
四.遇到的详细问题
1.重定向到登录页面(在项目首次打开的时候):
1 | src / routes / +page.server.js; |
🔄 效果:
- 当用户访问根路径
/
时,会被立即重定向到/login
。 307
状态码表示临时重定向,是推荐的跳转方式。
五.统一组件化开发
1 | Button.svelte |
六.配置 axios
1 | pnpm add axios |
管理员端:
1 | /** |
教师端:
1 | /** |
七现阶段标注的问题
创建班级需要添加课程名称,缺失了
课程名称
课程分类应该是被砍掉了,不用加
班级管理中需要添加
删除班级
的`功能,这里缺少了
八.配置 mock 进行接口模拟测试
1 | pnpm add mockjs -D |
九.临时放置代码块
1 | { |
十.下载文件
这里要根据后端返回的文件数据到底在哪里来判断blob里接收的具体是什么
下面的时是基础的模板代码,后续可以进行改进多段上传等优化解决方案
1 | /** |
十一.压缩包文件下载:
修改blob里面的type
1 | const blob = new Blob([Response], { |
………还可以继续修改上传为excel文件等操作
十二.上传文件
❗ 为啥「点击上传」必须要 input?
浏览器不会允许 JavaScript 随意访问本地文件系统 ——
点击上传只能靠 <input type="file">
元素打开文件选择框,不管你隐藏得多深,底层都是它。
✅ 但你可以让 input 完全“隐身”!
有两个方法来写这个上传文件的操作:
- 在html部分写上
- 在js逻辑中写dom操作,创建input标签,设置type=”file”,设置点击,加到body中去
1 | let previewUrl |
十三.已完成模块记录
页面部分—整个页面模拟接口
查看班级管理中的学生列表中的学生详细信息
教师新增学生账号页面
班级信息页面
班级列表管理页面
班级管理页面
当个新增学生账号页面
………其余部分全部完成,就不写了
页面部分—页面样式
管理员端的教师列表页面
学生列表中的学生详细信息页面
教师新增学生账号页面
班级列表管理页面
班级管理页面
当个新增学生账号页面
………其余部分全部完成,就不写了
接口部分—对接情况
查看详细班级信息—班级信息与学生列表
举报学生—学生列表中的举报学生
查看学生列表中的某一个详细的学生信息
导出全部学生列表—pdf or excel
教师新增学生账号接口
班级信息列表
创建班级接口
编辑班级接口
获取后端自动生成的账户密码
………其余部分全部完成,就不写了
十四.统一状态管理设置
存储状态的文件
1 | import { writable } from "svelte/store"; |
在 Svelte 项目中获取 adminInforStore
数据有以下几种方式:
- 在 Svelte 组件中直接订阅 :
1 | <script> |
注意事项:
- 使用 $ 前缀可以自动订阅和取消订阅(推荐方式)
- 手动订阅时务必记得取消订阅防止内存泄漏
- 数据已经是解密后的状态,无需额外处理
十五.解决跨域的问题
1 | server: { |
十六.组件之间传递函数方法的三种方式
方法一:
使用 bind:this
获取组件实例 子组件暴露方法,父组件调用方法。
子组件:
1 | <script> |
父组件:
1 | <script> |
方法二:
用事件派发 希望子组件触发动作但由父组件来处理逻辑,可以用 createEventDispatcher
:
子组件:
1 | <script> |
父组件:
1 | <Child on:reset={handleReset} /> |
方法三:
使用全局状态管理store
来解决