1+ import {
2+ cloneDeep ,
3+ isArray ,
4+ isBoolean ,
5+ isNil ,
6+ isNumber ,
7+ isString ,
8+ get as lodashGet ,
9+ set as lodashSet ,
10+ } from 'lodash-es' ;
11+ import {
12+ GlobalIconType ,
13+ CheckCircleFilledIcon as TdCheckCircleFilledIcon ,
14+ CloseCircleFilledIcon as TdCloseCircleFilledIcon ,
15+ ErrorCircleFilledIcon as TdErrorCircleFilledIcon ,
16+ } from 'tdesign-icons-vue-next' ;
117import {
218 computed ,
319 defineComponent ,
@@ -12,34 +28,7 @@ import {
1228 VNode ,
1329 watch ,
1430} from 'vue' ;
15- import {
16- CheckCircleFilledIcon as TdCheckCircleFilledIcon ,
17- CloseCircleFilledIcon as TdCloseCircleFilledIcon ,
18- ErrorCircleFilledIcon as TdErrorCircleFilledIcon ,
19- GlobalIconType ,
20- } from 'tdesign-icons-vue-next' ;
21- import {
22- isNil ,
23- isArray ,
24- isNumber ,
25- isString ,
26- isBoolean ,
27- cloneDeep ,
28- get as lodashGet ,
29- set as lodashSet ,
30- } from 'lodash-es' ;
3131
32- import { validate } from './utils/form-model' ;
33- import {
34- AllValidateResult ,
35- Data ,
36- FormErrorMessage ,
37- FormItemValidateMessage ,
38- FormRule ,
39- ValidateTriggerType ,
40- ValueType ,
41- } from './type' ;
42- import props from './form-item-props' ;
4332import {
4433 AnalysisValidateResult ,
4534 ErrorListType ,
@@ -50,10 +39,21 @@ import {
5039 useCLASSNAMES ,
5140 ValidateStatus ,
5241} from './consts' ;
42+ import props from './form-item-props' ;
43+ import {
44+ AllValidateResult ,
45+ Data ,
46+ FormErrorMessage ,
47+ FormItemValidateMessage ,
48+ FormRule ,
49+ ValidateTriggerType ,
50+ ValueType ,
51+ } from './type' ;
52+ import { validate } from './utils/form-model' ;
5353
54- import { useConfig , useTNodeJSX , useGlobalIcon , usePrefixClass } from '@tdesign/shared-hooks' ;
55- import { getFormItemClassName } from './utils' ;
5654import { template } from '@tdesign/common-js/utils/stringTemplate' ;
55+ import { useConfig , useGlobalIcon , usePrefixClass , useTNodeJSX } from '@tdesign/shared-hooks' ;
56+ import { getFormItemClassName } from './utils' ;
5757
5858export type FormItemValidateResult < T extends Data = Data > = { [ key in keyof T ] : boolean | AllValidateResult [ ] } ;
5959
@@ -164,7 +164,7 @@ export default defineComponent({
164164 /** Suffix Icon END */
165165
166166 /** Content Style */
167- const errorClasses = computed ( ( ) => {
167+ const statusClasses = computed ( ( ) => {
168168 if ( ! showErrorMessage . value ) return '' ;
169169 if ( verifyStatus . value === ValidateStatus . SUCCESS ) {
170170 return props . successBorder
@@ -176,7 +176,7 @@ export default defineComponent({
176176 if ( props . status ) return statusClass . value ;
177177 return type === 'error' ? CLASS_NAMES . value . error : CLASS_NAMES . value . warning ;
178178 } ) ;
179- const contentClasses = computed ( ( ) => [ CLASS_NAMES . value . controls , errorClasses . value ] ) ;
179+ const contentClasses = computed ( ( ) => [ CLASS_NAMES . value . controls , statusClasses . value ] ) ;
180180 const contentStyle = computed ( ( ) => {
181181 let contentStyle = { } ;
182182 if ( labelWidth . value && labelAlign . value !== 'top' ) {
@@ -322,13 +322,28 @@ export default defineComponent({
322322 } ;
323323
324324 const setValidateMessage = ( validateMessage : FormItemValidateMessage [ ] ) => {
325- if ( ! validateMessage && ! isArray ( validateMessage ) ) return ;
325+ if ( ! validateMessage || ! isArray ( validateMessage ) ) return ;
326+ errorList . value = [ ] ;
327+ successList . value = [ ] ;
326328 if ( validateMessage . length === 0 ) {
327- errorList . value = [ ] ;
328329 verifyStatus . value = ValidateStatus . SUCCESS ;
330+ return ;
329331 }
330- errorList . value = validateMessage . map ( ( item ) => ( { ...item , result : false } ) ) ;
331- verifyStatus . value = ValidateStatus . FAIL ;
332+ const errors = validateMessage . filter (
333+ ( item ) => item . type === 'error' || item . type === 'warning' ,
334+ ) as FormItemValidateMessage [ ] ;
335+ const successes = validateMessage . filter ( ( item ) => item . type === 'success' ) as FormItemValidateMessage [ ] ;
336+ errorList . value = errors . map ( ( item ) => ( {
337+ message : item . message ,
338+ type : item . type as 'error' | 'warning' ,
339+ result : false ,
340+ } ) ) ;
341+ successList . value = successes . map ( ( item ) => ( {
342+ message : item . message ,
343+ type : item . type as 'success' ,
344+ result : true ,
345+ } ) ) ;
346+ verifyStatus . value = errors . length > 0 ? ValidateStatus . FAIL : ValidateStatus . SUCCESS ;
332347 } ;
333348
334349 const value = computed < ValueType > ( ( ) => form ?. data && lodashGet ( form ?. data , props . name ) ) ;
0 commit comments