Compare commits

...
16 Commits
Author SHA1 Message Date
Developer d10dd53884 Refine auth, API proxy, and server routing 2026-05-18 15:16:46 +08:00
Developer 4ad1766f10 Add pm2 deployment config for accountbook 2026-05-18 15:15:06 +08:00
DeveloperandClaude Opus 4.6 38b56f387c fix: 修复统计页面收支趋势在跨月/周/年时显示无数据的问题
趋势统计不再受月份筛选器影响,始终显示全部历史数据。
分类明细继续保持月份筛选功能。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 10:52:14 +08:00
DeveloperandClaude Opus 4.6 6c5e7dc811 fix: 统计页面分类明细默认选中所有分类
- 添加 useEffect 在 categoryData 加载后自动选中所有分类
- 移除切换类型时清空选中的逻辑,新数据加载后自动全选

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 17:36:12 +08:00
DeveloperandClaude Opus 4.6 98aa39cb1c refactor: 代码质量优化与安全修复
- 删除根目录重复的 server.js (830行),统一使用模块化的 server/index.js
- 修复 ESLint 错误: 移除未使用变量、修复 const 声明、处理未使用参数
- 修复 React Hooks 依赖警告: 使用 useCallback 包装函数并添加正确依赖项
- SQL LIKE 查询添加特殊字符转义,防止注入风险
- 移除 CSS 中重复的 @keyframes spin 定义

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 10:49:12 +08:00
DeveloperandClaude Opus 4.6 63c97ab31a perf: 性能优化与代码质量改进
- 简化ToastProvider组件,移除未使用导入
- 简化Stats页面代码
- 添加React ESLint配置
- 添加数据库索引和API参数验证
- 清理重复文件server.js.backup
- 移除前端未使用的UI代码和复杂样式

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 16:43:03 +08:00
DeveloperandClaude Opus 4.6 3975bbed73 perf: 性能优化与代码质量改进
- 添加4个数据库索引提升查询性能
- 启用ESLint并配置React支持
- 修复ESLint错误(未使用的导入和状态)
- 简化Toast组件UI样式
- 移除重复文件(server.js.backup)
- 清理.gitignore中的.next目录

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 09:26:04 +08:00
Developer 1e478c2eaa Revert "feat: 移动端UI精致化优化"
This reverts commit 349760b60c.
2026-03-18 18:42:31 +08:00
DeveloperandClaude 349760b60c feat: 移动端UI精致化优化
- 添加页面过渡动画(淡入+滑动)
- 优化统计卡片视觉,添加渐变色和微动效
- 实现列表项左滑删除手势(编辑+删除按钮)
- 优化底部导航,缩小高度并添加点击波纹效果
- 改进空状态,添加插画和引导按钮

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-18 16:48:42 +08:00
DeveloperandClaude af3fcbea96 deps: 更新package-lock.json(安装swr依赖)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-18 16:33:47 +08:00
DeveloperandClaude 127f491167 feat: 前端UI标题栏优化与配置更新
- 更新.gitignore,添加frontend/.next/忽略
- 优化RecordModal、index、recurring、search、stats页面标题栏样式
- 新增frontend/lib/utils.js工具函数
- 更新useCategories.js钩子
- 添加代码优化计划文档

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-18 16:33:29 +08:00
Developer ad6387e49e docs: backup old server, update SPEC.md and add CHANGELOG 2026-03-18 16:20:06 +08:00
Developer c1c7eb006b chore: add ESLint, Prettier and Jest configuration 2026-03-18 16:19:03 +08:00
Developer 5dd00c310f feat: add error boundary and loading spinner components with SWR integration 2026-03-18 16:18:19 +08:00
Developer 1f51c330dd feat: add SWR for data fetching with optimistic updates 2026-03-18 16:16:04 +08:00
Developer bd99fc8e81 feat: add new server entry point and update package.json 2026-03-18 16:13:01 +08:00
148 changed files with 10276 additions and 1165 deletions
+15
View File
@@ -0,0 +1,15 @@
# 服务器配置
PORT=3501
NODE_ENV=development
# JWT 密钥(生产环境必须修改)
JWT_SECRET=your-secret-key-here
# 数据库路径
DB_PATH=./accountbook.db
# 日志级别
LOG_LEVEL=info
# 生产环境允许的域名(逗号分隔)
ALLOWED_ORIGINS=https://yourdomain.com,https://www.yourdomain.com
+7
View File
@@ -0,0 +1,7 @@
node_modules/
frontend/node_modules/
frontend/.next/
logs/
*.log
accountbook.db
.worktrees/
+42
View File
@@ -0,0 +1,42 @@
module.exports = {
root: true,
env: {
node: true,
es2021: true,
jest: true,
browser: true,
},
extends: [
'eslint:recommended',
'plugin:react/recommended',
'plugin:react-hooks/recommended',
],
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
ecmaFeatures: {
jsx: true,
},
},
settings: {
react: {
version: '18.2',
},
},
rules: {
'no-console': 'off',
'no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'prefer-const': 'error',
'no-var': 'error',
'react/react-in-jsx-scope': 'off',
'react/prop-types': 'off',
},
overrides: [
{
files: ['**/*.js'],
rules: {
'react/no-unknown-property': ['error', { ignore: ['class'] }],
},
},
],
};
+5
View File
@@ -4,6 +4,10 @@ node_modules/
# Database # Database
*.db *.db
*.sqlite *.sqlite
*.db-shm
*.db-wal
*.sqlite-shm
*.sqlite-wal
# Logs # Logs
*.log *.log
@@ -15,6 +19,7 @@ node_modules/
# Build output # Build output
dist/ dist/
build/ build/
frontend/.next/
# IDE # IDE
.idea/ .idea/
+9
View File
@@ -0,0 +1,9 @@
{
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "es5",
"printWidth": 100,
"bracketSpacing": true,
"arrowParens": "always"
}
+25
View File
@@ -0,0 +1,25 @@
# 更新日志
## [1.1.0] - 2026-03-18
### 新增
- 后端模块化重构,拆分单体 server.js
- 数据库迁移系统
- 统一错误处理机制
- 数据库索引优化
- SWR 数据获取和缓存
- 乐观更新支持
- 错误边界组件
- ESLint + Prettier 配置
- Jest 测试框架
### 优化
- API 错误响应格式统一
- 前端数据获取性能优化
- 代码质量和一致性检查
### 开发体验
- 新增 `npm run dev` 同时启动前后端
- 新增 `npm run migrate` 数据库迁移
- 新增 `npm run lint` 代码检查
- 新增 `npm test` 运行测试
+40
View File
@@ -203,3 +203,43 @@ npm run dev
``` ```
访问 http://你的IP:3500 访问 http://你的IP:3500
## 9. 项目结构
### 后端目录结构
```
server/
├── index.js # 入口文件
├── config/
│ └── database.js # 数据库配置
├── middleware/
│ ├── auth.js # 认证中间件
│ └── errorHandler.js # 错误处理
├── routes/
│ ├── auth.js # 认证路由
│ ├── records.js # 账目路由
│ ├── stats.js # 统计路由
│ ├── recurring.js # 周期性账单
│ ├── categories.js # 分类路由
│ ├── export.js # 导入导出
│ └── search.js # 搜索路由
├── utils/
│ └── validators.js # 验证函数
└── db/
├── migrations/ # 数据库迁移
└── migrate.js # 迁移脚本
```
### 前端优化
- 使用 SWR 进行数据获取和缓存
- 乐观更新支持
- 错误边界组件
- 统一加载状态
### 新增功能
- 数据库迁移系统 (`npm run migrate`)
- 结构化日志
- 统一错误处理
- API 请求验证
- 数据库索引优化
File diff suppressed because it is too large Load Diff
+21
View File
@@ -0,0 +1,21 @@
module.exports = {
apps: [
{
name: 'accountbook',
cwd: '/opt/accountbook',
script: 'npm',
args: 'start',
env: {
NODE_ENV: 'production',
PORT: '3500',
},
autorestart: true,
watch: false,
max_restarts: 10,
min_uptime: '10s',
out_file: '/opt/accountbook/logs/accountbook.out.log',
error_file: '/opt/accountbook/logs/accountbook.err.log',
merge_logs: true,
},
],
};
-1
View File
@@ -1 +0,0 @@
qLhTs8_S85rjOOeVUp07g
-72
View File
@@ -1,72 +0,0 @@
{
"polyfillFiles": [
"static/chunks/polyfills-42372ed130431b0a.js"
],
"devFiles": [],
"ampDevFiles": [],
"lowPriorityFiles": [
"static/qLhTs8_S85rjOOeVUp07g/_buildManifest.js",
"static/qLhTs8_S85rjOOeVUp07g/_ssgManifest.js"
],
"rootMainFiles": [],
"pages": {
"/": [
"static/chunks/webpack-8fa1640cc84ba8fe.js",
"static/chunks/framework-64ad27b21261a9ce.js",
"static/chunks/main-aefbcb23b1606112.js",
"static/chunks/pages/index-9134a1c15f8e7e73.js"
],
"/_app": [
"static/chunks/webpack-8fa1640cc84ba8fe.js",
"static/chunks/framework-64ad27b21261a9ce.js",
"static/chunks/main-aefbcb23b1606112.js",
"static/css/a115fcea0d441c48.css",
"static/chunks/pages/_app-be10d8e0e3953b07.js"
],
"/_error": [
"static/chunks/webpack-8fa1640cc84ba8fe.js",
"static/chunks/framework-64ad27b21261a9ce.js",
"static/chunks/main-aefbcb23b1606112.js",
"static/chunks/pages/_error-7a92967bea80186d.js"
],
"/categories": [
"static/chunks/webpack-8fa1640cc84ba8fe.js",
"static/chunks/framework-64ad27b21261a9ce.js",
"static/chunks/main-aefbcb23b1606112.js",
"static/chunks/pages/categories-53ccc6325e13ffd1.js"
],
"/login": [
"static/chunks/webpack-8fa1640cc84ba8fe.js",
"static/chunks/framework-64ad27b21261a9ce.js",
"static/chunks/main-aefbcb23b1606112.js",
"static/chunks/pages/login-f50164aa2a6805b4.js"
],
"/recurring": [
"static/chunks/webpack-8fa1640cc84ba8fe.js",
"static/chunks/framework-64ad27b21261a9ce.js",
"static/chunks/main-aefbcb23b1606112.js",
"static/chunks/pages/recurring-560011bee3956d16.js"
],
"/search": [
"static/chunks/webpack-8fa1640cc84ba8fe.js",
"static/chunks/framework-64ad27b21261a9ce.js",
"static/chunks/main-aefbcb23b1606112.js",
"static/chunks/pages/search-3f7f0eb3485675fc.js"
],
"/settings": [
"static/chunks/webpack-8fa1640cc84ba8fe.js",
"static/chunks/framework-64ad27b21261a9ce.js",
"static/chunks/main-aefbcb23b1606112.js",
"static/chunks/pages/settings-bb02e29d5162e9fa.js"
],
"/stats": [
"static/chunks/webpack-8fa1640cc84ba8fe.js",
"static/chunks/framework-64ad27b21261a9ce.js",
"static/chunks/main-aefbcb23b1606112.js",
"static/chunks/ee8b1517-5dfbbb6838544537.js",
"static/chunks/925-ca8bea7fb2a62185.js",
"static/chunks/pages/stats-656db72deae83243.js"
]
},
"ampFirstPages": []
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
-1
View File
@@ -1 +0,0 @@
{"version":1,"hasExportPathMap":false,"exportTrailingSlash":false,"isNextImageImported":false}
-1
View File
@@ -1 +0,0 @@
{"version":1,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[16,32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":60,"formats":["image/webp"],"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"inline","remotePatterns":[],"unoptimized":false,"sizes":[640,750,828,1080,1200,1920,2048,3840,16,32,48,64,96,128,256,384]}}
@@ -1 +0,0 @@
{"version":1,"files":["../node_modules/styled-jsx/index.js","../node_modules/styled-jsx/package.json","../node_modules/styled-jsx/dist/index/index.js","../node_modules/react/package.json","../node_modules/react/index.js","../node_modules/client-only/package.json","../node_modules/react/cjs/react.production.min.js","../node_modules/client-only/index.js","../node_modules/styled-jsx/style.js","../node_modules/next/dist/compiled/next-server/server.runtime.prod.js","../node_modules/next/package.json","../node_modules/next/dist/server/body-streams.js","../node_modules/next/dist/lib/constants.js","../node_modules/next/dist/lib/picocolors.js","../node_modules/next/dist/shared/lib/constants.js","../node_modules/next/dist/server/web/utils.js","../node_modules/next/dist/client/components/app-router-headers.js","../node_modules/next/dist/server/lib/trace/tracer.js","../node_modules/next/dist/server/lib/trace/constants.js","../node_modules/next/dist/shared/lib/modern-browserslist-target.js","../node_modules/next/dist/compiled/ws/package.json","../node_modules/next/dist/compiled/node-html-parser/package.json","../node_modules/next/dist/compiled/lru-cache/package.json","../node_modules/next/dist/shared/lib/runtime-config.external.js","../node_modules/@swc/helpers/_/_interop_require_default/package.json","../node_modules/next/dist/compiled/ws/index.js","../node_modules/next/dist/compiled/node-html-parser/index.js","../node_modules/next/dist/compiled/lru-cache/index.js","../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../node_modules/@swc/helpers/package.json","../node_modules/next/dist/compiled/jsonwebtoken/package.json","../node_modules/@swc/helpers/cjs/_interop_require_default.cjs","../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../node_modules/next/dist/compiled/jsonwebtoken/index.js","../node_modules/next/dist/client/components/async-local-storage.js","../node_modules/next/dist/shared/lib/error-source.js","../node_modules/next/dist/compiled/debug/package.json","../node_modules/next/dist/lib/semver-noop.js","../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../node_modules/next/dist/compiled/debug/index.js","../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/amp-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/app-router-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/entrypoints.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/head-manager-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/hooks-client-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/html-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/image-config-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/loadable-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/loadable.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/router-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/server-inserted-html.js","../node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/amp-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/app-router-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/entrypoints.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/head-manager-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/hooks-client-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/html-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/image-config-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/loadable-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/loadable.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/router-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/server-inserted-html.js","../node_modules/next/dist/server/future/route-modules/pages/module.compiled.js"]}
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
{"type": "commonjs"}
-1
View File
@@ -1 +0,0 @@
{"version":4,"routes":{},"dynamicRoutes":{},"preview":{"previewModeId":"48b81c455a5b7cce3d806d7026b56964","previewModeSigningKey":"66b57b635f1afb73fff9bf508ff8dbef304766f3a4e41b31e0ffec2f72860915","previewModeEncryptionKey":"38fba3ca573e476136b9b934594a1c12dd88e6e11b789ed305cffe9a0b2c6111"},"notFoundRoutes":[]}
@@ -1 +0,0 @@
{}
@@ -1 +0,0 @@
{"version":1,"config":{"env":{},"webpack":null,"eslint":{"ignoreDuringBuilds":false},"typescript":{"ignoreBuildErrors":false,"tsconfigPath":"tsconfig.json"},"distDir":".next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.js","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"analyticsId":"","images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[16,32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":60,"formats":["image/webp"],"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"inline","remotePatterns":[],"unoptimized":false},"devIndicators":{"buildActivity":true,"buildActivityPosition":"bottom-right"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"amp":{"canonicalBase":""},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"optimizeFonts":true,"excludeDefaultMomentLocales":true,"serverRuntimeConfig":{},"publicRuntimeConfig":{},"reactProductionProfiling":false,"reactStrictMode":null,"httpAgentOptions":{"keepAlive":true},"outputFileTracing":true,"staticPageGenerationTimeout":60,"swcMinify":true,"modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"experimental":{"multiZoneDraftMode":false,"prerenderEarlyExit":false,"serverMinification":true,"serverSourceMaps":false,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","middlewarePrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":3,"memoryBasedWorkersCount":false,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"outputFileTracingRoot":"/opt/accountbook/frontend","swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"adjustFontFallbacks":false,"adjustFontFallbacksWithSizeAdjust":false,"typedRoutes":false,"instrumentationHook":false,"bundlePagesExternals":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"missingSuspenseWithCSRBailout":true,"optimizeServerReact":true,"useEarlyImport":false,"staleTimes":{"dynamic":30,"static":300},"optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"configFileName":"next.config.js","_originalRewrites":{"beforeFiles":[],"afterFiles":[{"source":"/api/:path*","destination":"http://localhost:3501/api/:path*"}],"fallback":[]}},"appDir":"/opt/accountbook/frontend","relativeAppDir":"","files":[".next/routes-manifest.json",".next/server/pages-manifest.json",".next/build-manifest.json",".next/prerender-manifest.json",".next/server/middleware-manifest.json",".next/server/middleware-build-manifest.js",".next/server/middleware-react-loadable-manifest.js",".next/react-loadable-manifest.json",".next/server/font-manifest.json",".next/BUILD_ID",".next/server/next-font-manifest.js",".next/server/next-font-manifest.json"],"ignore":["node_modules/next/dist/compiled/@ampproject/toolbox-optimizer/**/*"]}
-1
View File
@@ -1 +0,0 @@
{"version":3,"pages404":true,"caseSensitive":false,"basePath":"","redirects":[{"source":"/:path+/","destination":"/:path+","internal":true,"statusCode":308,"regex":"^(?:/((?:[^/]+?)(?:/(?:[^/]+?))*))/$"}],"headers":[],"dynamicRoutes":[],"staticRoutes":[{"page":"/","regex":"^/(?:/)?$","routeKeys":{},"namedRegex":"^/(?:/)?$"},{"page":"/categories","regex":"^/categories(?:/)?$","routeKeys":{},"namedRegex":"^/categories(?:/)?$"},{"page":"/login","regex":"^/login(?:/)?$","routeKeys":{},"namedRegex":"^/login(?:/)?$"},{"page":"/recurring","regex":"^/recurring(?:/)?$","routeKeys":{},"namedRegex":"^/recurring(?:/)?$"},{"page":"/search","regex":"^/search(?:/)?$","routeKeys":{},"namedRegex":"^/search(?:/)?$"},{"page":"/settings","regex":"^/settings(?:/)?$","routeKeys":{},"namedRegex":"^/settings(?:/)?$"},{"page":"/stats","regex":"^/stats(?:/)?$","routeKeys":{},"namedRegex":"^/stats(?:/)?$"}],"dataRoutes":[],"rsc":{"header":"RSC","varyHeader":"RSC, Next-Router-State-Tree, Next-Router-Prefetch","prefetchHeader":"Next-Router-Prefetch","didPostponeHeader":"x-nextjs-postponed","contentTypeHeader":"text/x-component","suffix":".rsc","prefetchSuffix":".prefetch.rsc"},"rewrites":[{"source":"/api/:path*","destination":"http://localhost:3501/api/:path*","regex":"^/api(?:/((?:[^/]+?)(?:/(?:[^/]+?))*))?(?:/)?$"}]}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
[]
-1
View File
@@ -1 +0,0 @@
[]
@@ -1 +0,0 @@
{"version":1,"functions":{}}
@@ -1 +0,0 @@
self.__INTERCEPTION_ROUTE_REWRITE_MANIFEST="[]";
@@ -1 +0,0 @@
self.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],ampDevFiles:[],lowPriorityFiles:[],rootMainFiles:[],pages:{"/":["static/chunks/webpack-8fa1640cc84ba8fe.js","static/chunks/framework-64ad27b21261a9ce.js","static/chunks/main-aefbcb23b1606112.js","static/chunks/pages/index-9134a1c15f8e7e73.js"],"/_app":["static/chunks/webpack-8fa1640cc84ba8fe.js","static/chunks/framework-64ad27b21261a9ce.js","static/chunks/main-aefbcb23b1606112.js","static/css/a115fcea0d441c48.css","static/chunks/pages/_app-be10d8e0e3953b07.js"],"/_error":["static/chunks/webpack-8fa1640cc84ba8fe.js","static/chunks/framework-64ad27b21261a9ce.js","static/chunks/main-aefbcb23b1606112.js","static/chunks/pages/_error-7a92967bea80186d.js"],"/categories":["static/chunks/webpack-8fa1640cc84ba8fe.js","static/chunks/framework-64ad27b21261a9ce.js","static/chunks/main-aefbcb23b1606112.js","static/chunks/pages/categories-53ccc6325e13ffd1.js"],"/login":["static/chunks/webpack-8fa1640cc84ba8fe.js","static/chunks/framework-64ad27b21261a9ce.js","static/chunks/main-aefbcb23b1606112.js","static/chunks/pages/login-f50164aa2a6805b4.js"],"/recurring":["static/chunks/webpack-8fa1640cc84ba8fe.js","static/chunks/framework-64ad27b21261a9ce.js","static/chunks/main-aefbcb23b1606112.js","static/chunks/pages/recurring-560011bee3956d16.js"],"/search":["static/chunks/webpack-8fa1640cc84ba8fe.js","static/chunks/framework-64ad27b21261a9ce.js","static/chunks/main-aefbcb23b1606112.js","static/chunks/pages/search-3f7f0eb3485675fc.js"],"/settings":["static/chunks/webpack-8fa1640cc84ba8fe.js","static/chunks/framework-64ad27b21261a9ce.js","static/chunks/main-aefbcb23b1606112.js","static/chunks/pages/settings-bb02e29d5162e9fa.js"],"/stats":["static/chunks/webpack-8fa1640cc84ba8fe.js","static/chunks/framework-64ad27b21261a9ce.js","static/chunks/main-aefbcb23b1606112.js","static/chunks/ee8b1517-5dfbbb6838544537.js","static/chunks/925-ca8bea7fb2a62185.js","static/chunks/pages/stats-656db72deae83243.js"]},ampFirstPages:[]},self.__BUILD_MANIFEST.lowPriorityFiles=["/static/"+process.env.__NEXT_BUILD_ID+"/_buildManifest.js",,"/static/"+process.env.__NEXT_BUILD_ID+"/_ssgManifest.js"];
@@ -1,6 +0,0 @@
{
"version": 3,
"middleware": {},
"functions": {},
"sortedMiddleware": []
}
@@ -1 +0,0 @@
self.__REACT_LOADABLE_MANIFEST="{}";
@@ -1 +0,0 @@
self.__NEXT_FONT_MANIFEST='{"pages":{},"app":{},"appUsingSizeAdjust":false,"pagesUsingSizeAdjust":false}';
@@ -1 +0,0 @@
{"pages":{},"app":{},"appUsingSizeAdjust":false,"pagesUsingSizeAdjust":false}
@@ -1 +0,0 @@
{"/_app":"pages/_app.js","/_error":"pages/_error.js","/categories":"pages/categories.html","/":"pages/index.html","/login":"pages/login.html","/recurring":"pages/recurring.html","/search":"pages/search.html","/settings":"pages/settings.html","/stats":"pages/stats.html","/_document":"pages/_document.js","/404":"pages/404.html"}
-1
View File
@@ -1 +0,0 @@
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><link rel="preload" href="/_next/static/css/a115fcea0d441c48.css" as="style"/><link rel="stylesheet" href="/_next/static/css/a115fcea0d441c48.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-8fa1640cc84ba8fe.js" defer=""></script><script src="/_next/static/chunks/framework-64ad27b21261a9ce.js" defer=""></script><script src="/_next/static/chunks/main-aefbcb23b1606112.js" defer=""></script><script src="/_next/static/chunks/pages/_app-be10d8e0e3953b07.js" defer=""></script><script src="/_next/static/chunks/pages/_error-7a92967bea80186d.js" defer=""></script><script src="/_next/static/qLhTs8_S85rjOOeVUp07g/_buildManifest.js" defer=""></script><script src="/_next/static/qLhTs8_S85rjOOeVUp07g/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div><div class="toast-stack" aria-live="polite" aria-atomic="true"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"qLhTs8_S85rjOOeVUp07g","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
-1
View File
@@ -1 +0,0 @@
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>500: Internal Server Error</title><meta name="next-head-count" content="3"/><link rel="preload" href="/_next/static/css/a115fcea0d441c48.css" as="style"/><link rel="stylesheet" href="/_next/static/css/a115fcea0d441c48.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-8fa1640cc84ba8fe.js" defer=""></script><script src="/_next/static/chunks/framework-64ad27b21261a9ce.js" defer=""></script><script src="/_next/static/chunks/main-aefbcb23b1606112.js" defer=""></script><script src="/_next/static/chunks/pages/_app-be10d8e0e3953b07.js" defer=""></script><script src="/_next/static/chunks/pages/_error-7a92967bea80186d.js" defer=""></script><script src="/_next/static/qLhTs8_S85rjOOeVUp07g/_buildManifest.js" defer=""></script><script src="/_next/static/qLhTs8_S85rjOOeVUp07g/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div><div class="toast-stack" aria-live="polite" aria-atomic="true"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"qLhTs8_S85rjOOeVUp07g","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
{"version":1,"files":["../../../node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/react/cjs/react.development.js","../../../node_modules/react/cjs/react.production.min.js","../../../node_modules/react/index.js","../../../node_modules/react/jsx-runtime.js","../../../node_modules/react/package.json","../../../package.json","../../../pages/_app.js","../../package.json","../webpack-runtime.js"]}
-1
View File
@@ -1 +0,0 @@
"use strict";(()=>{var e={};e.id=660,e.ids=[660],e.modules={2785:e=>{e.exports=require("next/dist/compiled/next-server/pages.runtime.prod.js")},6689:e=>{e.exports=require("react")},997:e=>{e.exports=require("react/jsx-runtime")},5315:e=>{e.exports=require("path")}};var r=require("../webpack-runtime.js");r.C(e);var s=e=>r(r.s=e),t=r.X(0,[899],()=>s(2899));module.exports=t})();
@@ -1 +0,0 @@
{"version":1,"files":["../../../node_modules/client-only/index.js","../../../node_modules/client-only/package.json","../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../node_modules/next/dist/compiled/next-server/pages.runtime.prod.js","../../../node_modules/next/dist/compiled/node-html-parser/index.js","../../../node_modules/next/dist/compiled/node-html-parser/package.json","../../../node_modules/next/dist/lib/semver-noop.js","../../../node_modules/next/dist/pages/_document.js","../../../node_modules/next/dist/server/lib/trace/constants.js","../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../node_modules/next/package.json","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.min.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.production.min.js","../../../node_modules/react-dom/package.json","../../../node_modules/react-dom/server.browser.js","../../../node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/react/cjs/react.development.js","../../../node_modules/react/cjs/react.production.min.js","../../../node_modules/react/index.js","../../../node_modules/react/jsx-runtime.js","../../../node_modules/react/package.json","../../../node_modules/styled-jsx/dist/index/index.js","../../../node_modules/styled-jsx/index.js","../../../node_modules/styled-jsx/package.json","../../../package.json","../../package.json","../chunks/899.js","../webpack-runtime.js"]}
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
{"version":1,"files":["../../../node_modules/client-only/index.js","../../../node_modules/client-only/package.json","../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../node_modules/next/dist/compiled/next-server/pages.runtime.prod.js","../../../node_modules/next/dist/compiled/node-html-parser/index.js","../../../node_modules/next/dist/compiled/node-html-parser/package.json","../../../node_modules/next/dist/lib/semver-noop.js","../../../node_modules/next/dist/server/lib/trace/constants.js","../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../node_modules/next/package.json","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.min.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.production.min.js","../../../node_modules/react-dom/package.json","../../../node_modules/react-dom/server.browser.js","../../../node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/react/cjs/react.development.js","../../../node_modules/react/cjs/react.production.min.js","../../../node_modules/react/index.js","../../../node_modules/react/jsx-runtime.js","../../../node_modules/react/package.json","../../../node_modules/styled-jsx/dist/index/index.js","../../../node_modules/styled-jsx/index.js","../../../node_modules/styled-jsx/package.json","../../package.json","../chunks/899.js","../webpack-runtime.js"]}
@@ -1 +0,0 @@
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/css/a115fcea0d441c48.css" as="style"/><link rel="stylesheet" href="/_next/static/css/a115fcea0d441c48.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-8fa1640cc84ba8fe.js" defer=""></script><script src="/_next/static/chunks/framework-64ad27b21261a9ce.js" defer=""></script><script src="/_next/static/chunks/main-aefbcb23b1606112.js" defer=""></script><script src="/_next/static/chunks/pages/_app-be10d8e0e3953b07.js" defer=""></script><script src="/_next/static/chunks/pages/categories-53ccc6325e13ffd1.js" defer=""></script><script src="/_next/static/qLhTs8_S85rjOOeVUp07g/_buildManifest.js" defer=""></script><script src="/_next/static/qLhTs8_S85rjOOeVUp07g/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div class="app-shell"><header class="app-header app-header--compact app-header--with-content app-header--with-actions"><div class="app-shell__container app-header__inner"><div class="app-header__main"><div class="app-header__text"><h1>分类</h1><p>整理常用分类与图标</p></div></div><div class="app-header__actions"><button type="button" class="icon-button" aria-label="设置"><svg viewBox="0 0 24 24" width="18" height="18" class="" aria-hidden="true" role="presentation" fill="none"><path d="M12 8.5A3.5 3.5 0 1 0 12 15.5A3.5 3.5 0 1 0 12 8.5Z" fill="none" stroke="currentColor" stroke-width="1.8"></path><path d="M19.4 15a1 1 0 0 0 .2 1.1l.1.1a2 2 0 0 1-2.8 2.8l-.1-.1a1 1 0 0 0-1.1-.2 1 1 0 0 0-.6.9V20a2 2 0 0 1-4 0v-.2a1 1 0 0 0-.6-.9 1 1 0 0 0-1.1.2l-.1.1a2 2 0 1 1-2.8-2.8l.1-.1a1 1 0 0 0 .2-1.1 1 1 0 0 0-.9-.6H4a2 2 0 0 1 0-4h.2a1 1 0 0 0 .9-.6 1 1 0 0 0-.2-1.1l-.1-.1a2 2 0 1 1 2.8-2.8l.1.1a1 1 0 0 0 1.1.2 1 1 0 0 0 .6-.9V4a2 2 0 0 1 4 0v.2a1 1 0 0 0 .6.9 1 1 0 0 0 1.1-.2l.1-.1a2 2 0 1 1 2.8 2.8l-.1.1a1 1 0 0 0-.2 1.1 1 1 0 0 0 .9.6H20a2 2 0 0 1 0 4h-.2a1 1 0 0 0-.4 1Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></button></div></div></header><main class="app-content"><div class="app-shell__container app-content__inner"><div class="card loading-state">加载中...</div></div></main><nav class="bottom-nav" aria-label="主导航"><div class="app-shell__container bottom-nav__inner"><button type="button" class="bottom-nav__item"><svg viewBox="0 0 24 24" width="20" height="20" class="" aria-hidden="true" role="presentation" fill="none"><path d="M3 10.5 12 3l9 7.5V20a1 1 0 0 1-1 1h-5.5v-6h-5v6H4a1 1 0 0 1-1-1v-9.5Z" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path></svg><span>首页</span></button><button type="button" class="bottom-nav__item"><svg viewBox="0 0 24 24" width="20" height="20" class="" aria-hidden="true" role="presentation" fill="none"><path d="M4 20h16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path><path d="M7 16v-4" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path><path d="M12 16V8" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path><path d="M17 16v-7" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path></svg><span>统计</span></button><button type="button" class="bottom-nav__item"><svg viewBox="0 0 24 24" width="20" height="20" class="" aria-hidden="true" role="presentation" fill="none"><path d="M17 3l4 4-4 4" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path><path d="M3 7h18" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path><path d="M7 21l-4-4 4-4" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path><path d="M21 17H3" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path></svg><span>周期</span></button><button type="button" class="bottom-nav__item is-active" aria-current="page"><svg viewBox="0 0 24 24" width="20" height="20" class="" aria-hidden="true" role="presentation" fill="none"><path d="M11 4H5a2 2 0 0 0-2 2v6l8.5 8.5a2.1 2.1 0 0 0 3 0l6-6a2.1 2.1 0 0 0 0-3L12 4Z" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"></path><circle cx="7.5" cy="8.5" r="1.2" fill="currentColor"></circle></svg><span>分类</span></button></div></nav></div><div class="toast-stack" aria-live="polite" aria-atomic="true"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/categories","query":{},"buildId":"qLhTs8_S85rjOOeVUp07g","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +0,0 @@
{"version":1,"files":["../webpack-runtime.js","../chunks/899.js","../chunks/342.js","../chunks/261.js","../../../package.json"]}
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
{"version":1,"files":["../../../node_modules/client-only/index.js","../../../node_modules/client-only/package.json","../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../node_modules/next/dist/compiled/next-server/pages.runtime.prod.js","../../../node_modules/next/dist/compiled/node-html-parser/index.js","../../../node_modules/next/dist/compiled/node-html-parser/package.json","../../../node_modules/next/dist/lib/semver-noop.js","../../../node_modules/next/dist/server/lib/trace/constants.js","../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../node_modules/next/package.json","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.min.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.production.min.js","../../../node_modules/react-dom/cjs/react-dom.development.js","../../../node_modules/react-dom/cjs/react-dom.production.min.js","../../../node_modules/react-dom/index.js","../../../node_modules/react-dom/package.json","../../../node_modules/react-dom/server.browser.js","../../../node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/react/cjs/react.development.js","../../../node_modules/react/cjs/react.production.min.js","../../../node_modules/react/index.js","../../../node_modules/react/jsx-runtime.js","../../../node_modules/react/package.json","../../../node_modules/scheduler/cjs/scheduler.development.js","../../../node_modules/scheduler/cjs/scheduler.production.min.js","../../../node_modules/scheduler/index.js","../../../node_modules/scheduler/package.json","../../../node_modules/styled-jsx/dist/index/index.js","../../../node_modules/styled-jsx/index.js","../../../node_modules/styled-jsx/package.json","../../../package.json","../../package.json","../chunks/261.js","../chunks/342.js","../chunks/899.js","../webpack-runtime.js"]}
-1
View File
@@ -1 +0,0 @@
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/css/a115fcea0d441c48.css" as="style"/><link rel="stylesheet" href="/_next/static/css/a115fcea0d441c48.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-8fa1640cc84ba8fe.js" defer=""></script><script src="/_next/static/chunks/framework-64ad27b21261a9ce.js" defer=""></script><script src="/_next/static/chunks/main-aefbcb23b1606112.js" defer=""></script><script src="/_next/static/chunks/pages/_app-be10d8e0e3953b07.js" defer=""></script><script src="/_next/static/chunks/pages/login-f50164aa2a6805b4.js" defer=""></script><script src="/_next/static/qLhTs8_S85rjOOeVUp07g/_buildManifest.js" defer=""></script><script src="/_next/static/qLhTs8_S85rjOOeVUp07g/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div class="app-shell app-shell--standalone"><header class="app-header app-header--compact app-header--with-content"><div class="app-shell__container app-header__inner"><div class="app-header__main"><div class="app-header__text"><h1>记账本</h1><p>随时记录每一笔收支</p></div></div></div></header><main class="app-content auth-layout"><div class="app-shell__container app-content__inner"><div class="auth-page"><div class="auth-card auth-card--refresh"><div class="auth-logo auth-logo--refresh"><div class="auth-logo__mark" aria-hidden="true"><svg viewBox="0 0 24 24" width="24" height="24" class="" aria-hidden="true" role="presentation" fill="none"><path d="M4 20h16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path><path d="M7 16v-4" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path><path d="M12 16V8" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path><path d="M17 16v-7" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path></svg></div><h1>欢迎回来</h1><p>登录后继续记录每一笔收支</p></div><div class="auth-switch" role="tablist" aria-label="登录或注册"><button type="button" class="is-active">登录</button><button type="button" class="">注册</button></div><form class="auth-form"><div class="form-group"><label for="username">用户名</label><input id="username" type="text" placeholder="3-20个字符" required="" value=""/></div><div class="form-group"><label for="password">密码</label><input id="password" type="password" placeholder="6-20个字符" required="" value=""/></div><button type="submit" class="btn btn-primary">登录</button></form></div></div></div></main></div><div class="toast-stack" aria-live="polite" aria-atomic="true"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/login","query":{},"buildId":"qLhTs8_S85rjOOeVUp07g","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +0,0 @@
{"version":1,"files":["../webpack-runtime.js","../chunks/899.js","../chunks/342.js","../chunks/261.js","../../../package.json"]}
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
{"version":1,"files":["../webpack-runtime.js","../chunks/899.js","../chunks/342.js","../chunks/261.js","../../../package.json"]}
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
{"version":1,"files":["../webpack-runtime.js","../chunks/899.js","../chunks/342.js","../chunks/261.js","../../../package.json"]}
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
{"version":1,"files":["../webpack-runtime.js","../chunks/899.js","../chunks/342.js","../chunks/261.js","../../../package.json"]}
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
{"version":1,"files":["../webpack-runtime.js","../chunks/899.js","../chunks/342.js","../chunks/261.js","../../../package.json"]}
-1
View File
@@ -1 +0,0 @@
(()=>{"use strict";var e={},r={};function o(t){var a=r[t];if(void 0!==a)return a.exports;var n=r[t]={exports:{}},u=!0;try{e[t](n,n.exports,o),u=!1}finally{u&&delete r[t]}return n.exports}o.m=e,(()=>{var e="function"==typeof Symbol?Symbol("webpack queues"):"__webpack_queues__",r="function"==typeof Symbol?Symbol("webpack exports"):"__webpack_exports__",t="function"==typeof Symbol?Symbol("webpack error"):"__webpack_error__",a=e=>{e&&e.d<1&&(e.d=1,e.forEach(e=>e.r--),e.forEach(e=>e.r--?e.r++:e()))},n=o=>o.map(o=>{if(null!==o&&"object"==typeof o){if(o[e])return o;if(o.then){var n=[];n.d=0,o.then(e=>{u[r]=e,a(n)},e=>{u[t]=e,a(n)});var u={};return u[e]=e=>e(n),u}}var p={};return p[e]=e=>{},p[r]=o,p});o.a=(o,u,p)=>{p&&((f=[]).d=-1);var f,i,l,d,s=new Set,c=o.exports,b=new Promise((e,r)=>{d=r,l=e});b[r]=c,b[e]=e=>(f&&e(f),s.forEach(e),b.catch(e=>{})),o.exports=b,u(o=>{i=n(o);var a,u=()=>i.map(e=>{if(e[t])throw e[t];return e[r]}),p=new Promise(r=>{(a=()=>r(u)).r=0;var o=e=>e!==f&&!s.has(e)&&(s.add(e),e&&!e.d&&(a.r++,e.push(a)));i.map(r=>r[e](o))});return a.r?p:u()},e=>(e?d(b[t]=e):l(c),a(f))),f&&f.d<0&&(f.d=0)}})(),o.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return o.d(r,{a:r}),r},o.d=(e,r)=>{for(var t in r)o.o(r,t)&&!o.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},o.f={},o.e=e=>Promise.all(Object.keys(o.f).reduce((r,t)=>(o.f[t](e,r),r),[])),o.u=e=>""+e+".js",o.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.X=(e,r,t)=>{var a=r;t||(r=e,t=()=>o(o.s=a)),r.map(o.e,o);var n=t();return void 0===n?e:n},(()=>{var e={658:1},r=r=>{var t=r.modules,a=r.ids,n=r.runtime;for(var u in t)o.o(t,u)&&(o.m[u]=t[u]);n&&n(o);for(var p=0;p<a.length;p++)e[a[p]]=1};o.f.require=(t,a)=>{e[t]||(658!=t?r(require("./chunks/"+o.u(t))):e[t]=1)},module.exports=o,o.C=r})()})();
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More