Commit 93a97cd52635423db6dde8bfa908f851962d5d50

Authored by xingyu
1 parent fa79f422

perf: 优化表单校验和查询参数

yudao-ui-admin-vue3/src/utils/tree.ts
@@ -213,7 +213,7 @@ export const eachTree = (treeDatas: any[], callBack: Fn, parentNode = {}) => { @@ -213,7 +213,7 @@ export const eachTree = (treeDatas: any[], callBack: Fn, parentNode = {}) => {
213 * @param {*} parentId 父节点字段 默认 'parentId' 213 * @param {*} parentId 父节点字段 默认 'parentId'
214 * @param {*} children 孩子节点字段 默认 'children' 214 * @param {*} children 孩子节点字段 默认 'children'
215 */ 215 */
216 -export const handleTree = (data, id?: string, parentId?: string, children?: string) => { 216 +export const handleTree = (data: any[], id?: string, parentId?: string, children?: string) => {
217 const config = { 217 const config = {
218 id: id || 'id', 218 id: id || 'id',
219 parentId: parentId || 'parentId', 219 parentId: parentId || 'parentId',
@@ -222,7 +222,7 @@ export const handleTree = (data, id?: string, parentId?: string, children?: stri @@ -222,7 +222,7 @@ export const handleTree = (data, id?: string, parentId?: string, children?: stri
222 222
223 const childrenListMap = {} 223 const childrenListMap = {}
224 const nodeIds = {} 224 const nodeIds = {}
225 - const tree = [] 225 + const tree: any[] = []
226 226
227 for (const d of data) { 227 for (const d of data) {
228 const parentId = d[config.parentId] 228 const parentId = d[config.parentId]
yudao-ui-admin-vue3/src/views/infra/apiAccessLog/apiAccessLog.data.ts
@@ -50,7 +50,16 @@ const crudSchemas = reactive<CrudSchema[]>([ @@ -50,7 +50,16 @@ const crudSchemas = reactive<CrudSchema[]>([
50 }, 50 },
51 { 51 {
52 label: '请求时间', 52 label: '请求时间',
53 - field: 'beginTime' 53 + field: 'beginTime',
  54 + search: {
  55 + show: true,
  56 + component: 'DatePicker',
  57 + componentProps: {
  58 + type: 'datetimerange',
  59 + valueFormat: 'YYYY-MM-DD HH:mm:ss',
  60 + defaultTime: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)]
  61 + }
  62 + }
54 }, 63 },
55 { 64 {
56 label: '执行时长', 65 label: '执行时长',
yudao-ui-admin-vue3/src/views/infra/apiErrorLog/apiErrorLog.data.ts
@@ -50,7 +50,16 @@ const crudSchemas = reactive<CrudSchema[]>([ @@ -50,7 +50,16 @@ const crudSchemas = reactive<CrudSchema[]>([
50 }, 50 },
51 { 51 {
52 label: '异常发生时间', 52 label: '异常发生时间',
53 - field: 'exceptionTime' 53 + field: 'exceptionTime',
  54 + search: {
  55 + show: true,
  56 + component: 'DatePicker',
  57 + componentProps: {
  58 + type: 'datetimerange',
  59 + valueFormat: 'YYYY-MM-DD HH:mm:ss',
  60 + defaultTime: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)]
  61 + }
  62 + }
54 }, 63 },
55 { 64 {
56 label: '异常名', 65 label: '异常名',
yudao-ui-admin-vue3/src/views/infra/codegen/codegen.data.ts
@@ -50,6 +50,15 @@ const crudSchemas = reactive<CrudSchema[]>([ @@ -50,6 +50,15 @@ const crudSchemas = reactive<CrudSchema[]>([
50 field: 'createTime', 50 field: 'createTime',
51 form: { 51 form: {
52 show: false 52 show: false
  53 + },
  54 + search: {
  55 + show: true,
  56 + component: 'DatePicker',
  57 + componentProps: {
  58 + type: 'datetimerange',
  59 + valueFormat: 'YYYY-MM-DD HH:mm:ss',
  60 + defaultTime: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)]
  61 + }
53 } 62 }
54 }, 63 },
55 { 64 {
yudao-ui-admin-vue3/src/views/infra/config/config.data.ts
@@ -91,6 +91,15 @@ const crudSchemas = reactive<CrudSchema[]>([ @@ -91,6 +91,15 @@ const crudSchemas = reactive<CrudSchema[]>([
91 field: 'createTime', 91 field: 'createTime',
92 form: { 92 form: {
93 show: false 93 show: false
  94 + },
  95 + search: {
  96 + show: true,
  97 + component: 'DatePicker',
  98 + componentProps: {
  99 + type: 'datetimerange',
  100 + valueFormat: 'YYYY-MM-DD HH:mm:ss',
  101 + defaultTime: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)]
  102 + }
94 } 103 }
95 }, 104 },
96 { 105 {
yudao-ui-admin-vue3/src/views/infra/dataSourceConfig/dataSourceConfig.data.ts
@@ -58,6 +58,15 @@ const crudSchemas = reactive<CrudSchema[]>([ @@ -58,6 +58,15 @@ const crudSchemas = reactive<CrudSchema[]>([
58 field: 'createTime', 58 field: 'createTime',
59 form: { 59 form: {
60 show: false 60 show: false
  61 + },
  62 + search: {
  63 + show: true,
  64 + component: 'DatePicker',
  65 + componentProps: {
  66 + type: 'datetimerange',
  67 + valueFormat: 'YYYY-MM-DD HH:mm:ss',
  68 + defaultTime: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)]
  69 + }
61 } 70 }
62 }, 71 },
63 { 72 {
yudao-ui-admin-vue3/src/views/infra/fileConfig/fileConfig.data.ts
@@ -76,6 +76,15 @@ const crudSchemas = reactive<CrudSchema[]>([ @@ -76,6 +76,15 @@ const crudSchemas = reactive<CrudSchema[]>([
76 field: 'createTime', 76 field: 'createTime',
77 form: { 77 form: {
78 show: false 78 show: false
  79 + },
  80 + search: {
  81 + show: true,
  82 + component: 'DatePicker',
  83 + componentProps: {
  84 + type: 'datetimerange',
  85 + valueFormat: 'YYYY-MM-DD HH:mm:ss',
  86 + defaultTime: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)]
  87 + }
79 } 88 }
80 }, 89 },
81 { 90 {
yudao-ui-admin-vue3/src/views/infra/fileList/fileList.data.ts
@@ -36,6 +36,15 @@ const crudSchemas = reactive<CrudSchema[]>([ @@ -36,6 +36,15 @@ const crudSchemas = reactive<CrudSchema[]>([
36 field: 'createTime', 36 field: 'createTime',
37 form: { 37 form: {
38 show: false 38 show: false
  39 + },
  40 + search: {
  41 + show: true,
  42 + component: 'DatePicker',
  43 + componentProps: {
  44 + type: 'datetimerange',
  45 + valueFormat: 'YYYY-MM-DD HH:mm:ss',
  46 + defaultTime: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)]
  47 + }
39 } 48 }
40 }, 49 },
41 { 50 {
yudao-ui-admin-vue3/src/views/pay/app/app.data.ts
@@ -8,9 +8,10 @@ const { t } = useI18n() // 国际化 @@ -8,9 +8,10 @@ const { t } = useI18n() // 国际化
8 // 表单校验 8 // 表单校验
9 export const rules = reactive({ 9 export const rules = reactive({
10 name: [required], 10 name: [required],
11 - code: [required],  
12 - sort: [required],  
13 - status: [required] 11 + status: [required],
  12 + payNotifyUrl: [required],
  13 + refundNotifyUrl: [required],
  14 + merchantId: [required]
14 }) 15 })
15 16
16 // CrudSchema 17 // CrudSchema
@@ -53,6 +54,15 @@ const crudSchemas = reactive<CrudSchema[]>([ @@ -53,6 +54,15 @@ const crudSchemas = reactive<CrudSchema[]>([
53 field: 'createTime', 54 field: 'createTime',
54 form: { 55 form: {
55 show: false 56 show: false
  57 + },
  58 + search: {
  59 + show: true,
  60 + component: 'DatePicker',
  61 + componentProps: {
  62 + type: 'datetimerange',
  63 + valueFormat: 'YYYY-MM-DD HH:mm:ss',
  64 + defaultTime: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)]
  65 + }
56 } 66 }
57 }, 67 },
58 { 68 {
yudao-ui-admin-vue3/src/views/pay/merchant/merchant.data.ts
@@ -7,9 +7,9 @@ const { t } = useI18n() // 国际化 @@ -7,9 +7,9 @@ const { t } = useI18n() // 国际化
7 7
8 // 表单校验 8 // 表单校验
9 export const rules = reactive({ 9 export const rules = reactive({
  10 + no: [required],
10 name: [required], 11 name: [required],
11 - code: [required],  
12 - sort: [required], 12 + shortName: [required],
13 status: [required] 13 status: [required]
14 }) 14 })
15 15
@@ -77,6 +77,15 @@ const crudSchemas = reactive<CrudSchema[]>([ @@ -77,6 +77,15 @@ const crudSchemas = reactive<CrudSchema[]>([
77 field: 'createTime', 77 field: 'createTime',
78 form: { 78 form: {
79 show: false 79 show: false
  80 + },
  81 + search: {
  82 + show: true,
  83 + component: 'DatePicker',
  84 + componentProps: {
  85 + type: 'datetimerange',
  86 + valueFormat: 'YYYY-MM-DD HH:mm:ss',
  87 + defaultTime: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)]
  88 + }
80 } 89 }
81 }, 90 },
82 { 91 {
yudao-ui-admin-vue3/src/views/pay/order/order.data.ts
@@ -158,6 +158,22 @@ const crudSchemas = reactive<CrudSchema[]>([ @@ -158,6 +158,22 @@ const crudSchemas = reactive<CrudSchema[]>([
158 field: 'channelOrderNo' 158 field: 'channelOrderNo'
159 }, 159 },
160 { 160 {
  161 + label: t('common.createTime'),
  162 + field: 'createTime',
  163 + form: {
  164 + show: false
  165 + },
  166 + search: {
  167 + show: true,
  168 + component: 'DatePicker',
  169 + componentProps: {
  170 + type: 'datetimerange',
  171 + valueFormat: 'YYYY-MM-DD HH:mm:ss',
  172 + defaultTime: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)]
  173 + }
  174 + }
  175 + },
  176 + {
161 label: t('table.action'), 177 label: t('table.action'),
162 field: 'action', 178 field: 'action',
163 width: '270px', 179 width: '270px',
yudao-ui-admin-vue3/src/views/pay/refund/refund.data.ts
@@ -84,6 +84,15 @@ const crudSchemas = reactive<CrudSchema[]>([ @@ -84,6 +84,15 @@ const crudSchemas = reactive<CrudSchema[]>([
84 field: 'createTime', 84 field: 'createTime',
85 form: { 85 form: {
86 show: false 86 show: false
  87 + },
  88 + search: {
  89 + show: true,
  90 + component: 'DatePicker',
  91 + componentProps: {
  92 + type: 'datetimerange',
  93 + valueFormat: 'YYYY-MM-DD HH:mm:ss',
  94 + defaultTime: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)]
  95 + }
87 } 96 }
88 }, 97 },
89 { 98 {
yudao-ui-admin-vue3/src/views/system/dept/dept.data.ts
1 import { required } from '@/utils/formRules' 1 import { required } from '@/utils/formRules'
2 import { reactive } from 'vue' 2 import { reactive } from 'vue'
  3 +// 表单校验
  4 +export const rules = reactive({
  5 + name: [required],
  6 + sort: [required],
  7 + email: [required],
  8 + phone: [
  9 + {
  10 + pattern:
  11 + /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[189]))\d{8}$/,
  12 + trigger: 'blur',
  13 + message: '请输入正确的手机号码'
  14 + }
  15 + ]
  16 +})
3 17
4 export const modelSchema = reactive<FormSchema[]>([ 18 export const modelSchema = reactive<FormSchema[]>([
5 { 19 {
yudao-ui-admin-vue3/src/views/system/dept/index.vue
@@ -5,7 +5,7 @@ import { handleTree } from &#39;@/utils/tree&#39; @@ -5,7 +5,7 @@ import { handleTree } from &#39;@/utils/tree&#39;
5 import { onMounted, ref, unref, watch } from 'vue' 5 import { onMounted, ref, unref, watch } from 'vue'
6 import * as DeptApi from '@/api/system/dept' 6 import * as DeptApi from '@/api/system/dept'
7 import { Form, FormExpose } from '@/components/Form' 7 import { Form, FormExpose } from '@/components/Form'
8 -import { modelSchema } from './dept.data' 8 +import { modelSchema, rules } from './dept.data'
9 import { DeptVO } from '@/api/system/dept/types' 9 import { DeptVO } from '@/api/system/dept/types'
10 import { useMessage } from '@/hooks/web/useMessage' 10 import { useMessage } from '@/hooks/web/useMessage'
11 import { getListSimpleUsersApi } from '@/api/system/user' 11 import { getListSimpleUsersApi } from '@/api/system/user'
@@ -159,7 +159,7 @@ onMounted(async () =&gt; { @@ -159,7 +159,7 @@ onMounted(async () =&gt; {
159 </div> 159 </div>
160 <div v-if="showForm"> 160 <div v-if="showForm">
161 <!-- 操作工具栏 --> 161 <!-- 操作工具栏 -->
162 - <Form :schema="modelSchema" ref="formRef"> 162 + <Form ref="formRef" :schema="modelSchema" :rules="rules">
163 <template #parentId> 163 <template #parentId>
164 <el-tree-select 164 <el-tree-select
165 node-key="id" 165 node-key="id"
yudao-ui-admin-vue3/src/views/system/dict/dict.data.ts
@@ -7,9 +7,9 @@ import { CrudSchema, useCrudSchemas } from &#39;@/hooks/web/useCrudSchemas&#39; @@ -7,9 +7,9 @@ import { CrudSchema, useCrudSchemas } from &#39;@/hooks/web/useCrudSchemas&#39;
7 const { t } = useI18n() 7 const { t } = useI18n()
8 // 表单校验 8 // 表单校验
9 export const dictDataRules = reactive({ 9 export const dictDataRules = reactive({
10 - dictType: [required],  
11 label: [required], 10 label: [required],
12 - value: [required] 11 + value: [required],
  12 + sort: [required]
13 }) 13 })
14 // crudSchemas 14 // crudSchemas
15 export const crudSchemas = reactive<CrudSchema[]>([ 15 export const crudSchemas = reactive<CrudSchema[]>([
yudao-ui-admin-vue3/src/views/system/menu/index.vue
@@ -25,11 +25,12 @@ import { MenuVO } from &#39;@/api/system/menu/types&#39; @@ -25,11 +25,12 @@ import { MenuVO } from &#39;@/api/system/menu/types&#39;
25 import { SystemMenuTypeEnum, CommonStatusEnum } from '@/utils/constants' 25 import { SystemMenuTypeEnum, CommonStatusEnum } from '@/utils/constants'
26 import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' 26 import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
27 import { useMessage } from '@/hooks/web/useMessage' 27 import { useMessage } from '@/hooks/web/useMessage'
  28 +import { required } from '@/utils/formRules.js'
28 const message = useMessage() 29 const message = useMessage()
29 const { t } = useI18n() // 国际化 30 const { t } = useI18n() // 国际化
30 // ========== 创建菜单树结构 ========== 31 // ========== 创建菜单树结构 ==========
31 const loading = ref(true) 32 const loading = ref(true)
32 -const menuData = ref([]) // 树形结构 33 +const menuData = ref<any[]>([]) // 树形结构
33 const getList = async () => { 34 const getList = async () => {
34 const res = await MenuApi.getMenuListApi(queryParams) 35 const res = await MenuApi.getMenuListApi(queryParams)
35 menuData.value = handleTree(res) 36 menuData.value = handleTree(res)
@@ -44,7 +45,7 @@ const menuProps = { @@ -44,7 +45,7 @@ const menuProps = {
44 const menuOptions = ref() // 树形结构 45 const menuOptions = ref() // 树形结构
45 const getTree = async () => { 46 const getTree = async () => {
46 const res = await MenuApi.listSimpleMenusApi() 47 const res = await MenuApi.listSimpleMenusApi()
47 - const menu = { id: 0, name: '主类目', children: [] } 48 + const menu = { id: 0, name: '主类目', children: [] as any[] }
48 menu.children = handleTree(res) 49 menu.children = handleTree(res)
49 console.info(menu) 50 console.info(menu)
50 menuOptions.value = menu 51 menuOptions.value = menu
@@ -85,12 +86,12 @@ const menuForm = ref&lt;MenuVO&gt;({ @@ -85,12 +86,12 @@ const menuForm = ref&lt;MenuVO&gt;({
85 createTime: '' 86 createTime: ''
86 }) 87 })
87 // 表单校验 88 // 表单校验
88 -const rules = {  
89 - name: [{ required: true, message: '菜单名称不能为空', trigger: 'blur' }],  
90 - sort: [{ required: true, message: '菜单顺序不能为空', trigger: 'blur' }],  
91 - path: [{ required: true, message: '路由地址不能为空', trigger: 'blur' }],  
92 - status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]  
93 -} 89 +const rules = reactive({
  90 + name: [required],
  91 + sort: [required],
  92 + path: [required],
  93 + status: [required]
  94 +})
94 // 设置标题 95 // 设置标题
95 const setDialogTile = (type: string) => { 96 const setDialogTile = (type: string) => {
96 dialogTitle.value = t('action.' + type) 97 dialogTitle.value = t('action.' + type)
yudao-ui-admin-vue3/src/views/system/notice/notice.data.ts
@@ -8,8 +8,7 @@ const { t } = useI18n() // 国际化 @@ -8,8 +8,7 @@ const { t } = useI18n() // 国际化
8 // 表单校验 8 // 表单校验
9 export const rules = reactive({ 9 export const rules = reactive({
10 title: [required], 10 title: [required],
11 - type: [required],  
12 - status: [required] 11 + type: [required]
13 }) 12 })
14 13
15 // CrudSchema 14 // CrudSchema
yudao-ui-admin-vue3/src/views/system/post/post.data.ts
@@ -9,8 +9,7 @@ const { t } = useI18n() // 国际化 @@ -9,8 +9,7 @@ const { t } = useI18n() // 国际化
9 export const rules = reactive({ 9 export const rules = reactive({
10 name: [required], 10 name: [required],
11 code: [required], 11 code: [required],
12 - sort: [required],  
13 - status: [required] 12 + sort: [required]
14 }) 13 })
15 14
16 // CrudSchema 15 // CrudSchema
yudao-ui-admin-vue3/src/views/system/sms/smsTemplate/sms.template.data.ts
@@ -8,13 +8,12 @@ const { t } = useI18n() // 国际化 @@ -8,13 +8,12 @@ const { t } = useI18n() // 国际化
8 // 表单校验 8 // 表单校验
9 export const rules = reactive({ 9 export const rules = reactive({
10 type: [required], 10 type: [required],
  11 + status: [required],
  12 + code: [required],
11 name: [required], 13 name: [required],
12 content: [required], 14 content: [required],
13 apiTemplateId: [required], 15 apiTemplateId: [required],
14 - channelId: [required],  
15 - code: [required],  
16 - sort: [required],  
17 - status: [required] 16 + channelId: [required]
18 }) 17 })
19 18
20 // CrudSchema 19 // CrudSchema
yudao-ui-admin-vue3/src/views/system/user/index.vue
@@ -63,7 +63,7 @@ const { getList, setSearchParams, delList, exportList } = methods @@ -63,7 +63,7 @@ const { getList, setSearchParams, delList, exportList } = methods
63 63
64 // ========== 创建部门树结构 ========== 64 // ========== 创建部门树结构 ==========
65 const filterText = ref('') 65 const filterText = ref('')
66 -const deptOptions = ref([]) // 树形结构 66 +const deptOptions = ref<any[]>([]) // 树形结构
67 const searchForm = ref<FormExpose>() 67 const searchForm = ref<FormExpose>()
68 const treeRef = ref<InstanceType<typeof ElTree>>() 68 const treeRef = ref<InstanceType<typeof ElTree>>()
69 const getTree = async () => { 69 const getTree = async () => {
yudao-ui-admin-vue3/src/views/system/user/user.data.ts
@@ -7,8 +7,18 @@ import { CrudSchema, useCrudSchemas } from &#39;@/hooks/web/useCrudSchemas&#39; @@ -7,8 +7,18 @@ import { CrudSchema, useCrudSchemas } from &#39;@/hooks/web/useCrudSchemas&#39;
7 const { t } = useI18n() 7 const { t } = useI18n()
8 // 表单校验 8 // 表单校验
9 export const rules = reactive({ 9 export const rules = reactive({
  10 + username: [required],
10 nickname: [required], 11 nickname: [required],
11 - status: [required] 12 + email: [required],
  13 + status: [required],
  14 + mobile: [
  15 + {
  16 + pattern:
  17 + /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[189]))\d{8}$/,
  18 + trigger: 'blur',
  19 + message: '请输入正确的手机号码'
  20 + }
  21 + ]
12 }) 22 })
13 // crudSchemas 23 // crudSchemas
14 const crudSchemas = reactive<CrudSchema[]>([ 24 const crudSchemas = reactive<CrudSchema[]>([
yudao-ui-admin/src/views/system/dept/index.vue
@@ -167,7 +167,7 @@ export default { @@ -167,7 +167,7 @@ export default {
167 ], 167 ],
168 phone: [ 168 phone: [
169 { 169 {
170 - pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, 170 + pattern: /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[189]))\d{8}$/,
171 message: "请输入正确的手机号码", 171 message: "请输入正确的手机号码",
172 trigger: "blur" 172 trigger: "blur"
173 } 173 }
yudao-ui-admin/src/views/system/tenant/index.vue
@@ -183,8 +183,6 @@ export default { @@ -183,8 +183,6 @@ export default {
183 accountCount: [{ required: true, message: "账号额度不能为空", trigger: "blur" }], 183 accountCount: [{ required: true, message: "账号额度不能为空", trigger: "blur" }],
184 expireTime: [{ required: true, message: "过期时间不能为空", trigger: "blur" }], 184 expireTime: [{ required: true, message: "过期时间不能为空", trigger: "blur" }],
185 domain: [{ required: true, message: "绑定域名不能为空", trigger: "blur" }], 185 domain: [{ required: true, message: "绑定域名不能为空", trigger: "blur" }],
186 - username: [{ required: true, message: "用户名称不能为空", trigger: "blur" }],  
187 - password: [{ required: true, message: "用户密码不能为空", trigger: "blur" }],  
188 } 186 }
189 }; 187 };
190 }, 188 },