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 @@ + + + + + + 资产详情 - 资产辅助系统 + + + + + +
+

资产详情

+
+
+
资产ID:
+
--
+
+
+
资产名称:
+
--
+
+
+
资产类型:
+
--
+
+
+
购买日期:
+
2024-01-15
+
+
+
状态:
+
运行中
+
+
+ +
+ + + + + \ 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 @@ + + + + + + 数据概览 - 资产辅助系统 + + + + + +
+

数据概览

+
+
+

总资产数

+

1,286

+
+
+

在线设备

+

952

+
+
+

待处理工单

+

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 \n ${item.name}\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
\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 \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

总资产数

\n

1,286

\n
\n
\n

在线设备

\n

952

\n
\n
\n

待处理工单

\n

36

\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 \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
资产ID资产名称资产类型状态操作
ASSET-001服务器-Web01服务器运行中
ASSET-002交换机-SW02网络设备运行中
\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
资产ID:
\n
--
\n
\n
\n
资产名称:
\n
--
\n
\n
\n
资产类型:
\n
--
\n
\n
\n
购买日期:
\n
2024-01-15
\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