From c0c820559b46f3a5ede6fbd7f66e77d09981829f Mon Sep 17 00:00:00 2001
From: Mr Ke <kelq@hugeinfo.com.cn>
Date: Wed, 29 Apr 2020 11:56:31 +0800
Subject: [PATCH] 提升菜单栏体验,升级公共查询表单组件

---
 src/components/common/MenuView/index.jsx         |   31 +++--
 src/components/common/SearchFormView/index.jsx   |  200 +++++++++++++++++---------------
 src/pages/index/System.jsx                       |    1 
 src/pages/index/workbench.jsx                    |    1 
 src/pages/menu/menu.jsx                          |    2 
 src/menu/menu.data.js                            |   13 +-
 src/components/common/TopListTableView/index.jsx |    2 
 src/components/common/SearchFormView/index.scss  |    9 +
 src/components/page/DocumentEditPage/index.jsx   |   31 ++--
 src/components/common/TableView/index.jsx        |    2 
 src/components/page/index/rulesList/index.jsx    |    9 -
 11 files changed, 158 insertions(+), 143 deletions(-)

diff --git a/src/components/common/MenuView/index.jsx b/src/components/common/MenuView/index.jsx
index 12f1a65..19202f3 100644
--- a/src/components/common/MenuView/index.jsx
+++ b/src/components/common/MenuView/index.jsx
@@ -6,7 +6,7 @@
 
 /** 菜单渲染组件 */
 
-import React from 'react';
+import React, { useState } from 'react';
 import { Layout, Menu, Icon, Badge } from 'antd';
 import { RouteComponentProps } from 'react-router-dom';
 import './index.scss';
@@ -20,7 +20,7 @@
 }) {
     if (!menudata.length) return null;
 
-    const { path, name } = find(menudata, pathname);
+    const { path, name, parentKey } = find(menudata, pathname);
 
     if (name) {
         const index = name.indexOf(' - ');
@@ -33,22 +33,29 @@
         document.title = `恒巨信息`;
     }
 
-    const defaultOpenKeys = menudata.map(({ name }) => name);
+    const defaultOpenKeys = parentKey ? [parentKey] : [];//默认展开的菜单key
+    const [openKeys, setOpenKeys] = useState(defaultOpenKeys);//设置打开菜单的key
+
+    function onOpenChange(key) {
+        let allKeys = menudata.map((d) => d.key);
+        const latestOpenKey = key.find(key => openKeys.indexOf(key) === -1);
+        if (allKeys.indexOf(latestOpenKey) === -1) {
+            setOpenKeys(key)
+        } else {
+            setOpenKeys(latestOpenKey ? [latestOpenKey] : [])
+        }
+    };
 
     return (
-        // <Layout.Sider
-        //   // width={200}
-        //   theme="light"
-        //   style={{ backgroundColor: 'white' }}>
         <Menu
             key={defaultOpenKeys.join('-')}
             style={{ height: '100%', borderRight: 0 }}
-            defaultOpenKeys={defaultOpenKeys}
+            openKeys={openKeys}
             selectedKeys={path ? [path] : []}
+            onOpenChange={onOpenChange}
             mode="inline">
             {render(menudata, history)}
         </Menu>
-        // </Layout.Sider>
     );
 }
 
