diff --git a/devui/form/src/form-item/form-item.tsx b/devui/form/src/form-item/form-item.tsx
index 48a5b51b..45d759f4 100644
--- a/devui/form/src/form-item/form-item.tsx
+++ b/devui/form/src/form-item/form-item.tsx
@@ -1,4 +1,4 @@
-import { defineComponent, reactive, inject, onMounted, provide} from 'vue';
+import { defineComponent, reactive, inject, onMounted, provide, ref} from 'vue';
import { dFormEvents, IForm } from '../form-types';
import './form-item.scss';
import AsyncValidator, { Rules } from 'async-validator';
@@ -22,6 +22,10 @@ export default defineComponent({
const formData = reactive(dForm.formData);
const labelData = reactive(dForm.labelData);
const rules = reactive(dForm.rules);
+
+ rules.name && console.log('test-> formData', formData);
+ // console.log('test-> rules', rules);
+
const resetField = () => {
switch(typeof formData[props.prop]) {
@@ -57,66 +61,71 @@ export default defineComponent({
const isColumns = labelData.layout === 'columns';
const nameField = rules ? rules.name : [];
+ const showMessage = ref(false);
const descriptor: Rules = {
name: {
type: 'string',
required: true,
- validator: (rule, value) => value === 'muji',
+ validator: (rule, value) => value.length !== 0,
},
age: {
type: 'number',
- asyncValidator: (rule, value) => {
- return new Promise((resolve, reject) => {
- if (value < 18) {
- reject('too young'); // reject with error message
- } else {
- resolve(value);
- }
- });
- },
+ validator: (rule, value) => value > 0,
+ // asyncValidator: (rule, value) => {
+ // return new Promise((resolve, reject) => {
+ // if (value < 18) {
+ // reject('too young'); // reject with error message
+ // } else {
+ // resolve(value);
+ // }
+ // });
+ // },
},
};
- rules.name && console.log('test-> form-item rules toRefs', rules.name[0].message);
-
const validator = new AsyncValidator(descriptor);
onMounted(() => {
dForm.formMitt.emit(dFormEvents.addField, formItem);
- formItem.formItemMitt.on('d.form.inputBlur', (e) => {
- console.log('test-> form-item 监听输入框blur事件', e);
-
- });
- validator.validate({ name: 'muji222'}).then(() => {
- // validation passed or without error message
- console.log('validator success');
- }).catch(({ errors, fields }) => {
- console.log('validator errors', errors);
- console.log('validator fields', fields);
- nameField && console.log('validator nameField', nameField[0].message);
+ props.prop && rules && formItem.formItemMitt.on('d.form.inputBlur', (e) => {
+ validator.validate({ ...formData }).then(() => {
+ // validation passed or without error message
+ console.log('validator success');
+ showMessage.value = false;
+
+ }).catch(({ errors, fields }) => {
+ console.log('validator errors', errors);
+ console.log('validator fields', fields);
+ showMessage.value = true;
+ });
});
+
})
return {
isHorizontal,
isVertical,
isColumns,
resetField,
- rules
+ rules,
+ showMessage
}
},
- render() {
+ render(props) {
+ console.log('props', props);
+
const {
isHorizontal,
isVertical,
isColumns,
rules,
+ showMessage,
} = this;
return
}
})
\ No newline at end of file
diff --git a/devui/form/src/form.tsx b/devui/form/src/form.tsx
index 55b2fe70..ca559956 100644
--- a/devui/form/src/form.tsx
+++ b/devui/form/src/form.tsx
@@ -12,26 +12,26 @@ export default defineComponent({
const formMitt = mitt();
const fields: IFormItem[] = [];
const resetFormFields = () => {
- console.log('resetFormFields fields', fields);
+ // console.log('resetFormFields fields', fields);
fields.forEach((field: IFormItem) => {
- console.log('resetFormFields field', field);
+ // console.log('resetFormFields field', field);
field.resetField();
})
}
formMitt.on(dFormEvents.addField, (field: any) => {
- console.log('dFormEvents.addField field', field);
+ // console.log('dFormEvents.addField field', field);
if(field) {
fields.push(field);
}
- console.log('dFormEvents.addField fields', fields);
+ // console.log('dFormEvents.addField fields', fields);
})
formMitt.on(dFormEvents.removeField, field => {
- console.log('dFormEvents.removeField field', field);
+ // console.log('dFormEvents.removeField field', field);
})
@@ -46,7 +46,7 @@ export default defineComponent({
rules: props.rules,
});
- console.log('form props', props);
+ // console.log('form props', props);
return {
formMitt,
diff --git a/sites/components/form/index.md b/sites/components/form/index.md
index 412992a2..0a617472 100644
--- a/sites/components/form/index.md
+++ b/sites/components/form/index.md
@@ -232,11 +232,17 @@ Label左右布局方式。
模板中绑定formGroup、formControlName、formControl,使用dValidateRules配置校验规则。
-
+
Name
-
+
+
+
+
+ Age
+
+
@@ -344,15 +350,20 @@ export default defineComponent({
username: 'haha2'
});
- console.log('form formModel', formModel);
+ let validateFormModel: IFormModel = reactive({
+ name: 'AlanLee97',
+ age: 24,
+ });
+
+ // console.log('form formModel', formModel);
const dForm1 = ref(null);
const dForm2 = ref(null);
onMounted(() => {
- console.log('dForm1', dForm1.value);
- console.log('dForm2', dForm2.value);
+ // console.log('dForm1', dForm1.value);
+ // console.log('dForm2', dForm2.value);
});
@@ -395,7 +406,9 @@ export default defineComponent({
]);
const rules = reactive({
- name: [{ required: true, message: '不能为空', trigger: 'blur'}]
+ name: [{ required: true, message: '不能为空', trigger: 'blur'}],
+ age: [{ required: true, message: '年龄不能小于0', trigger: 'blur'}],
+
})
return {
@@ -411,6 +424,7 @@ export default defineComponent({
baseSelectOptions,
suggestionList,
rules,
+ validateFormModel,
}
}
})
--
Gitee
From ac308b24aa3af912928b962a643a625366c5751a Mon Sep 17 00:00:00 2001
From: "1445654576@qq.com" <1445654576@qq.com>
Date: Sat, 28 Aug 2021 22:18:07 +0800
Subject: [PATCH 09/48] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0formItem?=
=?UTF-8?q?=E7=9A=84=E4=BA=8B=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
devui/input/src/input.tsx | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/devui/input/src/input.tsx b/devui/input/src/input.tsx
index 94760207..1bc61bac 100644
--- a/devui/input/src/input.tsx
+++ b/devui/input/src/input.tsx
@@ -1,7 +1,7 @@
-import { defineComponent, computed, inject, reactive } from 'vue';
+import { defineComponent, computed, inject } from 'vue';
import { inputProps } from './use-input';
import './input.scss'
-import mitt from 'mitt';
+import { dFormItemEvents, IFormItem } from '../../form/src/form-types';
export default defineComponent({
name: 'DInput',
@@ -15,25 +15,22 @@ export default defineComponent({
[sizeCls.value]: props.size !== ''
}
});
- const formItem: any = inject('dFormItem');
+ const formItem: IFormItem = inject('dFormItem');
const inputType = computed(() => props.showPassword ? 'password' : 'text');
const onInput = ($event: Event) => {
ctx.emit('update:value', ($event.target as HTMLInputElement).value);
+ formItem.formItemMitt.emit(dFormItemEvents.input);
},
onFocus = () => {
ctx.emit('focus');
},
onBlur = () => {
ctx.emit('blur');
- formItem.formItemMitt.emit('d.form.inputBlur');
- console.log('formItem', formItem);
- console.log('test-> input blur');
-
-
-
+ formItem.formItemMitt.emit(dFormItemEvents.blur);
},
onChange = ($event: Event) => {
ctx.emit('change', ($event.target as HTMLInputElement).value);
+ formItem.formItemMitt.emit(dFormItemEvents.change);
},
onKeydown = ($event: KeyboardEvent) => {
ctx.emit('keydown', $event);
--
Gitee
From 6f047895c02bde33d6c259534b0133fb71e6efc3 Mon Sep 17 00:00:00 2001
From: "1445654576@qq.com" <1445654576@qq.com>
Date: Sat, 28 Aug 2021 22:23:02 +0800
Subject: [PATCH 10/48] =?UTF-8?q?fix:=20=E5=AE=8C=E6=88=90=E7=AE=80?=
=?UTF-8?q?=E5=8D=95=E5=93=8D=E5=BA=94=E5=BC=8F=E8=A1=A8=E5=8D=95=E9=AA=8C?=
=?UTF-8?q?=E8=AF=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
devui/form/src/form-item/form-item.tsx | 114 ++++++++++++++-----------
devui/form/src/form-types.ts | 8 ++
sites/components/form/index.md | 25 +++++-
3 files changed, 96 insertions(+), 51 deletions(-)
diff --git a/devui/form/src/form-item/form-item.tsx b/devui/form/src/form-item/form-item.tsx
index 45d759f4..1d18e2af 100644
--- a/devui/form/src/form-item/form-item.tsx
+++ b/devui/form/src/form-item/form-item.tsx
@@ -1,5 +1,5 @@
-import { defineComponent, reactive, inject, onMounted, provide, ref} from 'vue';
-import { dFormEvents, IForm } from '../form-types';
+import { defineComponent, reactive, inject, onMounted, onBeforeUnmount, provide, ref} from 'vue';
+import { dFormEvents, dFormItemEvents, IForm } from '../form-types';
import './form-item.scss';
import AsyncValidator, { Rules } from 'async-validator';
import mitt from 'mitt';
@@ -16,16 +16,12 @@ export default defineComponent({
default: ''
}
},
- setup(props, ctx) {
+ setup(props) {
const formItemMitt = mitt();
const dForm: IForm = reactive(inject('dForm', {} as IForm));
const formData = reactive(dForm.formData);
const labelData = reactive(dForm.labelData);
const rules = reactive(dForm.rules);
-
- rules.name && console.log('test-> formData', formData);
- // console.log('test-> rules', rules);
-
const resetField = () => {
switch(typeof formData[props.prop]) {
@@ -60,72 +56,92 @@ export default defineComponent({
const isVertical = labelData.layout === 'vertical';
const isColumns = labelData.layout === 'columns';
- const nameField = rules ? rules.name : [];
const showMessage = ref(false);
+ const tipMessage = ref('');
- const descriptor: Rules = {
- name: {
- type: 'string',
- required: true,
- validator: (rule, value) => value.length !== 0,
- },
- age: {
- type: 'number',
- validator: (rule, value) => value > 0,
- // asyncValidator: (rule, value) => {
- // return new Promise((resolve, reject) => {
- // if (value < 18) {
- // reject('too young'); // reject with error message
- // } else {
- // resolve(value);
- // }
- // });
- // },
- },
- };
+ const validate = (trigger: string) => {
+ console.log('trigger', trigger);
+
+ const ruleKey = props.prop;
+ const ruleItem = rules[ruleKey];
+ const descriptor: Rules = {};
+ descriptor[ruleKey] = ruleItem;
+
+ const validator = new AsyncValidator(descriptor);
- const validator = new AsyncValidator(descriptor);
+ validator.validate({[ruleKey]: formData[ruleKey]}).then(() => {
+ showMessage.value = false;
+ tipMessage.value = '';
+ }).catch(({ errors }) => {
+ console.log('validator errors', errors);
+
+ showMessage.value = true;
+ tipMessage.value = errors[0].message;
+ });
+ }
+ const validateEvents = [];
- onMounted(() => {
- dForm.formMitt.emit(dFormEvents.addField, formItem);
+ const addValidateEvents = () => {
+
+ if(rules && rules[props.prop]) {
+ const ruleItem = rules[props.prop];
+ let eventName = ruleItem['trigger'];
- props.prop && rules && formItem.formItemMitt.on('d.form.inputBlur', (e) => {
- validator.validate({ ...formData }).then(() => {
- // validation passed or without error message
- console.log('validator success');
- showMessage.value = false;
-
- }).catch(({ errors, fields }) => {
- console.log('validator errors', errors);
- console.log('validator fields', fields);
- showMessage.value = true;
+ if(Array.isArray(ruleItem)) {
+ ruleItem.forEach((item) => {
+ eventName = item['trigger'];
+ const cb = () => validate(eventName);
+ validateEvents.push({eventName: cb});
+ formItem.formItemMitt.on(dFormItemEvents[eventName], cb);
+ });
+ }else {
+ const cb = () => validate(eventName);
+ validateEvents.push({eventName: cb});
+ ruleItem && formItem.formItemMitt.on(dFormItemEvents[eventName], cb);
+ }
+ }
+ }
+
+ const removeValidateEvents = () => {
+ if(rules && rules[props.prop] && validateEvents.length > 0) {
+ validateEvents.forEach(item => {
+ formItem.formItemMitt.off(item.eventName, item.cb);
});
- });
+ }
+ }
- })
+ onMounted(() => {
+ dForm.formMitt.emit(dFormEvents.addField, formItem);
+ addValidateEvents();
+ });
+
+ onBeforeUnmount(() => {
+ console.log('onBeforeUnmount');
+
+ removeValidateEvents();
+ });
return {
isHorizontal,
isVertical,
isColumns,
resetField,
rules,
- showMessage
+ showMessage,
+ tipMessage
}
},
- render(props) {
- console.log('props', props);
+ render() {
const {
isHorizontal,
isVertical,
- isColumns,
- rules,
showMessage,
+ tipMessage,
} = this;
return
}
})
\ No newline at end of file
diff --git a/devui/form/src/form-types.ts b/devui/form/src/form-types.ts
index b345027f..a07362a1 100644
--- a/devui/form/src/form-types.ts
+++ b/devui/form/src/form-types.ts
@@ -59,6 +59,8 @@ export type FormLabelProps = ExtractPropTypes
export interface IFormItem {
dHasFeedback: boolean
+ prop: string
+ formItemMitt: Emitter
resetField(): void
}
@@ -67,3 +69,9 @@ export const dFormEvents = {
removeField: 'd.form.removeField',
inputBlur: 'd.form.inputBlur',
} as const
+
+export const dFormItemEvents = {
+ blur: 'd.form.blur',
+ change: 'd.form.change',
+ input: 'd.form.input',
+} as const
diff --git a/sites/components/form/index.md b/sites/components/form/index.md
index 0a617472..b7ff229b 100644
--- a/sites/components/form/index.md
+++ b/sites/components/form/index.md
@@ -239,6 +239,12 @@ Label左右布局方式。
+
+ NickName
+
+
+
+
Age
@@ -351,7 +357,8 @@ export default defineComponent({
});
let validateFormModel: IFormModel = reactive({
- name: 'AlanLee97',
+ name: 'AlanLee',
+ nickname: 'AlanLee97',
age: 24,
});
@@ -407,7 +414,21 @@ export default defineComponent({
const rules = reactive({
name: [{ required: true, message: '不能为空', trigger: 'blur'}],
- age: [{ required: true, message: '年龄不能小于0', trigger: 'blur'}],
+ nickname: { required: true, message: '不能为空', trigger: 'blur'},
+ age: [
+ {
+ required: true,
+ message: '年龄不能小于0',
+ trigger: 'blur',
+ validator: (rule, value) => value > 0
+ },
+ {
+ required: true,
+ message: '年龄不能大于120',
+ trigger: 'input',
+ validator: (rule, value) => value < 120
+ }
+ ],
})
--
Gitee
From a5103efcc63366c87a7f7173635d059b8be74834 Mon Sep 17 00:00:00 2001
From: "1445654576@qq.com" <1445654576@qq.com>
Date: Sat, 28 Aug 2021 23:12:44 +0800
Subject: [PATCH 11/48] =?UTF-8?q?fix:=20=E7=AE=80=E5=8D=95=E5=AE=8C?=
=?UTF-8?q?=E6=88=90=E8=A1=A8=E5=8D=95=E6=8F=90=E4=BA=A4=E4=B8=8E=E9=87=8D?=
=?UTF-8?q?=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
devui/form/src/form-item/form-item.tsx | 20 ++------------------
devui/form/src/form.tsx | 16 ++++++++++++++--
sites/components/form/index.md | 4 ++--
3 files changed, 18 insertions(+), 22 deletions(-)
diff --git a/devui/form/src/form-item/form-item.tsx b/devui/form/src/form-item/form-item.tsx
index 1d18e2af..a0efeded 100644
--- a/devui/form/src/form-item/form-item.tsx
+++ b/devui/form/src/form-item/form-item.tsx
@@ -20,28 +20,12 @@ export default defineComponent({
const formItemMitt = mitt();
const dForm: IForm = reactive(inject('dForm', {} as IForm));
const formData = reactive(dForm.formData);
+ const initFormTemData = formData[props.prop];
const labelData = reactive(dForm.labelData);
const rules = reactive(dForm.rules);
const resetField = () => {
- switch(typeof formData[props.prop]) {
- case 'string':
- formData[props.prop] = '';
- break;
- case 'number':
- formData[props.prop] = undefined;
- break;
- case 'boolean':
- formData[props.prop] = false;
- break;
- }
- if(Array.isArray(formData[props.prop])) {
- formData[props.prop] = [];
- }
- if(typeof props.prop === 'object') {
- formData[props.prop] = null;
- }
- console.log('form-item resetField formData', formData);
+ formData[props.prop] = initFormTemData;
}
const formItem = reactive({
diff --git a/devui/form/src/form.tsx b/devui/form/src/form.tsx
index ca559956..b689af93 100644
--- a/devui/form/src/form.tsx
+++ b/devui/form/src/form.tsx
@@ -8,7 +8,7 @@ export default defineComponent({
name: 'DForm',
props: formProps,
emits: ['submit'],
- setup(props: FormProps) {
+ setup(props: FormProps, ctx) {
const formMitt = mitt();
const fields: IFormItem[] = [];
const resetFormFields = () => {
@@ -46,17 +46,29 @@ export default defineComponent({
rules: props.rules,
});
+ const onSubmit = (e) => {
+ // console.log(e);
+ e.preventDefault();
+
+ console.log('form onSubmit e', e);
+
+ ctx.emit('submit');
+
+ }
+
+
// console.log('form props', props);
return {
formMitt,
fields,
resetFormFields,
+ onSubmit,
}
},
render() {
return (
-
);
diff --git a/sites/components/form/index.md b/sites/components/form/index.md
index b7ff229b..dffe9a39 100644
--- a/sites/components/form/index.md
+++ b/sites/components/form/index.md
@@ -72,8 +72,8 @@
- 确定
- 重置
+ 确定
+ 重置
--
Gitee
From 186e531a2383520b9aaffc009e01c41be39cf6b3 Mon Sep 17 00:00:00 2001
From: "1445654576@qq.com" <1445654576@qq.com>
Date: Sat, 28 Aug 2021 23:28:35 +0800
Subject: [PATCH 12/48] =?UTF-8?q?fix:=20=E6=9B=B4=E6=96=B0md=E6=96=87?=
=?UTF-8?q?=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sites/components/form/index.md | 223 ++++++++++++++++++++++++++++++---
1 file changed, 209 insertions(+), 14 deletions(-)
diff --git a/sites/components/form/index.md b/sites/components/form/index.md
index dffe9a39..90198624 100644
--- a/sites/components/form/index.md
+++ b/sites/components/form/index.md
@@ -8,6 +8,8 @@
### 基础用法
+> done
+
基本用法当中,Label是在数据框的上面。
@@ -73,36 +75,160 @@
确定
- 重置
+ 重置
```html
-
-
- 用户名
+
+
+ Name
-
+
-
- 密码
+
+ Description
+
+
+
+
+
+ Select
+
+
+
+
+
+ Multiple options
+
+
+
+
+
+ Tags
-
+
+
+
+
+ Radio
+
+
+ 男
+
+
+ 女
+
+
+
+
+ Switch
+
+
+
+
+
+ Execution day
+
+
- 确定
- 重置
+ 确定
+ 重置
```
+```ts
+
+```
+
### 横向排列
+> done
+
Label左右布局方式。
@@ -227,7 +353,7 @@ Label左右布局方式。
### 响应式表单验证
-> todo
+> done
模板中绑定formGroup、formControlName、formControl,使用dValidateRules配置校验规则。
@@ -257,10 +383,79 @@ Label左右布局方式。
```html
-
+
+
+ Name
+
+
+
+
+
+ NickName
+
+
+
+
+
+ Age
+
+
+
+
+
```
+```ts
+
+```
+
### 指定表单Feedback状态
> todo
@@ -398,7 +593,7 @@ export default defineComponent({
console.log('form md onConfirm2', toRefs(formModel2));
}
- const resetDFrom1 = () => {
+ const resetDForm1 = () => {
dForm1.value.resetFormFields();
}
@@ -439,7 +634,7 @@ export default defineComponent({
onConfirm,
onConfirm2,
onUpdateValue,
- resetDFrom1,
+ resetDForm1,
dForm1,
dForm2,
baseSelectOptions,
--
Gitee
From 874f1e26e21da15d68fdf3fa44aa3977c2c1b2e3 Mon Sep 17 00:00:00 2001
From: "1445654576@qq.com" <1445654576@qq.com>
Date: Sun, 29 Aug 2021 13:21:59 +0800
Subject: [PATCH 13/48] =?UTF-8?q?fix:=20=E5=AE=8C=E6=88=90=E5=8A=9F?=
=?UTF-8?q?=E8=83=BD=E7=82=B9=EF=BC=9A=20=E6=89=8B=E5=8A=A8=E6=8C=87?=
=?UTF-8?q?=E5=AE=9A=E5=8F=8D=E9=A6=88=E7=8A=B6=E6=80=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
devui/form/src/form-control/form-control.scss | 49 ++++++++++++
devui/form/src/form-control/form-control.tsx | 56 +++++++++++--
sites/components/form/index.md | 78 +++++++++++++------
3 files changed, 153 insertions(+), 30 deletions(-)
diff --git a/devui/form/src/form-control/form-control.scss b/devui/form/src/form-control/form-control.scss
index 78cbf5c0..99d0d6b7 100644
--- a/devui/form/src/form-control/form-control.scss
+++ b/devui/form/src/form-control/form-control.scss
@@ -2,4 +2,53 @@
.star {
color: red;
}
+
+ .devui-form-control-container {
+ position: relative;
+
+ .feedback-status {
+ position: absolute;
+ top: 50%;
+ right: 0;
+ z-index: 1;
+ width: 32px;
+ height: 16px;
+ margin-top: -7px;
+ line-height: 16px;
+ text-align: center;
+ visibility: visible;
+ pointer-events: none;
+ }
+ }
+
+ .has-feedback {
+ display: flex;
+ align-items: center;
+
+ input {
+ padding-right: 28px;
+ }
+ }
+
+ .feedback-error {
+ border: 1px solid #f66f6a;
+ border-radius: 2px;
+
+ input {
+ background-color: #ffeeed;
+ border-color: transparent;
+
+ &:hover {
+ border-color: transparent !important;
+ }
+
+ &:focus {
+ border-color: transparent !important;
+ }
+ }
+
+ .devui-select-arrow {
+ right: 24px !important;
+ }
+ }
}
diff --git a/devui/form/src/form-control/form-control.tsx b/devui/form/src/form-control/form-control.tsx
index db5caadc..bf9d6fe4 100644
--- a/devui/form/src/form-control/form-control.tsx
+++ b/devui/form/src/form-control/form-control.tsx
@@ -1,18 +1,62 @@
-import { defineComponent, inject } from 'vue';
+import { defineComponent, inject, onMounted, nextTick, ref, computed } from 'vue';
import './form-control.scss';
+import Icon from '../../../icon/src/icon'
export default defineComponent({
name: 'DFormControl',
props: {
-
+ feedbackStatus: {
+ type: String,
+ default: ''
+ },
+ extraInfo: {
+ type: String,
+ default: ''
+ },
+ suffixTemplate: {
+ type: String,
+ default: ''
+ }
},
setup(props, ctx) {
- const dForm = inject('dForm', {});
- // console.log('form-control dForm', dForm);
+
+ const formControl = ref();
+
+ onMounted(() => {
+ const dom = formControl.value;
+ console.log('dom', dom);
+
+ });
+
+ const iconData = computed(() => {
+ switch(props.feedbackStatus) {
+ case 'pending':
+ return {name: 'priority', color: '#e9edfa'};
+ case 'success':
+ return {name: 'right-o', color: 'rgb(61, 204, 166)'};
+ case 'error':
+ return {name: 'error-o', color: 'rgb(249, 95, 91)'};
+ default:
+ return {name: '', color: ''};
+ }
+ })
return () => {
- return
}
diff --git a/devui/form/src/form-label/form-label.scss b/devui/form/src/form-label/form-label.scss
index f9b26e75..358f522b 100644
--- a/devui/form/src/form-label/form-label.scss
+++ b/devui/form/src/form-label/form-label.scss
@@ -20,14 +20,17 @@
.form-label_sm {
width: 80px;
+ min-width: 80px;
}
.form-label_sd {
width: 100px;
+ min-width: 100px;
}
.form-label_lg {
width: 150px;
+ min-width: 150px;
}
.form-label_center {
diff --git a/sites/components/form/index.md b/sites/components/form/index.md
index cedff627..8b4c7b28 100644
--- a/sites/components/form/index.md
+++ b/sites/components/form/index.md
@@ -235,13 +235,13 @@ Label左右布局方式。
用户名
-
+
密码
-
+
--
Gitee
From d493b24990f2578db01fc3c1e75b8f1e47615066 Mon Sep 17 00:00:00 2001
From: "1445654576@qq.com" <1445654576@qq.com>
Date: Sun, 29 Aug 2021 13:53:49 +0800
Subject: [PATCH 15/48] =?UTF-8?q?fix:=20=E5=AE=8C=E6=88=90suffixTemplate?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
devui/form/src/form-control/form-control.tsx | 6 +++---
sites/components/form/index.md | 9 +++++++++
2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/devui/form/src/form-control/form-control.tsx b/devui/form/src/form-control/form-control.tsx
index b6aebd43..ebb7578a 100644
--- a/devui/form/src/form-control/form-control.tsx
+++ b/devui/form/src/form-control/form-control.tsx
@@ -24,7 +24,6 @@ export default defineComponent({
onMounted(() => {
const dom = formControl.value;
- console.log('dom', dom);
});
@@ -51,9 +50,10 @@ export default defineComponent({
{ctx.slots.default?.()}
{
- feedbackStatus &&
+ (feedbackStatus || ctx.slots.suffixTemplate?.()) &&
-
+
+ {ctx.slots.suffixTemplate?.() ? ctx.slots.suffixTemplate?.() : }
}
diff --git a/sites/components/form/index.md b/sites/components/form/index.md
index 8b4c7b28..6c8a26d3 100644
--- a/sites/components/form/index.md
+++ b/sites/components/form/index.md
@@ -494,6 +494,15 @@ export default defineComponent({
+
+ City
+
+
+
+
+
+
+
--
Gitee
From c431a83b173d88c44bde5c5659b82203f4d72e7d Mon Sep 17 00:00:00 2001
From: "1445654576@qq.com" <1445654576@qq.com>
Date: Sun, 29 Aug 2021 14:42:06 +0800
Subject: [PATCH 16/48] =?UTF-8?q?fix:=20=E6=9B=B4=E6=96=B0hasHelp?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
devui/form/src/form-label/form-label.scss | 26 +++++++++++++
devui/form/src/form-label/form-label.tsx | 7 +++-
sites/components/form/index.md | 46 +++++++++++++++++++++--
3 files changed, 75 insertions(+), 4 deletions(-)
diff --git a/devui/form/src/form-label/form-label.scss b/devui/form/src/form-label/form-label.scss
index 358f522b..89fccbe8 100644
--- a/devui/form/src/form-label/form-label.scss
+++ b/devui/form/src/form-label/form-label.scss
@@ -8,6 +8,9 @@
margin-right: 16px;
.devui-required {
+ display: inline-flex;
+ align-items: center;
+
&::before {
content: '*';
color: red;
@@ -40,3 +43,26 @@
.form-label_end {
text-align: end;
}
+
+.form-label-help {
+ border-radius: 50%;
+ display: inline-flex;
+ justify-content: center;
+ align-items: center;
+ position: relative;
+ margin-left: 10px;
+
+ &:hover {
+ &::after {
+ position: absolute;
+ z-index: 100;
+ min-width: 200px;
+ content: '提示内容(待替换popover组件)';
+ color: #ffffff;
+ background-color: #e9edfa;
+ top: -80px;
+ padding: 10px;
+ border-radius: 4px;
+ }
+ }
+}
diff --git a/devui/form/src/form-label/form-label.tsx b/devui/form/src/form-label/form-label.tsx
index 27203865..62566892 100644
--- a/devui/form/src/form-label/form-label.tsx
+++ b/devui/form/src/form-label/form-label.tsx
@@ -1,6 +1,7 @@
import { defineComponent, inject, reactive, computed } from 'vue';
import { IForm, formLabelProps, FormLabelProps } from '../form-types';
import './form-label.scss';
+import Icon from '../../../icon/src/icon';
export default defineComponent({
name: 'DFormLabel',
@@ -23,7 +24,11 @@ export default defineComponent({
return
{ctx.slots.default?.()}
- {props.hasHelp && {(props.hasHelp ? props.helpTips : '?')}}
+ {
+ props.hasHelp &&
+
+ {(props.hasHelp ? : null)}
+ }
}
diff --git a/sites/components/form/index.md b/sites/components/form/index.md
index 6c8a26d3..9276b6d2 100644
--- a/sites/components/form/index.md
+++ b/sites/components/form/index.md
@@ -234,7 +234,7 @@ Label左右布局方式。
- 用户名
+ 用户名
@@ -458,7 +458,7 @@ export default defineComponent({
### 指定表单Feedback状态
-> doing
+> done
你可通过对d-form-control设置feedbackStatus手动指定反馈状态。当前已支持状态:success、error、pending。
@@ -509,7 +509,47 @@ export default defineComponent({
```html
-
+
+
+ Name
+
+
+
+
+
+ Nickname
+
+
+
+
+
+ Age
+
+
+
+
+
+ Sex
+
+
+
+
+
+ City
+
+
+
+
+
+ City
+
+
+
+
+
+
+
+
```
--
Gitee
From 6837af7fefeffd713c26c3ee7e39d0b14977b040 Mon Sep 17 00:00:00 2001
From: "1445654576@qq.com" <1445654576@qq.com>
Date: Sun, 29 Aug 2021 23:15:55 +0800
Subject: [PATCH 17/48] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=AD=90?=
=?UTF-8?q?=E7=BB=84=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
devui/form/index.ts | 28 ++++++++++++++++++++++++++--
1 file changed, 26 insertions(+), 2 deletions(-)
diff --git a/devui/form/index.ts b/devui/form/index.ts
index 08c2cdcc..83c59e45 100644
--- a/devui/form/index.ts
+++ b/devui/form/index.ts
@@ -1,16 +1,40 @@
import type { App } from 'vue'
import Form from './src/form'
+import FormLabel from './src/form-label/form-label';
+import FormItem from './src/form-item/form-item';
+import FormControl from './src/form-control/form-control';
+import FormOperation from './src/form-operation/form-operation';
Form.install = function(app: App) {
app.component(Form.name, Form)
}
-export { Form }
+FormLabel.install = function(app: App) {
+ app.component(FormLabel.name, FormLabel)
+}
+
+FormItem.install = function(app: App) {
+ app.component(FormItem.name, FormItem)
+}
+
+FormControl.install = function(app: App) {
+ app.component(FormControl.name, FormControl)
+}
+
+FormOperation.install = function(app: App) {
+ app.component(FormOperation.name, FormOperation)
+}
+
+export { Form, FormLabel, FormItem, FormControl, FormOperation }
export default {
title: 'Form 表单',
category: '数据录入',
install(app: App): void {
- app.use(Form as any)
+ app.use(Form as any);
+ app.use(FormLabel as any);
+ app.use(FormItem as any);
+ app.use(FormControl as any);
+ app.use(FormOperation as any);
}
}
--
Gitee
From bc6909dafcfcf0ed6e56f3814639b3b8e7ac2031 Mon Sep 17 00:00:00 2001
From: "1445654576@qq.com" <1445654576@qq.com>
Date: Sun, 29 Aug 2021 23:16:49 +0800
Subject: [PATCH 18/48] =?UTF-8?q?fix:=20=E6=9B=B4=E6=96=B0=E4=BB=A3?=
=?UTF-8?q?=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
devui/form/src/form-item/form-item.tsx | 6 +++---
devui/form/src/form-types.ts | 4 ++--
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/devui/form/src/form-item/form-item.tsx b/devui/form/src/form-item/form-item.tsx
index a0efeded..25586a6a 100644
--- a/devui/form/src/form-item/form-item.tsx
+++ b/devui/form/src/form-item/form-item.tsx
@@ -20,12 +20,12 @@ export default defineComponent({
const formItemMitt = mitt();
const dForm: IForm = reactive(inject('dForm', {} as IForm));
const formData = reactive(dForm.formData);
- const initFormTemData = formData[props.prop];
+ const initFormItemData = formData[props.prop];
const labelData = reactive(dForm.labelData);
const rules = reactive(dForm.rules);
const resetField = () => {
- formData[props.prop] = initFormTemData;
+ formData[props.prop] = initFormItemData;
}
const formItem = reactive({
@@ -123,7 +123,7 @@ export default defineComponent({
showMessage,
tipMessage,
} = this;
- return
+ return
{this.$slots.default?.()}
{showMessage && tipMessage}
diff --git a/devui/form/src/form-types.ts b/devui/form/src/form-types.ts
index a07362a1..59deca39 100644
--- a/devui/form/src/form-types.ts
+++ b/devui/form/src/form-types.ts
@@ -22,8 +22,8 @@ export const formProps = {
default: 'start', // 'start' | 'center' | 'end'
},
rules: {
- type: Array,
- default: [],
+ type: Object,
+ default: {},
},
} as const
--
Gitee
From 9ee67eed859bc41f053d05508ece9b8d6a047ef7 Mon Sep 17 00:00:00 2001
From: "1445654576@qq.com" <1445654576@qq.com>
Date: Sun, 29 Aug 2021 23:17:18 +0800
Subject: [PATCH 19/48] =?UTF-8?q?fix:=20=E6=9B=B4=E6=96=B0=E6=96=87?=
=?UTF-8?q?=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sites/components/form/index.md | 1077 ++++++++++++++++----------------
1 file changed, 544 insertions(+), 533 deletions(-)
diff --git a/sites/components/form/index.md b/sites/components/form/index.md
index 9276b6d2..28683979 100644
--- a/sites/components/form/index.md
+++ b/sites/components/form/index.md
@@ -6,430 +6,496 @@
需要进行数据收集、数据校验、数据提交功能时。
+
+
### 基础用法
> done
基本用法当中,Label是在数据框的上面。
-
-
+
+:::demo
+
+```vue
+
+
- Name
+ Name
-
- Description
+
+ Age
-
+
-
- Select
+
+ City
-
+
-
- Multiple options
-
-
-
-
-
- Tags
+
+ Love Fruits
-
- Radio
+
+ Sex
-
- 男
-
-
- 女
-
+ 男
+ 女
-
- Switch
+
+ Go off work, I nerver to be a Juan King!
-
+
-
- Execution day
+
+ Which lady you would like to support?
-
+
+
+
+
+
+
+
-
- 确定
- 重置
+
+ 提交
+ 重置
-
-```html
-
-
+
+
+
+
+
+
+
+```
+
+:::
+
+
+### 横向排列
+
+> done
+
+Label左右布局方式。
+
+
+:::demo
+
+```vue
+
+
- Name
+ Name
-
- Description
-
-
-
-
-
- Select
+
+ Age
-
+
-
- Multiple options
+
+ City
-
+
-
- Tags
+
+ Love Fruits
-
- Radio
+
+ Sex
-
- 男
-
-
- 女
-
+ 男
+ 女
-
- Switch
+
+ Go off work
-
+
-
- Execution day
+
+ Support lady
-
+
+
+
+
+
+
+
-
- 确定
- 重置
+
+ 提交
+ 重置
-
-```
-```ts
-
- const dForm = ref(null);
- onMounted(() => {
- });
+
- const onInputChange = (e: any) => {
+```
- }
+:::
- const onUpdateValue = (e: any) => {
- formModel.name = e;
- }
- const onConfirm = () => {
- console.log('form md onConfirm', formModel);
- }
+### 弹框表单
+> todo
- const resetDForm = () => {
- dForm1.value.resetFormFields();
- }
+弹框表单,弹框建议是400px,550px,700px,900px,建议宽高比是16: 9、3: 2。
- const baseSelectOptions = reactive([
- 'Option1','Option2','Option3'
- ])
- const suggestionList = reactive([
- {name: 'Option1'},
- {name: 'Option2'},
- {name: 'Option3'},
- ]);
+:::demo
+```vue
+
+
+
+ Name
+
+
+
+
+
+ Age
+
+
+
+
+
+ City
+
+
+
+
+
+ Love Fruits
+
+
+
+
+
+ Sex
+
+ 男
+ 女
+
+
+
+ Go off work
+
+
+
+
+
+ Support lady
+
+
+
+
+
+
+
+
+
+
+
+ 提交
+ 重置
+
+
+
+
+
+
-```
-### 横向排列
-> done
-
-Label左右布局方式。
+
-
-
-
- 用户名
-
-
-
-
-
- 密码
-
-
-
-
-
- 确定
-
-
-
-
-
-```html
-
-
-
- 用户名
-
-
-
-
-
- 密码
-
-
-
-
-
- 确定
-
-
-
```
-### 弹框表单
-
-> todo
+:::
-弹框表单,弹框建议是400px,550px,700px,900px,建议宽高比是16: 9、3: 2。
-
+### 模板驱动表单验证
+> todo
-```html
-
-```
+模板中绑定ngModel、ngGroupModel、ngForm的元素,可使用dValidateRules配置校验规则。
-### 多列表单
-> todo
+:::demo
-多列表单。
-
-
-
-
-```html
-
-```
+```vue
+
+
+
+ Name
+
+
+
+
+
+ Age
+
+
+
+
-### 模板驱动表单验证
+
-> todo
+
-
-
+
-```html
-
```
+:::
+
+
### 响应式表单验证
> done
模板中绑定formGroup、formControlName、formControl,使用dValidateRules配置校验规则。
-
-
-
- Name
-
-
-
-
-
- Nickname
-
-
-
-
-
- Age
-
-
-
-
-
-
-
-
-```html
-
-
-
- Name
-
-
-
-
-
- Nickname
-
-
-
-
-
- Age
-
-
-
-
-
-
-```
-```ts
-
+
+
+
+
```
+:::
+
+
### 指定表单Feedback状态
> done
你可通过对d-form-control设置feedbackStatus手动指定反馈状态。当前已支持状态:success、error、pending。
-
-
-
- Name
-
-
-
-
-
- Nickname
-
-
-
-
-
- Age
-
-
-
-
-
- Sex
-
-
-
-
-
- City
-
-
-
-
-
- City
-
-
-
-
-
-
-
-
-
-
-
-```html
-
-
-
- Name
-
-
-
-
-
- Nickname
-
-
-
-
-
- Age
-
-
-
-
-
- Sex
-
-
-
-
-
- City
-
-
-
-
-
- City
-
-
-
-
-
-
-
-
-
-```
-### 表单协同验证
+:::demo
-> todo
+```vue
+
+
+
+ Name
+
+
+
+
+
+ Nickname
+
+
+
+
+
+ Age
+
+
+
+
+
+ Sex
+
+
+
+
+
+ City
+
+
+
+
+
+ Address
+
+
+
+
+
+
+
+
+
-在一些场景下,你的多个表单组件互相依赖,需共同校验(如注册场景中的密码输入与确认密码),此时你需要用协同验证指令dValidateSyncKey来为需要系统校验的组件指定相同的keydValidateSyncKey指令支持模板驱动表单与响应式表单,以下示例以模板驱动表单为例:password与confirmPassword设置相同的dValidateSyncKey值,在其中一个组件值变更时,另一个组件也将进行校验。
+
-
-
+
-```html
-
```
-### 跨组件验证
+:::
-> todo
-当前Angular Form默认暂不支持跨组件共享表单校验状态,对于响应式表单,你可使用统一管理model,向下透传的方式进行组件组织。
-针对模板驱动表单,你可使用在子组件声明时进行容器注入的方式,将你需要的ngModelGroup或NgForm容器进行注入,以供模板中表单元素自动获取父容器。
+### 表单协同验证
-
+在一些场景下,你的多个表单组件互相依赖,需共同校验(如注册场景中的密码输入与确认密码),此时你需要用协同验证指令dValidateSyncKey来为需要系统校验的组件指定相同的keydValidateSyncKey指令支持模板驱动表单与响应式表单,以下示例以模板驱动表单为例:password与confirmPassword设置相同的dValidateSyncKey值,在其中一个组件值变更时,另一个组件也将进行校验。
-```html
-
-```
+:::demo
+
+```vue
+
+
+
+ Name
+
+
+
+
+
+ Age
+
+
+
+
+
+
-
+
- const onInputChange = (e: any) => {
- console.log('form onInputChange', e);
-
- }
+```
- const onUpdateValue = (e: any) => {
- console.log('form onUpdateValue', e);
- // formModel.username = e;
-
- }
+:::
- const onConfirm = () => {
- console.log('form md onConfirm', formModel);
- }
+### 跨组件验证
- const onConfirm2 = () => {
- console.log('form md onConfirm2', toRefs(formModel2));
- }
+> todo
- const resetDForm1 = () => {
- dForm1.value.resetFormFields();
- }
+当前Angular Form默认暂不支持跨组件共享表单校验状态,对于响应式表单,你可使用统一管理model,向下透传的方式进行组件组织。
+针对模板驱动表单,你可使用在子组件声明时进行容器注入的方式,将你需要的ngModelGroup或NgForm容器进行注入,以供模板中表单元素自动获取父容器。
- const baseSelectOptions = reactive([
- 'Option1','Option2','Option3'
- ])
- const sexSelectOptions = reactive([
- '男', '女'
- ])
+:::demo
- const suggestionList = reactive([
- {name: 'Option1'},
- {name: 'Option2'},
- {name: 'Option3'},
- ]);
+```vue
+
+
+
+ Name
+
+
+
+
+
+ Age
+
+
+
+
+
+
- const rules = reactive({
- name: [{ required: true, message: '不能为空', trigger: 'blur'}],
- nickname: { required: true, message: '不能为空', trigger: 'blur'},
- age: [
- {
- required: true,
- message: '年龄不能小于0',
- trigger: 'blur',
- validator: (rule, value) => value > 0
- },
- {
- required: true,
- message: '年龄不能大于120',
- trigger: 'input',
- validator: (rule, value) => value < 120
- }
- ],
+
-
+```
+:::
--
Gitee
From 93ca11814b8529ae69d96d7be5c798d1f286a69b Mon Sep 17 00:00:00 2001
From: "1445654576@qq.com" <1445654576@qq.com>
Date: Mon, 30 Aug 2021 00:21:31 +0800
Subject: [PATCH 20/48] =?UTF-8?q?fix:=20=E6=9B=B4=E6=96=B0=E6=96=87?=
=?UTF-8?q?=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
devui/form/src/form-control/form-control.scss | 2 +
devui/form/src/form-item/form-item.tsx | 6 +-
sites/components/form/index.md | 226 +++++++++++++++---
3 files changed, 201 insertions(+), 33 deletions(-)
diff --git a/devui/form/src/form-control/form-control.scss b/devui/form/src/form-control/form-control.scss
index a21d9d91..b2c3667c 100644
--- a/devui/form/src/form-control/form-control.scss
+++ b/devui/form/src/form-control/form-control.scss
@@ -1,4 +1,6 @@
.form-control {
+ position: relative;
+
.star {
color: red;
}
diff --git a/devui/form/src/form-item/form-item.tsx b/devui/form/src/form-item/form-item.tsx
index 25586a6a..d9c019ac 100644
--- a/devui/form/src/form-item/form-item.tsx
+++ b/devui/form/src/form-item/form-item.tsx
@@ -115,7 +115,7 @@ export default defineComponent({
}
},
- render() {
+ render(props) {
const {
isHorizontal,
@@ -123,7 +123,9 @@ export default defineComponent({
showMessage,
tipMessage,
} = this;
- return
+ console.log('form-item props', props);
+
+ return
diff --git a/sites/components/form/index.md b/sites/components/form/index.md
index 28683979..cc11dee0 100644
--- a/sites/components/form/index.md
+++ b/sites/components/form/index.md
@@ -19,10 +19,10 @@
```vue
-
+
- Name
-
+ Name
+
@@ -88,7 +88,7 @@ import {defineComponent, reactive, ref} from 'vue';
export default defineComponent({
setup(props, ctx) {
- const dForm = ref(null);
+ const dFormBasic = ref(null);
let formModel = reactive({
name: 'AlanLee',
age: '24',
@@ -103,14 +103,14 @@ export default defineComponent({
'北京', '上海', '广州', '深圳'
]);
const resetForm = () => {
- console.log('dForm', dForm.value);
- dForm.value.resetFormFields();
+ console.log('dFormBasic', dFormBasic.value);
+ dFormBasic.value.resetFormFields();
}
const onSubmitForm = () => {
console.log('onSubmitForm formModel', formModel)
}
return {
- dForm,
+ dFormBasic,
formModel,
selectOptions,
resetForm,
@@ -148,7 +148,7 @@ Label左右布局方式。
```vue
-
+
Name
@@ -217,7 +217,7 @@ import {defineComponent, reactive, ref} from 'vue';
export default defineComponent({
setup(props, ctx) {
- const dForm = ref(null);
+ const dFormHorizontal = ref(null);
let formModel = reactive({
name: 'AlanLee',
age: '24',
@@ -232,14 +232,14 @@ export default defineComponent({
'北京', '上海', '广州', '深圳'
]);
const resetForm = () => {
- console.log('dForm', dForm.value);
- dForm.value.resetFormFields();
+ console.log('dFormHorizontal', dFormHorizontal.value);
+ dFormHorizontal.value.resetFormFields();
}
const onSubmitForm = () => {
console.log('onSubmitForm formModel', formModel)
}
return {
- dForm,
+ dFormHorizontal,
formModel,
selectOptions,
resetForm,
@@ -276,7 +276,7 @@ export default defineComponent({
```vue
-
+
Name
@@ -345,7 +345,7 @@ import {defineComponent, reactive, ref} from 'vue';
export default defineComponent({
setup(props, ctx) {
- const dForm = ref(null);
+ const dFormModal = ref(null);
let formModel = reactive({
name: 'AlanLee',
age: '24',
@@ -360,14 +360,14 @@ export default defineComponent({
'北京', '上海', '广州', '深圳'
]);
const resetForm = () => {
- console.log('dForm', dForm.value);
+ console.log('dFormModal', dFormModal.value);
dForm.value.resetFormFields();
}
const onSubmitForm = () => {
console.log('onSubmitForm formModel', formModel)
}
return {
- dForm,
+ dFormModal,
formModel,
selectOptions,
resetForm,
@@ -393,6 +393,138 @@ export default defineComponent({
:::
+### 多列表单
+
+> todo
+
+多列表单。
+
+
+:::demo
+
+```vue
+
+
+
+
+ Name
+
+
+
+
+
+
+ Love Fruits
+
+
+
+
+
+ Sex
+
+ 男
+ 女
+
+
+
+ Go off work
+
+
+
+
+
+ Support lady
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 提交
+ 重置
+
+
+
+
+
+
+
+
+
+```
+
+:::
+
+
### 模板驱动表单验证
@@ -405,7 +537,7 @@ export default defineComponent({
```vue
-
+
Name
@@ -417,6 +549,7 @@ export default defineComponent({
+
@@ -426,14 +559,14 @@ import {defineComponent, reactive, ref} from 'vue';
export default defineComponent({
setup(props, ctx) {
- const dForm = ref(null);
+ const dFormTemplateValidate = ref(null);
let formModel = reactive({
name: 'AlanLee',
age: '24',
});
return {
- dForm,
+ dFormTemplateValidate,
formModel,
}
}
@@ -467,7 +600,7 @@ export default defineComponent({
```vue
-
+
Name
@@ -489,7 +622,7 @@ import {defineComponent, reactive, ref} from 'vue';
export default defineComponent({
setup(props, ctx) {
- const dForm = ref(null);
+ const dFormReactiveValidate = ref(null);
let validateFormModel = reactive({
name: 'AlanLee',
age: '24',
@@ -513,7 +646,7 @@ export default defineComponent({
});
return {
- dForm,
+ dFormReactiveValidate,
rules,
validateFormModel,
}
@@ -548,7 +681,7 @@ export default defineComponent({
```vue
-
+
Name
@@ -596,7 +729,7 @@ import {defineComponent, reactive, ref} from 'vue';
export default defineComponent({
setup(props, ctx) {
- const dForm = ref(null);
+ const dFormFeedback = ref(null);
let formModel = reactive({
name: 'AlanLee',
nickname: 'AlanLee97',
@@ -611,7 +744,7 @@ export default defineComponent({
])
return {
- dForm,
+ dFormFeedback,
formModel,
sexSelectOptions,
}
@@ -646,7 +779,7 @@ export default defineComponent({
```vue
-
+
Name
@@ -667,14 +800,14 @@ import {defineComponent, reactive, ref} from 'vue';
export default defineComponent({
setup(props, ctx) {
- const dForm = ref(null);
+ const dFormTogetherValidate = ref(null);
let formModel = reactive({
name: 'AlanLee',
age: '24',
});
return {
- dForm,
+ dFormTogetherValidate,
formModel,
}
}
@@ -707,7 +840,7 @@ export default defineComponent({
```vue
-
+
Name
@@ -728,14 +861,14 @@ import {defineComponent, reactive, ref} from 'vue';
export default defineComponent({
setup(props, ctx) {
- const dForm = ref(null);
+ const dFormWithComponent = ref(null);
let formModel = reactive({
name: 'AlanLee',
age: '24',
});
return {
- dForm,
+ dFormWithComponent,
formModel,
}
}
@@ -754,3 +887,34 @@ export default defineComponent({
```
:::
+
+
+
+### Form Attributes
+
+| 参数 | 说明 | 类型 | 可选值 | 默认值 |
+| ---------- | ------------------------------------------------------------ | ------ | ----------------------------------- | ------------ |
+| layout | 可选,设置表单的排列方式 | string | `horizontal`、`vertical`、`columns` | `horizontal` |
+| labelSize | 可选,设置 label 的占宽,未设置默认为 100px,'sm'对应 80px,'lg'对应 150px | string | `sm`、` `、`lg` | ` ` |
+| labelAlign | 可选,设置水平布局方式下,label 对齐方式 | string | `start`、`center`、`end` | `start` |
+
+
+
+### Form Methods
+
+| 方法名 | 说明 | 参数 |
+| ------ | --------------------------------------------------- | ---- |
+| submit | 可选,使用 dFormSubmit 绑定元素触发提交时,响应事件 | -- |
+
+
+
+### Form-Item Attributes
+
+| 参数 | 说明 | 类型 | 可选值 | 默认值 |
+| ---- | ---- | ---- | ------ | ------ |
+| | | | | |
+| | | | | |
+| | | | | |
+| | | | | |
+| | | | | |
+
--
Gitee
From ee7f58af3eb7462d1a0ad5129e7b3057aa7be660 Mon Sep 17 00:00:00 2001
From: AlanLee <1445654576@qq.com>
Date: Mon, 30 Aug 2021 16:54:29 +0800
Subject: [PATCH 21/48] =?UTF-8?q?fix:=20=E6=9B=B4=E6=96=B0=E6=A8=AA?=
=?UTF-8?q?=E5=90=91=E5=B8=83=E5=B1=80=E6=A0=B7=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
devui/form/src/form-control/form-control.scss | 27 ++++++++++++++
devui/form/src/form-control/form-control.tsx | 10 ++++--
sites/components/form/index.md | 36 ++++++++++++++-----
3 files changed, 61 insertions(+), 12 deletions(-)
diff --git a/devui/form/src/form-control/form-control.scss b/devui/form/src/form-control/form-control.scss
index b2c3667c..534a8a16 100644
--- a/devui/form/src/form-control/form-control.scss
+++ b/devui/form/src/form-control/form-control.scss
@@ -23,6 +23,33 @@
}
}
+ .devui-form-control-container-horizontal {
+ display: flex;
+
+ .devui-radio {
+ &:not(:last-child) {
+ margin-bottom: 0;
+ margin-right: 20px;
+ }
+ }
+
+ .devui-checkbox-group > div:first-child {
+ display: flex;
+ align-items: center;
+ }
+
+ .devui-checkbox-column-margin {
+ &:not(:last-child) {
+ margin-right: 20px;
+ }
+ }
+
+ input,
+ .devui-tags-host {
+ width: 200px;
+ }
+ }
+
.has-feedback {
display: flex;
align-items: center;
diff --git a/devui/form/src/form-control/form-control.tsx b/devui/form/src/form-control/form-control.tsx
index ebb7578a..c29ffd40 100644
--- a/devui/form/src/form-control/form-control.tsx
+++ b/devui/form/src/form-control/form-control.tsx
@@ -1,6 +1,7 @@
-import { defineComponent, inject, onMounted, nextTick, ref, computed } from 'vue';
+import { defineComponent, inject, onMounted, ref, computed, reactive } from 'vue';
import './form-control.scss';
-import Icon from '../../../icon/src/icon'
+import Icon from '../../../icon/src/icon';
+import {IForm} from '../form-types';
export default defineComponent({
name: 'DFormControl',
@@ -21,6 +22,9 @@ export default defineComponent({
setup(props, ctx) {
const formControl = ref();
+ const dForm: IForm = reactive(inject('dForm', {} as IForm));
+ const labelData = reactive(dForm.labelData);
+ const isHorizontal = labelData.layout === 'horizontal';
onMounted(() => {
const dom = formControl.value;
@@ -47,7 +51,7 @@ export default defineComponent({
} = props;
return