| | |
| | | import { Form, Input, Modal, Tree, Button, Spin, Row, Col, Select, Radio, Cascader } from 'antd'; |
| | | import { Form, Input, Modal, Tree, Button, Spin, Row, Col, Select, Radio, Cascader, Card } from 'antd'; |
| | | import { forwardRef, useImperativeHandle, useState } from 'react'; |
| | | import { useEffect } from 'react'; |
| | | import { getDepartmentList, systemPostList, systemRoleList, getSystemUserInfo, getCityList, addSystemUserInfo, editSystemUserInfo } from '../service'; |
| | | import { DeleteOutlined } from '@ant-design/icons'; |
| | | import '../index.less' |
| | | import { getDepartmentList, systemPostList, systemRoleList, getSystemUserInfo, getCityList, addSystemUserInfo, editSystemUserInfo, getCascaderData } from '../service'; |
| | | import CryptoJS from 'crypto-js'; |
| | | const formItemLayout = { |
| | | labelCol: { span: 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 [levelList, setLevelList] = useState([]) |
| | | |
| | | //级联数据 |
| | | const [cascaderData, setCascaderData] = useState([]) |
| | | //选择的层级 |
| | | const [activeLevel, setActiveLevel] = useState('') |
| | | //所属区县 |
| | |
| | | const [streetList, setStreetList] = useState([]) |
| | | const [activeStreet, setActiveStreet] = useState({}) |
| | | //所属社区 |
| | | const [communityList, setCommunityList] = useState([]) |
| | | const [activeCommunity, setActiveCommunity] = useState({}) |
| | | |
| | | |
| | | |
| | | const [accountLevels, setAccountLevels] = useState([ |
| | | { area: [], isDiscipline: 0, options: [] } |
| | | ]); |
| | | |
| | | useEffect(() => { |
| | | // 获取单位 |
| | |
| | | useImperativeHandle(ref, () => { |
| | | return { |
| | | refreshData: (data, companyList) => { |
| | | getCountyList() |
| | | getCascaderDatas() |
| | | 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) |
| | |
| | | // 保存 |
| | | const okHandle = () => { |
| | | form.validateFields().then((values) => { |
| | | // 校验accountLevels必填 |
| | | if (!accountLevels.length || accountLevels.some(item => !item.area || item.area.length === 0)) { |
| | | if (window?.antd?.message?.error) { |
| | | window.antd.message.error('请完整选择账号所属层级区域!'); |
| | | } else { |
| | | alert('请完整选择账号所属层级区域!'); |
| | | } |
| | | return; |
| | | } |
| | | // 打印提交时的accountLevels数组 |
| | | console.log('提交时的accountLevels:', accountLevels); |
| | | // 组装 systemUserLevels,严格按照接口字段,优先用原始字段 |
| | | const systemUserLevels = accountLevels.map(item => { |
| | | // Get the first selected option's id as the level |
| | | const firstSelectedOption = item.selectedOptions?.[0]; |
| | | const level = firstSelectedOption?.id || item.level || ''; |
| | | |
| | | // 判断不同级别(假设市级别id为1,区县级别id为2,街道级别id为3,社区级别id为4) |
| | | const isCityLevel = level === '1'; |
| | | const isDistrictLevel = level === '2'; |
| | | const isStreetLevel = level === '3'; |
| | | const isCommunityLevel = level === '4'; |
| | | |
| | | return { |
| | | // 市级别:所有下级字段为空 |
| | | // 区县级别:街道和社区字段为空 |
| | | // 街道级别:社区字段为空 |
| | | // 社区级别:不做处理 |
| | | community: (isCityLevel || isDistrictLevel || isStreetLevel) ? '' : (item.community || item.selectedOptions?.[3]?.name || ''), |
| | | communityId: (isCityLevel || isDistrictLevel || isStreetLevel) ? '' : (item.communityId || item.selectedOptions?.[3]?.id || ''), |
| | | districts: isCityLevel ? '' : (item.districts || item.selectedOptions?.[1]?.name || ''), |
| | | districtsCode: isCityLevel ? '' : (item.districtsCode || item.selectedOptions?.[1]?.id || ''), |
| | | id: item.id || '', // 编辑时可用 |
| | | level: level, // Use the determined level value |
| | | status: 1, |
| | | street: (isCityLevel || isDistrictLevel) ? '' : (item.street || item.selectedOptions?.[2]?.name || ''), |
| | | streetId: (isCityLevel || isDistrictLevel) ? '' : (item.streetId || item.selectedOptions?.[2]?.id || ''), |
| | | superviseFlag: typeof item.isDiscipline === 'number' ? item.isDiscipline : (item.isDiscipline ? 1 : 0), |
| | | // systemUserId: 可选,如有需要补充 |
| | | }; |
| | | }); |
| | | values.systemUserLevels = systemUserLevels; |
| | | if(values.password){ |
| | | values.password = CryptoJS.MD5(values.password).toString(); |
| | | }else{ |
| | |
| | | onUpdate(values) |
| | | } else { |
| | | onSave(values); |
| | | setAccountLevels([{ area: [], isDiscipline: 0, options: [] }]); // 清空 |
| | | } |
| | | }); |
| | | }; |
| | | 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 getCascaderDatas = () => { |
| | | getCascaderData().then(res => { |
| | | // 处理级联数据 |
| | | const processedData = res.data.map(item => { |
| | | // 根据第一级类型处理数据 |
| | | if (item.children) { |
| | | // 区县级别 |
| | | if (item.id == 2) { // 假设type=2表示区县 |
| | | // 只保留第一级children |
| | | item.children = item.children.map(child => { |
| | | const { children, ...childWithoutChildren } = child; |
| | | return childWithoutChildren; |
| | | }); |
| | | } |
| | | const changeStreet = (value, label) => { |
| | | setActiveStreet(label) |
| | | getcommunityList(value) |
| | | form.setFieldsValue({ communityId: '' }) |
| | | setActiveCommunity({ name: '', id: '' }) |
| | | // 街道级别 |
| | | else if (item.id == 3) { // 假设type=3表示街道 |
| | | // 保留区县和街道两级 |
| | | item.children = item.children.map(child => { |
| | | if (child.children) { |
| | | child.children = child.children.map(street => { |
| | | const { children, ...streetWithoutChildren } = street; |
| | | return streetWithoutChildren; |
| | | }); |
| | | } |
| | | const changeCommunity = (value, label) => { |
| | | setActiveCommunity(label) |
| | | return child; |
| | | }); |
| | | } |
| | | // 社区级别 |
| | | else if (item.id == 4) { // 假设type=4表示社区 |
| | | // 保留所有层级数据 |
| | | return item; |
| | | } |
| | | } |
| | | return item; |
| | | }); |
| | | |
| | | let arr = JSON.parse(JSON.stringify(processedData)) |
| | | let accountLevels = localStorage.getItem('userInfo') |
| | | let accountLevel = JSON.parse(accountLevels).accountLevel |
| | | if (accountLevel == 2) { |
| | | arr = arr.filter(item => item.id != 1) |
| | | } else if (accountLevel == 3) { |
| | | arr = arr.filter(item => item.id != 1 && item.id != 2) |
| | | } else if (accountLevel == 4) { |
| | | arr = arr.filter(item => item.id != 1 && item.id != 2 && item.id != 3) |
| | | } |
| | | setCascaderData(() => arr); |
| | | }); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | 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 = [] |
| | |
| | | departmentId.push(res.data.fourDepartmentId) |
| | | } |
| | | res.data.DepartmentId = departmentId |
| | | console.log('departmentId', departmentId) |
| | | setActiveLevel(() => res.data.accountLevel) |
| | | |
| | | // 先获取级联数据再回显 |
| | | getCascaderData().then(cascadeRes => { |
| | | // 处理级联数据 |
| | | const processedData = cascadeRes.data.map(item => { |
| | | // 根据第一级类型处理数据 |
| | | if (item.children) { |
| | | // 区县级别 |
| | | if (item.id == 2) { // 假设type=2表示区县 |
| | | // 只保留第一级children |
| | | item.children = item.children.map(child => { |
| | | const { children, ...childWithoutChildren } = child; |
| | | return childWithoutChildren; |
| | | }); |
| | | } |
| | | // 街道级别 |
| | | else if (item.id == 3) { // 假设type=3表示街道 |
| | | // 保留区县和街道两级 |
| | | item.children = item.children.map(child => { |
| | | if (child.children) { |
| | | child.children = child.children.map(street => { |
| | | const { children, ...streetWithoutChildren } = street; |
| | | return streetWithoutChildren; |
| | | }); |
| | | } |
| | | return child; |
| | | }); |
| | | } |
| | | // 社区级别 |
| | | else if (item.id == 4) { // 假设type=4表示社区 |
| | | // 保留所有层级数据 |
| | | return item; |
| | | } |
| | | } |
| | | return item; |
| | | }); |
| | | |
| | | let arr = JSON.parse(JSON.stringify(processedData)) |
| | | let accountLevels = localStorage.getItem('userInfo') |
| | | let accountLevel = JSON.parse(accountLevels).accountLevel |
| | | if (accountLevel == 2) { |
| | | arr = arr.filter(item => item.id != 1) |
| | | } else if (accountLevel == 3) { |
| | | arr = arr.filter(item => item.id != 1 && item.id != 2) |
| | | } else if (accountLevel == 4) { |
| | | arr = arr.filter(item => item.id != 1 && item.id != 2 && item.id != 3) |
| | | } |
| | | setCascaderData(() => arr); |
| | | |
| | | // 回显accountLevels,area始终为4级,id类型统一 |
| | | if (res.data.systemUserLevels && Array.isArray(res.data.systemUserLevels)) { |
| | | const newAccountLevels = res.data.systemUserLevels.map(level => { |
| | | const toId = v => (v === undefined || v === null) ? undefined : String(v); |
| | | const area = [ |
| | | toId(level.level), |
| | | toId(level.twoLevelId || level.districtsCode), |
| | | toId(level.threeLevelId || level.streetId), |
| | | toId(level.fourLevelId || level.communityId) |
| | | ].filter(v => v !== undefined && v !== null && v !== ''); |
| | | return { |
| | | area, |
| | | isDiscipline: Number(level.superviseFlag) === 1 ? 1 : 0, |
| | | options: [], |
| | | selectedOptions: [ |
| | | level.level ? { id: toId(level.level), name: '' } : undefined, |
| | | level.twoLevelName ? { id: toId(level.twoLevelId), name: level.twoLevelName } : undefined, |
| | | level.threeLevelName ? { id: toId(level.threeLevelId), name: level.threeLevelName } : undefined, |
| | | level.fourLevelName ? { id: toId(level.fourLevelId), name: level.fourLevelName } : undefined, |
| | | ].filter(Boolean), |
| | | level: toId(level.level) || '', |
| | | community: level.community || '', |
| | | communityId: level.communityId || '', |
| | | districts: level.districts || '', |
| | | districtsCode: level.districtsCode || '', |
| | | id: level.id || '', |
| | | street: level.street || '', |
| | | streetId: level.streetId || '', |
| | | }; |
| | | }); |
| | | setAccountLevels(newAccountLevels.length ? newAccountLevels : [{ area: [], isDiscipline: 0, options: [], level: '', community: '', communityId: '', districts: '', districtsCode: '', id: '', street: '', streetId: '' }]); |
| | | } |
| | | }); |
| | | |
| | | form.setFieldsValue({ ...res.data, password: '' }) |
| | | }) |
| | |
| | | return false |
| | | } |
| | | |
| | | // 动态添加账号层级项 |
| | | const addAccountLevel = () => { |
| | | setAccountLevels([...accountLevels, { area: [], isDiscipline: 0, options: [] }]); |
| | | }; |
| | | // 删除账号层级项 |
| | | const removeAccountLevel = (idx) => { |
| | | if (accountLevels.length === 1) return; |
| | | setAccountLevels(accountLevels.filter((_, i) => i !== idx)); |
| | | }; |
| | | // 纪检委单选变更 |
| | | const handleDisciplineChange = (e, idx) => { |
| | | setAccountLevels(levels => { |
| | | const newLevels = [...levels]; |
| | | newLevels[idx].isDiscipline = e.target.value; |
| | | return newLevels; |
| | | }); |
| | | }; |
| | | |
| | | return ( |
| | | <Modal |
| | | getContainer={false} |
| | | width="65%" |
| | | width="75%" |
| | | destroyOnClose |
| | | title={data.type == 'detail' ? '人员详情' : data.type == 'edit' ? '编辑人员' : '添加人员'} |
| | | open={visible} |
| | | className='addAndEditModal' |
| | | onCancel={() => onCancel(false)} |
| | | afterClose={() => { |
| | | form.resetFields() |
| | |
| | | <Button key="back" onClick={() => onCancel(false)}>关闭</Button> |
| | | } |
| | | > |
| | | <Form layout="horizontal" {...formItemLayout} form={form} scrollToFirstError> |
| | | <Row> |
| | | <Form layout="horizontal" form={form} scrollToFirstError labelCol={{ span: 6 }} wrapperCol={{ span: 20 }}> |
| | | <Row gutter={16}> |
| | | <Col span={8}> |
| | | <Form.Item |
| | | name="name" |
| | |
| | | <Input disabled={data.type == 'detail'} placeholder='请输入人员姓名' /> |
| | | </Form.Item> |
| | | </Col> |
| | | </Row> |
| | | <Row> |
| | | <Col span={16}> |
| | | <Form.Item |
| | | name="DepartmentId" |
| | | label="所属单位" |
| | | labelCol={{ span: 4 }} |
| | | rules={[{ required: true, message: '请选择所属单位' }]} |
| | | > |
| | | {/* <Select |
| | | key="searchSelect" |
| | | allowClear |
| | | disabled={data.type == 'detail'} |
| | | placeholder="请选择" |
| | | options={oneCompanyList} |
| | | fieldNames={{ label: 'name', value: 'id' }} |
| | | filterOption={false} |
| | | > |
| | | </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}> |
| | | <Form.Item |
| | | name="twoDepartmentId" |
| | | label="所属二级单位" |
| | | > |
| | | <Select |
| | | key="searchSelect" |
| | | allowClear |
| | | disabled={data.type == 'detail'} |
| | | placeholder="请选择" |
| | | options={twoCompanyList} |
| | | fieldNames={{ label: 'name', value: 'id' }} |
| | | filterOption={false} |
| | | > |
| | | </Select > |
| | | </Form.Item> |
| | | </Col> |
| | | <Col span={8}> |
| | | <Form.Item |
| | | name="threeDepartmentId" |
| | | label="所属三级单位" |
| | | > |
| | | <Select |
| | | key="searchSelect" |
| | | allowClear |
| | | disabled={data.type == 'detail'} |
| | | placeholder="请选择" |
| | | options={threeCompanyList} |
| | | fieldNames={{ label: 'name', value: 'id' }} |
| | | filterOption={false} |
| | | > |
| | | </Select > |
| | | </Form.Item> |
| | | </Col> */} |
| | | </Row> |
| | | {/* <Row> |
| | | <Col span={8}> |
| | | <Form.Item |
| | | name="fourDepartmentId" |
| | | label="所属四级单位" |
| | | > |
| | | <Select |
| | | key="searchSelect" |
| | | allowClear |
| | | disabled={data.type == 'detail'} |
| | | placeholder="请选择" |
| | | options={fourCompanyList} |
| | | fieldNames={{ label: 'name', value: 'id' }} |
| | | filterOption={false} |
| | | > |
| | | </Select > |
| | | </Form.Item> |
| | | </Col> |
| | | </Row> */} |
| | | <Row> |
| | | <Col span={8}> |
| | | <Form.Item |
| | | name="systemPostId" |
| | |
| | | rules={[{ required: true, message: '请选择所属职位' }]} |
| | | > |
| | | <Select |
| | | key="searchSelect" |
| | | allowClear |
| | | disabled={data.type == 'detail'} |
| | | placeholder="请选择" |
| | | options={positionList} |
| | | fieldNames={{ label: 'name', value: 'id' }} |
| | | filterOption={false} |
| | | > |
| | | </Select > |
| | | /> |
| | | </Form.Item> |
| | | </Col> |
| | | <Col span={8}> |
| | | <Form.Item |
| | | name="systemRoleId" |
| | | label="所属角色" |
| | | rules={[{ required: true, message: '请选择所属角色' }]} |
| | | label="后台权限" |
| | | rules={[{ required: true, message: '请选择后台权限' }]} |
| | | > |
| | | <Select |
| | | key="searchSelect" |
| | | allowClear |
| | | disabled={data.type == 'detail'} |
| | | placeholder="请选择" |
| | | options={roleList} |
| | | fieldNames={{ label: 'name', value: 'id' }} |
| | | filterOption={false} |
| | | > |
| | | </Select > |
| | | </Form.Item> |
| | | </Col> |
| | | </Row> |
| | | <Row> |
| | | <Col span={8}> |
| | | <Form.Item |
| | | name="accountLevel" |
| | | label="账号层级" |
| | | rules={[{ required: true, message: '请选择账号层级' }]} |
| | | > |
| | | <Select |
| | | key="searchSelect" |
| | | allowClear |
| | | onChange={(e) => setActiveLevel(e)} |
| | | disabled={data.type == 'detail'} |
| | | placeholder="请选择" |
| | | options={levelList} |
| | | fieldNames={{ label: 'name', value: 'value' }} |
| | | // filterOption={false} |
| | | > |
| | | </Select > |
| | | </Form.Item> |
| | | </Col> |
| | | <Col span={16}> |
| | | <Form.Item |
| | | label="是否管理员" |
| | | labelCol={{ span: 4 }} |
| | | wrapperCol={{ span: 20 }} |
| | | style={{ marginBottom: 0 }} |
| | | > |
| | | <div style={{ display: "flex", flex: 1 }}> |
| | | <Form.Item |
| | | name="isAdmin" |
| | | rules={[{ required: true, message: '是否管理员' }]} |
| | | > |
| | | <Radio.Group |
| | | disabled={data.type == 'detail'} |
| | | // style={style} |
| | | // onChange={onChange} |
| | | // value={value} |
| | | options={[{ value: 0, label: '否', }, { value: 1, label: '是', }, |
| | | |
| | | ]} |
| | | /> |
| | | </Form.Item> |
| | | <div style={{ fontSize: '12px', color: "rgba(0,0,0,0.5)", marginLeft: "10px" }}>管理员主要用于接收实现临期提醒,以及上级端登录</div> |
| | | </div> |
| | | </Form.Item> |
| | | </Col> |
| | | </Row> |
| | | {activeLevel != 1 && ( |
| | | <Row> |
| | | {[2, 3, 4, 5].includes(activeLevel) && ( |
| | | <Col span={8}> |
| | | <Row gutter={16}> |
| | | <Col span={24}> |
| | | <Form.Item |
| | | name="districtsCode" |
| | | label="所属区县" |
| | | rules={[{ required: true, message: '请选择所属区县' }]} |
| | | > |
| | | {/* <Select |
| | | // onChange={changeCountry} |
| | | // value={activeCounty} |
| | | placeholder="请选择" |
| | | options={levelList} |
| | | fieldNames={{ label: 'name', value: 'id' }} |
| | | > |
| | | </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="联系方式" |
| | | label="账号所属层级" |
| | | colon={true} |
| | | required |
| | | labelCol={{ span: 4 }} |
| | | wrapperCol={{ span: 20 }} |
| | | labelCol={{ span: 2 }} |
| | | wrapperCol={{ span: 12 }} |
| | | style={{ marginBottom: 0 }} |
| | | > |
| | | <div style={{ display: "flex", flex: 1 }}> |
| | | <Form.Item |
| | | name="phone" |
| | | <Button type={'primary'} onClick={addAccountLevel} style={{ marginBottom: 8 }}>添加</Button> |
| | | {accountLevels.map((item, idx) => ( |
| | | <Card key={idx} style={{ marginBottom: 8 }} size='small' > |
| | | <div style={{ display: 'flex', alignItems: 'center' }}> |
| | | <Cascader |
| | | style={{ width: 320, marginRight: 16 }} |
| | | placeholder="请选择区域" |
| | | options={cascaderData} |
| | | fieldNames={{ label: 'name', value: 'id' }} |
| | | value={item.area} |
| | | onChange={(value, selectedOptions) => { |
| | | setAccountLevels(levels => { |
| | | const newLevels = [...levels]; |
| | | newLevels[idx] = { |
| | | ...newLevels[idx], |
| | | area: value, |
| | | selectedOptions: selectedOptions, |
| | | // 清空原有数据,确保新选择的数据生效 |
| | | community: '', |
| | | communityId: '', |
| | | districts: '', |
| | | districtsCode: '', |
| | | street: '', |
| | | streetId: '', |
| | | level: selectedOptions?.[0]?.id || '' |
| | | }; |
| | | return newLevels; |
| | | }); |
| | | }} |
| | | /> |
| | | |
| | | <div style={{ marginLeft: 16, marginTop: 22 }}> |
| | | <span style={{ marginRight: 8 }}>是否为纪检委账号:</span> |
| | | <Radio.Group |
| | | style={{ marginRight: 16 }} |
| | | value={item.isDiscipline ?? 0} |
| | | onChange={e => handleDisciplineChange(e, idx)} |
| | | options={[ |
| | | { label: '否', value: 0 }, |
| | | { label: '是', value: 1 } |
| | | ]} |
| | | /> |
| | | </div> |
| | | |
| | | {idx > 0 && <DeleteOutlined style={{ marginRight: 16 }} onClick={() => removeAccountLevel(idx)} disabled={accountLevels.length === 1} />} |
| | | |
| | | </div> |
| | | </Card> |
| | | ))} |
| | | </Form.Item> |
| | | </Col> |
| | | </Row> |
| | | <Row gutter={16}> |
| | | <Col span={8}> |
| | | <Form.Item |
| | | label="联系方式" |
| | | name="phone" |
| | | extra={'联系方式将作为登录账号使用'} |
| | | rules={[{ |
| | | validator: (rule, value) => { |
| | | return new Promise((resolve, reject) => { |
| | |
| | | > |
| | | <Input disabled={data.type == 'detail'} placeholder='请输入联系方式' /> |
| | | </Form.Item> |
| | | <div style={{ fontSize: '12px', color: "rgba(0,0,0,0.5)", marginLeft: "10px" }}>联系方式将作为登录账号使用</div> |
| | | </div> |
| | | </Form.Item> |
| | | </Col> |
| | | </Row> |
| | | <Row> |
| | | <Row gutter={16}> |
| | | <Col span={8}> |
| | | <Form.Item |
| | | required={data.type == 'add'} |
| | |
| | | <Input.Password disabled={data.type == 'detail'} placeholder='请输入' /> |
| | | </Form.Item> |
| | | </Col> |
| | | <Col span={16}> |
| | | </Row> |
| | | <Row gutter={16}> |
| | | <Col span={8}> |
| | | <Form.Item |
| | | label="确认密码" |
| | | required={data.type == 'add'} |
| | | labelCol={{ span: 4 }} |
| | | wrapperCol={{ span: 20 }} |
| | | style={{ marginBottom: 0 }} |
| | | > |
| | | <div style={{ display: "flex", flex: 1 }}> |
| | | <Form.Item |
| | | name="surePassword" |
| | | extra={'密码需要包含大小写字母,数字和特殊符号,且长度为8位以上'} |
| | | required={data.type == 'add'} |
| | | rules={[{ |
| | | validator: (rule, value) => { |
| | | return new Promise((resolve, reject) => { |
| | |
| | | resolve(''); |
| | | }); |
| | | }, |
| | | },]} |
| | | }]} |
| | | > |
| | | <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> |
| | | </Form.Item> |
| | | </Col> |
| | | </Row> |
| | | |
| | | |
| | | </Form> |
| | | <Spin spinning={spinning} fullscreen /> |