Browse Source

部分样式细节调整

zhuth 6 years ago
parent
commit
2413f983b1

+ 3 - 0
src/components/admin/admin.jsx

@@ -1,3 +1,6 @@
+/**
+ * 用户管理
+ */
 import React from 'react'
 import { Tabs } from 'antd'
 import UserManagement from './userManagement'

+ 3 - 0
src/components/authority/index.jsx

@@ -1,3 +1,6 @@
+/**
+ * 权限管理
+ */
 import React from 'react'
 import { Tabs, Layout, Input, Menu, Table, Checkbox } from 'antd'
 import { connect } from 'dva'

+ 6 - 2
src/components/chart/list.jsx

@@ -349,7 +349,7 @@ class ChartList extends React.Component {
                     <Card bordered={false} title={
                         <Row className='tools' type='flex' justify='space-between'>
                             <Col style={{ display: 'flex', width: 'calc(100% - 324px)', overflow: 'hidden' }}>
-                                <Checkbox style={{ marginTop: '4px' }} value={noGroup} onChange={(e) => {
+                                <Checkbox style={{ marginTop: '4px' }} checked={noGroup} onChange={(e) => {
                                     this.setState({noGroup: e.target.checked})
                                 }}>未分组</Checkbox>
                                 <Icon type="bars" onClick={() => {
@@ -404,6 +404,8 @@ class ChartList extends React.Component {
                     }}
                     okHandler={(aGroups, mGroups, dGroups) => {
                         dispatch({ type: 'chart/remoteSetGroups', aGroups, mGroups, dGroups });
+                        dispatch({ type: 'chart/fetchList', mandatory: true });
+                        dispatch({ type: 'chart/setCurrentGroup', group: null });
                     }}
                 />}
                 {visibleDistributeBox && <DistributeBox visibleDistributeBox={visibleDistributeBox} selectedRecord={this.state.selectedRecord} hideBox={() => {
@@ -432,7 +434,9 @@ class ChartList extends React.Component {
                         })
                     }}
                     okHandler={() => {
-                        dispatch({ type: 'chart/remoteDelete', code: this.state.selectedRecord.code })
+                        dispatch({ type: 'chart/remoteDelete', code: this.state.selectedRecord.code }).then(() => {
+                            dispatch({ type: 'chart/fetchList', mandatory: true });
+                        })
                 }} />}
             </Layout>
         )

+ 2 - 1
src/components/common/emptyContent/index.jsx

@@ -1,7 +1,8 @@
 import React from 'react'
+import './index.less'
 
 const Content = () => {
-    return (<div className="ant-empty ant-empty-normal"><div className="ant-empty-image"><img alt="暂无数据" src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAxKSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgIDxlbGxpcHNlIGZpbGw9IiNGNUY1RjUiIGN4PSIzMiIgY3k9IjMzIiByeD0iMzIiIHJ5PSI3Ii8+CiAgICA8ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0iI0Q5RDlEOSI+CiAgICAgIDxwYXRoIGQ9Ik01NSAxMi43Nkw0NC44NTQgMS4yNThDNDQuMzY3LjQ3NCA0My42NTYgMCA0Mi45MDcgMEgyMS4wOTNjLS43NDkgMC0xLjQ2LjQ3NC0xLjk0NyAxLjI1N0w5IDEyLjc2MVYyMmg0NnYtOS4yNHoiLz4KICAgICAgPHBhdGggZD0iTTQxLjYxMyAxNS45MzFjMC0xLjYwNS45OTQtMi45MyAyLjIyNy0yLjkzMUg1NXYxOC4xMzdDNTUgMzMuMjYgNTMuNjggMzUgNTIuMDUgMzVoLTQwLjFDMTAuMzIgMzUgOSAzMy4yNTkgOSAzMS4xMzdWMTNoMTEuMTZjMS4yMzMgMCAyLjIyNyAxLjMyMyAyLjIyNyAyLjkyOHYuMDIyYzAgMS42MDUgMS4wMDUgMi45MDEgMi4yMzcgMi45MDFoMTQuNzUyYzEuMjMyIDAgMi4yMzctMS4zMDggMi4yMzctMi45MTN2LS4wMDd6IiBmaWxsPSIjRkFGQUZBIi8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K"/></div><p className="ant-empty-description" style={{ color: '#A2ACBA' }}>暂无数据</p></div>) 
+    return (<div className="ant-empty ant-empty-normal empty-content"><div className="ant-empty-image"><img alt="暂无数据" src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAxKSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgIDxlbGxpcHNlIGZpbGw9IiNGNUY1RjUiIGN4PSIzMiIgY3k9IjMzIiByeD0iMzIiIHJ5PSI3Ii8+CiAgICA8ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0iI0Q5RDlEOSI+CiAgICAgIDxwYXRoIGQ9Ik01NSAxMi43Nkw0NC44NTQgMS4yNThDNDQuMzY3LjQ3NCA0My42NTYgMCA0Mi45MDcgMEgyMS4wOTNjLS43NDkgMC0xLjQ2LjQ3NC0xLjk0NyAxLjI1N0w5IDEyLjc2MVYyMmg0NnYtOS4yNHoiLz4KICAgICAgPHBhdGggZD0iTTQxLjYxMyAxNS45MzFjMC0xLjYwNS45OTQtMi45MyAyLjIyNy0yLjkzMUg1NXYxOC4xMzdDNTUgMzMuMjYgNTMuNjggMzUgNTIuMDUgMzVoLTQwLjFDMTAuMzIgMzUgOSAzMy4yNTkgOSAzMS4xMzdWMTNoMTEuMTZjMS4yMzMgMCAyLjIyNyAxLjMyMyAyLjIyNyAyLjkyOHYuMDIyYzAgMS42MDUgMS4wMDUgMi45MDEgMi4yMzcgMi45MDFoMTQuNzUyYzEuMjMyIDAgMi4yMzctMS4zMDggMi4yMzctMi45MTN2LS4wMDd6IiBmaWxsPSIjRkFGQUZBIi8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K"/></div><p className="ant-empty-description" style={{ color: '#A2ACBA' }}>暂无数据</p></div>) 
 }
 
 export default Content

+ 7 - 0
src/components/common/emptyContent/index.less

@@ -0,0 +1,7 @@
+.empty-content {
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    margin: 0;
+}

+ 4 - 1
src/components/common/groupManageMentBox/box.jsx

@@ -201,6 +201,9 @@ class GroupBox extends React.Component {
             groupData,
             expandedKeys: pGroups.concat([{ code: '-1' }]).map(g => g.code),
             aGroups: aGroups.concat([g]),
+            editingKey: g.code,
+        }, () => {
+            this['inputRef-' + g.code].focus();
         });
     }
 
@@ -295,7 +298,7 @@ class GroupBox extends React.Component {
                 <Col span={6}>
                     <Button disabled={selectedGroup && selectedGroup.code && selectedGroup.code.startsWith('new-')} style={{ marginLeft: '8px' }} onClick={() => {
                         this.addGroup(selectedGroup);
-                    }}><Icon type='plus'/>添加</Button>
+                    }}>添加</Button>
                 </Col>
             </Row>
             <Row className='tree-container'>

+ 1 - 1
src/components/common/listFilter/index.less

@@ -5,7 +5,7 @@
             border-radius: @border-radius-base 0 0 @border-radius-base;
         }
     }