@@ -56,7 +63,7 @@
     return data.map(({ name, icon, path, count, children, type }, index) =>
         children && children.length ? (
             <SubMenu
-                key={name}
+                key={path}
                 title={
                     <span>
                         <Icon type={icon || 'setting'} />
@@ -84,7 +91,7 @@
 };
 
 const find = (data, full, pathname = { path: '', name: '' }) =>
-    data.reduce((pn, { path, name, children }) => {
+    data.reduce((pn, { path, name, parentKey, children }) => {
         if (children && children.length) {
             return find(children, full, pn);
         }
@@ -92,7 +99,7 @@
             path.length > pn.path.length &&
             full.replace(/\/\d+/g, '').startsWith(path.replace(/\/\d+/g, ''))
         ) {
-            return { path, name };
+            return { path, name, parentKey };
         }
         return pn;
     }, pathname);
diff --git a/src/components/common/SearchFormView/index.jsx b/src/components/common/SearchFormView/index.jsx
index dbe59c9..f187baa 100644
--- a/src/components/common/SearchFormView/index.jsx
+++ b/src/components/common/SearchFormView/index.jsx
@@ -6,13 +6,37 @@
 
 /** 表单搜索组件 */
 import React, { ReactNode, ReactEventHandler, Component } from 'react';
-import { Row, Col, Form, Input, Button, Select, DatePicker, Divider } from 'antd';
+import { Row, Col, Form, Input, Button, Select, DatePicker, Divider, Card } from 'antd';
 import moment from 'moment';
 
 const { RangePicker } = DatePicker;
 import './index.scss';
 
-
+// data参数:数据模板
+// [
+//     { type: 'input', name: '姓名', label: '姓名', key: 'name' },  //inpu类型
+//     {
+//         type: 'select',
+//         name: '所属部门',
+//         label: '所属部门',
+//         key: 'deptId',
+//         desc: 'deptName',
+//         list: [{ name: '1', value: '选项1' }, { name: '2', value: '选项2' }],
+//     }, //select 类型
+//     {
+//         type: 'rangePicker',
+//         label: '时间范围',
+//         name: JSON.stringify(['开始时间', '结束时间']),
+//         key: JSON.stringify(['startTime', 'endTime']),
+//         keylistName: 'rangeTimelist',
+//     },  //时间范围选择器
+//     {
+//         type: 'datePicker',
+//         label: '指定时间',
+//         name: '指定日期',
+//         key: 'date'
+//     } //时间选择器
+// ]
 export default class SearchFormView extends Component {
     constructor(props) {
         super(props);
@@ -27,7 +51,6 @@
     componentDidMount() { }
 
     onClick = type => {
-        const { pathName } = this.props;
         let data;
         switch (type) {
             case 'search':
@@ -83,121 +106,112 @@
         });
     };
 
-
     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}>
+                    <Card bordered={false}>
 
                         {data.length > 0 &&
                             data.map((item, idx) => (
-                                <React.Fragment key={idx}>
+                                <Card.Grid key={idx} style={{ width: '20%' }} hoverable={false} >
                                     {(() => {
                                         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>
+                                                    <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>
                                                 );
                                             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>
+                                                    <Form.Item label={item.label}>
+                                                        <Input
+                                                            size="small"
+                                                            placeholder={item.name}
+                                                            name={item.key}
+                                                            value={formData[item.key]}
+                                                            onChange={this.handleInput}
+                                                        />
+                                                    </Form.Item>
                                                 );
                                             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>
+                                                    <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>
                                                 );
                                             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>
+                                                    <Form.Item label={item.label}>
+                                                        <RangePicker
+                                                            style={{ width: '100%'}}
+                                                            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>
                                                 );
-                                            case 'br':
-                                                return (
-                                                    <Col span={24} style={{ marginBottom: '10px' }} />
-                                                );
+                                            // case 'br':
+                                            //     return (
+                                            //         <Col span={24} style={{ marginBottom: '10px' }} />
+                                            //     );
                                             default:
                                                 return null;
                                         }
                                     })()}
-                                </React.Fragment>
+                                </Card.Grid>
                             ))}
-
-                        <Col>
-                            <Row type="flex" gutter={20} align="middle" align="middle">
+                        <Card.Grid style={{ width: '20%' }}>
+                            <Row type="flex" gutter={20} align="middle" align="middle" style={{ height: 40 }}>
                                 <Col>
                                     <Button
                                         size="small"
@@ -224,11 +238,9 @@
                                     </Col>
                                 }
                             </Row>
-                        </Col>
-                    </Row>
-
+                        </Card.Grid>
+                    </Card>
                 </div>
-
                 <Divider />
             </div>
         )
