From 9d70ed845a45c0cafb8ff39cb8a821613faeade4 Mon Sep 17 00:00:00 2001 From: Mr Ke <kelq@hugeinfo.com.cn> Date: Mon, 06 Apr 2020 17:05:18 +0800 Subject: [PATCH] 表单搜索公用组件 --- src/components/common/SearchFormView/index.jsx | 236 +++++++++++++++++++++++++++++++++++++++ src/index.js | 7 src/components/common/SearchFormView/index.scss | 22 +++ src/components/common/HotListTableView/index.jsx | 44 +++--- src/components/page/SystemPage/index.jsx | 2 5 files changed, 284 insertions(+), 27 deletions(-) diff --git a/src/components/common/HotListTableView/index.jsx b/src/components/common/HotListTableView/index.jsx index 8469970..e0157dc 100644 --- a/src/components/common/HotListTableView/index.jsx +++ b/src/components/common/HotListTableView/index.jsx @@ -30,7 +30,7 @@ page: 1, size: 10, }, - loading: false + loading: true }; } @@ -116,6 +116,7 @@ render() { let { keywordlist, formData, loading } = this.state; + let tableParams = { url: `api/news/newslist`, formData, @@ -124,30 +125,29 @@ extraFromData: { }, setFormData: this.setFormData - } + }; return ( <div className="hot-list-table-view-main"> - { - loading ? <div style={{ padding: 10 }}> - <Skeleton /> + <Skeleton loading={loading}> + <BreadcrumbView data={[{ name: '行业热点知识库' }]} /> + <div className="hot-list-table-view-main-content"> + <Tabs defaultActiveKey={'全部'} onChange={this.tabChange}> + { + keywordlist.length && + keywordlist.map((key) => ( + <TabPane tab={key} key={key}> + </TabPane> + )) + } + </Tabs> + {/* 避免请求两遍 */} + { + !loading && + <TableView {...tableParams} /> + + } </div> - : - <React.Fragment> - <BreadcrumbView data={[{ name: '行业热点知识库' }]} /> - <div className="hot-list-table-view-main-content"> - <Tabs defaultActiveKey={'全部'} onChange={this.tabChange}> - { - keywordlist.length && - keywordlist.map((key) => ( - <TabPane tab={key} key={key}> - </TabPane> - )) - } - </Tabs> - <TableView {...tableParams} /> - </div> - </React.Fragment> - } + </Skeleton> </div> ) } diff --git a/src/components/common/SearchFormView/index.jsx b/src/components/common/SearchFormView/index.jsx new file mode 100644 index 0000000..dbe59c9 --- /dev/null +++ b/src/components/common/SearchFormView/index.jsx @@ -0,0 +1,236 @@ +/* eslint-disable */ +/**柯礼钦 + * 4/3/2020, 3:00:49 PM + * doc comment for the file goes here + */ + +/** 表单搜索组件 */ +import React, { ReactNode, ReactEventHandler, Component } from 'react'; +import { Row, Col, Form, Input, Button, Select, DatePicker, Divider } from 'antd'; +import moment from 'moment'; + +const { RangePicker } = DatePicker; +import './index.scss'; + + +export default class SearchFormView extends Component { + constructor(props) { + super(props); + this.config = { + }; + this.state = { + }; + } + + componentWillMount() { } + + componentDidMount() { } + + onClick = type => { + const { pathName } = this.props; + let data; + switch (type) { + case 'search': + data = { ...this.props.formData, __key: Date.now() }; + this.props.setFormData(data); + return; + case 'reset': + data = { __key: Date.now(), page: 1, size: 10 }; + this.props.setFormData(data); + return; + case 'build': + return; + } + }; + + //各类型表单元素触发事件 + // input输入类型 + handleInput = ({ target: { name, value } }) => { + this.props.setFormData({ ...this.props.formData, [name]: value }); + }; + + // select下拉选择 + handleSelectChange = name => { + return value => { + this.handleInput({ target: { name, value } }); + }; + }; + + // 时间段区域选择 + rangePickerChange = (name, key, m, d) => { + if (m.length > 0) { + this.props.setFormData({ + ...this.props.formData, + [name]: d.join(','), + [JSON.parse(key)[0]]: d[0], + [JSON.parse(key)[1]]: d[1], + }); + } else { + this.props.setFormData({ + ...this.props.formData, + [name]: undefined, + [JSON.parse(key)[0]]: '', + [JSON.parse(key)[1]]: '', + }); + } + }; + + // 时间选择器 + datePickerChange = (name, v) => { + this.props.setFormData({ + ...this.props.formData, + [name]: v, + }); + }; + + + render() { + const { formData = {}, data = [], children } = this.props; + + return ( + <div className="search-form-view-main"> + <div className="search-form-view-main-margin-bottom"> + <Row type="flex" align="middle" gutter={20}> + + {data.length > 0 && + data.map((item, idx) => ( + <React.Fragment key={idx}> + {(() => { + switch (item.type) { + case 'select': + return ( + <Col span={4}> + <Form.Item label={item.label}> + <Select + size="small" + style={{ width: '100%' }} + placeholder={item.name} + value={formData[item.key]} + allowClear + onChange={this.handleSelectChange(item.key)}> + {item.list && + item.list.map(item => ( + <Select.Option + value={item.id} + key={item.id}> + {item.name} + </Select.Option> + ))} + </Select> + </Form.Item> + </Col> + ); + case 'input': + return ( + <Col span={4}> + <Form.Item label={item.label}> + <Input + size="small" + placeholder={item.name} + name={item.key} + value={formData[item.key]} + onChange={this.handleInput} + /> + </Form.Item> + </Col> + ); + case 'datePicker': + return ( + <Col span={4}> + <Form.Item label={item.label}> + <DatePicker + size="small" + style={{ width: '100%' }} + placeholder={item.name} + onChange={(date, dateString) => { + this.datePickerChange(item.key, dateString); + }} + value={formData[item.key] ? moment(formData[item.key], 'YYYY-MM-DD') : undefined} + /> + </Form.Item> + </Col> + ); + case 'rangePicker': + return ( + <Col span={6}> + <Form.Item label={item.label}> + <RangePicker + size="small" + ranges={{ + Today: [moment(), moment()], + 'This Month': [ + moment().startOf('month'), + moment().endOf('month'), + ], + }} + value={ + item.keylistName && + formData[item.keylistName] && + typeof formData[item.keylistName] == 'string' + ? formData[item.keylistName] + .split(',') + .map(item => moment(item, 'YYYY-MM-DD')) + : [] + } + onChange={(date, dateString) => { + this.rangePickerChange( + item.keylistName, + item.key, + date, + dateString + ); + }} + placeholder={JSON.parse(item.name)} + /> + </Form.Item> + </Col> + ); + case 'br': + return ( + <Col span={24} style={{ marginBottom: '10px' }} /> + ); + default: + return null; + } + })()} + </React.Fragment> + ))} + + <Col> + <Row type="flex" gutter={20} align="middle" align="middle"> + <Col> + <Button + size="small" + type="primary" + onClick={() => { + this.onClick('search'); + }}> + 查询 + </Button> + </Col> + <Col> + <Button + size="small" + onClick={() => { + this.onClick('reset'); + }}> + 重置 + </Button> + </Col> + { + children && + <Col> + {children} + </Col> + } + </Row> + </Col> + </Row> + + </div> + + <Divider /> + </div> + ) + } +} diff --git a/src/components/common/SearchFormView/index.scss b/src/components/common/SearchFormView/index.scss new file mode 100644 index 0000000..5f0238f --- /dev/null +++ b/src/components/common/SearchFormView/index.scss @@ -0,0 +1,22 @@ +/* eslint-disable */ +/**柯礼钦 + * 4/3/2020, 3:00:49 PM + * doc comment for the file goes here + */ + +/** Happy Coding */ +.search-form-view { + &-main { + &-margin-bottom{ + margin-bottom: 18px; + + } + .ant-form-item { + margin-bottom: 0 !important; + display: flex; + } + .ant-form-item-control-wrapper { + flex: 1; + } + } +} diff --git a/src/components/page/SystemPage/index.jsx b/src/components/page/SystemPage/index.jsx index cf211d0..84a2988 100644 --- a/src/components/page/SystemPage/index.jsx +++ b/src/components/page/SystemPage/index.jsx @@ -137,7 +137,7 @@ { title: '通知标题', className: "txt-c", dataIndex: 'documentItle;' }, { title: '通知内容', className: "txt-c", dataIndex: 'documentContent' }, // { title: '文档类型', className: "txt-c", dataIndex: 'documentType', render: (text, record) => text == "DT00001" ? "规章制度" : text == "DT00002" ? "通知公告" : text }, - { title: '接受情况', className: "txt-c", dataIndex: 'groupType', render: (text, record) => <span>{readNumber || 0}/{noticeNumber || 0}</span> }, + { title: '接受情况', className: "txt-c", dataIndex: 'groupType', render: (text, record) => <span>{record.readNumber || 0}/{record.noticeNumber || 0}</span> }, { title: '通知时间', className: "txt-c", dataIndex: 'createTime', render: (text, record) => text !== "" && text != null ? moment(text).format("YYYY-MM-DD HH:mm") : "" }, // { // title: '操作', className: "txt-c", key: 'operation', render: (text, record) => { diff --git a/src/index.js b/src/index.js index b701614..0a36312 100644 --- a/src/index.js +++ b/src/index.js @@ -46,15 +46,14 @@ {/* 全部通知 */} <Route path="/index/workbench/announcement" component={Announcement} /> + <Route path="/index/rules" component={System} /> + {/* 首页 */} <Route path="/index" component={Workbench} /> - <Route path="/index/system" component={System} /> <Route path="/login" component={Login} /> - - <Route path="/" component={Index} /> {/* 路由的页面重定向 */} - <Redirect to="/" component={Index} /> + <Redirect to="/" component={Workbench} /> </Switch> </Content> </Layout> -- Gitblit v1.8.0