566 Commits

Author SHA1 Message Date
a6ba382241 feat(tenant): multi-tenant domain routing endpoint + shell_theme dedup + dim_test path 2026-08-04 12:11:34 +08:00
447078a1b4 chore: untrack unrelated files 2026-08-01 15:35:44 +08:00
fcee64ba7e revert: remove hotspot module (moved to standalone repo) 2026-08-01 15:35:34 +08:00
c1785bfac9 refactor(hotspot): extract Python package from .dspy files 2026-08-01 12:13:05 +08:00
297a97974d feat(hotspot): real extraction engine — pluggable parsers + 11 builtins
- parser_config field in hotspot_source for per-source extraction rules
- Pluggable: json_path/css/regex/rss/builtin
- 11 builtin platform parsers (weibo/zhihu/baidu/toutiao/bilibili/douyin/36kr/github/hn/v2ex/rsshub)
2026-08-01 12:09:23 +08:00
64cc51cb6e feat(hotspot): comprehensive revamp — 6 tables, 3 fetch modes, 5-dim analysis
Database (3→6 tables):
- hotspot_source: support api/browser/crawler types with type-specific fields
- hotspot_schedule: cron/interval daemon config per source
- hotspot_fetch_log: per-run audit trail (status/duration/items/errors)
- hotspot_item: add heat_velocity, engagement/comment/share counts, sentiment
- hotspot_analysis: 5-dimension scoring (time/heat/content/propagation/audience)
- hotspot_alert: alert rules (heat threshold/velocity/sentiment triggers)

Fetch engine (3 modes):
- API: GET/POST + headers + Bearer auth + JSON extraction
- Browser: HTML title/link extraction + og:title fallback
- Crawler: recursive with depth/domain allowlist/link following

Analysis engine:
- Exponential decay model (7-day half-life)
- Auto-classify: emerging→rising→hot→cooling→expired
- 5-dimension scoring with detail JSON per dimension

Dashboard: 6 tabs + 7 stat cards + workflow guide
Permission paths: 42 paths registered (6 tables × 7 CRUD ops)
2026-08-01 11:14:58 +08:00
768544511c merge: resolve conflicts, keep hotspot module alongside remote changes 2026-08-01 10:46:29 +08:00
71ecb8fea1 feat: add hotspot radar module (热点雷达系统)
- Add hotspot_source/hotspot_item/hotspot_analysis table definitions
- Add MySQL DDL for all three tables with indexes
- Create hotspot dashboard UI (index.ui) with stats, tabs for CRUD
- Add DSPY endpoints: stats, fetch_now (RSS/API), analyze (auto-classify)
- Register paths in load_path.py with logined access
- Add '热点雷达' menu entry
2026-08-01 10:39:52 +08:00
ab79bea576 feat(load_path): register plaza_categories.dspy and plaza_providers.dspy endpoints 2026-07-30 16:13:55 +08:00
27dfc1b5c8 menu: replace old model lists with cockpit 模型广场, add 3 new llmage paths
- Replaced '供应商模型列表'+'模型列表' sub-items with single '模型广场'
  pointing to /llmage/model_plaza.ui
- Added 3 new paths to load_path: model_plaza.ui, plaza_model_cards.ui,
  api/get_plaza_models.dspy
