refactor(validation): 应用统一验证规则到菜单/字典/配置/通知页面

菜单名称添加长度校验,排序使用 VALIDATION 常量;
字典名称/类型添加长度校验,字典标签/值添加长度校验;
配置名称/键/值添加长度校验;
通知标题添加长度校验,内容添加长度校验。
This commit is contained in:
张翔
2026-05-06 15:38:51 +08:00
parent 6b5f7a517b
commit b99dd73f74
4 changed files with 15 additions and 11 deletions
@@ -5,6 +5,7 @@ import type { ColumnsType } from 'antd/es/table'
import { configApi } from '@/api/config'
import type { ConfigItem, CreateConfigRequest, UpdateConfigRequest, ConfigPageRequest } from '@/api/config'
import type { PageResponse } from '@/api/user.api'
import { VALIDATION } from '@/constants/validation-rules'
import PermissionGuard from '@/components/PermissionGuard'
export default function ConfigManagement() {
@@ -74,9 +75,9 @@ export default function ConfigManagement() {
pagination={{ ...pagination, showSizeChanger: true, showTotal: (t) => `${t}`, onChange: (p, ps) => { setPagination((prev) => ({ ...prev, current: p, pageSize: ps })); setTimeout(loadConfigs, 0) } }} />
<Modal title={editingConfig ? '编辑配置' : '新增配置'} open={modalOpen} onOk={handleSubmit} onCancel={() => setModalOpen(false)} destroyOnHidden>
<Form form={form} layout="vertical">
<Form.Item name="configName" label="配置名称" rules={[{ required: true, message: '请输入配置名称' }]}><Input /></Form.Item>
<Form.Item name="configKey" label="配置键" rules={[{ required: true, message: '请输入配置键' }]}><Input /></Form.Item>
<Form.Item name="configValue" label="配置值" rules={[{ required: true, message: '请输入配置值' }]}><Input /></Form.Item>
<Form.Item name="configName" label="配置名称" rules={VALIDATION.configName.rules}><Input /></Form.Item>
<Form.Item name="configKey" label="配置键" rules={VALIDATION.configKey.rules}><Input /></Form.Item>
<Form.Item name="configValue" label="配置值" rules={VALIDATION.configValue.rules}><Input /></Form.Item>
<Form.Item name="configType" label="类型"><Input /></Form.Item>
<Form.Item name="remark" label="备注"><Input.TextArea rows={3} /></Form.Item>
</Form>
@@ -4,6 +4,7 @@ import { PlusOutlined, EditOutlined, DeleteOutlined } from '@ant-design/icons'
import type { ColumnsType } from 'antd/es/table'
import { dictApi } from '@/api/dict'
import type { DictType, DictData, CreateDictTypeRequest, CreateDictDataRequest, UpdateDictTypeRequest, UpdateDictDataRequest } from '@/api/dict'
import { VALIDATION } from '@/constants/validation-rules'
export default function DictManagement() {
const [dictTypes, setDictTypes] = useState<DictType[]>([])
@@ -88,16 +89,16 @@ export default function DictManagement() {
<Modal title={editingType ? '编辑字典类型' : '新增字典类型'} open={typeModalOpen} onOk={handleTypeSubmit} onCancel={() => setTypeModalOpen(false)} destroyOnHidden>
<Form form={typeForm} layout="vertical">
<Form.Item name="dictName" label="字典名称" rules={[{ required: true }]}><Input /></Form.Item>
<Form.Item name="dictType" label="字典类型" rules={[{ required: true }]}><Input /></Form.Item>
<Form.Item name="dictName" label="字典名称" rules={VALIDATION.dictName.rules}><Input /></Form.Item>
<Form.Item name="dictType" label="字典类型" rules={VALIDATION.dictType.rules}><Input /></Form.Item>
<Form.Item name="status" label="状态" initialValue={1}><Select options={[{ label: '正常', value: 1 }, { label: '停用', value: 0 }]} /></Form.Item>
<Form.Item name="remark" label="备注"><Input.TextArea /></Form.Item>
</Form>
</Modal>
<Modal title={editingData ? '编辑字典数据' : '新增字典数据'} open={dataModalOpen} onOk={handleDataSubmit} onCancel={() => setDataModalOpen(false)} destroyOnHidden>
<Form form={dataForm} layout="vertical">
<Form.Item name="dictLabel" label="字典标签" rules={[{ required: true }]}><Input /></Form.Item>
<Form.Item name="dictValue" label="字典值" rules={[{ required: true }]}><Input /></Form.Item>
<Form.Item name="dictLabel" label="字典标签" rules={VALIDATION.dictLabel.rules}><Input /></Form.Item>
<Form.Item name="dictValue" label="字典值" rules={VALIDATION.dictValue.rules}><Input /></Form.Item>
<Form.Item name="sort" label="排序" initialValue={0}><InputNumber min={0} style={{ width: '100%' }} /></Form.Item>
<Form.Item name="status" label="状态" initialValue={1}><Select options={[{ label: '正常', value: 1 }, { label: '停用', value: 0 }]} /></Form.Item>
<Form.Item name="remark" label="备注"><Input.TextArea /></Form.Item>
@@ -6,6 +6,7 @@ import { noticeApi } from '@/api/loginLog'
import type { Notice, NoticePageRequest } from '@/api/loginLog'
import type { PageResponse } from '@/api/user.api'
import { NoticeStatus, noticeStatusMap } from '@/constants/status'
import { VALIDATION } from '@/constants/validation-rules'
import PermissionGuard from '@/components/PermissionGuard'
export default function NoticeManagement() {
@@ -75,9 +76,9 @@ export default function NoticeManagement() {
pagination={{ ...pagination, showSizeChanger: true, showTotal: (t) => `${t}`, onChange: (p, ps) => { setPagination((prev) => ({ ...prev, current: p, pageSize: ps })); setTimeout(loadNotices, 0) } }} />
<Modal title={editingNotice ? '编辑通知' : '新增通知'} open={modalOpen} onOk={handleSubmit} onCancel={() => setModalOpen(false)} destroyOnHidden width={640}>
<Form form={form} layout="vertical">
<Form.Item name="noticeTitle" label="标题" rules={[{ required: true, message: '请输入标题' }]}><Input /></Form.Item>
<Form.Item name="noticeTitle" label="标题" rules={VALIDATION.noticeTitle.rules}><Input /></Form.Item>
<Form.Item name="noticeType" label="类型"><Select options={[{ label: '通知', value: '1' }, { label: '公告', value: '2' }]} /></Form.Item>
<Form.Item name="noticeContent" label="内容" rules={[{ required: true, message: '请输入内容' }]}><Input.TextArea rows={6} /></Form.Item>
<Form.Item name="noticeContent" label="内容" rules={VALIDATION.noticeContent.rules}><Input.TextArea rows={6} /></Form.Item>
<Form.Item name="status" label="状态" initialValue={NoticeStatus.ACTIVE}><Select options={Object.entries(noticeStatusMap).map(([v, info]) => ({ label: info.label, value: v }))} /></Form.Item>
</Form>
</Modal>
@@ -5,6 +5,7 @@ import type { ColumnsType } from 'antd/es/table'
import { menuApi } from '@/api/menu'
import type { MenuItem, CreateMenuRequest, UpdateMenuRequest } from '@/api/menu'
import { MenuStatus, menuStatusMap } from '@/constants/status'
import { VALIDATION } from '@/constants/validation-rules'
import PermissionGuard from '@/components/PermissionGuard'
export default function MenuManagement() {
@@ -160,7 +161,7 @@ export default function MenuManagement() {
<Form.Item name="parentId" label="上级菜单" initialValue={0}>
<InputNumber style={{ width: '100%' }} />
</Form.Item>
<Form.Item name="name" label="菜单名称" rules={[{ required: true, message: '请输入菜单名称' }]}>
<Form.Item name="name" label="菜单名称" rules={VALIDATION.menuName.rules}>
<Input />
</Form.Item>
<Form.Item name="type" label="类型" initialValue="menu">
@@ -182,7 +183,7 @@ export default function MenuManagement() {
<Form.Item name="permission" label="权限标识">
<Input />
</Form.Item>
<Form.Item name="sort" label="排序" initialValue={0}>
<Form.Item name="sort" label="排序" initialValue={VALIDATION.menuSort.initialValue} rules={VALIDATION.menuSort.rules}>
<InputNumber min={0} style={{ width: '100%' }} />
</Form.Item>
<Form.Item name="status" label="状态" initialValue={MenuStatus.ACTIVE}>