总的流程就是从后端查出数据,而后在前端页面展现,其中列表包含查询,分页,以及table表格中经过点击在页面上悬浮一个框,显示与本行具备相关性的数据;前端
总的前端页面分为六个文件:路由router.js,页面index.js,页面相关List.js model下的监控.js,service下的.js以及最后一步的config.jsreact
其中、基本操做一次的为config.js,就是service下的url的延伸或者说是便于管理url的中心;后端
service下的js为真正model调用的url,其中大概长这样:api
里面的参数应该很好懂;数组
而后就是常常操做的index.js,model下的js,以及index的延伸页面;app
明天总结。。。url
接着来:spa
model下的jscode
import { get } from 'services/operation/privateLineService'//这里就是去获取service下的js,也就是获取本身须要的url import modelExtend from 'dva-model-extend' import {pageModel} from "../../common"; import pathToRegexp from "path-to-regexp"; export default modelExtend (pageModel,{ namespace: 'customerDedicatedLineDetail',//命名空间 state: { detail: {}, visible: false, },
subscriptions: {//对页面的监控,***表明的是页面路径,也就是router上匹配的路径 setup ({ dispatch, history }) { history.listen(({ location}) => {if(location.pathname === '***') {
const query = location.query dispatch({ type: 'query', query }) } } }) }, },
effects: {//进入页面触发全部的方法,在query中
* query({payload = {}}, {call, put}) {
yield put({
type: '123',
payload: {
...payload,
range: "2"
},
}),
//yield put({
// type: '12345',
// payload: {
// ...payload,
// range: "2"
//},
//}),
},
* 123({payload = {}}, {call, put,select}) {
const { currentLineId } = yield select(_ => _.app)
payload.currentLineId = currentLineId
const { success, data } = yield call("url的值", payload)
if (success) {
yield put({
type: 'updateState',
payload: {
weekCountLineData: data,
},
})
}
},
},
reducers: {
updateState(state, { payload }) {
return { ...state, detail: payload.item, visible: true }
}
},
}
)
这大概是model中一个精简的过程,而后是index.jsregexp
这里主要是应该用ant design中的<Table/>进行数据展现,这里有一个本身以为是亮点的就是传过来的数值能自动去匹配table的行,好比说table的columns是这样的:
const baseColumns = [ { title: '序号', dataIndex: 'id', key: 'id', }, { title: '名称', dataIndex: 'name', key: 'name', }, { title: '建立时间', dataIndex: 'createTime', key: 'createTime', render: text => moment(text) .format('YYYY-MM-DD HH:mm'), }, ]
而后Table的dataSource为一个数组,而后数组中的对象也好,hashMap也好,只要他的key与colums中的dataIndex与key想匹配,就能够展现;
这是第一;
第二是对table中的指定cell作特别处理;
由于咱们的需求是点击指定的cell后,要展现与本条数据相关的数据(这条数据是经过点击触发事件,而后获取的),当时是经过ant design 中的<Popover/>与<Button/>组合而成,这里遇到的一个问题就是经过点击button,popover展现的效果不正常,有兴趣的能够试一试是什么效果;而后经过点化,用到了<modol/>组件,他是经过visible来控制显示与否,相似于下面:
{ title: 'ddss', dataIndex: 'serviceNum', key: 'serviceNum', render: (text, row, record) => ( <div> <Button id="buttonId" onClick={e => getSecurityServiceList(row.id)}>{text}个服务</Button> <Modal visible={visible} style={{ right: 20 }} keyboard={true} mask={false} //onOk={handleOk} onCancel={handleOk} footer={[]} > {content1()} </Modal> </div> ), },
具体的api能够取官网查询,可是吧,本人以为官网的api不少,可是有好多不知道怎么使用,因此仍是得拿上api去找百度。
这里面还遇到一个react的知识点,就是在作搜索的时候,遇到这个:
const ddss= () => { setTimeout(() => { validateFields((err) => { if (!err) { const data = { ...getFieldsValue(), } const keywords=data.keywords getFilter(keywords) } }); }, 0); }
这里的getFiledDecorator识别失败,
就算在开头导入
仍是失败了
这是为啥???
经过百度的值,在向外暴露的过程当中,须要改为这样:
export default Form.create()(List)
原来应该是:
export default List