diff --git a/src/admin/api.ts b/src/admin/api.ts new file mode 100644 index 0000000..e080886 --- /dev/null +++ b/src/admin/api.ts @@ -0,0 +1,47 @@ +import http from "utils/http" +import { DIFFICULTY } from "~/utils/constants" +import { getACRate } from "~/utils/functions" +import { Problem } from "~/utils/types" + +function filterResult(result: Problem) { + const newResult = { + id: result.id, + _id: result._id, + title: result.title, + difficulty: DIFFICULTY[result.difficulty], + tags: result.tags, + submission: result.submission_number, + rate: getACRate(result.accepted_number, result.submission_number), + status: "", + } + if (result.my_status === null || result.my_status === undefined) { + newResult.status = "not_test" + } else if (result.my_status === 0) { + newResult.status = "passed" + } else { + newResult.status = "failed" + } + return newResult +} + +export async function getProblemList( + offset = 0, + limit = 10, + searchParams: any = {} +) { + let params: any = { + paging: true, + offset, + limit, + } + Object.keys(searchParams).forEach((element) => { + if (searchParams[element]) { + params[element] = searchParams[element] + } + }) + const res = await http.get("admin/problem", { params }) + return { + results: res.data.results.map(filterResult), + total: res.data.total, + } +} diff --git a/src/admin/index.vue b/src/admin/index.vue deleted file mode 100644 index caaa7f6..0000000 --- a/src/admin/index.vue +++ /dev/null @@ -1,11 +0,0 @@ - - - - - diff --git a/src/admin/problem/list.vue b/src/admin/problem/list.vue index 49051ee..2f52ccb 100644 --- a/src/admin/problem/list.vue +++ b/src/admin/problem/list.vue @@ -1,7 +1,40 @@ - + diff --git a/src/admin/setting/home.vue b/src/admin/setting/home.vue new file mode 100644 index 0000000..1017376 --- /dev/null +++ b/src/admin/setting/home.vue @@ -0,0 +1,7 @@ + + + + + diff --git a/src/components.d.ts b/src/components.d.ts index 1b613b8..3b4ceff 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,52 +7,52 @@ import '@vue/runtime-core' export {} -declare module '@vue/runtime-core' { +declare module "@vue/runtime-core" { export interface GlobalComponents { - IEpBell: typeof import('~icons/ep/bell')['default'] - IEpCaretRight: typeof import('~icons/ep/caret-right')['default'] - IEpLoading: typeof import('~icons/ep/loading')['default'] - IEpLock: typeof import('~icons/ep/lock')['default'] - IEpMenu: typeof import('~icons/ep/menu')['default'] - IEpMoon: typeof import('~icons/ep/moon')['default'] - IEpMoreFilled: typeof import('~icons/ep/more-filled')['default'] - IEpSunny: typeof import('~icons/ep/sunny')['default'] - NAlert: typeof import('naive-ui')['NAlert'] - NAvatar: typeof import('naive-ui')['NAvatar'] - NButton: typeof import('naive-ui')['NButton'] - NCard: typeof import('naive-ui')['NCard'] - NCode: typeof import('naive-ui')['NCode'] - NConfigProvider: typeof import('naive-ui')['NConfigProvider'] - NDataTable: typeof import('naive-ui')['NDataTable'] - NDescriptions: typeof import('naive-ui')['NDescriptions'] - NDescriptionsItem: typeof import('naive-ui')['NDescriptionsItem'] - NDropdown: typeof import('naive-ui')['NDropdown'] - NEmpty: typeof import('naive-ui')['NEmpty'] - NForm: typeof import('naive-ui')['NForm'] - NFormItem: typeof import('naive-ui')['NFormItem'] - NGi: typeof import('naive-ui')['NGi'] - NGrid: typeof import('naive-ui')['NGrid'] - NIcon: typeof import('naive-ui')['NIcon'] - NInput: typeof import('naive-ui')['NInput'] - NLayout: typeof import('naive-ui')['NLayout'] - NLayoutContent: typeof import('naive-ui')['NLayoutContent'] - NLayoutHeader: typeof import('naive-ui')['NLayoutHeader'] - NLayoutSider: typeof import('naive-ui')['NLayoutSider'] - NMenu: typeof import('naive-ui')['NMenu'] - NMessageProvider: typeof import('naive-ui')['NMessageProvider'] - NModal: typeof import('naive-ui')['NModal'] - NPagination: typeof import('naive-ui')['NPagination'] - NPopover: typeof import('naive-ui')['NPopover'] - NScrollbar: typeof import('naive-ui')['NScrollbar'] - NSelect: typeof import('naive-ui')['NSelect'] - NSpace: typeof import('naive-ui')['NSpace'] - NSwitch: typeof import('naive-ui')['NSwitch'] - NTabPane: typeof import('naive-ui')['NTabPane'] - NTabs: typeof import('naive-ui')['NTabs'] - NTag: typeof import('naive-ui')['NTag'] - NTooltip: typeof import('naive-ui')['NTooltip'] - NUpload: typeof import('naive-ui')['NUpload'] - RouterLink: typeof import('vue-router')['RouterLink'] - RouterView: typeof import('vue-router')['RouterView'] + IEpBell: typeof import("~icons/ep/bell")["default"] + IEpCaretRight: typeof import("~icons/ep/caret-right")["default"] + IEpLoading: typeof import("~icons/ep/loading")["default"] + IEpLock: typeof import("~icons/ep/lock")["default"] + IEpMenu: typeof import("~icons/ep/menu")["default"] + IEpMoon: typeof import("~icons/ep/moon")["default"] + IEpMoreFilled: typeof import("~icons/ep/more-filled")["default"] + IEpSunny: typeof import("~icons/ep/sunny")["default"] + NAlert: typeof import("naive-ui")["NAlert"] + NAvatar: typeof import("naive-ui")["NAvatar"] + NButton: typeof import("naive-ui")["NButton"] + NCard: typeof import("naive-ui")["NCard"] + NCode: typeof import("naive-ui")["NCode"] + NConfigProvider: typeof import("naive-ui")["NConfigProvider"] + NDataTable: typeof import("naive-ui")["NDataTable"] + NDescriptions: typeof import("naive-ui")["NDescriptions"] + NDescriptionsItem: typeof import("naive-ui")["NDescriptionsItem"] + NDropdown: typeof import("naive-ui")["NDropdown"] + NEmpty: typeof import("naive-ui")["NEmpty"] + NForm: typeof import("naive-ui")["NForm"] + NFormItem: typeof import("naive-ui")["NFormItem"] + NGi: typeof import("naive-ui")["NGi"] + NGrid: typeof import("naive-ui")["NGrid"] + NIcon: typeof import("naive-ui")["NIcon"] + NInput: typeof import("naive-ui")["NInput"] + NLayout: typeof import("naive-ui")["NLayout"] + NLayoutContent: typeof import("naive-ui")["NLayoutContent"] + NLayoutHeader: typeof import("naive-ui")["NLayoutHeader"] + NLayoutSider: typeof import("naive-ui")["NLayoutSider"] + NMenu: typeof import("naive-ui")["NMenu"] + NMessageProvider: typeof import("naive-ui")["NMessageProvider"] + NModal: typeof import("naive-ui")["NModal"] + NPagination: typeof import("naive-ui")["NPagination"] + NPopover: typeof import("naive-ui")["NPopover"] + NScrollbar: typeof import("naive-ui")["NScrollbar"] + NSelect: typeof import("naive-ui")["NSelect"] + NSpace: typeof import("naive-ui")["NSpace"] + NSwitch: typeof import("naive-ui")["NSwitch"] + NTabPane: typeof import("naive-ui")["NTabPane"] + NTabs: typeof import("naive-ui")["NTabs"] + NTag: typeof import("naive-ui")["NTag"] + NTooltip: typeof import("naive-ui")["NTooltip"] + NUpload: typeof import("naive-ui")["NUpload"] + RouterLink: typeof import("vue-router")["RouterLink"] + RouterView: typeof import("vue-router")["RouterView"] } } diff --git a/src/oj/api.ts b/src/oj/api.ts index 9ac95d9..2591c1a 100644 --- a/src/oj/api.ts +++ b/src/oj/api.ts @@ -44,9 +44,7 @@ export async function getProblemList( params[element] = searchParams[element] } }) - const res = await http.get("problem", { - params, - }) + const res = await http.get("problem", { params }) return { results: res.data.results.map(filterResult), total: res.data.total, diff --git a/src/routes.ts b/src/routes.ts index b25ba02..f16224f 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -1,7 +1,8 @@ import { RouteRecordRaw } from "vue-router" import { getProfile } from "./shared/api" import { loadChart } from "./shared/composables/chart" -import { USER_TYPE } from "./utils/constants" +import { STORAGE_KEY, USER_TYPE } from "./utils/constants" +import storage from "./utils/storage" export const routes: RouteRecordRaw[] = [ { @@ -97,13 +98,17 @@ export const routes: RouteRecordRaw[] = [ { path: "/admin", component: () => import("~/shared/layout/admin.vue"), - meta: { requiresAuth: true }, beforeEnter: async () => { + if (!storage.get(STORAGE_KEY.AUTHED)) return "/" const res = await getProfile() if (res.data.user.admin_type === USER_TYPE.REGULAR_USER) return "/" }, children: [ - { path: "", name: "home", component: () => import("admin/index.vue") }, + { + path: "", + name: "home", + component: () => import("~/admin/setting/home.vue"), + }, { path: "config", name: "config", @@ -120,7 +125,7 @@ export const routes: RouteRecordRaw[] = [ component: () => import("admin/user/list.vue"), }, { - path: "user/import", + path: "user/importing", name: "user importing", component: () => import("admin/user/import.vue"), }, diff --git a/src/shared/layout/admin.vue b/src/shared/layout/admin.vue index 26a95fa..ffdc41a 100644 --- a/src/shared/layout/admin.vue +++ b/src/shared/layout/admin.vue @@ -1,10 +1,13 @@