2026-07-28 18:24:05 +08:00
7dc17f8437 i18n: move bricks last in merge order for Tabular translation priority
All business modules overwrite common keys (Submit/Reset/Cancel)
with English→English, erasing bricks' zh translations. Moving
bricks to end of merge priority ensures framework built-in
strings always win.
2026-07-27 12:13:00 +08:00
d87545abfe build: remove dashboard_for_sage, fully replaced by sage_datamart 2026-07-27 11:27:08 +08:00
43f63478b7 build: add sage_datamart to module list for merge_i18n 2026-07-27 11:18:07 +08:00
cf88984a09 fix: skip comment lines in load_path.py paths parsing
Lines starting with # were parsed as path+role, causing
'#'.split() = ['#','sage_datamart'], where 'sage_datamart'
isn't 'any'/'logined'/'anonymous' and has no '.',
crashing add_roles_perm at role.split('.')
2026-07-27 10:55:20 +08:00
3290fd959e feat: sage_datamart 全量路径添加 load_path 权限
47个 UI/API/cron 路径注册,menu.ui=any,其余=logined
2026-07-25 18:02:23 +08:00
d88f09b3c4 feat: llmage上线检查子页面添加load_path权限
check_model_record, check_date_status, check_upapp, check_uapi,
check_uapiio, check_llm_api_map, check_pricing_program,
check_pricing_data
2026-07-24 23:46:45 +08:00
2d0816f3ff fix Sortable.min.js path to tenant dir (bypass RBAC 401) 2026-07-23 16:03:02 +08:00
9ca9e007e7 load Sortable.min.js in index_carousel for drag-drop widgets 2026-07-23 15:58:52 +08:00
275585abda tokentest static landing: modular top/center/bottom + carousel + flip cards + zh/en/jp/ko + login redirect 2026-07-23 15:02:28 +08:00
6046f40af4 merge_i18n: also search pkgs/ for module i18n dirs 2026-07-22 14:26:53 +08:00
36c714ebc1 fix: restore second 'for m in' line accidentally deleted in 44d2a8c6 2026-07-22 13:32:04 +08:00
7bb2f9b4b5 api_doc.ui: request.args.get('lang') -> params_kw._lang 2026-07-21 14:55:14 +08:00
2f715296a2 bugfix 2026-07-21 14:30:22 +08:00
fcf4bee7ef bugfix 2026-07-21 14:27:46 +08:00
b3827e7bed bugfix 2026-07-21 14:01:15 +08:00
d2282c22c8 bugfix 2026-07-21 14:00:38 +08:00
7d50586964 docs: 迁移API文档从dashboard_for_sage到docs/,支持多语言(api_doc_{lang}.md) 2026-07-21 13:39:27 +08:00
4e903c0f1b 菜单: 仪表盘从dashboard_for_sage切换为sage_datamart(客户+分销商) 2026-07-21 13:13:50 +08:00
73ee108cab feat: add tenant landing page with multi-tenant support
- Add /tenant/index.ui using bricks framework (no inline styles)
- Use Image widget for all images (logo, hero, case studies)
- Register /tenant and /tenant/index.ui routes as 'any' permission
- Include responsive CSS with tenant- prefix to avoid conflicts
- Login button redirects to /rbac/user/login.ui
- Support multi-tenant customization via ?tenant=xxx parameter
2026-07-20 14:41:17 +08:00
a53e211c1d feat: add sage_datamart ETL crontab entries (sync/aggregate/provider_cost) 2026-07-20 10:49:28 +08:00
76fca12d67 feat(unipay): register transfer_info.ui in load_path 2026-07-15 18:17:03 +08:00
7d294204c4 fix: 客户菜单移除租户管理入口 2026-07-15 16:02:34 +08:00
a87942fb34 bugfix 2026-07-14 15:01:18 +08:00
db43d5aca3 bugfix 2026-07-14 15:00:37 +08:00
2635d22cc9 fix: monkey-patch get_business_date to use initialized db, not empty DBPools() 2026-07-14 14:31:13 +08:00
0f25f5d7de fix: backend_accounting monkey-patch _get_db to use initialized DBPools instance 2026-07-14 14:26:09 +08:00
6142ce8630 rbac: /download/** → logined (需登录下载) 2026-07-14 13:28:50 +08:00
bc9794b770 build.sh: add daily forex rate fetch cron (8:00) 2026-07-14 12:09:13 +08:00
ac2f691e1b menu: add 自由客户分配 + 客户再分配 to global_menu 2026-07-14 10:33:28 +08:00
963953ae15 bugfix 2026-07-13 15:48:05 +08:00
6ce352b687 bugfix 2026-07-13 15:46:30 +08:00
1e745b79d0 rbac: register get_search_roleid.dspy 2026-07-13 11:30:53 +08:00
850ede92ac fix: add /appbase/get_icon.dspy to RBAC logined 2026-07-12 23:03:35 +08:00
42548faec2 fix: add RBAC for discount setting UI paths 2026-07-12 10:51:29 +08:00
1cde9f9534 fix: add RBAC for sub_distributor admin dspy endpoints 2026-07-10 12:15:47 +08:00
a46ca8e5da feat: add globe, setting, userrole SVG icons for menu 2026-07-10 12:02:12 +08:00
564e57d063 fix: add missing SVG icons (globe, setting, userrole) to RBAC any 2026-07-10 12:01:04 +08:00
67934c6767 fix: restructure menu permissions by role
- 用户管理: *.admin roles (any role with .admin suffix)
- 租户管理: reseller.operator or owner.superuser
- 系统权限管理: owner.superuser only
- 基础配置: owner.superuser only
2026-07-10 11:53:27 +08:00
04dbc7abcd fix: add ensure_* dspy paths + supply_contracts.svg to RBAC 2026-07-10 10:37:27 +08:00
6b2a787102 fix: add supplychain SVG image paths to load_path.py (any role) 2026-07-10 10:27:49 +08:00