diff --git a/frontend/README.md b/frontend/README.md
index 5da2209..44c8b4b 100644
--- a/frontend/README.md
+++ b/frontend/README.md
@@ -10,4 +10,17 @@
5.3、菜单组件:支持多级菜单、折叠展开、激活状态。
5.4、页面管理:统一的页面加载机制,支持错误处理和重试功能。
6、扩展能力:尽量多的配置操作。
-7、样式需求:该项目为金融性质项目,页面风格样式需要偏向暗夜模式。
\ No newline at end of file
+7、样式需求:该项目为金融性质项目,页面风格样式需要偏向暗夜模式。
+---
+假设你是一位经验丰富的 flutter 开发人员,精通项目的架构设计和搭建,协助我使用 flutter 开发 Web 项目,项目类型为资产管理性质的的管理系统,先完成以下需求:
+1、设计一个项目架构。
+2、登录页面,输入账号密码登录,只有登录业务,没有注册和找回密码。
+3、主页分为侧边栏、顶部导航、右边内容区。
+4、常用组件:
+4.1、加载动画:全局加载状态提示。
+4.2、消息提示:支持成功 / 错误 / 信息三种类型,自动消失。
+4.3、菜单组件:支持多级菜单、折叠展开、激活状态。
+5、扩展能力:尽量多的配置操作。
+6、样式需求:该项目为金融性质项目,页面风格样式需要偏向暗夜模式。
+7、项目名为:asset-assistant-system
+---
\ No newline at end of file
diff --git a/frontend/asset-assistant-system/assets/css/common.css b/frontend/asset-assistant-system/assets/css/common.css
deleted file mode 100644
index 30f6d50..0000000
--- a/frontend/asset-assistant-system/assets/css/common.css
+++ /dev/null
@@ -1,14 +0,0 @@
-/* 通用样式 */
-* {
- 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/assets/css/dark-theme.css b/frontend/asset-assistant-system/assets/css/dark-theme.css
deleted file mode 100644
index 2622fd2..0000000
--- a/frontend/asset-assistant-system/assets/css/dark-theme.css
+++ /dev/null
@@ -1,86 +0,0 @@
-/* 基础变量定义 */
-:root {
- --primary-color: #1E88E5; /* 主色调(金融蓝) */
- --secondary-color: #263238; /* 次要色调 */
- --bg-color: #121212; /* 背景色 */
- --bg-light-color: #1E1E1E; /* 浅色背景 */
- --text-primary: #E0E0E0; /* 主要文字色 */
- --text-secondary: #9E9E9E; /* 次要文字色 */
- --border-color: #333333; /* 边框色 */
- --hover-color: #2D2D2D; /* hover色 */
- --active-color: #1976D2; /* 激活色 */
- --success-color: #4CAF50; /* 成功色 */
- --error-color: #F44336; /* 错误色 */
- --info-color: #2196F3; /* 信息色 */
-}
-
-/* 全局样式重置 */
-* {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
-}
-
-body.dark-theme {
- background-color: var(--bg-color);
- color: var(--text-primary);
- font-family: 'Microsoft YaHei', 'Helvetica Neue', Arial, sans-serif;
-}
-
-/* 通用组件样式 */
-.container {
- width: 100%;
- height: 100%;
-}
-
-/* 按钮样式 */
-.btn {
- background-color: var(--primary-color);
- color: white;
- border: none;
- padding: 8px 16px;
- border-radius: 4px;
- cursor: pointer;
- transition: all 0.3s ease;
-}
-
-.btn:hover {
- background-color: var(--active-color);
-}
-
-.btn-success {
- background-color: var(--success-color);
-}
-
-.btn-error {
- background-color: var(--error-color);
-}
-
-.btn-info {
- background-color: var(--info-color);
-}
-
-/* 输入框样式 */
-.input {
- background-color: var(--bg-light-color);
- border: 1px solid var(--border-color);
- color: var(--text-primary);
- padding: 8px 12px;
- border-radius: 4px;
- width: 100%;
- transition: border 0.3s ease;
-}
-
-.input:focus {
- outline: none;
- border-color: var(--primary-color);
-}
-
-/* 卡片样式 */
-.card {
- background-color: var(--bg-light-color);
- border-radius: 8px;
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
- padding: 20px;
- margin-bottom: 20px;
-}
\ No newline at end of file
diff --git a/frontend/asset-assistant-system/assets/js/app.js b/frontend/asset-assistant-system/assets/js/app.js
deleted file mode 100644
index 36bf8bf..0000000
--- a/frontend/asset-assistant-system/assets/js/app.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/* 应用入口 */
-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/assets/js/components/header.js b/frontend/asset-assistant-system/assets/js/components/header.js
deleted file mode 100644
index 1021ee2..0000000
--- a/frontend/asset-assistant-system/assets/js/components/header.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/* 顶部导航组件 */
-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/assets/js/components/loading.js b/frontend/asset-assistant-system/assets/js/components/loading.js
deleted file mode 100644
index 30e089f..0000000
--- a/frontend/asset-assistant-system/assets/js/components/loading.js
+++ /dev/null
@@ -1,94 +0,0 @@
-/**
- * 全局加载动画组件
- */
-window.Loading = {
- /**
- * 初始化加载容器
- */
- init() {
- let container = $('#loading-container');
- if (!container.length) {
- container = $('');
- const loadingHtml = `
-
-
- `;
- container.html(loadingHtml);
- $('body').append(container);
- }
- return container;
- },
-
- /**
- * 显示加载动画
- * @param {string} text - 加载提示文本
- */
- show(text = '加载中...') {
- const container = this.init();
- container.find('.loading-text').text(text);
- container.css('display', 'flex');
- },
-
- /**
- * 隐藏加载动画
- */
- hide() {
- const container = $('#loading-container');
- if (container.length) {
- container.css('display', 'none');
- }
- }
-};
-
-// 添加加载动画样式
-$('head').append(`
-
-`);
\ No newline at end of file
diff --git a/frontend/asset-assistant-system/assets/js/components/sidebar.js b/frontend/asset-assistant-system/assets/js/components/sidebar.js
deleted file mode 100644
index e23d00b..0000000
--- a/frontend/asset-assistant-system/assets/js/components/sidebar.js
+++ /dev/null
@@ -1,177 +0,0 @@
-/**
- * 侧边栏菜单组件
- */
-window.Sidebar = {
- /**
- * 初始化侧边栏
- * @param {jQuery} container - 容器元素
- */
- init(container) {
- this.container = container;
- this.collapse = localStorage.getItem(SystemConfig.menuCollapseKey) === 'true';
- this.renderMenu();
- this.bindEvents();
- this.updateCollapseState();
- },
-
- /**
- * 渲染菜单
- */
- renderMenu() {
- const menuHtml = this.generateMenuHtml(MenuConfig);
- this.container.html(menuHtml);
- },
-
- /**
- * 生成菜单HTML(递归处理多级菜单)
- * @param {array} menuList - 菜单列表
- * @returns {string} - 菜单HTML
- */
- generateMenuHtml(menuList) {
- let html = '';
- return html;
- },
-
- /**
- * 绑定事件
- */
- bindEvents() {
- // 菜单折叠/展开
- this.container.on('click', '.menu-toggle', (e) => {
- const $toggle = $(e.currentTarget);
- const $subMenu = $toggle.closest('.menu-item').find('.sub-menu');
-
- this.collapse = !this.collapse;
- localStorage.setItem(SystemConfig.menuCollapseKey, this.collapse);
-
- $toggle.text(this.collapse ? '+' : '-');
- $subMenu.toggleClass('hidden', this.collapse);
- this.updateCollapseState();
- });
-
- // 菜单项点击(无链接时展开子菜单)
- this.container.on('click', '.menu-title:not(.has-children)', (e) => {
- const $title = $(e.currentTarget);
- const $link = $title.siblings('.menu-link');
- if ($link.length) {
- $link[0].click();
- }
- });
- },
-
- /**
- * 更新折叠状态样式
- */
- updateCollapseState() {
- $('.sidebar').toggleClass('collapsed', this.collapse);
- $('.main-content').toggleClass('sidebar-collapsed', this.collapse);
- }
-};
-
-// 添加侧边栏样式
-$('head').append(`
-
-`);
\ No newline at end of file
diff --git a/frontend/asset-assistant-system/assets/js/config/menu.js b/frontend/asset-assistant-system/assets/js/config/menu.js
deleted file mode 100644
index 38f43b6..0000000
--- a/frontend/asset-assistant-system/assets/js/config/menu.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * 系统菜单配置(支持多级菜单)
- */
-window.MenuConfig = [
- {
- id: 'settings',
- icon: '⚙️',
- title: '系统设置',
- url: 'modules/settings.html',
- children: [
- {
- id: 'country',
- icon: '🌎',
- title: '国家管理',
- url: 'country.html'
- }
- ]
- }
-];
\ No newline at end of file
diff --git a/frontend/asset-assistant-system/assets/js/config/system.js b/frontend/asset-assistant-system/assets/js/config/system.js
deleted file mode 100644
index b9c0d57..0000000
--- a/frontend/asset-assistant-system/assets/js/config/system.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * 系统核心配置
- */
-window.SystemConfig = {
- // 接口基础路径(实际项目替换为真实接口地址)
- baseApi: 'https://api.asset-management.com',
- // Token存储键名
- tokenKey: 'asset_management_token',
- // Token过期时间(单位:小时)
- tokenExpire: 24,
- // 页面加载失败重试次数
- retryCount: 2,
- // 消息提示默认时长(单位:毫秒)
- messageDuration: 3000,
- // 菜单折叠状态存储键名
- menuCollapseKey: 'asset_menu_collapse',
- // 是否开启调试模式
- debug: true
-};
-
-// 打印调试信息
-if (SystemConfig.debug) {
- console.log('系统配置初始化完成:', SystemConfig);
-}
\ No newline at end of file
diff --git a/frontend/asset-assistant-system/assets/js/config/theme.js b/frontend/asset-assistant-system/assets/js/config/theme.js
deleted file mode 100644
index e73556a..0000000
--- a/frontend/asset-assistant-system/assets/js/config/theme.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/* 主题配置 */
-export const themeConfig = {
- defaultTheme: 'light',
- darkThemeClass: 'dark-theme',
- themeStorageKey: 'asset_system_theme'
-};
diff --git a/frontend/asset-assistant-system/assets/js/core/auth.js b/frontend/asset-assistant-system/assets/js/core/auth.js
deleted file mode 100644
index f37ce75..0000000
--- a/frontend/asset-assistant-system/assets/js/core/auth.js
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * 权限验证核心模块
- */
-window.Auth = {
- /**
- * 获取Token
- */
- getToken() {
- return localStorage.getItem(SystemConfig.tokenKey);
- },
-
- /**
- * 设置Token
- * @param {string} token - 认证令牌
- */
- setToken(token) {
- localStorage.setItem(SystemConfig.tokenKey, token);
- // 设置过期时间(可选)
- const expireTime = new Date().getTime() + SystemConfig.tokenExpire * 60 * 60 * 1000;
- localStorage.setItem(`${SystemConfig.tokenKey}_expire`, expireTime);
- },
-
- /**
- * 移除Token
- */
- removeToken() {
- localStorage.removeItem(SystemConfig.tokenKey);
- localStorage.removeItem(`${SystemConfig.tokenKey}_expire`);
- },
-
- /**
- * 验证Token是否有效
- */
- isValidToken() {
- const token = this.getToken();
- if (!token) return false;
-
- // 验证过期时间
- const expireTime = localStorage.getItem(`${SystemConfig.tokenKey}_expire`);
- if (expireTime && new Date().getTime() > expireTime) {
- this.removeToken();
- return false;
- }
-
- return true;
- },
-
- /**
- * 登录验证拦截
- * 未登录自动跳转到登录页
- */
- checkLogin() {
- if (!this.isValidToken()) {
- window.location.href = '../pages/login.html';
- }
- },
-
- /**
- * 登录请求
- * @param {string} username - 用户名
- * @param {string} password - 密码
- * @returns {Promise} - 登录结果
- */
- login(username, password) {
- return new Promise((resolve, reject) => {
- // 模拟接口请求(实际项目替换为真实接口)
- setTimeout(() => {
- // 简单验证(实际项目需要后端验证)
- if (username && password) {
- const token = `TOKEN_${new Date().getTime()}_${username}`;
- this.setToken(token);
- resolve({ success: true, token, message: '登录成功' });
- } else {
- reject({ success: false, message: '账号或密码不能为空' });
- }
- }, 800);
- });
- },
-
- /**
- * 退出登录
- */
- logout() {
- this.removeToken();
- window.location.href = '../pages/login.html';
- }
-};
\ No newline at end of file
diff --git a/frontend/asset-assistant-system/assets/js/core/loader.js b/frontend/asset-assistant-system/assets/js/core/loader.js
deleted file mode 100644
index fb6c86d..0000000
--- a/frontend/asset-assistant-system/assets/js/core/loader.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/* 加载器 */
-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/assets/js/core/message.js b/frontend/asset-assistant-system/assets/js/core/message.js
deleted file mode 100644
index be25e28..0000000
--- a/frontend/asset-assistant-system/assets/js/core/message.js
+++ /dev/null
@@ -1,121 +0,0 @@
-/**
- * 全局消息提示组件
- */
-window.Message = {
- /**
- * 消息容器初始化
- */
- init() {
- let container = $('#message-container');
- if (!container.length) {
- container = $('');
- $('body').append(container);
- }
- return container;
- },
-
- /**
- * 创建消息元素(修复 CSS 变量引用问题)
- * @param {string} content - 消息内容
- * @param {string} type - 消息类型(success/error/info)
- * @returns {jQuery} - 消息元素
- */
- createMessage(content, type) {
- // 存储 CSS 变量名,而非直接使用 var()
- const typeMap = {
- success: { icon: '✓', cssVar: '--success-color' },
- error: { icon: '✗', cssVar: '--error-color' },
- info: { icon: 'i', cssVar: '--info-color' }
- };
- const config = typeMap[type] || typeMap.info;
-
- // 关键:通过 JS 获取 CSS 变量的实际值
- const rootElement = document.documentElement;
- const computedStyle = getComputedStyle(rootElement);
- const themeColor = computedStyle.getPropertyValue(config.cssVar).trim(); // 解析 CSS 变量
-
- const message = $(`
-
- ${config.icon}
- ${content}
-
- `);
-
- // 设置样式(使用解析后的 CSS 变量值)
- message.css({
- backgroundColor: computedStyle.getPropertyValue('--bg-light-color').trim(),
- borderLeft: `4px solid ${themeColor}`,
- color: computedStyle.getPropertyValue('--text-primary').trim(),
- padding: '12px 16px',
- borderRadius: '4px',
- boxShadow: '0 2px 8px rgba(0,0,0,0.3)',
- marginBottom: '8px',
- display: 'flex',
- alignItems: 'center',
- animation: 'messageFadeIn 0.3s ease'
- });
-
- message.find('.message-icon').css({
- color: themeColor,
- marginRight: '8px',
- fontWeight: 'bold'
- });
-
- return message;
- },
-
- /**
- * 显示消息
- * @param {string} content - 消息内容
- * @param {string} type - 消息类型(success/error/info)
- * @param {number} duration - 显示时长(毫秒)
- */
- show(content, type = 'info', duration = SystemConfig.messageDuration) {
- const container = this.init();
- const message = this.createMessage(content, type);
-
- container.append(message);
-
- // 自动关闭
- setTimeout(() => {
- message.css({ animation: 'messageFadeOut 0.3s ease' });
- setTimeout(() => {
- message.remove();
- }, 300);
- }, duration);
- },
-
- // 快捷方法
- success(content, duration) {
- this.show(content, 'success', duration);
- },
-
- error(content, duration) {
- this.show(content, 'error', duration);
- },
-
- info(content, duration) {
- this.show(content, 'info', duration);
- }
-};
-
-// 添加动画样式
-$('head').append(`
-
-`);
\ No newline at end of file
diff --git a/frontend/asset-assistant-system/assets/js/core/router.js b/frontend/asset-assistant-system/assets/js/core/router.js
deleted file mode 100644
index 9c7223d..0000000
--- a/frontend/asset-assistant-system/assets/js/core/router.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 路由管理 */
-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/deploy.sh b/frontend/asset-assistant-system/deploy.sh
deleted file mode 100644
index 49f6ab5..0000000
--- a/frontend/asset-assistant-system/deploy.sh
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/bash
-set -euo pipefail # 更严格的错误检查:未定义变量报错、管道错误传递
-
-# 定义日志函数(带时间戳和级别)
-log_info() {
- echo "[$(date +'%Y-%m-%d %H:%M:%S')] [INFO] $1"
-}
-
-log_warn() {
- echo "[$(date +'%Y-%m-%d %H:%M:%S')] [WARN] $1" >&2
-}
-
-log_error() {
- echo "[$(date +'%Y-%m-%d %H:%M:%S')] [ERROR] $1" >&2
-}
-
-# 定义配置常量(等号两侧无空格!集中管理,便于修改)
-IMAGE_NAME="asset-assistant-frontend-system"
-IMAGE_TAG="1.0.0"
-FULL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}"
-DOCKERFILE_PATH="./Dockerfile"
-SERVICE_NAME="asset-assistant-frontend" # 服务容器名称,便于管理
-HOST_PORT=8080 # 主机映射端口
-CONTAINER_PORT=80 # 容器内部端口
-
-log_info "===== 开始执行构建脚本 ====="
-
-# 步骤1:停止并删除现有容器(忽略不存在的情况)
-log_info "检查并停止现有容器: ${SERVICE_NAME}"
-if sudo docker rm -f "${SERVICE_NAME}" >/dev/null 2>&1; then
- log_info "容器 ${SERVICE_NAME} 已停止并删除"
-else
- log_warn "容器 ${SERVICE_NAME} 不存在,跳过删除步骤"
-fi
-
-# 步骤2:删除现有镜像(忽略不存在的情况)
-log_info "尝试删除现有镜像: ${FULL_IMAGE}"
-if sudo docker rmi -f "${FULL_IMAGE}" >/dev/null 2>&1; then
- log_info "镜像 ${FULL_IMAGE} 删除成功"
-else
- log_warn "镜像 ${FULL_IMAGE} 不存在或无法删除,跳过删除步骤"
-fi
-
-# 步骤3:构建新镜像
-log_info "开始构建新镜像: ${FULL_IMAGE}(Dockerfile位于${DOCKERFILE_PATH})"
-if sudo docker build -t "${FULL_IMAGE}" -f Dockerfile .; then
- log_info "镜像 ${FULL_IMAGE} 构建成功"
-else
- log_error "镜像 ${FULL_IMAGE} 构建失败"
- exit 1
-fi
-
-# 步骤4:启动服务
-log_info "启动新容器: ${SERVICE_NAME}(${HOST_PORT}:${CONTAINER_PORT})"
-# 启动容器(后台运行、端口映射、命名容器)
-if sudo docker run -d -p "${HOST_PORT}:${CONTAINER_PORT}" --name "${SERVICE_NAME}" "${FULL_IMAGE}"; then
- log_info "容器 ${SERVICE_NAME} 启动成功,访问地址: http://localhost:${HOST_PORT}"
-else
- log_error "容器 ${SERVICE_NAME} 启动失败"
- exit 1
-fi
-
-log_info "===== 构建脚本执行完成 ====="
diff --git a/frontend/asset-assistant-system/index.html b/frontend/asset-assistant-system/index.html
deleted file mode 100644
index e4641ca..0000000
--- a/frontend/asset-assistant-system/index.html
+++ /dev/null
@@ -1,189 +0,0 @@
-
-
-
-
-
- 资产管理系统 - 主页
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/asset-assistant-system/login.html b/frontend/asset-assistant-system/login.html
deleted file mode 100644
index cd8e8e4..0000000
--- a/frontend/asset-assistant-system/login.html
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
-
-
- 资产管理系统 - 登录
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/asset-assistant-system/pages/country.html b/frontend/asset-assistant-system/pages/country.html
deleted file mode 100644
index f28281c..0000000
--- a/frontend/asset-assistant-system/pages/country.html
+++ /dev/null
@@ -1 +0,0 @@
->
\ No newline at end of file
diff --git a/frontend/create.py b/frontend/create.py
deleted file mode 100644
index 46ae5bf..0000000
--- a/frontend/create.py
+++ /dev/null
@@ -1,93 +0,0 @@
-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