From a347115ca384e8b0a6dc103d0c311b974e3a8f4a Mon Sep 17 00:00:00 2001 From: Litrix2 Date: Sun, 15 Dec 2024 19:07:02 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20=E5=AE=8C=E6=88=90=E4=BA=94?= =?UTF-8?q?=E5=AD=90=E6=A3=8B=E6=A3=8B=E7=9B=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 5 +- src/assets/global.scss | 3 + src/components/app/HeaderMenu.vue | 1 + src/components/gobang/GobangHeader.vue | 22 +++ src/router/index.ts | 44 +++--- src/utils/2d-array.ts | 10 +- src/views/GobangListPage.vue | 40 ++---- src/views/GobangPlayPage.vue | 190 ++++++++++++++++++++++++- vite.config.ts | 7 +- 9 files changed, 259 insertions(+), 63 deletions(-) create mode 100644 src/components/gobang/GobangHeader.vue diff --git a/src/App.vue b/src/App.vue index 324d747..a603e15 100644 --- a/src/App.vue +++ b/src/App.vue @@ -78,6 +78,9 @@ .app-header { --el-header-height: var(--header-height); --el-loading-spinner-size: 30px; + position: sticky; + z-index: 1000; + top: 0; background-color: white; border-bottom: 1px solid var(--el-border-color); // 侧边栏需要居中 @@ -92,7 +95,7 @@ .app-router-view-enter-active, .app-router-view-leave-active { - transition: opacity 0.4s ease; + transition: opacity 0.25s ease; } .app-router-view-enter-from, diff --git a/src/assets/global.scss b/src/assets/global.scss index 2a9cb21..d84a028 100644 --- a/src/assets/global.scss +++ b/src/assets/global.scss @@ -31,6 +31,9 @@ body { .justify-center { justify-content: center; } +.justify-between { + justify-content: space-between; +} .justify-end { justify-content: flex-end; } diff --git a/src/components/app/HeaderMenu.vue b/src/components/app/HeaderMenu.vue index babfeac..893653f 100644 --- a/src/components/app/HeaderMenu.vue +++ b/src/components/app/HeaderMenu.vue @@ -23,6 +23,7 @@ .app-header-menu--horizontal { flex: 1; margin-right: 10px; + border-bottom: none; } .app-header-menu :is(.el-menu-item, .el-sub-menu__title) { user-select: none; diff --git a/src/components/gobang/GobangHeader.vue b/src/components/gobang/GobangHeader.vue new file mode 100644 index 0000000..229bc43 --- /dev/null +++ b/src/components/gobang/GobangHeader.vue @@ -0,0 +1,22 @@ + + + diff --git a/src/router/index.ts b/src/router/index.ts index 419db70..b6e7dd8 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -66,33 +66,29 @@ router.beforeEach(async (to) => { const pageStore = usePageStore(); const { permissionId } = to.meta; pageStore.setNewRouteId(to); - try { - if (!userStore.userInfo) { - const succeed = await userStore.updateSelfUserInfo(true); - if (!succeed) { - if (permissionId === undefined) { - return true; - } - return pageStore.createTempErrorRoute( - { - type: PageErrorType.NETWORK_ERROR, - }, - to, - ); - } - } - if (to.meta.shouldLogin && !userStore.logined) { - return pageStore.createTempErrorRoute({ type: PageErrorType.NOT_LOGIN }, to); - } - if (permissionId) { - if (userStore.hasPermission(permissionId)) { + if (!userStore.userInfo) { + const succeed = await userStore.updateSelfUserInfo(true); + if (!succeed) { + if (permissionId === undefined) { return true; - } else { - return pageStore.createTempErrorRoute({ type: PageErrorType.NO_PERMISSION }, to); } + return pageStore.createTempErrorRoute( + { + type: PageErrorType.NETWORK_ERROR, + }, + to, + ); + } + } + if (to.meta.shouldLogin && !userStore.logined) { + return pageStore.createTempErrorRoute({ type: PageErrorType.NOT_LOGIN }, to); + } + if (permissionId) { + if (userStore.hasPermission(permissionId)) { + return true; + } else { + return pageStore.createTempErrorRoute({ type: PageErrorType.NO_PERMISSION }, to); } - } finally { - pageStore.removeRouteId(to); } return true; }); diff --git a/src/utils/2d-array.ts b/src/utils/2d-array.ts index 7810309..478c2ae 100644 --- a/src/utils/2d-array.ts +++ b/src/utils/2d-array.ts @@ -1,6 +1,10 @@ -export function create2DArray(height: number, width: number, cell: T | (() => T)): T[][] { - return Array.from({ length: height }, () => - Array.from({ length: width }, () => (cell instanceof Function ? cell() : cell)), +export function create2DArray( + height: number, + width: number, + cell: T | ((x: number, y: number) => T), +): T[][] { + return Array.from({ length: height }, (_, y) => + Array.from({ length: width }, (_, x) => (cell instanceof Function ? cell(x, y) : cell)), ); } diff --git a/src/views/GobangListPage.vue b/src/views/GobangListPage.vue index b3f62da..2e28819 100644 --- a/src/views/GobangListPage.vue +++ b/src/views/GobangListPage.vue @@ -1,15 +1,13 @@