diff --git a/io.sc.platform.core.frontend/src/platform/components/dialog/WDialog.vue b/io.sc.platform.core.frontend/src/platform/components/dialog/WDialog.vue index 55c10827..f287c700 100644 --- a/io.sc.platform.core.frontend/src/platform/components/dialog/WDialog.vue +++ b/io.sc.platform.core.frontend/src/platform/components/dialog/WDialog.vue @@ -56,7 +56,7 @@ diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WCheckbox.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WCheckbox.vue index ba6768fa..c528a8ec 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WCheckbox.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WCheckbox.vue @@ -1,13 +1,6 @@ @@ -15,7 +8,6 @@ import { computed, useAttrs, ref, watch } from 'vue'; const attrs = useAttrs(); -const rules = attrs.rules; const props = defineProps({ onChange: { type: Function, @@ -48,14 +40,6 @@ watch( }, ); -const rulesComputed = computed(() => { - let result = rules || []; - if (!showIfComputed.value) { - result = []; - } - return result; -}); - const showIfComputed = computed(() => { return props.showIf({ value: checkboxValue.value, diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WCodeMirror.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WCodeMirror.vue index fd77a94d..8e5a11cd 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WCodeMirror.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WCodeMirror.vue @@ -376,9 +376,14 @@ const buttonClick = (button) => { } }; +const validate = () => { + return fieldRef.value.validate(); +}; + defineExpose({ getValue, setValue, configure, + validate, }); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WColorInput.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WColorInput.vue index 66cdb284..28ddcaf5 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WColorInput.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WColorInput.vue @@ -194,4 +194,12 @@ const restoreDefaultValue = () => { colorValueRef.value = restoreValue; emit('update:modelValue', restoreValue, props.form); }; + +const validate = () => { + return colorRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WColorInputPalette.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WColorInputPalette.vue index dd0b0dfd..39116327 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WColorInputPalette.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WColorInputPalette.vue @@ -429,4 +429,12 @@ const restoreDefaultValue = () => { colorValueRef.value = restoreValue; emit('update:modelValue', restoreValue, props.form); }; + +const validate = () => { + return colorRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WCron.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WCron.vue index d1a5b19f..72d6c819 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WCron.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WCron.vue @@ -207,4 +207,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return cronRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WDate.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WDate.vue index d2018336..ec406ab0 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WDate.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WDate.vue @@ -150,4 +150,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return dateRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WFile.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WFile.vue index 7d918b3f..b0362b50 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WFile.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WFile.vue @@ -134,4 +134,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return fileRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WIcon.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WIcon.vue index bcd1d397..ffe2be8c 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WIcon.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WIcon.vue @@ -267,4 +267,12 @@ const show = () => { searchRef.value = ''; document.getElementById(valueRef.value)?.scrollIntoView(true); }; + +const validate = () => { + return iconRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WNumber.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WNumber.vue index 1c95b2c2..01a43d56 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WNumber.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WNumber.vue @@ -133,4 +133,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return numberRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WPassword.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WPassword.vue index b7e95bbd..7ace38b2 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WPassword.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WPassword.vue @@ -132,4 +132,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return pwdRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WPosition.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WPosition.vue index 855dc008..82a8e639 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WPosition.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WPosition.vue @@ -195,4 +195,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return positionRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WSelect.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WSelect.vue index 7036f486..fa6db36b 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WSelect.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WSelect.vue @@ -133,4 +133,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return selectRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WSelectUserText.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WSelectUserText.vue index b33f4452..3f93fea4 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WSelectUserText.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WSelectUserText.vue @@ -88,4 +88,12 @@ const readonlyIfComputed = computed(() => { const disableIfComputed = computed(() => { return props.disableIf(props.form); }); + +const validate = () => { + return textRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WText.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WText.vue index 10284350..f06ef7cb 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WText.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WText.vue @@ -131,4 +131,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return textRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WTextBtn.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WTextBtn.vue index 33f743ae..8c68b5d0 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WTextBtn.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WTextBtn.vue @@ -144,4 +144,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return textBtnRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WTextarea.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WTextarea.vue index 57400260..6a6c42e5 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WTextarea.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WTextarea.vue @@ -131,4 +131,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return textareaRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WTreeSelect.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WTreeSelect.vue index 1007172e..1393eeeb 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WTreeSelect.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WTreeSelect.vue @@ -143,4 +143,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return selectRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/GridBody.vue b/io.sc.platform.core.frontend/src/platform/components/grid/GridBody.vue new file mode 100644 index 00000000..8d6b2fe6 --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/components/grid/GridBody.vue @@ -0,0 +1,351 @@ + + + + diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/GridConfig.vue b/io.sc.platform.core.frontend/src/platform/components/grid/GridConfig.vue index 40edd513..ad238a2f 100644 --- a/io.sc.platform.core.frontend/src/platform/components/grid/GridConfig.vue +++ b/io.sc.platform.core.frontend/src/platform/components/grid/GridConfig.vue @@ -77,7 +77,7 @@ -