<script lang="ts" setup>
|
import { reactive, toRefs, watch } from 'vue';
|
|
import { ScrollContainer } from '@jnpf/ui';
|
|
import draggable from 'vuedraggable';
|
|
interface State {
|
leftKitActiveKey: any[];
|
}
|
|
const props = defineProps({
|
kitList: { default: () => [], type: Array as PropType<any[]> },
|
cloneKit: { default: undefined, type: Function },
|
});
|
const emit = defineEmits(['cloneKit', 'onLeftKitEnd', 'addKit']);
|
const state = reactive<State>({
|
leftKitActiveKey: [],
|
});
|
const { leftKitActiveKey } = toRefs(state);
|
|
watch(
|
() => props.kitList,
|
(list) => {
|
state.leftKitActiveKey = list.map((o) => o.id);
|
},
|
{
|
immediate: true,
|
},
|
);
|
|
function onLeftKitEnd(e) {
|
emit('onLeftKitEnd', e);
|
}
|
function addKit(e) {
|
emit('addKit', e);
|
}
|
</script>
|
<template>
|
<ScrollContainer>
|
<a-collapse v-model:active-key="leftKitActiveKey" expand-icon-position="end" ghost>
|
<a-collapse-panel :header="item.fullName" :key="item.id" v-for="item in kitList" class="components-list">
|
<draggable
|
class="components-draggable"
|
v-model="item.children"
|
item-key="id"
|
filter=".disabled"
|
:sort="false"
|
draggable=".components-item"
|
:clone="cloneKit"
|
:group="{ name: 'componentsGroup', pull: 'clone', put: false }"
|
@end="onLeftKitEnd">
|
<template #item="{ element }">
|
<div class="components-item" @click="addKit(element)">
|
<div class="components-body">
|
<i :class="element.icon"></i>
|
<span>{{ element.fullName }}</span>
|
</div>
|
</div>
|
</template>
|
</draggable>
|
</a-collapse-panel>
|
</a-collapse>
|
</ScrollContainer>
|
</template>
|