cdw3: vue3+typescript后台管理系统实战

一、创建及基础配置项目

1. 创建基于vite的项目

npm init vue@latest
在这里插入图片描述

2. vue文件声明

引入vue文件会报错:找不到模块或其对应的类型声明(禁用Vue-Official这个插件的情况下才会报错),此时可以在env.d.ts文件中加入下面这段文件声明代码
在这里插入图片描述

在这里插入图片描述
加入vue文件声明之后,鼠标放到引入的App会显示DefineComponent,启用上面的插件后不会显示了
在这里插入图片描述

3. 目录结构及CSS样式重置

在这里插入图片描述
npm i -S normalize.css
搞一份reset.css
在这里插入图片描述
main.ts中引入;
npm i less -D
在这里插入图片描述

4. 路由配置

npm i -S vue-router
在这里插入图片描述
main.ts中使用
在这里插入图片描述

5. pinia状态管理

使用示例
npm i -S pinia
在这里插入图片描述
main.ts中引入
在这里插入图片描述
定义一个store----->counter
在这里插入图片描述
使用counter
在这里插入图片描述

6. axios

7. vite区分开发环境和生产环境

两种方式
方式一
在这里插入图片描述
方式二
在这里插入图片描述
方式二示例
定义变量以VITE开头
在这里插入图片描述
应用:
获取变量也加VITE
在这里插入图片描述

插曲:vite,在本地执行npm run build 打包后,可以执行 npm run preview进下预览
在这里插入图片描述

8. 引入Element-Plus

插曲
在这里插入图片描述
npm i -S element-plus
①全局引入
在这里插入图片描述
全局引入后,类型声明
在这里插入图片描述

②按需引入
npm install -D unplugin-vue-components unplugin-auto-import
在这里插入图片描述
在这里插入图片描述
按需引入后可以看见根目录下多了两个文件"auto-imports.d.ts", “components.d.ts”(在template中使用到的组件会自动添加到components.d.ts中)
在这里插入图片描述

然后需要手动把这两个文件加入到tsconfig.app.json中,这样鼠标放到组件上才会展示类型
在这里插入图片描述
在js中这样引入的组件不会自动加入到components.d.ts中
在这里插入图片描述

9. app宽高铺满全屏

不用挨个html、body、.app设置宽高100%,只需要如下设置
在这里插入图片描述
覆盖element-plus的css变量
在这里插入图片描述

在这里插入图片描述

10. 修改ui样式

除了自定义类直接修改对应样式,还可以通过修改变量覆盖原来的变量
在这里插入图片描述
在这里插入图片描述

11. 全局引入注册图标组件

在这里插入图片描述
在这里插入图片描述
注意上边app的类型来源
在这里插入图片描述
先点入createApp进入下图,指向createApp的类型CreateAppFunction,可以看见CreateAppFunction返回的类型App,所以 从vue中引入type App,就是registerIcons函数参数的类型
在这里插入图片描述

12. 使用插槽

具名插槽
在这里插入图片描述

13. 父组件调用子组件的方式

子组件上加ref=“accountRef”,accountRef = ref<InstanceType>
ref<InstanceType> vue中获取组件类型,但是调用子组件方法时ts会报错
在这里插入图片描述
报错:
在这里插入图片描述
不传类型就不报错了,上述报错尚不知原因
在这里插入图片描述
子组件暴露loginAction
下面也是一样的定义formRef的类型 ref<InstanceType>
被注释的方式也可以
在这里插入图片描述

14. ElMessage不生效

其实生效了但是看不见效果是因为没有引入样式
在这里插入图片描述
template中使用的element组件会被自动引入,因此不需要手动引入样式,但是js中使用的组件不会被自动引入
在这里插入图片描述
解决办法:第一种方式单独引入(全局引入所有样式也行,但是直接忽略该方式)
在这里插入图片描述

第二种使用插件 vite-plugin-style-import
npm install vite-plugin-style-import -D

在这里插入图片描述
配置完报错如下,继续安装 npm i -D consola
在这里插入图片描述

15. node基础配置及登录接口

在这里插入图片描述
配置开发环境接口服务地址
在这里插入图片描述

16. 定义类型文件的位置选择

由于这三个地方都要用到登录信息的数据类型,所以我们选择在src/types/下定义文件类型,在index.d.ts中统一导出
在这里插入图片描述
定义接口的地方使用
在这里插入图片描述
store中使用
在这里插入图片描述

17. pinia状态数据持久化

封装localStorage和sessionStorage
在这里插入图片描述
store中使用
在这里插入图片描述
登录之后跳转
在这里插入图片描述

18. 退出登录及路由守卫

在这里插入图片描述

