feat(form): component `Divider` support `helpMessage`
Divider表单组件支持helpMessage配置
This commit is contained in:
parent
65735926d4
commit
a5ff59237f
|
|
@ -306,14 +306,14 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderItem() {
|
function renderItem() {
|
||||||
const { itemProps, slot, render, field, suffix, component, label } = props.schema;
|
const { itemProps, slot, render, field, suffix, component } = props.schema;
|
||||||
const { labelCol, wrapperCol } = unref(itemLabelWidthProp);
|
const { labelCol, wrapperCol } = unref(itemLabelWidthProp);
|
||||||
const { colon } = props.formProps;
|
const { colon } = props.formProps;
|
||||||
|
|
||||||
if (component === 'Divider') {
|
if (component === 'Divider') {
|
||||||
return (
|
return (
|
||||||
<Col span={24}>
|
<Col span={24}>
|
||||||
<Divider {...unref(getComponentsProps)}>{label}</Divider>
|
<Divider {...unref(getComponentsProps)}>{renderLabelHelpMessage()}</Divider>
|
||||||
</Col>
|
</Col>
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,24 @@
|
||||||
@submit="handleSubmit"
|
@submit="handleSubmit"
|
||||||
@reset="handleReset"
|
@reset="handleReset"
|
||||||
>
|
>
|
||||||
|
<template #selectA="{ model, field }">
|
||||||
|
<a-select
|
||||||
|
:options="optionsA"
|
||||||
|
mode="multiple"
|
||||||
|
v-model:value="model[field]"
|
||||||
|
@change="valueSelectA = model[field]"
|
||||||
|
allowClear
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
<template #selectB="{ model, field }">
|
||||||
|
<a-select
|
||||||
|
:options="optionsB"
|
||||||
|
mode="multiple"
|
||||||
|
v-model:value="model[field]"
|
||||||
|
@change="valueSelectB = model[field]"
|
||||||
|
allowClear
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
<template #localSearch="{ model, field }">
|
<template #localSearch="{ model, field }">
|
||||||
<ApiSelect
|
<ApiSelect
|
||||||
:api="optionsListApi"
|
:api="optionsListApi"
|
||||||
|
|
@ -47,6 +65,26 @@
|
||||||
import { optionsListApi } from '/@/api/demo/select';
|
import { optionsListApi } from '/@/api/demo/select';
|
||||||
import { useDebounceFn } from '@vueuse/core';
|
import { useDebounceFn } from '@vueuse/core';
|
||||||
import { treeOptionsListApi } from '/@/api/demo/tree';
|
import { treeOptionsListApi } from '/@/api/demo/tree';
|
||||||
|
import { Select } from 'ant-design-vue';
|
||||||
|
import { cloneDeep } from 'lodash-es';
|
||||||
|
|
||||||
|
const valueSelectA = ref<string[]>([]);
|
||||||
|
const valueSelectB = ref<string[]>([]);
|
||||||
|
const options = ref<Recordable[]>([]);
|
||||||
|
for (let i = 1; i < 10; i++) options.value.push({ label: '选项' + i, value: `${i}` });
|
||||||
|
|
||||||
|
const optionsA = computed(() => {
|
||||||
|
return cloneDeep(unref(options)).map((op) => {
|
||||||
|
op.disabled = unref(valueSelectB).indexOf(op.value) !== -1;
|
||||||
|
return op;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
const optionsB = computed(() => {
|
||||||
|
return cloneDeep(unref(options)).map((op) => {
|
||||||
|
op.disabled = unref(valueSelectA).indexOf(op.value) !== -1;
|
||||||
|
return op;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
const provincesOptions = [
|
const provincesOptions = [
|
||||||
{
|
{
|
||||||
|
|
@ -101,7 +139,7 @@
|
||||||
|
|
||||||
const schemas: FormSchema[] = [
|
const schemas: FormSchema[] = [
|
||||||
{
|
{
|
||||||
field: '',
|
field: 'divider-basic',
|
||||||
component: 'Divider',
|
component: 'Divider',
|
||||||
label: '基础字段',
|
label: '基础字段',
|
||||||
},
|
},
|
||||||
|
|
@ -299,7 +337,7 @@
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: '',
|
field: 'divider-api-select',
|
||||||
component: 'Divider',
|
component: 'Divider',
|
||||||
label: '远程下拉演示',
|
label: '远程下拉演示',
|
||||||
},
|
},
|
||||||
|
|
@ -373,18 +411,9 @@
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: '',
|
field: 'divider-linked',
|
||||||
component: 'Divider',
|
component: 'Divider',
|
||||||
label: '其它',
|
label: '字段联动',
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'field20',
|
|
||||||
component: 'InputNumber',
|
|
||||||
label: '字段20',
|
|
||||||
required: true,
|
|
||||||
colProps: {
|
|
||||||
span: 8,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'province',
|
field: 'province',
|
||||||
|
|
@ -431,6 +460,46 @@
|
||||||
placeholder: '省份与城市联动',
|
placeholder: '省份与城市联动',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
field: 'divider-selects',
|
||||||
|
component: 'Divider',
|
||||||
|
label: '互斥多选',
|
||||||
|
helpMessage: ['两个Select共用数据源', '但不可选择对方已选中的项目'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'selectA',
|
||||||
|
component: 'Select',
|
||||||
|
label: '互斥SelectA',
|
||||||
|
slot: 'selectA',
|
||||||
|
defaultValue: [],
|
||||||
|
colProps: {
|
||||||
|
span: 8,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'selectB',
|
||||||
|
component: 'Select',
|
||||||
|
label: '互斥SelectB',
|
||||||
|
slot: 'selectB',
|
||||||
|
defaultValue: [],
|
||||||
|
colProps: {
|
||||||
|
span: 8,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'divider-others',
|
||||||
|
component: 'Divider',
|
||||||
|
label: '其它',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'field20',
|
||||||
|
component: 'InputNumber',
|
||||||
|
label: '字段20',
|
||||||
|
required: true,
|
||||||
|
colProps: {
|
||||||
|
span: 8,
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
field: 'field21',
|
field: 'field21',
|
||||||
component: 'Slider',
|
component: 'Slider',
|
||||||
|
|
@ -464,7 +533,7 @@
|
||||||
];
|
];
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: { BasicForm, CollapseContainer, PageWrapper, ApiSelect },
|
components: { BasicForm, CollapseContainer, PageWrapper, ApiSelect, ASelect: Select },
|
||||||
setup() {
|
setup() {
|
||||||
const check = ref(null);
|
const check = ref(null);
|
||||||
const { createMessage } = useMessage();
|
const { createMessage } = useMessage();
|
||||||
|
|
@ -479,6 +548,10 @@
|
||||||
return {
|
return {
|
||||||
schemas,
|
schemas,
|
||||||
optionsListApi,
|
optionsListApi,
|
||||||
|
optionsA,
|
||||||
|
optionsB,
|
||||||
|
valueSelectA,
|
||||||
|
valueSelectB,
|
||||||
onSearch: useDebounceFn(onSearch, 300),
|
onSearch: useDebounceFn(onSearch, 300),
|
||||||
searchParams,
|
searchParams,
|
||||||
handleReset: () => {
|
handleReset: () => {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue