From 694a3070452867600bc09c3ce76b3d8dc5c7a369 Mon Sep 17 00:00:00 2001 From: 董国庆 <364620639@qq.com> Date: 星期五, 28 二月 2025 15:13:55 +0800 Subject: [PATCH] 修改人员管理逻辑 --- management/src/pages/setting/user/components/addAndEdit.jsx | 313 +++++++++++++++++++++++++++++++++++---------------- 1 files changed, 213 insertions(+), 100 deletions(-) diff --git a/management/src/pages/setting/user/components/addAndEdit.jsx b/management/src/pages/setting/user/components/addAndEdit.jsx index 7441d74..f01cc5c 100644 --- a/management/src/pages/setting/user/components/addAndEdit.jsx +++ b/management/src/pages/setting/user/components/addAndEdit.jsx @@ -1,4 +1,4 @@ -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, systemPostList, systemRoleList, getSystemUserInfo, getCityList, addSystemUserInfo, editSystemUserInfo } from '../service'; @@ -15,9 +15,12 @@ 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([]) @@ -25,6 +28,8 @@ 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({}) @@ -40,39 +45,79 @@ useEffect(() => { // 获取单位 - setTimeout(() => { - getDepartmentList(1).then(res => { - setOneCompanyList(() => res.data) - }) - getDepartmentList(2).then(res => { - setTwoCompanyList(() => res.data) - }) - }, 2000); - setTimeout(() => { - getDepartmentList(3).then(res => { - setThreeCompanyList(() => res.data) - }) - getDepartmentList(4).then(res => { - setFourCompanyList(() => res.data) - }) - }, 4000); + }, []) useImperativeHandle(ref, () => { return { - refreshData: (data, type) => { + 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; + } + + if (data.id) { getInfo(data.id) } - setData(()=>data) + setData(() => data) + if (data.unitId) { + let result = [] + findParent(companyList, data.unitId * 1, result) + form.setFieldsValue({ DepartmentId: result }) + } }, clean: () => { setSpinning(false) @@ -84,9 +129,12 @@ const okHandle = () => { form.validateFields().then((values) => { values.password = CryptoJS.MD5(values.password).toString(); - values.districts=activeCounty.name - values.street=activeStreet.name - values.community=activeCommunity.name + 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) @@ -113,11 +161,16 @@ 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) @@ -135,9 +188,47 @@ if (res.data.communityId) { setActiveCommunity({ name: res.data.community, id: res.data.communityId }) } - delete res.data.password - form.setFieldsValue(res.data) + // 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 ( @@ -176,13 +267,14 @@ </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'} @@ -191,10 +283,18 @@ 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="所属二级单位" @@ -227,9 +327,9 @@ > </Select > </Form.Item> - </Col> + </Col> */} </Row> - <Row> + {/* <Row> <Col span={8}> <Form.Item name="fourDepartmentId" @@ -247,7 +347,7 @@ </Select > </Form.Item> </Col> - </Row> + </Row> */} <Row> <Col span={8}> <Form.Item @@ -296,6 +396,7 @@ <Select key="searchSelect" allowClear + onChange={(e) => setActiveLevel(e)} disabled={data.type == 'detail'} placeholder="请选择" options={levelList} @@ -318,7 +419,7 @@ rules={[{ required: true, message: '是否管理员' }]} > <Radio.Group - disabled={data.type == 'detail'} + disabled={data.type == 'detail'} // style={style} // onChange={onChange} // value={value} @@ -332,14 +433,16 @@ </Form.Item> </Col> </Row> - <Row> - <Col span={8}> - <Form.Item - name="districtsCode" - label="所属区县" - rules={[{ required: true, message: '请选择所属区县' }]} - > - {/* <Select + {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="请选择" @@ -347,63 +450,72 @@ fieldNames={{ label: 'name', value: 'id' }} > </Select > */} - <Select - key="searchSelect" - allowClear - disabled={data.type == 'detail'} - onChange={changeCountry} - value={activeCounty.id} - placeholder="请选择" - options={countyList} - fieldNames={{ label: 'name', value: 'id' }} - // filterOption={false} - > - </Select > - </Form.Item> - </Col> - <Col span={8}> - <Form.Item - name="streetId" - label="所属街道" - rules={[{ required: true, message: '请选择所属街道' }]} - > - <Select - onChange={changeStreet} - disabled={!activeCounty || data.type == 'detail'} - key="searchSelect" - allowClear - value={activeStreet.id} - placeholder="请选择" - options={streetList} - fieldNames={{ label: 'name', value: 'id' }} - > - </Select > - </Form.Item> - </Col> - <Col span={8}> - <Form.Item - name="communityId" - label="所属社区" - rules={[{ required: true, message: '请选择所属社区' }]} - > - <Select - onChange={changeCommunity} - disabled={!activeStreet || data.type == 'detail'} - key="searchSelect" - allowClear - value={activeCommunity.id} - placeholder="请选择" - options={communityList} - fieldNames={{ label: 'name', value: 'id' }} - > - </Select > - </Form.Item> - </Col> - </Row> + <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 }} @@ -411,6 +523,7 @@ <div style={{ display: "flex", flex: 1 }}> <Form.Item name="phone" + rules={[{ validator: (rule, value) => { return new Promise((resolve, reject) => { @@ -442,11 +555,11 @@ 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(''); @@ -471,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(''); -- Gitblit v1.7.1