Files
xk-admin/apps/web-antd/src/views/system/system-config/components/module-tabs-panel.vue
李琦 d159e514b2 feat: 补齐素材文件夹、挂号改期、系统配置分组与工作台简报开关
素材库按 object_key 目录同步文件夹侧栏,选图和筛选可按目录收窄。
挂号列表支持管理端代改期,号源日历与患者端同源。
系统配置按端拆模块(患者首页展示、医生默认常用入口、工作台简报总开关、处方签名),旧菜单 key 做迁移以免刷新丢选中。
AI 生成记录补每日简报场景和缓存命中筛选;个人中心改走后端菜单 Profile。
2026-08-18 09:12:07 +08:00

91 lines
1.9 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<script lang="ts" setup>
/**
* 系统配置通用壳:右侧二级 Tab和 AI 模块同一套交互
* 各 Tab 仍是独立面板,自己管 load/save底部保存条不互相覆盖
*/
import type { Component } from 'vue';
import { onMounted, ref } from 'vue';
import { Tabs } from 'ant-design-vue';
export interface ModuleTabItem {
key: string;
title: string;
component: Component;
}
const props = defineProps<{
moduleKey: string;
tabs: ModuleTabItem[];
}>();
const subTab = ref(props.tabs[0]?.key || '');
function storageKey() {
return `system_config_${props.moduleKey}_sub_tab`;
}
function onSubTabChange(key: number | string) {
subTab.value = String(key);
localStorage.setItem(storageKey(), String(key));
}
onMounted(() => {
const stored = localStorage.getItem(storageKey());
if (stored && props.tabs.some((tab) => tab.key === stored)) {
subTab.value = stored;
}
});
</script>
<template>
<div class="cfg-panel">
<div class="cfg-panel-body module-tabs-body">
<Tabs :active-key="subTab" @change="onSubTabChange">
<Tabs.TabPane v-for="tab in tabs" :key="tab.key" :tab="tab.title">
<component :is="tab.component" />
</Tabs.TabPane>
</Tabs>
</div>
</div>
</template>
<style scoped>
.module-tabs-body {
display: flex;
flex-direction: column;
padding: 8px 0 0;
overflow: hidden;
}
.module-tabs-body :deep(.ant-tabs) {
display: flex;
flex: 1;
flex-direction: column;
min-height: 0;
}
.module-tabs-body :deep(.ant-tabs-nav) {
flex-shrink: 0;
margin: 0 20px;
}
.module-tabs-body :deep(.ant-tabs-content-holder) {
flex: 1;
min-height: 0;
overflow: hidden;
}
.module-tabs-body :deep(.ant-tabs-content),
.module-tabs-body :deep(.ant-tabs-tabpane-active) {
height: 100%;
}
/* 子面板铺满 Tab自己滚内容、底栏固定 */
.module-tabs-body :deep(.cfg-panel) {
height: 100%;
min-height: 0;
}
</style>