|
|
|
@ -9,6 +9,24 @@ |
|
|
|
@submit="handleSubmit" |
|
|
|
@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 }"> |
|
|
|
<ApiSelect |
|
|
|
:api="optionsListApi" |
|
|
|
@ -47,6 +65,26 @@ |
|
|
|
import { optionsListApi } from '/@/api/demo/select'; |
|
|
|
import { useDebounceFn } from '@vueuse/core'; |
|
|
|
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 = [ |
|
|
|
{ |
|
|
|
@ -101,7 +139,7 @@ |
|
|
|
|
|
|
|
const schemas: FormSchema[] = [ |
|
|
|
{ |
|
|
|
field: '', |
|
|
|
field: 'divider-basic', |
|
|
|
component: 'Divider', |
|
|
|
label: '基础字段', |
|
|
|
}, |
|
|
|
@ -299,7 +337,7 @@ |
|
|
|
}, |
|
|
|
}, |
|
|
|
{ |
|
|
|
field: '', |
|
|
|
field: 'divider-api-select', |
|
|
|
component: 'Divider', |
|
|
|
label: '远程下拉演示', |
|
|
|
}, |
|
|
|
@ -373,18 +411,9 @@ |
|
|
|
}, |
|
|
|
}, |
|
|
|
{ |
|
|
|
field: '', |
|
|
|
field: 'divider-linked', |
|
|
|
component: 'Divider', |
|
|
|
label: '其它', |
|
|
|
}, |
|
|
|
{ |
|
|
|
field: 'field20', |
|
|
|
component: 'InputNumber', |
|
|
|
label: '字段20', |
|
|
|
required: true, |
|
|
|
colProps: { |
|
|
|
span: 8, |
|
|
|
}, |
|
|
|
label: '字段联动', |
|
|
|
}, |
|
|
|
{ |
|
|
|
field: 'province', |
|
|
|
@ -431,6 +460,46 @@ |
|
|
|
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', |
|
|
|
component: 'Slider', |
|
|
|
@ -464,7 +533,7 @@ |
|
|
|
]; |
|
|
|
|
|
|
|
export default defineComponent({ |
|
|
|
components: { BasicForm, CollapseContainer, PageWrapper, ApiSelect }, |
|
|
|
components: { BasicForm, CollapseContainer, PageWrapper, ApiSelect, ASelect: Select }, |
|
|
|
setup() { |
|
|
|
const check = ref(null); |
|
|
|
const { createMessage } = useMessage(); |
|
|
|
@ -479,6 +548,10 @@ |
|
|
|
return { |
|
|
|
schemas, |
|
|
|
optionsListApi, |
|
|
|
optionsA, |
|
|
|
optionsB, |
|
|
|
valueSelectA, |
|
|
|
valueSelectB, |
|
|
|
onSearch: useDebounceFn(onSearch, 300), |
|
|
|
searchParams, |
|
|
|
handleReset: () => { |
|
|
|
|