|
|
@ -3,37 +3,41 @@ |
|
|
|
<q-form ref="formRef" :autofocus="false" :greedy="true" v-bind="attrs"> |
|
|
|
<div v-if="fieldsComputed.length > 0" class="grid" :class="formLayoutComputed"> |
|
|
|
<template v-for="(field, index) in fieldsComputed as any" :key="String(index)"> |
|
|
|
<component |
|
|
|
:is="fiedType[field.type] || field.type" |
|
|
|
v-if="field.name" |
|
|
|
v-model="formData[field.name]" |
|
|
|
v-bind="field" |
|
|
|
:form="instance" |
|
|
|
:class=" |
|
|
|
(field.colsFirst ? 'col-start-1 ' : ' ') + |
|
|
|
(field.colSpan === 'full' |
|
|
|
? ' col-span-' + screenColsNumComputed |
|
|
|
: field.colSpan && screenColsNumComputed >= field.colSpan |
|
|
|
? ' col-span-' + field.colSpan |
|
|
|
: ' col-span-1') |
|
|
|
" |
|
|
|
@update:model-value="updateModelValue(field.name, formData[field.name])" |
|
|
|
></component> |
|
|
|
<component |
|
|
|
:is="fiedType[field.type] || field.type" |
|
|
|
v-else |
|
|
|
:form-ref="formRef" |
|
|
|
v-bind="field" |
|
|
|
:form="instance" |
|
|
|
:class=" |
|
|
|
(field.colsFirst ? 'col-start-1 ' : ' ') + |
|
|
|
(field.colSpan === 'full' |
|
|
|
? ' col-span-' + screenColsNumComputed |
|
|
|
: field.colSpan && screenColsNumComputed >= field.colSpan |
|
|
|
? ' col-span-' + field.colSpan |
|
|
|
: ' col-span-1') |
|
|
|
" |
|
|
|
></component> |
|
|
|
<template v-if="field.name"> |
|
|
|
<component |
|
|
|
:is="fiedType[field.type] || field.type" |
|
|
|
:ref="(el) => setComponentRef(el, field.name)" |
|
|
|
v-model="formData[field.name]" |
|
|
|
v-bind="field" |
|
|
|
:form="instance" |
|
|
|
:class=" |
|
|
|
(field.colsFirst ? 'col-start-1 ' : ' ') + |
|
|
|
(field.colSpan === 'full' |
|
|
|
? ' col-span-' + screenColsNumComputed |
|
|
|
: field.colSpan && screenColsNumComputed >= field.colSpan |
|
|
|
? ' col-span-' + field.colSpan |
|
|
|
: ' col-span-1') |
|
|
|
" |
|
|
|
@update:model-value="updateModelValue(field.name, formData[field.name])" |
|
|
|
></component> |
|
|
|
</template> |
|
|
|
<template v-else> |
|
|
|
<component |
|
|
|
:is="fiedType[field.type] || field.type" |
|
|
|
:ref="(el) => setComponentRef(el, field.name)" |
|
|
|
:form-ref="formRef" |
|
|
|
v-bind="field" |
|
|
|
:form="instance" |
|
|
|
:class=" |
|
|
|
(field.colsFirst ? 'col-start-1 ' : ' ') + |
|
|
|
(field.colSpan === 'full' |
|
|
|
? ' col-span-' + screenColsNumComputed |
|
|
|
: field.colSpan && screenColsNumComputed >= field.colSpan |
|
|
|
? ' col-span-' + field.colSpan |
|
|
|
: ' col-span-1') |
|
|
|
" |
|
|
|
></component> |
|
|
|
</template> |
|
|
|
</template> |
|
|
|
</div> |
|
|
|
<slot></slot> |
|
|
@ -49,6 +53,8 @@ import { PageStatusEnum } from '@/platform/components/utils'; |
|
|
|
|
|
|
|
const $q = useQuasar(); |
|
|
|
const attrs = useAttrs(); |
|
|
|
const componentRef = ref({}); |
|
|
|
|
|
|
|
const props = defineProps({ |
|
|
|
modelValue: { |
|
|
|
type: Object, |
|
|
@ -207,6 +213,12 @@ const updateModelValue = (name, value) => { |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
const setComponentRef = (el, fieldName) => { |
|
|
|
if (el) { |
|
|
|
componentRef.value[fieldName] = el; |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
/** |
|
|
|
* 对外暴露方法-获取form所有数据 |
|
|
|
*/ |
|
|
@ -323,6 +335,10 @@ const getFields = () => { |
|
|
|
return formFields; |
|
|
|
}; |
|
|
|
|
|
|
|
const getFieldComponent = (name) => { |
|
|
|
return componentRef.value[name]; |
|
|
|
}; |
|
|
|
|
|
|
|
defineExpose({ |
|
|
|
getFields, |
|
|
|
getData, |
|
|
@ -335,6 +351,7 @@ defineExpose({ |
|
|
|
getStatus, |
|
|
|
getColsNum, |
|
|
|
setValidationErrors, |
|
|
|
getFieldComponent, |
|
|
|
}); |
|
|
|
|
|
|
|
const instance = getCurrentInstance(); |
|
|
|