AntD pro Vue 开箱姿势之Zero to One

1,312 阅读3分钟

image.png 😉😶‍🌫️本文旨在总结使用 AntD pro Vue 中遇到的问题与对应解决方法
🎃⛳AntD pro Vue 针对3.0.4版本

1. 版本选择与下载

1.1 Vue2 还是 Vue3?

Snipaste_2022-10-25_17-31-58.png 若执意使用 Vue3,需使用 pro-layout 组合,这里先不做探讨。

1.2 下载启动

git clone --depth=1 https://github.com/vueComponent/ant-design-vue-pro.git my-project
//本地环境要安装 git 和 node

🚩问题:npm install后遇到了报错 The project seems to require pnpm but it's not installed
✅解决:npm install -g pnpm
😶‍🌫️原因:项目根目录中有一个pnpm-lock.yaml文件,这是一个确定性的 lockfile ,如果没有安装就 pnpm 就会报错。 image.png 😊拓展:
若川《尤雨溪推荐神器 ni ,能替代 npm/yarn/pnpm ?简单好用!源码揭秘!》
金虹桥程序员《都2022年了,pnpm快到碗里来!》

2. 入门结构

Suggestion.gif项目跑起来后,分析大致结构,为魔改做准备。

😶‍🌫️project directory: image.png 😶‍view files: image.png

3. 登陆与路由

路由和菜单是一个应用的骨架,pro中的路由为方便管理,使用中心化的方式,在src/config/router.config.js中统一管理。

3.1 登陆报错

🚩问题:登陆页面总是显示账户或密码错误 image.png ✅解决:src/mock/service.auth.js中强硬要求隐藏即可
image.png 😶‍🌫️原因:打印mock提交的数据和账号密码表单数据发现不一致,其实魔改应该一开始就在main.js中隐藏掉mock数据,但为了先了解结构还是以mock为准。

3.2 路由分析

  • router/config/js:项目中的所有路由都通过统一管理,菜单也是根据这个文件生成的
  • src/permission.js:路由守卫文件,控制权限
  • src/router/index.js:路由模式和重置路由方法
  • src/store/modules/async-router.jsstatic-router文件:关注actions.GenerateRoutes具体逻辑在此实现

-------------------------- 占位内容

3.3 路由权限

Pro有两套方案 官方文档

1. 默认前端固定路由表和权限配置,后端提供用户权限标识,前端根据识别判断是否用路由权限
2. 后端提供权限和路由信息结构接口,动态生成权限和菜单

image.png

-------------------------- 占位内容

4. layouts file

在路由规则中,component 项由@layouts引入,根目录下的 layouts 是项目公共布局文件夹,传统包括侧边栏和导航头,再新建 index.js 暴露。 image.png

4.1 BasicLayout

BasicLayout 重点关注 <pro-layout></pro-layout>,查看了依赖发现此标签隶属于@ant-design-vue/pro-layout

<pro-layout
    :menus="menus"
    :collapsed="collapsed"
    :mediaQuery="query"
    :isMobile="isMobile"
    :handleMediaQuery="handleMediaQuery"
    :handleCollapse="handleCollapse"
    :i18nRender="i18nRender"
    v-bind="settings"
  >
  <template v-slot:menuHeaderRender>
      menuHeaderRender渲染logo和title
  </template>
  <template v-slot:headerContentRender>
      自定义头内容的方法,顶部左侧
  </template>
  <template v-slot:rightContentRender>
      顶部右边内容
  </template>
  <template v-slot:footerRender>底部内容</template>
</pro-layout>

ProComponets ,基于 Ant Design 开发的模板组件,提供了更高级别的抽象支持。ProLayout解决布局问题,提供菜单和面包屑。

4.2 面包屑

每一个组件的内容部分上方都有一个路径展示和名称,追溯到项目中的标签是page-header-wrapper,可以自定义中顶部卡片的内容。 image.png

<page-header-wrapper>
    <template v-slot:content>...</template>
    <template v-slot:extraContent>...</template>
</page-header-wrapper>

🚩问题:若想去掉此标签中的面包屑(如图主页/表单页/高级表单),PageHeaderWrapper属性在网页文档版🈚没有显示,需要查看 github 上的文档 link

github文档虽然有PageHeaderWrapper属性说明,但并没有去除面包屑的方法(如下)

image.png 只能查看源码部分:

image.png

😶‍🌫️原因:

源码中,PageHeaderWrapper接受了 PageHeaderWrapperPros传来的值,PageHeaderWrapperPros中有一个breadcrumb属性,此属性可以从父组件传递过来。

✅解决:<page-header-wrapper :breadcrumb="false">

-------------------------- 占位内容

5. 网络请求

实际开发中要在 main.js 中去掉 import './mock',在`vue.config.js`中设置 proxy代理地址,
这个地址就是后端给的请求地址。

🚩问题:本地调试时,去掉 mock 数据,将 proxy 改为本地 target: 'http://localhost:8000'请求报错:431 Request Header Fields Too Large
😶‍🌫️原因:431是请求头过大

❌解决:尚未解决,实际开发调试看看

-------------------------- 占位内容更新

5.1 cross-env 的引入

  1. AntD pro Vue 采用的是vueCLI默认的环境配置 image.png image.png

  2. 引入cross-env插件,运行跨平台设置和使用环境变量脚本

  3. 使用方法:

    npm install --save-dev cross-env
    

    image.png

  4. 具体魔改: image.png image.png