From 23535804e1cbd7bea027d2647fec5b69b6d06d22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E9=B9=8F?= Date: Tue, 7 Jul 2026 14:21:03 +0800 Subject: [PATCH] feat: persist project module diagrams --- .../src/views/DiagramCenterView.vue | 1778 +++++++++++++++++ .../views/diagramCenterModuleView.test.mjs | 44 + 2 files changed, 1822 insertions(+) create mode 100644 RuoYi-Vue/easycode-web/src/views/DiagramCenterView.vue create mode 100644 RuoYi-Vue/easycode-web/src/views/diagramCenterModuleView.test.mjs diff --git a/RuoYi-Vue/easycode-web/src/views/DiagramCenterView.vue b/RuoYi-Vue/easycode-web/src/views/DiagramCenterView.vue new file mode 100644 index 0000000..6ea6dd6 --- /dev/null +++ b/RuoYi-Vue/easycode-web/src/views/DiagramCenterView.vue @@ -0,0 +1,1778 @@ + + + + + diff --git a/RuoYi-Vue/easycode-web/src/views/diagramCenterModuleView.test.mjs b/RuoYi-Vue/easycode-web/src/views/diagramCenterModuleView.test.mjs new file mode 100644 index 0000000..4b48f73 --- /dev/null +++ b/RuoYi-Vue/easycode-web/src/views/diagramCenterModuleView.test.mjs @@ -0,0 +1,44 @@ +import test from 'node:test' +import assert from 'node:assert/strict' +import { readFileSync } from 'node:fs' +import { fileURLToPath } from 'node:url' +import { dirname, resolve } from 'node:path' + +const currentDir = dirname(fileURLToPath(import.meta.url)) + +function readView(name) { + return readFileSync(resolve(currentDir, name), 'utf8') +} + +test('diagram center binds module diagram source and layout state', () => { + const source = readView('DiagramCenterView.vue') + + assert.equal(source.includes('const moduleDiagramSourceMode = ref'), true) + assert.equal(source.includes('const moduleDiagramOutlineText = ref'), true) + assert.equal(source.includes('const moduleDiagramLayoutOptions = ref'), true) + assert.equal(source.includes('v-model:source-mode="moduleDiagramSourceMode"'), true) + assert.equal(source.includes('v-model:outline-text="moduleDiagramOutlineText"'), true) + assert.equal(source.includes('v-model:layout-options="moduleDiagramLayoutOptions"'), true) + assert.equal(source.includes(':editable="true"'), true) +}) + +test('diagram center saves module diagram source, outline, layout, and graph data', () => { + const source = readView('DiagramCenterView.vue') + + assert.equal(source.includes('function moduleDiagramPayload'), true) + assert.equal(source.includes('sourceMode: moduleDiagramSourceMode.value'), true) + assert.equal(source.includes('outlineText,'), true) + assert.equal(source.includes('layoutOptions: moduleDiagramLayoutOptions.value'), true) + assert.equal(source.includes('graph: moduleDiagramGraph.value'), true) + assert.equal(source.includes('diagramJson: JSON.stringify(moduleDiagramPayload())'), true) +}) + +test('diagram center restores saved module diagram payload', () => { + const source = readView('DiagramCenterView.vue') + + assert.equal(source.includes('function applySavedModuleDiagram'), true) + assert.equal(source.includes("savedDiagrams.value.find((item) => item.diagramType === 'module')"), true) + assert.equal(source.includes('moduleDiagramSourceMode.value = payload.sourceMode'), true) + assert.equal(source.includes('moduleDiagramOutlineText.value = payload.outlineText'), true) + assert.equal(source.includes('moduleDiagramLayoutOptions.value ='), true) +})