-    .ant-select:last-child .ant-select-selection.ant-select-selection--single, .ant-input-search.ant-input-affix-wrapper>input, .ant-calendar-picker-input.ant-input {
+    .ant-select:last-child .ant-select-selection.ant-select-selection--single, .ant-input-search.ant-input-affix-wrapper>input, .ant-calendar-picker-input.ant-input, .ant-input {
         border-radius: 0 @border-radius-base @border-radius-base 0;
     }
 }

+ 28 - 2
src/components/dashboard/layout.jsx

@@ -10,7 +10,7 @@ class DashboardLayout extends React.Component {
 
     render() {
         const { loading, dashboard, dispatch } = this.props;
-        const { currentMenu } = dashboard;
+        const { currentMenu, currentMenuParents } = dashboard;
         return <Layout
             className='layout-dashboard'
         >
@@ -40,7 +40,7 @@ class DashboardLayout extends React.Component {
                     onExpand={menus => {
                         dispatch({ type: 'dashboard/setFields', fields: [
                             { name: 'menuExpandedKeys', value: menus.map(m => m.code) },
-                            { name: 'menuAutoExpandParent', value: false },
+                            { name: 'menuAutoExpandParent', value: true },
                         ] });
                     }}
                     onSelect={(selectedMenu, parents) => {
@@ -64,6 +64,32 @@ class DashboardLayout extends React.Component {
                             { name: 'menuAutoExpandParent', value: true },
                         ] });
                     }}
+                    onMenuModify={(menu) => {
+                        if(menu.code === currentMenu.code) {
+                            let newParents = currentMenuParents.map(m => {
+                                if(m.code === menu.code) {
+                                    return { ...m, ...menu };
+                                }else {
+                                    return m
+                                }
+                            });
+                            dispatch({ type: 'dashboard/setFields', fields: [
+                                { name: 'currentMenu', value: menu },
+                                { name: 'currentMenuParents', value: newParents },
+                            ] })
+                        }
+                    }}
+                    onMenuDelete={(menu) => {
+                        if(menu.code === currentMenu.code) {
+                            let currentMenuParents_ = [ ...currentMenuParents ];
+                            currentMenuParents_.splice(0, 1);
+                            dispatch({ type: 'dashboard/setFields', fields: [
+                                { name: 'currentMenu', value: currentMenuParents_[0] },
+                                { name: 'currentMenuParents', value: currentMenuParents_ },
+                                { name: 'menuSelectedKeys', value: [currentMenuParents_[0].code] },
+                            ] })
+                        }
+                    }}
                 />
                 <div style={{ display: loading ? 'block' : 'none', position: 'absolute', height: '100%', width: '100%', top: '0px', zIndex: '4', background: 'rgba(51,51,51,.1)' }}>
                     <Spin style={{ display: 'inline-block', position: 'absolute', top: '50%', left: '50%', margin: '-10px' }} indicator={<Icon type="loading" style={{ fontSize: 24 }} spin />}/>

+ 30 - 17
src/components/dashboard/menu.jsx

@@ -88,7 +88,7 @@ class DashboardMenu extends React.Component {
     }
 
     generateMenu(tree, regLabel) {
-        const { dispatch, onlyMenu, searchMenu, editable, extraTools } = this.props;
+        const { dispatch, onlyMenu, searchMenu, editable, extraTools, onMenuModify } = this.props;
         const { editingKey } = this.state;
         let ftree = this.cloneTree(tree);
         ftree = this.reduceTree(ftree, regLabel)
@@ -139,14 +139,22 @@ class DashboardMenu extends React.Component {
                         onBlur={(e) => {
                             let val = e.target.value;
                             if(!!(val+'').trim() && val !== t.name) {
-                                dispatch({ type: 'dashboard/remoteModifyMenu', menu: { ...t, name: val } });
+                                dispatch({ type: 'dashboard/remoteModifyMenu', menu: { ...t, name: val } }).then((menu) => {
+                                    if(typeof onMenuModify === 'function') {
+                                        onMenuModify(menu);
+                                    }
+                                });
                             }
                             this.setState({ editingKey: false });
                         }}
                         onPressEnter={(e) => {
                             let val = e.target.value;
                             if(!!(val+'').trim() && val !== t.name) {
-                                dispatch({ type: 'dashboard/remoteModifyMenu', menu: { ...t, name: val } });
+                                dispatch({ type: 'dashboard/remoteModifyMenu', menu: { ...t, name: val } }).then((menu) => {
+                                    if(typeof onMenuModify === 'function') {
+                                        onMenuModify(menu);
+                                    }
+                                });
                             }
                             this.setState({ editingKey: false });
                         }}
@@ -232,23 +240,24 @@ class DashboardMenu extends React.Component {
     }
 
     onAddClick = (pmenu) => {
-        const { dashboard, dispatch, onExpand } = this.props;
-        const { menuList, menuExpandedKeys } = dashboard;
+        const { dashboard, dispatch } = this.props;
+        const { menuExpandedKeys } = dashboard;
         const menu = {
             index: pmenu.childrenCount,
             name: '新目录',
             pcode: pmenu.code
         }
-        dispatch({ type: 'dashboard/remoteAddMenu', menu }).then(res => {
-            if(res && typeof onExpand === 'function') {
-                let expandedMenus = [];
-                [{ code: '-1', name: '报表目录' }].concat(menuList).forEach(m => {
-                    if(menuExpandedKeys.indexOf(m.code) > -1) {
-                        expandedMenus.push(m); 
-                    }
-                });
-                expandedMenus.push(pmenu);
-                onExpand(expandedMenus);
+        dispatch({ type: 'dashboard/remoteAddMenu', menu }).then(menuCode => {
+            if(menuCode) {
+                dispatch({ type: 'dashboard/remoteMenuTree', mandatory: true }).then(menuData => {
+                    this.onExpand(menuExpandedKeys.concat([menuCode]));
+                    this.onSelect([menuCode]);
+                    this.setState({
+                        editingKey: menuCode
+                    }, () => {
+                        this['inputRef-' + menuCode].focus();
+                    })
+                })
             }
         });
     }
@@ -264,7 +273,7 @@ class DashboardMenu extends React.Component {
     }
 
     render() {
-        const { dashboard, dispatch, hideHeader, editable, model, onSearch: propsOnSearch } = this.props;
+        const { dashboard, dispatch, hideHeader, editable, model, onSearch: propsOnSearch, onMenuDelete } = this.props;
         const { visibleDeleteBox, selectedMenu } = this.state;
         const { menuTree } = dashboard;
         const { menuFilterLabel, menuExpandedKeys, menuSelectedKeys, menuAutoExpandParent } = model;
@@ -342,7 +351,11 @@ class DashboardMenu extends React.Component {
                         })
                     }}
                     okHandler={() => {
-                        dispatch({ type: 'dashboard/remoteDeleteMenu', menu: selectedMenu });
+                        dispatch({ type: 'dashboard/remoteDeleteMenu', menu: selectedMenu }).then(() => {
+                            if(typeof onMenuDelete === 'function') {
+                                onMenuDelete(selectedMenu);
+                            }
+                        });
                     }} 
                 />}
             </div>

+ 1 - 1
src/components/dataConnect/list.jsx

@@ -238,7 +238,7 @@ class DataConnect extends React.Component {
         return (
             <Layout className='layout-dataconnect'>
                 <Content>
-                    <Card title={
+                    <Card bordered={false} title={
                         <Row className='tools' type='flex' justify='space-between'>
                             <Col style={{ display: 'flex' }}>
                             </Col>

+ 6 - 4
src/components/dataSource/list.jsx

@@ -383,7 +383,7 @@ class DataSource extends React.Component {
                     <Card bordered={false} className='datasource-body' title={
                         <Row className='datasource-tools' type='flex' justify='space-between'>
                             <Col style={{ display: 'flex', width: 'calc(100% - 324px)', overflow: 'hidden' }}>
-                                <Checkbox style={{ marginTop: '4px' }} value={noGroup} onChange={(e) => {
+                                <Checkbox style={{ marginTop: '4px' }} checked={noGroup} onChange={(e) => {
                                     this.setState({noGroup: e.target.checked})
                                 }}>未分组</Checkbox>
                                 <Icon type="bars" onClick={() => {
@@ -414,8 +414,8 @@ class DataSource extends React.Component {
                                             dispatch({ type: 'dataSource/setNewModelField', name: 'type', value: type });
                                             dispatch({type: 'main/redirect', path: {pathname: '/workshop/datasource/'+ type +'/create/base'}});
                                         }}>
-                                            { (currentUser.role === 'admin' || currentUser.role === 'superAdmin') && <Menu.Item key='database'>来自数据库</Menu.Item>}
-                                            <Menu.Item disabled key='file'>来自文件</Menu.Item>
+                                            { (currentUser.role === 'admin' || currentUser.role === 'superAdmin') && <Menu.Item key='database'>选择数据链接</Menu.Item>}
+                                            <Menu.Item disabled key='file'>上传文件</Menu.Item>
                                         </Menu>
                                     )} trigger={['click']}>
                                         <Button>
@@ -454,6 +454,8 @@ class DataSource extends React.Component {
                             }}
                             okHandler={(aGroups, mGroups, dGroups) => {
                                 dispatch({ type: 'dataSource/remoteSetGroups', aGroups, mGroups, dGroups });
+                                dispatch({ type: 'dataSource/fetchList', mandatory: true });
+                                dispatch({ type: 'dataSource/setCurrentGroup', group: null });
                             }}
                         />}
                         {visibleTransferBox && <TransferBox
@@ -486,7 +488,7 @@ class DataSource extends React.Component {
                             }}
                             okHandler={() =>{
                                 dispatch({ type: 'dataSource/remoteDelete', code: selectedRecord.code }).then(() => {
-                                    dispatch({ type: 'chart/fetchList', mandatory: true });
+                                    dispatch({ type: 'dataSource/fetchList', mandatory: true });
                                 })
                             }} 
                         />}

+ 7 - 7
src/components/dataSourceDetail/dataConnectBox.jsx

@@ -119,7 +119,7 @@ class DataConnectBox extends React.Component {
         return (
             <Modal
                 className='dataconnect-box'
-                title={`${operation === 'create'?'新建':(operation === 'modify' ? '修改' : '查看')}数据链接`}
+                title={`${operation === 'create'?'添加':(operation === 'modify' ? '修改' : '查看')}数据链接`}
                 visible={dataConnect.newOne.visibleBox}
                 onCancel={() => { this.hideBox() }}
                 maskClosable={false}
@@ -200,10 +200,10 @@ class DataConnectBox extends React.Component {
                         </Select>
                     </FormItem>
                     <Row>
-                        <Col span={19}>
+                        <Col span={16}>
                             <FormItem className='required' label='数据库地址' {...{
-                                labelCol: { span: 5 },
-                                wrapperCol: { span: 19 }
+                                labelCol: { span: 6 },
+                                wrapperCol: { span: 18 }
                             }}
                             validateStatus={validInfo.address.status}
                             help={validInfo.address.help}
@@ -226,10 +226,10 @@ class DataConnectBox extends React.Component {
                                 />
                             </FormItem>
                         </Col>
-                        <Col span={5}>
+                        <Col span={8}>
                             <FormItem className='input-port required' label='端口' {...{
-                                labelCol: { span: 12 },
-                                wrapperCol: { span: 12 }
+                                labelCol: { span: 8 },
+                                wrapperCol: { span: 16 }
                             }}
                             validateStatus={validInfo.port.status}
                             help={validInfo.port.help}

+ 3 - 2
src/models/chart.js

@@ -13,7 +13,7 @@ export default {
             groupList: [],
             currentGroup: null,
             filterItems: [ // 可选过滤字段
-                { name: 'name', label: '图表名称', type: 'string' },
+                { name: 'name', label: '名称', type: 'string' },
                 // { name: 'description', label: '备注', type: 'string' },
                 { name: 'creatorName', label: '创建人', type: 'string' },
                 { name: 'createTime', label: '创建时间', type: 'date' },
@@ -60,7 +60,7 @@ export default {
                     });
                 } }
             ],
-            filterItem: { name: 'name', label: '图表名称', type: 'string' }, // 已选过滤字段
+            filterItem: { name: 'name', label: '名称', type: 'string' }, // 已选过滤字段
             listScrollTop: 0, // 记录列表界面滚动条位置
         },
     },
@@ -299,6 +299,7 @@ export default {
                     }
                     yield put({ type: 'chartDesigner/silentChangeFields', fields: fields });
                     yield put({ type: 'chartDesigner/silentChangeDataSource', dataSource: data.baseConfig.dataSource });
+                    console.log('chart-model-componentDidMount');
                     yield put({ type: 'chartDesigner/fetchChartData' });
                 }else {
                     message.error('解析图表错误: ' + (res.err || res.data.msg));

+ 3 - 6
src/models/dashboard.js

@@ -363,11 +363,8 @@ export default {
                     }
                 })
                 if(!res.err && res.data.code > 0) {
-                    yield put({ type: 'remoteMenuTree', mandatory: true });
-                    yield put({ type: 'setFields', fields: [
-                        { name: 'menuSelectedKeys', value: [] },
-                    ] });
-                    return true;
+                    let menuCode = res.data.data + '';
+                    return menuCode;
                 }else {
                     message.error('添加报表目录失败: ' + (res.err || res.data.msg));
                     return false;
@@ -389,7 +386,7 @@ export default {
             });
             if(!res.err && res.data.code > 0) {
                 yield put({ type: 'remoteMenuTree', mandatory: true });
-                return true;
+                return menu;
             }else {
                 message.error('修改报表目录失败: ' + (res.err || res.data.msg));
                 return false;

+ 8 - 2
src/models/dashboardDesigner.js

@@ -340,7 +340,10 @@ export default {
             const { items } = dashboardDesigner;
 
             for(let i = 0; i < items.length; i++) {
-                yield put({ type:'fetchChartData', item: items[i], mandatory: true });
+                let item = items[i];
+                if(item.viewType === 'chart') {
+                    yield put({ type:'fetchChartData', item: items[i], mandatory: true });
+                }
             }
         },
         *remoteGetColumns(action, { call, put, select }) {
@@ -442,7 +445,7 @@ export default {
             const { chartCode } = item;
             
             if(!mandatory && !!item.chartOption) {
-                return;
+                return false;
             }
 
             try {
@@ -480,12 +483,14 @@ export default {
                         { name: 'chartType', value: chartType },
                         { name: 'chartOption', value: chartOption }
                     ] });
+                    return { chartType, chartOption };
                 }else {
                     yield put({ type: 'setItemFields', code: chartCode, fields: [
                         { name: 'chartType', value: '' },
                         { name: 'chartOption', value: {} }
                     ] });
                     message.error('请求图表展示数据失败: ' + (res.err || res.data.msg));
+                    return false;
                 }
             }catch(e) {
                 yield put({ type: 'setItemFields', code: chartCode, fields: [
@@ -493,6 +498,7 @@ export default {
                     { name: 'chartOption', value: {} }
                 ] });
                 message.error('请求图表展示数据失败: ' + e.message);
+                return false;
             }finally {
                 yield put({ type: 'setItemFetching', code: chartCode, fetching: false });
             }

+ 2 - 2
src/models/dataConnect.js

@@ -11,9 +11,9 @@ export default {
             filterLabel: '',
             validInfo: {},
             filterItems: [ // 可选过滤字段
-                { name: 'name', label: '数据链接名', type: 'string' },
+                { name: 'name', label: '链接名', type: 'string' },
             ],
-            filterItem: { name: 'name', label: '数据链接名', type: 'string' }, // 已选过滤字段
+            filterItem: { name: 'name', label: '链接名', type: 'string' }, // 已选过滤字段
         },
     },
     reducers: {

+ 3 - 1
src/models/dataSource.js

@@ -145,10 +145,12 @@ export default {
             for(let i = 0; i < list.length; i++) {
                 let l = list[i];
                 if(l.code === dataSourceCode) {
-                    l.groupCode = groupCode;
+                    list[i] = { ...l, groupCode }
+                    console.log({ ...l, groupCode });
                     break;
                 }
             }
+            console.log(list);
             return Object.assign({}, state, {list: list});
         },
         reset(state, action) {

+ 46 - 33
src/services/index.js

@@ -1,42 +1,55 @@
 import request from '../utils/request'
+import { hashcode } from '../utils/baseUtils'
 
+// 防抖控制
+function debounce(option) {
+    return new Promise(function (resolve, reject) {
+        let timeKey = hashcode(option);
+        window['key-' + timeKey] && window.clearTimeout(window['key-' + timeKey]);
+        window['key-' + timeKey] = window.setTimeout(() => {
+            return resolve();
+        }, 200);
+    })
+}
 export function fetch(option) {
     let { url, method, body, timeout, allow } = option;
     const token = window.sessionStorage.getItem("token");
-    // 除非特殊许可,Token不存在时不发送请求
-    if(token || allow) {
-        let opt = {
-            method: method || 'POST',
-        };
-        if(method === 'GET') {
-            opt.headers = {
-                token: token,
-                'Content-Type': 'application/json'
-            }
-            if (body) {  
-                let paramsArray = [];  
-                //拼接参数  
-                Object.keys(body).forEach(key => paramsArray.push(key + '=' + body[key]))  
-                if (url.search(/\?/) === -1) {  
-                    url += '?' + paramsArray.join('&')  
-                } else {  
-                    url += '&' + paramsArray.join('&')  
-                }  
-            }
-        }else {
-            opt.headers = {
-                'Content-Type': 'application/json'
-            }
-            opt.body = JSON.stringify(body);
+    return debounce({ url, method, body }).then(() => {
+        // 除非特殊许可,Token不存在时不发送请求
+        if(token || allow) {
+            let opt = {
+                method: method || 'POST',
+            };
+            if(method === 'GET') {
+                opt.headers = {
+                    token: token,
+                    'Content-Type': 'application/json'
+                }
+                if (body) {  
+                    let paramsArray = [];  
+                    //拼接参数  
+                    Object.keys(body).forEach(key => paramsArray.push(key + '=' + body[key]))  
+                    if (url.search(/\?/) === -1) {  
+                        url += '?' + paramsArray.join('&')  
+                    } else {  
+                        url += '&' + paramsArray.join('&')  
+                    }  
+                }
+            }else {
+                opt.headers = {
+                    'Content-Type': 'application/json'
+                }
+                opt.body = JSON.stringify(body);
 
-            if(!!token) {
-                opt.headers.token = token
+                if(!!token) {
+                    opt.headers.token = token
+                }
             }
-        }
 
-        return request(url, opt, timeout);
-    }else {
-        // 使用一个空的Promise阻止后续链式方法的调用
-        return new Promise(() => {});
-    }
+            return request(url, opt, timeout);
+        }else {
+            // 使用一个空的Promise阻止后续链式方法的调用
+            return new Promise(() => {});
+        }
+    })
 }

+ 7 - 1
src/themes/default/base.less

@@ -79,7 +79,7 @@
 .ant-modal-header {
     display: table;
     width: 100%;
-    padding: 42px 24px 0;
+    padding: 42px 36px 0;
     border-bottom: none;
     &:before, &:after {
         content: "";
@@ -94,6 +94,12 @@
         text-align: center;
     }
 }
+.ant-modal-body {
+    padding: 24px 36px;
+}
+.ant-modal-footer {
+    padding: 12px 36px;
+}
 .ant-modal-close {
     position: absolute;
     top: 8px;