# YM-Admin **Repository Path**: yimiaoOpen/ym-admin ## Basic Information - **Project Name**: YM-Admin - **Description**: YM-Admin 是一套基于 React 和 Vite 开发的企业级管理后台前端框架。它围绕电子合同、在线报价单、内容运营、电商、会员、财务、权限组织、素材管理、数据大屏和 AI 工作区等常见业务场景,提供可运行页面、统一交互规范和可复用组件。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: https://template.yimiaonet.cn/ym-admin/ - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-08-01 - **Last Updated**: 2026-08-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # YM-Admin 一秒互联企业后台组件框架 YM-Admin 是一套基于 React 和 Vite 开发的企业级管理后台前端框架。它围绕电子合同、在线报价单、内容运营、电商、会员、财务、权限组织、素材管理、数据大屏和 AI 工作区等常见业务场景,提供可运行页面、统一交互规范和可复用组件。 本项目没有复制参考站源码、商标或视觉资产。参考产品仅用于梳理管理后台常见功能,页面结构、视觉样式、路由、组件和交互均由一秒互联独立实现。 > 当前仓库是可运行的前端框架和本地持久化演示。登录、支付、电子签章、真实合同签署、订单库存、短信、AI 模型等生产能力必须接入服务端,不能把前端演示逻辑直接当成生产安全实现。 ## 在线仓库 - Gitee: - 在线演示: - 技术支持:[一秒互联公司](https://www.yimiaonet.com/) - 中文文档:本文件 - English guide:[README.en.md](./README.en.md) - 组件手册:[docs/COMPONENTS.md](./docs/COMPONENTS.md) - 部署手册:[docs/DEPLOYMENT.md](./docs/DEPLOYMENT.md) - 安全说明:[SECURITY.md](./SECURITY.md) ## 项目状态说明 为避免把演示功能误认为生产功能,本项目把能力分为三类: | 状态 | 含义 | 示例 | | --- | --- | --- | | 已真实实现 | 组件可点击、可输入、可校验、可切换状态,页面刷新路由可恢复 | 双栏菜单、标签页、弹窗、表格分页、日期范围、图片剪裁、Tiptap 编辑器、Univer 表格、视频播放、ECharts 图表 | | 本地演示适配器 | 数据保存在 `localStorage` 或 `sessionStorage`,适合交互验收,不适合多人生产使用 | 商品、内容、用户资料、主题、水印、登录会话、模拟实时大屏 | | 生产环境待接入 | 需要后端、数据库、第三方正式账号、服务端签名或审计 | 实名认证、合同签署、CA 证书、公章授权、支付回调、短信、AI 模型、订单库存事务 | ## 核心能力 ### 后台框架 - 一级菜单 + 二级菜单双栏布局 - 多页面工作标签和右键菜单 - 关闭当前、关闭左侧、关闭右侧、关闭全部、刷新当前 - `/admin/:page?view=二级菜单` 标准浏览器地址 - 前进、后退、刷新恢复当前页面 - 日间模式、夜间模式、4 套主题和随机换肤 - 全屏、锁屏、通知、语言切换、全局搜索、AI 搜索入口 - 全局水印配置和技术支持页脚 - 桌面端、平板和 H5 手机端响应式布局 ### 电子合同与在线报价 - 报价方案组合、功能项选择、金额汇总和有效期 - 报价单预览、客户确认状态和电子公章视觉组件 - 合同列表、合同状态、签署流程、归档与文件预览界面 - 手写签名、水印、打印和文档编辑组件 - 适合继续接入实名认证、CA 证书、可信时间戳和第三方电子签服务 ### 通用业务后台 - 用户、会员、分组、标签和付费会员 - 商品、SKU、库存、订单、交易、工单、评论、优惠券、品牌和活动 - 财务账单、转账、分账、结算、流水、充值、提现、发票和支付方式 - 管理员、登录日志、角色、部门、团队、分公司、菜单、字典和定时任务 - 官网内容、文章、新闻、案例、产品、关键词、蜘蛛、统计、插件和搜索引擎推送 - 素材上传、分类、网格/列表视图、预览和右键管理 ### 内容与创作 - 文章、新闻、案例、产品内容和博客使用独立发布标签页 - 商品发布使用独立标签页,支持基础信息、价格库存、规格、详情、交付售后和 SEO - Tiptap 富文本编辑器支持标题、列表、引用、对齐、颜色、高亮、任务列表、图片、链接和表格 - Univer 在线电子表格支持单元格编辑、公式、格式和工作簿操作 - 海报设计、图片剪裁、头像/封面上传、图片预览和多模式视频播放器 ### 数据和 AI - 销售看板 - SaaS 数据大屏 - 电商运营大屏 - 工厂生产大屏 - ECharts 动态图表和模拟实时数据 - AI 对话工作区、模型选择、提示词、知识文件入口、结构化输出和任务状态 - 大屏支持独立窗口与浏览器全屏 ### 组件实验室 组件实验室收录按钮、表单、选择器、日期时间、上传、反馈、导航、数据展示、业务组件和 AI 控件等 100 余种视觉/交互示例。开发文档另外记录了 **45 个源码级真实导出组件**,组件名、来源、参数、返回值、依赖、调用示例和注意事项与当前代码同步。 ## 技术栈 | 技术 | 用途 | 许可证 | | --- | --- | --- | | React / React DOM | 页面、状态和组件渲染 | MIT | | Vite | 开发服务和生产构建 | MIT | | Tiptap | 富文本编辑器 | MIT,具体以各包声明为准 | | Univer | 在线电子表格 | Apache-2.0 | | Apache ECharts | 看板和数据大屏 | Apache-2.0 | | Lucide React | 界面图标 | ISC | | Swiper | Banner 和触摸轮播 | MIT | | Video.js | 视频播放器 | Apache-2.0 | | node-qrcode | 二维码生成 | MIT | | china-area-data | 全国省市区县级联数据 | MIT | 第三方依赖仅按各自许可证使用,不因本项目授权而改变。更新依赖前请重新核对许可证和安全公告。 ## 环境要求 - Windows、macOS 或 Linux - Node.js `20.19+` 或 `22.12+` - npm `10+` - Chrome、Edge、Firefox 或 Safari 的较新版本 - 生产部署需要 Nginx、Apache、Caddy 或支持单页应用回退的静态托管服务 ## 快速开始 ```bash git clone https://gitee.com/yimiaoOpen/ym-admin.git cd ym-admin npm install npm run dev ``` 默认开发地址为: ```text http://127.0.0.1:5173 ``` 默认演示账号: ```text 账号:yimiaonet 密码:yimiaonet.com ``` 账号密码只用于本地演示。当前前端使用 Web Crypto 的 SHA-256 摘要进行演示校验,并在连续失败 5 次后锁定 30 秒;这不是生产登录方案。生产环境必须由后端使用 Argon2、bcrypt 等密码哈希算法,配合 HTTPS、验证码、限流、会话失效、权限校验和登录审计。 ## 截图预览 ![输入图片说明](docs/ScreenShot_2026-08-02_023842_458.png) ![输入图片说明](docs/ScreenShot_2026-08-02_023850_051.png) ![输入图片说明](docs/ScreenShot_2026-08-02_023857_290.png) ![输入图片说明](docs/ScreenShot_2026-08-02_023907_476.png) ![输入图片说明](docs/ScreenShot_2026-08-02_023917_578.png) ![输入图片说明](docs/ScreenShot_2026-08-02_024026_707.png) ![输入图片说明](docs/ScreenShot_2026-08-02_023934_786.png) ## 常用命令 ```bash # 启动开发服务 npm run dev # 构建生产文件 npm run build # 构建二级目录演示包(/ym-admin/) npm run build:demo # 本地预览二级目录演示包 npm run preview:demo # 本地预览生产构建 npm run preview # 检查生产依赖安全公告 npm audit --omit=dev --audit-level=high ``` 生产构建输出到 `dist/`。仓库不提交 `node_modules/`、`dist/`、Playwright 临时文件和本地输出文件。 ## 路由规则 项目使用浏览器 History API 实现可恢复地址: ```text /admin/home /admin/framework /admin/docs /admin/users?view=用户列表 /admin/product?view=商品管理 /admin/site?view=文章发布 /admin/screen?view=SaaS%20数据大屏 ``` 一级页面放在路径中,二级菜单放在 `view` 查询参数中。切换页面会调用 `history.pushState`,浏览器前进/后退通过 `popstate` 恢复。部署时必须把不存在的静态路径回退到 `index.html`,否则刷新 `/admin/docs` 会得到服务器 404。 ## 目录结构 ```text ym-admin/ ├─ public/ 静态资源、验证码背景、地图和客服二维码 ├─ src/ │ ├─ components/ │ │ ├─ AdminPrimitives.jsx 弹窗、日期范围、分页、水印 │ │ ├─ AdvancedWorkspace.jsx 表单设计、电子表格、编辑器、登录注册 │ │ ├─ EnterpriseModules.jsx 登录、会员、财务、商品、菜单、素材、设置、大屏 │ │ ├─ PlatformExtensions.jsx 发布、看板、AI、支付、框架、定价和错误页 │ │ └─ ReusableComponents.jsx 表格、抽奖、验证码、剪裁、视频和动画 │ ├─ framework-guide.js 框架介绍和开发文档的统一真实数据源 │ ├─ main.jsx 应用外壳、路由、菜单和业务页面 │ └─ styles.css 全局主题、布局和业务页面样式 ├─ docs/COMPONENTS.md 45 个导出组件手册 ├─ docs/DEPLOYMENT.md 构建、Nginx、宝塔和上线检查 ├─ CONTRIBUTING.md 参与开发规范 ├─ SECURITY.md 安全边界和漏洞报告 ├─ LICENSE 公开源码学习许可 └─ vite.config.js Vite 配置 ``` ## 组件调用入口 项目目前没有发布独立 npm 组件包,组件直接从源码模块导入: ```jsx import { BusinessModal, DateRangePicker, PaginationBar } from './components/AdminPrimitives' import { FormDesigner, SpreadsheetWorkspace } from './components/AdvancedWorkspace' import { MemberCenter, MaterialLibrary } from './components/EnterpriseModules' import { EnhancedRichEditor, SalesDashboard } from './components/PlatformExtensions' import { ImageCropper, SliderCaptcha, VideoPlayer } from './components/ReusableComponents' ``` 基础使用方式: ```jsx import { useState } from 'react' import { BusinessModal, DateRangePicker } from './components/AdminPrimitives' export default function Example() { const [open, setOpen] = useState(false) const [range, setRange] = useState({ start: '', end: '' }) return ( <> {open && ( setOpen(false)} footer={} > )} ) } ``` 完整参数和 45 个组件清单见 [组件手册](./docs/COMPONENTS.md),后台内也可打开“系统 -> 开发文档”搜索组件并复制调用代码。 ## 45 个真实导出组件 | 分类 | 组件 | | --- | --- | | 基础弹窗与数据 | `BusinessModal`、`DateRangePicker`、`PaginationBar`、`WatermarkLayer`、`WatermarkConfigurator` | | 通用交互 | `DataTableBuilder`、`LotteryWheel`、`SliderCaptcha`、`ImageCropper`、`VideoPlayer`、`ContextMenuArea`、`AnimatedIconGallery`、`AnchorNavigator`、`AnimationCodeLab`、`CommonControlsDemo`、`ModalShowcase` | | 高级工作区 | `FormDesigner`、`SpreadsheetWorkspace`、`RichTextEditor`、`AuthCenter` | | 企业模块 | `LoginGateway`、`AccountDropdown`、`MemberCenter`、`FinanceCenter`、`ProductOperations`、`MenuTreeManager`、`MaterialLibrary`、`EnterpriseSettings`、`AppearanceDrawer`、`EnterpriseDataScreen` | | 发布与编辑 | `EnhancedRichEditor`、`PublishingWorkspace`、`ProductPublishingWorkspace` | | 数据可视化 | `SalesDashboard`、`ScreenHub`、`BigDataScreen` | | 框架页面 | `FrameworkIntroPage`、`PricingPage`、`FullErrorPage` | | 模板与 AI | `TemplateShowcase`、`AIComponentLab`、`AIChatWorkspace` | | 支付与安全 | `PaymentSettings`、`AdminSecurityCenter` | | 内容管理 | `BlogListPage` | ## 主题和布局 主题通过 `document.documentElement.dataset.theme` 和 CSS 变量控制,当前主题: - `indigo`:墨蓝紫 - `ocean`:海盐青 - `sunset`:日落橙 - `forest`:松石绿 布局通过 `data-layout` 控制,主题设置是项目中唯一保留的右侧抽屉。普通新增、编辑、查看、确认操作统一使用居中弹窗;文章和商品发布使用独立工作标签页。 常用变量位于 `src/styles.css`: ```css :root { --accent: #5b6cff; --accent-soft: #eef0ff; --surface: #ffffff; --surface-subtle: #f7f8fb; --text: #1b2433; --muted: #7a8597; --line: #e7eaf0; } ``` 新增组件应优先使用这些变量,避免把固定颜色散落到业务代码中。图标按钮必须提供 `title` 或 `aria-label`,表单必须有可见标签,弹窗必须提供关闭入口。 ## 本地存储说明 当前演示会写入下列浏览器存储: | 键名 | 用途 | 生产建议 | | --- | --- | --- | | `yimiao-admin-session` | 当前登录会话,保存在 `sessionStorage` | 替换为服务端 HttpOnly Cookie | | `yimiao-theme` | 当前主题 | 可继续本地保存或同步用户偏好 | | `yimiao-layout` | 当前布局 | 可继续本地保存或同步用户偏好 | | `yimiao-mode` | 日间/夜间模式 | 可继续本地保存 | | `yimiao-watermark-settings` | 全局水印配置 | 企业策略应由服务端下发 | | `yimiao-admin-profile` | 演示个人资料 | 替换为用户资料接口 | | `yimiao-website-content` | 官网内容演示数据 | 替换为 CMS 数据库和版本接口 | | `yimiao-commerce-products-v2` | 商品演示数据 | 替换为商品、SKU、库存服务 | | `yimiao-blog-posts` | 博客演示数据 | 替换为内容管理接口 | | `yimiao-admin-config` | 系统配置演示数据 | 敏感配置只允许服务端保存 | 清理浏览器站点数据会删除这些演示记录。浏览器隐私模式、存储禁用或容量不足时,项目会尽量保持当前页面可用并给出错误通知,但数据无法持久化。 ## 生产后端接入清单 ### 身份与权限 1. 前端提交账号、密码和验证码到 HTTPS 登录接口。 2. 后端校验密码哈希、状态、IP 限流和多因素认证。 3. 会话使用 `HttpOnly`、`Secure`、`SameSite` Cookie。 4. 后端每个接口校验身份、角色、操作权限和资源归属。 5. 管理员新增、禁用、导出、支付和签章必须记录审计日志。 ### 电子合同与公章 1. 企业和签署人完成真实身份认证。 2. 公章必须有企业授权、证书归属和使用审批记录。 3. 合同原文生成稳定文件摘要,签署后不可静默修改。 4. 服务端接入合规电子签服务、CA 证书和可信时间戳。 5. 记录签署主体、时间、IP、设备、意愿认证、证书链和文件哈希。 6. 前端的红色印章和手写签名只用于界面预览,不能证明法律效力。 ### 在线报价单 1. 报价版本、有效期、税率、币种和明细由服务端保存。 2. 客户确认操作生成不可抵赖的确认记录。 3. 过期报价在服务端拒绝确认,不只依赖前端倒计时。 4. 报价转合同必须保留来源版本和变更记录。 ### 支付、订单和库存 1. API Key、商户私钥、证书和回调密钥禁止写入前端。 2. 金额使用最小货币单位整数保存,避免浮点误差。 3. 支付状态只信任服务端验签回调。 4. 库存扣减、订单状态和资金流水使用数据库事务和幂等键。 ### AI 和文件上传 1. AI 密钥只保存在服务端,通过服务端流式转发模型响应。 2. 知识文件按租户和用户隔离,限制类型、大小和数量。 3. 上传文件进行 MIME、扩展名、大小、病毒和内容检查。 4. 富文本 HTML 在服务端按白名单清洗,防止跨站脚本攻击。 5. 图片、视频和文档使用对象存储,Base64 只用于小型本地预览。 ## 构建体积说明 Tiptap、Univer、ECharts、全国行政区数据和大屏模块功能较完整,因此生产包体积较大。当前构建会提示部分分包超过 500 kB,属于已知的性能优化项,不影响构建成功。正式项目建议: - 对表格中心、富文本、大屏和视频模块使用 `React.lazy` 按路由加载; - ECharts 统一改为按需导入,避免静态和动态导入并存; - 全国行政区数据按省份拆包或通过接口查询; - Nginx 开启 Brotli 或 gzip 和长期静态缓存; - 在真实低端手机和弱网环境测试首屏、切页和内存占用。 ## 浏览器与移动端注意事项 - 全屏、剪贴板、摄像头、通知等能力需要 HTTPS 或本机安全上下文,并且必须由用户点击触发。 - 新窗口数据大屏可能被浏览器拦截,按钮事件中应直接调用 `window.open`。 - 视频跨域资源需要正确的 CORS 响应头。 - 图片剪裁使用 Canvas,跨域图片需允许匿名跨域,否则 Canvas 无法导出。 - H5 端重点测试 iOS Safari 的动态视口、输入法顶起、文件选择和安全区域。 - 文档页小屏采用纵向滚动组件目录,不使用页面内横向菜单。 ## 部署 构建: ```bash npm install npm run build ``` 将 `dist/` 发布到站点根目录,并配置单页应用回退。Nginx 示例: ```nginx server { listen 80; server_name admin.example.com; root /www/wwwroot/ym-admin/dist; index index.html; location / { try_files $uri $uri/ /index.html; } location /assets/ { expires 30d; add_header Cache-Control "public, immutable"; } } ``` 生产环境还应启用 HTTPS、安全响应头、日志轮转、备份、监控和发布回滚。宝塔、Nginx、子目录部署、缓存与故障排查见 [部署手册](./docs/DEPLOYMENT.md)。 ## 常见问题 ### 刷新二级页面出现 404 原因是服务器没有配置 History API 回退。把未知路径回退到 `index.html`,不要只上传文件后直接访问 `/admin/docs`。 ### 登录后刷新又回到登录页 演示会话保存在 `sessionStorage`,关闭标签页后可能失效。生产环境应使用后端会话 Cookie。 ### 本地数据没有同步给其他用户 `localStorage` 只属于当前浏览器和当前域名。多人协作必须接数据库和服务端 API。 ### 电子公章是否具有法律效力 没有。前端印章只是视觉组件。法律效力取决于实名认证、授权、数字证书、签名算法、可信时间戳、签署意愿证据、文件完整性和适用法律,必须接入合规服务。 ### 为什么生产包较大 在线表格、编辑器、全国行政区和大屏库本身体积较大。功能正常,但生产项目应按页面懒加载和按需引入。 ### 如何新增组件文档 在组件模块导出组件后,同步向 `src/framework-guide.js` 的 `FRAMEWORK_COMPONENT_DOCS` 添加一条记录。框架介绍页和开发文档页会读取同一数据源,避免两处说明不一致。 ## 参与开发 请阅读 [CONTRIBUTING.md](./CONTRIBUTING.md)。提交前至少执行: ```bash npm run build npm audit --omit=dev --audit-level=high ``` 界面改动还需要完成桌面端和手机端浏览器验收,检查控制台错误、横向溢出、弹窗滚动、键盘焦点和主要交互。 ## 授权 本项目采用 [YM-Admin 公开源码学习许可 1.0](./LICENSE),不是 OSI 认可的开源许可证。 - 免费版:用于学习、评估和非商业内部测试,必须保留“一秒互联公司 www.yimiaonet.com”技术支持与版权信息。 - 商业授权:199 元,永久授权,具体范围以授权凭证为准。 - 定制版:按后端、数据库、电子签章、支付、私有部署和业务范围单独报价。 - 第三方依赖继续受各自许可证约束。 商业授权和定制开发请访问:[https://www.yimiaonet.com/](https://www.yimiaonet.com/) --- 技术支持:[一秒互联公司 www.yimiaonet.com](https://www.yimiaonet.com/)