diff --git a/frontend/README.md b/frontend/README.md
index 986524d..5da2209 100644
--- a/frontend/README.md
+++ b/frontend/README.md
@@ -1 +1,13 @@
# Frontend
+假设你是一位经验丰富的前端开发人员,精通jquery的使用的前端项目的架构设计搭建,协助我完成资产管理的管理系统,先完成以下需求:
+1、设计一个项目架构。
+2、登录页面,输入账号密码登录,只有登录业务,没有注册和找回密码。
+3、主页分为侧边栏、顶部导航、右边内容区。
+4、基于 localStorage 的令牌验证,未登录自动跳转到登录页。
+5、常用组件:
+5.1、加载动画:全局加载状态提示。
+5.2、消息提示:支持成功 / 错误 / 信息三种类型,自动消失。
+5.3、菜单组件:支持多级菜单、折叠展开、激活状态。
+5.4、页面管理:统一的页面加载机制,支持错误处理和重试功能。
+6、扩展能力:尽量多的配置操作。
+7、样式需求:该项目为金融性质项目,页面风格样式需要偏向暗夜模式。
\ No newline at end of file
diff --git a/frontend/asset-assistant-system/.gitignore b/frontend/asset-assistant-system/.gitignore
new file mode 100644
index 0000000..0a1d6ba
--- /dev/null
+++ b/frontend/asset-assistant-system/.gitignore
@@ -0,0 +1,22 @@
+# 依赖
+node_modules/
+.pnp/
+.pnp.js
+
+# 构建产物
+dist/
+
+# 日志
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# 编辑器配置
+.idea/
+.vscode/
+*.swp
+*.swo
+
+# 操作系统文件
+.DS_Store
+Thumbs.db
\ No newline at end of file
diff --git a/frontend/asset-assistant-system/index.html b/frontend/asset-assistant-system/index.html
new file mode 100644
index 0000000..4e45696
--- /dev/null
+++ b/frontend/asset-assistant-system/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+ 资产辅助系统
+
+
+
+
+ 正在跳转到登录页... 如果没有自动跳转,请点击这里
+
+
\ No newline at end of file
diff --git a/frontend/asset-assistant-system/package.json b/frontend/asset-assistant-system/package.json
new file mode 100644
index 0000000..663743e
--- /dev/null
+++ b/frontend/asset-assistant-system/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "asset-assistant-system",
+ "version": "1.0.0",
+ "description": "资产辅助管理系统",
+ "main": "index.html",
+ "scripts": {
+ "dev": "serve",
+ "build": "echo '构建脚本待实现'",
+ "test": "echo '测试脚本待实现'"
+ },
+ "keywords": ["asset", "management", "system"],
+ "author": "",
+ "license": "MIT",
+ "devDependencies": {
+ "serve": "^14.2.3"
+ }
+}
\ No newline at end of file
diff --git a/frontend/asset-assistant-system/src/assets/css/common.css b/frontend/asset-assistant-system/src/assets/css/common.css
new file mode 100644
index 0000000..30f6d50
--- /dev/null
+++ b/frontend/asset-assistant-system/src/assets/css/common.css
@@ -0,0 +1,14 @@
+/* 通用样式 */
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+ font-family: 'Arial', sans-serif;
+}
+
+.container {
+ width: 100%;
+ max-width: 1200px;
+ margin: 0 auto;
+ padding: 0 20px;
+}
diff --git a/frontend/asset-assistant-system/src/assets/css/dark-theme.css b/frontend/asset-assistant-system/src/assets/css/dark-theme.css
new file mode 100644
index 0000000..2db1143
--- /dev/null
+++ b/frontend/asset-assistant-system/src/assets/css/dark-theme.css
@@ -0,0 +1,5 @@
+/* 暗夜模式主题样式 */
+body.dark-theme {
+ background-color: #1e1e1e;
+ color: #f5f5f5;
+}
diff --git a/frontend/asset-assistant-system/src/assets/js/app.js b/frontend/asset-assistant-system/src/assets/js/app.js
new file mode 100644
index 0000000..36bf8bf
--- /dev/null
+++ b/frontend/asset-assistant-system/src/assets/js/app.js
@@ -0,0 +1,48 @@
+/* 应用入口 */
+import { renderHeader } from './components/header.js';
+import { renderSidebar } from './components/sidebar.js';
+import { Auth } from './core/auth.js';
+import { Router } from './core/router.js';
+import { themeConfig } from './config/theme.js';
+
+// 初始化应用
+function initApp() {
+ // 检查登录状态
+ if (!Auth.isLogin() && window.location.pathname.indexOf('login.html') === -1) {
+ Router.push('/login.html');
+ return;
+ }
+
+ // 初始化主题
+ initTheme();
+
+ // 渲染公共组件(非登录页)
+ if (window.location.pathname.indexOf('login.html') === -1) {
+ renderCommonComponents();
+ }
+}
+
+// 初始化主题
+function initTheme() {
+ const savedTheme = localStorage.getItem(themeConfig.themeStorageKey) || themeConfig.defaultTheme;
+ if (savedTheme === 'dark') {
+ document.body.classList.add(themeConfig.darkThemeClass);
+ }
+}
+
+// 渲染公共组件(头部和侧边栏)
+function renderCommonComponents() {
+ const header = renderHeader();
+ const sidebar = renderSidebar();
+
+ document.body.appendChild(header);
+ document.body.appendChild(sidebar);
+
+ // 创建主内容区域
+ const mainContent = document.createElement('div');
+ mainContent.className = 'main-content';
+ document.body.appendChild(mainContent);
+}
+
+// 页面加载完成后初始化
+window.addEventListener('DOMContentLoaded', initApp);
diff --git a/frontend/asset-assistant-system/src/assets/js/components/header.js b/frontend/asset-assistant-system/src/assets/js/components/header.js
new file mode 100644
index 0000000..1021ee2
--- /dev/null
+++ b/frontend/asset-assistant-system/src/assets/js/components/header.js
@@ -0,0 +1,31 @@
+/* 顶部导航组件 */
+import { systemConfig } from '../config/system.js';
+import { Auth } from '../core/auth.js';
+import { themeConfig } from '../config/theme.js';
+
+export function renderHeader() {
+ const header = document.createElement('div');
+ header.className = 'header';
+
+ header.innerHTML = `
+ ${systemConfig.appName}
+
+ `;
+
+ return header;
+}
+
+// 主题切换函数
+function toggleTheme() {
+ const body = document.body;
+ if (body.classList.contains(themeConfig.darkThemeClass)) {
+ body.classList.remove(themeConfig.darkThemeClass);
+ localStorage.setItem(themeConfig.themeStorageKey, 'light');
+ } else {
+ body.classList.add(themeConfig.darkThemeClass);
+ localStorage.setItem(themeConfig.themeStorageKey, 'dark');
+ }
+}
diff --git a/frontend/asset-assistant-system/src/assets/js/components/loading.js b/frontend/asset-assistant-system/src/assets/js/components/loading.js
new file mode 100644
index 0000000..eb6d948
--- /dev/null
+++ b/frontend/asset-assistant-system/src/assets/js/components/loading.js
@@ -0,0 +1,10 @@
+/* 加载动画组件 */
+export function renderLoading() {
+ const loading = document.createElement('div');
+ loading.className = 'loading';
+ loading.innerHTML = `
+
+ 加载中...
+ `;
+ return loading;
+}
diff --git a/frontend/asset-assistant-system/src/assets/js/components/sidebar.js b/frontend/asset-assistant-system/src/assets/js/components/sidebar.js
new file mode 100644
index 0000000..af3febb
--- /dev/null
+++ b/frontend/asset-assistant-system/src/assets/js/components/sidebar.js
@@ -0,0 +1,19 @@
+/* 侧边栏组件 */
+import { menuConfig } from '../config/menu.js';
+import { Router } from '../core/router.js';
+
+export function renderSidebar() {
+ const sidebar = document.createElement('div');
+ sidebar.className = 'sidebar';
+
+ // 渲染菜单
+ const menuHtml = menuConfig.map(item => `
+
+ `).join('');
+
+ sidebar.innerHTML = menuHtml;
+ return sidebar;
+}
diff --git a/frontend/asset-assistant-system/src/assets/js/config/menu.js b/frontend/asset-assistant-system/src/assets/js/config/menu.js
new file mode 100644
index 0000000..17e3e0c
--- /dev/null
+++ b/frontend/asset-assistant-system/src/assets/js/config/menu.js
@@ -0,0 +1,15 @@
+/* 菜单配置 */
+export const menuConfig = [
+ {
+ path: '/dashboard',
+ name: '数据概览',
+ icon: 'dashboard',
+ auth: true
+ },
+ {
+ path: '/asset-list',
+ name: '资产列表',
+ icon: 'assets',
+ auth: true
+ }
+];
diff --git a/frontend/asset-assistant-system/src/assets/js/config/system.js b/frontend/asset-assistant-system/src/assets/js/config/system.js
new file mode 100644
index 0000000..f9f091f
--- /dev/null
+++ b/frontend/asset-assistant-system/src/assets/js/config/system.js
@@ -0,0 +1,7 @@
+/* 系统配置 */
+export const systemConfig = {
+ appName: '资产辅助系统',
+ version: '1.0.0',
+ baseUrl: '/',
+ timeout: 5000
+};
diff --git a/frontend/asset-assistant-system/src/assets/js/config/theme.js b/frontend/asset-assistant-system/src/assets/js/config/theme.js
new file mode 100644
index 0000000..e73556a
--- /dev/null
+++ b/frontend/asset-assistant-system/src/assets/js/config/theme.js
@@ -0,0 +1,6 @@
+/* 主题配置 */
+export const themeConfig = {
+ defaultTheme: 'light',
+ darkThemeClass: 'dark-theme',
+ themeStorageKey: 'asset_system_theme'
+};
diff --git a/frontend/asset-assistant-system/src/assets/js/core/auth.js b/frontend/asset-assistant-system/src/assets/js/core/auth.js
new file mode 100644
index 0000000..dfa1769
--- /dev/null
+++ b/frontend/asset-assistant-system/src/assets/js/core/auth.js
@@ -0,0 +1,18 @@
+/* 权限验证 */
+import { systemConfig } from '../config/system.js';
+
+export const Auth = {
+ // 检查是否登录
+ isLogin() {
+ return localStorage.getItem('token') !== null;
+ },
+ // 登录
+ login(token) {
+ localStorage.setItem('token', token);
+ },
+ // 退出登录
+ logout() {
+ localStorage.removeItem('token');
+ window.location.href = `${systemConfig.baseUrl}login.html`;
+ }
+};
diff --git a/frontend/asset-assistant-system/src/assets/js/core/loader.js b/frontend/asset-assistant-system/src/assets/js/core/loader.js
new file mode 100644
index 0000000..fb6c86d
--- /dev/null
+++ b/frontend/asset-assistant-system/src/assets/js/core/loader.js
@@ -0,0 +1,25 @@
+/* 加载器 */
+export const Loader = {
+ show() {
+ const loader = document.createElement('div');
+ loader.id = 'app-loader';
+ loader.style.cssText = `
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: rgba(255,255,255,0.8);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 9999;
+ `;
+ loader.innerHTML = '加载中...
';
+ document.body.appendChild(loader);
+ },
+ hide() {
+ const loader = document.getElementById('app-loader');
+ if (loader) loader.remove();
+ }
+};
diff --git a/frontend/asset-assistant-system/src/assets/js/core/message.js b/frontend/asset-assistant-system/src/assets/js/core/message.js
new file mode 100644
index 0000000..4912bd7
--- /dev/null
+++ b/frontend/asset-assistant-system/src/assets/js/core/message.js
@@ -0,0 +1,26 @@
+/* 消息提示 */
+export const Message = {
+ success(content) {
+ this.showMessage(content, 'success');
+ },
+ error(content) {
+ this.showMessage(content, 'error');
+ },
+ showMessage(content, type) {
+ const message = document.createElement('div');
+ message.style.cssText = `
+ position: fixed;
+ top: 20px;
+ right: 20px;
+ padding: 10px 20px;
+ border-radius: 4px;
+ color: white;
+ z-index: 9998;
+ transition: all 0.3s;
+ `;
+ message.style.backgroundColor = type === 'success' ? '#4CAF50' : '#f44336';
+ message.textContent = content;
+ document.body.appendChild(message);
+ setTimeout(() => message.remove(), 3000);
+ }
+};
diff --git a/frontend/asset-assistant-system/src/assets/js/core/router.js b/frontend/asset-assistant-system/src/assets/js/core/router.js
new file mode 100644
index 0000000..9c7223d
--- /dev/null
+++ b/frontend/asset-assistant-system/src/assets/js/core/router.js
@@ -0,0 +1,19 @@
+/* 路由管理 */
+import { Auth } from './auth.js';
+import { systemConfig } from '../config/system.js';
+
+export const Router = {
+ // 跳转页面
+ push(path) {
+ // 验证权限
+ if (path !== '/login' && !Auth.isLogin()) {
+ window.location.href = `${systemConfig.baseUrl}login.html`;
+ return;
+ }
+ window.location.href = `${systemConfig.baseUrl}${path.startsWith('/') ? path.slice(1) : path}`;
+ },
+ // 获取当前路径
+ getCurrentPath() {
+ return window.location.pathname.replace(systemConfig.baseUrl, '');
+ }
+};
diff --git a/frontend/asset-assistant-system/src/pages/index.html b/frontend/asset-assistant-system/src/pages/index.html
new file mode 100644
index 0000000..0205b47
--- /dev/null
+++ b/frontend/asset-assistant-system/src/pages/index.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+ 资产辅助系统 - 主页
+
+
+
+
+
+
+
+
欢迎使用资产辅助系统
+
请选择左侧菜单进行操作
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/asset-assistant-system/src/pages/login.html b/frontend/asset-assistant-system/src/pages/login.html
new file mode 100644
index 0000000..dcd1764
--- /dev/null
+++ b/frontend/asset-assistant-system/src/pages/login.html
@@ -0,0 +1,51 @@
+
+
+
+
+
+ 资产辅助系统 - 登录
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/asset-assistant-system/src/pages/modules/asset-detail.html b/frontend/asset-assistant-system/src/pages/modules/asset-detail.html
new file mode 100644
index 0000000..bac855e
--- /dev/null
+++ b/frontend/asset-assistant-system/src/pages/modules/asset-detail.html
@@ -0,0 +1,81 @@
+
+
+
+
+
+ 资产详情 - 资产辅助系统
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/asset-assistant-system/src/pages/modules/asset-list.html b/frontend/asset-assistant-system/src/pages/modules/asset-list.html
new file mode 100644
index 0000000..f72e363
--- /dev/null
+++ b/frontend/asset-assistant-system/src/pages/modules/asset-list.html
@@ -0,0 +1,59 @@
+
+
+
+
+
+ 资产列表 - 资产辅助系统
+
+
+
+
+
+
+
资产列表
+
+
+
+ | 资产ID |
+ 资产名称 |
+ 资产类型 |
+ 状态 |
+ 操作 |
+
+
+
+
+ | ASSET-001 |
+ 服务器-Web01 |
+ 服务器 |
+ 运行中 |
+ |
+
+
+ | ASSET-002 |
+ 交换机-SW02 |
+ 网络设备 |
+ 运行中 |
+ |
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/asset-assistant-system/src/pages/modules/dashboard.html b/frontend/asset-assistant-system/src/pages/modules/dashboard.html
new file mode 100644
index 0000000..6bc7e1e
--- /dev/null
+++ b/frontend/asset-assistant-system/src/pages/modules/dashboard.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+ 数据概览 - 资产辅助系统
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/create.py b/frontend/create.py
new file mode 100644
index 0000000..46ae5bf
--- /dev/null
+++ b/frontend/create.py
@@ -0,0 +1,93 @@
+import os
+from pathlib import Path
+
+# 定义项目根目录(脚本所在目录下的 asset-assistant-system)
+PROJECT_ROOT = Path(__file__).parent / "asset-assistant-system"
+
+# 定义需要创建的目录列表
+DIRECTORIES = [
+ "dist",
+ "src/assets/css",
+ "src/assets/css/components",
+ "src/assets/js/config",
+ "src/assets/js/core",
+ "src/assets/js/components",
+ "src/assets/icons",
+ "src/pages/modules",
+ "src/template"
+]
+
+# 定义需要创建的文件列表(路径: 文件初始内容)
+FILES = {
+ # CSS 文件
+ "src/assets/css/dark-theme.css": "/* 暗夜模式主题样式 */\nbody.dark-theme {\n background-color: #1e1e1e;\n color: #f5f5f5;\n}\n",
+ "src/assets/css/common.css": "/* 通用样式 */\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n font-family: 'Arial', sans-serif;\n}\n\n.container {\n width: 100%;\n max-width: 1200px;\n margin: 0 auto;\n padding: 0 20px;\n}\n",
+
+ # JS 配置文件
+ "src/assets/js/config/menu.js": "/* 菜单配置 */\nexport const menuConfig = [\n {\n path: '/dashboard',\n name: '数据概览',\n icon: 'dashboard',\n auth: true\n },\n {\n path: '/asset-list',\n name: '资产列表',\n icon: 'assets',\n auth: true\n }\n];\n",
+ "src/assets/js/config/theme.js": "/* 主题配置 */\nexport const themeConfig = {\n defaultTheme: 'light',\n darkThemeClass: 'dark-theme',\n themeStorageKey: 'asset_system_theme'\n};\n",
+ "src/assets/js/config/system.js": "/* 系统配置 */\nexport const systemConfig = {\n appName: '资产辅助系统',\n version: '1.0.0',\n baseUrl: '/',\n timeout: 5000\n};\n",
+
+ # JS 核心功能
+ "src/assets/js/core/auth.js": "/* 权限验证 */\nimport { systemConfig } from '../config/system.js';\n\nexport const Auth = {\n // 检查是否登录\n isLogin() {\n return localStorage.getItem('token') !== null;\n },\n // 登录\n login(token) {\n localStorage.setItem('token', token);\n },\n // 退出登录\n logout() {\n localStorage.removeItem('token');\n window.location.href = `${systemConfig.baseUrl}login.html`;\n }\n};\n",
+ "src/assets/js/core/loader.js": "/* 加载器 */\nexport const Loader = {\n show() {\n const loader = document.createElement('div');\n loader.id = 'app-loader';\n loader.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(255,255,255,0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 9999;\n `;\n loader.innerHTML = '加载中...
';\n document.body.appendChild(loader);\n },\n hide() {\n const loader = document.getElementById('app-loader');\n if (loader) loader.remove();\n }\n};\n",
+ "src/assets/js/core/message.js": "/* 消息提示 */\nexport const Message = {\n success(content) {\n this.showMessage(content, 'success');\n },\n error(content) {\n this.showMessage(content, 'error');\n },\n showMessage(content, type) {\n const message = document.createElement('div');\n message.style.cssText = `\n position: fixed;\n top: 20px;\n right: 20px;\n padding: 10px 20px;\n border-radius: 4px;\n color: white;\n z-index: 9998;\n transition: all 0.3s;\n `;\n message.style.backgroundColor = type === 'success' ? '#4CAF50' : '#f44336';\n message.textContent = content;\n document.body.appendChild(message);\n setTimeout(() => message.remove(), 3000);\n }\n};\n",
+ "src/assets/js/core/router.js": "/* 路由管理 */\nimport { Auth } from './auth.js';\nimport { systemConfig } from '../config/system.js';\n\nexport const Router = {\n // 跳转页面\n push(path) {\n // 验证权限\n if (path !== '/login' && !Auth.isLogin()) {\n window.location.href = `${systemConfig.baseUrl}login.html`;\n return;\n }\n window.location.href = `${systemConfig.baseUrl}${path.startsWith('/') ? path.slice(1) : path}`;\n },\n // 获取当前路径\n getCurrentPath() {\n return window.location.pathname.replace(systemConfig.baseUrl, '');\n }\n};\n",
+
+ # JS 组件
+ "src/assets/js/components/sidebar.js": "/* 侧边栏组件 */\nimport { menuConfig } from '../config/menu.js';\nimport { Router } from '../core/router.js';\n\nexport function renderSidebar() {\n const sidebar = document.createElement('div');\n sidebar.className = 'sidebar';\n \n // 渲染菜单\n const menuHtml = menuConfig.map(item => `\n \n `).join('');\n \n sidebar.innerHTML = menuHtml;\n return sidebar;\n}\n",
+ "src/assets/js/components/header.js": "/* 顶部导航组件 */\nimport { systemConfig } from '../config/system.js';\nimport { Auth } from '../core/auth.js';\nimport { themeConfig } from '../config/theme.js';\n\nexport function renderHeader() {\n const header = document.createElement('div');\n header.className = 'header';\n \n header.innerHTML = `\n ${systemConfig.appName}
\n \n `;\n \n return header;\n}\n\n// 主题切换函数\nfunction toggleTheme() {\n const body = document.body;\n if (body.classList.contains(themeConfig.darkThemeClass)) {\n body.classList.remove(themeConfig.darkThemeClass);\n localStorage.setItem(themeConfig.themeStorageKey, 'light');\n } else {\n body.classList.add(themeConfig.darkThemeClass);\n localStorage.setItem(themeConfig.themeStorageKey, 'dark');\n }\n}\n",
+ "src/assets/js/components/loading.js": "/* 加载动画组件 */\nexport function renderLoading() {\n const loading = document.createElement('div');\n loading.className = 'loading';\n loading.innerHTML = `\n \n 加载中...
\n `;\n return loading;\n}\n",
+
+ # 应用入口
+ "src/assets/js/app.js": "/* 应用入口 */\nimport { renderHeader } from './components/header.js';\nimport { renderSidebar } from './components/sidebar.js';\nimport { Auth } from './core/auth.js';\nimport { Router } from './core/router.js';\nimport { themeConfig } from './config/theme.js';\n\n// 初始化应用\nfunction initApp() {\n // 检查登录状态\n if (!Auth.isLogin() && window.location.pathname.indexOf('login.html') === -1) {\n Router.push('/login.html');\n return;\n }\n \n // 初始化主题\n initTheme();\n \n // 渲染公共组件(非登录页)\n if (window.location.pathname.indexOf('login.html') === -1) {\n renderCommonComponents();\n }\n}\n\n// 初始化主题\nfunction initTheme() {\n const savedTheme = localStorage.getItem(themeConfig.themeStorageKey) || themeConfig.defaultTheme;\n if (savedTheme === 'dark') {\n document.body.classList.add(themeConfig.darkThemeClass);\n }\n}\n\n// 渲染公共组件(头部和侧边栏)\nfunction renderCommonComponents() {\n const header = renderHeader();\n const sidebar = renderSidebar();\n \n document.body.appendChild(header);\n document.body.appendChild(sidebar);\n \n // 创建主内容区域\n const mainContent = document.createElement('div');\n mainContent.className = 'main-content';\n document.body.appendChild(mainContent);\n}\n\n// 页面加载完成后初始化\nwindow.addEventListener('DOMContentLoaded', initApp);\n",
+
+ # HTML 页面
+ "src/pages/login.html": "\n\n\n \n \n 资产辅助系统 - 登录\n \n \n\n\n \n\n \n\n",
+ "src/pages/index.html": "\n\n\n \n \n 资产辅助系统 - 主页\n \n \n \n\n\n \n \n
欢迎使用资产辅助系统
\n
请选择左侧菜单进行操作
\n
\n\n \n\n",
+ "src/pages/modules/dashboard.html": "\n\n\n \n \n 数据概览 - 资产辅助系统\n \n \n \n\n\n \n\n \n\n",
+ "src/pages/modules/asset-list.html": "\n\n\n \n \n 资产列表 - 资产辅助系统\n \n \n \n\n\n \n
资产列表
\n
\n \n \n | 资产ID | \n 资产名称 | \n 资产类型 | \n 状态 | \n 操作 | \n
\n \n \n \n | ASSET-001 | \n 服务器-Web01 | \n 服务器 | \n 运行中 | \n | \n
\n \n | ASSET-002 | \n 交换机-SW02 | \n 网络设备 | \n 运行中 | \n | \n
\n \n
\n
\n\n \n \n\n",
+ "src/pages/modules/asset-detail.html": "\n\n\n \n \n 资产详情 - 资产辅助系统\n \n \n \n\n\n \n\n \n \n\n",
+
+ # 根目录文件
+ ".gitignore": "# 依赖\nnode_modules/\n.pnp/\n.pnp.js\n\n# 构建产物\ndist/\n\n# 环境变量\n.env\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\n# 日志\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# 编辑器配置\n.idea/\n.vscode/\n*.swp\n*.swo\n\n# 操作系统文件\n.DS_Store\nThumbs.db",
+ "index.html": "\n\n\n \n \n 资产辅助系统\n \n \n\n\n 正在跳转到登录页... 如果没有自动跳转,请点击这里
\n\n",
+ "package.json": "{\n \"name\": \"asset-assistant-system\",\n \"version\": \"1.0.0\",\n \"description\": \"资产辅助管理系统\",\n \"main\": \"index.html\",\n \"scripts\": {\n \"dev\": \"serve\",\n \"build\": \"echo '构建脚本待实现'\",\n \"test\": \"echo '测试脚本待实现'\"\n },\n \"keywords\": [\"asset\", \"management\", \"system\"],\n \"author\": \"\",\n \"license\": \"MIT\",\n \"devDependencies\": {\n \"serve\": \"^14.2.3\"\n }\n}"
+}
+
+def create_project_structure():
+ """创建项目目录结构和文件"""
+ try:
+ # 1. 创建根目录
+ PROJECT_ROOT.mkdir(exist_ok=True)
+ print(f"✅ 创建项目根目录: {PROJECT_ROOT}")
+
+ # 2. 创建所有子目录
+ for dir_path in DIRECTORIES:
+ full_dir_path = PROJECT_ROOT / dir_path
+ full_dir_path.mkdir(parents=True, exist_ok=True)
+ print(f"✅ 创建目录: {full_dir_path}")
+
+ # 3. 创建所有文件并写入初始内容
+ for file_path, content in FILES.items():
+ full_file_path = PROJECT_ROOT / file_path
+ # 确保文件所在目录存在(防止遗漏)
+ full_file_path.parent.mkdir(parents=True, exist_ok=True)
+ # 写入文件内容
+ with open(full_file_path, 'w', encoding='utf-8') as f:
+ f.write(content)
+ print(f"✅ 创建文件: {full_file_path}")
+
+ print("\n🎉 项目结构创建完成!")
+ print(f"📁 项目路径: {PROJECT_ROOT}")
+ print("\n💡 后续操作建议:")
+ print(" 1. 进入项目目录: cd asset-assistant-system")
+ print(" 2. 安装依赖: npm install")
+ print(" 3. 启动开发服务器: npm run dev")
+ print(" 4. 访问: http://localhost:3000")
+
+ except Exception as e:
+ print(f"\n❌ 创建项目结构时出错: {e}")
+
+if __name__ == "__main__":
+ create_project_structure()
\ No newline at end of file
diff --git a/frontend/test.html b/frontend/test.html
deleted file mode 100644
index 69353c4..0000000
--- a/frontend/test.html
+++ /dev/null
@@ -1,390 +0,0 @@
-
-
-
-
-
- EasyUI 后台管理系统
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- | ID |
- 名称 |
- 分类 |
- 状态 |
- 创建时间 |
- 操作 |
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file