diff --git a/mock/role/index.ts b/mock/role/index.ts
index b109441..905ba9b 100644
--- a/mock/role/index.ts
+++ b/mock/role/index.ts
@@ -329,6 +329,14 @@ const adminList = [
meta: {
title: 'useTagsView'
}
+ },
+ {
+ path: 'useValidator',
+ component: 'views/hooks/useValidator',
+ name: 'UseValidator',
+ meta: {
+ title: 'useValidator'
+ }
}
// {
// path: 'useCrudSchemas',
@@ -598,6 +606,7 @@ const testList: string[] = [
'/hooks',
'/hooks/useWatermark',
'/hooks/useTagsView',
+ '/hooks/useValidator',
// '/hooks/useCrudSchemas',
'/level',
'/level/menu1',
diff --git a/src/hooks/web/useGuide.ts b/src/hooks/web/useGuide.ts
new file mode 100644
index 0000000..7fd2fb0
--- /dev/null
+++ b/src/hooks/web/useGuide.ts
@@ -0,0 +1,49 @@
+import { Config, driver } from 'driver.js'
+import 'driver.js/dist/driver.css'
+import { useDesign } from '@/hooks/web/useDesign'
+import { useI18n } from '@/hooks/web/useI18n'
+
+const { t } = useI18n()
+
+const { variables } = useDesign()
+
+export const useGuide = (options?: Config) => {
+ const driverObj = driver(
+ options || {
+ showProgress: true,
+ nextBtnText: t('common.nextLabel'),
+ prevBtnText: t('common.prevLabel'),
+ doneBtnText: t('common.doneLabel'),
+ steps: [
+ {
+ element: `#${variables.namespace}-menu`,
+ popover: {
+ title: t('common.menu'),
+ description: t('common.menuDes'),
+ side: 'right'
+ }
+ },
+ {
+ element: `#${variables.namespace}-tool-header`,
+ popover: {
+ title: t('common.tool'),
+ description: t('common.toolDes'),
+ side: 'left'
+ }
+ },
+ {
+ element: `#${variables.namespace}-tags-view`,
+ popover: {
+ title: t('common.tagsView'),
+ description: t('common.tagsViewDes'),
+ side: 'bottom'
+ }
+ }
+ ]
+ }
+ )
+
+ return {
+ ...driverObj
+ }
+}
diff --git a/src/hooks/web/useValidator.ts b/src/hooks/web/useValidator.ts
index a0d36c3..cd9d43a 100644
--- a/src/hooks/web/useValidator.ts
+++ b/src/hooks/web/useValidator.ts
@@ -1,56 +1,53 @@
import { useI18n } from '@/hooks/web/useI18n'
+import { FormItemRule } from 'element-plus'
const { t } = useI18n()
-type Callback = (error?: string | Error | undefined) => void
-
interface LengthRange {
min: number
max: number
- message: string
+ message?: string
}
export const useValidator = () => {
- const required = (message?: string) => {
+ const required = (message?: string): FormItemRule => {
return {
required: true,
message: message || t('common.required')
}
}
- const lengthRange = (val: any, callback: Callback, options: LengthRange) => {
+ const lengthRange = (options: LengthRange): FormItemRule => {
const { min, max, message } = options
- if (val.length < min || val.length > max) {
- callback(new Error(message))
- } else {
- callback()
+
+ return {
+ min,
+ max,
+ message: message || t('common.lengthRange', { min, max })
}
}
- const notSpace = (val: any, callback: Callback, message: string) => {
- // 用户名不能有空格
- if (val.indexOf(' ') !== -1) {
- callback(new Error(message))
- } else {
- callback()
+ const notSpace = (message?: string): FormItemRule => {
+ return {
+ validator: (_, val, callback) => {
+ if (val.indexOf(' ') !== -1) {
+ callback(new Error(message || t('common.notSpace')))
+ } else {
+ callback()
+ }
+ }
}
}
- const notSpecialCharacters = (val: any, callback: Callback, message: string) => {
- // 密码不能是特殊字符
- if (/[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/gi.test(val)) {
- callback(new Error(message))
- } else {
- callback()
- }
- }
-
- // 两个字符串是否想等
- const isEqual = (val1: string, val2: string, callback: Callback, message: string) => {
- if (val1 === val2) {
- callback()
- } else {
- callback(new Error(message))
+ const notSpecialCharacters = (message?: string): FormItemRule => {
+ return {
+ validator: (_, val, callback) => {
+ if (/[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/gi.test(val)) {
+ callback(new Error(message || t('common.notSpecialCharacters')))
+ } else {
+ callback()
+ }
+ }
}
}
@@ -58,7 +55,6 @@ export const useValidator = () => {
required,
lengthRange,
notSpace,
- notSpecialCharacters,
- isEqual
+ notSpecialCharacters
}
}
diff --git a/src/locales/en.ts b/src/locales/en.ts
index 4129526..2f7ccca 100644
--- a/src/locales/en.ts
+++ b/src/locales/en.ts
@@ -44,7 +44,11 @@ export default {
refresh: 'Refresh',
fullscreen: 'Fullscreen',
size: 'Size',
- columnSetting: 'Column setting'
+ columnSetting: 'Column setting',
+ lengthRange: 'The length should be between {min} and {max}',
+ notSpace: 'Spaces are not allowed',
+ notSpecialCharacters: 'Special characters are not allowed',
+ isEqual: 'The two are not equal'
},
lock: {
lockScreen: 'Lock screen',
diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts
index d2f0e6d..44ac79f 100644
--- a/src/locales/zh-CN.ts
+++ b/src/locales/zh-CN.ts
@@ -44,7 +44,11 @@ export default {
refresh: '刷新',
fullscreen: '全屏',
size: '尺寸',
- columnSetting: '列设置'
+ columnSetting: '列设置',
+ lengthRange: '长度在 {min} 到 {max} 个字符',
+ notSpace: '不能包含空格',
+ notSpecialCharacters: '不能包含特殊字符',
+ isEqual: '两次输入不一致'
},
lock: {
lockScreen: '锁定屏幕',
diff --git a/src/router/index.ts b/src/router/index.ts
index a20413a..3d4487f 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -371,6 +371,14 @@ export const asyncRouterMap: AppRouteRecordRaw[] = [
meta: {
title: 'useTagsView'
}
+ },
+ {
+ path: 'useValidator',
+ component: () => import('@/views/hooks/useValidator.vue'),
+ name: 'UseValidator',
+ meta: {
+ title: 'useValidator'
+ }
}
// {
// path: 'useCrudSchemas',
diff --git a/src/views/Guide/Guide.vue b/src/views/Guide/Guide.vue
index ca0a4f5..1350d22 100644
--- a/src/views/Guide/Guide.vue
+++ b/src/views/Guide/Guide.vue
@@ -2,49 +2,14 @@
import { ContentWrap } from '@/components/ContentWrap'
import { useI18n } from '@/hooks/web/useI18n'
import { ElButton } from 'element-plus'
-import { driver } from 'driver.js'
-import 'driver.js/dist/driver.css'
-import { useDesign } from '@/hooks/web/useDesign'
+import { useGuide } from '@/hooks/web/useGuide'
const { t } = useI18n()
-const { variables } = useDesign()
-
-const driverObj = driver({
- showProgress: true,
- nextBtnText: t('common.nextLabel'),
- prevBtnText: t('common.prevLabel'),
- doneBtnText: t('common.doneLabel'),
- steps: [
- {
- element: `#${variables.namespace}-menu`,
- popover: {
- title: t('common.menu'),
- description: t('common.menuDes'),
- side: 'right'
- }
- },
- {
- element: `#${variables.namespace}-tool-header`,
- popover: {
- title: t('common.tool'),
- description: t('common.toolDes'),
- side: 'left'
- }
- },
- {
- element: `#${variables.namespace}-tags-view`,
- popover: {
- title: t('common.tagsView'),
- description: t('common.tagsViewDes'),
- side: 'bottom'
- }
- }
- ]
-})
+const { drive } = useGuide()
const guideStart = () => {
- driverObj.drive()
+ drive()
}
diff --git a/src/views/hooks/useValidator.vue b/src/views/hooks/useValidator.vue
new file mode 100644
index 0000000..c3d6131
--- /dev/null
+++ b/src/views/hooks/useValidator.vue
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+