报名后可查看证书
完成全部 {TOTAL} 节课程后可申请结业证书
立即报名结业证书
恭喜你完成《数字游民实战课》全部 {TOTAL} 节课程
异度世界、大师兄、小美
返回课程继续加油
已完成 {progress.completed}/{TOTAL} 节,完成全部可解锁证书
"use client"; import { useEffect, useState } from "react"; import Link from "next/link"; import { Header } from "@/app/components"; import { getProgress } from "@/app/lib/learning"; import { CURRICULUM_CONFIG } from "@/config/course"; import { isPaid } from "@/app/lib/payment"; const TOTAL = CURRICULUM_CONFIG.modules.reduce((s, m) => s + m.lessons.length, 0); export default function CertificatePage() { const [progress, setProgress] = useState({ completed: 0, percent: 0 }); const [paid, setPaid] = useState(false); useEffect(() => { setProgress(getProgress(TOTAL)); setPaid(isPaid()); }, []); const completed = progress.percent >= 100; return (
完成全部 {TOTAL} 节课程后可申请结业证书
立即报名恭喜你完成《数字游民实战课》全部 {TOTAL} 节课程
异度世界、大师兄、小美
返回课程已完成 {progress.completed}/{TOTAL} 节,完成全部可解锁证书