# zhufeng-vue3-system2105
**Repository Path**: firyang/zhufeng-vue3-system2105
## Basic Information
- **Project Name**: zhufeng-vue3-system2105
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 76
- **Created**: 2021-05-20
- **Last Updated**: 2021-06-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# zhufeng-vue3-system2105
# vue3 管理系统训练营
## 学习目标
- 前端技术栈:vue3.0+typescript+element-plus
- 后端技术栈:koa2+sequelize+mysql
- 通用组件:
- 面包屑
- 标签导航
- 侧边栏(权限菜单)
- 自定义 icon(Svg Sprite 图标)
- 拖拽看板
- 路由检索
- 通用功能:
- 主题切换 (基于 element-plus)
- Screenfull 全屏
- 图片上传
- 登陆注册(jwt)
- 权限控制(系统管理:用户管理、角色管理、菜单管理)
- 权限验证(页面权限、指令权限)
## 入营须知
- 需要参加的小伙伴必须把学号和姓名添加到表格中[vue3 管理系统训练营](https://shimo.im/sheets/YTYrXKcHPrxqJh6g/MODOC/);
- 本期训练营预计两周,每两天发布一次文档以及作业;每两天交一次作业作为一个阶段的任务;
- 参加本训练营需要支付 10 学分;
- 发布作业的当天晚上 8 点布置实践任务,截止两天后晚上 8 点前完成提交作业;完成阶段任务,每 part 可获得 5 学分,共 7 次;
- 如果当天任务无法完成,则中止训练营资格,请自动离群,无法参与后续的学习,已经扣除的学分不退机会只有一次,希望把握住
- 全部学员按学号尾号分为 10 个组,尾号相同的为一组,当天小组成员全部完成的每个人的学分翻倍
- 在其期间因为某些原因不能参加训练营的小伙伴们要私聊助教
## 训练流程
1. 先将训练营的仓库代码仓库 Fork 到自己的码云账号下:[https://gitee.com/zhufengpeixun/zhufeng-vue3-system2105](https://gitee.com/zhufengpeixun/zhufeng-vue3-system2105)
2. 将 Fork 后的仓库 Clone 到本地
3. 在项目根目录下创建自己的项目并完成查看 README.md 文档
4. 把实践总结(学到了什么?收获了什么?遇到了什么问题?如何解决的?)写在当天目录的学习日记.md 文件里
5. 在本地仓库完成作业后,push 到自己的码云远程仓库中
6. 最后将自己最后的 commit 链接地址添加到训练营仓库的当天 issue 中
7. 完成后在微信群中打卡,并@助教表示完成,在自己小组里可以@组长表示完成,组长可以在表格里添加学分,全员晚八点之前完成就可以进行翻倍,前提是组长需要向助教截图
8. 大家如果遇到问题可以在群里讨论的
如果不会操作的可以看操作视频:[http://img.zhufengpeixun.cn/submitwork.mp4](http://img.zhufengpeixun.cn/submitwork.mp4)
## 文档
[https://www.yuque.com/brolly/hgg6ly/weypq3](https://www.yuque.com/brolly/hgg6ly/weypq3)
## TypeError: Converting circular structure to JSON
- 报错
```
[Vue warn]: Error in nextTick: "TypeError: Converting circular structure to JSON
--> starting at object with constructor 'Object'
| property 'root' -> object with constructor 'Object'
--- property 'store' closes the circle"
```
- 分析
vuex 中的状态管理 state 中存储了 router 实例(组件中获取的 this.\$route),存在循环引用.
vuex 使用了插件 vuex-persistedstate
state 中有了循环引用,插件 vuex-persistedstate 要执行 JSON.stringify 把 state 数据转化成字符串然后存储到浏览器本地存储。
- 解决
在存储 router 实例时,使用深拷贝解除循环引用
## 高级前端开发者必会的 34 道 Vue 面试题系列
https://zhuanlan.zhihu.com/p/115169617
## 2021 年前端面试必读文章
https://juejin.cn/post/6844904116339261447?utm_source=gold_browser_extension%3Futm_source%3Dgold_browser_extension
## 前端下载 txt
```js
/**
* 将字符串文本导出为txt文件
* constent { string } 需要下载的文本
*/
function downloadTxt(content) {
// 方式一
const url = window.URL.createObjectURL(new Blob([content]))
// 方式二
const url = `data:text/plain;charset=utf-8,${encodeURIComponent(content)}`
const filename = `${Date.now()}.txt`
const el = document.createElement('a')
el.setAttribute('href', url)
el.setAttribute('download', filename)
el.setAttribute('style', 'display:none')
document.body.appendChild(el)
el.click()
el.parentNode.removeChild(el)
// 方式一下载完成后需要释放链接
window.URL.revokeObjectURL(url)
}
```
## iframe 相关 api
### 事件
- onload 在 frame 载入完成后
```html
```
```js
function load() {
console.log('iframe加载完成')
}
```
### 属性
- contentWindow 返回 frame/iframe 生成的 window 对象
```html
```
```js
const frame = document.getElementById('myframe')
const body = frame.contentWindow || frame.contentDocument
body.style.background = '#efc'
```
### 文档
https://www.w3cschool.cn/jsref/dom-obj-frame.html