Browse Source

修复部分问题

main
likunming 1 year ago
parent
commit
53dfe8fa09
  1. 68
      io.sc.platform.core.frontend/src/platform/components/form/WForm.vue
  2. 3
      io.sc.platform.core.frontend/src/platform/components/form/elements/WCheckbox.vue
  3. 24
      io.sc.platform.core.frontend/src/platform/components/form/elements/WDate.vue
  4. 26
      io.sc.platform.core.frontend/src/platform/components/form/elements/WNumber.vue
  5. 27
      io.sc.platform.core.frontend/src/platform/components/form/elements/WPassword.vue
  6. 26
      io.sc.platform.core.frontend/src/platform/components/form/elements/WSelect.vue
  7. 26
      io.sc.platform.core.frontend/src/platform/components/form/elements/WText.vue
  8. 26
      io.sc.platform.core.frontend/src/platform/components/form/elements/WTextBtn.vue
  9. 26
      io.sc.platform.core.frontend/src/platform/components/form/elements/WTextarea.vue
  10. 2
      io.sc.platform.core.frontend/src/platform/components/utils/componentComm.ts
  11. 87
      io.sc.platform.core.frontend/src/views/likm/Form.vue

68
io.sc.platform.core.frontend/src/platform/components/form/WForm.vue

