Compare commits
3 Commits
c08ef91731
...
3f7dac421d
| Author | SHA1 | Date |
|---|---|---|
|
|
3f7dac421d | |
|
|
b34b8ed616 | |
|
|
3592c3c824 |
|
|
@ -6,6 +6,26 @@ import { EventBus } from '@/utils/eventBus';
|
||||||
|
|
||||||
const chartEditStore = useChartEditStore();
|
const chartEditStore = useChartEditStore();
|
||||||
const ceshiFunction = mapFun();
|
const ceshiFunction = mapFun();
|
||||||
|
//递归获取某个id在数组里的位置或者父id
|
||||||
|
export const queryFun = (array, value, peg?: any) => {
|
||||||
|
var res = [];
|
||||||
|
function _find(array, value, peg) {
|
||||||
|
array.forEach((item, index) => {
|
||||||
|
if (item.id === value) {
|
||||||
|
if (peg) {
|
||||||
|
res.push(peg);
|
||||||
|
}
|
||||||
|
res.push(index);
|
||||||
|
return;
|
||||||
|
} else if (item.groupList instanceof Array) {
|
||||||
|
_find(item.groupList, value, index);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
_find(array, value, peg);
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
|
||||||
export const eventCommonHandler = (
|
export const eventCommonHandler = (
|
||||||
componentList: any,
|
componentList: any,
|
||||||
elementList: any,
|
elementList: any,
|
||||||
|
|
@ -53,28 +73,53 @@ export const eventCommonHandler = (
|
||||||
} else if (elementList[j].movement == 'reveal') {
|
} else if (elementList[j].movement == 'reveal') {
|
||||||
// 显示
|
// 显示
|
||||||
for (let k = 0; k < elementList[j].elementId.length; k++) {
|
for (let k = 0; k < elementList[j].elementId.length; k++) {
|
||||||
if (componentList[i].id == elementList[j].elementId[k]) {
|
//获取位置
|
||||||
obj = componentList[i];
|
const arr = queryFun(componentList, elementList[j].elementId[k]);
|
||||||
index = i;
|
console.log(arr);
|
||||||
|
if (arr.length > 1) {
|
||||||
|
obj = componentList[arr[0]].groupList[arr[1]];
|
||||||
obj.status.hide = false;
|
obj.status.hide = false;
|
||||||
chartEditStore.updateComponentList(index, obj);
|
console.log(obj);
|
||||||
|
// chartEditStore.updateComponentList(arr[0], obj, arr[1]);
|
||||||
|
} else if (arr.length == 1) {
|
||||||
|
obj = componentList[arr[0]];
|
||||||
|
obj.status.hide = false;
|
||||||
|
console.log(obj);
|
||||||
|
// chartEditStore.updateComponentList(arr[0], obj);
|
||||||
}
|
}
|
||||||
|
// if (componentList[i].id == elementList[j].elementId[k]) {
|
||||||
|
// obj = componentList[i];
|
||||||
|
// index = i;
|
||||||
|
// obj.status.hide = false;
|
||||||
|
// chartEditStore.updateComponentList(index, obj);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
} else if (elementList[j].movement == 'hidden') {
|
} else if (elementList[j].movement == 'hidden') {
|
||||||
// 隐藏
|
// 隐藏
|
||||||
for (let k = 0; k < elementList[j].elementId.length; k++) {
|
for (let k = 0; k < elementList[j].elementId.length; k++) {
|
||||||
if (componentList[i].id == elementList[j].elementId[k]) {
|
//获取位置
|
||||||
obj = componentList[i];
|
const arr = queryFun(componentList, elementList[j].elementId[k]);
|
||||||
index = i;
|
if (arr.length > 1) {
|
||||||
|
obj = componentList[arr[0]].groupList[arr[1]];
|
||||||
obj.status.hide = true;
|
obj.status.hide = true;
|
||||||
chartEditStore.updateComponentList(index, obj);
|
// chartEditStore.updateComponentList(arr[0], obj, arr[1]);
|
||||||
|
} else if (arr.length == 1) {
|
||||||
|
obj = componentList[arr[0]];
|
||||||
|
obj.status.hide = true;
|
||||||
|
// chartEditStore.updateComponentList(arr[0], obj);
|
||||||
}
|
}
|
||||||
|
// if (componentList[i].id == elementList[j].elementId[k]) {
|
||||||
|
// obj = componentList[i];
|
||||||
|
// index = i;
|
||||||
|
// obj.status.hide = true;
|
||||||
|
// chartEditStore.updateComponentList(index, obj);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
} else if (elementList[j].movement == 'map') {
|
} else if (elementList[j].movement == 'map') {
|
||||||
// 地图事件联动
|
// 地图事件联动
|
||||||
for (let k = 0; k < elementList[j].elementId.length; k++) {
|
for (let k = 0; k < elementList[j].elementId.length; k++) {
|
||||||
if (componentList[i].id == elementList[j].elementId[k]) {
|
if (componentList[i].id == elementList[j].elementId[k]) {
|
||||||
console.log("elementList[j].funName",elementList[j])
|
console.log('elementList[j].funName', elementList[j]);
|
||||||
if (elementList[j].params) {
|
if (elementList[j].params) {
|
||||||
ceshiFunction[elementList[j].funName](elementList[j].params);
|
ceshiFunction[elementList[j].funName](elementList[j].params);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -89,7 +134,6 @@ export const eventCommonHandler = (
|
||||||
EventBus.emit(elementList[j].elementId[k] + type, params);
|
EventBus.emit(elementList[j].elementId[k] + type, params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (elementList[j].movement == 'graphic') {
|
} else if (elementList[j].movement == 'graphic') {
|
||||||
//
|
//
|
||||||
for (let k = 0; k < elementList[j].elementId.length; k++) {
|
for (let k = 0; k < elementList[j].elementId.length; k++) {
|
||||||
|
|
@ -97,15 +141,17 @@ export const eventCommonHandler = (
|
||||||
EventBus.emit(elementList[j].elementId[k] + type, params);
|
EventBus.emit(elementList[j].elementId[k] + type, params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (elementList[j].movement == 'style') {
|
} else if (elementList[j].movement == 'style') {
|
||||||
// 修改组件样式
|
//获取位置
|
||||||
// for (let k = 0; k < elementList[j].elementId.length; k++) {}
|
const arr = queryFun(componentList, elementList[j].elementId);
|
||||||
if (componentList[i].id == elementList[j].elementId) {
|
if (arr.length > 1) {
|
||||||
obj = componentList[i];
|
obj = componentList[arr[0]].groupList[arr[1]];
|
||||||
index = i;
|
|
||||||
obj.option = elementList[j].option;
|
obj.option = elementList[j].option;
|
||||||
chartEditStore.updateComponentList(index, obj);
|
// chartEditStore.updateComponentList(arr[0], obj, arr[1]);
|
||||||
|
} else if (arr.length == 1) {
|
||||||
|
obj = componentList[arr[0]];
|
||||||
|
obj.option = elementList[j].option;
|
||||||
|
// chartEditStore.updateComponentList(arr[0], obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -406,7 +406,11 @@ export const useChartEditStore = defineStore({
|
||||||
chartHistoryStore.createMoveHistory(item);
|
chartHistoryStore.createMoveHistory(item);
|
||||||
},
|
},
|
||||||
// * 更新组件列表某一项的值
|
// * 更新组件列表某一项的值
|
||||||
updateComponentList(index: number, newData: CreateComponentType | CreateComponentGroupType) {
|
updateComponentList(
|
||||||
|
index: number,
|
||||||
|
newData: CreateComponentType | CreateComponentGroupType,
|
||||||
|
childIndex?: number,
|
||||||
|
) {
|
||||||
if (index < 1 && index > this.getComponentList.length) return;
|
if (index < 1 && index > this.getComponentList.length) return;
|
||||||
this.componentList[index] = newData;
|
this.componentList[index] = newData;
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -54,14 +54,13 @@
|
||||||
<n-divider vertical style="height: 450px" />
|
<n-divider vertical style="height: 450px" />
|
||||||
|
|
||||||
<div class="movement-type">
|
<div class="movement-type">
|
||||||
|
|
||||||
<template v-if="panel.movement != 'newaddress'">
|
<template v-if="panel.movement != 'newaddress'">
|
||||||
<div class="movement-type__element" v-if="panel.movement == 'style'">
|
<div class="movement-type__element" v-if="panel.movement == 'style'">
|
||||||
关联组件
|
关联组件(可选择分组里的单组件)
|
||||||
<n-select
|
<n-select
|
||||||
v-model:value="panel.elementId"
|
v-model:value="panel.elementId"
|
||||||
placeholder="请选择"
|
placeholder="请选择"
|
||||||
:options="elementSelectOptions"
|
:options="elementSelectSingleOptions"
|
||||||
@update:value="handleUpdateValue(panel.elementId, panel.movement, panelIndex)"
|
@update:value="handleUpdateValue(panel.elementId, panel.movement, panelIndex)"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -86,7 +85,13 @@
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="movement-type__element" v-if="panel.movement == 'map' && currentMapFunction?.group == 'layer' || panel.movement == 'graphic'" >
|
<div
|
||||||
|
class="movement-type__element"
|
||||||
|
v-if="
|
||||||
|
(panel.movement == 'map' && currentMapFunction?.group == 'layer') ||
|
||||||
|
panel.movement == 'graphic'
|
||||||
|
"
|
||||||
|
>
|
||||||
选择图层对象
|
选择图层对象
|
||||||
<n-select
|
<n-select
|
||||||
v-model:value="panel.params"
|
v-model:value="panel.params"
|
||||||
|
|
@ -170,17 +175,19 @@
|
||||||
import { useTargetData } from '../../../../hooks/useTargetData.hook';
|
import { useTargetData } from '../../../../hooks/useTargetData.hook';
|
||||||
import { getMenuList } from '@/api/sys/menu';
|
import { getMenuList } from '@/api/sys/menu';
|
||||||
import { projectListApi } from '@/api/path/project.api';
|
import { projectListApi } from '@/api/path/project.api';
|
||||||
import { funSelectOptions,layerOptions } from '@/hooks/ceshiFun.hook';
|
import { funSelectOptions, layerOptions } from '@/hooks/ceshiFun.hook';
|
||||||
import { getLoad } from '@/api/sys/sysDataItemDetail';
|
import { getLoad } from '@/api/sys/sysDataItemDetail';
|
||||||
|
|
||||||
const EventComponent = loadAsyncComponent(() => import('./EventComponent.vue'));
|
const EventComponent = loadAsyncComponent(() => import('./EventComponent.vue'));
|
||||||
const { targetData, chartEditStore } = useTargetData();
|
const { targetData, chartEditStore } = useTargetData();
|
||||||
const targetDataOption = ref([]);
|
const targetDataOption = ref([]);
|
||||||
const chartConfig = ref([]);
|
const chartConfig = ref([]);
|
||||||
|
const componentGroupList = ref([]);
|
||||||
// 选择组件样式
|
// 选择组件样式
|
||||||
const handleUpdateValue = (value, movement, index) => {
|
const handleUpdateValue = (value, movement, index) => {
|
||||||
chartEditStore.getComponentList.map((item) => {
|
componentGroupList.value.map((item: any) => {
|
||||||
if (item.id == value) {
|
if (item.id == value) {
|
||||||
|
console.log('item', item);
|
||||||
targetDataOption.value[index] = item.option;
|
targetDataOption.value[index] = item.option;
|
||||||
chartConfig.value[index] = item.chartConfig;
|
chartConfig.value[index] = item.chartConfig;
|
||||||
chartConfig.value[index].config = acquiesceAsyncComponent(
|
chartConfig.value[index].config = acquiesceAsyncComponent(
|
||||||
|
|
@ -297,6 +304,8 @@
|
||||||
};
|
};
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
// 修改组件样式,可以选择分组里的某个单组件
|
||||||
|
const elementSelectSingleOptions: any = ref([]);
|
||||||
const treeIterator = (tree) => {
|
const treeIterator = (tree) => {
|
||||||
tree.forEach((node) => {
|
tree.forEach((node) => {
|
||||||
var obj = {};
|
var obj = {};
|
||||||
|
|
@ -352,22 +361,38 @@
|
||||||
getRouteList();
|
getRouteList();
|
||||||
getPublishedPageList();
|
getPublishedPageList();
|
||||||
getMsgTypeList();
|
getMsgTypeList();
|
||||||
|
chartEditStore.getComponentList.forEach((item) => {
|
||||||
|
if (item.isGroup) {
|
||||||
|
item.groupList?.forEach((groupItem) => {
|
||||||
|
elementSelectSingleOptions.value.push({
|
||||||
|
label: '分组-' + item.chartConfig.title + '>> 组件-' + groupItem.chartConfig.title,
|
||||||
|
value: groupItem.id,
|
||||||
|
});
|
||||||
|
componentGroupList.value.push({
|
||||||
|
...groupItem,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
elementSelectSingleOptions.value.push({
|
||||||
|
label: item.isGroup ? '分组-' + item.chartConfig.title : '组件-' + item.chartConfig.title,
|
||||||
|
value: item.id,
|
||||||
|
});
|
||||||
|
componentGroupList.value.push({
|
||||||
|
...item,
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 地图交互方法改变
|
// 地图交互方法改变
|
||||||
const currentMapFunction = ref(null);
|
const currentMapFunction = ref(null);
|
||||||
const handlerMapFunChange = (e) => {
|
const handlerMapFunChange = (e) => {
|
||||||
|
let selected = funSelectOptions.filter((item, index) => {
|
||||||
|
|
||||||
let selected = funSelectOptions.filter((item,index)=>{
|
|
||||||
return item.value == e;
|
return item.value == e;
|
||||||
})
|
});
|
||||||
if(selected?.length>0){
|
if (selected?.length > 0) {
|
||||||
currentMapFunction.value = selected[0];
|
currentMapFunction.value = selected[0];
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
const changeOption = (index, data) => {
|
const changeOption = (index, data) => {
|
||||||
props.eventData.movementList[index].option = data;
|
props.eventData.movementList[index].option = data;
|
||||||
|
|
@ -391,7 +416,6 @@
|
||||||
},
|
},
|
||||||
{ deep: true },
|
{ deep: true },
|
||||||
);
|
);
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.event-item {
|
.event-item {
|
||||||
|
|
|
||||||
|
|
@ -28,23 +28,31 @@
|
||||||
<div :class="{ 'select-modal': select }"></div>
|
<div :class="{ 'select-modal': select }"></div>
|
||||||
</div>
|
</div>
|
||||||
<n-collapse-transition :show="expend">
|
<n-collapse-transition :show="expend">
|
||||||
<LayersListItem
|
<draggable
|
||||||
v-for="element in componentGroupData.groupList"
|
item-key="id"
|
||||||
:key="element.id"
|
v-model="layerList"
|
||||||
:componentData="element"
|
ghostClass="ghost"
|
||||||
:layer-mode="layerMode"
|
@change="onMoveCallback"
|
||||||
:isGroup="true"
|
:group="{ name: 'items', pull: true, put: true }"
|
||||||
@mousedown="mousedownHandle($event, element, componentGroupData.id)"
|
>
|
||||||
@mouseenter="mouseenterHandle(element)"
|
<template #item="{ element }">
|
||||||
@mouseleave="mouseleaveHandle(element)"
|
<LayersListItem
|
||||||
@contextmenu="handleContextMenu($event, componentGroupData, optionsHandle)"
|
:componentData="element"
|
||||||
></LayersListItem>
|
:layer-mode="layerMode"
|
||||||
|
:isGroup="true"
|
||||||
|
@mousedown="mousedownHandle($event, element, componentGroupData.id)"
|
||||||
|
@mouseenter="mouseenterHandle(element)"
|
||||||
|
@mouseleave="mouseleaveHandle(element)"
|
||||||
|
@contextmenu="handleContextMenu($event, componentGroupData, optionsHandle)"
|
||||||
|
></LayersListItem>
|
||||||
|
</template>
|
||||||
|
</draggable>
|
||||||
</n-collapse-transition>
|
</n-collapse-transition>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, computed, PropType } from 'vue';
|
import { ref, computed, PropType, watch } from 'vue';
|
||||||
import { MouseEventButton, WinKeyboard, MacKeyboard } from '@/enums/editPageEnum';
|
import { MouseEventButton, WinKeyboard, MacKeyboard } from '@/enums/editPageEnum';
|
||||||
import { MenuEnum } from '@/enums/editPageEnum';
|
import { MenuEnum } from '@/enums/editPageEnum';
|
||||||
import { useDesignStore } from '@/store/modules/designStore/designStore';
|
import { useDesignStore } from '@/store/modules/designStore/designStore';
|
||||||
|
|
@ -56,6 +64,7 @@
|
||||||
import { LayersListItem } from '../LayersListItem';
|
import { LayersListItem } from '../LayersListItem';
|
||||||
import { LayersStatus } from '../LayersStatus/index';
|
import { LayersStatus } from '../LayersStatus/index';
|
||||||
import { icon } from '@/plugins';
|
import { icon } from '@/plugins';
|
||||||
|
import Draggable from 'vuedraggable';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
componentGroupData: {
|
componentGroupData: {
|
||||||
|
|
@ -67,7 +76,14 @@
|
||||||
default: LayerModeEnum.THUMBNAIL,
|
default: LayerModeEnum.THUMBNAIL,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
const layerList = ref<any>(props.componentGroupData.groupList);
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.componentGroupData,
|
||||||
|
(newValue) => {
|
||||||
|
layerList.value = newValue.groupList;
|
||||||
|
},
|
||||||
|
);
|
||||||
// 右键
|
// 右键
|
||||||
const pickOptionsList = [MenuEnum.UN_GROUP];
|
const pickOptionsList = [MenuEnum.UN_GROUP];
|
||||||
|
|
||||||
|
|
@ -187,6 +203,15 @@
|
||||||
const mouseleaveHandle = (componentInstance: CreateComponentType | CreateComponentGroupType) => {
|
const mouseleaveHandle = (componentInstance: CreateComponentType | CreateComponentGroupType) => {
|
||||||
chartEditStore.setTargetHoverChart(undefined);
|
chartEditStore.setTargetHoverChart(undefined);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 移动结束处理
|
||||||
|
const onMoveCallback = (val: any) => {
|
||||||
|
const { newIndex, element } = val.added;
|
||||||
|
const groupIndex = chartEditStore.getComponentList.findIndex(
|
||||||
|
(item) => item.id == props.componentGroupData.id,
|
||||||
|
);
|
||||||
|
chartEditStore.getComponentList[groupIndex].groupList.splice(newIndex, 0, element);
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,13 @@
|
||||||
</n-space>
|
</n-space>
|
||||||
|
|
||||||
<!-- https://github.com/SortableJS/vue.draggable.next -->
|
<!-- https://github.com/SortableJS/vue.draggable.next -->
|
||||||
<draggable item-key="id" v-model="layerList" ghostClass="ghost" @change="onMoveCallback">
|
<draggable
|
||||||
|
item-key="id"
|
||||||
|
v-model="layerList"
|
||||||
|
ghostClass="ghost"
|
||||||
|
@change="onMoveCallback"
|
||||||
|
:group="{ name: 'items', pull: true, put: true }"
|
||||||
|
>
|
||||||
<template #item="{ element }">
|
<template #item="{ element }">
|
||||||
<div class="go-content-layer-box">
|
<div class="go-content-layer-box">
|
||||||
<!-- 组合 -->
|
<!-- 组合 -->
|
||||||
|
|
@ -144,19 +150,25 @@
|
||||||
|
|
||||||
// 移动结束处理
|
// 移动结束处理
|
||||||
const onMoveCallback = (val: any) => {
|
const onMoveCallback = (val: any) => {
|
||||||
const { oldIndex, newIndex } = val.moved;
|
if (val.moved) {
|
||||||
if (newIndex - oldIndex > 0) {
|
const { oldIndex, newIndex } = val.moved;
|
||||||
// 从上往下
|
if (newIndex - oldIndex > 0) {
|
||||||
const moveTarget = chartEditStore.getComponentList.splice(-(oldIndex + 1), 1)[0];
|
// 从上往下
|
||||||
chartEditStore.getComponentList.splice(-newIndex, 0, moveTarget);
|
const moveTarget = chartEditStore.getComponentList.splice(-(oldIndex + 1), 1)[0];
|
||||||
} else {
|
|
||||||
// 从下往上
|
|
||||||
const moveTarget = chartEditStore.getComponentList.splice(-(oldIndex + 1), 1)[0];
|
|
||||||
if (newIndex === 0) {
|
|
||||||
chartEditStore.getComponentList.push(moveTarget);
|
|
||||||
} else {
|
|
||||||
chartEditStore.getComponentList.splice(-newIndex, 0, moveTarget);
|
chartEditStore.getComponentList.splice(-newIndex, 0, moveTarget);
|
||||||
|
} else {
|
||||||
|
// 从下往上
|
||||||
|
const moveTarget = chartEditStore.getComponentList.splice(-(oldIndex + 1), 1)[0];
|
||||||
|
if (newIndex === 0) {
|
||||||
|
chartEditStore.getComponentList.push(moveTarget);
|
||||||
|
} else {
|
||||||
|
chartEditStore.getComponentList.splice(-newIndex, 0, moveTarget);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else if (val.removed) {
|
||||||
|
const { oldIndex, element } = val.removed;
|
||||||
|
const index = chartEditStore.getComponentList.findIndex((item) => item.id == element.id);
|
||||||
|
chartEditStore.getComponentList.splice(index, 1);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue