6c9d127759
fix(rbac): gen_sms_code.dspy falls back to test mode when sms_engine unavailable
2026-07-16 15:43:06 +08:00
bffd8b200d
fix(rbac): gen_sms_code.dspy calls real sms_engine.generate_sms_code() instead of TEST MODE stub
2026-07-16 15:40:51 +08:00
5d9292c6f6
fix: create_org兜底orgname为空时用id填充
2026-07-14 12:03:50 +08:00
cf4283ff0d
fix: align get_search_roleid + userrole alters to value/text fields matching index.ui
2026-07-13 12:59:36 +08:00
e1abe0bb71
fix: role dropdown filter by user org_type, add get_search_roleid.dspy
2026-07-13 11:27:21 +08:00
18913e7064
feat: domain-based reseller binding on registration + test SMS bypass
2026-07-10 11:24:25 +08:00
35750d5938
fix: 改用event.params.text直接取值,不用${text}占位符
2026-07-06 14:04:32 +08:00
a526a2222d
fix: newwindow缺referer_widget,改用script+window.open()
2026-07-06 14:03:58 +08:00
4a649aa98f
fix: urlwidget+PopupWindow无法替换${text},改用newwindow+window.open()
2026-07-06 14:00:41 +08:00
190e4e435f
fix: $ → ,多余$导致变量未被替换
2026-07-06 13:57:57 +08:00
acdabe4c33
扫码结果改为弹新窗口(PopupWindow)展示,不再替换当前页面
...
root.page_center → PopupWindow,扫码后弹出 85% 新窗口打开链接内容
2026-07-06 13:47:39 +08:00
2c986dca13
fix: CRUD endpoint return format - remove json.dumps, use widgettype format
2026-07-03 14:50:52 +08:00
1e2897d8d4
fix: enable/disable 后自动刷新表格 + 捕获真实错误
...
1. record_toolbar 添加 name 字段 (enable_user/disable_user)
2. 新增 binds: script bind 用 fetch 调用 dspy,成功后 render() 刷新
3. api/add_user.dspy + api/update_user.dspy 用 try/except 捕获真实异常
2026-06-29 15:50:18 +08:00
5ddbf299bf
feat: 注册 api/add_user.dspy 和 api/update_user.dspy RBAC 权限
2026-06-29 15:19:45 +08:00
ad601403cf
feat: users CRUD 定制 api — 新增/编辑客制化逻辑
...
不修改生成文件,改为 json/users.json 指定 custom URLs:
- new_data_url → /rbac/api/add_user.dspy
- update_data_url → /rbac/api/update_user.dspy
客制化修复:
1. 新增用户: created_at 默认当天日期
2. 新增/编辑: 清除 Tabular 发送的 _text 后缀字段
3. 编辑: 密码为空时不覆盖原密码
2026-06-29 15:12:33 +08:00
9472c0995f
Revert "fix: users CRUD — 三个修复"
...
This reverts commit 449a0415a5ffe4237fb118e17bcc38b1bba51876.
2026-06-29 15:10:17 +08:00
449a0415a5
fix: users CRUD — 三个修复
...
1. add_users.dspy: 新增用户时 created_at 默认设为当天日期
2. add/update: 清除 Tabular 发送的 _text 后缀字段
(user_status_text, orgid_text 等不是真实列,会导致 sor.U/C 失败)
3. update_users.dspy: 密码为空时从 ns 中移除,避免覆盖为空白
2026-06-29 14:46:58 +08:00
Hermes Agent
70a19238c1
feat: 注册时检查促销码并绑定客户归属关系
...
- register.dspy: 用户名密码注册后检查promo_code_id
- sms_register.dspy: 短信注册后检查promo_code_id
- code_login.dspy: 验证码登录/自动注册后检查promo_code_id
- phone_login.dspy: 手机登录/自动注册后检查promo_code_id
- 绑定失败只记日志不影响注册成功(try/except)
2026-06-24 00:56:33 +08:00
Hermes Agent
600fddced3
feat: add i18n translations (zh/en/jp/ko) for all modules
2026-06-19 15:01:37 +08:00
Hermes Agent
2ea45cd380
rbac: 完善信息弹窗修复双窗口+添加标题
2026-06-18 11:09:46 +08:00
Hermes Agent
947638853f
rbac: 完善信息Form使用value回填用户数据
2026-06-18 10:48:17 +08:00
Hermes Agent
cd29b276f7
fix: add login.css to any permissions
2026-06-15 13:55:09 +08:00
18251e3eae
fix: add favicon.ico and i18n_getmsgs to any permissions
2026-06-11 23:54:17 +08:00
d1b81c9a9f
fix: remove Sage dependency from load_path.py, use standard pattern
2026-06-11 23:41:10 +08:00
52cd71f861
feat: add user_status check on login, enable/disable toolbar, fix editexclouded for add user
2026-06-11 16:57:04 +08:00
cb9f8bbb4b
bugfix
2026-06-10 11:16:23 +08:00
12663a37e0
bugfix
2026-06-10 11:08:33 +08:00
f6027788b2
fix: login redirect to index.ui instead of userinfo.ui
...
After login success, redirect to the main page (/index.ui)
instead of just loading userinfo.ui into user_container.
This fixes the white screen after login.
2026-06-09 23:18:39 +08:00
587241b6a9
bugfix
2026-06-09 17:01:27 +08:00
62e1985ecb
bugfix
2026-06-09 16:58:15 +08:00
df212ea40d
bugfix
2026-06-09 16:52:12 +08:00
e453883b61
chore: exclude last_login_fail, last_login, sync_from from users edit form
2026-06-05 11:14:14 +08:00
002226d17c
fix: change created_at type from timestamp to date for proper Date control
2026-06-04 16:50:20 +08:00
5809a81646
debug: add hot_reload handler logging
2026-06-01 22:53:07 +08:00
b72a487df7
fix: use ServerEnv().userpermissions instead of new UserPermissions() in event handlers
2026-06-01 18:15:37 +08:00
ce7eb2a193
refactor: bind hot_reload event via EventDispatcher, add on_hot_reload to UserPermissions
2026-06-01 18:10:29 +08:00
c949a51f2e
fix: gen_sms_code.dspy handle both None return and exception from generate_sms_code
2026-05-31 12:26:55 +08:00
4038b7d0b9
fix: gen_sms_code.dspy catch exception and return actual error message
2026-05-31 11:56:46 +08:00
7f2c3d25dd
feat: 用户菜单添加完善信息功能 - 新增 edit_profile.dspy/save_profile.dspy - usermenu.ui 添加完善信息入口 - load_path.py 注册权限路径
2026-05-31 10:52:13 +08:00
26d1fd1447
feat: register_user 添加 customer.admin 角色,注册时同时分配 customer 和 admin 权限
2026-05-31 10:38:32 +08:00
c9dd80a484
fix: 暗色主题输入框颜色全局优化
...
- bricks.css: inputbox背景 #1E293B → #0F172A
- login.css: 同步更新保持一致
2026-05-30 14:32:11 +08:00
b0d6b59613
fix: 注册表单仅输入区域滚动,暗色主题输入框颜色优化
...
- 注册Tab结构: Text(固定) + VScrollPanel(仅Form) + Button(固定)
- 暗色主题输入框背景 #0f172a -> #1e293b,更协调
2026-05-30 14:27:33 +08:00
d1b3ca0914
fix: 修复登录弹窗三个显示问题
...
- 注册表单超出无滚动: 三个Tab内容均包裹VScrollPanel(scrollpanel)
- Form toolbar不可见: 滚动容器让submit/reset按钮可达
- 文本未国际化: title/label/otext均加i18n:true, archor纠正
- CSS: tabpanel flex布局, tabpanel-content flex:1+min-height:0
- PopupWindow cheight 28->30 给更多显示空间
2026-05-30 14:16:00 +08:00
36569c0e41
feat: 现代化登录/注册界面改造
...
- login.css: 全新现代化样式,支持亮/暗主题
- login.ui: 三Tab布局(密码登录/手机登录/注册),手机登录支持短信验证码
- sms_register.dspy: 短信验证注册后端,验证通过后自动注册并登录
- load_path.py: 添加 sms_register.dspy 到 any 权限
- 修复手机登录 setValue 调用 (上一轮已提交)
- 注册流程: 手机号+短信验证码+用户名+密码,短信验证通过后才允许注册
2026-05-30 14:08:11 +08:00
019e9702fc
fix: use setValue() on codeid field widget instead of direct value assignment
2026-05-30 13:36:54 +08:00
cec79caf88
fix: phone login form.setValue is not a function - use name_inputs direct value set
2026-05-30 13:35:07 +08:00
b532548d19
fix: keep previous rp_caches when DB returns empty result
...
sqlExe can return [] without raising an exception (bad connection,
cursor issue). When load_roleperms gets 0 records but had valid
cache before, keep the old cache instead of replacing with {}.
Prevents intermittent 403 from transient DB issues.
2026-05-30 11:34:13 +08:00
fbbe011a8d
fix: rp_caches race condition causing intermittent 403
...
load_roleperms() was setting self.rp_caches = {} before the async
DB query. During the await, other coroutines saw {} (not None),
skipped the load, and checked permissions against an empty dict,
causing intermittent 403 on random paths.
Fix: build in local dict first, assign atomically when complete.
2026-05-30 11:19:32 +08:00
c776c0b3b5
fix: rp_cache should reload from DB when cache is disabled
2026-05-30 10:19:00 +08:00
04e9b718db
fix: check_roles_path supports % wildcard alongside **
...
load_path.py scripts across modules register paths like '/module/api/%'
using SQL LIKE wildcard, but check_roles_path() only recognized '**' as
wildcard suffix. This caused all %-terminated paths to be treated as
exact matches, resulting in 403 for any sub-path.
Now both '/module/api/%' and '/module/api/**' work as prefix wildcards.
2026-05-29 23:12:22 +08:00