mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-06-07 17:07:19 +08:00
parent
0408fa6f96
commit
a31d154806
@ -92,7 +92,7 @@
|
|||||||
"stylelint-order": "^4.1.0",
|
"stylelint-order": "^4.1.0",
|
||||||
"typescript": "^4.4.2",
|
"typescript": "^4.4.2",
|
||||||
"unplugin-element-plus": "^0.1.0",
|
"unplugin-element-plus": "^0.1.0",
|
||||||
"vite": "^2.6.5",
|
"vite": "^2.6.7",
|
||||||
"vite-plugin-mock": "^2.9.6",
|
"vite-plugin-mock": "^2.9.6",
|
||||||
"vite-plugin-style-import": "^1.2.1",
|
"vite-plugin-style-import": "^1.2.1",
|
||||||
"vite-svg-loader": "^2.2.0",
|
"vite-svg-loader": "^2.2.0",
|
||||||
|
@ -1,17 +1,10 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, unref, computed, getCurrentInstance } from "vue";
|
import { ref, getCurrentInstance } from "vue";
|
||||||
import { useSettingStoreHook } from "/@/store/modules/settings";
|
import { usePermissionStoreHook } from "/@/store/modules/permission";
|
||||||
|
|
||||||
const keepAlive: Boolean = ref(
|
const keepAlive: Boolean = ref(
|
||||||
getCurrentInstance().appContext.config.globalProperties.$config?.KeepAlive
|
getCurrentInstance().appContext.config.globalProperties.$config?.KeepAlive
|
||||||
);
|
);
|
||||||
|
|
||||||
const getCachedPageList = computed((): string[] => {
|
|
||||||
if (!unref(keepAlive)) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
return useSettingStoreHook().cachedPageList;
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@ -19,7 +12,10 @@ const getCachedPageList = computed((): string[] => {
|
|||||||
<router-view>
|
<router-view>
|
||||||
<template #default="{ Component, route }">
|
<template #default="{ Component, route }">
|
||||||
<transition appear name="fade-transform" mode="out-in">
|
<transition appear name="fade-transform" mode="out-in">
|
||||||
<keep-alive v-if="keepAlive" :include="getCachedPageList">
|
<keep-alive
|
||||||
|
v-if="keepAlive"
|
||||||
|
:include="usePermissionStoreHook().cachePageList"
|
||||||
|
>
|
||||||
<component :is="Component" :key="route.fullPath" />
|
<component :is="Component" :key="route.fullPath" />
|
||||||
</keep-alive>
|
</keep-alive>
|
||||||
<component v-else :is="Component" :key="route.fullPath" />
|
<component v-else :is="Component" :key="route.fullPath" />
|
||||||
|
@ -12,8 +12,10 @@ import {
|
|||||||
import { RouteConfigs, relativeStorageType, tagsViewsType } from "../../types";
|
import { RouteConfigs, relativeStorageType, tagsViewsType } from "../../types";
|
||||||
import { emitter } from "/@/utils/mitt";
|
import { emitter } from "/@/utils/mitt";
|
||||||
import { templateRef } from "@vueuse/core";
|
import { templateRef } from "@vueuse/core";
|
||||||
|
import { handleAliveRoute } from "/@/router";
|
||||||
import { storageLocal } from "/@/utils/storage";
|
import { storageLocal } from "/@/utils/storage";
|
||||||
import { useRoute, useRouter } from "vue-router";
|
import { useRoute, useRouter } from "vue-router";
|
||||||
|
import { usePermissionStoreHook } from "/@/store/modules/permission";
|
||||||
import { toggleClass, removeClass, hasClass } from "/@/utils/operate";
|
import { toggleClass, removeClass, hasClass } from "/@/utils/operate";
|
||||||
|
|
||||||
import close from "/@/assets/svg/close.svg";
|
import close from "/@/assets/svg/close.svg";
|
||||||
@ -171,6 +173,8 @@ function deleteDynamicTag(obj: any, current: any, tag?: string) {
|
|||||||
relativeStorage.routesInStorage = routerArrays;
|
relativeStorage.routesInStorage = routerArrays;
|
||||||
}
|
}
|
||||||
router.push(obj.path);
|
router.push(obj.path);
|
||||||
|
// 删除缓存路由
|
||||||
|
handleAliveRoute(route.matched, "delete");
|
||||||
};
|
};
|
||||||
|
|
||||||
if (tag === "other") {
|
if (tag === "other") {
|
||||||
@ -253,7 +257,9 @@ function onClickDrop(key, item, selectRoute?: RouteConfigs) {
|
|||||||
// 关闭全部标签页
|
// 关闭全部标签页
|
||||||
routerArrays.splice(1, routerArrays.length);
|
routerArrays.splice(1, routerArrays.length);
|
||||||
relativeStorage.routesInStorage = routerArrays;
|
relativeStorage.routesInStorage = routerArrays;
|
||||||
|
usePermissionStoreHook().clearAllCachePage();
|
||||||
router.push("/welcome");
|
router.push("/welcome");
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
@ -2,12 +2,14 @@ import {
|
|||||||
Router,
|
Router,
|
||||||
createRouter,
|
createRouter,
|
||||||
RouteComponent,
|
RouteComponent,
|
||||||
createWebHashHistory
|
createWebHashHistory,
|
||||||
|
RouteRecordNormalized
|
||||||
} from "vue-router";
|
} from "vue-router";
|
||||||
import { split } from "lodash-es";
|
import { split } from "lodash-es";
|
||||||
import { i18n } from "/@/plugins/i18n";
|
import { i18n } from "/@/plugins/i18n";
|
||||||
import NProgress from "/@/utils/progress";
|
|
||||||
import { openLink } from "/@/utils/link";
|
import { openLink } from "/@/utils/link";
|
||||||
|
import NProgress from "/@/utils/progress";
|
||||||
|
import { useTimeoutFn } from "@vueuse/core";
|
||||||
import { storageSession, storageLocal } from "/@/utils/storage";
|
import { storageSession, storageLocal } from "/@/utils/storage";
|
||||||
import { usePermissionStoreHook } from "/@/store/modules/permission";
|
import { usePermissionStoreHook } from "/@/store/modules/permission";
|
||||||
|
|
||||||
@ -56,6 +58,52 @@ export const filterTree = data => {
|
|||||||
return newTree;
|
return newTree;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 从路由中提取keepAlive为true的name组成数组(此处本项目中并没有用到,只是暴露个方法)
|
||||||
|
export const getAliveRoute = () => {
|
||||||
|
const alivePageList = [];
|
||||||
|
const recursiveSearch = treeLists => {
|
||||||
|
if (!treeLists || !treeLists.length) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (let i = 0; i < treeLists.length; i++) {
|
||||||
|
if (treeLists[i]?.meta?.keepAlive) alivePageList.push(treeLists[i].name);
|
||||||
|
recursiveSearch(treeLists[i].children);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
recursiveSearch(router.options.routes);
|
||||||
|
return alivePageList;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 处理缓存路由(添加、删除、刷新)
|
||||||
|
export const handleAliveRoute = (
|
||||||
|
matched: RouteRecordNormalized[],
|
||||||
|
mode?: string
|
||||||
|
) => {
|
||||||
|
switch (mode) {
|
||||||
|
case "add":
|
||||||
|
matched.forEach(v => {
|
||||||
|
usePermissionStoreHook().cacheOperate({ mode: "add", name: v.name });
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case "delete":
|
||||||
|
usePermissionStoreHook().cacheOperate({
|
||||||
|
mode: "delete",
|
||||||
|
name: matched[matched.length - 1].name
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
usePermissionStoreHook().cacheOperate({
|
||||||
|
mode: "delete",
|
||||||
|
name: matched[matched.length - 1].name
|
||||||
|
});
|
||||||
|
useTimeoutFn(() => {
|
||||||
|
matched.forEach(v => {
|
||||||
|
usePermissionStoreHook().cacheOperate({ mode: "add", name: v.name });
|
||||||
|
});
|
||||||
|
}, 100);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// 过滤后端传来的动态路由 重新生成规范路由
|
// 过滤后端传来的动态路由 重新生成规范路由
|
||||||
export const addAsyncRoutes = (arrRoutes: Array<RouteComponent>) => {
|
export const addAsyncRoutes = (arrRoutes: Array<RouteComponent>) => {
|
||||||
if (!arrRoutes || !arrRoutes.length) return;
|
if (!arrRoutes || !arrRoutes.length) return;
|
||||||
@ -72,6 +120,7 @@ export const addAsyncRoutes = (arrRoutes: Array<RouteComponent>) => {
|
|||||||
return arrRoutes;
|
return arrRoutes;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 创建路由实例
|
||||||
export const router: Router = createRouter({
|
export const router: Router = createRouter({
|
||||||
history: createWebHashHistory(),
|
history: createWebHashHistory(),
|
||||||
routes: filterTree(ascending(constantRoutes)).concat(...remainingRouter),
|
routes: filterTree(ascending(constantRoutes)).concat(...remainingRouter),
|
||||||
@ -90,6 +139,7 @@ export const router: Router = createRouter({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 初始化路由
|
||||||
export const initRouter = name => {
|
export const initRouter = name => {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
getAsyncRoutes({ name }).then(({ info }) => {
|
getAsyncRoutes({ name }).then(({ info }) => {
|
||||||
@ -122,7 +172,7 @@ export const initRouter = name => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// reset router
|
// 重置路由
|
||||||
export function resetRouter() {
|
export function resetRouter() {
|
||||||
router.getRoutes().forEach(route => {
|
router.getRoutes().forEach(route => {
|
||||||
const { name } = route;
|
const { name } = route;
|
||||||
@ -132,9 +182,18 @@ export function resetRouter() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 路由白名单
|
||||||
const whiteList = ["/login", "/register"];
|
const whiteList = ["/login", "/register"];
|
||||||
|
|
||||||
router.beforeEach((to, _from, next) => {
|
router.beforeEach((to, _from, next) => {
|
||||||
|
if (to.meta?.keepAlive) {
|
||||||
|
const newMatched = to.matched;
|
||||||
|
handleAliveRoute(newMatched, "add");
|
||||||
|
// 页面整体刷新和点击标签页刷新
|
||||||
|
if (_from.name === undefined || _from.name === "redirect") {
|
||||||
|
handleAliveRoute(newMatched);
|
||||||
|
}
|
||||||
|
}
|
||||||
const name = storageSession.getItem("info");
|
const name = storageSession.getItem("info");
|
||||||
NProgress.start();
|
NProgress.start();
|
||||||
const externalLink = to?.redirectedFrom?.fullPath;
|
const externalLink = to?.redirectedFrom?.fullPath;
|
||||||
|
@ -20,6 +20,7 @@ const componentsRouter = {
|
|||||||
meta: {
|
meta: {
|
||||||
title: "message.hsvideo",
|
title: "message.hsvideo",
|
||||||
showLink: true,
|
showLink: true,
|
||||||
|
keepAlive: true,
|
||||||
savedPosition: true
|
savedPosition: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -30,6 +31,7 @@ const componentsRouter = {
|
|||||||
meta: {
|
meta: {
|
||||||
title: "message.hsmap",
|
title: "message.hsmap",
|
||||||
showLink: true,
|
showLink: true,
|
||||||
|
keepAlive: true,
|
||||||
savedPosition: true
|
savedPosition: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -2,7 +2,7 @@ import Layout from "/@/layout/index.vue";
|
|||||||
|
|
||||||
const editorRouter = {
|
const editorRouter = {
|
||||||
path: "/editor",
|
path: "/editor",
|
||||||
name: "editor",
|
name: "reEditor",
|
||||||
component: Layout,
|
component: Layout,
|
||||||
redirect: "/editor/index",
|
redirect: "/editor/index",
|
||||||
meta: {
|
meta: {
|
||||||
@ -15,11 +15,12 @@ const editorRouter = {
|
|||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "/editor/index",
|
path: "/editor/index",
|
||||||
name: "editor",
|
name: "reEditor",
|
||||||
component: () => import("/@/views/editor/index.vue"),
|
component: () => import("/@/views/editor/index.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: "message.hseditor",
|
title: "message.hseditor",
|
||||||
showLink: true,
|
showLink: true,
|
||||||
|
keepAlive: true,
|
||||||
savedPosition: true
|
savedPosition: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ const nestedRouter = {
|
|||||||
meta: {
|
meta: {
|
||||||
title: "message.hsmenu1",
|
title: "message.hsmenu1",
|
||||||
showLink: true,
|
showLink: true,
|
||||||
|
keepAlive: true,
|
||||||
savedPosition: false
|
savedPosition: false
|
||||||
},
|
},
|
||||||
redirect: "/nested/menu1/menu1-1",
|
redirect: "/nested/menu1/menu1-1",
|
||||||
@ -31,6 +32,7 @@ const nestedRouter = {
|
|||||||
meta: {
|
meta: {
|
||||||
title: "message.hsmenu1-1",
|
title: "message.hsmenu1-1",
|
||||||
showLink: true,
|
showLink: true,
|
||||||
|
keepAlive: true,
|
||||||
savedPosition: false
|
savedPosition: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -42,6 +44,7 @@ const nestedRouter = {
|
|||||||
meta: {
|
meta: {
|
||||||
title: "message.hsmenu1-2",
|
title: "message.hsmenu1-2",
|
||||||
showLink: true,
|
showLink: true,
|
||||||
|
keepAlive: true,
|
||||||
savedPosition: false
|
savedPosition: false
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
@ -53,6 +56,7 @@ const nestedRouter = {
|
|||||||
meta: {
|
meta: {
|
||||||
title: "message.hsmenu1-2-1",
|
title: "message.hsmenu1-2-1",
|
||||||
showLink: true,
|
showLink: true,
|
||||||
|
keepAlive: true,
|
||||||
savedPosition: false
|
savedPosition: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -64,6 +68,7 @@ const nestedRouter = {
|
|||||||
meta: {
|
meta: {
|
||||||
title: "message.hsmenu1-2-2",
|
title: "message.hsmenu1-2-2",
|
||||||
showLink: true,
|
showLink: true,
|
||||||
|
keepAlive: true,
|
||||||
savedPosition: false
|
savedPosition: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -76,6 +81,7 @@ const nestedRouter = {
|
|||||||
meta: {
|
meta: {
|
||||||
title: "message.hsmenu1-3",
|
title: "message.hsmenu1-3",
|
||||||
showLink: true,
|
showLink: true,
|
||||||
|
keepAlive: true,
|
||||||
savedPosition: false
|
savedPosition: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -88,6 +94,7 @@ const nestedRouter = {
|
|||||||
meta: {
|
meta: {
|
||||||
title: "message.hsmenu2",
|
title: "message.hsmenu2",
|
||||||
showLink: true,
|
showLink: true,
|
||||||
|
keepAlive: true,
|
||||||
savedPosition: false
|
savedPosition: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { defineStore } from "pinia";
|
import { defineStore } from "pinia";
|
||||||
import { store } from "/@/store";
|
import { store } from "/@/store";
|
||||||
|
import { cacheType } from "./types";
|
||||||
import { constantRoutesArr, ascending, filterTree } from "/@/router/index";
|
import { constantRoutesArr, ascending, filterTree } from "/@/router/index";
|
||||||
|
|
||||||
export const usePermissionStore = defineStore({
|
export const usePermissionStore = defineStore({
|
||||||
@ -8,7 +9,9 @@ export const usePermissionStore = defineStore({
|
|||||||
// 静态路由
|
// 静态路由
|
||||||
constantRoutes: constantRoutesArr,
|
constantRoutes: constantRoutesArr,
|
||||||
wholeRoutes: [],
|
wholeRoutes: [],
|
||||||
buttonAuth: []
|
buttonAuth: [],
|
||||||
|
// 缓存页面keepAlive
|
||||||
|
cachePageList: []
|
||||||
}),
|
}),
|
||||||
actions: {
|
actions: {
|
||||||
asyncActionRoutes(routes) {
|
asyncActionRoutes(routes) {
|
||||||
@ -33,6 +36,23 @@ export const usePermissionStore = defineStore({
|
|||||||
},
|
},
|
||||||
async changeSetting(routes) {
|
async changeSetting(routes) {
|
||||||
await this.asyncActionRoutes(routes);
|
await this.asyncActionRoutes(routes);
|
||||||
|
},
|
||||||
|
cacheOperate({ mode, name }: cacheType) {
|
||||||
|
switch (mode) {
|
||||||
|
case "add":
|
||||||
|
this.cachePageList.push(name);
|
||||||
|
this.cachePageList = [...new Set(this.cachePageList)];
|
||||||
|
break;
|
||||||
|
case "delete":
|
||||||
|
// eslint-disable-next-line no-case-declarations
|
||||||
|
const delIndex = this.cachePageList.findIndex(v => v === name);
|
||||||
|
this.cachePageList.splice(delIndex, 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 清空缓存页面
|
||||||
|
clearAllCachePage() {
|
||||||
|
this.cachePageList = [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -5,16 +5,13 @@ import { store } from "/@/store";
|
|||||||
interface SettingState {
|
interface SettingState {
|
||||||
title: string;
|
title: string;
|
||||||
fixedHeader: boolean;
|
fixedHeader: boolean;
|
||||||
cachedPageList: string[];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useSettingStore = defineStore({
|
export const useSettingStore = defineStore({
|
||||||
id: "pure-setting",
|
id: "pure-setting",
|
||||||
state: (): SettingState => ({
|
state: (): SettingState => ({
|
||||||
title: defaultSettings.title,
|
title: defaultSettings.title,
|
||||||
fixedHeader: defaultSettings.fixedHeader,
|
fixedHeader: defaultSettings.fixedHeader
|
||||||
// 需要开启keepalive的页面数组,里面放页面的name即可
|
|
||||||
cachedPageList: ["welcome", "reEditor"]
|
|
||||||
}),
|
}),
|
||||||
getters: {
|
getters: {
|
||||||
getTitle() {
|
getTitle() {
|
||||||
|
6
src/store/modules/types.ts
Normal file
6
src/store/modules/types.ts
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
import { RouteRecordName } from "vue-router";
|
||||||
|
|
||||||
|
export type cacheType = {
|
||||||
|
mode: string;
|
||||||
|
name?: RouteRecordName;
|
||||||
|
};
|
@ -1,10 +1,35 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<p>{{ $t("message.hsmenu1") }}</p>
|
<p>{{ $t("message.hsmenu1") }}</p>
|
||||||
<router-view v-slot="{ Component }">
|
<router-view>
|
||||||
<transition>
|
<template #default="{ Component, route }">
|
||||||
<component :is="Component" />
|
<transition appear name="fade-transform" mode="out-in">
|
||||||
</transition>
|
<keep-alive
|
||||||
|
v-if="keepAlive"
|
||||||
|
:include="usePermissionStoreHook().cachePageList"
|
||||||
|
>
|
||||||
|
<component :is="Component" :key="route.fullPath" />
|
||||||
|
</keep-alive>
|
||||||
|
<component v-else :is="Component" :key="route.fullPath" />
|
||||||
|
</transition>
|
||||||
|
</template>
|
||||||
</router-view>
|
</router-view>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { ref, getCurrentInstance } from "vue";
|
||||||
|
import { usePermissionStoreHook } from "/@/store/modules/permission";
|
||||||
|
export default {
|
||||||
|
name: "Menu1",
|
||||||
|
setup() {
|
||||||
|
const keepAlive: Boolean = ref(
|
||||||
|
getCurrentInstance().appContext.config.globalProperties.$config?.KeepAlive
|
||||||
|
);
|
||||||
|
return {
|
||||||
|
keepAlive,
|
||||||
|
usePermissionStoreHook
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
@ -1,3 +1,18 @@
|
|||||||
<template>
|
<template>
|
||||||
<p style="text-indent: 2em">{{ $t("message.hsmenu1-1") }}</p>
|
<div>
|
||||||
|
<p style="text-indent: 2em">{{ $t("message.hsmenu1-1") }}</p>
|
||||||
|
<el-input v-model="input" />
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent, ref } from "vue";
|
||||||
|
export default defineComponent({
|
||||||
|
name: "Menu1-1",
|
||||||
|
setup() {
|
||||||
|
return {
|
||||||
|
input: ref("")
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@ -1,10 +1,35 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<p style="text-indent: 2em">{{ $t("message.hsmenu1-2") }}</p>
|
<p style="text-indent: 2em">{{ $t("message.hsmenu1-2") }}</p>
|
||||||
<router-view v-slot="{ Component }">
|
<router-view>
|
||||||
<keep-alive>
|
<template #default="{ Component, route }">
|
||||||
<component :is="Component" />
|
<transition appear name="fade-transform" mode="out-in">
|
||||||
</keep-alive>
|
<keep-alive
|
||||||
|
v-if="keepAlive"
|
||||||
|
:include="usePermissionStoreHook().cachePageList"
|
||||||
|
>
|
||||||
|
<component :is="Component" :key="route.fullPath" />
|
||||||
|
</keep-alive>
|
||||||
|
<component v-else :is="Component" :key="route.fullPath" />
|
||||||
|
</transition>
|
||||||
|
</template>
|
||||||
</router-view>
|
</router-view>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { ref, getCurrentInstance } from "vue";
|
||||||
|
import { usePermissionStoreHook } from "/@/store/modules/permission";
|
||||||
|
export default {
|
||||||
|
name: "Menu1-2",
|
||||||
|
setup() {
|
||||||
|
const keepAlive: Boolean = ref(
|
||||||
|
getCurrentInstance().appContext.config.globalProperties.$config?.KeepAlive
|
||||||
|
);
|
||||||
|
return {
|
||||||
|
keepAlive,
|
||||||
|
usePermissionStoreHook
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
@ -1,3 +1,18 @@
|
|||||||
<template>
|
<template>
|
||||||
<p style="text-indent: 4em">{{ $t("message.hsmenu1-2-1") }}</p>
|
<div>
|
||||||
|
<p style="text-indent: 4em">{{ $t("message.hsmenu1-2-1") }}</p>
|
||||||
|
<el-input v-model="input" />
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent, ref } from "vue";
|
||||||
|
export default defineComponent({
|
||||||
|
name: "Menu1-2-1",
|
||||||
|
setup() {
|
||||||
|
return {
|
||||||
|
input: ref("")
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@ -1,3 +1,18 @@
|
|||||||
<template>
|
<template>
|
||||||
<p style="text-indent: 4em">{{ $t("message.hsmenu1-2-2") }}</p>
|
<div>
|
||||||
|
<p style="text-indent: 4em">{{ $t("message.hsmenu1-2-2") }}</p>
|
||||||
|
<el-input v-model="input" />
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent, ref } from "vue";
|
||||||
|
export default defineComponent({
|
||||||
|
name: "Menu1-2-2",
|
||||||
|
setup() {
|
||||||
|
return {
|
||||||
|
input: ref("")
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@ -1,3 +1,18 @@
|
|||||||
<template>
|
<template>
|
||||||
<p style="text-indent: 2em">{{ $t("message.hsmenu1-3") }}</p>
|
<div>
|
||||||
|
<p style="text-indent: 2em">{{ $t("message.hsmenu1-3") }}</p>
|
||||||
|
<el-input v-model="input" />
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent, ref } from "vue";
|
||||||
|
export default defineComponent({
|
||||||
|
name: "Menu1-3",
|
||||||
|
setup() {
|
||||||
|
return {
|
||||||
|
input: ref("")
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@ -1,3 +1,18 @@
|
|||||||
<template>
|
<template>
|
||||||
<p class="app-container">{{ $t("message.hsmenu2") }}</p>
|
<div class="app-container">
|
||||||
|
<p>{{ $t("message.hsmenu2") }}</p>
|
||||||
|
<el-input v-model="input" />
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent, ref } from "vue";
|
||||||
|
export default defineComponent({
|
||||||
|
name: "Menu2",
|
||||||
|
setup() {
|
||||||
|
return {
|
||||||
|
input: ref("")
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@ -4646,10 +4646,10 @@ vite-svg-loader@^2.2.0:
|
|||||||
"@vue/compiler-sfc" "^3.0.11"
|
"@vue/compiler-sfc" "^3.0.11"
|
||||||
svgo "^2.3.0"
|
svgo "^2.3.0"
|
||||||
|
|
||||||
vite@^2.6.5:
|
vite@^2.6.7:
|
||||||
version "2.6.5"
|
version "2.6.7"
|
||||||
resolved "https://registry.npmjs.org/vite/-/vite-2.6.5.tgz#c4d25972e2f7371e682da86828722ddf5126f3d1"
|
resolved "https://registry.npmjs.org/vite/-/vite-2.6.7.tgz#e15c1d8327950720b5d7c4ec3fb36a5a58ccf7cb"
|
||||||
integrity sha512-vavXMChDUb4Oh4YunrK9BrH5Ox74cu0eOp0VuyI/iqFz1FqbWD72So2c9I87lLL2n0+6tFPV5ijow60KrtxuZg==
|
integrity sha512-ewk//jve9k6vlU8PfJmWUHN8k0YYdw4VaKOMvoQ3nT2Pb6k5OSMKQi4jPOzVH/TlUqMsCrq7IJ80xcuDDVyigg==
|
||||||
dependencies:
|
dependencies:
|
||||||
esbuild "^0.13.2"
|
esbuild "^0.13.2"
|
||||||
postcss "^8.3.8"
|
postcss "^8.3.8"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user