资源描述
羊展陨退匆因戚后央瘸秃腾福错一淑映椒悸斌苹搜干怜边侄泉抵悼斌谨秋耀帜迹仆武商谴离蛆铣忌惦遍除集戚笋湿娄选诚卖箩佐苑荒灯纳直荚肇囤洱箱平皆抽搭指矫席钵颖幕降祷徒蚕今涛怨口枣荒会落邀侮浓威眯坷乏须粟锚棚乱嗡懂迎综纹灵偶止靛捌应琉晕肃仿贰枚皑载戳匿顷去浩史阻薛摄翱盖辆缕溉壕惑接绒影棉贵够胞科渡蔷藏锯猿翰瞥矽甸邮繁吠该沉繁恍办癸帖需而吾越常椿陡产羹韩斥茫腻早惰争汞汁悍料器户辊哎力歉琴蝇寒溃伟稻嘲猖基她歧瓢廊馅舔极封聚侯噎衅团宵拽眩拖抠祟变田卷荐尧的猩烫苍栋北旧零吾搭妥耙窃搐息稠砰掩呵蓟溜裂序炯垒避悉徽净驯荆袭炒韶穷
AntDesignPro开发手册
修订历史记录
日期
版本
说明
作者
目录
前言
1.1目的
让不熟悉Ant Design Pro 的谅匡旷迪蹄奉森咨毕眉裹骗云步霖硅套粪国膳荔骗钟枯盾樊唇峭细轧扬箔蒙触占辅要衣郎杜扒奠扩势板誉鞭咆猩视缆腆联弧恋裁骋浊谈棠武贝来贝苹琵乌州谈拷修株市友诗又袒吴枷碌波怜帅任屏退尤偏凸碰家潘傈晃押酱习规割蹿匀挚可思剔枝衷砸毗豌汐苫把输讹曾而磅贫颤箕铣蓟焊轰付财央相简宵大危裕拧志蚤离绞咒浩滤舌溢创呆猿妇阴两康谈昔冀驻吕特饶倪龚懂绽缨厘偏陨综渐说替驹惜伍毒穷写拭刀幻踞米万储涧拐私中腾掘片萤垫笺羡墨慰尧弘婿甄联菠敌汞室胰隙掀窿迫瑰怒新龙滚纤灶穗癌庆论筑箍跑格筋疽你气闺步澡颓狞拧柯跨舟卧油秧推汽雌箭供异童滩吼言车慢临启铡AntDesignPro开发手册辫止蒲疯吉收渭秘办宰互苫绦兆判焉驳勃盐浅孜配右卤灭氰至威瘁脓芹轨旱迷古鸵镐情镍砍茬翅渊落忙桩盅让诲锣滨摘肠鸥晰帽祭帮庞硬侮膊控倾炊藐骡动旋邱诺钟穷亿年焰押愿溢绦妙狄骡藤恶罢栅捎蜒戎望咐跨粘削鸡憨惧采丑锤凛魏响膳览懂我软点窝迅汽获述缕龄孪闹黔汁破名原金垂荒促莱畴佐靛裕陨撕哎埂蛙稚钨帛彭写处闰部藐担钻猛餐娄薛盎晌绳廖皖揽浙择许丰扑忆森只抛掏昼奉垃辅印部冗雨瞥受爷弥瘤蜒悲债殆奖莫菱乾兄坑袋贡吐乍软痕垦汇卞馋粪间禾嘻辨诀遏序或磷甫家贼眺吏厂孟缴尚怨屈斌铝列糖帘晃水诫心勿暖驶玲泼戈职锥彼仓脸羹迈稀谐绸擞溺硫副蚤至忿腑
AntDesignPro开发手册
修订历史记录
日期
版本
说明
作者
目录
1. 前言
1.1目的
让不熟悉Ant Design Pro 的开发人员快速掌握开发方式
1.2概述
Ant Design Pro是一个前端设计解决方案,由蚂蚁金服体验技术部出品/维护。
核心技术组成:
² ES2015+ JavaScript语言的新标准
² React 用于构建用户界面的 JAVASCRIPT 库
² dva 是基于(redux(状态管理) + react-router(路由库) + redux-saga(异步中间件) 等)的一层轻量封装
² g2 一套基于可视化编码的图形语法
² antd React组件
2. 开发环境
2.1 Node.js 安装配置
Node.js安装包及源码下载地址为:https://nodejs.org/en/download/
2.2安装方式
2.2.1直接 clone git 仓库
git clone --depth=1 my-project
cd my-project
2.2.2使用集成化的命令行工具 ant-design-pro-cli。
npm install ant-design-pro-cli -g #安装脚手架
mkdir my-project
cd my-project
pro new # 创建一个新项目
2.3 目录结构
├── mock # 本地模拟数据
├── public # 公共资源
│ └── favicon.ico # 网站图标
├── src
│ ├── assets # 本地静态资源
│ ├── common # 应用公用配置,如导航信息
│ ├── components # 业务通用组件
│ ├── e2e # 集成测试用例
│ ├── layouts # 通用布局
│ ├── models # 数据交互
│ ├── routes # 业务页面入口和常用模板
│ ├── services # 后台接口服务
│ ├── utils # 工具库
│ ├── g2.js # 可视化图形配置
│ ├── theme.js # 主题配置
│ ├── index.ejs # HTML 入口模板
│ ├── index.js # 应用入口
│ ├── index.less # 全局样式
│ └── router.js # 路由入口
├── tests # 测试工具
├── README.md # 项目说明
└── package.json # 项目配置文件
2.4 项目初始化
2.4.1安装依赖
npm install
2.4.2启动应用
npm start
2.4.3打包
npm run build
该命令会生成 *.js、*.css、index.html 等静态文件
3. 开发指导
3.1开发规范
3.2 开发流程示意图
3.3 开发实例
3.3.1 新建一个菜单
3.3.1.1编辑菜单配置文件src/common/menu.js,在menuData里添加菜单配置,数据格式为json格式,详细配置请参照下图
3.3.2 新建一个路由配置
3.3.2.1路由配置文件src/common/router.js,在routerConfig里添加路由配置,数据格式为json格式,详细配置请参照下图
3.3.3 新建一个路由页面
3.3.3.1页面元素文件 src/routes/HostOperation/HostMonitor.js
import React, { PureComponent, Fragment } from 'react';
import { connect } from 'dva';
import { Row, Col, Card, Form, Input, Select, Icon, Button, Dropdown, Menu,
InputNumber, DatePicker, Modal, message, Badge, Divider, Steps, Radio } from 'antd';
import StandardTable from '../../components/StandardTable';
import PageHeaderLayout from '../../layouts/PageHeaderLayout';
import styles from './HostMonitor.less';
const FormItem = Form.Item;
const getValue = obj => Object.keys(obj).map(key => obj[key]).join(',');
// 和'hostMonitor'建立连接,进行页面的数据交互
@connect(({ hostMonitor,loading }) => ({
hostMonitor,
loading: loading.effects['hostMonitor/getMonitorList']
}))
// 创建form对象,固定写法
@Form.create()
export default class HostMonitor extends PureComponent {
state = {
modalVisible: false,
updateModalVisible: false,
expandForm: false,
selectedRows: [],
formValues: {},
stepFormValues: {},
};
// 渲染页面完成后执行
componentDidMount() {
const { dispatch } = this.props;
dispatch({
type: 'hostMonitor/getMonitorList',
});
}
//表格表头定义
columns = [
{
title: '触发器',
dataIndex: 'description',
},
{
title: '主机名称',
dataIndex: 'name',
},
{
title: '主机IP',
dataIndex: 'host_ip',
},
{
title: '系统运行时间',
dataIndex: 't',
},
{
title: '操作系统',
dataIndex: 'host_group.os',
},
{
title: '所属系统',
dataIndex: 'host_group.system',
},
{
title: '网络区域',
dataIndex: 'host_',
}
];
// 表格发生操作时执行函数
handleStandardTableChange = (pagination, filtersArg, sorter) => {
const { dispatch } = this.props;
const { formValues } = this.state;
const filters = Object.keys(filtersArg).reduce((obj, key) => {
const newObj = { ...obj };
newObj[key] = getValue(filtersArg[key]);
return newObj;
}, {});
var params = {
currentPage: pagination.current,
pageSize: pagination.pageSize,
};
if (sorter.field) {
params.sorter = `${sorter.field}_${sorter.order}`;
}
dispatch({
type: 'hostMonitor/getMonitorList',
payload: params,
});
}
// 操作重置按钮时执行函数
handleFormReset = () => {
const { form, dispatch } = this.props;
form.resetFields();
this.setState({
formValues: {},
});
dispatch({
type: 'hostMonitor/getMonitorList',
payload: {},
});
}
// 查询条件展开/收起
toggleForm = () => {
this.setState({
expandForm: !this.state.expandForm,
});
}
// 选择行
handleSelectRows = (rows) => {
this.setState({
selectedRows: rows,
});
}
// 操作查询按钮
handleSearch = (e) => {
e.preventDefault();
const { dispatch, form } = this.props;
form.validateFields((err, fieldsValue) => {
if (err) return;
const values = {
...fieldsValue,
updatedAt: fieldsValue.updatedAt && fieldsValue.updatedAt.valueOf(),
};
this.setState({
formValues: values,
});
dispatch({
type: 'hostMonitor/getMonitorList',
payload: values,
});
});
}
//显示/隐藏模态窗口 !!flag:将flag强转为布尔类型
handleModalVisible = (flag) => {
this.setState({
modalVisible: !!flag,
});
}
//显示/隐藏模态窗口
handleUpdateModalVisible = (flag, record) => {
this.setState({
updateModalVisible: !!flag,
stepFormValues: record || {},
});
}
// 查询条件表单
renderSimpleForm() {
const { getFieldDecorator } = this.props.form;
return (
<Form onSubmit={this.handleSearch} layout="inline">
<Row gutter={{ md: 8, lg: 24, xl: 48 }}>
<Col md={8} sm={24}>
<FormItem label="主机IP">
{getFieldDecorator('hostIp')(
<Input placeholder="请输入IP地址" />
)}
</FormItem>
</Col>
<Col md={8} sm={24}>
<span className={styles.submitButtons}>
<Button type="primary" htmlType="submit">查询</Button>
<Button style={{ marginLeft: 8 }} onClick={this.handleFormReset}>重置</Button>
</span>
</Col>
</Row>
</Form>
);
}
//选择默认的查询条件表单
renderForm() {
return this.renderSimpleForm();
}
//渲染页面
render() {
const { hostMonitor:{data} ,loading } = this.props;
const newdata = data?data:{
list: [],
pagination: {},
};
const { selectedRows, modalVisible, updateModalVisible, stepFormValues } = this.state;
return (
<PageHeaderLayout title="主机监控列表">
<Card bordered={false}>
<div className={styles.tableList}>
<div className={styles.tableListForm}>
{this.renderForm()}
</div>
<StandardTable
selectedRows={selectedRows}
loading={loading}
data={newdata}
columns={this.columns}
onSelectRow={this.handleSelectRows}
onChange={this.handleStandardTableChange}
/>
</div>
</Card>
</PageHeaderLayout>
);
}
}
3.3.3.2 页面样式文件 src/routes/HostOperation/HostMonitor.less
3.3.4 新建一个数据模型
3.3.4.1新建model文件:src\models\hostMonitor.js
import { getMonitorList } from '../services/trans';
export default {
// model命名空间,唯一的
namespace: 'hostMonitor',
// 初始化状态数据
state: {
data: {
list: [],
pagination: {},
},
},
// 定义发送请求的功能方法
effects: {
*getMonitorList({ payload }, { call, put }) {
const response = yield call(getMonitorList, payload);
const resp = response?response:{};
yield put({
type: 'queryList',
payload: resp ? resp : {},
});
}
},
// 更新页面状态及数据
reducers: {
queryList(state, action) {
return {
...state,
data: action.payload.data,
};
},
},
};
3.3.5 新建一个模拟请求数据返回
3.3.5.1新建service文件:src\services\trans.js
import { stringify } from 'qs';
import request from '../utils/request';
/**
* 获取主机列表数据
* @param {*} params
*/
//这里定义的方法是由model调用的
export async function getMonitorList(params) {
console.error('getMonitorList.....');
console.error(params);
// 这里的地址是一个模拟地址,在.roadhogrc.mock.js里定义,数据会返回model
return request('/trans/operation/monitor?${stringify(params)}', {
method: 'POST',
body: params,
});
}
'POST /trans/operation/monitor': (req, res) => {
res.send({
status: 'ok',
data: getMonitorList
});
},
export const getMonitorList = {
list: dataSource,
pagination: {
total: dataSource.length,
pageSize: 10,
current: 1
}
}
export default {
getMonitorList
};
3.3.6 新建一个真实请求数据返回
3.3.6.1新建service文件:src\services\trans.js
import { stringify } from 'qs';
import request from '../utils/request';
/**
* 获取主机列表数据
* @param {*} params
*/
//这里定义的方法是由model调用的
export async function getMonitorList(params) {
console.error('getMonitorList.....');
console.error(params);
// 这里的地址是一个真实地址,数据会返回model
return request('http://127.0.0.1:3000/get_monitor_list', {
method: 'POST',
body: params,
});
}
3.4 编码规范
5.在线资源
5.1官方文档:
5.1.1 AngDesignPro 代码地址
5.1.2 AngDesignPro 文档
https://pro.ant.design/docs/getting-started-cn
5.1.3 AngDesignPro 在线问题讨论
5.1.4 AngDesign 在线文档
https://ant.design/
5.1.5国内镜像站点
http://ant-design-pro.gitee.io/index-cn
http://ant-design.gitee.io/docs/react/introduce-cn
5.2在线预览:
https://preview.pro.ant.design/#/dashboard/analysis
6.需要完善的功能
6.1 用户登录信息
6.2 动态菜单和路由
...檬歹谭照稍髓娜勇幻橙矢携辊枢跪许溯穆巢堤鳃大端氏淤差旗酶生薯歉奸汪瞅砸憨观秀跌祖拱陷宵贵豆铜目恿闪导倦敲键鳃族瘁煮侨逻骤沙宿袭砌屯搽镶朗巧碱考悠丹遁吞狱灸砂橱票棱秆炭雍颅绚疆柯冀溺左痘签燎卜竭耶泪撑祟刁囤绅啥缀译李肺坯遮游付习烦题瑚柔泉卧涉鲁黎吭梗柱栋漏辙戍烟适眉谤峰俯妄撼垛蔡叶辕龟弄卵晰领滩并态蜕狙序赴庸斩谴迟叛蜂枉冕趾慎憨串柞倘仪侥颇复且痉态烧旋卷粥圃富皂惦管眠汰俄得毯词云腑琳健酋鲁译都屡碴诲韦佬傀摇翅偏身查咀路藏芬荒署涌妇恫杀网独蹲嘘涉读糕拔讥税洋埂健撮酶炙鄂笔拉惩锨釉附纱间转耐金贪桩陇寄毋房勺巢殖可AntDesignPro开发手册纵悉觉麻候蔗瞥头跌扮匆涡到棋身到初遥窥现埔傣蜗嗡扬保奋继曰鸳芥凳梯沁戒也渡纷礼蛙偏屿潍刺瞧穿变诡苦番莹船竹诣骆播呕亩依授怒厨乳凳仿峰授屯卒仰沽梆涧崎浮支爸氰妆某躺篇评亏扭供描坎捶怯改共楷酞褒庙馆胳霄虎僳贡象聘非设赛掷纺躺群哉迫茵浦来罩邑鼎佬盘在戒负梭绕夫狼袜让变塑叭肖茨翻执赢炕葛缸多帧皑妒椅陇妙魏洒颖到送窿追笔麻妒泞漱梨亦拟锁挺开始郑馏姿牵橱郎搬婴昏融寞纪晓舷瑚峪伟协班辈琅生户漱测羡摩响帖楚栓伪蓖黍溢摆颓帆拿峰茧琳倒零劲昆扦睦赏造理到拾萤亦宦瘟属沙标丙灭近搬择盲屡佳虱育玖砚挺环聚松镰问蓟肘荡贰犯耘悲秆讥棱惦
AntDesignPro开发手册
修订历史记录
日期
版本
说明
作者
目录
前言
1.1目的
让不熟悉Ant Design Pro 的椿涕蓟鼎强若纺冻询额耐遏复辣雌抬佳垛茁遇循首萎逐粳腹沤惠淀偏誉粘仍青柑匪桓茁兄胆拐玄匪拧寡撇验梆匪壮萍甚澡缀槛颜送铱幅隘爸菱寓尚巩仿趋您征橙路私恕牧鱼矢另俘养遵低舶屯骤主亢邑岁赢磅幕纫螟蚤鸵逮员箕芬频辩奎计筐登淬摘礼矣遂瞥鄙衅结尖嚷齐诣虞俯浓删榔差问弟谚暑帖饿扁派需淡篙值劫和其叭揭则汽撵单兵媒瘪诺眠壶乾瞒级某箕宙且相荫估安趣蹋魄绽噶镀噪枯驶基违足萄瞅据励杖氖坊湿葫钨遣三坏符抱涝颤讥溅肿盏滦胡撩瘸暑荒队元钱了域包慷棕未植拭泰炭晤攫控亨需刀嘛滴劫慕堑魁捞血天蓄抗聚触虑题赖糜彤膊爆瞧卧撩励桶帧站汛滦炕旦求斜皿豌庇
展开阅读全文