From 573193bb8ba686b06b5132cd233f953cc06d310d Mon Sep 17 00:00:00 2001
From: 落日与鲸 <10806022+gong-jinbao@user.noreply.gitee.com>
Date: 星期五, 28 二月 2025 18:41:19 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/H5/threeSide

---
 management/src/pages/setting/user/components/addAndEdit.jsx |  392 +++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 289 insertions(+), 103 deletions(-)

diff --git a/management/src/pages/setting/user/components/addAndEdit.jsx b/management/src/pages/setting/user/components/addAndEdit.jsx
index d5e7f2e..1120903 100644
--- a/management/src/pages/setting/user/components/addAndEdit.jsx
+++ b/management/src/pages/setting/user/components/addAndEdit.jsx
@@ -1,8 +1,8 @@
-import { Form, Input, Modal, Tree, Button, Spin, Row, Col, Select, Radio } from 'antd';
+import { Form, Input, Modal, Tree, Button, Spin, Row, Col, Select, Radio, Cascader } from 'antd';
 import { forwardRef, useImperativeHandle, useState } from 'react';
 import { useEffect } from 'react';
-import { getDepartmentList } from '../service';
-import { Color } from 'antd/es/color-picker';
+import { getDepartmentList, systemPostList, systemRoleList, getSystemUserInfo, getCityList, addSystemUserInfo, editSystemUserInfo } from '../service';
+import CryptoJS from 'crypto-js';
 const formItemLayout = {
     labelCol: { span: 8 },
     wrapperCol: { span: 16 },
@@ -12,15 +12,15 @@
 const AddAndEdit = ({ visible, onSave, onUpdate, onCancel }, ref) => {
     const [form] = Form.useForm();
     const [data, setData] = useState({})
-    const [treeData, setTreeData] = useState([]);//权限树
-    const [treeSeletKeys, setTreeSeletKeys] = useState([]); //勾选权限
-    const [detailType, setDetailType] = useState(false);//是否详情
     const [spinning, setSpinning] = useState(false);
 
     const [oneCompanyList, setOneCompanyList] = useState([])
+
     const [twoCompanyList, setTwoCompanyList] = useState([])
     const [threeCompanyList, setThreeCompanyList] = useState([])
     const [fourCompanyList, setFourCompanyList] = useState([])
+
+    const [adminLevel, setAdminLevel] = useState(1)
 
     //所属职位
     const [positionList, setPositionList] = useState([])
@@ -28,44 +28,96 @@
     const [roleList, setRoleList] = useState([])
     //账号层级
     const [levelList, setLevelList] = useState([{ name: '市级账号', value: 1 }, { name: '区县账号', value: 2 }, { name: '街道账号', value: 3 }, { name: '社区账号', value: 4 }, { name: '党员账号', value: 5 }])
+    //选择的层级
+    const [activeLevel, setActiveLevel] = useState('')
     //所属区县
     const [countyList, setCountyList] = useState([])
+    const [activeCounty, setActiveCounty] = useState({})
     //所属街道
     const [streetList, setStreetList] = useState([])
+    const [activeStreet, setActiveStreet] = useState({})
     //所属社区
     const [communityList, setCommunityList] = useState([])
+    const [activeCommunity, setActiveCommunity] = useState({})
 
 
 
 
     useEffect(() => {
         // 获取单位
-        getDepartmentList(1).then(res => {
-            setOneCompanyList(() => res.data)
-        })
-        getDepartmentList(2).then(res => {
-            setTwoCompanyList(() => res.data)
-        })
-        getDepartmentList(3).then(res => {
-            setThreeCompanyList(() => res.data)
-        })
-        getDepartmentList(4).then(res => {
-            setThreeCompanyList(() => res.data)
-        })
+
     }, [])
 
     useImperativeHandle(ref, () => {
         return {
-            refreshData: (data, type) => {
-                setDetailType(type || false)
-                if (data.id) {
-                    // 获取角色的权限树
-                    getTree(data.id).then(res => {
-                        setTreeSeletKeys(res.data.systemMenuIds || []);
-                    })
+            refreshData: (data, companyList) => {
+                getCountyList()
+                setOneCompanyList(() => companyList)
+                console.log('companyList', companyList)
+
+                systemPostList({ pageNum: 1, pageSize: 10000 }).then(res => {
+                    setPositionList(() => res.data.records)
+                })
+                systemRoleList({ pageNum: 1, pageSize: 10000 }).then(res => {
+                    setRoleList(() => res.data.records)
+                })
+                // 权限判断
+                let adminInfo = JSON.parse(localStorage.getItem('userInfo'))
+                setAdminLevel(() => adminInfo.accountLevel)
+                switch (adminInfo.accountLevel) {
+                    case 1:
+                        setLevelList(() => [{ name: '市级账号', value: 1 }, { name: '区县账号', value: 2 }, { name: '街道账号', value: 3 }, { name: '社区账号', value: 4 }, { name: '党员账号', value: 5 }])
+                        break;
+                    case 2:
+                        getStreetList(adminInfo.districtsCode)
+                        setLevelList(() => [{ name: '区县账号', value: 2 }, { name: '街道账号', value: 3 }, { name: '社区账号', value: 4 }, { name: '党员账号', value: 5 }])
+                        this.$nextTick(() => {
+                            form.setFieldsValue({ districtsCode: adminInfo.districtsCode })
+                        })
+
+                        break;
+                    case 3:
+                        getStreetList(adminInfo.districtsCode)
+                        getcommunityList(adminInfo.streetId)
+                        setLevelList(() => [{ name: '街道账号', value: 3 }, { name: '社区账号', value: 4 }, { name: '党员账号', value: 5 }])
+                        form.setFieldsValue({ districtsCode: adminInfo.districtsCode })
+                        form.setFieldsValue({ streetId: adminInfo.streetId })
+                        break;
+                    case 4:
+                        getStreetList(adminInfo.districtsCode)
+                        getcommunityList(adminInfo.streetId)
+                        setLevelList(() => [{ name: '社区账号', value: 4 }, { name: '党员账号', value: 5 }])
+                        // this.$nextTick(() => {
+                        form.setFieldsValue({ districtsCode: adminInfo.districtsCode })
+                        form.setFieldsValue({ streetId: adminInfo.streetId })
+                        form.setFieldsValue({ communityId: adminInfo.communityId * 1 })
+                        // })
+
+
+                        break;
+                    case 5:
+                        getStreetList(adminInfo.districtsCode)
+                        getcommunityList(adminInfo.streetId)
+                        setLevelList(() => [{ name: '党员账号', value: 5 }])
+                        form.setFieldsValue({ districtsCode: adminInfo.districtsCode })
+                        form.setFieldsValue({ streetId: adminInfo.streetId })
+                        form.setFieldsValue({ communityId: adminInfo.communityId * 1 })
+                        break;
+                    default:
+                        break;
                 }
-                setData(data)
-                form.setFieldsValue(data);
+
+
+
+                if (data.id) {
+                    getInfo(data.id)
+                }
+                setData(() => data)
+                if (data.unitId) {
+                    let result = []
+                    findParent(companyList, data.unitId * 1, result)
+                    form.setFieldsValue({ DepartmentId: result })
+                }
             },
             clean: () => {
                 setSpinning(false)
@@ -76,9 +128,13 @@
     // 保存
     const okHandle = () => {
         form.validateFields().then((values) => {
-            setSpinning(true)
-            values.menuIds = treeSeletKeys
-            delete values.tree
+            values.password = CryptoJS.MD5(values.password).toString();
+            if (values.DepartmentId) {
+                values.oneDepartmentId = values.DepartmentId.length > 0 ? values.DepartmentId[0] : null
+                values.twoDepartmentId = values.DepartmentId.length > 1 ? values.DepartmentId[1] : null
+                values.threeDepartmentId = values.DepartmentId.length > 2 ? values.DepartmentId[2] : null
+                values.fourDepartmentId = values.DepartmentId.length > 3 ? values.DepartmentId[3] : null
+            }
             if (data.id) {
                 values.id = data.id
                 onUpdate(values)
@@ -87,22 +143,107 @@
             }
         });
     };
+    const getCountyList = (id) => {
+        getCityList({ id: '510400', tier: 2 }).then(res => {
+            setCountyList(() => res.data)
+        })
+    }
+    const getStreetList = (id) => {
+        getCityList({ id: id, tier: 3 }).then(res => {
+            setStreetList(() => res.data)
+        })
+    }
+    const getcommunityList = (id) => {
+        getCityList({ id: id, tier: 4 }).then(res => {
+            setCommunityList(() => res.data)
+        })
+    }
+    const changeCountry = (value, label) => {
+        setActiveCounty(label)
+        getStreetList(value)
+        form.setFieldsValue({ streetId: '', communityId: '' })
+        setActiveCommunity({ name: '', id: '' })
+        setActiveStreet({ name: '', id: '' })
 
+    }
+    const changeStreet = (value, label) => {
+        setActiveStreet(label)
+        getcommunityList(value)
+        form.setFieldsValue({ communityId: '' })
+        setActiveCommunity({ name: '', id: '' })
+    }
+    const changeCommunity = (value, label) => {
+        setActiveCommunity(label)
+    }
+    const getInfo = (id) => {
+        getSystemUserInfo(id).then(res => {
+            if (res.data.districtsCode) {
+                setActiveStreet({ name: res.data.districts, id: res.data.districtsCode })
+                getStreetList(res.data.districtsCode)
+            }
+            if (res.data.streetId) {
+                setActiveCounty({ name: res.data.street, id: res.data.streetId })
+                getcommunityList(res.data.streetId)
+            }
+            if (res.data.communityId) {
+                setActiveCommunity({ name: res.data.community, id: res.data.communityId })
+            }
+            // delete res.data.password
+
+            let departmentId = []
+            if (res.data.oneDepartmentId) {
+                departmentId.push(res.data.oneDepartmentId)
+            }
+            if (res.data.twoDepartmentId) {
+                departmentId.push(res.data.twoDepartmentId)
+            }
+            if (res.data.threeDepartmentId) {
+                departmentId.push(res.data.threeDepartmentId)
+            }
+            if (res.data.fourDepartmentId) {
+                departmentId.push(res.data.fourDepartmentId)
+            }
+            res.data.DepartmentId = departmentId
+            console.log('departmentId', departmentId)
+            setActiveLevel(() => res.data.accountLevel)
+
+            form.setFieldsValue({ ...res.data, password: '' })
+        })
+    }
+    const findParent = (data, target, result) => {
+        for (let item of data) {
+            if (item.id === target) {
+                //将查找到的目标数据加入结果数组中
+                //可根据需求unshift(item.id)或unshift(item)
+                result.unshift(item.id)
+                return true
+            }
+            if (item.children && item.children.length > 0) {
+                //根据查找到的结果往上找父级节点
+                let isFind = findParent(item.children, target, result)
+                if (isFind) {
+                    result.unshift(item.id)
+                    return true
+                }
+            }
+        }
+        //走到这说明没找到目标
+        return false
+    }
 
     return (
         <Modal
             getContainer={false}
             width="65%"
             destroyOnClose
-            title={detailType ? '人员详情' : data.id ? '编辑人员' : '添加人员'}
+            title={data.type == 'detail' ? '人员详情' : data.type == 'edit' ? '编辑人员' : '添加人员'}
             open={visible}
             onCancel={() => onCancel(false)}
             afterClose={() => {
                 form.resetFields()
-                setTreeSeletKeys([])
             }}
             footer={
-                !detailType ?
+                (data.type == 'edit' || data.type == 'add') ?
                     [
                         <Button key="back" onClick={() => onCancel(false)}>取消</Button>,
                         <Button key="submit" type="primary" onClick={okHandle}>
@@ -121,29 +262,39 @@
                             label="姓名"
                             rules={[{ required: true, message: '请输入人员姓名' }]}
                         >
-                            <Input disabled={detailType} placeholder='请输入人员姓名' />
+                            <Input disabled={data.type == 'detail'} placeholder='请输入人员姓名' />
                         </Form.Item>
                     </Col>
                 </Row>
                 <Row>
-                    <Col span={8}>
+                    <Col span={16}>
                         <Form.Item
-                            name="oneDepartmentId"
-                            label="所属一级单位"
-                            rules={[{ required: true, message: '请选择所属一级单位' }]}
+                            name="DepartmentId"
+                            label="所属单位"
+                            labelCol={{ span: 4 }}
+                            rules={[{ required: true, message: '请选择所属单位' }]}
                         >
-                            <Select
+                            {/* <Select
                                 key="searchSelect"
                                 allowClear
+                                disabled={data.type == 'detail'}
                                 placeholder="请选择"
                                 options={oneCompanyList}
                                 fieldNames={{ label: 'name', value: 'id' }}
                                 filterOption={false}
                             >
-                            </Select >
+                            </Select > */}
+                            <Cascader
+                                changeSelect
+                                options={oneCompanyList}
+                                fieldNames={{ value: 'key', label: 'name' }}
+                                placeholder="请选择"
+                                // displayRender={(label) => label[label.length - 1]}
+                                changeOnSelect={true}
+                            />
                         </Form.Item>
                     </Col>
-                    <Col span={8}>
+                    {/* <Col span={8}>
                         <Form.Item
                             name="twoDepartmentId"
                             label="所属二级单位"
@@ -151,6 +302,7 @@
                             <Select
                                 key="searchSelect"
                                 allowClear
+                                disabled={data.type == 'detail'}
                                 placeholder="请选择"
                                 options={twoCompanyList}
                                 fieldNames={{ label: 'name', value: 'id' }}
@@ -167,6 +319,7 @@
                             <Select
                                 key="searchSelect"
                                 allowClear
+                                disabled={data.type == 'detail'}
                                 placeholder="请选择"
                                 options={threeCompanyList}
                                 fieldNames={{ label: 'name', value: 'id' }}
@@ -174,9 +327,9 @@
                             >
                             </Select >
                         </Form.Item>
-                    </Col>
+                    </Col> */}
                 </Row>
-                <Row>
+                {/* <Row>
                     <Col span={8}>
                         <Form.Item
                             name="fourDepartmentId"
@@ -185,6 +338,7 @@
                             <Select
                                 key="searchSelect"
                                 allowClear
+                                disabled={data.type == 'detail'}
                                 placeholder="请选择"
                                 options={fourCompanyList}
                                 fieldNames={{ label: 'name', value: 'id' }}
@@ -193,7 +347,7 @@
                             </Select >
                         </Form.Item>
                     </Col>
-                </Row>
+                </Row> */}
                 <Row>
                     <Col span={8}>
                         <Form.Item
@@ -204,6 +358,7 @@
                             <Select
                                 key="searchSelect"
                                 allowClear
+                                disabled={data.type == 'detail'}
                                 placeholder="请选择"
                                 options={positionList}
                                 fieldNames={{ label: 'name', value: 'id' }}
@@ -221,6 +376,7 @@
                             <Select
                                 key="searchSelect"
                                 allowClear
+                                disabled={data.type == 'detail'}
                                 placeholder="请选择"
                                 options={roleList}
                                 fieldNames={{ label: 'name', value: 'id' }}
@@ -240,6 +396,8 @@
                             <Select
                                 key="searchSelect"
                                 allowClear
+                                onChange={(e) => setActiveLevel(e)}
+                                disabled={data.type == 'detail'}
                                 placeholder="请选择"
                                 options={levelList}
                                 fieldNames={{ label: 'name', value: 'value' }}
@@ -261,6 +419,7 @@
                                     rules={[{ required: true, message: '是否管理员' }]}
                                 >
                                     <Radio.Group
+                                        disabled={data.type == 'detail'}
                                         // style={style}
                                         // onChange={onChange}
                                         // value={value}
@@ -274,63 +433,89 @@
                         </Form.Item>
                     </Col>
                 </Row>
-                <Row>
-                    <Col span={8}>
-                        <Form.Item
-                            name="districts"
-                            label="所属区县"
-                            rules={[{ required: true, message: '请选择所属区县' }]}
-                        >
-                            <Select
-                                key="searchSelect"
-                                allowClear
+                {activeLevel != 1 && (
+                    <Row>
+                        {[2, 3, 4, 5].includes(activeLevel) && (
+                            <Col span={8}>
+                                <Form.Item
+                                    name="districtsCode"
+                                    label="所属区县"
+                                    rules={[{ required: true, message: '请选择所属区县' }]}
+                                >
+                                    {/* <Select
+                                // onChange={changeCountry}
+                                // value={activeCounty}
                                 placeholder="请选择"
-                                options={oneCompanyList}
+                                options={levelList}
                                 fieldNames={{ label: 'name', value: 'id' }}
-                                filterOption={false}
                             >
-                            </Select >
-                        </Form.Item>
-                    </Col>
-                    <Col span={8}>
-                        <Form.Item
-                            name="street"
-                            label="所属街道"
-                            rules={[{ required: true, message: '请选择所属街道' }]}
-                        >
-                            <Select
-                                key="searchSelect"
-                                allowClear
-                                placeholder="请选择"
-                                options={twoCompanyList}
-                                fieldNames={{ label: 'name', value: 'id' }}
-                                filterOption={false}
-                            >
-                            </Select >
-                        </Form.Item>
-                    </Col>
-                    <Col span={8}>
-                        <Form.Item
-                            name="community"
-                            label="所属社区"
-                            rules={[{ required: true, message: '请选择所属社区' }]}
-                        >
-                            <Select
-                                key="searchSelect"
-                                allowClear
-                                placeholder="请选择"
-                                options={threeCompanyList}
-                                fieldNames={{ label: 'name', value: 'id' }}
-                                filterOption={false}
-                            >
-                            </Select >
-                        </Form.Item>
-                    </Col>
-                </Row>
+                            </Select > */}
+                                    <Select
+                                        key="searchSelect"
+                                        allowClear
+                                        disabled={data.type == 'detail' || [2, 3, 4, 5].includes(adminLevel)}
+                                        onChange={changeCountry}
+                                        value={activeCounty.id}
+                                        placeholder="请选择"
+                                        options={countyList}
+                                        fieldNames={{ label: 'name', value: 'id' }}
+                                    // filterOption={false}
+                                    >
+                                    </Select >
+                                </Form.Item>
+                            </Col>
+                        )}
+                        {[3, 4, 5].includes(activeLevel) && (
+                            <Col span={8}>
+                                <Form.Item
+                                    name="streetId"
+                                    label="所属街道"
+                                    rules={[{ required: true, message: '请选择所属街道' }]}
+                                >
+                                    <Select
+                                        onChange={changeStreet}
+                                        disabled={!activeCounty || data.type == 'detail' || [3, 4, 5].includes(adminLevel)}
+                                        key="searchSelect"
+                                        allowClear
+                                        value={activeStreet.id}
+                                        placeholder="请选择"
+                                        options={streetList}
+                                        fieldNames={{ label: 'name', value: 'id' }}
+                                    >
+                                    </Select >
+                                </Form.Item>
+                            </Col>
+                        )}
+
+                        {[4, 5].includes(activeLevel) && (
+                            <Col span={8}>
+                                <Form.Item
+                                    name="communityId"
+                                    label="所属社区"
+                                    rules={[{ required: true, message: '请选择所属社区' }]}
+                                >
+                                    <Select
+                                        onChange={changeCommunity}
+                                        disabled={!activeStreet || data.type == 'detail' || [4, 5].includes(adminLevel)}
+                                        key="searchSelect"
+                                        allowClear
+                                        value={activeCommunity.id}
+                                        placeholder="请选择"
+                                        options={communityList}
+                                        fieldNames={{ label: 'name', value: 'id' }}
+                                    >
+                                    </Select >
+                                </Form.Item>
+                            </Col>
+                        )}
+                    </Row>
+                )}
+
                 <Row>
                     <Col span={16}>
                         <Form.Item
                             label="联系方式"
+                            required
                             labelCol={{ span: 4 }}
                             wrapperCol={{ span: 20 }}
                             style={{ marginBottom: 0 }}
@@ -338,6 +523,7 @@
                             <div style={{ display: "flex", flex: 1 }}>
                                 <Form.Item
                                     name="phone"
+
                                     rules={[{
                                         validator: (rule, value) => {
                                             return new Promise((resolve, reject) => {
@@ -353,7 +539,7 @@
                                         },
                                     }]}
                                 >
-                                    <Input disabled={detailType} placeholder='请输入联系方式' />
+                                    <Input disabled={data.type == 'detail'} placeholder='请输入联系方式' />
                                 </Form.Item>
                                 <div style={{ fontSize: '12px', color: "rgba(0,0,0,0.5)", marginLeft: "10px" }}>联系方式将作为登录账号使用</div>
                             </div>
@@ -363,17 +549,17 @@
                 <Row>
                     <Col span={8}>
                         <Form.Item
-                            required
+                            required={data.type == 'add'}
                             name="password"
                             label="登录密码"
                             rules={[{
                                 validator: (rule, value) => {
                                     return new Promise((resolve, reject) => {
-                                        if (!value) {
+                                        if (!value && data.type == 'add') {
                                             reject('请输入新密码');
                                         }
                                         const passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
-                                        if (!passwordRegex.test(value)) {
+                                        if (!passwordRegex.test(value) && data.type == 'add') {
                                             reject('密码需要包含大小写字母,数字和特殊符号,且长度为8位以上');
                                         }
                                         resolve('');
@@ -381,13 +567,13 @@
                                 },
                             }]}
                         >
-                            <Input.Password disabled={detailType} placeholder='请输入' />
+                            <Input.Password disabled={data.type == 'detail'} placeholder='请输入' />
                         </Form.Item>
                     </Col>
                     <Col span={16}>
                         <Form.Item
                             label="确认密码"
-                            required
+                            required={data.type == 'add'}
                             labelCol={{ span: 4 }}
                             wrapperCol={{ span: 20 }}
                             style={{ marginBottom: 0 }}
@@ -398,10 +584,10 @@
                                     rules={[{
                                         validator: (rule, value) => {
                                             return new Promise((resolve, reject) => {
-                                                if (!value) {
+                                                if (!value && data.type == 'add') {
                                                     reject('请再次输入新密码');
                                                 }
-                                                if (value != form.getFieldValue('password')) {
+                                                if (value != form.getFieldValue('password') && data.type == 'add') {
                                                     reject('两次密码请保持一致');
                                                 }
                                                 resolve('');
@@ -409,7 +595,7 @@
                                         },
                                     },]}
                                 >
-                                    <Input.Password disabled={detailType} placeholder='请输入' />
+                                    <Input.Password disabled={data.type == 'detail'} placeholder='请输入' />
                                 </Form.Item>
                                 <div style={{ fontSize: '12px', color: "rgba(0,0,0,0.5)", marginLeft: "10px" }}>密码需要包含大小写字母,数字和特殊符号,且长度为8位以上</div>
                             </div>

--
Gitblit v1.7.1