feat: initialize Vue application with main components and styles

- Added App.vue as the main application component with a structured layout.
- Created main.js to bootstrap the Vue application and mount it to the DOM.
- Introduced styles.css for global styling, including responsive design and theming.
- Removed outdated HTML files (stats.html, towns.html) and Python script (statsprocess.py) as part of the migration to a new Vue-based architecture.
- Added Vite configuration (vite.config.js) for building the Vue application.
This commit is contained in:
zhangyuheng
2026-03-18 10:07:03 +08:00
parent 3c65860619
commit 124b545ee2
51 changed files with 1671 additions and 14130 deletions

26
src/App.vue Normal file
View File

@@ -0,0 +1,26 @@
<template>
<main class="app-shell">
<section class="hero-card">
<p class="eyebrow">Vue Migration Workspace</p>
<h1>白鹿原官网 Vue 重构基座已就绪</h1>
<p class="intro">
这里是新的 Vue 入口旧版静态站仍保留在 old-html-ver 目录中已迁入的新工作流会从 public 目录提供数据与静态资源
</p>
</section>
<section class="status-grid">
<article>
<h2>public 资源</h2>
<p>旧站数据文件统计 JSON SEO 静态文件会从这里进入 Vite 构建产物</p>
</article>
<article>
<h2>scripts 任务</h2>
<p>玩家统计脚本已迁到根目录工作流可在构建前更新 public/stats</p>
</article>
<article>
<h2>下一步</h2>
<p>后续可以在 src 下逐页重建组件路由和布局而不需要再改项目基础设施</p>
</article>
</section>
</main>
</template>

5
src/main.js Normal file
View File

@@ -0,0 +1,5 @@
import { createApp } from 'vue';
import App from './App.vue';
import './styles.css';
createApp(App).mount('#app');

114
src/styles.css Normal file
View File

@@ -0,0 +1,114 @@
:root {
color-scheme: light;
font-family: "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
line-height: 1.5;
font-weight: 400;
color: #172033;
background: #f4f7fb;
font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
min-width: 320px;
min-height: 100vh;
background:
radial-gradient(circle at top left, rgba(81, 146, 255, 0.18), transparent 32%),
radial-gradient(circle at bottom right, rgba(48, 196, 141, 0.16), transparent 28%),
#f4f7fb;
}
button,
input,
textarea,
select {
font: inherit;
}
#app {
min-height: 100vh;
}
.app-shell {
width: min(1100px, calc(100% - 32px));
margin: 0 auto;
padding: 56px 0 72px;
}
.hero-card,
.status-grid article {
border: 1px solid rgba(23, 32, 51, 0.08);
border-radius: 24px;
background: rgba(255, 255, 255, 0.88);
box-shadow: 0 20px 60px rgba(40, 62, 98, 0.08);
backdrop-filter: blur(16px);
}
.hero-card {
padding: 36px;
}
.eyebrow {
margin: 0 0 12px;
font-size: 0.85rem;
font-weight: 700;
letter-spacing: 0.16em;
text-transform: uppercase;
color: #2d6cdf;
}
.hero-card h1 {
margin: 0;
font-size: clamp(2rem, 5vw, 3.4rem);
line-height: 1.05;
}
.intro {
max-width: 680px;
margin: 18px 0 0;
font-size: 1.05rem;
color: #49556b;
}
.status-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 20px;
margin-top: 24px;
}
.status-grid article {
padding: 24px;
}
.status-grid h2 {
margin: 0 0 10px;
font-size: 1.1rem;
}
.status-grid p {
margin: 0;
color: #5b6780;
}
@media (max-width: 840px) {
.app-shell {
width: min(100% - 24px, 1100px);
padding-top: 28px;
}
.hero-card {
padding: 24px;
}
.status-grid {
grid-template-columns: 1fr;
}
}