19. 记住密码

setCache方法先修改成如下
在这里插入图片描述
localStorage.setItem()返回的是promise
在这里插入图片描述

20. 左侧menu导航

在这里插入图片描述
动态菜单
storeToRefs
在这里插入图片描述

21. 父子组件通信实现菜单折叠

子组件自定义事件
在这里插入图片描述
父组件监听自定义事件,传递属性给另一个子组件
在这里插入图片描述
子组件定义props接受
在这里插入图片描述

22. 穿透样式修改

直接插入到body中的样式,用global来穿透
在这里插入图片描述
deep的使用场景
由于父组件App.vue加了scoped,子组件test的根元素.test和.app都有了data-v-7a7a37b1,但是在app.vue中不用deep就能控制.test的样式,因为.test是test组件的根元素,
在这里插入图片描述
但是test里面的子元素就无法控制了,此时可以加deep
在这里插入图片描述

23. 手动创建静态路由

children中的子路由路径如果不以/开头,则路由跳转的时候会自动拼上父路由的path
在这里插入图片描述

24. 动态路由

1. 动态路由

在这里插入图片描述
接口返回的菜单地址
在这里插入图片描述
import.meta.glob(路径,{ eager: true }) eater: true–>直接返回文件Module
读取改路径下所有的ts文件
coderwhy插件自动生成这些目录及文件
在这里插入图片描述
ts文件导出路由及组件
在这里插入图片描述
login.ts中登录之后匹配动态路由,然后调用router.addRoute,加入到main父组件中的子路由中
在这里插入图片描述
router.addRoute(‘main’, route) 加入到了这个位置
在这里插入图片描述
—> 解决刷新后动态路由就不存在的问题
store/login.ts改成如下
在这里插入图片描述
store/index.ts修改
在这里插入图片描述
main.ts
在这里插入图片描述

2. 登录之后默认进入第一个动态路由

在这里插入图片描述
router/index.ts
在这里插入图片描述

3. 刷新页面根据当前页面url高亮菜单

在这里插入图片描述

在这里插入图片描述

25. 动态面包屑

在这里插入图片描述

26. 用户列表

1.定义用户列表数据状态

在这里插入图片描述

2.时间格式化

在这里插入图片描述

3. data-picker英文转中文

在这里插入图片描述

用el-config-provider组件把router-view包起来
在这里插入图片描述

4. 兄弟组件通过父组件通信

自定义时间发送给父组件,父组件通过ref调用另一个子组件暴露的方法
在这里插入图片描述
另一个子组件的方法要暴露出去,父组件才能调用
在这里插入图片描述

5. 分页查询

在这里插入图片描述
在这里插入图片描述

6. 删除接口

接口是delete,调用的时候也是delete
在这里插入图片描述

27. 封装公共组件

1. 封装公共查询条件组件page-search

在这里插入图片描述
注意props的类型限制、给表单项赋初始值、自定义事件
在这里插入图片描述
department.vue中使用page-search,引入配置数据
在这里插入图片描述
department.vue中引入公共js逻辑hooks
在这里插入图片描述

2. 封装公共表格组件 page-content

v-bind=item,相当于把item对象里所有的属性都分开绑定了
在这里插入图片描述
在这里插入图片描述

3. 封装公共弹窗组件page-modal

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
角色列表页面,新增弹窗,自定义新增项
在这里插入图片描述

5. defineProps中使用泛型不支持导入

只能在当前文件定义
在这里插入图片描述

28. 监听pinia中action的触发

场景:对数据新增、修改、删除后都要刷新列表,要将pageNo置为1,此时就可以监听store中的这些操作
name表示触发的action名称,写在after的回调中,确保action触发成功(没有请求报错)
在这里插入图片描述

29. 数字递增动画 插件 countup.js

在这里插入图片描述

30. echarts使用示例 三层封装

dashboard.vue引用pie-echart,只传入处理后的接口数据,pie-echart中定义配置项并且只接收所需要的动态数据,
在这里插入图片描述
在这里插入图片描述
具体引用echarts的页面只需要传入所需要的数据
在这里插入图片描述

31. 代码规范

.editorconfig

# http://editorconfig.org

root = true

[*] # 表示所有文件适用
charset = utf-8 # 设置文件字符集为 utf-8
indent_style = space # 缩进风格(tab | space)
indent_size = 2 # 缩进大小
end_of_line = lf # 控制换行类型(lf | cr | crlf)
trim_trailing_whitespace = true # 去除行尾的任意空白字符
insert_final_newline = true # 始终在文件末尾插入一个新行

[*.md] # 表示仅 md 文件适用以下规则
max_line_length = off
trim_trailing_whitespace = false

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值