添加多个组件实现手动输入

This commit is contained in:
rencheng 2026-05-20 15:00:04 +08:00
parent c54b47bb6c
commit f64950b0a0

View File

@ -34,6 +34,9 @@ const graph = ref<X6Graph | null>(null);
const level3 = ref<InstanceType<typeof ElSelect> | null>(null); const level3 = ref<InstanceType<typeof ElSelect> | null>(null);
const level4 = ref<InstanceType<typeof ElSelect> | null>(null); const level4 = ref<InstanceType<typeof ElSelect> | null>(null);
//
const manualModeInput = ref('');
// //
const formData = reactive({ const formData = reactive({
taskId: '', taskId: '',
@ -87,12 +90,7 @@ function handleModeChange(newValues: string[]) {
// //
added.forEach((value) => { added.forEach((value) => {
let item = modeList.value.find((item: any) => item.value === value); const item = modeList.value.find((item: any) => item.value === value);
// allow-create value使 label modeList
if (!item) {
item = { value, label: value };
modeList.value.push(item);
}
if (item) { if (item) {
graph.value?.addChildNode(formData.sourceId, { graph.value?.addChildNode(formData.sourceId, {
id: value, id: value,
@ -320,6 +318,35 @@ function getFieldById(name: any) {
formData.field = ''; formData.field = '';
}); });
} }
//
function handleAddMode() {
const inputVal = manualModeInput.value.trim();
if (!inputVal) {
ElMessage({ type: 'warning', message: '请输入模式名称' });
return;
}
// label
const exists = modeList.value.find((item: any) => item.label === inputVal);
if (exists) {
//
if (!formData.mode.includes(exists.value)) {
formData.mode.push(exists.value);
handleModeChange([...formData.mode]);
}
else {
ElMessage({ type: 'warning', message: '该模式已添加' });
}
}
else {
//
const newItem = { value: uuidv4(), label: inputVal };
modeList.value.push(newItem);
formData.mode.push(newItem.value);
handleModeChange([...formData.mode]);
}
manualModeInput.value = '';
}
// //
function handleSave() { function handleSave() {
if (!formData.targetUserName) { if (!formData.targetUserName) {
@ -364,11 +391,19 @@ function handleCancel() {
</ElFormItem> </ElFormItem>
<ElFormItem :label="t('mode')"> <ElFormItem :label="t('mode')">
<ElSelect v-model="formData.mode" style="width: 220px" multiple :max-collapse-tags="0" collapse-tags <ElSelect v-model="formData.mode" style="width: 220px" multiple :max-collapse-tags="0" collapse-tags
collapse-tags-tooltip filterable allow-create default-first-option :reserve-keyword="false" collapse-tags-tooltip filterable :placeholder="t('pleaseSelect')" class="custom-select"
:placeholder="t('pleaseSelect')" class="custom-select" @change="handleModeChange"> @change="handleModeChange">
<ElOption v-for="(item, index) in modeList" :key="index" :label="item.label" :value="item.value" /> <ElOption v-for="(item, index) in modeList" :key="index" :label="item.label" :value="item.value" />
</ElSelect> </ElSelect>
</ElFormItem> </ElFormItem>
<ElFormItem label="手动输入模式">
<div style="display: flex; align-items: center;">
<ElInput v-model="manualModeInput" style="width: 160px" placeholder="输入模式名" @keyup.enter="handleAddMode" />
<ElButton type="primary" style="margin-left: 8px;" @click="handleAddMode">
添加
</ElButton>
</div>
</ElFormItem>
<ElFormItem :label="t('dataTable')"> <ElFormItem :label="t('dataTable')">
<ElSelect ref="level3" v-model="formData.dataValue" style="width: 220px" multiple :max-collapse-tags="0" <ElSelect ref="level3" v-model="formData.dataValue" style="width: 220px" multiple :max-collapse-tags="0"
collapse-tags collapse-tags-tooltip :placeholder="t('pleaseSelect')" class="custom-select" collapse-tags collapse-tags-tooltip :placeholder="t('pleaseSelect')" class="custom-select"