soybeanjs / soybean-admin

A clean, elegant, beautiful and powerful admin template, based on Vue3, Vite5, TypeScript, Pinia, NaiveUI and UnoCSS. 一个清新优雅、高颜值且功能强大的后台管理模板,基于最新的前端技术栈,包括 Vue3, Vite5, TypeScript, Pinia, NaiveUI 和 UnoCSS。
https://soybeanjs.cn
MIT License
10.21k stars 1.83k forks source link

feat: add subpackage `@sa/alova`, refactor example with this package. #641

Closed JOU-amjs closed 1 month ago

JOU-amjs commented 1 month ago

此pr包含以下修改,保持了与@sa/axios相同的效果:

添加@sa/alova子包

通过77行代码实现了比@sa/axios更丰富的特性,具体如下:

  1. 尽量与@sa/axios的封装设计保持了一致
  2. 自带了token无感刷新特性,不再需要自行实现,并且在刷新token期间发送的请求将会挂起等待,刷新完成自动重新请求
  3. 因不再需要自行实现token刷新,去除了onBackendFail钩子
  4. 可自定义请求适配器,默认使用fetch适配器

使用@sa/alova重构views

  1. src/service/api下改用@sa/alova
  2. 使用alova的usePagination重构了packages/hooks/src/use-table.tssrc/hooks/common/table.ts,删除了大量与usePagination重复的代码,既兼容了之前的用法,也保留了usePagination的所有特性,例如对列表下一页数据做预加载。并对用户列表、角色列表和菜单列表做了小调整。
  3. 对以下组件中的权限列表、页面列表等的获取,使用useWatcher进行重构:
    • 用户操作抽屉src\views\manage\user\modules\user-operate-drawer.vue
    • 菜单权限弹框src\views\manage\role\modules\menu-auth-modal.vue
    • 菜单操作弹框src\views\manage\menu\modules\menu-operate-modal.vue
  4. 由于表单提交未找到可用的api,暂无法使用useForm重构。

部分优化

  1. 对以上弹框和抽屉内的数据获取添加了loading效果
  2. 发现菜单列表src\views\manage\menu\index.vue中的allPages数据只在菜单操作弹框src\views\manage\menu\modules\menu-operate-modal.vue内使用,因此将allPages的数据获取移动到了菜单操作弹框中,实现弹框显示再加载的效果
honghuangdc commented 1 month ago

改了这么多文件,这不得花时间好好评

JOU-amjs commented 1 month ago

@honghuangdc 慢慢来,有哪里不足的可以提出来哦

Azir-11 commented 1 month ago

注意到这个pr会影响到项目架构类的部分写法,比如if else需要改为try catch,这样其实会增加用户的更新难度与后续同步main分支难度,感觉不太利于你们的推广,这个你怎么看?

honghuangdc commented 1 month ago

可以采用这样的方案,新增一两个示例页面,里面的用alova的请求案例 然后通过createAlovaRequest去创建一个实例,再写对应的请求 原则上尽量做到增量更新

JOU-amjs commented 1 month ago

@honghuangdc @Azir-11 可以的,新增两个页面做演示后是不是直接就合并到example中比较好,另外你们有没有具体希望用alova实现的页面这样的要求?

Azir-11 commented 1 month ago

@honghuangdc @Azir-11 可以的,新增两个页面做演示后是不是直接就合并到example中比较好,另外你们有没有具体希望用alova实现的页面这样的要求?

是的,可以在example分支新增一个管理页的一级菜单,内部全部都是用alova进行请求,在“请求”菜单中也可以增加一些alova的特殊功能; 单独用alova实现的页面目前没有,或者说凡是带有请求的也都可以

JOU-amjs commented 1 month ago

@Azir-11 你看这样可以吗,我加个菜单栏,里面的二级菜单页面展示alova的一些用法,例如分页列表、表单提交、验证码发送等等

Azir-11 commented 1 month ago

@Azir-11 你看这样可以吗,我加个菜单栏,里面的二级菜单页面展示alova的一些用法,例如分页列表、表单提交、验证码发送等等

完全可以

JOU-amjs commented 1 month ago

那我先关闭这个pr,到时加完再提交新的