feat(app): scaffold Vue3 frontend (stage 1)

This commit is contained in:
2025-12-13 22:42:31 +08:00
parent 39153cc946
commit 34f44eed3e
35 changed files with 2910 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
<template>
<el-card shadow="never" :body-style="{ padding: '16px' }" class="card">
<h2 class="title">账号管理</h2>
<div class="app-muted">阶段1页面壳子已就绪功能将在后续阶段迁移</div>
</el-card>
</template>
<style scoped>
.card {
border-radius: var(--app-radius);
border: 1px solid var(--app-border);
}
.title {
margin: 0 0 6px;
font-size: 16px;
font-weight: 800;
}
</style>

View File

@@ -0,0 +1,68 @@
<script setup>
import { useRouter } from 'vue-router'
const router = useRouter()
function goRegister() {
router.push('/register')
}
</script>
<template>
<div class="auth-wrap">
<el-card shadow="never" class="auth-card" :body-style="{ padding: '22px' }">
<div class="brand">
<div class="brand-title">知识管理平台</div>
<div class="brand-sub app-muted">用户登录</div>
</div>
<el-alert
type="info"
:closable="false"
title="阶段1仅完成前台工程与布局搭建。登录/验证码/找回密码等功能将在后续阶段迁移。"
show-icon
/>
<div class="actions">
<el-button type="primary" @click="goRegister">前往注册</el-button>
</div>
</el-card>
</div>
</template>
<style scoped>
.auth-wrap {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 20px;
}
.auth-card {
width: 100%;
max-width: 420px;
border-radius: var(--app-radius);
border: 1px solid var(--app-border);
box-shadow: var(--app-shadow);
}
.brand {
margin-bottom: 14px;
}
.brand-title {
font-size: 18px;
font-weight: 900;
}
.brand-sub {
margin-top: 4px;
font-size: 12px;
}
.actions {
margin-top: 16px;
}
</style>

View File

@@ -0,0 +1,68 @@
<script setup>
import { useRouter } from 'vue-router'
const router = useRouter()
function goLogin() {
router.push('/login')
}
</script>
<template>
<div class="auth-wrap">
<el-card shadow="never" class="auth-card" :body-style="{ padding: '22px' }">
<div class="brand">
<div class="brand-title">知识管理平台</div>
<div class="brand-sub app-muted">用户注册</div>
</div>
<el-alert
type="info"
:closable="false"
title="阶段1仅完成前台工程与布局搭建。注册/邮箱验证等功能将在后续阶段迁移。"
show-icon
/>
<div class="actions">
<el-button @click="goLogin">返回登录</el-button>
</div>
</el-card>
</div>
</template>
<style scoped>
.auth-wrap {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 20px;
}
.auth-card {
width: 100%;
max-width: 420px;
border-radius: var(--app-radius);
border: 1px solid var(--app-border);
box-shadow: var(--app-shadow);
}
.brand {
margin-bottom: 14px;
}
.brand-title {
font-size: 18px;
font-weight: 900;
}
.brand-sub {
margin-top: 4px;
font-size: 12px;
}
.actions {
margin-top: 16px;
}
</style>

View File

@@ -0,0 +1,68 @@
<script setup>
import { useRouter } from 'vue-router'
const router = useRouter()
function goLogin() {
router.push('/login')
}
</script>
<template>
<div class="auth-wrap">
<el-card shadow="never" class="auth-card" :body-style="{ padding: '22px' }">
<div class="brand">
<div class="brand-title">知识管理平台</div>
<div class="brand-sub app-muted">重置密码</div>
</div>
<el-alert
type="info"
:closable="false"
title="阶段1仅完成前台工程与布局搭建。重置密码功能将在后续阶段迁移。"
show-icon
/>
<div class="actions">
<el-button @click="goLogin">返回登录</el-button>
</div>
</el-card>
</div>
</template>
<style scoped>
.auth-wrap {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 20px;
}
.auth-card {
width: 100%;
max-width: 420px;
border-radius: var(--app-radius);
border: 1px solid var(--app-border);
box-shadow: var(--app-shadow);
}
.brand {
margin-bottom: 14px;
}
.brand-title {
font-size: 18px;
font-weight: 900;
}
.brand-sub {
margin-top: 4px;
font-size: 12px;
}
.actions {
margin-top: 16px;
}
</style>

View File

@@ -0,0 +1,20 @@
<template>
<el-card shadow="never" :body-style="{ padding: '16px' }" class="card">
<h2 class="title">定时任务</h2>
<div class="app-muted">阶段1页面壳子已就绪功能将在后续阶段迁移</div>
</el-card>
</template>
<style scoped>
.card {
border-radius: var(--app-radius);
border: 1px solid var(--app-border);
}
.title {
margin: 0 0 6px;
font-size: 16px;
font-weight: 800;
}
</style>

View File

@@ -0,0 +1,20 @@
<template>
<el-card shadow="never" :body-style="{ padding: '16px' }" class="card">
<h2 class="title">截图管理</h2>
<div class="app-muted">阶段1页面壳子已就绪功能将在后续阶段迁移</div>
</el-card>
</template>
<style scoped>
.card {
border-radius: var(--app-radius);
border: 1px solid var(--app-border);
}
.title {
margin: 0 0 6px;
font-size: 16px;
font-weight: 800;
}
</style>