Browse Source

update 管理员地区和上级新增和更新完成

yee 7 years ago
parent
commit
a8df736224

+ 14 - 8
js/component/NewDicProvinceList.js

@@ -13472,14 +13472,20 @@ module.exports = {
         });
         let provinceKey = "";
         PList.map(function (item) {
-            if (province == item.id) {
-                provinceKey = item.name;
-            };
-            if (city == item.id) {
-                provinceKey = provinceKey + "/" + item.name;
-            };
-            if (area == item.id) {
-                provinceKey = provinceKey + "/" + item.name;
+            if (province) {
+                if (province == item.id) {
+                    provinceKey = item.name;
+                };
+                if (city == item.id) {
+                    provinceKey = provinceKey + "/" + item.name;
+                };
+                if (area == item.id) {
+                    provinceKey = provinceKey + "/" + item.name;
+                };
+            } else if (!province && city) {
+                if (city == item.id) {
+                    provinceKey = item.name;
+                };
             };
         });
         return provinceKey;

+ 2 - 18
js/component/account/index/normal.jsx

@@ -6,6 +6,7 @@ import $ from 'jquery/src/ajax';
 import '../content.less';
 import './content.less';
 import LeftTab from './leftTab.jsx';
+import Collection from './collection';
 
 import weixin from '../../../../image/weixin-w.png';
 import qq from '../../../../image/qq-w.png';
@@ -106,24 +107,7 @@ const Content = React.createClass({
                         </ul>
                     </div>
                     <div className="index-activity">
-                        <Tabs defaultActiveKey="1" onChange={this.tabChange}>
-                            <TabPane tab="活动" key="1">
-                                <p className="acc-title">即将举办的活动</p>
-                                <ul className="activity-list">
-                                    {
-                                        this.state.activityArr.map(function (item, i) {
-                                            return <li key={i}>
-                                                <span className="list-type">[{item.type}]</span>
-                                                <span className="list-title">{item.title}</span>
-                                                <a href={item.link}>报名</a>
-                                                <span className="list-time">{item.time}</span>
-                                            </li>;
-                                        })
-                                    }
-                                </ul>
-                            </TabPane>
-                            <TabPane tab="其他" key="2">Content of Tab Pane 2</TabPane>
-                        </Tabs>
+                        <Collection />
                     </div>
                 </div>
             </Spin>

+ 9 - 1
js/component/manageCenter/set/content.less

@@ -18,8 +18,10 @@
 
 .ant-modal-body {
     .modal-content {
-        >li {
+        >.list {
             margin-bottom: 20px;
+            float: left;
+            width: 50%;
             >span {
                 margin-right: 20px;
                 display: inline-block;
@@ -31,4 +33,10 @@
             }
         }
     }
+    .modal-text {
+        margin-right: 20px;
+        display: inline-block;
+        width: 60px;
+        text-align: right;
+    }
 }

+ 1 - 1
js/component/manageCenter/set/leftTab.jsx

@@ -40,7 +40,7 @@ const LeftTab = React.createClass({
                 </Menu.Item>
             </Menu>
         );
-    },
+    }
 });
 
 export default LeftTab;

+ 13 - 3
js/component/manageCenter/set/member.jsx

@@ -14,7 +14,7 @@ const Member = React.createClass({
         return $.ajax({
             type: 'get',
             cache: false,
-            url: globalConfig.context + "/api/admin/adminList",
+            url: globalConfig.context + "/api/admin/supervise/adminList",
             dataType: "json",
             data: {
                 pageNo: pageNo || 1,
@@ -35,11 +35,13 @@ const Member = React.createClass({
                         id: thisdata.id,
                         mobile: thisdata.mobile,
                         name: thisdata.name,
-                        position: thisdata.position,
                         email: thisdata.email,
                         createTime: thisdata.createTime,
                         number: thisdata.number,
                         province: thisdata.province,
+                        position: thisdata.position,
+                        superior: thisdata.superior,
+                        superiorId: thisdata.superiorId,
                         createTimeFormattedDate: thisdata.createTimeFormattedDate
                     });
                 };
@@ -119,10 +121,18 @@ const Member = React.createClass({
             dataIndex: 'position',
             key: 'position'
         }, {
+            title: '上级管理员',
+            dataIndex: 'superior',
+            key: 'superior'
+        }, {
             title: '省份',
             dataIndex: 'province',
             key: 'province',
-            render: text => { return getProvince(text) }
+            render: text => {
+                return text ? text.split(',').map((item) => {
+                    return getProvince(item) + ' '
+                }) : []
+            }
         }, {
             title: '邮箱',
             dataIndex: 'email',

+ 269 - 59
js/component/manageCenter/set/modal.jsx

@@ -1,25 +1,130 @@
 import React from 'react';
-import { Modal, Input, Spin, Switch, Select, message, Popconfirm, Button, Cascader } from 'antd';
-import { citySelect } from '../../NewDicProvinceList.js';
+import { Tag, Modal, Input, Spin, Switch, Select, message, Popconfirm, Button, Cascader, Icon } from 'antd';
+import { provinceSelect, provinceList, getProvince } from '../../NewDicProvinceList.js';
 import { companySearch } from '../../tools.js';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
 
-export default class TheModal extends React.Component {
+const ProvinceAdd = React.createClass({
+    getInitialState() {
+        return {
+            cityOption: [],
+            theProvince: [],
+            citys: []
+        };
+    },
+    componentWillReceiveProps(nextProps) {
+        let theArr = [];
+        this.state.theProvince = [nextProps.locations[nextProps.index].province];
+        this.state.citys = nextProps.locations[nextProps.index].city || [];
+        provinceList.map((item) => {
+            if (item.id == nextProps.locations[nextProps.index].province) {
+                item.cityList.map((city) => {
+                    theArr.push({
+                        value: city.id,
+                        label: city.name
+                    })
+                });
+            };
+        });
+        this.state.cityOption = theArr;
+    },
+    render() {
+        return (
+            <div style={{ display: 'inline-block', marginRight: '20px', marginBottom: '10px' }}>
+                <Cascader placeholder="选择省份"
+                    style={{ width: 80, marginRight: '20px', verticalAlign: 'middle' }}
+                    options={provinceSelect()}
+                    value={this.state.theProvince}
+                    showSearch
+                    filterOption={companySearch}
+                    onChange={(e) => {
+                        let bool = true, theArr = [], _me = this;;
+                        this.props.locations.map((item, i) => {
+                            if (item.province == e[0] && this.props.index != i) {
+                                bool = false;
+                            };
+                        });
+                        if (!bool) {
+                            message.warning('请选择一个其他省份');
+                            this.setState({
+                                theProvince: undefined,
+                                citys: undefined,
+                                cityOption: []
+                            });
+                            return;
+                        };
+                        provinceList.map((item) => {
+                            if (item.id == e) {
+                                item.cityList.map((city) => {
+                                    theArr.push({
+                                        value: city.id,
+                                        label: city.name
+                                    })
+                                });
+                            };
+                        });
+                        this.props.getLocations(this.props.index, e[0])
+                        this.setState({
+                            theProvince: e,
+                            citys: undefined,
+                            cityOption: theArr,
+                        })
+                    }} />
+                <Select style={{ verticalAlign: 'middle', width: 584 }}
+                    placeholder="选择城市" notFoundContent="请先选择一个省份" multiple={true}
+                    showSearch
+                    filterOption={companySearch}
+                    value={this.state.citys}
+                    onChange={(e) => { this.setState({ citys: e }) }}
+                    onBlur={() => {
+                        this.props.getLocations(this.props.index, this.state.theProvince ? this.state.theProvince[0] : null, this.state.citys)
+                    }}>
+                    {this.state.cityOption.map((item) => {
+                        return <Select.Option key={String(item.value)}>{item.label}</Select.Option>
+                    })}
+                </Select>
+                <Button style={{ verticalAlign: 'middle', marginLeft: '20px' }} type="dashed" size="small"
+                    onClick={() => { this.props.delLocations(this.props.index) }}>
+                    <Icon type="minus" />
+                </Button>
+            </div>
+        );
+    },
+})
+
+const TheModal = React.createClass({
     postData() {
         this.setState({
             loading: true
         });
+        let theArr = [];
+        let theLocations = this.state.locations.concat();
+        theLocations.map((item, i) => {
+            if (item.province) {
+                theArr.push(item);
+            };
+        });
+        theArr.map((item) => {
+            if (item.city && item.city.length) {
+                item.city = item.city.join(',');
+            } else {
+                item.city = null;
+            };
+        });
         $.ajax({
             type: "POST",
-            url: this.state.id ? globalConfig.context + "/api/admin/updateAdmin" : globalConfig.context + "/api/admin/insertAdmin",
+            url: this.state.id ? globalConfig.context + "/api/admin/supervise/updateAdmin" : globalConfig.context + "/api/admin/supervise/insertAdmin",
             data: {
-                'id': this.state.id,
-                'name': this.state.name,
-                'position': this.state.position,
-                'email': this.state.email,
-                'mobile': this.state.mobile,
-                'province': this.state.province,
+                data: JSON.stringify({
+                    'id': this.state.id,
+                    'name': this.state.name,
+                    'email': this.state.email,
+                    'mobile': this.state.mobile,
+                    'position': this.state.position,
+                    'locations': theArr,
+                    'superiorId': this.state.superiorId
+                }),
                 'roles': this.state.bindroles
             }
         }).done((res) => {
@@ -39,26 +144,28 @@ export default class TheModal extends React.Component {
             })
         })
         this.props.postData;
-    }
-    constructor(props) {
-        super(props);
-        this.state = {
+    },
+    getInitialState() {
+        return {
             name: '',
-            position: '',
             email: '',
             mobile: '',
             roles: [],
             visible: false,
             loading: false,
-            bindroles: []
+            bindroles: [],
+            locations: [],
+            cityOption: [],
+            provinceList: [],
+            locationsObj: {}
         }
-    }
+    },
     handleCancel() {
         this.setState({
             visible: false,
         });
         this.props.handleReturn(false, false);
-    }
+    },
     loadInitialData() {
         this.setState({
             loading: true
@@ -72,7 +179,33 @@ export default class TheModal extends React.Component {
                 loading: false
             });
         })
-    }
+    },
+    loadAdminSelectList() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            url: globalConfig.context + '/api/admin/supervise/adminSelectList',
+            cache: false
+        }).done((data) => {
+            if (!data.data) {
+                if (data.error && data.error.length) {
+                    message.warning(data.error[0].message);
+                    return;
+                };
+            };
+            let theArr = [], i;
+            for (i in data.data) {
+                theArr.push(
+                    <Select.Option key={i}>{data.data[i]}</Select.Option>
+                )
+            };
+            this.setState({
+                adminSelectOption: theArr,
+                loading: false
+            });
+        })
+    },
     loadBindRoles(uid) {
         this.setState({
             loading: true
@@ -89,32 +222,64 @@ export default class TheModal extends React.Component {
                 loading: false
             });
         })
-    }
+    },
+    loadLocations(id) {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            url: globalConfig.context + '/api/admin/supervise/adminDetailLocation',
+            cache: false,
+            data: {
+                "id": id
+            }
+        }).done((data) => {
+            if (!data.data) {
+                if (data.error && data.error.length) {
+                    message.warning(data.error[0].message);
+                    return;
+                };
+            };
+            data.data.map((item) => {
+                if (item.city) {
+                    item.city = item.city.split(',');
+                }
+            });
+            this.setState({
+                locations: data.data,
+                loading: false
+            });
+        })
+    },
+    componentWillMount() {
+        this.loadAdminSelectList();
+    },
     componentWillReceiveProps(nextProps) {
         if (nextProps.show && !this.state.roles.length) {
             this.loadInitialData();
         };
         if (!this.state.visible && nextProps.show) {
             this.loadBindRoles(nextProps.data.id);
+            this.loadLocations(nextProps.data.id);
         };
         let nextState = {
             visible: nextProps.show,
             id: nextProps.data ? nextProps.data.id : '',
             name: nextProps.data ? nextProps.data.name : '',
-            position: nextProps.data ? nextProps.data.position : '',
             email: nextProps.data ? nextProps.data.email : '',
             mobile: nextProps.data ? nextProps.data.mobile : '',
-            province: nextProps.data ? nextProps.data.province : ''
+            position: nextProps.data ? nextProps.data.position : '',
+            superiorId: nextProps.data ? nextProps.data.superiorId : '',
         };
         this.setState(nextState)
-    }
+    },
     resetPwd(e) {
         this.setState({
             loading: true
         })
         $.ajax({
             type: 'post',
-            url: globalConfig.context + "/api/admin/resetPwd",
+            url: globalConfig.context + "/api/admin/supervise/resetPwd",
             dataType: "json",
             data: {
                 id: this.state.id
@@ -130,27 +295,26 @@ export default class TheModal extends React.Component {
                 loading: false
             })
         });
-    }
+    },
     getRolesSelection() {
         if (!this.state.id) {
             return <li></li>
         } else if (this.state.id != '1') {
-            return <li>
+            return <li className="list">
                 <span className='modal-text'>角色</span>
                 <Select
                     multiple
                     style={{ width: '60%' }}
                     placeholder="选择用户关联角色"
                     value={this.state.bindroles}
-                    onChange={this.bindRoles.bind(this)}
-                >
+                    onChange={this.bindRoles} >
                     {this.getRolesOptions()}
                 </Select>
             </li>
         } else if (this.state.id == "1") {
             return <li><span className='modal-text'>角色</span><span>系统管理员</span></li>
         }
-    }
+    },
     getProvinceSelection() {
         if (window.showPermissionList && window.showRoleList) {
             return <li>
@@ -177,69 +341,115 @@ export default class TheModal extends React.Component {
                     onChange={(e) => { this.setState({ province: e }) }} />
             </li>
         }
-    }
-
+    },
     bindRoles(val) {
         this.setState({
             bindroles: val
         });
-    }
-
-
+    },
     getRolesOptions() {
         let options = [];
         for (let i = 0; i < this.state.roles.length; i++) {
             options.push(<Select.Option key={String(this.state.roles[i].id)}>{this.state.roles[i].roleName}</Select.Option>);
         }
         return options;
-    }
-
+    },
+    getLocations(index, p, c) {
+        this.state.locations.map((item, i) => {
+            if (index == i) {
+                item.province = p;
+                item.city = c || [];
+            };
+        });
+    },
+    delLocations(index) {
+        this.state.locations.splice(index, 1);
+        this.setState({ locations: this.state.locations });
+    },
+    provinceAdd() {
+        this.state.locations.push({
+            province: null,
+            city: null
+        });
+        this.setState({ locations: this.state.locations });
+    },
     render() {
         return (
             <div className="modal" >
                 <Spin spinning={this.state.loading} >
                     <Modal maskClosable={false} title="管理员详情"
-                        closable={false}
+                        closable={false} width={1000}
                         visible={this.state.visible}
-                        onOk={this.postData.bind(this)}
-                        onCancel={this.handleCancel.bind(this)}
-                    >
-                        <ul className="modal-content">
-                            <li>
+                        onOk={this.postData}
+                        onCancel={this.handleCancel} >
+                        <ul className="modal-content clearfix">
+                            <li className="list">
                                 <span className='modal-text'>名字</span>
                                 <Input value={this.state.name} onChange={(e) => { this.state.name = e.target.value; this.setState({ name: this.state.name }); }} />
                             </li>
-                            <li>
+                            <li className="list">
                                 <span className='modal-text'>职位</span>
                                 <Input value={this.state.position} onChange={(e) => { this.state.position = e.target.value; this.setState({ position: this.state.position }); }} />
                             </li>
-                            <li>
+                            <li className="list">
+                                <span className='modal-text'>上级</span>
+                                <Select style={{ verticalAlign: 'middle', width: 200 }}
+                                    placeholder="选择一个上级" notFoundContent="没有获取到管理员列表"
+                                    showSearch
+                                    filterOption={companySearch}
+                                    value={this.state.superiorId}
+                                    onChange={(e) => { this.setState({ superiorId: e }) }} >
+                                    {this.state.adminSelectOption}
+                                </Select>
+                            </li>
+                            <li className="list">
                                 <span className='modal-text'>登录账号</span>
                                 <Input value={this.state.mobile} onChange={(e) => { this.state.mobile = e.target.value; this.setState({ mobile: this.state.mobile }); }} />
                             </li>
-                            {this.getProvinceSelection()}
-                            <li>
+                            <li className="list">
                                 <span className='modal-text'>邮箱</span>
                                 <Input value={this.state.email} onChange={(e) => { this.state.email = e.target.value; this.setState({ email: this.state.email }); }} />
                             </li>
                             {this.getRolesSelection()}
-                            <li>
+                            {this.state.id ? <li className="list">
                                 <span></span>
-                                {this.state.id ?
-                                    <Popconfirm
-                                        title={"用户 [ " + this.state.name + " ] 的密码将会重置为123456,确认操作?"}
-                                        onConfirm={this.resetPwd.bind(this)}
-                                        okText="确认"
-                                        cancelText="取消"
-                                        placement="topLeft">
-                                        <Button>重置密码</Button>
-                                    </Popconfirm>
-                                    : <span></span>}
-                            </li>
+                                <Popconfirm
+                                    title={"用户 [ " + this.state.name + " ] 的密码将会重置为123456,确认操作?"}
+                                    onConfirm={this.resetPwd}
+                                    okText="确认"
+                                    cancelText="取消"
+                                    placement="topLeft">
+                                    <Button>重置密码</Button>
+                                </Popconfirm>
+                            </li> : <li></li>}
                         </ul>
+                        <div>
+                            <span className='modal-text' style={{ verticalAlign: 'top' }}>地区</span>
+                            {!window.showPermissionList && window.showRoleList ? <div style={{ display: 'inline-block', width: '88%' }}>
+                                {this.state.locations.map((item, i) => {
+                                    return <ProvinceAdd
+                                        getLocations={this.getLocations}
+                                        delLocations={this.delLocations}
+                                        locations={this.state.locations}
+                                        index={i} key={i} />
+                                })}
+                                <Button style={{ verticalAlign: 'middle' }} type="dashed" size="small"
+                                    onClick={this.provinceAdd}>
+                                    <Icon type="plus" />
+                                </Button>
+                            </div> : <div style={{ display: 'inline-block', width: '88%' }}>
+                                    {this.state.locations.map((item, i) => {
+                                        return <Tag key={i}>{getProvince(item.province) + ' ' + (item.city ? item.city.map((item) => {
+                                            return getProvince(item) + ' '
+                                        }) : '')}</Tag>
+                                    })}
+                                </div>}
+                        </div>
                     </Modal>
                 </Spin>
             </div >
         );
     }
-}
+})
+
+export default TheModal;