# theme **Repository Path**: tytyb/theme ## Basic Information - **Project Name**: theme - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-10-29 - **Last Updated**: 2025-10-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### Theme Custom zhn erpnext16 theme ### 功能特性 #### 全面品牌化 - **应用标题替换**: 自动将 ERPNext 应用标题修改为 "NextJia" - **全套 Logo 替换**: 自动替换系统中所有位置的 ERPNext logo - **保持系统稳定**: 不修改应用内部标识符,确保系统功能正常 - **品牌统一**: 确保系统界面显示统一的 NextJia 品牌标识 - **无需手动配置**: 安装过程中自动完成所有配置 #### 主题定制 - **自定义CSS样式**: 提供专门的主题样式文件 - **响应式设计**: 支持桌面和移动端界面 - **品牌色彩**: 统一的视觉风格和色彩方案 #### 自动创建导航界面 🆕 - **Apple 风格导航**: 安装时自动创建现代化的主页导航界面 - **业务模块覆盖**: 包含12个主要业务模块的快捷入口 - **响应式设计**: 支持桌面和移动端的自适应布局 - **SVG 图标**: 每个功能模块都配有精美的矢量图标 - **交互效果**: 悬停和点击动画,提升用户体验 ### Installation You can install this app using the [bench](https://github.com/frappe/bench) CLI: ```bash cd $PATH_TO_YOUR_BENCH bench get-app $URL_OF_THIS_REPO --branch develop bench install-app theme ``` **注意**: - **安装时**:系统会自动执行以下操作: 1. 修改 ERPNext 的 `hooks.py` 文件 2. 将 `app_title` 从 "ERPNext" 改为 "NextJia"(保持 `app_name` 不变) 3. 替换所有 Logo 引用: - `app_logo_url`: 应用主 Logo - `add_to_apps_screen.logo`: 应用屏幕 Logo - `splash_image`: 启动画面 Logo - `email_brand_image`: 邮件品牌 Logo 4. 创建原始配置的备份文件 5. **自动创建主页导航 HTML 块**: - 创建名为 "home" 的 Custom HTML Block 记录 - 包含完整的 Apple 风格导航界面 HTML 代码 - 包含响应式 CSS 样式,支持桌面和移动端 - 涵盖12个主要业务模块的快捷入口 6. 显示安装成功提示信息 - **卸载时**:系统会自动恢复原始配置并清理所有相关数据: 1. **删除 home HTML 块记录**:自动删除安装时创建的 "home" Custom HTML Block 2. 将 `app_title` 从 "NextJia" 恢复为 "ERPNext" 3. 恢复所有 Logo 引用到原始 ERPNext Logo 4. 清理备份文件 5. 显示恢复成功提示信息 6. **完全清理**:确保不留下任何孤立的数据记录 ### 技术实现 #### 钩子机制 应用使用 Frappe 的安装和卸载钩子来实现自动配置: ```python # hooks.py after_install = "theme.install.after_install" before_uninstall = "theme.install.before_uninstall" ``` #### 自动修改逻辑 **安装时** (`after_install`): - 检查 ERPNext 应用是否已安装 - 自动创建原始配置的备份文件 - 使用正则表达式精确替换应用标题和所有 Logo 引用: - `app_title`: "ERPNext" → "NextJia" - `app_logo_url`: 主应用 Logo 路径 - `add_to_apps_screen.logo`: 应用列表中的 Logo - `splash_image`: 系统启动画面 Logo - `email_brand_image`: 邮件中的品牌 Logo - **自动创建主页导航 HTML 块**: - 创建 Custom HTML Block 文档类型记录 - 记录名称为 "home",设置为公开可见 - 包含完整的 Apple 风格导航界面代码 - 重复检查机制,避免重复创建 - 检测重复安装,防止重复修改 - 包含完整的错误处理和日志记录 - 提供用户友好的反馈信息 **卸载时** (`before_uninstall`): - **删除 HTML 块记录**: - 检查 "home" Custom HTML Block 是否存在 - 如果存在则安全删除该记录 - 避免留下孤立的数据记录 - **恢复 ERPNext 品牌化配置**: - 优先使用备份文件进行完整恢复 - 备用正则表达式恢复机制,恢复所有修改: - 应用标题恢复为 "ERPNext" - 所有 Logo 路径恢复为原始 ERPNext Logo - 自动清理备份文件 - **完整性保证**: - 检测是否需要恢复,避免重复操作 - 确保系统状态完全回滚 - 数据库事务管理(commit/rollback) - 提供恢复成功的确认信息 #### 文件结构 ``` theme/ ├── hooks.py # 应用钩子配置 ├── install.py # 安装和卸载处理逻辑 │ ├── after_install() # 安装后执行 │ ├── before_uninstall() # 卸载前执行 │ ├── delete_home_html_block() # 删除HTML块记录 │ └── restore_erpnext_branding() # 恢复ERPNext品牌 ├── utils/ │ └── html_block_utils.py # HTML块工具函数 ├── templates/ │ └── home_navigation.html # 主页导航HTML模板 ├── test/ │ ├── 实现总结.md # HTML 块功能实现总结 │ └── verify_home_block.py # HTML 块验证脚本 └── public/ ├── css/ │ ├── theme.css # 主题样式文件 │ └── home_navigation.css # 主页导航样式文件 └── images/ └── nextjia-logo.svg # NextJia 品牌 Logo (118x118) ``` ### 🏠 主页导航 HTML 块功能 #### 功能概述 安装 theme 应用时,系统会自动创建一个名为 "home" 的 Custom HTML Block 记录,提供现代化的 Apple 风格导航界面。 #### 包含的业务模块 1. **日常办公**: 工作台、待办、日历、仪表盘 2. **会计核算**: 日记账、销售发票、采购发票、总账 3. **采购管理**: 材料申请、采购订单、供应商、采购收货 4. **订单管理**: 销售订单、客户、报价单、交货单 5. **库存管理**: 库存条目、物料、仓库、库存余额 6. **资产管理**: 资产、资产类别、资产维护、折旧计划 7. **生产管理**: 物料清单、工单、作业卡、生产计划 8. **质量管理**: 质量检验、质量目标、不合格品、质量程序 9. **项目管理**: 项目、任务、时间日志、甘特图 10. **售后支持**: 问题、保修索赔、维护访问、序列号 11. **CRM系统**: 线索、机会、联系人、活动 12. **系统设置**: 模块设置、用户、角色、公司 #### 技术特性 - **Apple 风格设计**: 现代化的图标和交互效果 - **响应式布局**: 自适应桌面和移动设备 - **SVG 图标**: 每个功能都配有相应的矢量图标 - **交互效果**: 悬停和点击动画效果 - **自动创建**: 安装时自动创建,无需手动配置 #### 使用方法 安装完成后,可以在 Frappe 系统中: 1. 搜索 "Custom HTML Block" 2. 找到名为 "home" 的记录 3. 查看其 HTML 和 CSS 内容 4. 在工作区中使用该 HTML 块 #### 验证方法 ```python import frappe frappe.init(site='dev.local') frappe.connect() # 检查记录是否存在 exists = frappe.db.exists('Custom HTML Block', 'home') print(f'记录是否存在: {exists}') if exists: doc = frappe.get_doc('Custom HTML Block', 'home') print(f'HTML 内容长度: {len(doc.html)} 字符') print(f'CSS 内容长度: {len(doc.style)} 字符') ``` #### NextJia Logo 设计 - **格式**: SVG 矢量格式,支持无损缩放 - **尺寸**: 118 x 118 像素(与原 ERPNext Logo 保持一致) - **颜色**: ERPNext 蓝色背景 (#067EFB) + 白色图标 - **设计**: 现代简约的字母 "N",采用与 ERPNext 相同的设计风格 - **风格**: 圆角矩形背景,扁平化设计,简洁现代 - **位置**: 统一替换系统中所有 ERPNext Logo 显示位置 #### 品牌化效果 安装后,以下位置将显示 NextJia 品牌: - ✅ **登录页面**: NextJia Logo 和标题 - ✅ **系统内部**: 主界面大 Logo 显示 NextJia - ✅ **左上角**: 应用 Logo 显示 NextJia - ✅ **启动画面**: 系统启动时显示 NextJia Logo - ✅ **应用列表**: 在应用管理中显示 NextJia - ✅ **邮件品牌**: 系统发送的邮件中显示 NextJia Logo #### 安全特性 - **备份机制**: 自动创建原始配置备份,确保可以完整恢复 - **精确匹配**: 使用正则表达式避免误替换其他相似内容 - **重复检测**: 防止重复安装或卸载时的重复操作 - **应用检查**: 验证 ERPNext 应用存在性,避免无效操作 - **错误处理**: 完整的异常捕获和日志记录 - **状态验证**: 安装前后状态检查,确保操作成功 ### Contributing This app uses `pre-commit` for code formatting and linting. Please [install pre-commit](https://pre-commit.com/#installation) and enable it for this repository: ```bash cd apps/theme pre-commit install ``` Pre-commit is configured to use the following tools for checking and formatting your code: - ruff - eslint - prettier - pyupgrade ### CI This app can use GitHub Actions for CI. The following workflows are configured: - CI: Installs this app and runs unit tests on every push to `develop` branch. - Linters: Runs [Frappe Semgrep Rules](https://github.com/frappe/semgrep-rules) and [pip-audit](https://pypi.org/project/pip-audit/) on every pull request. ### License mit