# ReactPro
**Repository Path**: playerljc/ReactPro
## Basic Information
- **Project Name**: ReactPro
- **Description**: 自己的一个React的工程
- **Primary Language**: JavaScript
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 8
- **Forks**: 1
- **Created**: 2020-04-30
- **Last Updated**: 2024-09-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ReactPro
一个基于 React、ant-design 和 less 开箱即用的模板工程
## 兼容性
- Chrom(支持)
- Firefox(支持)
- Edge(支持)
- Safari(没测试)
## 核心库
- [@ctsj/build](https://github.com/playerljc/CTSJ-BUILD)
- 对项目的打包进行管理
- [@ctsj/router](https://github.com/playerljc/CTSJ-ROUTER)
- 对项目中的路由进行管理
- [@ctsj/state](https://github.com/playerljc/CTSJ-STATE)
- 对项目中数据流进行管理
- [@baifendian/adhere-ui](https://github.com/playerljc/adhere)
- 基于 React 和 ant-design 的高可用组件
## 支持(特性)
- 支持 typescript
- 支持 vite 和 webpack 两种构建方式
- less 主题变量
- 动态换肤
- mock 数据
- jenkins 智能部署
- 动态修改 webpack 打包配置
- 缺省的 start 和 build 命令
- 内置@别名
- 缺省的 splitChunks
- 支持 cssModule
- assets 静态目录
- analysis 代码打包分析
- env 变量混入
- git 提交 hooks
- 一些列 lint 命令(基于@umijs/fabric)
- 支持 PingFang-SC-\*字体
- dev、stg、pe 和 te 环境的 development 和 production 动态配置
- 内置典型 CRUD 代码模板,使用脚本自动生成路由和页面代码
- 根据项目实际情况扩展内置模板代码
## 一些内置 lib 库
- 404 页面
- BasicLayout(左侧导航右侧路由切换的布局)
- NoAuthority(无权限组件)
- Router(路由组件)
## 一些常用的 package
- antd(5.x)
- axios
- classnames
- echarts
- echarts-for-react
- font-awesome
- js-md5
- lodash
- mockjs
- moment
- dayjs
- ol
- qs
- rc-queue-anim
- rc-tween-one
- swiper
- uuid
- @antv/g6
- faker
## 目录结构及重要文件说明
- assets - 静态目录
- EmitterExternal - 全局的发布订阅
- fonts - 字体
- pdf - pdfjs
- constent.js - 环境变量
- logo.ico - 浏览器的 ico
- theme-util.js 主题文件
- script - 实用脚本
- generatorResource - 自动生成典型代码
- deploy.js - 自动部署脚本
- generateSMM.js - 根据 swagger 自动生成 Service
- theme.js - 生成主题脚本
- publish.js - 发布(生成 tag 和 changelog)
- src - 源码目录
- themes 主题目录
- default - 缺省的主题目录
- var.js - 里面主要是全局的 less 变量
- (主题名)目录
- install.js - jenkins 上进行部署的脚本文件
- ctbuild.config.js - webpack 打包配置文件
- .eslint\* - eslint 配置文件
- .prettier\* - prettier 配置文件
- .stylelint\* - stylelint 配置文件
- .jsconfig
- .browserslistrc - 浏览器版本配置
- .postcss.config.js - PostCSS 配置
## src 源码目录
- components - 系统组件
- formitem - antd 表单的 FormItem
- AnnexFormItem - 附件的 FormItem
- ImageAnnexFormItem - 图片上传的 FormItem
- SearchTreeSelectFormItem - TreeSelect 的 FormItem
- TMapAddressSelectFormItem - 腾讯地图选择位置的 FormItem
- system - 系统级组件
- SystemAnnexList - 附件查看
- SystemBaseSearchTable - SearchTable 的基类
- SystemCard - 系统的 Card
- SystemDictDataWrap - 字典包装组件
- SystemFooter - 系统的 footer
- SystemHeader - 系统的 header
- SystemIframe - iframe 嵌入组件
- SystemFormTableGridLayout - 表单的 TableGridLayout
- SystemViewTableGridLayout - 查看的 TableGridLayout
- SystemImageAnnexList - 图片的附件查看列表
- SystemMediaListItem - 列表的 Item 项
- SystemPage - 页面的包装组件
- SystemSearchTree - 对 Tree 的查询封装组件
- SystemStatistic - 统计组件
- SystemTMapAddressDisplay - 基于腾讯地图选择地址的组件
- config - 路由和字典的配置
- dict - 字典项
- Dict
- dict.system.config.js - 系统的字典
- dict.config.js - 字典的注册
- router - 路由
- router.config.js - 路由注册的处理
- router.jsx - 路由的注册
- images - 图片
- lib - 库
- 404 - 404 组件
- BasicLayout - 导航组件
- NoAuthority - 无权限组件
- Mobile - 移动端支持
- PermissionConditionalrender - 权限的条件渲染组件
- ProgressBarPanel - 页面进度条
- Router - 路由的封装
- RouterConfigComponent.jsx - 获取路由信息的包装组件
- listen.js - 路由的监听
- path.js - 路由地址相关
- util.js - 相关工具方法
- locales - 国际化文件
- Model - 全局模型
- pages - 页面
- Service - 全局接口
- style - 样式
- normalize.less - 全局默认重写
- normalize-antd.less - 全局的 antd 样式重写
- normalize-self.less - 全局的 adhere 样式重写
- util - 工具
- index.js - 工具类
- request.js - ajax 请求
- saga.js - 数据流
- ServiceAdapter.js - 接口适配器
- app.jsx - 代表应用的文件
- index.esj - 主 html 模板文件
- index.js - 第一个加载的文件
- index.less - 系统的第一个 less 文件
## [ctbuild.config.js](https://www.npmjs.com/package/@ctsj/build)
webpack 的配置文件具体请参考上方链接,使用的是@ctsj/build 这个库。
## 安装
pmpm `pnpm install or pnpm i` (首选 pnpm 的方案)
npm `npm install or npm i`
yarn `yarn install or yarn`
## 本地运行
webpack `npm run startapp:dev`
vite `npm run startapp:vite:dev`
## 构建
webpack `npm run buildapp:dev`
vite `npm run buildapp:vite:dev`
startapp 和 buildapp 命令都有两组参数,ENV 变量和 Webpack 变量
ENV 变量
- environment - 部署环境(dev - 开发 | stg - 测试 | pe - 生产)
- mode - 模式(development - 开发 | production - 生产)
- mobile - 是否支持响应式(true - 支持移动端 | false - 不支持响应式)
- pathgen - 地址生成策略(static - 静态 | dynamic - 动态)
- publicPath - 项目名称
- router - 路由类型 browser | hash 默认是 browser
- antdCssPriority - antd的cssinjs的优先级 low | high 默认是low
使用 vite 的时候在 `.env` 和 `.evn.${environment}.${mode}` 中设置即可
Webpack 变量
- alias - 别名
- evnVars - 是否注入 ENV 变量到 process 中
- cssModules - 是否支持 CSSModules
- static - 静态资源目录名称
- analysis - 是否打开构建分析
## 预置命令
- alias - 启动和构建命令
一共有三组`startapp`和`buildapp`的命令,一个 startapp 和 buildapp 是一组,`:`后面的是环境名称,一共有三组环境 `dev`、`stg`和`pe`,分别代表开发、测试和生产环境,这三组环境所代表的配置在`assets/constent.js`文件中进行配置,可以随时对这个文件中的内容进行修改。
```js
let ins = null;
const { protocol, hostname, port } = window.location;
const mapping = {
// dev环境
'dev-development-static': {
apiPrefix: 'http://172.18.9.113:82/',
localPrefix: 'http://localhost:8000/',
systemWebPrefix: 'http://172.18.9.113:83/',
portalPath: 'http://fj-portal-dev.percent.cn:8699/portal',
},
'dev-production-static': {
apiPrefix: 'http://172.18.9.113:82/',
localPrefix: 'http://172.18.9.113:82/',
systemWebPrefix: 'http://172.18.9.113:83/',
portalPath: 'http://fj-portal-dev.percent.cn:8699/portal',
},
'dev-production-dynamic': {
apiPrefix: `${protocol}//${hostname}:${port || 80}/`,
localPrefix: `${protocol}//${hostname}:${port || 80}/`,
systemWebPrefix: `${protocol}//${hostname}:${port || 80}/`,
portalPath: `${protocol}//${hostname}:${port || 80}/`,
},
// stg环境
'stg-development-static': {
apiPrefix: 'http://172.18.9.113:84/',
localPrefix: 'http://localhost:8000/',
systemWebPrefix: 'http://172.18.9.113:85/',
portalPath: 'http://fj-portal-dev.percent.cn:8699/portal',
},
'stg-production-static': {
apiPrefix: 'http://172.18.9.113:84/',
localPrefix: 'http://172.18.9.113:84/',
systemWebPrefix: 'http://172.18.9.113:85/',
portalPath: 'http://fj-portal-dev.percent.cn:8699/portal',
},
'stg-production-dynamic': {
apiPrefix: `${protocol}//${hostname}:${port || 80}/`,
localPrefix: `${protocol}//${hostname}:${port || 80}/`,
systemWebPrefix: `${protocol}//${hostname}:${port || 80}/`,
portalPath: `${protocol}//${hostname}:${port || 80}/`,
},
// pe环境
'pe-development-static': {
apiPrefix: 'http://172.26.11.91/',
localPrefix: 'http://localhost:8000/',
systemWebPrefix: 'http://172.26.11.91:81/',
portalPath: 'http://fj-portal-dev.percent.cn:8699/portal',
},
'pe-production-static': {
apiPrefix: 'http://172.26.11.91/',
localPrefix: 'http://172.26.11.91/',
systemWebPrefix: 'http://172.26.11.91:81/',
portalPath: 'http://fj-portal-dev.percent.cn:8699/portal',
},
'pe-production-dynamic': {
apiPrefix: `${protocol}//${hostname}:${port || 80}/`,
localPrefix: `${protocol}//${hostname}:${port || 80}/`,
systemWebPrefix: `${protocol}//${hostname}:${port || 80}/`,
portalPath: `${protocol}//${hostname}:${port || 80}/`,
},
};
function Create({ mode, environment, pathgen }) {
const { apiPrefix, localPrefix, systemWebPrefix, portalPath } =
mapping[`${environment}-${mode}-${pathgen}`];
return {
apiPath: `${apiPrefix}api/env/`,
systemApiPath: `${systemWebPrefix}api/SystemManager/`,
systemWebPath: `${systemWebPrefix}system`,
localPath: localPrefix,
portalPath,
};
}
window.Constent = function (CustomEvnVars) {
if (!ins) {
ins = Create(CustomEvnVars);
}
return ins;
};
```
- deploy - 部署命令可以在没有持续集成环境的情况下进行部署
- generate:smm - 部署命令根据 swgger 生成 Service
## 响应式支持
启动的时候 ENV 变量加入 mobile=true 开启支持响应式,此开关会开启 px 自动转 REM,使用 amfe-flexible 自动计算 html 的 font-size,加入了 fast-click
使用[LessMediaQueryLoader][1]支持组件的响应式,组件一般都有一个 index.less 文件,如果想实现在 pad,phone 和 PC 上的不同控制可以那么文件会是这样
```css
// 在此文件中实现和响应式无关的样式
index.less
// 在此文件实现pc端样式
index.mq.pc.less
// 在此文件实现pad端样式
index.mq.pad.less
// 在此文件实现phone样式
index.mq.phone.less
```
## 自动生成代码
根据工程中已有的代码块(chunk)来自动生成业务代码,包括`pages`下的代码和`路由`,工程会根据`pages`下的目录结构来自动生成代码和路由,自动生成代码的过程如下:
1. 第一部 在`${root}/script/generatorResource/structure`下面编写结构文件,当前目录下已经有了一个预置好的结构文件,可以把这个目录转移到其他地方,或者基于这个目录进行修改。
2. 执行`$ npm run rp -- gen`命令
执行完上述三个步骤后`pages`下会生成相应代码,路由文件也会自动生成。
### rp 命令详解
运行`$ npm run rp -- gen --help`可以查看所有参数
- -a 路由文件中的上下文别名,如@ 默认值是@
- -b 存放路由视图文件夹所在的目录, + -p 参数值是结构文件实际拷贝的位置 默认值是`${root}/src`
- -p 存放路由视图文件夹的名称,默认是 pages
- -s 结构文件所在的位置 如果没设置则是`${root}/script/generatorResource/structure`
- -t 结构文件拷贝的位置 如果没设置则是`${root}/src/pages`
- -r 路由文件所在的位置 如果没设置则是`${root}/src/config/router/router.jsx`
### 结构文件详解
下面介绍一下组成结构文件的元素都有哪些:
- 结构目录
- 结构目录就是一个普通的目录(在路由中代表着一个父路由,通常这种路由对应的组件是一个返回子路由组件的包装组件,模版工程默认提供了一个包装组件 ``,你也可以自定义这个组件,但需要注意一定要在返回的 JSX 中包含接受到的子路由组件 `children` ),结构目录下面不能有功能文件(功能文件即路由树中,叶子路由节点对应的视图组件的文件),可以有其他结构目录、功能目录和配置文件,有一个特殊名字的结构目录,如果目录名称以`BasicLayout`结尾那么这个目录就是一个左侧是二级菜单右侧是切换路由的一个组件,刚才说到结构目录其实是路由中的一个包装节点,如果想实现自己的包装节点,则目录中可以有一个`index.[js | jsx | ts | tsx | vue]`文件,用来自定义包装节点的组件。
- 功能目录
- 含有功能文件的目录是功能目录,功能目录下只能有一个功能文件 Main.jsx 和配置文件,如果功能目录名称满足`!/\s*Or\s*/gm`正则表达式,那么这个功能目录实现了 2 个功能,如 SaveOrUpdate,它的路由配置和其他的有所不同,下面会介绍。
- 配置文件(config.json) 配置文件可以在结构目录和功能目录中,配置文件是 config.json,下面给出配置文件的定义 config.json
```json
{
"dir": {
"modelIgnore": false,
"serviceIgnore": false,
"mockIgnore": false,
"dictIgnore": false,
"componentIgnore": false,
"functionFileIgnore": false,
"routerIgnore": false
},
"file": {
"templateType": "View",
"functionFileIgnore": false,
"routerIgnore": false,
"contextRouteId": "Table"
},
"route": {
"name": "Menu",
"hide": false,
"subAuthority": [],
"icon": "images/a.png",
"sort": 0,
"ignore": false,
"skip": false
}
}
```
如果功能目录名称满足正则表达式 `!/\s*Or\s*/gm`(如:`SaveOrUpdate`),那么 router 配置如下
```json
{
"route": {
"Save": {
"name": "新增",
"hide": true
},
"Update": {
"name": "修改",
"hide": true
}
}
}
```
下面给出 ts 的定义
```typescript
interface DirConfig {
// 是否创建Model目录及其文件
modelIgnore?: boolean;
// 是否创建Service目录及其文件
serviceIgnore?: boolean;
// 是否创建Mock目录及其文件
mockIgnore?: boolean;
// 是否创建Dict目录及其文件
dictIgnore?: boolean;
// 是否创建Components目录及其文件
componentIgnore?: boolean;
// 如果有功能文件是否使用模板填充功能文件(目录是功能目录)
functionFileIgnore?: boolean;
// 是否是路由中的节点
routerIgnore?: boolean;
}
```
```typescript
interface FileConfig {
// 功能文件选用模板的名称,如果没有进行设置,则使用的目录名称
templateType?: string;
// 如果有功能文件是否使用模板填充功能文件,如果没设置则父目录的配置文件中的此属性生效
functionFileIgnore?: boolean;
// 是否是路由中的节点
routerIgnore?: boolean;
// 上下文模板类型
contextRouteId?: string;
}
```
```typescript
interface RouteItemConfig {
// 菜单的名称
name?: string;
// 是否在菜单中显示
hide?: string;
// 按钮权限
subAuthority?: string[];
// icon
icon?: string;
// 菜单排序属性
sort?: number;
// 是否忽略此节点
ignore?: boolean;
// 是否略过此节点
skip?: boolean;
}
```
```typescript
export type RouteConfig =
| RouteItemConfig
| {
Save?: RouteItemConfig;
Update?: RouteItemConfig;
};
```
### 代码块(chunk)介绍
当前的 template 中的模板类型有如下几种
- `AsyncSearchTreeList` - 左侧 Tree(异步)右侧列表的模板
- `AsyncSearchTreeTable` - 左侧 Tree(异步加载)右侧表格的模板
- `AsyncSearchTreeTreeDataTable` - 左侧 Tree(异步加载)右侧TreeData表格的模板
- `CardList` - 卡片列表的模板
- `CardSelectionList` - 可以选择的卡片列表模板
- `CBLayout` - CBL布局
- `CBRLayout` - CBR布局
- `CollapseList` - 可以折叠的卡片列表模板
- `CollapseSelectionList` - 可以选择和折叠的卡片列表模板
- `CRBLayout` - CRB布局
- `Back` - 可以返回的模板
- `ClassTable` - 使用类的方式实现一个纯净 sagger 的 Table
- `EditorCellRowDragSortTable` - 可以编辑Cell和拖拽行排序的表格模板
- `EditorCellRowDragSortTreeTreeDataTable` - 可以编辑Cell和拖拽行排序的TreeData表格模板
- `EditorCellTable` - 可以编辑表格Cell数据的Table模板
- `EditorCellTreeDataTable` - 可以编辑Cell的TreeData表格模板
- `EditorRowDragSortTable` - 可以拖拽行排序的表格模板
- `EditorRowDragSortTreeDataTable` - 可以拖拽排序的TreeData表格模板
- `EditorRowTable` - 可以编辑表格行的Table模板
- `EditorRowTreeDataTable` - 可以编辑表格行的TreeData模板
- `EditorTable` - 可以编辑整体表格的模板
- `EditorTableRowDragSortTable` - 可以编辑整体表格并且拖拽排序的Table模板
- `EditorTableRowDragSortTreeDataTable` - 可以编辑整体表格并且拖拽排序的TreeTable模板
- `EditorTreeDataTable` - 可以编辑整体表格的TreeData模板
- `IndicatorAsyncEditorCellRowDragSortTable` - 带有统计功能的AsyncEditorCellRowDragSortTable的模板
- `IndicatorAsyncEditorCellRowDragSortTreeDataTable` - 带有统计功能的AsyncEditorCellRowDragSortTreeDataTable模板
- `IndicatorAsyncEditorRowDragSortTable` - 带有统计功能的AsyncEditorRowDragSortTable模板
- `IndicatorAsyncEditorRowDragSortTreeDataTable` - 带有统计功能的AsyncEditorRowDragSortTreeDataTable
- `IndicatorAsyncEditorTableRowDragSortTable` - 带有统计功能的AsyncEditorTableRowDragSortTable
- `IndicatorAsyncEditorTableRowDragSortTreeDataTable` - 带有统计功能的IndicatorAsyncEditorTableRowDragSortTreeDataTable
- `IndicatorAsyncSearchTreeList` - 带有统计功能的AsyncSearchTreeList
- `IndicatorAsyncSearchTreeTable` - 带有统计功能的AsyncSearchTreeTable
- `IndicatorAsyncSearchTreeTreeDataTable` - 带有统计功能的AsyncSearchTreeTreeDataTable
- `IndicatorEditorCellRowDragSortTable` - 带有统计功能的EditorCellRowDragSortTable
- `IndicatorEditorCellRowDragSortTreeDataTable` - 带有统计功能的EditorCellRowDragSortTreeDataTable
- `IndicatorEditorRowDragSortTable` - 带有统计功能的EditorRowDragSortTable
- `IndicatorEditorRowDragSortTreeDataTable` - 带有统计功能的EditorRowDragSortTreeDataTable
- `IndicatorEditorTableRowDragSortTable` - 带有统计功能的EditorTableRowDragSortTable
- `IndicatorEditorTableRowDragSortTreeDataTable` - 带有统计功能的EditorTableRowDragSortTreeDataTable
- `IndicatorList` - 带有统计功能的List
- `IndicatorSearchTreeList` - 带有统计功能的SearchTreeList
- `IndicatorSearchTreeTable` - 带有统计功能的SearchTreeTable
- `IndicatorSearchTreeTreeDataTable` - 带有统计功能的SearchTreeTreeDataTable
- `IndicatorTable` - 带有统计功能的Table
- `IndicatorTreeDataTable` - 带有统计功能的TreeDataTable
- `LBCLayout` - LBC布局
- `LCBLayout` - LCB布局
- `LCLayout` - LC布局
- `LCRBLayout` - LCRB布局
- `List` - List列表模板
- `LRTCBLayout` - LRTCB布局
- `LTCBLayout` - LTCB布局
- `LTCLayout` - LTC布局
- `TBLCRLayout` - TBLCR布局
- `TCBRLayout` - TCBR布局
- `TCLayout` - TC布局
- `TCRLayout` - TCR布局
- `TLCLayout` - TLC布局
- `TLRCLayout` - TLRC布局
- `TRCLayout` - TRC布局
- `EditorCellTable` - 可编辑单元格的列表模板
- `EditorTable` - 可编辑表格的列表模板
- `EditorRowTable` - 可编辑行的列表模板
- `HookTable` - 使用 Hooks 的方式实现一个纯净 sagger 的 Table
- `IndicatorAsyncSearchTreeList` - 带有统计信息的AsyncSearchTreeList模板
- `IndicatorAsyncSearchTreeTable` - 带有统计信息的AsyncSearchTreeTable模板
- `IndicatorList` - 带有统计信息的列表
- `IndicatorSearchTreeList` - 带有统计信息的SearchTreeList模板
- `IndicatorSearchTreeTable` - 带有统计信息的SearchTreeTable模板
- `IndicatorTable` - 带有统计信息的Table模板
- `List` - 列表的模板
- `Table` - 表格的模板
- `RowDragSortTable` - Radius 卡片的查看模板
- `RowDragSortTable` - 可拖拽的列表模板
- `SaveOrUpdate` - 添加和编辑的模板
- `SearchTreeTable` - 左侧 Tree 右侧表格的模板
- `SearchTreeList` - 左侧 Tree 右侧列表的模板
- `SearchTreeTreeDataTable` - 左侧 Tree 右侧TreeData表格的模板
- `TreeDataTable` - TreeData的表格模板
- `SelecitonList` - 可以选择的列表
- `SmallCardsView` - Small 卡片的查看模板
- `StateClassTable` - 使用类的方式实现一个纯净 sagger 的 Table(数据源使用 state)
- `StateHooksTable` - 使用 Hooks 的方式实现一个纯净 sagger 的 Table(数据源使用 state)
- `TabsView` - 页卡的查看模板
- `View` - 查看的模板
- `ViewAdvanced` - 高级查看的模板
以上是工程内自带的代码块,如果以上的代码块不能满足需求,可以根据实际业务来增加代码块
1. 第一步 在`${root}/script/generatorResource/templates/function/`下建立一个目录,目录下面需要有如下几个子目录
- Build - 功能的实现
- render.js
- Components - 组件
- index.jsx
- Less - 样式
- index.less
- Page - 页面
- inndex.js
- structure - 在 e2e 中的结构文件
- config.json
- Main.jsx
2. 编写响应代码,可以参照之前已有模块的代码,这里就不在熬述了
### 代码块的测试
1. 运行 `npm run e2e:codeblock` 来启动一个服务从而查看工程中的代码块用例。
2. 生成代码块运行后的截图运行`npm run codeblock:genTemplateImage`生成代码块运行结果的截图。
## 典型代码和组件讲解
- **页面的代码结构**
一个典型页面(一般指 CRUD 功能)通常代表路由中的一个节点(组件),如列表、新增、修改和查看等,一个典型的页面一般应该有如下结构
```js
// 组件(一般只有一个组件)
Components;
// 弹窗
Modal;
// 组件入口
index.jsx;
// 组件样式入口
index.less;
// Mock数据
Mock;
// 模型(一般是定义状态管理的数据)
Model;
// 接口
Service;
// 测试
Test;
// 功能(页面)的入口文件
Main.jsx;
// 功能(页面)样式的入口文件
Main.less;
```
- **CRUD**
我们平时编写代码,编写频率最高的就是 CRUD 代码,列表的形式一般都不变,基本都是查询、列表体,分页,变化最多的就是 SaveOrUpdate 和 View,下面列出一下最简单的 SaveOrUpdate 和 View 的代码结构 1.View Main.jsx 入口文件
```jsx
// Main.jsx 入口文件
import qs from 'qs';
import React, { useContext } from 'react';
import { FlexLayout } from '@baifendian/adhere';
import SystemPage from '@/components/system/SystemPage';
import { getSearch } from '@/lib/Router/path';
import { findRouteConfig } from '@/lib/Router/util';
import { RouterConfigContext } from '@/lib/Router/RouterConfigComponent';
import ViewDataWrap from './Components/dataWrap';
import styles from './Main.less';
const { BackLayout, ScrollLayout } = FlexLayout;
function getQuery() {
return qs.parse(getSearch(), { ignoreQueryPrefix: true }) || {};
}
/**
* View - 查看页面入口
*/
function View(props) {
const { routerConfig } = useContext(RouterConfigContext);
return (
);
}
export default View;
```
Main.less 样式入口文件
```css
// Main.less 样式入口文件
.Wrap {
width: 100%;
height: 100%;
}
```
Components/dataWrap.jsx 获取 View 数据的包装组件
```jsx
// Components/dataWrap.jsx 获取View数据的包装组件
import PropTypes from 'prop-types';
import React, { useEffect, useState } from 'react';
import { fetchInfo } from '../Service';
import View from './index';
function ViewDataWrap(props) {
const { id } = props;
const [data, setData] = useState({});
useEffect(() => {
if (id) {
fetchInfo.call(id, true).then((res) => {
if (!res) return;
if (res.data.resCode === 0) {
setData(res.data.data);
}
res.hideIndicator();
});
}
}, [id]);
return ;
}
ViewDataWrap.defaultProps = {};
ViewDataWrap.propTypes = {
id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
};
export default ViewDataWrap;
```
Components/index.jsx View 的展示组件
```jsx
import PropTypes from 'prop-types';
import React from 'react';
import { DateDisplay, Intl, Resource, TableGridLayout } from '@baifendian/adhere';
import SystemAnnexList from '@/components/system/SystemAnnexList';
import SystemCard from '@/components/system/SystemCard/SystemCard';
import SystemViewTableGridLayout from '@/components/system/SystemViewTableGridLayout';
const { Label, Value } = TableGridLayout;
/**
* View
* @param props
* @return {JSX.Element}
* @constructor
*/
function View(props) {
const {
data: { name, sex, birthDay, height, width, hometown, address, annex },
} = props;
return (
{Intl.v('姓名')}:,
value: {name},
},
{
key: 'sex',
label: ,
value: (
{Resource.Dict.value.ResourceNormalSexMap.value.get(sex)?.label}
),
},
{
key: 'birthDay',
label: ,
value: (
),
},
{
key: 'height',
label: ,
value: {height},
},
{
key: 'width',
label: ,
value: {width},
},
{
key: 'hometown',
label: ,
value: {hometown},
},
],
},
{
name: 'g2',
width: '100%',
columnCount: 1,
colgroup: [120, 'auto'],
data: [
{
key: 'address',
label: ,
value: {address},
},
{
key: 'annex',
label: ,
value: (
),
},
],
},
]}
/>
);
}
View.defaultProps = {
data: {
id: '',
hobby: null,
annex: [],
},
};
View.propTypes = {
data: PropTypes.shape({
id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
hobby: PropTypes.arrayOf(PropTypes.string),
annex: PropTypes.arrayOf(
PropTypes.shape({
id: PropTypes.string,
name: PropTypes.string,
path: PropTypes.string,
}),
),
}),
};
export default View;
```
Service/index.js 接口文件
```js
// import ServiceAdapter from '@/util/ServiceAdapter';
import Mock from '@/pages/BasicLayout/Task/ImplementSubmit/View/Mock';
import request from '@/util/request';
export const fetchList = (() => {
return {
call: ({ page, limit }) => {
const path = JSON.parse(JSON.stringify(Mock.fetchList));
path.data.data.records = path.data.data.records.slice((page - 1) * limit, page * limit);
return request.get({
path,
mock: true,
loading: {
show: false,
},
});
},
defaultResult: () => ({
total: 0,
records: [],
}),
};
})();
export const fetchDel = (() => {
return {
call: (id, loading) => {
return request.get({
path: Mock.fetchDel,
mock: true,
loading: {
show: loading,
},
});
},
defaultResult: () => true,
};
})();
export const fetchInfo = (() => {
return {
call: (id, loading) => {
return request.get({
path: Mock.fetchInfo,
mock: true,
loading: {
show: loading,
},
});
},
defaultResult: () => ({
id: '',
name: '',
sex: '',
birthDay: '',
height: '',
width: '',
hometown: '',
address: '',
hobby: null,
annex: [],
}),
};
})();
export const fetchSave = (() => {
return {
call: (params, loading) => {
return request.post({
path: Mock.fetchSave,
mock: true,
loading: {
show: loading,
},
});
},
defaultResult: () => true,
};
})();
export const fetchUpdate = (() => {
return {
call: (params, loading) => {
return request.post({
path: Mock.fetchUpdate,
mock: true,
loading: {
show: loading,
},
});
},
defaultResult: () => true,
};
})();
export default {
codeKey: 'resCode',
codeSuccessKey: 0,
dataKey: 'data',
messageKey: 'resMsg',
name: 'AppBasicLayoutTaskImplementSubmitView',
};
```
Mock/index.js Mock 数据
```js
import faker from 'faker';
const data = [];
data.length = 300;
data.fill(0);
export default {
fetchList: {
data: {
resCode: 0,
data: {
total: data.length,
records: data.map((t, index) => ({
id: faker.random.uuid(),
name: faker.internet.userName(),
sex: `${(index + 1) % 2}`,
birthDay: faker.time.recent(),
deptName: faker.company.companyName(),
height: faker.random.number(),
width: faker.random.number(),
hometown: faker.address.city(),
address: faker.address.streetAddress(),
})),
},
resMsg: '',
},
},
fetchDel: {
resCode: 0,
data: true,
resMsg: '',
},
fetchSave: {
resCode: 0,
data: true,
resMsg: '',
},
fetchUpdate: {
resCode: 0,
data: true,
resMsg: '',
},
fetchInfo: {
resCode: 0,
data: {
id: faker.random.uuid(),
name: faker.internet.userName(),
sex: '0',
birthDay: faker.time.recent(),
deptName: faker.company.companyName(),
height: faker.random.number(),
width: faker.random.number(),
hometown: faker.address.city(),
address: faker.address.streetAddress(),
hobby: [1, 2, 3],
department: '0-0-0',
annex: [
{
path: faker.random.uuid(),
id: faker.random.uuid(),
name: faker.company.companyName(),
},
{
path: faker.random.uuid(),
id: faker.random.uuid(),
name: faker.company.companyName(),
},
{
path: faker.random.uuid(),
id: faker.random.uuid(),
name: faker.company.companyName(),
},
{
path: faker.random.uuid(),
id: faker.random.uuid(),
name: faker.company.companyName(),
},
{
path: faker.random.uuid(),
id: faker.random.uuid(),
name: faker.company.companyName(),
},
{
path: faker.random.uuid(),
id: faker.random.uuid(),
name: faker.company.companyName(),
},
],
},
resMsg: '',
},
};
```
- **[Dict](http://49.232.163.126:8083/adhere/util/dict)**
程序中往往都会存储大量的常量和数据源信息,常量分为各种类型,如地址的信息、状态等信息等,数据源数据如用户信息、用户权限、Select 的下拉数据等用接口获取的数据,这种数据一般都是在整个系统中只需要调用一次即可,那么可以使用 Dict 来进行存储,Dict 的特点是统一了获取数据的编程接口,只有第一次使用才加载,其余都是读取缓存数据。Dict 也支持刷新缓存。
**定义 Dict**
Dict 定义在任意目录下,一般按层级可以进行分层定义,整个系统都需要的数据定义在项目根目录下的 Dict 里面
![][2]
和业务相关的可以定义在业务相关的目录里
![][3]
**项目中只要在 Dict 目录下创建的 js 文件都会认为是 Dict 的声明文件**
Dict 文件的写法
```js
import { Dict } from '@baifendian/adhere';
export default {
// 定义静态的Dict
initStatic() {
// 定义系统中用到的状态
Dict.handlers.SystemAppBasicLayoutTaskImplementSubmitListTestRadio = () => [
{
value: 1,
label: '通过',
},
{
value: 2,
label: '不通过',
},
{
value: 3,
label: '退回',
},
];
// 也可以定义方法,通过kw进行筛选,如果在Dict中定义的是函数,则会有Memo的效果,类似于React的useMemo或Vue的计算效果
Dict.handlers.SystemAppBasicLayoutTaskImplementSubmitListTestAutoCompleteSelect =
() => (kw) => {
const data = [
{
label: 'java',
value: 1,
},
{
label: 'javaScript',
value: 2,
},
{
label: 'html',
value: 3,
},
{
label: 'css',
value: 4,
},
{
label: 'spring',
value: 5,
},
{
label: 'react',
value: 6,
},
];
return Promise.resolve(data.filter((t) => t.label.includes(kw)));
};
Dict.handlers.SystemAppBasicLayoutTaskImplementSubmitListTestTree = () => [
{
title: 'Node1',
value: '0-0',
leaf: false,
children: [
{
title: 'Child Node1',
value: '0-0-1',
leaf: true,
},
{
title: 'Child Node2',
value: '0-0-2',
leaf: true,
},
],
},
{
title: 'Node2',
value: '0-1',
leaf: true,
},
];
// Table
Dict.handlers.SystemAppBasicLayoutTaskImplementSubmitListTestTable = () =>
Array.from({ length: 10 }).map((t, index) => ({
id: faker.random.uuid(),
isMore: !!Math.floor((Math.random() * 10) % 2),
name: faker.internet.userName(),
sex: `${(index + 1) % 2}`,
birthDay: faker.time.recent(),
deptName: faker.company.companyName(),
height: faker.random.number(),
width: faker.random.number(),
hometown: faker.address.city(),
address: faker.address.streetAddress(),
}));
// Cascader
Dict.handlers.SystemAppBasicLayoutTaskImplementSubmitListTestCascader = () => [
{
value: 'zhejiang',
label: 'Zhejiang',
children: [
{
value: 'hangzhou',
label: 'Hangzhou',
children: [
{
value: 'xihu',
label: 'West Lake',
},
],
},
],
},
{
value: 'jiangsu',
label: 'Jiangsu',
children: [
{
value: 'nanjing',
label: 'Nanjing',
children: [
{
value: 'zhonghuamen',
label: 'Zhong Hua Men',
},
],
},
],
},
];
// List
Dict.handlers.SystemAppBasicLayoutTaskImplementSubmitListTestList = () =>
Array.from({ length: 5 }).map((t, index) => ({
id: faker.random.uuid(),
isMore: !!Math.floor((Math.random() * 10) % 2),
name: faker.internet.userName(),
sex: `${(index + 1) % 2} `,
birthDay: faker.time.recent(),
deptName: faker.company.companyName(),
height: faker.random.number(),
width: faker.random.number(),
hometown: faker.address.city(),
address: faker.address.streetAddress(),
}));
},
// 动态的Dict,一般都是调用接口,如获取用户信息,获取用户权限,获取机构数据,获取Select等数据源数据,省市区级联等都可以在此定义,只要是调用接口的公共数据
initRemote() {
// 权限配置
Dict.handlers.SystemAuthorized = () => {
// 用户权限
return systemManagerRequest
.get(
injectionToken({
path: require('@/mock/system').default.SystemAuthorized,
mock: true,
loading: {
show: false,
},
showWarn: false,
}),
)
.then((data) => {
return data.data;
});
};
// 用户信息
Dict.handlers.SystemUserInfo = () => {
return systemManagerRequest
.get(
injectionToken({
path: require('@/mock/system').default.SystemUserInfo,
mock: true,
loading: {
show: false,
},
}),
)
.then((data) => {
return data.data;
});
};
Dict.handlers.SystemAppBasicLayoutTaskImplementSubmitListTestTablePagination =
() => (paging) => {
const { current, pageSize } = paging;
const data = [];
data.length = 300;
data.fill(0);
const res = {
resCode: 0,
data: {
total: data.length,
pages: 30,
current: 1,
records: data
.slice((current - 1) * pageSize, (current - 1) * pageSize + pageSize)
.map((t, index) => ({
id: (current - 1) * pageSize + (index + 1),
isMore: !!Math.floor((Math.random() * 10) % 2),
name: faker.internet.userName(),
sex: `${(index + 1) % 2} `,
birthDay: faker.time.recent(),
deptName: faker.company.companyName(),
height: faker.random.number(),
width: faker.random.number(),
hometown: faker.address.city(),
address: faker.address.streetAddress(),
})),
},
resMsg: '',
};
return Promise.resolve(res.data);
};
Dict.handlers.SystemAppBasicLayoutTaskImplementSubmitListTestDynamicCascader = () =>
Promise.resolve([
{
value: 'zhejiang',
label: 'Zhejiang',
children: [
{
value: 'hangzhou',
label: 'Hangzhou',
children: [
{
value: 'xihu',
label: 'West Lake',
},
],
},
],
},
{
value: 'jiangsu',
label: 'Jiangsu',
children: [
{
value: 'nanjing',
label: 'Nanjing',
children: [
{
value: 'zhonghuamen',
label: 'Zhong Hua Men',
},
],
},
],
},
]);
Dict.handlers.SystemAppBasicLayoutTaskImplementSubmitListTestListPagination =
() => (paging) => {
const { current, pageSize } = paging;
const data = [];
data.length = 300;
data.fill(0);
const res = {
resCode: 0,
data: {
total: data.length,
pages: 30,
current: 1,
records: data
.slice((current - 1) * pageSize, (current - 1) * pageSize + pageSize)
.map((t, index) => ({
id: (current - 1) * pageSize + (index + 1),
isMore: !!Math.floor((Math.random() * 10) % 2),
name: faker.internet.userName(),
sex: `${(index + 1) % 2}`,
birthDay: faker.time.recent(),
deptName: faker.company.companyName(),
height: faker.random.number(),
width: faker.random.number(),
hometown: faker.address.city(),
address: faker.address.streetAddress(),
})),
},
resMsg: '',
};
return Promise.resolve(res.data);
};
},
};
```
Dict 的用法
```js
import { Dict } from '@baifendian/adhere';
// 静态自定使用
Dict.value.SystemAppBasicLayoutTaskImplementSubmitListTestRadio.value;
// 静态方法
Dict.value.SystemAppBasicLayoutTaskImplementSubmitListTestAutoCompleteSelect.value('java');
// 动态字典的使用
// 获取用户信息
Dict.value.SystemUserInfo.value.then((userInfo) => {
console.log(userInfo);
});
// 级联
Dict.value.SystemAppBasicLayoutTaskImplementSubmitListTestListPagination.value(cascadeParams).then(
(res) => {
console.log(res);
},
);
```
Dict 的刷新
```js
Dict.value.SystemAppBasicLayoutTaskImplementSubmitListTestListPagination.refresh(params);
```
- **[FormItemGeneratorToDict](http://49.232.163.126:8083/adhere/ui/antdformitem)**
我们再写一个表单的时候,往往会有数据源表单项,如`Select`、`TreeSelect`、`AutoComplete`等、我们一般都是先调用接口然后用 state 进行存储,在遍历数据渲染 options。这只是简单的情况,如果有多个 Select 进行级联操作,Select 支持多选、搜索和全选,或者 TreeSelect 有限制规定,如只能选 leaf 节点,或者每个层级节点都能选这样的诉求时我们就需要编写大量代码来实现,而且这些代码是不能再其他地方进行复用的,如果想复用就需要把代码组装成组件,如果这样的组件太多又不能为每一个情况进行一一编写,FormItemGeneratorToDict 就是用了来解决上述这些问题的。`FormItemGeneratorToDict`的核心理念是使用 Dict 作为数据,然后使用 Dict 的名字来包装一个组件。`FormItemGeneratorToDict`使用约定的方式来定义 Dict。下面是一个 Select 的例子
定义 Dict
```js
import { Dict } from '@baifendian/adhere';
export default {
initStatic() {
Dict.handlers.SystemTestSelect = () => [
{
value: 1,
label: '通过',
},
{
value: 2,
label: '不通过',
},
{
value: 3,
label: '退回',
},
];
},
initRemote() {},
};
```
编写业务代码
```jsx
import React from 'react';
import { Form } from 'antd';
import { AntdFormItem } from '@baifendian/adhere';
export defult () => (
// 使用字典生成了一个Select的Item
)
```
级联
```js
import { Dict } from '@baifendian/adhere';
export default {
initStatic() {
// 省
Dict.handlers.SystemTestProvinceSelect = () => [
{
value: 1,
label: '辽宁省',
},
{
value: 2,
label: '安徽省',
},
{
value: 3,
label: '浙江省',
},
];
// 市
Dict.handlers.SystemTestCitySelect = () => (provinceValue) => {
if (provinceValue === 1)
return [
{ label: '沈阳市', vallue: 1 },
{ label: '铁岭市', vallue: 1 },
{ label: '沈阳市', vallue: 1 },
];
if (provinceValue === 2)
return [
{ label: '沈阳市', vallue: 1 },
{ label: '铁岭市', vallue: 1 },
{ label: '沈阳市', vallue: 1 },
];
if (provinceValue === 3)
return [
{ label: '沈阳市', vallue: 1 },
{ label: '铁岭市', vallue: 1 },
{ label: '沈阳市', vallue: 1 },
];
};
// 区
Dict.handlers.SystemTestAreaSelect = () => (cityValue) => {
if (provinceValue === 1)
return [
{ label: '铁西区', vallue: 1 },
{ label: '和平区', vallue: 1 },
,
{ label: '皇姑区', vallue: 1 },
];
if (provinceValue === 2)
return [
{ label: '铁西区', vallue: 1 },
{ label: '和平区', vallue: 1 },
{ label: '皇姑区', vallue: 1 },
];
if (provinceValue === 3)
return [
{ label: '沈阳市', vallue: 1 },
{ label: '铁岭市', vallue: 1 },
,
{ label: '沈阳市', vallue: 1 },
];
};
},
initRemote() {},
};
```
```jsx
import React , { useEffect } from 'react';
import { Form } from 'antd';
import { AntdFormItem } from '@baifendian/adhere';
export defult () => {
const [form] = Form.useForm();
const province = Form.useWatch('province', form);
const city = Form.useWatch('city', form);
useEffect(() => {
form.setFieldValue('city', '');
form.setFieldValue('area', '');
},[province]);
useEffect(() => {
form.setFieldValue('area', '');
},[city]);
return (
// 使用字典生成了一个Select的Item
// 使用字典生成了一个Select的Item
// 使用字典生成了一个Select的Item
);
}
```
用来做复杂的权限判断
```js
// 用户组织机构判断
export default {
initStatic() {
Dict.handlers.SystemUserOrganizationMap = () =>
new Map([
// 省
[
[2].toString(),
() =>
new Promise((resolve) => {
Dict.value.SystemUserInfo.value.then((user) => {
if (user.standard == 2) resolve();
});
}),
],
// 市
[
[3].toString(),
() =>
new Promise((resolve) => {
Dict.value.SystemUserInfo.value.then((user) => {
if (user.standard == 3) resolve();
});
}),
],
// 区
[
[4].toString(),
() =>
new Promise((resolve) => {
Dict.value.SystemUserInfo.value.then((user) => {
if (user.standard == 4) resolve();
});
}),
],
// 营商
[
[37].toString(),
() =>
new Promise((resolve) => {
Dict.value.SystemUserInfo.value.then((user) => {
if (user.stripeCatalog == 37) resolve();
});
}),
],
// 非营商
[
['!37'].toString(),
() =>
new Promise((resolve) => {
Dict.value.SystemUserInfo.value.then((user) => {
if (user.stripeCatalog != 37) resolve();
});
}),
],
// 省部门
[
[2, '!37'].toString(),
() =>
new Promise((resolve) => {
Dict.value.SystemUserInfo.value.then((user) => {
if (user.standard == 2 && user.stripeCatalog != 37) resolve();
});
}),
],
// 省营商
[
[2, 37].toString(),
() =>
new Promise((resolve) => {
Dict.value.SystemUserInfo.value.then((user) => {
if (user.standard == 2 && user.stripeCatalog == 37) resolve();
});
}),
],
// 市营商
[
[3, 37].toString(),
() =>
new Promise((resolve) => {
Dict.value.SystemUserInfo.value.then((user) => {
if (user.standard == 3 && user.stripeCatalog == 37) resolve();
});
}),
],
// 市部门
[
[3, '!37'].toString(),
() =>
new Promise((resolve) => {
Dict.value.SystemUserInfo.value.then((user) => {
if (user.standard == 3 && user.stripeCatalog != 37) resolve();
});
}),
],
// 区营商
[
[4, 37].toString(),
() =>
new Promise((resolve) => {
Dict.value.SystemUserInfo.value.then((user) => {
if (user.standard == 4 && user.stripeCatalog == 37) resolve();
});
}),
],
]);
// 审核界面反馈来源的Select数据
Dict.handlers.SystemVerifyFeedbackSource = () =>
new Promise((resolve) => {
Promise.race([
// 省部门
Dict.value.SystemUserOrganizationMap.value.get([2, '!37'].toString())(),
// 省营商
Dict.value.SystemUserOrganizationMap.value.get([2, 37].toString())(),
]).then(() => {
Dict.value.SystemOrgGetRegionAreaList.value().then((res) => {
resolve(
res.map((t) => ({
label: t.name,
value: t.id,
})),
);
});
});
// 市营商
Dict.value.SystemUserOrganizationMap.value
.get([3, 37].toString())()
.then(() => {
Dict.value.SystemOrgGetOrgListByRegionCode.value().then((res) => {
resolve(
res.map((t) => ({
label: t.name,
value: t.id,
})),
);
});
});
});
},
initRemote() {},
};
```
当前 FormItemGeneratorToDict 内置了非常多的数据源包装组件,他们都已约定的后缀命名 Dict,比如以 Select 结尾的字典,如`Dict.handhers.SystemTestSelect`,那么引用的时候就是`SystemTestSelectFormItem`,此时 Dict 是静态的 Dict,也就是返回不是 Promise,如果以 DynamicSelect 结尾的 Dict,如`Dict.handlers.SystemTestDynamicSelect`,那么引用时候就是`SystemTestDynamicSelectFormItem`,此时 Dict 返回的是 Promise,多用于调用后端接口返回的数据。下面列出所有后缀。
- AutoComplete
- CascaderLeaf
- CascaderMulit
- CascaderLeafMulit
- RadioHorizontal
- RadioVertical
- RadioButton
- RadioSelect
- RadioCustom
- CheckBoxHorizontal
- CheckBoxVertical
- CheckBoxCheckAllVertical
- CheckBoxCheckAllHorizontal
- CheckBoxSelect
- CheckBoxCheckAllSelect
- CheckBoxCustom
- Select
- SelectMulit
- SelectCheckAllMulit
- AutoCompleteSelect
- AutoCompleteSelectMulit
- AutoCompleteSelectCheckAllMulit
- Tree
- TreeLeaf
- TreeMulit
- TreeLeafMulit
- Transfer
- TransferSelect
- Table
- TableSelect
- TableMulitSelect
- TablePagination
- TablePaginationSelect
- TablePaginationMulitSelect
- List
- ListSelect
- ListMulitSelect
- ListPagination
- ListPaginationSelect
- ListPaginationMulitSelect
- AutoComplete
- **[AntFormItemNormalize](http://49.232.163.126:8083/adhere/ui/antdformitem)**
AntFormItemNormalize 是对 antd 中的所有组件预定义默认值,下面是为 Select 组件设置的默认值
```js
import { Select as AntSelect } from 'antd';
export const Select = createFactory(AntSelect, {
showSearch: true,
allowClear: true,
placement: 'bottomLeft',
filterOption: (input, option) => option.children.toLowerCase().indexOf(input.toLowerCase()) >= 0,
});
```
结合[FlexLayout](http://49.232.163.126:8083/adhere/ui/flexlayout)的`ScrollLayout`来设置`getPopupContainer`属性,`FlexLayout.ScrollLayout`是一个可以滚动的容器,在此容器下使用`AntFormItemNormalize`包装的 antd 组件可以将`getPopupContainer`属性设置为`ScrollLayout`的`el`
可以统一动态设置`AntFormItemNormalize`包装组件属性的默认值
```js
import { AntdFormItem } from '@baifendian/adhere';
AntdFormItem.AntFormItemNormalize.Input.defaultProps.maxLength = 2000;
```
这样引用 AntdFormItem.AntFormItemNormalize.Input 组件的地方都会改变
- **[ConditionalRender](http://49.232.163.126:8083/adhere/ui/conditionalrender)**
我们一般在遇到条件渲染的时候都是使用三目运算符(条件 ? Match 功能 : NoMatch 功能)或者短路表达式(条件 && 功能),这样的弊端在于在 JSX 中使用表达式会让程序的可读性降低,不连贯最后导致不易扩展和维护,我们应该以标签的形式来处理条件渲染,下面是一个例子
Bad
```jsx
import React from 'react';
export default () => {
const [status, setStatus] = useState(0);
return status === 0 ? display
: null;
};
```
Good
```jsx
import React from 'react';
import { ConditionalRender } from '@baifendian/adhere';
export default () => {
const [status, setStatus] = useState(0);
return (
{() => display
}
);
};
```
`ConditionalRender`还支持`Show`和`Visibility`,Show 用于切换 css 的 display,Visibility 用于切换 css 的 visibility
```jsx
import React from 'react';
import { ConditionalRender } from '@baifendian/adhere';
export default () => {
const [status, setStatus] = useState(0);
return (
{() => display
}
);
};
```
```jsx
import React from 'react';
import { ConditionalRender } from '@baifendian/adhere';
export default () => {
const [status, setStatus] = useState(0);
return (
{() => display
}
);
};
```
- **Intl**
系统中的国际化文件在`src/locales`下面,Intl 的一大特点是不用定义`key`,`key`有组件自动生成,下面是`zh_CN.js`和`en_US`的定义
```js
export default ['姓名', '性别', '年龄'];
```
```js
export default ['name', 'sex', 'birthday'];
```
顺序要一一对应。
```js
import { Intl } from '@baifendian/adhere';
Intl.v('姓名');
```
如果一个词条代表多个意思也可以使用`key`和`value`来定义词条
```js
export default [
'姓名',
'性别',
'年龄',
{
key: 'name',
value: '姓名',
},
];
```
```js
import { Intl } from '@baifendian/adhere';
// 姓名词条
Intl.v('姓名');
// name词条
Intl.get('name');
```
支持表达式
```js
export default ['仓库数量合计:{count}个'];
```
```js
import { Intl } from '@baifendian/adhere';
Intl.v('仓库数量合计:{count}个', {
count: 6,
});
```
配合`AdhereConfigProvider`使用
```jsx
import { ConfigProvider as AdhereConfigProvider } from '@baifendian/adhere';
ReactDOM.createRoot(document.getElememtById('app')).render(
{() => App
}
,
);
```
- **[Ajax](http://49.232.163.126:8083/adhere/util/ajax)**
普通的请求需要在 Service 中进行定义,命名的约定`fetch${业务名称}${功能名称}`,如果 Service 是在业务目录中定义则可以省略${业务名称},组件已经默认加入和系统管理相关的 headers,token 是通过浏览器的 localStorage 中的 accessToken 来获取 token 的,组件也加入了 401 和 402 的默认处理,如需自定义可以修改`util/request/index.js`中的代码
定义和使用,一般在 Service 中进行接口定义
```js
import request from '@/util/request';
export const fetchList = (() => {
return {
call: ({ page, limit }) => {
const path = JSON.parse(JSON.stringify(Mock.fetchList));
path.data.data.records = path.data.data.records.slice((page - 1) * limit, page * limit);
return request.get({
path,
// 是否开启mock,开启mock则path就是返回的数据,如果没有开启,path是实际接口的相对地址
mock: true,
// 是否显示loading
loading: {
show: false,
},
});
},
// 用于状态管理的默认值,如果是直接调用则可以省略,最好是给出
defaultResult: () => ({
total: 0,
records: [],
}),
};
})();
```
```js
import { fetchList } from './Service';
fetchList.call({1, 10}).then(res => {
if(!res) return;
if(res.data.resCode === 0) {
// res.data.data
}
// 关闭遮罩层
res.hideIndicator();
});
```
理想的情况是一个业务系统前端之和一个业务系统后端通信,如果想要支持和多个业务系统通信,就需要在`util/request/index.js`中实例化多个 Ajax 对象并导出,同样在`assets/constent.js`中也要同时加入相应的地址配置
系统管理接口的调用,一般都在`config/dict/Dict/dict.system.config.js`中进行定义,然后应用 Dict 就可以,现在和系统管理通信的接口最重要的三个就是,获取用户信息,获取用户权限,获取组织机构。
- **[Preferences](http://49.232.163.126:8083/adhere/util/preferences)**
规范对 store 存取的写法
- **[Emiter](http://49.232.163.126:8083/adhere/util/emitter)**
全局的发布订阅 EventBUS,一般都是在组件之间连理通信
- **统一的提示**
为了统一系统中的提示信息,都是用同一套提示消息
[adhere-ui-prompt-errorprompt](http://49.232.163.126:8083/adhere/ui/errorprompt)
[adhere-ui-prompt-successprompt](http://49.232.163.126:8083/adhere/ui/successprompt)
[adhere-ui-prompt-warnprompt](http://49.232.163.126:8083/adhere/ui/warnprompt)
[adhere-ui-confirm-delconfirm](http://49.232.163.126:8083/adhere/ui/delconfirm)
[adhere-ui-confirm-importantconfirm](http://49.232.163.126:8083/adhere/ui/importantconfirm)
- **[DateDisplay](http://49.232.163.126:8083/adhere/ui/datedisplay)**
统一时间格式化
- **[HistoryBack](http://49.232.163.126:8083/adhere/ui/historyback)**
智能的路由跳转操作,如果有历史则跳回历史,如果没有历史则跳回给定的路由地址,一般都配合[`BackLayout`](http://49.232.163.126:8083/adhere/ui/flexlayout)使用
- **[MessageDialog](http://49.232.163.126:8083/adhere/ui/messagedialog)**
规范弹窗的编写方式,都是用指令式的写法,之前都是使用``的写法,这样好需要手动控制 visible 和清空重置等繁琐事项,规定弹窗都写到 Modal 目录中,以`open${}`业务名称的方式定义方法,下面是一个例子
```js
/**
* 所有相关的弹出框都在这里维
* 方法的命名规open${业务名称}
*/
export default {
/**
* openUpdateModal
* @description - 修改
* @param id
* @param success
* @return {HTMLDivElement}
*/
openUpdateModal(id, success) {
const ref = createRef();
const dialog = MessageDialog.Modal({
config: {
title: Intl.v('查看'),
width: '50%',
zIndex: Resource.Dict.value.ResourceNormalMaxZIndex.value,
maskClosable: false,
footer: [
,
],
},
children: (
{/**/}
),
});
return dialog;
},
};
```
```js
import Modal from './Modal'l
Modal.openUpdateModal();
```
- **[FlexLayout](http://49.232.163.126:8083/adhere/ui/flexlayout)**
提供布局相关组件来规范布局操作,长用到的组件有`HorizontalFlexLayout`、`VerticalFlexLayout`、`ToolBarLayout`、`BackLayout`、`ScrollLayout`,这里的`BackLayout`默认提供了一个返回按钮(使用`HistoryBack`实现),`ScrollLayout`结合`AntFormItemNormalize`使用,建议页面中都是用此组件进行布局
- **[TableGridLayout](http://49.232.163.126:8083/adhere/ui/tablegridlayout)**
提供 Grid 形式的布局,一般用来显示详情或者表单页面,建议页面中的详情和表单页面都使用此布局来显示。工程中也是基于此组件扩展出了`SystemViewTableGridLayout`和`SystemFormTableGridLayout`组件
- **[ReactQuillSandbox](http://49.232.163.126:8083/adhere/ui/reactquillsandbox)**
对 ReactQuill 进行了沙箱的封装,使得样式不会被全局样式覆盖。
- **[IframeIO](http://49.232.163.126:8083/adhere/util/iframeio)**
对 window 和 iframe 之间的通信封装出了一套通信协议。
- **[Globalindicator](http://49.232.163.126:8083/adhere/ui/globalindicator)和[Spin](http://49.232.163.126:8083/adhere/ui/spin)** 无侵入的提示信息
- **[Span](http://49.232.163.126:8083/adhere/ui/span)**、**[Split](http://49.232.163.126:8083/adhere/ui/split)**、**[SplitLayout](http://49.232.163.126:8083/adhere/ui/splitlayout)**
无侵入的分割、无侵入的空隙、分割窗体
- **[Suspense](http://49.232.163.126:8083/adhere/ui/suspense)**
数据加载单元(如第一次是骷髅骨架,其他是 loading),有数据加载的单元,第一次是骷髅骨架(或其他)mount,更新是 loading,一般用在 echart 图表展示做 loading,或者数据源组件做展示的时候,这里的数据源可以是 Promise 的也可不是。
- **[FormitemCreator](http://49.232.163.126:8083/adhere/ui/formitemcreator)**
使用配置方式来进行 Antd 的表单编程。
- **[SearchTable](http://49.232.163.126:8083/adhere/ui/searchtable)**
功能强大的重型表格组件,建议工程中的数据表格都是用这个组件,这个组件的功能太多,可以点击上方链接具体查看功能。
- **[Util](http://49.232.163.126:8083/adhere/util/util)**
工具类,类似于 loadsh
- **[Browsersniff](http://49.232.163.126:8083/adhere/util/browsersniff)**
客户端浏览器识别工具
- **[Resource](http://49.232.163.126:8083/adhere/util/resource)**
一些常用资源的集合,以 Dict 和 JSON 方式提供
- **[Validator](http://49.232.163.126:8083/adhere/util/validator)**
一些常用的典型验证方法,电话号码的验证极为强大。
## Router
路由文件在`config\router\router.jsx`文件中进行定义,下面是一个例子
```js
import { lazy } from 'react';
import BasicLayout from '@/lib/BasicLayout/tabs';
export default [
{
id: 'Root',
path: '/',
routes: [
{
path: '/',
redirect: ['/app'],
},
{
id: 'App',
path: '/app',
component: lazy(() => import(/* webpackChunkName: "app" */ '@/app.jsx')),
routes: [
{
path: '/',
redirect: ['/app/basiclayout'],
},
{
id: 'AppBasicLayout',
path: '/app/basiclayout',
component: BasicLayout,
routes: [
{
path: '/',
redirect: ['/app/basiclayout/dataflowdemo', '/app/basiclayout/task'],
},
{
id: 'AppBasicLayoutDataFlowDemo',
path: '/app/basiclayout/dataflowdemo',
name: 'DateFlowDemo',
sort: 2,
skip: true,
routes: [
{
path: '/',
redirect: [
'/app/basiclayout/dataflowdemo/classlist',
'/app/basiclayout/dataflowdemo/hooklist',
'/app/basiclayout/dataflowdemo/stateclasslist',
'/app/basiclayout/dataflowdemo/statehookslist',
],
},
{
id: 'AppBasicLayoutDataFlowDemoClassListClassList',
path: '/app/basiclayout/dataflowdemo/classlist',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutDataFlowDemoClassList" */ '@/pages/BasicLayout/DataFlowDemo/ClassList/ClassList.jsx'
),
),
name: 'ClassList',
authority: ['AppBasicLayoutDataFlowDemoClassListClassList'],
subAuthority: [],
},
{
id: 'AppBasicLayoutDataFlowDemoHookListHookList',
path: '/app/basiclayout/dataflowdemo/hooklist',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutDataFlowDemoHookList" */ '@/pages/BasicLayout/DataFlowDemo/HookList/HookList.jsx'
),
),
name: 'HookList',
authority: ['AppBasicLayoutDataFlowDemoHookListHookList'],
subAuthority: [],
},
{
id: 'AppBasicLayoutDataFlowDemoStateClassListStateClassList',
path: '/app/basiclayout/dataflowdemo/stateclasslist',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutDataFlowDemoStateClassList" */ '@/pages/BasicLayout/DataFlowDemo/StateClassList/StateClassList.jsx'
),
),
name: 'StateClassList',
authority: ['AppBasicLayoutDataFlowDemoStateClassListStateClassList'],
subAuthority: [],
},
{
id: 'AppBasicLayoutDataFlowDemoStateHooksListStateHooksList',
path: '/app/basiclayout/dataflowdemo/statehookslist',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutDataFlowDemoStateHooksList" */ '@/pages/BasicLayout/DataFlowDemo/StateHooksList/StateHooksList.jsx'
),
),
name: 'StateHooksList',
authority: ['AppBasicLayoutDataFlowDemoStateHooksListStateHooksList'],
subAuthority: [],
},
],
},
{
id: 'AppBasicLayoutTask',
path: '/app/basiclayout/task',
name: '工作任务',
routes: [
{
path: '/',
redirect: [
'/app/basiclayout/task/implementsubmit',
'/app/basiclayout/task/ledger',
'/app/basiclayout/task/ledgeraudit',
'/app/basiclayout/task/track',
],
},
{
id: 'AppBasicLayoutTaskImplementSubmit',
path: '/app/basiclayout/task/implementsubmit',
name: '落实报送',
sort: 2,
skip: true,
routes: [
{
path: '/',
redirect: [
'/app/basiclayout/task/implementsubmit/feedback',
'/app/basiclayout/task/implementsubmit/list',
'/app/basiclayout/task/implementsubmit/view',
],
},
{
id: 'AppBasicLayoutTaskImplementSubmitFeedBackMain',
path: '/app/basiclayout/task/implementsubmit/feedback',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutTaskImplementSubmitFeedBack" */ '@/pages/BasicLayout/Task/ImplementSubmit/FeedBack/Main.jsx'
),
),
name: '反馈',
authority: ['AppBasicLayoutTaskImplementSubmitFeedBackMain'],
subAuthority: [],
hide: true,
},
{
id: 'AppBasicLayoutTaskImplementSubmitListMain',
path: '/app/basiclayout/task/implementsubmit/list',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutTaskImplementSubmitList" */ '@/pages/BasicLayout/Task/ImplementSubmit/List/Main.jsx'
),
),
name: '落实报送',
authority: ['AppBasicLayoutTaskImplementSubmitListMain'],
subAuthority: [],
},
{
id: 'AppBasicLayoutTaskImplementSubmitViewMain',
path: '/app/basiclayout/task/implementsubmit/view',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutTaskImplementSubmitView" */ '@/pages/BasicLayout/Task/ImplementSubmit/View/Main.jsx'
),
),
name: '查看',
authority: ['AppBasicLayoutTaskImplementSubmitViewMain'],
subAuthority: [],
hide: true,
},
],
},
{
id: 'AppBasicLayoutTaskLedger',
path: '/app/basiclayout/task/ledger',
name: '台账管理',
sort: 1,
skip: true,
routes: [
{
path: '/',
redirect: [
'/app/basiclayout/task/ledger/list',
'/app/basiclayout/task/ledger/save',
'/app/basiclayout/task/ledger/update',
'/app/basiclayout/task/ledger/view',
],
},
{
id: 'AppBasicLayoutTaskLedgerListMain',
path: '/app/basiclayout/task/ledger/list',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutTaskLedgerList" */ '@/pages/BasicLayout/Task/Ledger/List/Main.jsx'
),
),
name: '台账管理',
authority: ['AppBasicLayoutTaskLedgerListMain'],
subAuthority: [],
},
{
id: 'AppBasicLayoutTaskLedgerSaveMain',
path: '/app/basiclayout/task/ledger/save',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutTaskLedgerSaveOrUpdate" */ '@/pages/BasicLayout/Task/Ledger/SaveOrUpdate/Main.jsx'
),
),
name: '新增',
authority: ['AppBasicLayoutTaskLedgerSaveMain'],
subAuthority: [],
hide: true,
},
{
id: 'AppBasicLayoutTaskLedgerUpdateMain',
path: '/app/basiclayout/task/ledger/update',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutTaskLedgerSaveOrUpdate" */ '@/pages/BasicLayout/Task/Ledger/SaveOrUpdate/Main.jsx'
),
),
name: '修改',
authority: ['AppBasicLayoutTaskLedgerUpdateMain'],
subAuthority: [],
hide: true,
},
{
id: 'AppBasicLayoutTaskLedgerViewMain',
path: '/app/basiclayout/task/ledger/view',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutTaskLedgerView" */ '@/pages/BasicLayout/Task/Ledger/View/Main.jsx'
),
),
name: '查看',
authority: ['AppBasicLayoutTaskLedgerViewMain'],
subAuthority: [],
hide: true,
},
],
},
{
id: 'AppBasicLayoutTaskLedgerAudit',
path: '/app/basiclayout/task/ledgeraudit',
name: '台账审核',
sort: 4,
skip: true,
routes: [
{
path: '/',
redirect: [
'/app/basiclayout/task/ledgeraudit/audit',
'/app/basiclayout/task/ledgeraudit/list',
'/app/basiclayout/task/ledgeraudit/view',
],
},
{
id: 'AppBasicLayoutTaskLedgerAuditAuditMain',
path: '/app/basiclayout/task/ledgeraudit/audit',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutTaskLedgerAuditAudit" */ '@/pages/BasicLayout/Task/LedgerAudit/Audit/Main.jsx'
),
),
name: '审核',
authority: ['AppBasicLayoutTaskLedgerAuditAuditMain'],
subAuthority: [],
hide: true,
},
{
id: 'AppBasicLayoutTaskLedgerAuditListMain',
path: '/app/basiclayout/task/ledgeraudit/list',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutTaskLedgerAuditList" */ '@/pages/BasicLayout/Task/LedgerAudit/List/Main.jsx'
),
),
name: '台账审核',
authority: ['AppBasicLayoutTaskLedgerAuditListMain'],
subAuthority: [],
},
{
id: 'AppBasicLayoutTaskLedgerAuditViewMain',
path: '/app/basiclayout/task/ledgeraudit/view',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutTaskLedgerAuditView" */ '@/pages/BasicLayout/Task/LedgerAudit/View/Main.jsx'
),
),
name: '查看',
authority: ['AppBasicLayoutTaskLedgerAuditViewMain'],
subAuthority: [],
hide: true,
},
],
},
{
id: 'AppBasicLayoutTaskTrack',
path: '/app/basiclayout/task/track',
name: '落实跟踪',
sort: 3,
routes: [
{
path: '/',
redirect: [
'/app/basiclayout/task/track/feedbackprogress',
'/app/basiclayout/task/track/feedbackverification',
'/app/basiclayout/task/track/scheduleprogress',
],
},
{
id: 'AppBasicLayoutTaskTrackFeedbackProgress',
path: '/app/basiclayout/task/track/feedbackprogress',
name: '反馈进度',
skip: true,
routes: [
{
path: '/',
redirect: [
'/app/basiclayout/task/track/feedbackprogress/list',
'/app/basiclayout/task/track/feedbackprogress/view',
],
},
{
id: 'AppBasicLayoutTaskTrackFeedbackProgressListMain',
path: '/app/basiclayout/task/track/feedbackprogress/list',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutTaskTrackFeedbackProgressList" */ '@/pages/BasicLayout/Task/Track/FeedbackProgress/List/Main.jsx'
),
),
name: '反馈进度',
authority: ['AppBasicLayoutTaskTrackFeedbackProgressListMain'],
subAuthority: [],
},
{
id: 'AppBasicLayoutTaskTrackFeedbackProgressViewMain',
path: '/app/basiclayout/task/track/feedbackprogress/view',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutTaskTrackFeedbackProgressView" */ '@/pages/BasicLayout/Task/Track/FeedbackProgress/View/Main.jsx'
),
),
name: '查看',
authority: ['AppBasicLayoutTaskTrackFeedbackProgressViewMain'],
subAuthority: [],
hide: true,
},
],
},
{
id: 'AppBasicLayoutTaskTrackFeedbackVerification',
path: '/app/basiclayout/task/track/feedbackverification',
name: '反馈核验',
skip: true,
routes: [
{
path: '/',
redirect: [
'/app/basiclayout/task/track/feedbackverification/list',
'/app/basiclayout/task/track/feedbackverification/verification',
'/app/basiclayout/task/track/feedbackverification/view',
],
},
{
id: 'AppBasicLayoutTaskTrackFeedbackVerificationListMain',
path: '/app/basiclayout/task/track/feedbackverification/list',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutTaskTrackFeedbackVerificationList" */ '@/pages/BasicLayout/Task/Track/FeedbackVerification/List/Main.jsx'
),
),
name: '反馈核验',
authority: ['AppBasicLayoutTaskTrackFeedbackVerificationListMain'],
subAuthority: [],
},
{
id: 'AppBasicLayoutTaskTrackFeedbackVerificationVerificationMain',
path: '/app/basiclayout/task/track/feedbackverification/verification',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutTaskTrackFeedbackVerificationVerification" */ '@/pages/BasicLayout/Task/Track/FeedbackVerification/Verification/Main.jsx'
),
),
name: '核验',
authority: [
'AppBasicLayoutTaskTrackFeedbackVerificationVerificationMain',
],
subAuthority: [],
hide: true,
},
{
id: 'AppBasicLayoutTaskTrackFeedbackVerificationViewMain',
path: '/app/basiclayout/task/track/feedbackverification/view',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutTaskTrackFeedbackVerificationView" */ '@/pages/BasicLayout/Task/Track/FeedbackVerification/View/Main.jsx'
),
),
name: '查看',
authority: ['AppBasicLayoutTaskTrackFeedbackVerificationViewMain'],
subAuthority: [],
hide: true,
},
],
},
{
id: 'AppBasicLayoutTaskTrackScheduleProgress',
path: '/app/basiclayout/task/track/scheduleprogress',
name: '落实进度',
skip: true,
routes: [
{
path: '/',
redirect: [
'/app/basiclayout/task/track/scheduleprogress/list',
'/app/basiclayout/task/track/scheduleprogress/view',
],
},
{
id: 'AppBasicLayoutTaskTrackScheduleProgressListMain',
path: '/app/basiclayout/task/track/scheduleprogress/list',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutTaskTrackScheduleProgressList" */ '@/pages/BasicLayout/Task/Track/ScheduleProgress/List/Main.jsx'
),
),
name: '落实进度',
authority: ['AppBasicLayoutTaskTrackScheduleProgressListMain'],
subAuthority: [],
},
{
id: 'AppBasicLayoutTaskTrackScheduleProgressViewMain',
path: '/app/basiclayout/task/track/scheduleprogress/view',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutTaskTrackScheduleProgressView" */ '@/pages/BasicLayout/Task/Track/ScheduleProgress/View/Main.jsx'
),
),
name: '查看',
authority: ['AppBasicLayoutTaskTrackScheduleProgressViewMain'],
subAuthority: [],
hide: true,
},
],
},
],
},
],
},
],
},
],
},
],
},
];
```
router 节点属性说明
```ts
interface RouterConfig {
// 唯一代表一个节点的标致
id?: string;
// 重定向的path,匹配有权的第一个path
redirect?: string[];
// 路由地址
path: string;
// 组件 如果是BasicLayout或者是BasicLayoutTab那就是左右布局结构
component: React.ReactElement | () => React.ReactElement;
// 如果component是BasicLayout或者BasicLayoutTab,name是左侧菜单的名字
name?: string;
// 如果component是BasicLayout或者BasicLayoutTab生效,菜单的位置
sort?: number;
// 如果component是BasicLayout或者BasicLayoutTab生效,是否掠过此节点(是一个包装节点)
skip?: boolean;
// 如果component是BasicLayout或者BasicLayoutTab生效,页面的权限码列表
authority?: string[];
// 如果component是BasicLayout或者BasicLayoutTab生效,页面的按钮权限码列表
subAuthority?: {key: string, value: string}[];
// 如果component是BasicLayout或者BasicLayoutTab生效,是否在菜单中显示
hide?: boolean;
// 如果component是BasicLayout或者BasicLayoutTab生效,在菜单中显示的icon
icon?: React.ReactElement;
// 子路由配置
routers?: RouterConfig[];
}
```
路由的跳转
```jsx
// @ctsj/router 导出了react-router的所有对象
import { Link } from '@ctsj/router';
jump
;
```
```js
props.history.push();
props.history.replace();
```
获取路由地址
- 要使用routerConfig来获取路由的地址
```js
import { findRouteConfig } from '@/lib/Router/util';
// ../Table是基于当前页面路由的path,来寻找指定的路由 Table是路由的id
findRouteConfig('当前页面路由的path', '../Table')?.path;
```
- 获取当前页面路由的配置
```js
import { useContext } from 'react';
import { RouterConfigContext } from '@/lib/Router/RouterConfigComponent';
export default () => {
const { routerConfig } = useContext(RouterConfigContext);
return Page
}
```
切换路由类可以修改 ENV 的 router 变量来切换路由类型
## 权限
- 权限配置
权限码是一个字符串数组,里面包含了当前登录用户的所有可用权限,这里面包括`页面权限`和`按钮权限`,这两种权限在路由中进行配置,使用`authority`和`subAuthority`来定义,如
```javascript
{
id: 'AppBasicLayoutDataFlowDemoClassTableClassTable',
path: '/app/basiclayout/dataflowdemo/classtable',
component: lazy(() =>
import(
/* webpackChunkName: "appBasicLayoutDataFlowDemoClassTable" */ '@/pages/BasicLayout/DataFlowDemo/ClassTable/ClassTable.jsx'
),
),
name: 'ClassTable',
authority: ['AppBasicLayoutDataFlowDemoClassTableClassTable'],
subAuthority: [{ key: 'TaskResults', value: 'TaskResults' }],
},
```
`authority`代表页面权限,`subAuthority`代表这个页面的按钮权限,如果用户没有当前页面权限,那么在BasicLayout的左侧菜单中是不显示这个页面对应的菜单项,如果直接在浏览器地址栏上输入一个无权限的页面地址那么会显示403页面。
- 权限组件和获取权限
- 使用ConditionalRender.conditionalRender方法判断权限
```js
import { Permission } from '@baifendian/adhere';
import {findSubAuthorityById} from '@/lib/Router/util';
import Util from '@/util';
const { getPermission } = Permission;
ConditionalRender.conditionalRender({
conditional: Util.isAuthority(
[findSubAuthorityById('SystemSchedulingPlan', 'Save')],
getPermission(),
),
match: (
}
type="primary"
onClick={() => {
this.props.history.push(findRouteConfig('SystemSchedulingPlanSave').path);
}}
>
{Intl.v('新增')}
),
})
```
- 使用权限组件
可以使用`PermissionWrap`组件来在代码中使用权限,如
```js
import { Permission } from '@baifendian/adhere';
import {findSubAuthorityById} from '@/lib/Router/util';
const { Permission: PermissionWrap } = Permission;
permissions={['权限1','权限2','权限3']}
noMatch={{data.relFinishTarget}}
>
{() =>
{data.relFinishTarget}
}
```
- 获取按钮权限
使用`findSubAuthorityById`来获取按钮权限,第一个参数是父路由的id,第二个是按钮权限的key,给到后端实际的按钮权限值等于页面路由id + 按钮权限的value 例如 SystemSchedulingPlanListSave
```js
import { Permission } from '@baifendian/adhere';
import {findSubAuthorityById} from '@/lib/Router/util';
const { Permission: PermissionWrap } = Permission;
{data.relFinishTarget}}
>
{data.relFinishTarget}
```
## 工程内典型组件讲解
`components/system`下的组件
- **SystemCard**
一个增强的卡片布局,没有什么特别之处,就是为了统一写法,以后灵活应对修改
- **SystemAnnexList**
附件显示的组件,没有什么特别之处,就是为了统一写法,以后灵活应对修改
- **SystemIframe** 对 iframe 的一个包装,没有什么特别之处,就是为了统一写法,以后灵活应对修改
- **SystemFormTableGridLayout**
对 TableGridLayout 的一个扩展,复写的一些样式,用于表单布局
- **SystemViewTableGridLayout**
对 TableGridLayout 的一个扩展,复写的一些样式,用于详情布局
- **SystemImageAnnexList**
图片附件显示的组件,没有什么特别之处,就是为了统一写法,以后灵活应对修改
- **SystemMediaListItem**
List 的 Item 项布局,可以用来显示复杂的列表项元素显示。
- **SystemSearchTree**
封装了可以查询的 Tree,提供了各种数据源的初始化
- **SystemPage**
页面的顶层组件,如果是页面组件,必须用它来做顶层组件使用,为了以后扩展和修改预留了一个接口
- **SystemBaseSearchTable**
[SearchTable](http://49.232.163.126:8083/adhere/ui/searchtable)的一个包装,用于以扩展留出编程接口
`components/formitem`组件
- **AnnexFormItem**
附件的 FormIem
- **ImageAnnexFormItem**
图片附件的 FormItem
`lib`组件
- **BasicLayout**
一个左侧导航右侧联动的布局组件,左侧导航的数据根据路由配置获取,BasicLayout 还有个 tabs 实现版本,右侧的信息可以通过 tab 卡片的形式展示。
## less
工程中顶层 less 变量应该在`themes\vars`中进行定义
```js
/**
* 业务可以是A-B-C的方式
common-{业务}-font-size
common-{业务}-box-shadow
common-{业务}-background-color
*/
const commonVars = {
// 全局缺省的字体大小
'@common-normal-font-size': '15px',
// 系统名称大小
'@common-system-title-font-size': '21px',
// 界面主标题大小
'@common-primary-title-font-size': '16px',
// 辅助文字大小 | 链接 | 提示
'@common-assist-font-size': '12px',
// 主要文字颜色
'@common-primary-color': '#222',
// 辅助文字颜色
'@common-assist-color': '#888',
// 提示文字颜色
'@common-tip-color': '#999',
// 禁用文字颜色
'@common-disable-color': '#c3c3c3',
// 链接文字颜色
'@common-link-color': '#0099cb',
// 上传弹窗文字颜色
'@upload-primary-color': '#333',
'@upload-gray-color': '#999',
// 边框颜色
'@common-normal-border-color': '#ddd',
// 全局默认的boxShadow
'@common-normal-box-shadow': '0 0 5px 0 rgba(0,0,0,0.10)',
// 全局默认的背景色
'@common-normal-background-color': '#f8f8f8',
// 全局滚动条scrollbar-thumb背景色
'@common-normal-scrollbar-thumb-background-color': '#d8d8d8',
// 全局滚动条scrollbar背景色
'@common-normal-scrollbar-background-color': '#efefef',
// id为app的元素最小宽度
'@common-normal-min-width': '1366px',
// 主颜色
'@primary-color': '#17A293',
'@adhere-primary-color': '@primary-color',
// 导航颜色
'@common-navigator-background-color': '#13927D',
// 导航选中颜色
'@common-navigator-active-background-color': '#16867A',
// 面包屑背景色
'@common-bread-background-color': '#168F82',
// 错误颜色
'@common-error-color': '#D9001B',
// 鼠标经过背景色
'@common-mouse-hover-background-color': 'rgba(23, 162, 147, 80%)',
// 鼠标激活背景色
'@common-mouse-active-background-color': 'rgba(23, 162, 147, 10%)',
// block背景色
'@common-block-background-color': '#f0f2f5',
// 组件背景色
'@common-component-background-color': '#fff',
// vertical paddings
'@common-padding-lg': '24px',
'@common-padding-md': '16px',
'@common-padding-sm': '12px',
'@common-padding-xs': '8px',
'@common-padding-xss': '4px',
// vertical margins
'@common-margin-lg': '24px',
'@common-margin-md': '16px',
'@common-margin-sm': '12px',
'@common-margin-xs': '8px',
'@common-margin-xss': '4px',
// height rules
'@common-height-base': '32px',
'@common-height-lg': '40px',
'@common-height-sm': '24px',
// font Awesome
'@common-fontawesome-css-prefix': 'fa fa-',
// LINK
'@common-link-decoration': 'none',
'@common-link-hover-decoration': 'none',
'@common-link-focus-decoration': 'none',
'@common-link-focus-outline': '0',
// Border color
'@common-border-color-base': 'hsv(0, 0, 85%)',
'@common-border-color-split': 'hsv(0, 0, 94%)',
'@common-border-width-base': '1px',
'@common-border-style-base': 'solid',
// background
'@common-backgeound-hover-color': 'rgba(19,146,125,.1)',
// Outline
'@common-outline-blur-size': '0',
'@common-outline-width': '2px',
'@common-outline-fade': '20%',
'@common-background-color-light': 'hsv(0, 0, 98%);',
'@common-background-color-base': 'hsv(0, 0, 96%);',
// zIndex
'@common-max-zindex': '19999',
// menu
'@common-menu-background-color': '#071b28',
'@common-menu-split-color': '#13927D',
};
module.exports = commonVars;
```
这些变量可以直接使用,无需进行引用,这些变量也可以在脚本中使用`CustomEvnVars.skin`获取,另外[adhere 的 css](http://49.232.163.126:8083/adhere/ui/css)中也内置了很多 less 变量和实用函数
## lint
使用 IDE 的时候需要载入三个 lint 文件`.eslintrc.js`、`.prettierrc.js`和`.stylelintrc.js`
## git commit
使用`git cz`命令执行 git 的 commit 操作
```
$ git add .
$ git cz
```
![][5]
## Jenkins 部署
如果 package.json 有变化才执行 install,否则只执行 build
在 Jeknins 的 shell 中加入如下执行脚本
```
$ node install.js yarn install --ignore-engines
$ yarn buildapp:dev
```
## 访问 git 提交信息
在构建后会在`dist`中会自动生成`gitInfo.txt`文件,此文件会记录一些 git 信息,起到跟踪作用,生成的信息如下
```js
Git操作信息如下:
1、当前分支名称:ref: refs/heads/adhere-vite-ts-2.x
2、远程仓库地址:
3、操作时间:2023/3/10 16:38:47
4、最后一次提交记录id:cef7649e05875c3c88f90708d85449f9b9af2cac
5、最后一次提交记录描述:feat: 加入生成git文件操作
```
## 浏览器的支持
当前编译完的`dist`target是`ES5`代码,css是`stage4`,同时也包含了`corejs`的`polyfill`,但是代码中使用了`Proxy`这个api,如`dict`和`watchmemoized`这个是没办法`polyfill`,现代浏览器除了`IE`之外对`Proxy`的支持都是不错的,所以构建后的`dist`可以用在`chrom`、`firefox`、`Edge`等现代浏览中是没有问题的,但是有一种情况需要注意,就是我们用的第三方package中有的package并没有对es6的语法进行完全的转换,如`const`、`箭头函数 =>`等es6语法没有转换,这样使得有的浏览器(移动端居多),对有的es6语法支持的不够完善,如果用这样的浏览器访问就会出现语法错误,工程中提供了一个`transform:es5`命令,可以将`dist`进行完全的`ES5`转换,如:
```sh
$ npm run transform:es5
```
运行完之后会生成`build`目录,此目录中的内容和`dist`是一致的,这个目录中的所有js都是完全转换后成ES5之后的代码,可以放心使用。
[1]: https://github.com/playerljc/CTSJ-LessMediaQueryLoader/blob/HEAD/README_zh.md
[2]: data:image/jpeg;base64,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
[3]: data:image/png;base64,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
[4]: data:image/png;base64,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
[5]: data:image/png;base64,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