|
@@ -43,14 +43,19 @@ export default function erModel() {
|
|
|
const [graph, setGraph] = useState<Graph>();
|
|
|
const historyRef = useRef<ProjectInfo[]>([]);
|
|
|
const activeIndex = useRef(0);
|
|
|
- const [_isFullscreen, { enterFullscreen, exitFullscreen }] = useFullscreen(document.body);
|
|
|
- const [playModeEnable, setPlayModeEnable] = useSessionStorageState('playModeEnable', {
|
|
|
- defaultValue: false,
|
|
|
- listenStorageChange: true
|
|
|
- });
|
|
|
+ const [_isFullscreen, { enterFullscreen, exitFullscreen }] = useFullscreen(
|
|
|
+ document.body
|
|
|
+ );
|
|
|
+ const [playModeEnable, setPlayModeEnable] = useSessionStorageState(
|
|
|
+ "playModeEnable",
|
|
|
+ {
|
|
|
+ defaultValue: false,
|
|
|
+ listenStorageChange: true,
|
|
|
+ }
|
|
|
+ );
|
|
|
const [saveTime, setSaveTime] = useState<string>();
|
|
|
const [project, setProjectInfo] = useState<ProjectInfo>({
|
|
|
- id: "1",
|
|
|
+ id: "9bb35adc-0b2f-450f-b137-de39ce06fe9f",
|
|
|
name: "新建模型",
|
|
|
directory: "",
|
|
|
type: 3,
|
|
@@ -64,7 +69,7 @@ export default function erModel() {
|
|
|
remarkInfos: [],
|
|
|
todos: [],
|
|
|
setting: {
|
|
|
- ...DEFAULT_SETTING
|
|
|
+ ...DEFAULT_SETTING,
|
|
|
},
|
|
|
});
|
|
|
|
|
@@ -73,6 +78,8 @@ export default function erModel() {
|
|
|
const [_relationActive, setRelationActive] =
|
|
|
useSessionStorageState("relation-active");
|
|
|
|
|
|
+ const timer = useRef<any>();
|
|
|
+
|
|
|
/**
|
|
|
* 统一修改数据
|
|
|
* @param info 模型信息
|
|
@@ -120,10 +127,14 @@ export default function erModel() {
|
|
|
}
|
|
|
|
|
|
// 提交服务器
|
|
|
- if(!isInit) {
|
|
|
- SaveDataModel(project);
|
|
|
- // 格式化当前时间
|
|
|
- setSaveTime(dayjs().format('YYYY-MM-DD HH:mm:ss'));
|
|
|
+ if (!isInit) {
|
|
|
+ // 清除定时器
|
|
|
+ clearTimeout(timer.current);
|
|
|
+ timer.current = setTimeout(() => {
|
|
|
+ SaveDataModel(project);
|
|
|
+ // 格式化当前时间
|
|
|
+ setSaveTime(dayjs().format("YYYY-MM-DD HH:mm:ss"));
|
|
|
+ }, 500);
|
|
|
}
|
|
|
};
|
|
|
|
|
@@ -139,7 +150,11 @@ export default function erModel() {
|
|
|
* 初始化画布
|
|
|
* @param container
|
|
|
*/
|
|
|
- const initGraph = (container: HTMLElement, width?: number, height?: number) => {
|
|
|
+ const initGraph = (
|
|
|
+ container: HTMLElement,
|
|
|
+ width?: number,
|
|
|
+ height?: number
|
|
|
+ ) => {
|
|
|
const instance = new Graph({
|
|
|
container,
|
|
|
width: width || document.documentElement.clientWidth,
|
|
@@ -256,43 +271,46 @@ export default function erModel() {
|
|
|
}
|
|
|
);
|
|
|
|
|
|
- instance.on("node:moved", throttle((args) => {
|
|
|
- console.log('moved', args);
|
|
|
- const data = args.node.data;
|
|
|
- if(data.isTable) {
|
|
|
- updateTable({
|
|
|
- ...data,
|
|
|
- table: {
|
|
|
- ...data.table,
|
|
|
+ instance.on(
|
|
|
+ "node:moved",
|
|
|
+ throttle((args) => {
|
|
|
+ console.log("moved", args);
|
|
|
+ const data = args.node.data;
|
|
|
+ if (data.isTable) {
|
|
|
+ updateTable({
|
|
|
+ ...data,
|
|
|
+ table: {
|
|
|
+ ...data.table,
|
|
|
+ style: {
|
|
|
+ ...data.table.style,
|
|
|
+ x: args.x,
|
|
|
+ y: args.y,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (data.isTopicArea) {
|
|
|
+ updateTopicArea({
|
|
|
+ ...data,
|
|
|
style: {
|
|
|
- ...data.table.style,
|
|
|
+ ...data.style,
|
|
|
x: args.x,
|
|
|
y: args.y,
|
|
|
- }
|
|
|
- }
|
|
|
- })
|
|
|
- }
|
|
|
- if(data.isTopicArea) {
|
|
|
- updateTopicArea({
|
|
|
- ...data,
|
|
|
- style: {
|
|
|
- ...data.style,
|
|
|
- x: args.x,
|
|
|
- y: args.y,
|
|
|
- }
|
|
|
- })
|
|
|
- }
|
|
|
- if(data.isRemark) {
|
|
|
- updateRemark({
|
|
|
- ...data,
|
|
|
- style: {
|
|
|
- ...data.style,
|
|
|
- x: args.x,
|
|
|
- y: args.y,
|
|
|
- }
|
|
|
- })
|
|
|
- }
|
|
|
- }, 500));
|
|
|
+ },
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (data.isRemark) {
|
|
|
+ updateRemark({
|
|
|
+ ...data,
|
|
|
+ style: {
|
|
|
+ ...data.style,
|
|
|
+ x: args.x,
|
|
|
+ y: args.y,
|
|
|
+ },
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }, 500)
|
|
|
+ );
|
|
|
|
|
|
instance.bindKey("ctrl+z", onUndo);
|
|
|
instance.bindKey("ctrl+y", onRedo);
|
|
@@ -303,7 +321,7 @@ export default function erModel() {
|
|
|
instance.bindKey("ctrl+down", () => {
|
|
|
const scale = instance.zoom() - 0.1;
|
|
|
instance.zoomTo(scale < 0.2 ? 0.2 : scale);
|
|
|
- })
|
|
|
+ });
|
|
|
instance.bindKey("ctrl+up", () => {
|
|
|
const scale = instance.zoom() + 0.1;
|
|
|
instance.zoomTo(scale > 2 ? 2 : scale);
|
|
@@ -351,7 +369,7 @@ export default function erModel() {
|
|
|
const x = area?.center.x || 300;
|
|
|
const y = area?.center.y || 300;
|
|
|
// 数据表类型动态路由传参
|
|
|
- const newTable = createTable(project.type || 3, parentId);
|
|
|
+ const newTable = createTable(project.type || 3, project.id, parentId);
|
|
|
newTable.table.style.x = x;
|
|
|
newTable.table.style.y = y;
|
|
|
|
|
@@ -365,8 +383,8 @@ export default function erModel() {
|
|
|
}
|
|
|
setProject({
|
|
|
...project,
|
|
|
- tables: list
|
|
|
- })
|
|
|
+ tables: list,
|
|
|
+ });
|
|
|
setTabActiveKey("1");
|
|
|
};
|
|
|
|
|
@@ -384,7 +402,7 @@ export default function erModel() {
|
|
|
}
|
|
|
return item;
|
|
|
}),
|
|
|
- }
|
|
|
+ };
|
|
|
});
|
|
|
};
|
|
|
|
|
@@ -449,7 +467,7 @@ export default function erModel() {
|
|
|
}
|
|
|
return item;
|
|
|
}),
|
|
|
- }
|
|
|
+ };
|
|
|
});
|
|
|
};
|
|
|
|
|
@@ -493,10 +511,12 @@ export default function erModel() {
|
|
|
* 修改备注
|
|
|
*/
|
|
|
const updateRemark = (remark: RemarkInfo) => {
|
|
|
- console.log(remark)
|
|
|
+ console.log(remark);
|
|
|
setProject((state) => ({
|
|
|
...(state || {}),
|
|
|
- remarkInfos: state.remarkInfos.map((item) => item.id === remark.id ? remark : item),
|
|
|
+ remarkInfos: state.remarkInfos.map((item) =>
|
|
|
+ item.id === remark.id ? remark : item
|
|
|
+ ),
|
|
|
}));
|
|
|
};
|
|
|
|
|
@@ -580,9 +600,9 @@ export default function erModel() {
|
|
|
foreignTable: target.tableId,
|
|
|
relationType: 1,
|
|
|
style: {
|
|
|
- color: '#333',
|
|
|
+ color: "#333",
|
|
|
lineType: RelationLineType.Solid,
|
|
|
- width: 1
|
|
|
+ width: 1,
|
|
|
},
|
|
|
};
|
|
|
setProject((state) => {
|
|
@@ -687,7 +707,9 @@ export default function erModel() {
|
|
|
if (data?.isRemark) {
|
|
|
setProject({
|
|
|
...project,
|
|
|
- remarkInfos: project.remarkInfos.filter((item) => item.id !== cell.id),
|
|
|
+ remarkInfos: project.remarkInfos.filter(
|
|
|
+ (item) => item.id !== cell.id
|
|
|
+ ),
|
|
|
});
|
|
|
}
|
|
|
}
|
|
@@ -799,7 +821,9 @@ export default function erModel() {
|
|
|
if (data?.isRemark) {
|
|
|
setProject({
|
|
|
...project,
|
|
|
- remarkInfos: project.remarkInfos.filter((item) => item.id !== cell[0].id),
|
|
|
+ remarkInfos: project.remarkInfos.filter(
|
|
|
+ (item) => item.id !== cell[0].id
|
|
|
+ ),
|
|
|
});
|
|
|
}
|
|
|
}
|
|
@@ -814,7 +838,7 @@ export default function erModel() {
|
|
|
setTimeout(() => {
|
|
|
graphRef.current?.centerContent();
|
|
|
}, 100);
|
|
|
- };
|
|
|
+ };
|
|
|
|
|
|
/**
|
|
|
* 退出演示模式
|
|
@@ -855,6 +879,6 @@ export default function erModel() {
|
|
|
playModeEnable,
|
|
|
setPlayModeEnable,
|
|
|
exitPlayMode,
|
|
|
- saveTime
|
|
|
+ saveTime,
|
|
|
};
|
|
|
}
|