cms/docs/architecture.md
yumoqing 5cfb0e867b feat: 开元云科技官网CMS系统初始版本
entcms模块:
- 4个数据表(cms_content/cms_categories/cms_leads/cms_site_config)
- 22个.dspy API(含公开API和data_filter)
- 4个公开页面(首页/新闻/案例)+管理后台
- 完整营销站点CSS/JS(暗色主题/渐变/动画/响应式)
- 云宝SVG线稿占位符
- RBAC权限配置

dingdingflow模块:
- 2个数据表(dd_approvals/dd_approval_configs)
- 10个.dspy API(含钉钉回调endpoint)
- 钉钉API客户端(环境变量配置,开发模式mock)
- 管理UI

文档: 架构设计/53条测试用例/开发日志
2026-05-27 15:44:26 +08:00

5.3 KiB
Raw Blame History

开元云科技官网系统架构

项目概述

企业官网 + 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

from entcms.init import load_entcms
from dingdingflow.init import load_dingdingflow
# 在init()函数中:
load_entcms()
load_dingdingflow()

2. build.sh

for m in ... entcms dingdingflow

3. RBAC权限

cd ~/repos/sage
./py3/bin/python ~/repos/cms/entcms/scripts/load_path.py
./py3/bin/python ~/repos/cms/dingdingflow/scripts/load_path.py

4. 数据库

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. 重启

cd ~/repos/sage && ./stop.sh && ./start.sh