简体中文 | [English](../../en/develop/3-4-BaseDetailInfo-introduction.md) # 用途 ![详情信息页](../../zh/develop/images/detail/image-detail-info.png) - 各资源详情页中详情 Tab 中组件的基类 - 左右结构展示 - 以 Card 的形式展示 - 以配置 Card 的方式即可完成页面内容的展示 # BaseDetailInfo 代码文件 - `src/containers/BaseDetail/index.jsx` # BaseDetailInfo 属性与函数定义介绍 - 资源详情信息继承于 BaseDetailInfo - 代码位置:`pages/xxxx/containers/XXXX/Detail/BaseDetail.jsx` - 只需要复写部分函数即可完成页面的开发 - 属性与函数分为以下四种, - 通常需要复写的属性与函数,主要包含: - 左侧的 Card 列表 - 按需复写的函数与属性,主要包含: - 右侧的 Card 列表 - 获取数据的函数 - 展示数据的来源 - 无需复写的函数与属性,主要包含: - 当前页是否是管理平台页面 - 基类中的基础函数,主要包含: - 渲染页面 - 更详细与全面的介绍见下 ## Card 的配置 - 页面中左侧、右侧的 Card 均采用相同的配置方式 - 每个 Card 的配置如下, - `title`,必须项,Card 的标题 - `titleHelp`, 可选项,Card 的标题旁显示的提示信息 - `render`,可选项,如果存在,则基于`render`渲染 Card 的内容 - `options`,可选项,Card 中每行的配置列表,每个 option 配置如下, - `label`,必须项,行中的标签 - `dataIndex`,必须项,对应于`this.detailData`中的 key,默认是基于`dataIndex`展示行内的数据 - `render`,可选项,可基于`render`的结果渲染行内的内容 - `valueRender`,可选项,基于`dataIndex`及`valueRender`生成行内的展示数据 - `sinceTime`,处理时间,显示成"XX 小时前" - `keepTime`,显示剩余时间 - `yesNo`,处理`Boolean`值,显示成“是”、“否” - `GBValue`,处理大小,显示成"XXXGB" - `noValue`,没有值时,显示成“-” - `bytes`,处理大小 - `uppercase`,大写 - `formatSize`,处理大小,显示如“2.32 GB”,“56.68 MB” - `toLocalTime`,处理时间,显示如“2021-06-17 04:13:07” - `toLocalTimeMoment`,处理时间,显示如“2021-06-17 04:13:07” - `copyable`,可选项,该行内的数据是否可复制,如可复制,会显示复制 icon - 以密钥`src/pages/compute/containers/Keypair/Detail/BaseDetail.jsx`为例 ```javascript get keypairInfoCard() { const options = [ { label: t('Fingerprint'), dataIndex: 'fingerprint', }, { label: t('Public Key'), dataIndex: 'public_key', copyable: true, }, { label: t('User ID'), dataIndex: 'user_id', }, ]; return { title: t('Keypair Info'), options, }; } ``` ## 通常需要复写的属性与函数 - `leftCards`: - 必须复写该函数 - 左侧展示的 Card 列表 - 以镜像`src/pages/compute/containers/Image/Detail/BaseDetail.jsx`为例 ```javascript get leftCards() { const cards = [this.baseInfoCard, this.securityCard]; return this.isImageDetail ? cards : [this.InstanceCard, ...cards]; } ``` - `init` - 配置 Store 的函数,在这个函数中配置用于处理数据请求的 Store,如果配置了该函数,则会在展示该页面时发起数据请求,但是有时展示该页面时,并不需要额外请求,只需要使用`this.props.detail`即可 - 一般使用的是`new XXXStore()`形式 - 以镜像`src/pages/compute/containers/Image/Detail/BaseDetail.jsx`为例 ```javascript init() { this.store = new ImageStore(); } ``` ## 按需复写的属性与函数 - `rightCards` - 右侧展示的 Card 列表 - `fetchData` - 获取 Card 数据的函数 - 一般不需要复写该函数 - `detailData` - 页面 Card 的数据来源 - 默认是`this.props.detail || toJS(this.store.detail)` - 一般不需要复写该函数 - 以云硬盘的 Qos`src/pages/storage/containers/VolumeType/QosSpec/Detail/index.jsx`为例 ```javascript get detailData() { return this.store.detail.qos_specs; } ``` ## 不需要复写的属性与函数 - `id` - 路由信息中的`id` - `isAdminPage` - 当前页面是否是“管理平台”的页面 - `getRoutePath` - 生成页面 Url 的函数 - 如:需要给关联资源提供跳转功能,使用该函数,可以在控制台跳转到控制台的相应地址,在管理平台跳转到管理平台的相应地址 - `routing` - 页面对应的路由信息 - `isLoading` - 当前页面是否在数据更新,更新时会显示 loading 样式 ## 基类中的基础函数 - 建议查看代码理解,`src/containers/BaseDetail/index.jsx`