<script lang="ts" setup>
|
import { reactive, toRefs } from 'vue';
|
|
import { ScrollContainer } from '@jnpf/ui';
|
|
import { Badge } from 'ant-design-vue';
|
import draggable from 'vuedraggable';
|
|
import { inputComponents, layoutComponents, selectComponents, systemComponents } from '../helper/componentMap';
|
|
defineProps({
|
cloneComponent: { default: undefined, type: Function },
|
});
|
|
const emit = defineEmits(['onLeftEnd', 'addComponent']);
|
|
const newComList = ['relationQuery'];
|
|
interface State {
|
leftComponents: any[];
|
leftActiveKey: string[];
|
}
|
|
const state = reactive<State>({
|
leftComponents: [
|
{ id: '1', title: '基础控件', list: inputComponents },
|
{ id: '2', title: '高级控件', list: selectComponents },
|
{ id: '3', title: '系统控件', list: systemComponents },
|
{ id: '4', title: '布局控件', list: layoutComponents },
|
],
|
leftActiveKey: ['1', '2', '3', '4'],
|
});
|
const { leftComponents, leftActiveKey } = toRefs(state);
|
|
function onLeftEnd(e) {
|
emit('onLeftEnd', e);
|
}
|
function addComponent(e) {
|
emit('addComponent', e);
|
}
|
</script>
|
<template>
|
<ScrollContainer>
|
<a-collapse v-model:active-key="leftActiveKey" expand-icon-position="end" ghost>
|
<a-collapse-panel :header="item.title" :key="item.id" v-for="item in leftComponents" class="components-list">
|
<draggable
|
class="components-draggable"
|
v-model="item.list"
|
item-key="__config__.jnpfKey"
|
filter=".disabled"
|
:sort="false"
|
draggable=".components-item"
|
:clone="cloneComponent"
|
:group="{ name: 'componentsGroup', pull: 'clone', put: false }"
|
@end="onLeftEnd">
|
<template #item="{ element }">
|
<div class="components-item" @click="addComponent(element)">
|
<div class="components-body">
|
<i :class="element.__config__.tagIcon"></i>
|
{{ element.__config__.label }}
|
<BasicHelp
|
:text="element.__config__.jnpfKey == 'relationQuery' ? '不支持代码生成、设计子表、移动端' : '不支持代码生成'"
|
v-if="['calculate', 'dateCalculate', 'relationQuery'].includes(element.__config__.jnpfKey)" />
|
</div>
|
<Badge class="components-badge" count="NEW" v-if="newComList.includes(element.__config__.jnpfKey)" />
|
</div>
|
</template>
|
</draggable>
|
</a-collapse-panel>
|
</a-collapse>
|
</ScrollContainer>
|
</template>
|