20260822173019

This commit is contained in:
oneao committed 2026-08-22 17:30:20 +08:00
1 parent 27a32b313d
commit 5ff4583aeb
2 files changed
+39 -5

No files matched your search

@@ -1386,7 +1386,7 @@ loadMenuTree()
</div> </div>
<div class="mm-body__inner"> <div class="mm-body__inner">
<div class="mm-config"> <div v-if="drafts" class="mm-config">
<nav class="mm-config-nav"> <nav class="mm-config-nav">
<template v-for="group in configGroups" :key="group.key"> <template v-for="group in configGroups" :key="group.key">
<div class="mm-config-nav__group"> <div class="mm-config-nav__group">
@@ -1530,6 +1530,12 @@ loadMenuTree()
</div> </div>
</div> </div>
</div> </div>
<!-- 加载中/无数据占位:避免配置区一片空白 -->
<div v-else-if="configLoading" class="mm-config-state">
<span class="mm-config-state__spinner"></span>
<span>加载中...</span>
</div>
<div v-else class="mm-config-state">暂无配置数据</div>
</div> </div>
</template> </template>
<div v-else class="mm-main__empty"> <div v-else class="mm-main__empty">
@@ -1664,7 +1670,6 @@ loadMenuTree()
<Modal <Modal
:open="!!switchConfirm" :open="!!switchConfirm"
title="有未保存的修改" title="有未保存的修改"
:footer="false"
:mask-closable="false" :mask-closable="false"
:confirm-loading="switchSaving" :confirm-loading="switchSaving"
@cancel="onSwitchCancel" @cancel="onSwitchCancel"
@@ -2026,6 +2031,34 @@ loadMenuTree()
min-width: 0; min-width: 0;
} }
/* 配置区加载中 / 空态占位 */
.mm-config-state {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 8px;
flex: 1;
min-height: 120px;
color: var(--fms-text-secondary);
font-size: 13px;
}
.mm-config-state__spinner {
width: 18px;
height: 18px;
border: 2px solid var(--fms-border);
border-top-color: var(--fms-primary);
border-radius: 50%;
animation: mm-config-spin 0.8s linear infinite;
}
@keyframes mm-config-spin {
to {
transform: rotate(360deg);
}
}
.mm-section-toolbar { .mm-section-toolbar {
display: flex; display: flex;
align-items: center; align-items: center;
@@ -55,11 +55,12 @@ const panelStubs = {
ModulePowersPanel: { name: 'ModulePowersPanel', template: '<div class="stub-powers" />' }, ModulePowersPanel: { name: 'ModulePowersPanel', template: '<div class="stub-powers" />' },
ModuleI18nPanel: { name: 'ModuleI18nPanel', template: '<div class="stub-i18n" />' }, ModuleI18nPanel: { name: 'ModuleI18nPanel', template: '<div class="stub-i18n" />' },
MenuDetailPanel: { name: 'MenuDetailPanel', template: '<div class="stub-menu" />' }, MenuDetailPanel: { name: 'MenuDetailPanel', template: '<div class="stub-menu" />' },
// Modal 尊重 open 条件,且渲染默认插槽 + footer 插槽(只渲染真正打开的弹窗) // Modal 尊重 open / footer 条件:footer=false 时不渲染按钮区(与真实组件一致)
Modal: { Modal: {
name: 'Modal', name: 'Modal',
props: ['open', 'title', 'okText', 'okType', 'confirmLoading'], props: ['open', 'title', 'okText', 'okType', 'confirmLoading', 'footer'],
template: '<div v-if="open" class="stub-modal"><slot /><slot name="footer" /></div>', template:
'<div v-if="open" class="stub-modal"><slot /><div v-if="footer !== false" class="stub-modal-footer"><slot name="footer" /></div></div>',
}, },
Transition: { template: '<slot />' }, Transition: { template: '<slot />' },
} }