From 20e32587ecbab27e4436f2f64a15faa3c89e4f41 Mon Sep 17 00:00:00 2001 From: pyt <626651354@qq.com> Date: 星期二, 20 五月 2025 21:39:59 +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 | 699 +++++++++++++++++++++++++++------------------------------- 1 files changed, 324 insertions(+), 375 deletions(-) diff --git a/management/src/pages/setting/user/components/addAndEdit.jsx b/management/src/pages/setting/user/components/addAndEdit.jsx index fb5e4ef..9bc2cb8 100644 --- a/management/src/pages/setting/user/components/addAndEdit.jsx +++ b/management/src/pages/setting/user/components/addAndEdit.jsx @@ -1,7 +1,9 @@ -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 }, @@ -27,7 +29,10 @@ //所属角色 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('') //所属区县 @@ -37,11 +42,11 @@ 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(() => { // 获取单位 @@ -51,63 +56,14 @@ 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) @@ -128,9 +84,51 @@ // 保存 const okHandle = () => { form.validateFields().then((values) => { - if(values.password){ + // 校验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{ + } else { delete values.password } if (values.DepartmentId) { @@ -144,54 +142,73 @@ 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; + }); + } + // 街道级别 + 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); + }); } - 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 = [] @@ -208,8 +225,89 @@ 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: '' }) }) @@ -235,13 +333,32 @@ 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() @@ -258,8 +375,8 @@ <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" @@ -269,90 +386,6 @@ <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" @@ -360,197 +393,120 @@ 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> + <Row gutter={16}> + <Col span={24}> + <Form.Item + label="账号所属层级" + colon={true} + required + labelCol={{ span: 2 }} + wrapperCol={{ span: 12 }} + style={{ marginBottom: 0 }} + > + <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 - 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}> - <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="联系方式" - required - labelCol={{ span: 4 }} - wrapperCol={{ span: 20 }} - style={{ marginBottom: 0 }} + name="phone" + extra={'联系方式将作为登录账号使用'} + rules={[{ + validator: (rule, value) => { + return new Promise((resolve, reject) => { + if (!value) { + reject('请输入联系方式'); + } + const phoneRegex = /^((\+86)?(13|14|15|16|17|18|19)[0-9]{9})|((\+86)?(0[0-9]{2,3})?([2-9][0-9]{6,7}))$/; + if (!phoneRegex.test(value)) { + reject('请输入正确的电话号码'); + } + resolve(''); + }); + }, + }]} > - <div style={{ display: "flex", flex: 1 }}> - <Form.Item - name="phone" - - rules={[{ - validator: (rule, value) => { - return new Promise((resolve, reject) => { - if (!value) { - reject('请输入联系方式'); - } - const phoneRegex = /^((\+86)?(13|14|15|16|17|18|19)[0-9]{9})|((\+86)?(0[0-9]{2,3})?([2-9][0-9]{6,7}))$/; - if (!phoneRegex.test(value)) { - reject('请输入正确的电话号码'); - } - resolve(''); - }); - }, - }]} - > - <Input disabled={data.type == 'detail'} placeholder='请输入联系方式' /> - </Form.Item> - <div style={{ fontSize: '12px', color: "rgba(0,0,0,0.5)", marginLeft: "10px" }}>联系方式将作为登录账号使用</div> - </div> + <Input disabled={data.type == 'detail'} placeholder='请输入联系方式' /> </Form.Item> </Col> </Row> - <Row> + <Row gutter={16}> <Col span={8}> <Form.Item required={data.type == 'add'} @@ -574,39 +530,32 @@ <Input.Password disabled={data.type == 'detail'} placeholder='请输入' /> </Form.Item> </Col> - <Col span={16}> + </Row> + <Row gutter={16}> + <Col span={8}> <Form.Item label="确认密码" + name="surePassword" + extra={'密码需要包含大小写字母,数字和特殊符号,且长度为8位以上'} required={data.type == 'add'} - labelCol={{ span: 4 }} - wrapperCol={{ span: 20 }} - style={{ marginBottom: 0 }} + rules={[{ + validator: (rule, value) => { + return new Promise((resolve, reject) => { + if (!value && data.type == 'add') { + reject('请再次输入新密码'); + } + if (value != form.getFieldValue('password') && data.type == 'add') { + reject('两次密码请保持一致'); + } + resolve(''); + }); + }, + }]} > - <div style={{ display: "flex", flex: 1 }}> - <Form.Item - name="surePassword" - rules={[{ - validator: (rule, value) => { - return new Promise((resolve, reject) => { - if (!value && data.type == 'add') { - reject('请再次输入新密码'); - } - if (value != form.getFieldValue('password') && data.type == 'add') { - 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> + <Input.Password disabled={data.type == 'detail'} placeholder='请输入' /> </Form.Item> </Col> </Row> - </Form> <Spin spinning={spinning} fullscreen /> -- Gitblit v1.7.1