Merge pull request #1 from ZSCGR/yes

修改项目结构为vue,后端改为sqlite
This commit is contained in:
ZSCGR
2025-11-26 20:43:37 +08:00
committed by GitHub
23 changed files with 191 additions and 352 deletions
+45
View File
@@ -0,0 +1,45 @@
# Dependencies
node_modules/
package-lock.json
# (Keep package-lock.json if you want to lock versions, but some prefer to ignore. Standard is to KEEP it, but I'll list node_modules which is the big one)
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Database
*.db
*.sqlite
webs/genshin.db
# OS generated files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
# IDEs and Editors
.idea/
.vscode/
*.swp
*.swo
# Environment variables
.env
.env.test
.env.production
# Optional: Verce output
.vercel
-12
View File
@@ -1,12 +0,0 @@
<?php
$file= __DIR__ . '/..'.$_SERVER["PHP_SELF"];
if(file_exists($file))
{
return false;
}
else
{
require_once __DIR__ . '/../index.php';
}
#echo $_SERVER["PHP_SELF"];
+1
View File
@@ -5,6 +5,7 @@
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://ys.chgr.cc/" />
<title>原神主题网站 | Genshin Theme</title>
<!-- 样式文件 | CSS file -->
+19
View File
@@ -0,0 +1,19 @@
{
"name": "genshin-impart",
"version": "1.0.0",
"description": "本网站所参考的源码:[Herta Kuru~](https://github.com/duiqt/herta_kuru) |",
"main": "indexscript.js",
"scripts": {
"start": "node server.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"body-parser": "^2.2.1",
"cors": "^2.8.5",
"express": "^5.1.0",
"sqlite3": "^5.1.7"
}
}
+93
View File
@@ -0,0 +1,93 @@
const express = require('express');
const sqlite3 = require('sqlite3').verbose();
const bodyParser = require('body-parser');
const cors = require('cors');
const path = require('path');
const fs = require('fs');
const app = express();
const PORT = process.env.PORT || 3000;
// Middleware
app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// Database setup
const dbFile = path.join(__dirname, 'webs', 'genshin.db');
const db = new sqlite3.Database(dbFile, (err) => {
if (err) {
console.error('Error opening database:', err.message);
} else {
console.log('Connected to the SQLite database.');
initializeDatabase();
}
});
function initializeDatabase() {
db.serialize(() => {
db.run(`CREATE TABLE IF NOT EXISTS ys (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
globalcount INTEGER DEFAULT 0
)`);
const characters = ['klee', 'nahida', 'kirara', 'dori', 'babara'];
const stmt = db.prepare("INSERT OR IGNORE INTO ys (name, globalcount) VALUES (?, 0)");
characters.forEach(char => {
stmt.run(char);
});
stmt.finalize();
console.log('Database initialized.');
});
}
// Serve static files
// Serve root files (index.html, img, etc.)
app.use(express.static(path.join(__dirname)));
// API Routes
// Get count
app.get('/api/count/:name', (req, res) => {
const name = req.params.name;
db.get("SELECT globalcount FROM ys WHERE name = ?", [name], (err, row) => {
if (err) {
res.status(500).json({ error: err.message });
return;
}
if (row) {
// Format matches the previous PHP array structure: [{globalcount: 123}]
res.json([{ globalcount: row.globalcount }]);
} else {
res.status(404).json({ error: "Character not found" });
}
});
});
// Update count
app.post('/api/count/:name', (req, res) => {
const name = req.params.name;
const localCount = parseInt(req.body.localcount) || 0;
// First get current count to add to it (though atomic update is better)
// Using atomic update directly:
db.run("UPDATE ys SET globalcount = globalcount + ? WHERE name = ?", [localCount, name], function(err) {
if (err) {
res.status(500).send("Update failed: " + err.message);
return;
}
if (this.changes > 0) {
res.send("更新成功");
} else {
res.send("没有找到全局计数值"); // Or create if not exists
}
});
});
// Fallback for specific PHP routes to redirect/handle gracefully if needed,
// but we will update frontend to use /api/count/:name.
app.listen(PORT, () => {
console.log(`Server running on http://localhost:${PORT}`);
});
+10 -5
View File
@@ -1,10 +1,15 @@
{
"functions": {
"api/index.php": {
"runtime": "[email protected]"
"version": 2,
"builds": [
{
"src": "server.js",
"use": "@vercel/node"
}
},
],
"routes": [
{ "src": "/(.*)", "dest": "/api/index.php" }
{
"src": "/(.*)",
"dest": "/server.js"
}
]
}
+2 -1
View File
@@ -3,7 +3,8 @@
<head>
<meta charset="utf-8" />
<title id="doc-title">Babara~</title><!--change-->
<title id="doc-title">Kirakira~</title>
<link rel="canonical" href="https://ys.chgr.cc/webs/BabaraWeb/babara.html" />
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
<link rel="stylesheet" href="./babarastyle.css" type="text/css" /><!--change-->
<link rel="preconnect" href="https://fonts.googleapis.com" />
-62
View File
@@ -1,62 +0,0 @@
<?php
//加载数据库信息
require_once('../config.php');
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 连接成功,可以进行数据库操作
$sql = "SELECT globalcount FROM ys WHERE name = 'babara'";
// 执行查询
$result = $conn->query($sql);
if ($_SERVER["REQUEST_METHOD"] === "POST") {
// 处理 POST 请求
//接收前端数据
$localcount = $_POST["localcount"];
//检查查询结果
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
$globalCount = $row['globalcount'];
// 将本地计数值加给全局计数
$globalCount += $localcount;
// 更新数据库中的全局计数值
$updateSql = "UPDATE ys SET globalcount = $globalCount WHERE name = 'babara';";
if ($conn->query($updateSql) === TRUE) {
// 更新成功
echo "更新成功";
} else {
// 更新失败
echo "更新失败: " . $conn->error;
}
} else {
// 没有找到全局计数值
echo "没有找到全局计数值";
}
// 返回响应
//echo "这是 POST 请求的响应";
} elseif ($_SERVER["REQUEST_METHOD"] === "GET") {
// 处理 GET 请求
if ($result->num_rows > 0) {
// 有数据返回
$rows = array();
while ($row = $result->fetch_assoc()) {
$rows[] = $row;
}
// 将查询结果转换为 JSON 格式发送回前端
echo json_encode($rows);
} else {
// 无数据返回
echo "没有数据";
}
// 返回响应
//echo "这是 GET 请求的响应";
} else {
// 不支持其他请求方法
http_response_code(405); // 返回“Method Not Allowed”状态码
echo "不支持的请求方法";
}
?>
+3 -3
View File
@@ -537,7 +537,7 @@ $(document).ready(function () {
//上传数据
function updateGlobalCount() {
$.ajax({
url: './babara.php',
url: '/api/count/babara',
method: 'POST',
async: false,
data: { localcount: thisTimeCounts },
@@ -560,7 +560,7 @@ function updateGlobalCount() {
//首次访问网站的时候,立即获取 globalCounts并刷新 (页面加载完成后立即执行)
document.addEventListener("DOMContentLoaded", function () {
$.ajax({
url: './babara.php',
url: '/api/count/babara',
method: 'GET',
dataType: 'json',
headers: {
@@ -586,7 +586,7 @@ function updateGlobalCount() {
// 定时轮询后端获取 globalCounts
setInterval(function () {
$.ajax({
url: './babara.php',
url: '/api/count/babara',
method: 'GET',
dataType: 'json',
headers: {
+2 -1
View File
@@ -3,7 +3,8 @@
<head>
<meta charset="utf-8" />
<title id="doc-title">Duang~</title><!--change-->
<title id="doc-title">Duang~</title>
<link rel="canonical" href="https://ys.chgr.cc/webs/DoriWeb/dori.html" />
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
<link rel="stylesheet" href="./doristyle.css" type="text/css" /><!--change-->
<link rel="preconnect" href="https://fonts.googleapis.com" />
-62
View File
@@ -1,62 +0,0 @@
<?php
//加载数据库信息
require_once('../config.php');
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 连接成功,可以进行数据库操作
$sql = "SELECT globalcount FROM ys WHERE name = 'dori'";
// 执行查询
$result = $conn->query($sql);
if ($_SERVER["REQUEST_METHOD"] === "POST") {
// 处理 POST 请求
//接收前端数据
$localcount = $_POST["localcount"];
//检查查询结果
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
$globalCount = $row['globalcount'];
// 将本地计数值加给全局计数
$globalCount += $localcount;
// 更新数据库中的全局计数值
$updateSql = "UPDATE ys SET globalcount = $globalCount WHERE name = 'dori';";
if ($conn->query($updateSql) === TRUE) {
// 更新成功
echo "更新成功";
} else {
// 更新失败
echo "更新失败: " . $conn->error;
}
} else {
// 没有找到全局计数值
echo "没有找到全局计数值";
}
// 返回响应
//echo "这是 POST 请求的响应";
} elseif ($_SERVER["REQUEST_METHOD"] === "GET") {
// 处理 GET 请求
if ($result->num_rows > 0) {
// 有数据返回
$rows = array();
while ($row = $result->fetch_assoc()) {
$rows[] = $row;
}
// 将查询结果转换为 JSON 格式发送回前端
echo json_encode($rows);
} else {
// 无数据返回
echo "没有数据";
}
// 返回响应
//echo "这是 GET 请求的响应";
} else {
// 不支持其他请求方法
http_response_code(405); // 返回“Method Not Allowed”状态码
echo "不支持的请求方法";
}
?>
+3 -3
View File
@@ -549,7 +549,7 @@ $(document).ready(function () {
//上传数据
function updateGlobalCount() {
$.ajax({
url: './dori.php',
url: '/api/count/dori',
method: 'POST',
async: false,
data: { localcount: thisTimeCounts },
@@ -572,7 +572,7 @@ function updateGlobalCount() {
//首次访问网站的时候,立即获取 globalCounts并刷新 (页面加载完成后立即执行)
document.addEventListener("DOMContentLoaded", function () {
$.ajax({
url: './dori.php',
url: '/api/count/dori',
method: 'GET',
dataType: 'json',
headers: {
@@ -598,7 +598,7 @@ function updateGlobalCount() {
// 定时轮询后端获取 globalCounts
setInterval(function () {
$.ajax({
url: './dori.php',
url: '/api/count/dori',
method: 'GET',
dataType: 'json',
headers: {
+2 -1
View File
@@ -3,7 +3,8 @@
<head>
<meta charset="utf-8" />
<title id="doc-title">Miaouuuu~</title><!--change-->
<title id="doc-title">Meow~</title>
<link rel="canonical" href="https://ys.chgr.cc/webs/KiraraWeb/kirara.html" />
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
<link rel="stylesheet" href="kirarastyle.css" type="text/css" /><!--change-->
<link rel="preconnect" href="https://fonts.googleapis.com" />
-62
View File
@@ -1,62 +0,0 @@
<?php
//加载数据库信息
require_once('../config.php');
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 连接成功,可以进行数据库操作
$sql = "SELECT globalcount FROM ys WHERE name = 'kirara'";
// 执行查询
$result = $conn->query($sql);
if ($_SERVER["REQUEST_METHOD"] === "POST") {
// 处理 POST 请求
//接收前端数据
$localcount = $_POST["localcount"];
//检查查询结果
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
$globalCount = $row['globalcount'];
// 将本地计数值加给全局计数
$globalCount += $localcount;
// 更新数据库中的全局计数值
$updateSql = "UPDATE ys SET globalcount = $globalCount WHERE name = 'kirara';";
if ($conn->query($updateSql) === TRUE) {
// 更新成功
echo "更新成功";
} else {
// 更新失败
echo "更新失败: " . $conn->error;
}
} else {
// 没有找到全局计数值
echo "没有找到全局计数值";
}
// 返回响应
//echo "这是 POST 请求的响应";
} elseif ($_SERVER["REQUEST_METHOD"] === "GET") {
// 处理 GET 请求
if ($result->num_rows > 0) {
// 有数据返回
$rows = array();
while ($row = $result->fetch_assoc()) {
$rows[] = $row;
}
// 将查询结果转换为 JSON 格式发送回前端
echo json_encode($rows);
} else {
// 无数据返回
echo "没有数据";
}
// 返回响应
//echo "这是 GET 请求的响应";
} else {
// 不支持其他请求方法
http_response_code(405); // 返回“Method Not Allowed”状态码
echo "不支持的请求方法";
}
?>
+3 -3
View File
@@ -543,7 +543,7 @@ $(document).ready(function () {
//上传数据
function updateGlobalCount() {
$.ajax({
url: './kirara.php',
url: '/api/count/kirara',
method: 'POST',
async: false,
data: { localcount: thisTimeCounts },
@@ -566,7 +566,7 @@ function updateGlobalCount() {
//首次访问网站的时候,立即获取 globalCounts并刷新 (页面加载完成后立即执行)
document.addEventListener("DOMContentLoaded", function () {
$.ajax({
url: './kirara.php',
url: '/api/count/kirara',
method: 'GET',
dataType: 'json',
headers: {
@@ -592,7 +592,7 @@ function updateGlobalCount() {
// 定时轮询后端获取 globalCounts
setInterval(function () {
$.ajax({
url: './kirara.php',
url: '/api/count/kirara',
method: 'GET',
dataType: 'json',
headers: {
+1
View File
@@ -4,6 +4,7 @@
<head>
<meta charset="utf-8" />
<title id="doc-title">DaDaDa~</title>
<link rel="canonical" href="https://ys.chgr.cc/webs/KleeWeb/klee.html" />
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
<!-- 样式文件 | CSS file -->
-62
View File
@@ -1,62 +0,0 @@
<?php
//加载数据库信息
require_once('../config.php');
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 连接成功,可以进行数据库操作
$sql = "SELECT globalcount FROM ys WHERE name = 'klee'";
// 执行查询
$result = $conn->query($sql);
if ($_SERVER["REQUEST_METHOD"] === "POST") {
// 处理 POST 请求
//接收前端数据
$localcount = $_POST["localcount"];
//检查查询结果
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
$globalCount = $row['globalcount'];
// 将本地计数值加给全局计数
$globalCount += $localcount;
// 更新数据库中的全局计数值
$updateSql = "UPDATE ys SET globalcount = $globalCount WHERE name = 'klee';";
if ($conn->query($updateSql) === TRUE) {
// 更新成功
echo "更新成功";
} else {
// 更新失败
echo "更新失败: " . $conn->error;
}
} else {
// 没有找到全局计数值
echo "没有找到全局计数值";
}
// 返回响应
//echo "这是 POST 请求的响应";
} elseif ($_SERVER["REQUEST_METHOD"] === "GET") {
// 处理 GET 请求
if ($result->num_rows > 0) {
// 有数据返回
$rows = array();
while ($row = $result->fetch_assoc()) {
$rows[] = $row;
}
// 将查询结果转换为 JSON 格式发送回前端
echo json_encode($rows);
} else {
// 无数据返回
echo "没有数据";
}
// 返回响应
//echo "这是 GET 请求的响应";
} else {
// 不支持其他请求方法
http_response_code(405); // 返回“Method Not Allowed”状态码
echo "不支持的请求方法";
}
?>
+3 -3
View File
@@ -584,7 +584,7 @@ $(document).ready(function () {
//上传数据
function updateGlobalCount() {
$.ajax({
url: './klee.php',
url: '/api/count/klee',
method: 'POST',
async: false,
data: { localcount: thisTimeCounts },
@@ -607,7 +607,7 @@ function updateGlobalCount() {
//首次访问网站的时候,立即获取 globalCounts并刷新 (页面加载完成后立即执行)
document.addEventListener("DOMContentLoaded", function () {
$.ajax({
url: './klee.php',
url: '/api/count/klee',
method: 'GET',
dataType: 'json',
headers: {
@@ -633,7 +633,7 @@ document.addEventListener("DOMContentLoaded", function () {
// 定时轮询后端获取 globalCounts
setInterval(function () {
$.ajax({
url: './klee.php',
url: '/api/count/klee',
method: 'GET',
dataType: 'json',
headers: {
+1
View File
@@ -4,6 +4,7 @@
<head>
<meta charset="utf-8" />
<title id="doc-title">Nahida~</title>
<link rel="canonical" href="https://ys.chgr.cc/webs/NahidaWeb/nahida.html" />
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
<!-- 样式文件 | CSS file -->
-62
View File
@@ -1,62 +0,0 @@
<?php
//加载数据库信息
require_once('../config.php');
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 连接成功,可以进行数据库操作
$sql = "SELECT globalcount FROM ys WHERE name = 'nahida'";
// 执行查询
$result = $conn->query($sql);
if ($_SERVER["REQUEST_METHOD"] === "POST") {
// 处理 POST 请求
//接收前端数据
$localcount = $_POST["localcount"];
//检查查询结果
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
$globalCount = $row['globalcount'];
// 将本地计数值加给全局计数
$globalCount += $localcount;
// 更新数据库中的全局计数值
$updateSql = "UPDATE ys SET globalcount = $globalCount WHERE name = 'nahida';";
if ($conn->query($updateSql) === TRUE) {
// 更新成功
echo "更新成功";
} else {
// 更新失败
echo "更新失败: " . $conn->error;
}
} else {
// 没有找到全局计数值
echo "没有找到全局计数值";
}
// 返回响应
//echo "这是 POST 请求的响应";
} elseif ($_SERVER["REQUEST_METHOD"] === "GET") {
// 处理 GET 请求
if ($result->num_rows > 0) {
// 有数据返回
$rows = array();
while ($row = $result->fetch_assoc()) {
$rows[] = $row;
}
// 将查询结果转换为 JSON 格式发送回前端
echo json_encode($rows);
} else {
// 无数据返回
echo "没有数据";
}
// 返回响应
//echo "这是 GET 请求的响应";
} else {
// 不支持其他请求方法
http_response_code(405); // 返回“Method Not Allowed”状态码
echo "不支持的请求方法";
}
?>
+3 -3
View File
@@ -565,7 +565,7 @@ $(document).ready(function () {
//上传数据
function updateGlobalCount() {
$.ajax({
url: './nahida.php',
url: '/api/count/nahida',
method: 'POST',
async: false,
data: { localcount: thisTimeCounts },
@@ -588,7 +588,7 @@ function updateGlobalCount() {
//首次访问网站的时候,立即获取 globalCounts并刷新 (页面加载完成后立即执行)
document.addEventListener("DOMContentLoaded", function () {
$.ajax({
url: './nahida.php',
url: '/api/count/nahida',
method: 'GET',
dataType: 'json',
headers: {
@@ -614,7 +614,7 @@ document.addEventListener("DOMContentLoaded", function () {
// 定时轮询后端获取 globalCounts
setInterval(function () {
$.ajax({
url: './nahida.php',
url: '/api/count/nahida',
method: 'GET',
dataType: 'json',
headers: {
-7
View File
@@ -1,7 +0,0 @@
<?php
// 数据库连接信息
$servername = "mysql-38e967b6-mysql-mariadb.a.aivencloud.com:10755";
$username = "ys_zscgr_top";
$password = "AVNS_2xlZt0F7x2gaY4mKyFL";
$dbname = "ys_zscgr_top";
?>
View File