diff --git a/src/components/common/SearchFormView/index.scss b/src/components/common/SearchFormView/index.scss
index 5f0238f..eadaa37 100644
--- a/src/components/common/SearchFormView/index.scss
+++ b/src/components/common/SearchFormView/index.scss
@@ -7,9 +7,12 @@
 /** Happy Coding */
 .search-form-view {
   &-main {
-    &-margin-bottom{
-    margin-bottom: 18px;
-
+    & .ant-card-grid {
+      padding: 10px 20px 0 10px;
+      box-shadow: none;
+    }
+    &-margin-bottom {
+      margin-bottom: 18px;
     }
     .ant-form-item {
       margin-bottom: 0 !important;
diff --git a/src/components/common/TableView/index.jsx b/src/components/common/TableView/index.jsx
index 643dcdd..41d88c8 100644
--- a/src/components/common/TableView/index.jsx
+++ b/src/components/common/TableView/index.jsx
@@ -24,8 +24,6 @@
         };
     }
 
-    componentWillMount() { }
-
     componentDidMount() {
         let { page, size } = this.props.formData;
         this.loadData(page, size);
diff --git a/src/components/common/TopListTableView/index.jsx b/src/components/common/TopListTableView/index.jsx
index d359b2b..595b4a9 100644
--- a/src/components/common/TopListTableView/index.jsx
+++ b/src/components/common/TopListTableView/index.jsx
@@ -46,7 +46,7 @@
         <span className="top-list-table-view-main-table-title-fuc">查看</span>
       </div>
       <Table
-        dataSource={dataSource || []}
+        dataSource={dataSource ? dataSource.map((a, idx) => ({ ...a, key: idx })) : []}
         columns={columns}
         size="small"
         bordered={false}
diff --git a/src/components/page/DocumentEditPage/index.jsx b/src/components/page/DocumentEditPage/index.jsx
index 65f4acf..4ec5c62 100644
--- a/src/components/page/DocumentEditPage/index.jsx
+++ b/src/components/page/DocumentEditPage/index.jsx
@@ -42,8 +42,6 @@
 
   loadData = () => {
     const { id } = this.props.match.params;
-    console.log(this.props)
-    console.log(id)
     let _this = this;
     _this.setState({
       loading: true,
@@ -55,15 +53,16 @@
         id: id || 'new'
       }
     }).then(res => {
-      console.log(res)
-      _this.setState({
-        saveData: {
-          ...res,
-          documentType: res.documentType || 'DT00002'
-        },
-        loading: false,
-        fileList: res.attachmentList && res.attachmentList.map((a) => ({ ...a, key: a.id, uid: a.id, name: a.fileName + '.' + a.suffix, })) || []
-      });
+      if (res) {
+        _this.setState({
+          saveData: {
+            ...res,
+            documentType: res.documentType || 'DT00002'
+          },
+          loading: false,
+          fileList: res.attachmentList && res.attachmentList.map((a) => ({ ...a, key: a.id, uid: a.id, name: a.fileName + '.' + a.suffix, })) || []
+        });
+      }
     });
   }
 
@@ -79,7 +78,6 @@
   submit = () => {
     let { saveData, editorContent } = this.state;
     // editorContent = emoveTAG(editorContent);
-    console.log(saveData)
     if (!saveData.documentTitle) {
       return message.warning(this.switchWordByType(saveData.documentType).title + '标题不能为空');
     }
@@ -98,12 +96,13 @@
         documentContent: editorContent
       }
     }).then(res => {
-      console.log(res)
       _this.setState({
         iconLoading: false,
       });
-      message.success("提交成功!");
-      this.props.history.push(this.switchWordByType(saveData.documentType).href);
+      if (res) {
+        message.success("提交成功!");
+        this.props.history.push(this.switchWordByType(saveData.documentType).href);
+      }
     });
   }
 
@@ -135,7 +134,7 @@
   }
 
   handleChange = (editorState) => {
-    console.log(editorState, editorState.toHTML())
+    console.log('htnl', editorState.toHTML())
     this.setState({ editorState, editorContent: editorState.toHTML() })
   }
 
