-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
54e0000
commit 2bbb334
Showing
8 changed files
with
528 additions
and
54 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
129 changes: 129 additions & 0 deletions
129
ui/src/components/dynamics-form/constructor/items/MultiSelectConstructor.vue
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,129 @@ | ||
<template> | ||
<el-form-item> | ||
<template #label> | ||
<div class="flex-between"> | ||
选项值 | ||
<el-button link type="primary" @click.stop="addOption()"> | ||
<el-icon class="mr-4"> | ||
<Plus /> | ||
</el-icon> | ||
添加 | ||
</el-button> | ||
</div> | ||
</template> | ||
<el-row style="width: 100%" :gutter="10"> | ||
<el-col :span="10" | ||
><div class="grid-content ep-bg-purple" /> | ||
标签</el-col | ||
> | ||
<el-col :span="12" | ||
><div class="grid-content ep-bg-purple" /> | ||
选项值</el-col | ||
> | ||
</el-row> | ||
<el-row | ||
style="width: 100%" | ||
v-for="(option, $index) in formValue.option_list" | ||
:key="$index" | ||
:gutter="10" | ||
> | ||
<el-col :span="10" | ||
><div class="grid-content ep-bg-purple" /> | ||
<el-input v-model="formValue.option_list[$index].label" placeholder="请输入选项标签" | ||
/></el-col> | ||
<el-col :span="12" | ||
><div class="grid-content ep-bg-purple" /> | ||
<el-input v-model="formValue.option_list[$index].value" placeholder="请输入选项值" | ||
/></el-col> | ||
<el-col :span="1" | ||
><div class="grid-content ep-bg-purple" /> | ||
<el-button link class="ml-8" @click.stop="delOption($index)"> | ||
<el-icon> | ||
<Delete /> | ||
</el-icon> </el-button | ||
></el-col> | ||
</el-row> | ||
</el-form-item> | ||
<el-form-item | ||
label="默认值" | ||
:required="formValue.required" | ||
prop="default_value" | ||
:rules="formValue.required ? [{ required: true, message: '默认值 为必填属性' }] : []" | ||
> | ||
<el-select | ||
class="m-2" | ||
multiple | ||
collapse-tags | ||
filterable | ||
clearable | ||
v-model="formValue.default_value" | ||
:teleported="false" | ||
popper-class="default-select" | ||
> | ||
<el-option | ||
v-for="(option, index) in formValue.option_list" | ||
:key="index" | ||
:label="option.value" | ||
:value="option.value" | ||
/> | ||
</el-select> | ||
</el-form-item> | ||
</template> | ||
<script setup lang="ts"> | ||
import { computed, onMounted } from 'vue' | ||
const props = defineProps<{ | ||
modelValue: any | ||
}>() | ||
const emit = defineEmits(['update:modelValue']) | ||
const formValue = computed({ | ||
set: (item) => { | ||
emit('update:modelValue', item) | ||
}, | ||
get: () => { | ||
return props.modelValue | ||
} | ||
}) | ||
const addOption = () => { | ||
formValue.value.option_list.push({ value: '', label: '' }) | ||
} | ||
const delOption = (index: number) => { | ||
const option = formValue.value.option_list[index] | ||
if (option.value && formValue.value.default_value == option.value) { | ||
formValue.value.default_value = '' | ||
} | ||
formValue.value.option_list.splice(index, 1) | ||
} | ||
const getData = () => { | ||
return { | ||
input_type: 'MultiSelect', | ||
attrs: {}, | ||
default_value: formValue.value.default_value, | ||
textField: 'label', | ||
valueField: 'value', | ||
option_list: formValue.value.option_list | ||
} | ||
} | ||
const rander = (form_data: any) => { | ||
formValue.value.option_list = form_data.option_list || [] | ||
formValue.value.default_value = form_data.default_value | ||
} | ||
defineExpose({ getData, rander }) | ||
onMounted(() => { | ||
formValue.value.option_list = [] | ||
formValue.value.default_value = '' | ||
}) | ||
</script> | ||
<style lang="scss" scoped> | ||
:deep(.el-form-item__label) { | ||
display: block; | ||
} | ||
:deep(.el-select-dropdown) { | ||
max-width: 400px; | ||
} | ||
</style> |
122 changes: 122 additions & 0 deletions
122
ui/src/components/dynamics-form/constructor/items/RadioCardConstructor.vue
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
<template> | ||
<el-form-item> | ||
<template #label> | ||
<div class="flex-between"> | ||
选项值 | ||
<el-button link type="primary" @click.stop="addOption()"> | ||
<el-icon class="mr-4"> | ||
<Plus /> | ||
</el-icon> | ||
添加 | ||
</el-button> | ||
</div> | ||
</template> | ||
|
||
<el-row style="width: 100%" :gutter="10"> | ||
<el-col :span="10" | ||
><div class="grid-content ep-bg-purple" /> | ||
标签</el-col | ||
> | ||
<el-col :span="12" | ||
><div class="grid-content ep-bg-purple" /> | ||
选项值</el-col | ||
> | ||
</el-row> | ||
<el-row | ||
style="width: 100%" | ||
v-for="(option, $index) in formValue.option_list" | ||
:key="$index" | ||
:gutter="10" | ||
> | ||
<el-col :span="10" | ||
><div class="grid-content ep-bg-purple" /> | ||
<el-input v-model="formValue.option_list[$index].label" placeholder="请输入选项标签" | ||
/></el-col> | ||
<el-col :span="12" | ||
><div class="grid-content ep-bg-purple" /> | ||
<el-input v-model="formValue.option_list[$index].value" placeholder="请输入选项值" | ||
/></el-col> | ||
<el-col :span="1" | ||
><div class="grid-content ep-bg-purple" /> | ||
<el-button link class="ml-8" @click.stop="delOption($index)"> | ||
<el-icon> | ||
<Delete /> | ||
</el-icon> </el-button | ||
></el-col> | ||
</el-row> | ||
</el-form-item> | ||
<el-form-item | ||
label="默认值" | ||
:required="formValue.required" | ||
prop="default_value" | ||
:rules="formValue.required ? [{ required: true, message: '默认值 为必填属性' }] : []" | ||
> | ||
<RadioCard | ||
:form-field="formField" | ||
v-model="formValue.default_value" | ||
:other-params="{}" | ||
field="default_value" | ||
> | ||
</RadioCard> | ||
</el-form-item> | ||
</template> | ||
<script setup lang="ts"> | ||
import { computed, onMounted } from 'vue' | ||
import RadioCard from '@/components/dynamics-form/items/radio/RadioCard.vue' | ||
const props = defineProps<{ | ||
modelValue: any | ||
}>() | ||
const emit = defineEmits(['update:modelValue']) | ||
const formValue = computed({ | ||
set: (item) => { | ||
emit('update:modelValue', item) | ||
}, | ||
get: () => { | ||
return props.modelValue | ||
} | ||
}) | ||
const addOption = () => { | ||
formValue.value.option_list.push({ value: '', label: '' }) | ||
} | ||
const delOption = (index: number) => { | ||
const option = formValue.value.option_list[index] | ||
if (option.value && formValue.value.default_value == option.value) { | ||
formValue.value.default_value = '' | ||
} | ||
formValue.value.option_list.splice(index, 1) | ||
} | ||
const formField = computed(() => { | ||
return getData() | ||
}) | ||
const getData = () => { | ||
return { | ||
input_type: 'RadioCard', | ||
attrs: {}, | ||
default_value: formValue.value.default_value, | ||
text_field: 'label', | ||
value_field: 'value', | ||
option_list: formValue.value.option_list | ||
} | ||
} | ||
const rander = (form_data: any) => { | ||
formValue.value.option_list = form_data.option_list || [] | ||
formValue.value.default_value = form_data.default_value | ||
} | ||
defineExpose({ getData, rander }) | ||
onMounted(() => { | ||
formValue.value.option_list = [] | ||
formValue.value.default_value = '' | ||
}) | ||
</script> | ||
<style lang="scss" scoped> | ||
:deep(.el-form-item__label) { | ||
display: block; | ||
} | ||
:deep(.el-select-dropdown) { | ||
max-width: 400px; | ||
} | ||
</style> |
Oops, something went wrong.