mirror of
https://github.com/vbenjs/vue-vben-admin.git
synced 2025-01-23 01:30:26 +08:00
perf: display border status color when the form is verified incorrectly (#4407)
* perf: display border status color when the form is verified incorrectly * chore: adjust the document preview file order
This commit is contained in:
parent
02c4014ae3
commit
bfae9626dd
@ -3,3 +3,5 @@ node_modules
|
|||||||
.gitignore
|
.gitignore
|
||||||
*.md
|
*.md
|
||||||
dist
|
dist
|
||||||
|
.turbo
|
||||||
|
dist.zip
|
||||||
|
1
.vscode/settings.json
vendored
1
.vscode/settings.json
vendored
@ -212,7 +212,6 @@
|
|||||||
"*.env": "$(capture).env.*",
|
"*.env": "$(capture).env.*",
|
||||||
"README.md": "README*,CHANGELOG*,LICENSE,CNAME",
|
"README.md": "README*,CHANGELOG*,LICENSE,CNAME",
|
||||||
"package.json": "pnpm-lock.yaml,pnpm-workspace.yaml,.gitattributes,.gitignore,.gitpod.yml,.npmrc,.browserslistrc,.node-version,.git*,.tazerc.json",
|
"package.json": "pnpm-lock.yaml,pnpm-workspace.yaml,.gitattributes,.gitignore,.gitpod.yml,.npmrc,.browserslistrc,.node-version,.git*,.tazerc.json",
|
||||||
"Dockerfile": "Dockerfile,.docker*,docker-entrypoint.sh,build-local-docker*,nginx.conf",
|
|
||||||
"eslint.config.mjs": ".eslintignore,.prettierignore,.stylelintignore,.commitlintrc.*,.prettierrc.*,stylelint.config.*,.lintstagedrc.mjs,cspell.json",
|
"eslint.config.mjs": ".eslintignore,.prettierignore,.stylelintignore,.commitlintrc.*,.prettierrc.*,stylelint.config.*,.lintstagedrc.mjs,cspell.json",
|
||||||
"tailwind.config.mjs": "postcss.*"
|
"tailwind.config.mjs": "postcss.*"
|
||||||
},
|
},
|
||||||
|
@ -83,7 +83,12 @@ export const demoPreviewPlugin = (md: MarkdownRenderer) => {
|
|||||||
if (!state.tokens[index]) {
|
if (!state.tokens[index]) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
const firstString = 'index.vue';
|
||||||
|
childFiles = childFiles.sort((a, b) => {
|
||||||
|
if (a === firstString) return -1;
|
||||||
|
if (b === firstString) return 1;
|
||||||
|
return a.localeCompare(b, 'en', { sensitivity: 'base' });
|
||||||
|
});
|
||||||
state.tokens[index].content =
|
state.tokens[index].content =
|
||||||
`<DemoPreview files="${encodeURIComponent(JSON.stringify(childFiles))}" ><${ComponentName}/>
|
`<DemoPreview files="${encodeURIComponent(JSON.stringify(childFiles))}" ><${ComponentName}/>
|
||||||
`;
|
`;
|
||||||
|
@ -65,3 +65,12 @@ pnpm install
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## 其他
|
||||||
|
|
||||||
|
如果你想更进一步精简,你可以删除参考一下文件或者文件夹的作用,判断自己是否需要,不需要删除即可:
|
||||||
|
|
||||||
|
- `.changeset` 文件夹用于管理版本变更
|
||||||
|
- `.github` 文件夹用于存放 GitHub 的配置文件
|
||||||
|
- `.vscode` 文件夹用于存放 VSCode 的配置文件,如果你使用其他编辑器,可以删除
|
||||||
|
- `./scripts/deploy` 文件夹用于存放部署脚本,如果你不需要docker部署,可以删除
|
||||||
|
@ -16,7 +16,7 @@ import {
|
|||||||
import { cn, isFunction, isObject, isString } from '@vben-core/shared/utils';
|
import { cn, isFunction, isObject, isString } from '@vben-core/shared/utils';
|
||||||
|
|
||||||
import { toTypedSchema } from '@vee-validate/zod';
|
import { toTypedSchema } from '@vee-validate/zod';
|
||||||
import { useFormValues } from 'vee-validate';
|
import { useFieldError, useFormValues } from 'vee-validate';
|
||||||
|
|
||||||
import { injectRenderFormProps, useFormContext } from './context';
|
import { injectRenderFormProps, useFormContext } from './context';
|
||||||
import useDependencies from './dependencies';
|
import useDependencies from './dependencies';
|
||||||
@ -43,8 +43,11 @@ const {
|
|||||||
const { componentBindEventMap, componentMap, isVertical } = useFormContext();
|
const { componentBindEventMap, componentMap, isVertical } = useFormContext();
|
||||||
const formRenderProps = injectRenderFormProps();
|
const formRenderProps = injectRenderFormProps();
|
||||||
const values = useFormValues();
|
const values = useFormValues();
|
||||||
|
const errors = useFieldError(fieldName);
|
||||||
const formApi = formRenderProps.form;
|
const formApi = formRenderProps.form;
|
||||||
|
|
||||||
|
const isInValid = computed(() => errors.value?.length > 0);
|
||||||
|
|
||||||
const fieldComponent = computed(() => {
|
const fieldComponent = computed(() => {
|
||||||
const finalComponent = isString(component)
|
const finalComponent = isString(component)
|
||||||
? componentMap.value[component]
|
? componentMap.value[component]
|
||||||
@ -217,6 +220,7 @@ function createComponentProps(slotProps: Record<string, any>) {
|
|||||||
<FormItem
|
<FormItem
|
||||||
v-show="isShow"
|
v-show="isShow"
|
||||||
:class="{
|
:class="{
|
||||||
|
'form-valid-error': isInValid,
|
||||||
'flex-col': isVertical,
|
'flex-col': isVertical,
|
||||||
'flex-row items-center': !isVertical,
|
'flex-row items-center': !isVertical,
|
||||||
}"
|
}"
|
||||||
@ -248,10 +252,14 @@ function createComponentProps(slotProps: Record<string, any>) {
|
|||||||
...slotProps,
|
...slotProps,
|
||||||
...createComponentProps(slotProps),
|
...createComponentProps(slotProps),
|
||||||
disabled: shouldDisabled,
|
disabled: shouldDisabled,
|
||||||
|
isInValid,
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<component
|
<component
|
||||||
:is="fieldComponent"
|
:is="fieldComponent"
|
||||||
|
:class="{
|
||||||
|
'border-destructive focus:border-destructive': isInValid,
|
||||||
|
}"
|
||||||
v-bind="createComponentProps(slotProps)"
|
v-bind="createComponentProps(slotProps)"
|
||||||
:disabled="shouldDisabled"
|
:disabled="shouldDisabled"
|
||||||
>
|
>
|
||||||
|
@ -11,3 +11,7 @@
|
|||||||
.ant-notification-notice {
|
.ant-notification-notice {
|
||||||
@apply dark:border-border/60 dark:border;
|
@apply dark:border-border/60 dark:border;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ant-app .form-valid-error .ant-select-selector {
|
||||||
|
border-color: hsl(var(--destructive));
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user