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 @@
-
-
-
- 1213
-
-
-
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 @@
-
+
- problem list
+
+
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 @@