11475d31c3
feat(balance): invalidate llmage Redis balance cache after recharge
2026-08-04 18:36:10 +08:00
16fdf90513
fix: billing.ui 查询按钮 urlwidget 传参,修复点击无反应
2026-07-17 17:59:09 +08:00
c0b91ec050
Revert "fix: billing.ui 查询按钮改用 urlwidget 传参,修复点击无反应"
...
This reverts commit ebac31f5877a97166dd13f0bcfd11d009c2b612a.
2026-07-17 17:40:01 +08:00
ebac31f587
fix: billing.ui 查询按钮改用 urlwidget 传参,修复点击无反应
2026-07-17 17:37:33 +08:00
da4b0877c8
fix(accounting): remove date column, sort by timestamp, direction 借/贷
2026-07-17 16:05:05 +08:00
b8541d6730
fix(accounting): remove cheight from Tabular for auto row height
2026-07-17 15:50:43 +08:00
78345c758c
fix(accounting): use relative URL /accounting/billing_download.dspy to avoid Jinja2 escaping
2026-07-17 15:49:49 +08:00
277e0a7aec
fix(accounting): use single quotes in CSS selector to avoid JSON escaping issues
2026-07-17 15:48:44 +08:00
3cbde03d6e
fix(accounting): use DOM querySelector for date values instead of getWidgetById
2026-07-17 15:47:29 +08:00
696c1b9432
fix(accounting): revert acc_dir to raw 0/1 to avoid charset issues
2026-07-17 15:43:53 +08:00
07086034be
perf(accounting): remove summary from billing, fix acc_dir 0=借/1=贷, add DB index
2026-07-17 15:35:03 +08:00
8976ab6d90
fix(accounting): summary shows #shortid only, remove redundant subject prefix
2026-07-17 15:21:37 +08:00
515059db9f
fix(accounting): human-readable summary — subject_name #short_id instead of raw UUIDs
2026-07-17 15:20:37 +08:00
1152e02a27
perf(accounting): single query with window functions instead of two separate scans
2026-07-17 15:17:56 +08:00
6986ade835
fix(accounting): use Text widget instead of Button for download
2026-07-17 15:14:34 +08:00
03cb4049f4
fix(accounting): add padding/borderRadius to download button, remove HBox height constraint
2026-07-17 15:13:08 +08:00
e125f6ab8d
fix(accounting): use bricks-native bgcolor/color instead of css for download button
2026-07-17 15:12:10 +08:00
d4e32a2292
fix(accounting): wire up download button, fix LEFT JOIN in download DSPY
2026-07-17 15:11:16 +08:00
9a6723378b
fix(accounting): billing.dspy — keep page in ns for Tabular paging, extract DictObject correctly
2026-07-17 14:48:07 +08:00
4ef0808004
fix(accounting): billing.dspy — remove 'page' from ns to prevent sor.sqlExe auto-paging return DictObject
2026-07-17 14:44:27 +08:00
31c348878a
fix(accounting): billing.dspy — convert DictObject to list when sor.sqlExe returns non-list
2026-07-17 14:43:27 +08:00
0e750b6d31
debug(accounting): add type logging for billing rows
2026-07-17 14:41:22 +08:00
91609f3606
fix(accounting): billing query uses LEFT JOIN subject to avoid dropping rows with missing subject
2026-07-17 14:39:52 +08:00
950df9a4c2
bugfix
2026-07-16 18:36:12 +08:00
47844253fe
fix(billing): separate ns for stats query, avoid sqlor ns mutation
2026-07-16 17:32:05 +08:00
1ffdda5ffe
fix(billing): add acc_date to aggregate query for sqlor ORDER BY
...
sqlor wraps every sqlExe with row_number() over(order by acc_date desc).
Aggregate queries without acc_date in SELECT fail with:
Unknown column 'acc_date' in 'ORDER BY'
Fix: add min(acc_date) as acc_date to satisfy sqlor wrapper.
2026-07-16 17:30:52 +08:00
fba38804de
fix(billing): submit_text→submit_label, wid→self, fix indentation
...
- submit_label is the correct InlineForm option (not submit_text)
- Use wid:self instead of explicit widget id
- binds was incorrectly indented inside options
2026-07-16 16:59:51 +08:00
f7f9581cd9
fix(billing): InlineForm target can't find sibling Tabular
...
InlineForm and Tabular are siblings in the same VBox. Default
getWidgetById() searches downward from the source widget, missing
siblings. Use 'app.' prefix to resolve from root.
2026-07-16 16:28:25 +08:00
a65422d06b
fix: move fetch_forex_rates to PATHS_ANY for cron access
2026-07-14 10:44:58 +08:00
f9cb644e07
fix: currency/exchange_rate DDL 加 utf8mb4_unicode_ci 防止 collation mismatch
2026-07-10 11:40:03 +08:00
8f09fc43df
fix: remove updated_at from exchange_rate INSERT — column not yet added
2026-07-09 11:49:10 +08:00
5f752a6287
feat: BOC forex rate fetcher — /api/fetch_forex_rates.dspy
2026-07-09 11:46:35 +08:00
898c215f9d
chore: update migration SQL for all 5 DBs + RBAC for currency/exchange_rate CRUD
2026-07-07 17:44:47 +08:00
3f6c71b4d5
feat: multi-currency support — currency/exchange_rate tables + migration
2026-07-07 15:43:01 +08:00
b95a57fd34
fix: submit改用method:render,零JS代码
2026-07-01 11:56:49 +08:00
5b9619c850
fix: InlineForm submit绑定修正,wid+getWidgetById替代this
2026-06-30 17:52:22 +08:00
60e9e3c9b3
fix: Form→InlineForm, type→uitype:date, flex+cheight增大显示
2026-06-30 17:39:20 +08:00
a7d1aa170e
fix: billing.ui用{% set %}变量替代"转义,避免Jinja2报错
2026-06-30 17:24:20 +08:00
d3310bfcc1
fix: 修正刷新目标为 app.sage_main_content
...
Sage 主内容区 ID 是 sage_main_content 而非 main_content。
global_menu.ui 确认: target = app.sage_main_content
2026-06-29 13:24:43 +08:00
982b0ad7a7
fix: 授信表单提交成功后自动刷新客户额度管理页面
...
set_credit_form.ui 添加 submited 事件绑定:
Form 提交成功 → 替换 main_content 为最新 credit_manage.ui
PopupWindow 同时因 dismiss_events:["submited"] 自动关闭
适用于新增授信和调整授信两个场景
2026-06-29 13:18:44 +08:00
bda9e7fc00
feat: credit_limit 加 grant_orgid 授予机构字段,支持多租户
...
credit_limit 新增 grant_orgid 字段,区分「客户所属机构(orgid)」
与「授予信用的机构(grant_orgid)」。多租户下,操作员为客户授信时:
- orgid = 客户机构ID
- grant_orgid = 操作员所属机构ID
修改:
- models/credit_limit.json: 加 grant_orgid 字段(VARCHAR(32), default 0) + 索引
- creditlimit.py:
get_credit_stats/get_all_customer_credits: WHERE orgid → WHERE grant_orgid
set_credit_limit: 加 grant_orgid 参数
- set_customer_credit.dspy: 写入时 orgid=客户orgid, grant_orgid=操作员orgid;
三处UPDATE同步加 grant_orgid
- credit_summary.dspy: WHERE orgid → WHERE grant_orgid
get_my_credit_list(客户自看)保持按 cl.orgid 过滤不变。
2026-06-29 12:46:49 +08:00
17554a1038
bugfix
2026-06-29 12:14:04 +08:00
b880673d79
fix: credit_manage 弹窗提交后不关闭导致重复提交
...
set_credit_form.ui 用了无效的 actiontype:'close' 来关闭弹窗,
表单提交后弹窗不关,操作员以为失败重复提交。
修复:
- set_credit_form.ui: 移除无效的 actiontype:'close' bind
- credit_manage.ui: popup_options.dismiss_events 加上'submited',
Form 提交成功后自动关闭弹窗(2处弹窗:新增授信 + 调整)
2026-06-29 11:55:39 +08:00
77fd157ab7
fix: revert get_credit_limit.dspy to CRUD auto-generated, add to .gitignore
...
The file was manually rewritten in cd26eb1 instead of modifying the
CRUD definition (json/credit_limit.json) and regenerating.
Changes:
- Reverted get_credit_limit.dspy to xls2crud-generated version
(includes JOINs for _text fields from model codes, DBFilter pattern)
- Re-generated index.ui via xls2crud
- Added auto-generated credit_limit files to .gitignore
(index.ui, get/add/update/delete_credit_limit.dspy)
- Removed them from git tracking
Future modifications should go through json/credit_limit.json
or models/credit_limit.json, then regenerate.
2026-06-29 11:35:24 +08:00
cd26eb1852
fix: 重写get_credit_limit移除default_filterjson; set_customer_credit加try/except防Duplicate 500
2026-06-29 10:55:12 +08:00
4ca0243506
fix: 新增授信改为UPSERT,避免accountid唯一约束冲突;uuid改为getID
2026-06-29 10:51:16 +08:00
31ef3531c8
fix: add dismiss_events to all PopupWindows in accounting module
...
All PopupWindows loading Form widgets now include 'dismiss_events: ["cancel"]'
so the Form Cancel button properly closes the popup instead of doing nothing.
- credit_manage.ui: '新增授信' and '调整' popups
- error_accounting.ui: '报告错帐' popup
- myaccounts.ui: '充值' and '明细' popups
Ref: bricks-framework skill — PopupWindow dismiss_events pattern
2026-06-29 10:48:29 +08:00
40f037c517
fix: proxy_recharge.ui Form Cancel button now resets form fields
...
The Form's Cancel button dispatches a 'cancel' event but no handler
existed. Added a bind to call reset_data() when Cancel is clicked,
which clears the form fields (username and amount inputs).
2026-06-29 10:43:31 +08:00
d8cfd06c4c
fix: 新增客户授信表单移除id字段,编辑时id通过URL query参数传递
2026-06-29 10:42:28 +08:00
Hermes Agent
503ae5434d
fix: credit_limit.orgid存操作员orgid非客户orgid
...
- accountid已关联客户,orgid应为创建者(reseller)的orgid
- 修复credit_manage.ui查询0条记录问题
2026-06-24 17:41:27 +08:00