# 开元云科技官网系统架构 ## 项目概述 企业官网 + CMS内容管理 + 钉钉审批流程系统,基于Sage平台开发。 ## 模块组成 ### 1. entcms - 企业CMS系统 管理官网所有内容:新闻、案例、产品、Banner、商机线索。 **数据库表 (entcms)**: | 表名 | 用途 | |------|------| | cms_content | 统一内容表(新闻/案例/产品/Banner),带发布审批状态流 | | cms_categories | 内容分类(支持层级,按content_type分组) | | cms_leads | 商机线索(网站访客提交 + 未来AI抽取) | | cms_site_config | 站点配置(Hero标语、页脚信息等KV配置) | **公开页面 (any权限)**: - `/entcms/index.ui` - 官网首页(7个模块:导航/Hero/产品/案例/新闻/页脚/浮动入口) - `/entcms/news.ui` - 新闻列表 - `/entcms/news_detail.ui` - 新闻详情 - `/entcms/cases.ui` - 案例列表 **管理页面 (logined权限)**: - `/entcms/admin.ui` - 管理后台仪表盘 - `/entcms/cms_content_list` - 内容CRUD - `/entcms/cms_categories_list` - 分类CRUD - `/entcms/cms_leads_list` - 线索CRUD - `/entcms/cms_site_config_list` - 配置CRUD **内容审批流程**: 编辑创建内容(草稿) → 提交审批(status=pending) → 钉钉审批 → 审批通过(status=approved) → 发布(status=published) ### 2. dingdingflow - 钉钉审批流程 对接钉钉审批API,为CMS内容发布提供审批工作流。 **数据库表 (dingdingflow)**: | 表名 | 用途 | |------|------| | dd_approvals | 审批记录(关联业务类型和ID,记录钉钉审批实例ID) | | dd_approval_configs | 审批流程配置(按biz_type配置钉钉模板编码等) | **环境变量**: - `DINGTALK_APP_KEY` - 钉钉应用AppKey - `DINGTALK_APP_SECRET` - 钉钉应用AppSecret - `DINGTALK_AGENT_ID` - 钉钉应用AgentId - `DINGTALK_CALLBACK_TOKEN` - 钉钉回调Token **开发模式**: 缺少环境变量时自动使用mock响应,不影响CMS功能。 ## 技术栈 | 层 | 技术 | |----|------| | 前端 | bricks-framework (JSON UI) + 自定义CSS/JS | | 后端 | ahserver + sqlor + apppublic | | 认证 | rbac (角色权限控制) | | 基础设施 | appbase (公共函数) | | 审批 | 钉钉开放API (预留接口) | | AI能力 | 预留Agent接口(商机抽取) | ## 前端设计 ### 官网视觉规范 - 风格: 极简科技感(参考OpenAI官网) - 主色: #6C5CE7 (紫色) - 渐变: #6C5CE7 → #A29BFE → #74B9FF - 暗色背景: #0a0a0a - 卡片背景: #1A1A1A - 字体: Noto Sans SC - 最大宽度: 1100px - 响应式断点: 768px - 云宝形象: SVG线稿占位符 ### 官网页面结构 1. **导航栏** - 固定顶部,毛玻璃效果 2. **Hero区** - 品牌Slogan + 脉冲呼吸灯 + 双按钮 + 云宝占位 3. **1+N+X产品架构** - 3张可展开卡片 4. **成功案例** - 3列网格 + CTA横幅 5. **企业动态** - 2条最新新闻 + 查看全部链接 6. **页脚** - 版权信息 7. **浮动入口** - 云宝头像 + 联系面板(表单提交线索) ## 目录结构 ``` ~/repos/cms/ ├── entcms/ # CMS模块 │ ├── entcms/ │ │ ├── __init__.py │ │ └── init.py # 模块初始化 + ServerEnv注册 │ ├── wwwroot/ │ │ ├── index.ui # 官网首页 │ │ ├── news.ui # 新闻列表 │ │ ├── news_detail.ui # 新闻详情 │ │ ├── cases.ui # 案例列表 │ │ ├── admin.ui # 管理后台 │ │ ├── menu.ui # 管理菜单 │ │ ├── cms_styles.css # 官网样式 │ │ ├── cms_scripts.js # 官网交互脚本 │ │ └── api/ # 22个.dspy API文件 │ ├── models/ # 4个表定义JSON │ ├── json/ # 4个CRUD定义JSON │ ├── init/data.json # 初始化数据 │ ├── scripts/load_path.py # RBAC权限配置 │ └── pyproject.toml ├── dingdingflow/ # 审批模块 │ ├── dingdingflow/ │ │ ├── __init__.py │ │ ├── init.py │ │ └── dingtalk_client.py # 钉钉API客户端 │ ├── wwwroot/ │ │ ├── index.ui │ │ ├── menu.ui │ │ └── api/ # 10个.dspy API文件 │ ├── models/ # 2个表定义JSON │ ├── json/ # 2个CRUD定义JSON │ ├── scripts/load_path.py │ └── pyproject.toml ├── build.sh # 构建脚本 └── docs/ # 文档目录 ``` ## Sage集成步骤 ### 1. app/sage.py ```python from entcms.init import load_entcms from dingdingflow.init import load_dingdingflow # 在init()函数中: load_entcms() load_dingdingflow() ``` ### 2. build.sh ```bash for m in ... entcms dingdingflow ``` ### 3. RBAC权限 ```bash cd ~/repos/sage ./py3/bin/python ~/repos/cms/entcms/scripts/load_path.py ./py3/bin/python ~/repos/cms/dingdingflow/scripts/load_path.py ``` ### 4. 数据库 ```bash cd ~/repos/cms/entcms && cat mysql.ddl.sql | mysql -u root -p sage cd ~/repos/cms/dingdingflow && cat mysql.ddl.sql | mysql -u root -p sage ``` ### 5. 重启 ```bash cd ~/repos/sage && ./stop.sh && ./start.sh ```