diff --git a/src/components/MemberCard.astro b/src/components/MemberCard.astro index 144eed5..83a846d 100644 --- a/src/components/MemberCard.astro +++ b/src/components/MemberCard.astro @@ -1,9 +1,9 @@ --- // Import the global.css file here so that it is included on // all pages through the use of the component. -import type { Member } from "../store/member" +import type { PublicMember } from "../store/member" import "../styles/global.css" -const { member } = Astro.props as { member: Member } +const { member } = Astro.props as { member: PublicMember } const avatar = member.avatar; --- @@ -19,32 +19,32 @@ const avatar = member.avatar; class="w-full aspect-square overflow-hidden flex items-center justify-center bg-gradient-to-b from-gray-300/70" > { - avatar - ? ( - typeof avatar !== "string" - ? ( - - ) - : ( - - ) - ) - : ( - - ) - } + avatar + ? ( + typeof avatar !== "string" + ? ( + + ) + : ( + + ) + ) + : ( + + ) + }
diff --git a/src/pages/members/index.astro b/src/pages/members/index.astro new file mode 100644 index 0000000..6a809e2 --- /dev/null +++ b/src/pages/members/index.astro @@ -0,0 +1,61 @@ +--- +import BaseLayout from "../../layouts/BaseLayout.astro" +import { computed } from "vue" +import MemberCard from "../../components/MemberCard.astro" +import type { PublicMember } from "../../store/member.ts" +import { saturdayClient } from "../../utils/client" + +const { data: members } = await saturdayClient.GET("/members", { params: {} }) + +// memberId is like "3232323233", the second and third number is the year of the member +const memberGroupByYear = computed(() => { + const group = members + // TODO delete the test member + .filter( + member => + member.memberId != "0000000000" && member.memberId != "2333333333", + ) + .reduce( + (acc, cur) => { + const year = parseInt("20" + cur.memberId.slice(1, 3)) + if (!acc[year]) { + acc[year] = [] + } + acc[year].push(cur) + return acc + }, + {} as Record, + ) + return group +}); +--- + + +
+
+
+ 协会成员 +
+
+ { + Object.keys(memberGroupByYear.value) + .sort((a, b) => parseInt(b) - parseInt(a)) + .map((year) => { + return ( +
+
{year}
+
+ {memberGroupByYear.value[year].map(member => ( + + ))} +
+
+ ) + }) + } +
+
+
+