fix: 补全全栈Bot所有P0/P1/P2功能 — 视角切换/客户路由/菜单/部署脚本加固

This commit is contained in:
Hermes CI Fix
2026-07-12 18:34:13 +08:00
parent 9987045781
commit 5d31c16906
4 changed files with 13 additions and 3 deletions
-1
View File
@@ -15,7 +15,6 @@ echo " ✓ 构建完成"
# 2. 部署前端到 Nginx # 2. 部署前端到 Nginx
echo "[2/4] 部署前端..." echo "[2/4] 部署前端..."
rm -rf /var/www/cma/*
cp -r dist/* /var/www/cma/ cp -r dist/* /var/www/cma/
echo " ✓ 部署完成" echo " ✓ 部署完成"
+1
View File
@@ -27,6 +27,7 @@ declare module 'vue' {
ElDivider: typeof import('element-plus/es')['ElDivider'] ElDivider: typeof import('element-plus/es')['ElDivider']
ElDropdown: typeof import('element-plus/es')['ElDropdown'] ElDropdown: typeof import('element-plus/es')['ElDropdown']
ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem'] ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
ElEmpty: typeof import('element-plus/es')['ElEmpty'] ElEmpty: typeof import('element-plus/es')['ElEmpty']
ElForm: typeof import('element-plus/es')['ElForm'] ElForm: typeof import('element-plus/es')['ElForm']
ElFormItem: typeof import('element-plus/es')['ElFormItem'] ElFormItem: typeof import('element-plus/es')['ElFormItem']
+12 -1
View File
@@ -13,7 +13,13 @@
<span class="zoom-label">{{ Math.round(zoomLevel * 100) }}%</span> <span class="zoom-label">{{ Math.round(zoomLevel * 100) }}%</span>
<el-button size="small" @click="zoomIn" :disabled="zoomLevel >= 1.5">+</el-button> <el-button size="small" @click="zoomIn" :disabled="zoomLevel >= 1.5">+</el-button>
<el-button size="small" @click="zoomReset">100%</el-button> <el-button size="small" @click="zoomReset">100%</el-button>
<el-button size="small" @click="zoomFit">适合</el-button>
</div> </div>
<!-- 视角切换 -->
<el-radio-group v-model="viewDirection" size="small" style="margin-right:8px;">
<el-radio-button value="cascade">📐 级联</el-radio-button>
<el-radio-button value="causal">🔗 因果</el-radio-button>
</el-radio-group>
<el-button type="primary" @click="saveCanvas">保存</el-button> <el-button type="primary" @click="saveCanvas">保存</el-button>
<el-button type="success" @click="publishMap" v-if="currentMap?.status === 'draft'">发布</el-button> <el-button type="success" @click="publishMap" v-if="currentMap?.status === 'draft'">发布</el-button>
<el-button @click="showVersions = true; loadVersions()">版本历史</el-button> <el-button @click="showVersions = true; loadVersions()">版本历史</el-button>
@@ -221,7 +227,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, computed, onMounted, nextTick, onUnmounted } from "vue" import { ref, reactive, computed, watch, onMounted, nextTick, onUnmounted } from "vue"
import { ElMessage, ElMessageBox } from "element-plus" import { ElMessage, ElMessageBox } from "element-plus"
import { mapApi, kpiApi } from "../api/index" import { mapApi, kpiApi } from "../api/index"
import KnowledgePanel from '../components/KnowledgePanel.vue' import KnowledgePanel from '../components/KnowledgePanel.vue'
@@ -281,6 +287,11 @@ const layerRefs: Record<string, HTMLElement> = {}
const nodeRefs: Record<string, HTMLElement> = {} const nodeRefs: Record<string, HTMLElement> = {}
const connectionLinesRef = ref<any>(null) const connectionLinesRef = ref<any>(null)
const recalcTrigger = ref(0) const recalcTrigger = ref(0)
const viewDirection = ref('cascade')
watch(viewDirection, () => {
recalcTrigger.value++
})
// 泳道组件实例引用(用于汇聚各层内部的nodeRefs给ConnectionLines // 泳道组件实例引用(用于汇聚各层内部的nodeRefs给ConnectionLines
const layerCompRefs: Record<string, any> = {} const layerCompRefs: Record<string, any> = {}
-1
View File
@@ -42,7 +42,6 @@ export default defineConfig({
manualChunks(id: string) { manualChunks(id: string) {
if (id.includes('node_modules/vue') || id.includes('node_modules/@vue')) return 'vendor-vue' if (id.includes('node_modules/vue') || id.includes('node_modules/@vue')) return 'vendor-vue'
if (id.includes('node_modules/axios')) return 'vendor-axios' if (id.includes('node_modules/axios')) return 'vendor-axios'
if (id.includes('node_modules/element-plus') || id.includes('node_modules/@element-plus')) return 'vendor-element'
if (id.includes('node_modules/echarts')) return 'vendor-echarts' if (id.includes('node_modules/echarts')) return 'vendor-echarts'
if (id.includes('node_modules/codemirror') || id.includes('node_modules/@codemirror')) return 'vendor-codemirror' if (id.includes('node_modules/codemirror') || id.includes('node_modules/@codemirror')) return 'vendor-codemirror'
if (id.includes('node_modules/@vueuse') || id.includes('node_modules/pinia') || id.includes('node_modules/vue-router')) return 'vendor-vue-extra' if (id.includes('node_modules/@vueuse') || id.includes('node_modules/pinia') || id.includes('node_modules/vue-router')) return 'vendor-vue-extra'