|
|
@@ -28,8 +28,8 @@
|
|
|
<AppSearch mode="bar" placeholder="搜索系统内容" />
|
|
|
</div>
|
|
|
<span :class="`${prefixCls}-search-divider`"></span>
|
|
|
- <!-- 传统 ⇄ 智能:放在模板库前面 -->
|
|
|
- <AppWorkbenchToggle @change="setWorkbenchMode" />
|
|
|
+ <!-- 传统 ⇄ 智能:放在模板库前面。current 传死为 traditional —— 本壳就是传统壳 -->
|
|
|
+ <AppWorkbenchToggle current="traditional" @change="handleWorkbenchModeChange" />
|
|
|
|
|
|
<Tooltip v-if="showTemplateLibraryAction" title="模板库" placement="bottom" :mouseEnterDelay="0.5">
|
|
|
<Button
|
|
|
@@ -49,6 +49,9 @@
|
|
|
<SettingDrawer v-if="getShowSetting" />
|
|
|
</template>
|
|
|
</AppTopBar>
|
|
|
+
|
|
|
+ <!-- 模板库:挂在顶栏上就地打开,不再先跳到案件数据页(会把用户的位置与左侧菜单顶掉) -->
|
|
|
+ <CaseTemplateLibraryModal v-model:open="templateLibraryVisible" />
|
|
|
</template>
|
|
|
<script lang="ts">
|
|
|
import { defineComponent, ref, unref, computed } from 'vue';
|
|
|
@@ -69,6 +72,8 @@
|
|
|
import { useDesign } from '@/core/hooks/web/useDesign';
|
|
|
import { useMessage } from '@/core/hooks/web/useMessage';
|
|
|
import { useWorkbenchModeSwitch } from '@/core/logics/workbenchMode';
|
|
|
+ import { useAppStoreWithOut } from '@/core/store/modules/app';
|
|
|
+ import type { WorkbenchMode } from '@/core/store/modules/app';
|
|
|
import { exitCaseConfirmOptions } from '@/core/logics/exitCaseConfirm';
|
|
|
import { useGo } from '@/core/hooks/web/usePage';
|
|
|
import { useLocale } from '@/core/locales/useLocale';
|
|
|
@@ -80,8 +85,7 @@
|
|
|
import LayoutMenu from '../menu/index.vue';
|
|
|
import LayoutTrigger from '../trigger/index.vue';
|
|
|
import { LayoutBreadcrumb, FullScreen, ErrorAction, SettingDrawer } from './components';
|
|
|
-
|
|
|
- const HEADER_TEMPLATE_LIBRARY_OPEN_EVENT = 'layout-header:open-template-library';
|
|
|
+ import CaseTemplateLibraryModal from '@/case/views/data/components/CaseTemplateLibraryModal.vue';
|
|
|
|
|
|
export default defineComponent({
|
|
|
name: 'LayoutHeader',
|
|
|
@@ -89,6 +93,7 @@
|
|
|
Button,
|
|
|
AppTopBar,
|
|
|
AppWorkbenchToggle,
|
|
|
+ CaseTemplateLibraryModal,
|
|
|
LayoutTrigger,
|
|
|
LayoutBreadcrumb,
|
|
|
LayoutMenu,
|
|
|
@@ -106,6 +111,7 @@
|
|
|
const { prefixCls } = useDesign('layout-header');
|
|
|
const { createConfirm } = useMessage();
|
|
|
const { setMode: setWorkbenchMode } = useWorkbenchModeSwitch();
|
|
|
+ const appStore = useAppStoreWithOut();
|
|
|
const userStore = useUserStore();
|
|
|
const emitter = useEmitter();
|
|
|
const route = useRoute();
|
|
|
@@ -185,12 +191,17 @@
|
|
|
|
|
|
const showTemplateLibraryAction = computed(() => true);
|
|
|
|
|
|
+ /** 模板库弹框开关(组件挂在顶栏上,点按钮就地打开) */
|
|
|
+ const templateLibraryVisible = ref(false);
|
|
|
|
|
|
- const handleTemplateLibraryClick = async () => {
|
|
|
- if (route.name !== 'ViewsDataIndex') {
|
|
|
- await go(PageEnum.BASE_HOME);
|
|
|
- }
|
|
|
- emitter.emit(HEADER_TEMPLATE_LIBRARY_OPEN_EVENT, undefined);
|
|
|
+ /**
|
|
|
+ * 打开模板库。
|
|
|
+ *
|
|
|
+ * 模板库已抽成独立组件挂在本顶栏上,所以这里只开弹框:
|
|
|
+ * 之前是「先跳到案件数据页 + 发事件」,会把用户当前页面和左侧菜单一起顶掉。
|
|
|
+ */
|
|
|
+ const handleTemplateLibraryClick = () => {
|
|
|
+ templateLibraryVisible.value = true;
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
@@ -205,6 +216,21 @@
|
|
|
);
|
|
|
};
|
|
|
|
|
|
+ /**
|
|
|
+ * 传统壳里的模式开关(开关恒显示「传统」为当前,故只会收到"想切去哪一侧")。
|
|
|
+ *
|
|
|
+ * <p>切智能:记偏好 + 跳工作台(走统一口径,见 useWorkbenchModeSwitch)。
|
|
|
+ * <p>点传统:本壳已经是传统,只把偏好对齐成传统 —— 偏好会决定下次开案的落点,
|
|
|
+ * 用户在当前布局下点「传统」,意图就是「以后也走传统」,不能因为开关已高亮就吞掉这次点击。
|
|
|
+ */
|
|
|
+ const handleWorkbenchModeChange = (mode: WorkbenchMode) => {
|
|
|
+ if (mode === 'smart') {
|
|
|
+ setWorkbenchMode('smart');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ appStore.setWorkbenchMode('traditional');
|
|
|
+ };
|
|
|
+
|
|
|
return {
|
|
|
prefixCls,
|
|
|
getHeaderClass,
|
|
|
@@ -229,9 +255,10 @@
|
|
|
getShowSearch,
|
|
|
currentCaseName,
|
|
|
showTemplateLibraryAction,
|
|
|
+ templateLibraryVisible,
|
|
|
handleTemplateLibraryClick,
|
|
|
handleExitCase,
|
|
|
- setWorkbenchMode,
|
|
|
+ handleWorkbenchModeChange,
|
|
|
};
|
|
|
},
|
|
|
});
|