diff --git a/src/editor/BulkCopy.vue b/src/editor/BulkCopy.vue new file mode 100644 index 0000000..2064ca2 --- /dev/null +++ b/src/editor/BulkCopy.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/src/editor/Model2DEditor.vue b/src/editor/Model2DEditor.vue index 1c7e8e0..60d277d 100644 --- a/src/editor/Model2DEditor.vue +++ b/src/editor/Model2DEditor.vue @@ -17,6 +17,9 @@ :type="state?.view3DMode===Constract.Mode3D?'primary':''" @click="state.view3DMode = Constract.Mode3D">3D + + 批量复制 +
@@ -92,13 +95,14 @@ diff --git a/src/editor/widgets/property/PropertyPanel.vue b/src/editor/widgets/property/PropertyPanel.vue index 1cf6e7b..a8182ca 100644 --- a/src/editor/widgets/property/PropertyPanel.vue +++ b/src/editor/widgets/property/PropertyPanel.vue @@ -9,23 +9,23 @@ import { defDataFormProps } from '@/editor/widgets/property/PropertyPanelConstan import Viewport, { type ViewportState } from '@/core/engine/Viewport.ts' defineOptions({ - name: 'PropertyPanel' + name: 'PropertyPanel' }) // 定义 Props 类型 interface PropertyPanelProps { - /** 待编辑数据 */ - data?: any; - /** Viewport */ - viewport: Viewport; - /** ViewportState */ - viewportState: ViewportState; - /** 默认的DataFormProps */ - defDataFormProps?: DataFormProps; - /** 最上面平铺的设置器 */ - flatten?: PropertyFlattenSetter; - /** 设置器分组集合 */ - groups?: Array; + /** 待编辑数据 */ + data?: any; + /** Viewport */ + viewport: Viewport; + /** ViewportState */ + viewportState: ViewportState; + /** 默认的DataFormProps */ + defDataFormProps?: DataFormProps; + /** 最上面平铺的设置器 */ + flatten?: PropertyFlattenSetter; + /** 设置器分组集合 */ + groups?: Array; } // 读取组件 props 属性 @@ -33,16 +33,16 @@ const props = withDefaults(defineProps(), {}) // 定义 State 类型 interface PropertyPanelState { - /** 待编辑数据 */ - data?: any; - /** 已展开的分组 */ - expandGroups: Array; + /** 待编辑数据 */ + data?: any; + /** 已展开的分组 */ + expandGroups: Array; } // state 属性 const state = reactive({ - data: lodash.cloneDeep(props.data), - expandGroups: [] + data: lodash.cloneDeep(props.data), + expandGroups: [] }) // 定义 Data 类型 @@ -54,84 +54,84 @@ const data: PropertyPanelData = {} const flattenFormProps = computed(() => getDefFormProps(props.flatten)) function getDefFormProps(setter?: PropertyFlattenSetter) { - const formProps: DataFormProps = { - ...defDataFormProps, - ...props.defDataFormProps - } - fillFormProps(setter) - return formProps + const formProps: DataFormProps = { + ...defDataFormProps, + ...props.defDataFormProps + } + fillFormProps(setter) + return formProps } function fillFormProps(formProps: DataFormProps, setter?: PropertyFlattenSetter) { - if (!setter) return - if (setter.size) formProps.size = setter.size - if (setter.labelWidth) formProps.labelWidth = setter.labelWidth + if (!setter) return + if (setter.size) formProps.size = setter.size + if (setter.labelWidth) formProps.labelWidth = setter.labelWidth } function getCollapseItemId(group: PropertySetterGroup, idx: number) { - return `_${idx}_${group.title}` + return `_${idx}_${group.title}` } function onDataChange(newData: any) { - const viewport = props.viewport - if (!viewport) return - viewport.stateManager.update(({ getEntity, putEntity }) => { - const data = getEntity(props.data.id) - lodash.assign(data, newData) - // console.log('onDataChange@1', JSON.stringify(data.dt)) - putEntity(data) - }) + const viewport = props.viewport + if (!viewport) return + viewport.stateManager.update(({ getEntity, putEntity }) => { + const data = getEntity(props.data.id); + lodash.assign(data, newData); + // console.log('onDataChange@1', JSON.stringify(data.dt)) + putEntity(data); + }); } interface PropertyPanelExpose { - state: PropertyPanelState; - data: PropertyPanelData; + state: PropertyPanelState; + data: PropertyPanelData; } const expose: PropertyPanelExpose = { - state, - data + state, + data } // 定义组件公开内容 defineExpose(expose) export type { - PropertyPanelProps, - PropertyPanelState + PropertyPanelProps, + PropertyPanelState }