Hermes Agent
bf97672677
fix: use /api/ path for export endpoints (ahserver url2file compatibility)
2026-06-15 16:34:58 +08:00
Hermes Agent
d98ef560c0
feat: add Excel export for leads and content
...
- export_leads.dspy: generate xlsx with openpyxl, base64 return
- export_content.dspy: generate xlsx for content list
- admin.ui: add export section with download buttons
- load_path.py: register export endpoints for RBAC
- pyproject.toml: add openpyxl dependency
2026-06-15 16:24:02 +08:00
Hermes Agent
4495e9589b
refactor: 从独立webapp重构为纯Sage模块
...
- cms/: Python包(合并原entcms+dingdingflow)
- init.py: 791行,load_cms()注册所有CRUD+审批函数
- dingtalk_client.py: 钉钉API客户端
- models/: 7个表定义JSON(5个CMS+2个DD)
- json/: 7个CRUD定义JSON
- wwwroot/: 管理后台CRUD页面和API(37个dspy)
- init/data.yaml: 模块初始数据(appcodes/appcodes_kv/分类/栏目/配置)
- scripts/load_path.py: RBAC权限配置
- pyproject.toml: pip-installable包定义
- 删除: app/, conf/, build.sh, entcms/, dingdingflow/等webapp文件
- 数据库访问统一为DBPools()+_get_dbname()动态模式
2026-06-15 11:06:11 +08:00
f70e8e4d26
fix: 全面修复所有dspy文件和数据库访问模式
...
dspy文件修复(27个entcms + 10个dingdingflow):
- 删除所有import语句(dspy环境已预加载)
- 替换 sor = DBPools().sqlorContext() 为 async with db.sqlorContext() as sor:
- 替换 print(json.dumps()) 为 return
- 替换 uuid() 为 getID()
- 替换 datetime.datetime.now() 为 datetime.now()
- 修复 get_user() 缺少 await
- 删除shebang/docstrings等无关内容
- 修正缩进
Python模块修复:
- entcms/init.py: DBNAME从'entcms'改为'ocai_cms'
- app/global_func.py: get_module_dbname返回'ocai_cms'而非'sage'
- 所有函数使用 async with db.sqlorContext() as sor: 正确模式
2026-06-03 18:04:53 +08:00
7abdc336b7
fix(entcms): 重写所有数据库操作使用 async with context manager
...
_get_db() 返回的是 async context manager,不是 sor 对象。
所有函数都错误地直接调用 sor.R/C/U/D,导致 AttributeError。
修正为正确模式:
db = DBPools()
async with db.sqlorContext(DBNAME) as sor:
await sor.R('table', ns)
影响函数:
- cms_content CRUD (4个)
- cms_categories CRUD (4个) + get_category_options
- cms_leads CRUD (4个) + submit_lead
- cms_sections CRUD (4个) + get_visible_sections
- cms_site_config CRUD (4个) + get_site_config
- get_published_content, get_latest_news, get_content_detail
- submit_content_for_approval
2026-06-03 17:24:55 +08:00
2a49ed80d1
fix(entcms): 修正 DBPools 导入路径 from sqlor.dbpools
2026-06-03 17:19:10 +08:00
8c5cb3fe3f
fix: init_any_permissions.py 添加根路径 / 权限
...
RBAC检查原始请求路径,访问根路径时检查的是 '/' 而非 'index.ui'。
数据库需要有 '/' 路径的权限记录。
2026-06-03 17:13:36 +08:00
15a0d4b8bb
fix: 权限初始化脚本指定 SAGE_RBAC_DB=ocai_cms 避免数据库不匹配
2026-06-03 17:11:55 +08:00
208625415a
refactor: 统一wwwroot目录结构
...
- 将 entcms/wwwroot/* 移到 wwwroot/
- 将 dingdingflow/wwwroot/* 移到 wwwroot/dingdingflow/
- 更新 config.json 使用单一 wwwroot 映射
- 更新 init_any_permissions.py 扫描新路径
- 更新 init_superuser_permissions.py 用法说明
- 废弃 entcms/scripts/load_path.py 和 dingdingflow/scripts/load_path.py
- 更新 build.sh 构建步骤
- 更新 README.md 和 docs/architecture.md 目录说明
2026-06-03 16:34:00 +08:00
f57bb0b0af
fix: CMS completeness修复 — products.ui + 钉钉回调同步 + 文档路径
...
- P0: 新增 products.ui 产品架构页面
- P1: 实现钉钉审批回调→cms_content状态同步(approved→published, rejected→draft)
- P2: 修复 docs/architecture.md 路径(/entcms/* → /*),补充cms_sections表
- P2: 重命名 init_superuser.py → init_superuser_permissions.py 避免与scripts/冲突
- build.sh 更新构建后步骤说明
2026-06-03 16:16:05 +08:00
a4a885f638
feat: add init_any_permissions.py for auto-discovering wwwroot and bricks files
...
- Auto-scan entcms/wwwroot → / (recursive)
- Auto-scan dingdingflow/wwwroot → /dingdingflow (recursive)
- Auto-scan bricks/ → /bricks (recursive)
- Skip symlinks to external modules
- Skip .pyc, __pycache__, .git, .bak etc.
- Set 'any' role for all discovered files
2026-06-03 16:06:33 +08:00
2c96354656
bugfix
2026-06-03 15:55:57 +08:00
98aeb53d36
bugfix
2026-06-03 15:54:39 +08:00
5374aace8a
bugfix
2026-06-03 15:52:20 +08:00
d3d59d2068
bugfix
2026-06-03 15:48:54 +08:00
338b232b9b
feat: add appbase module permissions to superuser initialization
...
- Add appcodes_kv management (KV store)
- Add cron management
- Add appcodes management
- Add params management
- Add svgicon management
- Total 25 appbase paths for owner.superuser
2026-06-03 15:37:14 +08:00
0d624c73df
feat: add init_superuser.py for RBAC superuser permission initialization
...
- Initialize owner.superuser role with all CMS permissions
- Cover both entcms and dingdingflow modules
- Include content, categories, sections, site config, leads, and approvals
2026-06-03 15:02:28 +08:00
411ee81f39
fix: 添加应用根目录到sys.path,解决entcms模块导入问题
2026-05-27 18:46:07 +08:00
569c8e6715
refactor: CMS从Sage子模块重构为独立ahserver Web应用
...
架构变更:
- CMS作为独立进程运行(端口9090),不再嵌入Sage
- 使用ahserver框架,复用rbac模块做认证授权
- 所有模块共享sage数据库(配置在conf/config.json)
新增文件:
- app/cms.py: 独立Web应用主入口(webapp(init))
- app/global_func.py: 全局函数(get_module_dbname/UiWindow等)
- conf/config.json: 应用配置模板(数据库/路径/处理器/Redis)
- start.sh/stop.sh: 进程管理脚本
- pyproject.toml: 顶层Python包配置
路径重构(去掉/entcms前缀):
- 官网首页: /entcms/index.ui → /index.ui
- 管理后台: /entcms/admin.ui → /admin.ui
- API: /entcms/api/xxx.dspy → /api/xxx.dspy
- CRUD: /entcms/cms_content_list → /cms_content_list
- dingdingflow保持/dingdingflow前缀(映射子目录)
config.json路径映射:
- entcms/wwwroot → / (根路径)
- dingdingflow/wwwroot → /dingdingflow
- bricks/dist → /bricks
构建脚本(build.sh):
- 创建独立venv(py3/)
- 安装核心依赖(apppublic/sqlor/ahserver/bricks/rbac等)
- json2ddl生成CMS业务表DDL
- xls2ui生成CRUD UI
- 生成systemd服务文件
load_path.py更新:
- entcms: 所有路径去掉/entcms前缀
- dingdingflow: 保持/dingdingflow前缀
- 查找set_role_perm.py支持CMS和Sage两种环境
init_superuser.py更新:
- 支持CMS独立环境(自动检测py3/conf)
- 创建superuser角色并分配全部权限
2026-05-27 17:20:36 +08:00
52f4632dfc
feat: 角色权限体系 + 栏目管理
...
1. 角色体系(owner企业类型):
- superuser: 超级用户(继承全部权限)
- webmaster: 内容管理员(CRUD全部内容/分类/栏目/配置/线索)
- reviewer: 内容审核(查看内容+审批状态更新)
- supervisor: 主管(只读全部+线索管理+审批)
- customer-support: 客服(线索查看和更新)
- anonymous: 匿名用户(公开页面+提交线索)
2. 超级用户初始化脚本(scripts/init_superuser.py)
- 默认: admin/admin123
- 自动创建用户+分配owner.superuser角色
3. cms_sections栏目管理表:
- section_key: 栏目标识(hero/products/cases/news/cta/footer/float)
- display_config: 展示配置JSON(布局/列数/悬停效果)
- style_config: 样式配置JSON(颜色/渐变/边框)
- static_content: 静态内容(Hero标语/产品卡片/CTA文案)
- is_visible: 显示/隐藏控制
- sort_order: 栏目排序
4. cms_categories增加display_config字段(分类展示风格)
5. 初始化6个栏目数据(Hero/产品/案例/新闻/页脚/浮动入口)
6. 更新菜单和管理后台增加栏目管理入口
2026-05-27 16:57:00 +08:00
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