diff --git a/src/oj/announcement/list.vue b/src/oj/announcement/list.vue
new file mode 100644
index 0000000..22bb094
--- /dev/null
+++ b/src/oj/announcement/list.vue
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
diff --git a/src/oj/api.ts b/src/oj/api.ts
index 6d83a2c..d5cec7d 100644
--- a/src/oj/api.ts
+++ b/src/oj/api.ts
@@ -150,3 +150,7 @@ export function uploadAvatar(file: File) {
export function updateProfile(data: { real_name: string; mood: string }) {
return http.put("profile", data)
}
+
+export function getAnnouncementList(offset = 10, limit = 10) {
+ return http.get("announcement", { params: { limit, offset } })
+}
diff --git a/src/routes.ts b/src/routes.ts
index 7894612..2c2c8ef 100644
--- a/src/routes.ts
+++ b/src/routes.ts
@@ -70,6 +70,10 @@ export const ojs: RouteRecordRaw = {
component: () => import("oj/rank/list.vue"),
beforeEnter: loadChart,
},
+ {
+ path: "announcement",
+ component: () => import("oj/announcement/list.vue"),
+ },
{
path: "user",
component: () => import("oj/user/index.vue"),
diff --git a/src/shared/components/Header.vue b/src/shared/components/Header.vue
index d29c9d6..e886a96 100644
--- a/src/shared/components/Header.vue
+++ b/src/shared/components/Header.vue
@@ -51,6 +51,10 @@ const menus = computed(() => [
label: () => h(RouterLink, { to: "/rank" }, { default: () => "排名" }),
key: "rank",
},
+ {
+ label: () => h(RouterLink, { to: "/announcement" }, { default: () => "公告" }),
+ key: "announcement",
+ },
{
label: () => h(RouterLink, { to: "/admin" }, { default: () => "后台" }),
show: userStore.isAdminRole,