diff --git a/src/components/page/index/rulesList/index.jsx b/src/components/page/index/rulesList/index.jsx
index 9802320..ee82d16 100644
--- a/src/components/page/index/rulesList/index.jsx
+++ b/src/components/page/index/rulesList/index.jsx
@@ -37,7 +37,6 @@
   componentDidMount() { }
 
   link = (id) => {
-    console.log(id)
     this.props.history.push({ pathname: "/document/detail/" + id });
   }
 
@@ -47,9 +46,9 @@
 
   renderColumns = () => {
     return [
-      { title: '标题', dataIndex: 'documentTitle' },
+      { title: '标题', dataIndex: 'documentTitle', ellipsis: true },
       {
-        title: '通知内容', dataIndex: 'documentContent', width: '40%', ellipsis: true, render: (cur, item) => {
+        title: '通知内容', dataIndex: 'documentContent', ellipsis: true, render: (cur, item) => {
           return cur ? this.emoveTAG(cur) : '无'
         }
       },
@@ -60,14 +59,12 @@
   }
 
   setFormData = data => {
-    console.log('form', data);
     this.setState({
       formData: data,
     });
   }
 
   onTabsChange = (key) => {
-    console.log(key);
   }
 
 
@@ -94,7 +91,7 @@
         >
           {
             documentId &&
-            <FindAlreadyReadOrNotView key={documentId} documentId={documentId}/>
+            <FindAlreadyReadOrNotView key={documentId} documentId={documentId} />
           }
 
         </Modal>
diff --git a/src/menu/menu.data.js b/src/menu/menu.data.js
index ebd45cf..18f6622 100644
--- a/src/menu/menu.data.js
+++ b/src/menu/menu.data.js
@@ -5,17 +5,18 @@
  */
 const menus = [
   {
-    key: 'index',
+    key: '/',
     name: '首页',
-    path: '/app',
+    path: '/',
     icon: 'home',
-    permKey: 'index',
+    permKey: '/index',
     children: [
       {
-        key: 'index',
+        key: '/index',
         name: '工作台',
         path: '/index',
         permKey: '/index',
+        parentKey: '/',
         children: []
       },
       {
@@ -53,7 +54,7 @@
     ]
   },
   {
-    key: 'document',
+    key: '/document',
     name: '文档管理',
     path: '/document',
     icon: 'file',
@@ -69,7 +70,7 @@
     ]
   },
   {
-    key: 'logManage',
+    key: '/logManage',
     name: '系统管理',
     path: '/logManage',
     icon: 'setting',
diff --git a/src/pages/index/System.jsx b/src/pages/index/System.jsx
index 138f5b0..0dcf598 100644
--- a/src/pages/index/System.jsx
+++ b/src/pages/index/System.jsx
@@ -27,7 +27,6 @@
   render() {
     return (
       <div className="System-main">
-        <BreadcrumbView data={[{ name: '规章制度' }]} />
         <RulesList {...this.props} />
       </div>
     )
diff --git a/src/pages/index/workbench.jsx b/src/pages/index/workbench.jsx
index a59e6c4..aa2fa7d 100644
--- a/src/pages/index/workbench.jsx
+++ b/src/pages/index/workbench.jsx
@@ -27,7 +27,6 @@
   render() {
     return (
       <div className="workbench-page-main flex-box-column">
-        <BreadcrumbView data={[{ name: '工作台' }]} />
         <div className="flex-1">
           <WorkbenchPage {...this.props}/>
         </div>
diff --git a/src/pages/menu/menu.jsx b/src/pages/menu/menu.jsx
index 83d581b..54f24d3 100644
--- a/src/pages/menu/menu.jsx
+++ b/src/pages/menu/menu.jsx
@@ -49,7 +49,7 @@
         return p
       }
     }, []);
-    console.log(getMenuListByPermission(menus, permList) )
+    // console.log(getMenuListByPermission(menus, permList) )
     this.setState({ data: getMenuListByPermission(menus, permList) });
   }
   componentDidMount() { }

--
Gitblit v1.8.0