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