|
|
@@ -20,6 +20,8 @@
|
|
|
:showBottomBorder="!isLast"
|
|
|
:required="Boolean(item.rules?.length)"
|
|
|
:rules="item.rules"
|
|
|
+ :disabled="disabled"
|
|
|
+ :readonly="readonly"
|
|
|
v-bind="{
|
|
|
...params,
|
|
|
...extraDefine?.itemProps || {},
|
|
|
@@ -36,6 +38,8 @@
|
|
|
:showBottomBorder="!isLast"
|
|
|
:requireChildRef="() => itemRef"
|
|
|
:rules="item.rules"
|
|
|
+ :disabled="disabled"
|
|
|
+ :readonly="readonly"
|
|
|
v-bind="{
|
|
|
...extraDefine?.itemProps || {},
|
|
|
...item.formProps,
|
|
|
@@ -50,6 +54,7 @@
|
|
|
<Stepper
|
|
|
ref="itemRef"
|
|
|
:modelValue="model"
|
|
|
+ :disabled="disabled || readonly"
|
|
|
@update:modelValue="onValueChanged"
|
|
|
v-bind="params"
|
|
|
/>
|
|
|
@@ -58,6 +63,7 @@
|
|
|
<Switch
|
|
|
ref="itemRef"
|
|
|
:modelValue="model"
|
|
|
+ :disabled="disabled || readonly"
|
|
|
@update:modelValue="onValueChanged"
|
|
|
v-bind="params"
|
|
|
/>
|
|
|
@@ -66,6 +72,7 @@
|
|
|
<RadioValue
|
|
|
ref="itemRef"
|
|
|
:modelValue="model"
|
|
|
+ :disabled="disabled || readonly"
|
|
|
@update:modelValue="onValueChanged"
|
|
|
v-bind="(params as any as RadioValueProps)"
|
|
|
/>
|
|
|
@@ -74,6 +81,7 @@
|
|
|
<RadioIdField
|
|
|
ref="itemRef"
|
|
|
:modelValue="model"
|
|
|
+ :disabled="disabled || readonly"
|
|
|
@update:modelValue="onValueChanged"
|
|
|
v-bind="(params as any as RadioIdFieldProps)"
|
|
|
/>
|
|
|
@@ -83,6 +91,7 @@
|
|
|
<NaPickerField
|
|
|
ref="itemRef"
|
|
|
:modelValue="model"
|
|
|
+ :disabled="disabled || readonly"
|
|
|
@update:modelValue="onValueChanged"
|
|
|
v-bind="(params as any as PickerFieldProps)"
|
|
|
/>
|
|
|
@@ -92,6 +101,7 @@
|
|
|
<Rate
|
|
|
ref="itemRef"
|
|
|
:modelValue="model"
|
|
|
+ :disabled="disabled || readonly"
|
|
|
@update:modelValue="onValueChanged"
|
|
|
v-bind="(params as any as RateProps)"
|
|
|
/>
|
|
|
@@ -100,6 +110,8 @@
|
|
|
<UploaderField
|
|
|
ref="itemRef"
|
|
|
:modelValue="model"
|
|
|
+ :disabled="disabled"
|
|
|
+ :readonly="readonly"
|
|
|
@update:modelValue="onValueChanged"
|
|
|
v-bind="(params as any as UploaderFieldProps)"
|
|
|
/>
|
|
|
@@ -108,6 +120,8 @@
|
|
|
<PickerIdField
|
|
|
ref="itemRef"
|
|
|
:modelValue="model"
|
|
|
+ :disabled="disabled"
|
|
|
+ :readonly="readonly"
|
|
|
@update:modelValue="onValueChanged"
|
|
|
v-bind="(params as any as PickerIdFieldProps)"
|
|
|
/>
|
|
|
@@ -116,6 +130,8 @@
|
|
|
<PickerCityField
|
|
|
ref="itemRef"
|
|
|
:modelValue="model"
|
|
|
+ :disabled="disabled"
|
|
|
+ :readonly="readonly"
|
|
|
@update:modelValue="onValueChanged"
|
|
|
v-bind="(params as any)"
|
|
|
/>
|
|
|
@@ -124,6 +140,8 @@
|
|
|
<PickerAddressField
|
|
|
ref="itemRef"
|
|
|
:modelValue="model"
|
|
|
+ :disabled="disabled"
|
|
|
+ :readonly="readonly"
|
|
|
@update:modelValue="onValueChanged"
|
|
|
v-bind="(params as any)"
|
|
|
/>
|
|
|
@@ -132,6 +150,7 @@
|
|
|
<PickerLonlat
|
|
|
ref="itemRef"
|
|
|
:modelValue="model"
|
|
|
+ :disabled="disabled || readonly"
|
|
|
@update:modelValue="(v:any) => onValueChanged(v)"
|
|
|
v-bind="params"
|
|
|
/>
|
|
|
@@ -140,6 +159,7 @@
|
|
|
<CheckBox
|
|
|
ref="itemRef"
|
|
|
:modelValue="model"
|
|
|
+ :disabled="disabled || readonly"
|
|
|
@update:modelValue="onValueChanged"
|
|
|
v-bind="params"
|
|
|
/>
|
|
|
@@ -148,6 +168,7 @@
|
|
|
<CheckBoxList
|
|
|
ref="itemRef"
|
|
|
:modelValue="model"
|
|
|
+ :disabled="disabled || readonly"
|
|
|
@update:modelValue="onValueChanged"
|
|
|
v-bind="(params)"
|
|
|
/>
|
|
|
@@ -156,6 +177,7 @@
|
|
|
<CheckBoxTreeList
|
|
|
ref="itemRef"
|
|
|
:modelValue="model"
|
|
|
+ :disabled="disabled || readonly"
|
|
|
@update:modelValue="onValueChanged"
|
|
|
v-bind="(params as any as CheckBoxTreeListProps)"
|
|
|
/>
|
|
|
@@ -164,6 +186,7 @@
|
|
|
<CheckBoxToInt
|
|
|
ref="itemRef"
|
|
|
:modelValue="model"
|
|
|
+ :disabled="disabled || readonly"
|
|
|
@update:modelValue="onValueChanged"
|
|
|
v-bind="params"
|
|
|
/>
|
|
|
@@ -201,6 +224,7 @@
|
|
|
<template v-else-if="item.type === 'button'">
|
|
|
<Button
|
|
|
ref="itemRef"
|
|
|
+ :disabled="disabled || readonly"
|
|
|
v-bind="params"
|
|
|
/>
|
|
|
</template>
|
|
|
@@ -224,13 +248,15 @@
|
|
|
:item="item"
|
|
|
:name="name"
|
|
|
:isLast="isLast"
|
|
|
+ :disabled="disabled"
|
|
|
+ :readonly="readonly"
|
|
|
/>
|
|
|
</slot>
|
|
|
</Field>
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
-import { computed, inject, onBeforeUnmount, onMounted, ref, watch, type PropType, type Ref } from 'vue';
|
|
|
+import { computed, inject, onBeforeUnmount, onMounted, ref, type PropType, type Ref } from 'vue';
|
|
|
import type { IDynamicFormItem, IDynamicFormItemCallback, IDynamicFormObject, IDynamicFormOptions, IDynamicFormRef } from '.';
|
|
|
import Field from '../form/Field.vue';
|
|
|
import Stepper from '../form/Stepper.vue';
|
|
|
@@ -260,6 +286,7 @@ import Button from '../basic/Button.vue';
|
|
|
import Alert from '../feedback/Alert.vue';
|
|
|
import Image from '../basic/Image.vue';
|
|
|
import CheckBoxTreeList, { type CheckBoxTreeListProps } from './wrappers/CheckBoxTreeList.vue';
|
|
|
+import { useInjectFormContext, useInjectFormItemContext } from '../form/FormContext';
|
|
|
|
|
|
export interface FormCeilProps {
|
|
|
model: unknown,
|
|
|
@@ -334,6 +361,10 @@ const finalOptions = inject<Ref<IDynamicFormOptions>>('finalOptions');
|
|
|
const globalParams = inject<Ref<IDynamicFormObject>>('globalParams');
|
|
|
const formRef = inject<IDynamicFormRef>('formRef');
|
|
|
const formName = inject('formName', '');
|
|
|
+const context = useInjectFormItemContext();
|
|
|
+const formContext = useInjectFormContext();
|
|
|
+const disabled = computed(() => props.disabled || formContext?.disabled.value || context?.disabled.value);
|
|
|
+const readonly = computed(() => formContext?.readonly.value || context?.readonly.value);
|
|
|
|
|
|
function evaluateCallback(val: unknown|IDynamicFormItemCallback<unknown>) {
|
|
|
if (typeof val === 'object' && typeof (val as IDynamicFormItemCallback<unknown>).callback === 'function')
|