@ -2,7 +2,7 @@
<div> <div>
<q-form ref="formRef" :autofocus="false" :greedy="true" v-bind="attrs"> <q-form ref="formRef" :autofocus="false" :greedy="true" v-bind="attrs">
<div class="grid" :class="formLayoutComputed"> <div class="grid" :class="formLayoutComputed">
<template v-for="(field, index) in fields as any" :key="String(index)"> <template v-for="(field, index) in fields_ as any" :key="String(index)">
<div <div
:class=" :class="
(field.colsFirst ? 'col-start-1 ' : ' ') + (field.colsFirst ? 'col-start-1 ' : ' ') +
@ -19,6 +19,7 @@
v-model="formData[field.name]" v-model="formData[field.name]"
v-bind="field" v-bind="field"
:form-data="formData" :form-data="formData"
@update:model-value="updateModelValue(field.name, formData[field.name])"
></component> ></component>
<component :is="fiedType[field.type] || field.type" v-else :form-ref="formRef" v-bind="field" :form-data="formData"></component> <component :is="fiedType[field.type] || field.type" v-else :form-ref="formRef" v-bind="field" :form-data="formData"></component>
</div> </div>
@ -51,7 +52,8 @@ const props = defineProps({
const formRef = ref(); const formRef = ref();
const formStatus = ref(PageStatusEnum.新增); const formStatus = ref(PageStatusEnum.新增);
const formModel: any = {}; const formModel: any = {};
const formFieldsMap = new Map(); const formFields = {};
const fields_ = ref([...props.fields]);
// colsNum 0 // colsNum 0
const screenCols = { xs: 1, sm: 2, md: 3, lg: 4, xl: 6 }; const screenCols = { xs: 1, sm: 2, md: 3, lg: 4, xl: 6 };
const fiedType = { const fiedType = {
@ -75,23 +77,23 @@ const defaultValueHandler = (field) => {
}; };
watch( watch(
() => props.fields, () => fields_.value,
(newVal, oldVal) => { (newVal, oldVal) => {
if (newVal) { if (newVal) {
for (const field of props.fields as any) { for (const field of fields_.value as any) {
if (field.name) { if (field.name) {
formModel[field.name] = defaultValueHandler(field); formModel[field.name] = defaultValueHandler(field);
formFieldsMap.set(field.name, field); formFields[field.name] = field;
} }
} }
} }
}, },
); );
for (const field of props.fields as any) { for (const field of fields_.value as any) {
if (field.name) { if (field.name) {
formModel[field.name] = defaultValueHandler(field); formModel[field.name] = defaultValueHandler(field);
formFieldsMap.set(field.name, field); formFields[field.name] = field;
} }
} }
@ -118,6 +120,13 @@ const formLayoutComputed = computed(() => {
return className; return className;
}); });
const updateModelValue = (name, value) => {
if (formFields[name].error) {
formFields[name].error = false;
formFields[name].errorMessage = undefined;
}
};
/** /**
* 对外暴露方法-获取form所有数据 * 对外暴露方法-获取form所有数据
*/ */
@ -130,7 +139,7 @@ const getData = () => {
* @param data 数据对象(JSON格式) * @param data 数据对象(JSON格式)
*/ */
const setData = (data) => { const setData = (data) => {
for (const field of props.fields as any) { for (const field of fields_.value as any) {
formData[field.name] = data[field.name]; formData[field.name] = data[field.name];
} }
}; };
@ -139,7 +148,7 @@ const setData = (data) => {
*/ */
const reset = () => { const reset = () => {
Object.keys(formData).forEach((key) => { Object.keys(formData).forEach((key) => {
formData[key] = defaultValueHandler(formFieldsMap.get(key)); formData[key] = defaultValueHandler(formFields[key]);
}); });
}; };
const formValidate = async () => { const formValidate = async () => {
@ -164,8 +173,7 @@ const validate = async () => {
* @param value 字段值 * @param value 字段值
*/ */
const setFieldValue = (fieldName, value) => { const setFieldValue = (fieldName, value) => {
const field = formFieldsMap.get(fieldName); formData[fieldName] = value;
formData[field.name] = value;
}; };
/** /**
* 对外暴露方法-获取字段值 * 对外暴露方法-获取字段值
@ -194,9 +202,44 @@ const getRowColsNum = () => {
return screenColsNumComputed.value; return screenColsNumComputed.value;
}; };
/**
* 错误消息类型
*
* @param fieldName 字段名
* @param errorMessage 错误消息
*/
type errorType = {
fieldName: string;
errorMessage: string;
};
/**
* 对外暴露方法-设置后台校验错误信息
* @param errors 错误消息集合
*/
const setValidationErrors = (errors: errorType[]) => {
if (errors && errors.length > 0) {
const grouped = {};
errors.map(({ fieldName, ...rest }) => {
grouped[fieldName] = grouped[fieldName] || [];
grouped[fieldName].push(rest);
});
for (let name in grouped) {
if (formFields[name]) {
formFields[name].error = true;
formFields[name].errorMessage = grouped[name]
.map((obj) => {
return obj.errorMessage;
})
.join('、');
}
}
}
};
defineExpose({ defineExpose({
data: formData, data: formData,
fieldsMap: formFieldsMap, fields: formFields,
getData, getData,
setData, setData,
reset, reset,
@ -206,5 +249,6 @@ defineExpose({
setStatus, setStatus,
getStatus, getStatus,
getRowColsNum, getRowColsNum,
setValidationErrors,
}); });
</script> </script>

3
io.sc.platform.core.frontend/src/platform/components/form/elements/WCheckbox.vue

@ -27,6 +27,9 @@ const props = defineProps({
const rulesComputed = computed(() => { const rulesComputed = computed(() => {
let rules = inRules || <any>[]; let rules = inRules || <any>[];
if (hideIfComputed.value) {
rules = [];
}
return rules; return rules;
}); });

24
io.sc.platform.core.frontend/src/platform/components/form/elements/WDate.vue

@ -2,6 +2,7 @@
<div> <div>
<q-input <q-input
v-show="!hideIfComputed" v-show="!hideIfComputed"
ref="dateRef"
:hide-bottom-space="true" :hide-bottom-space="true"
:hide-hint="true" :hide-hint="true"
:outlined="true" :outlined="true"
@ -32,6 +33,7 @@ import { ref, computed, defineProps, useAttrs, watch } from 'vue';
import { FormValidators } from '@/platform/components'; import { FormValidators } from '@/platform/components';
import { IconEnum } from '@/platform/enums'; import { IconEnum } from '@/platform/enums';
const dateRef = ref();
const date = ref(null); const date = ref(null);
const attrs = useAttrs(); const attrs = useAttrs();
const inRules = attrs.rules; const inRules = attrs.rules;
@ -42,11 +44,13 @@ const props = defineProps({
return false; return false;
}, },
}, },
required: {
type: Boolean,
default: false,
},
requiredIf: { requiredIf: {
type: Function, type: Function,
default: () => { default: undefined,
return false;
},
}, },
readonlyIf: { readonlyIf: {
type: Function, type: Function,
@ -73,8 +77,11 @@ const rulesComputed = computed(() => {
let rules = inRules || <any>[]; let rules = inRules || <any>[];
if (!hideIfComputed.value && requiredIfComputed.value) { if (!hideIfComputed.value && requiredIfComputed.value) {
rules.push(FormValidators.required()); rules.push(FormValidators.required());
} else { } else if (hideIfComputed.value) {
rules.splice(rules.length - 1, 1); rules = [];
}
if (dateRef?.value) {
dateRef.value.resetValidation();
} }
return rules; return rules;
}); });
@ -83,7 +90,12 @@ const hideIfComputed = computed(() => {
return props.hideIf(); return props.hideIf();
}); });
const requiredIfComputed = computed(() => { const requiredIfComputed = computed(() => {
return props.requiredIf(); if (props.requiredIf) {
return props.requiredIf() || false;
} else if (props.required) {
return true;
}
return false;
}); });
const readonlyIfComputed = computed(() => { const readonlyIfComputed = computed(() => {
return props.readonlyIf(); return props.readonlyIf();

26
io.sc.platform.core.frontend/src/platform/components/form/elements/WNumber.vue

@ -2,6 +2,7 @@
<div> <div>
<q-input <q-input
v-show="!hideIfComputed" v-show="!hideIfComputed"
ref="numberRef"
:hide-bottom-space="true" :hide-bottom-space="true"
:hide-hint="true" :hide-hint="true"
:outlined="true" :outlined="true"
@ -19,9 +20,10 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { computed, defineProps, useAttrs } from 'vue'; import { ref, computed, defineProps, useAttrs } from 'vue';
import { FormValidators } from '@/platform/components'; import { FormValidators } from '@/platform/components';
const numberRef = ref();
const attrs = useAttrs(); const attrs = useAttrs();
const inRules = attrs.rules; const inRules = attrs.rules;
const props = defineProps({ const props = defineProps({
@ -32,11 +34,13 @@ const props = defineProps({
return false; return false;
}, },
}, },
required: {
type: Boolean,
default: false,
},
requiredIf: { requiredIf: {
type: Function, type: Function,
default: () => { default: undefined,
return false;
},
}, },
readonlyIf: { readonlyIf: {
type: Function, type: Function,
@ -57,8 +61,11 @@ const rulesComputed = computed(() => {
rules.push(FormValidators.maxPrecision(props.precision)); rules.push(FormValidators.maxPrecision(props.precision));
if (!hideIfComputed.value && requiredIfComputed.value) { if (!hideIfComputed.value && requiredIfComputed.value) {
rules.push(FormValidators.required()); rules.push(FormValidators.required());
} else { } else if (hideIfComputed.value) {
rules.splice(rules.length - 1, 1); rules = [];
}
if (numberRef?.value) {
numberRef.value.resetValidation();
} }
return rules; return rules;
}); });
@ -67,7 +74,12 @@ const hideIfComputed = computed(() => {
return props.hideIf(); return props.hideIf();
}); });
const requiredIfComputed = computed(() => { const requiredIfComputed = computed(() => {
return props.requiredIf(); if (props.requiredIf) {
return props.requiredIf() || false;
} else if (props.required) {
return true;
}
return false;
}); });
const readonlyIfComputed = computed(() => { const readonlyIfComputed = computed(() => {
return props.readonlyIf(); return props.readonlyIf();

27
io.sc.platform.core.frontend/src/platform/components/form/elements/WPassword.vue

@ -2,12 +2,14 @@
<div> <div>
<q-input <q-input
v-show="!hideIfComputed" v-show="!hideIfComputed"
ref="pwdRef"
:hide-bottom-space="true" :hide-bottom-space="true"
:hide-hint="true" :hide-hint="true"
:outlined="true" :outlined="true"
:dense="true" :dense="true"
v-bind="attrs" v-bind="attrs"
type="password" type="password"
autocomplete="off"
:rules="rulesComputed" :rules="rulesComputed"
:readonly="readonlyIfComputed" :readonly="readonlyIfComputed"
:disable="disableIfComputed" :disable="disableIfComputed"
@ -18,9 +20,10 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { computed, defineProps, useAttrs } from 'vue'; import { ref, computed, defineProps, useAttrs } from 'vue';
import { FormValidators } from '@/platform/components'; import { FormValidators } from '@/platform/components';
const pwdRef = ref();
const attrs = useAttrs(); const attrs = useAttrs();
const inRules = attrs.rules; const inRules = attrs.rules;
const props = defineProps({ const props = defineProps({
@ -30,11 +33,13 @@ const props = defineProps({
return false; return false;
}, },
}, },
required: {
type: Boolean,
default: false,
},
requiredIf: { requiredIf: {
type: Function, type: Function,
default: () => { default: undefined,
return false;
},
}, },
readonlyIf: { readonlyIf: {
type: Function, type: Function,
@ -54,8 +59,11 @@ const rulesComputed = computed(() => {
let rules = inRules || <any>[]; let rules = inRules || <any>[];
if (!hideIfComputed.value && requiredIfComputed.value) { if (!hideIfComputed.value && requiredIfComputed.value) {
rules.push(FormValidators.required()); rules.push(FormValidators.required());
} else { } else if (hideIfComputed.value) {
rules.splice(rules.length - 1, 1); rules = [];
}
if (pwdRef?.value) {
pwdRef.value.resetValidation();
} }
return rules; return rules;
}); });
@ -64,7 +72,12 @@ const hideIfComputed = computed(() => {
return props.hideIf(); return props.hideIf();
}); });
const requiredIfComputed = computed(() => { const requiredIfComputed = computed(() => {
return props.requiredIf(); if (props.requiredIf) {
return props.requiredIf() || false;
} else if (props.required) {
return true;
}
return false;
}); });
const readonlyIfComputed = computed(() => { const readonlyIfComputed = computed(() => {
return props.readonlyIf(); return props.readonlyIf();

26
io.sc.platform.core.frontend/src/platform/components/form/elements/WSelect.vue

@ -2,6 +2,7 @@
<div> <div>
<q-select <q-select
v-show="!hideIfComputed" v-show="!hideIfComputed"
ref="selectRef"
emit-value emit-value
map-options map-options
:hide-bottom-space="true" :hide-bottom-space="true"
@ -19,9 +20,10 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { computed, defineProps, useAttrs } from 'vue'; import { ref, computed, defineProps, useAttrs } from 'vue';
import { FormValidators } from '@/platform/components'; import { FormValidators } from '@/platform/components';
const selectRef = ref();
const attrs = useAttrs(); const attrs = useAttrs();
const inRules = attrs.rules; const inRules = attrs.rules;
const props = defineProps({ const props = defineProps({
@ -31,11 +33,13 @@ const props = defineProps({
return false; return false;
}, },
}, },
required: {
type: Boolean,
default: false,
},
requiredIf: { requiredIf: {
type: Function, type: Function,
default: () => { default: undefined,
return false;
},
}, },
readonlyIf: { readonlyIf: {
type: Function, type: Function,
@ -55,8 +59,11 @@ const rulesComputed = computed(() => {
let rules = inRules || <any>[]; let rules = inRules || <any>[];
if (!hideIfComputed.value && requiredIfComputed.value) { if (!hideIfComputed.value && requiredIfComputed.value) {
rules.push(FormValidators.required()); rules.push(FormValidators.required());
} else { } else if (hideIfComputed.value) {
rules.splice(rules.length - 1, 1); rules = [];
}
if (selectRef?.value) {
selectRef.value.resetValidation();
} }
return rules; return rules;
}); });
@ -65,7 +72,12 @@ const hideIfComputed = computed(() => {
return props.hideIf(); return props.hideIf();
}); });
const requiredIfComputed = computed(() => { const requiredIfComputed = computed(() => {
return props.requiredIf(); if (props.requiredIf) {
return props.requiredIf() || false;
} else if (props.required) {
return true;
}
return false;
}); });
const readonlyIfComputed = computed(() => { const readonlyIfComputed = computed(() => {
return props.readonlyIf(); return props.readonlyIf();

26
io.sc.platform.core.frontend/src/platform/components/form/elements/WText.vue

@ -2,6 +2,7 @@
<div> <div>
<q-input <q-input
v-show="!hideIfComputed" v-show="!hideIfComputed"
ref="textRef"
:hide-bottom-space="true" :hide-bottom-space="true"
:hide-hint="true" :hide-hint="true"
:outlined="true" :outlined="true"
@ -18,9 +19,10 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { computed, defineProps, useAttrs } from 'vue'; import { ref, computed, defineProps, useAttrs } from 'vue';
import { FormValidators } from '@/platform/components'; import { FormValidators } from '@/platform/components';
const textRef = ref();
const attrs = useAttrs(); const attrs = useAttrs();
const inRules = attrs.rules; const inRules = attrs.rules;
const props = defineProps({ const props = defineProps({
@ -30,11 +32,13 @@ const props = defineProps({
return false; return false;
}, },
}, },
required: {
type: Boolean,
default: false,
},
requiredIf: { requiredIf: {
type: Function, type: Function,
default: () => { default: undefined,
return false;
},
}, },
readonlyIf: { readonlyIf: {
type: Function, type: Function,
@ -54,8 +58,11 @@ const rulesComputed = computed(() => {
let rules = inRules || <any>[]; let rules = inRules || <any>[];
if (!hideIfComputed.value && requiredIfComputed.value) { if (!hideIfComputed.value && requiredIfComputed.value) {
rules.push(FormValidators.required()); rules.push(FormValidators.required());
} else { } else if (hideIfComputed.value) {
rules.splice(rules.length - 1, 1); rules = [];
}
if (textRef?.value) {
textRef.value.resetValidation();
} }
return rules; return rules;
}); });
@ -64,7 +71,12 @@ const hideIfComputed = computed(() => {
return props.hideIf(); return props.hideIf();
}); });
const requiredIfComputed = computed(() => { const requiredIfComputed = computed(() => {
return props.requiredIf(); if (props.requiredIf) {
return props.requiredIf() || false;
} else if (props.required) {
return true;
}
return false;
}); });
const readonlyIfComputed = computed(() => { const readonlyIfComputed = computed(() => {
return props.readonlyIf(); return props.readonlyIf();

26
io.sc.platform.core.frontend/src/platform/components/form/elements/WTextBtn.vue

@ -2,6 +2,7 @@
<div> <div>
<q-input <q-input
v-show="!hideIfComputed" v-show="!hideIfComputed"
ref="textBtnRef"
:hide-bottom-space="true" :hide-bottom-space="true"
:hide-hint="true" :hide-hint="true"
:outlined="true" :outlined="true"
@ -30,9 +31,10 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { computed, defineProps, useAttrs } from 'vue'; import { ref, computed, defineProps, useAttrs } from 'vue';
import { FormValidators } from '@/platform/components'; import { FormValidators } from '@/platform/components';
const textBtnRef = ref();
const attrs = useAttrs(); const attrs = useAttrs();
const inRules = attrs.rules; const inRules = attrs.rules;
const props = defineProps({ const props = defineProps({
@ -42,11 +44,13 @@ const props = defineProps({
return false; return false;
}, },
}, },
required: {
type: Boolean,
default: false,
},
requiredIf: { requiredIf: {
type: Function, type: Function,
default: () => { default: undefined,
return false;
},
}, },
readonlyIf: { readonlyIf: {
type: Function, type: Function,
@ -66,8 +70,11 @@ const rulesComputed = computed(() => {
let rules = inRules || <any>[]; let rules = inRules || <any>[];
if (!hideIfComputed.value && requiredIfComputed.value) { if (!hideIfComputed.value && requiredIfComputed.value) {
rules.push(FormValidators.required()); rules.push(FormValidators.required());
} else { } else if (hideIfComputed.value) {
rules.splice(rules.length - 1, 1); rules = [];
}
if (textBtnRef?.value) {
textBtnRef.value.resetValidation();
} }
return rules; return rules;
}); });
@ -76,7 +83,12 @@ const hideIfComputed = computed(() => {
return props.hideIf(); return props.hideIf();
}); });
const requiredIfComputed = computed(() => { const requiredIfComputed = computed(() => {
return props.requiredIf(); if (props.requiredIf) {
return props.requiredIf() || false;
} else if (props.required) {
return true;
}
return false;
}); });
const readonlyIfComputed = computed(() => { const readonlyIfComputed = computed(() => {
return props.readonlyIf(); return props.readonlyIf();

26
io.sc.platform.core.frontend/src/platform/components/form/elements/WTextarea.vue

@ -2,6 +2,7 @@
<div> <div>
<q-input <q-input
v-show="!hideIfComputed" v-show="!hideIfComputed"
ref="textareaRef"
:hide-bottom-space="true" :hide-bottom-space="true"
:hide-hint="true" :hide-hint="true"
:outlined="true" :outlined="true"
@ -18,9 +19,10 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { computed, defineProps, useAttrs } from 'vue'; import { ref, computed, defineProps, useAttrs } from 'vue';
import { FormValidators } from '@/platform/components'; import { FormValidators } from '@/platform/components';
const textareaRef = ref();
const attrs = useAttrs(); const attrs = useAttrs();
const inRules = attrs.rules; const inRules = attrs.rules;
const props = defineProps({ const props = defineProps({
@ -30,11 +32,13 @@ const props = defineProps({
return false; return false;
}, },
}, },
required: {
type: Boolean,
default: false,
},
requiredIf: { requiredIf: {
type: Function, type: Function,
default: () => { default: undefined,
return false;
},
}, },
readonlyIf: { readonlyIf: {
type: Function, type: Function,
@ -54,8 +58,11 @@ const rulesComputed = computed(() => {
let rules = inRules || <any>[]; let rules = inRules || <any>[];
if (!hideIfComputed.value && requiredIfComputed.value) { if (!hideIfComputed.value && requiredIfComputed.value) {
rules.push(FormValidators.required()); rules.push(FormValidators.required());
} else { } else if (hideIfComputed.value) {
rules.splice(rules.length - 1, 1); rules = [];
}
if (textareaRef?.value) {
textareaRef.value.resetValidation();
} }
return rules; return rules;
}); });
@ -64,7 +71,12 @@ const hideIfComputed = computed(() => {
return props.hideIf(); return props.hideIf();
}); });
const requiredIfComputed = computed(() => { const requiredIfComputed = computed(() => {
return props.requiredIf(); if (props.requiredIf) {
return props.requiredIf() || false;
} else if (props.required) {
return true;
}
return false;
}); });
const readonlyIfComputed = computed(() => { const readonlyIfComputed = computed(() => {
return props.readonlyIf(); return props.readonlyIf();

2
io.sc.platform.core.frontend/src/platform/components/utils/componentComm.ts

@ -283,7 +283,7 @@ function columnChildrenHandler(item: any, gridColumns: any) {
export function extractTableColumnsProps(props: any) { export function extractTableColumnsProps(props: any) {
const gridColumns = <any>[]; const gridColumns = <any>[];
if (props.columns && props.columns.length > 0) { if (props.columns && props.columns.length > 0) {
if (props.showSortNo) { if (props.sortNo && !props.tree) {
gridColumns.push({ name: '_sortNo_', align: 'center', label: '序号', field: '_sortNo_' }); gridColumns.push({ name: '_sortNo_', align: 'center', label: '序号', field: '_sortNo_' });
} }
props.columns.forEach((item: any) => { props.columns.forEach((item: any) => {

87
io.sc.platform.core.frontend/src/views/likm/Form.vue

@ -8,36 +8,42 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive } from 'vue'; import { ref, reactive } from 'vue';
import { FormValidators } from '@/platform/components'; import { FormValidators } from '@/platform/components';
import { useI18n } from 'vue-i18n';
const { t } = useI18n();
const formRef = ref(); const formRef = ref();
const aaaa = { const aaaa = {
fields: [ fields: [
{ {
label: '姓名', label: t('theme.main'),
name: 'name', name: 'name',
type: 'w-text', type: 'password',
// maxlength: 10, // maxlength: 10,
rules: [FormValidators.lengthRange(5, 10, '22222')], required: true,
defaultValue: '123', // requiredIf: () => {
// return false;
// },
colspan: 2, colspan: 2,
requiredIf: () => true, // requiredIf: () => false,
'onUpdate:modelValue': () => {}, // 'onUpdate:modelValue': (value) => {
// formRef.value.data.ah = '111';
// },
onFocus: () => { onFocus: () => {
// console.info('33333333'); // console.info('33333333');
}, },
}, },
{ // {
label: '机构', // label: '',
name: 'org', // name: 'org',
type: 'w-text-btn', // type: 'w-text-btn',
requiredIf: () => true, // requiredIf: () => true,
// buttonPosition: 'prepend', // // buttonPosition: 'prepend',
button: { // button: {
icon: 'home', // icon: 'home',
click: () => { // click: () => {
console.info('点击!!'); // console.info('');
}, // },
}, // },
}, // },
{ {
label: '年龄', label: '年龄',
name: 'age', name: 'age',
@ -56,6 +62,8 @@ const aaaa = {
label: '爱好', label: '爱好',
name: 'ah', name: 'ah',
type: 'w-text', type: 'w-text',
rules: [],
reactiveRules: true,
requiredIf: () => true, requiredIf: () => true,
}, },
{ {
@ -75,9 +83,9 @@ const aaaa = {
requiredIf: () => true, requiredIf: () => true,
'onUpdate:modelValue': (value) => { 'onUpdate:modelValue': (value) => {
if (value === 1) { if (value === 1) {
formRef.value.fieldsMap.get('addr').label = '地址2222'; formRef.value.fields.addr.label = '地址2222';
} else { } else {
formRef.value.fieldsMap.get('addr').label = '地址3333'; formRef.value.fields.addr.label = '地址3333';
} }
}, },
}, },
@ -87,16 +95,16 @@ const aaaa = {
rows: 2, rows: 2,
colspan: 'full', colspan: 'full',
type: 'w-textarea', type: 'w-textarea',
hideIf: () => { // hideIf: () => {
if (formRef.value) { // if (formRef.value) {
if (formRef.value.data.sex && formRef.value.data.sex === 1) { // if (formRef.value.data.sex && formRef.value.data.sex === 1) {
return false; // return true;
} else { // } else {
return false; // return false;
} // }
} // }
return false; // return false;
}, // },
requiredIf: () => true, requiredIf: () => true,
// readonlyIf: () => { // readonlyIf: () => {
// return true; // return true;
@ -129,10 +137,19 @@ const aaaa = {
}; };
const submit = async () => { const submit = async () => {
aaaa.fields[1].required = false; // aaaa.fields[1].required = false;
const validateResult = await formRef.value.validate(); // const validateResult = await formRef.value.validate();
console.info('表单验证结果:', validateResult); // console.info('', validateResult);
console.info('数据:', formRef.value.getData()); const errors = [
{ fieldName: 'name', errorMessage: '个数必须在1和4之间' },
{ fieldName: 'name', errorMessage: '不能包含@符号' },
{ fieldName: 'age', errorMessage: '年龄不能为负数' },
];
formRef.value.setValidationErrors(errors);
// console.info('', formRef.value.getData());
// formRef.value.fieldsMap.get('name').required = false;
// console.info('xxx===', formRef.value.fieldsMap.get('ah'));
// const validateResult = await formRef.value.validate();
}; };
const reset = () => { const reset = () => {
formRef.value.reset(); formRef.value.reset();

Loading…
Cancel
Save