diff --git a/lawrisk/api/auth.py b/lawrisk/api/auth.py
index 6c44a24..eaeff25 100644
--- a/lawrisk/api/auth.py
+++ b/lawrisk/api/auth.py
@@ -55,6 +55,7 @@ def _scrub_user_payload(user: Dict[str, Any]) -> Dict[str, Any]:
"name": user.get("service_department_name"),
"code": user.get("service_department_code"),
"region_id": user.get("service_department_region_id"),
+ "region_name": user.get("service_department_region_name"),
"parent_id": user.get("service_department_parent_id"),
"phone": user.get("service_department_phone"),
"role": user.get("department_role"),
diff --git a/lawrisk/api/v2.py b/lawrisk/api/v2.py
index 963a2e7..96dacdf 100644
--- a/lawrisk/api/v2.py
+++ b/lawrisk/api/v2.py
@@ -275,11 +275,23 @@ def admin_create_user():
return jsonify({"success": False, "message": "用户名和密码均不能为空"}), 400
parent_department_id = (payload.get("parent_department_id") or "").strip() or None
service_department_id = (payload.get("service_department_id") or "").strip() or None
+ region_id = (payload.get("region_id") or "").strip() or None
department_phone = (payload.get("department_phone") or "").strip() or None
# 如果未显式绑定部门,则为该用户创建一个同名单位,并按父级决定层级
created_department: Optional[Dict[str, Any]] = None
if not service_department_id:
+ # 未显式指定区域时,继承父级部门的区域
+ if not region_id and parent_department_id:
+ try:
+ parent_dept = next(
+ (dept for dept in list_service_departments() if str(dept.get("id")) == parent_department_id),
+ None
+ )
+ if parent_dept:
+ region_id = parent_dept.get("region_id")
+ except Exception:
+ region_id = None
try:
dept_name = (payload.get("display_name") or username).strip() or username
dept_code = username.upper()
@@ -288,6 +300,7 @@ def admin_create_user():
code=dept_code,
phone=department_phone,
parent_id=parent_department_id,
+ region_id=region_id,
)
service_department_id = created_department.get("id")
except Exception as exc:
@@ -303,6 +316,7 @@ def admin_create_user():
service_department_id=service_department_id,
department_role=payload.get("department_role"),
parent_department_id=parent_department_id,
+ service_department_region_id=region_id,
service_department_phone=department_phone,
)
return jsonify({"success": True, "data": {"user": user, "department": created_department}})
@@ -508,6 +522,16 @@ def admin_create_service_department():
"description": payload.get("description"),
"grade": grade,
}
+ if not kwargs["region_id"] and kwargs["parent_id"]:
+ try:
+ parent_dept = next(
+ (dept for dept in list_service_departments() if str(dept.get("id")) == kwargs["parent_id"]),
+ None
+ )
+ if parent_dept:
+ kwargs["region_id"] = parent_dept.get("region_id")
+ except Exception:
+ kwargs["region_id"] = None
try:
department = create_service_department(name, code=code_token, **kwargs)
department_id = department.get("id")
diff --git a/lawrisk/services/auth_service.py b/lawrisk/services/auth_service.py
index bb4f0a6..9b928af 100644
--- a/lawrisk/services/auth_service.py
+++ b/lawrisk/services/auth_service.py
@@ -279,6 +279,7 @@ def _public_user_payload(user: Dict[str, Any]) -> Dict[str, Any]:
"phone": user.get("service_department_phone"),
"parent_id": user.get("service_department_parent_id"),
"region_id": user.get("service_department_region_id"),
+ "region_name": user.get("service_department_region_name"),
"role": user.get("department_role"),
}
created_at = user.get("created_at")
@@ -322,9 +323,11 @@ def get_user_by_username(username: str) -> Optional[Dict[str, Any]]:
sd.code AS service_department_code,
sd.phone AS service_department_phone,
sd.parent_id AS service_department_parent_id,
- sd.region_id AS service_department_region_id
+ sd.region_id AS service_department_region_id,
+ r.name AS service_department_region_name
FROM auth_users au
LEFT JOIN service_departments sd ON sd.id = au.service_department_id
+ LEFT JOIN regions r ON r.id = sd.region_id
WHERE au.username = %s
LIMIT 1
""",
@@ -359,9 +362,11 @@ def get_user_by_id(user_id: str) -> Optional[Dict[str, Any]]:
sd.code AS service_department_code,
sd.phone AS service_department_phone,
sd.parent_id AS service_department_parent_id,
- sd.region_id AS service_department_region_id
+ sd.region_id AS service_department_region_id,
+ r.name AS service_department_region_name
FROM auth_users au
LEFT JOIN service_departments sd ON sd.id = au.service_department_id
+ LEFT JOIN regions r ON r.id = sd.region_id
WHERE au.id = %s
LIMIT 1
""",
@@ -394,9 +399,11 @@ def list_users(include_inactive: bool = False) -> List[Dict[str, Any]]:
sd.code AS service_department_code,
sd.phone AS service_department_phone,
sd.parent_id AS service_department_parent_id,
- sd.region_id AS service_department_region_id
+ sd.region_id AS service_department_region_id,
+ r.name AS service_department_region_name
FROM auth_users au
LEFT JOIN service_departments sd ON sd.id = au.service_department_id
+ LEFT JOIN regions r ON r.id = sd.region_id
{where_clause}
ORDER BY au.created_at DESC
"""
@@ -419,6 +426,7 @@ def create_user(
service_department_id: Optional[str] = None,
department_role: Optional[str] = None,
parent_department_id: Optional[str] = None,
+ service_department_region_id: Optional[str] = None,
service_department_phone: Optional[str] = None,
) -> Dict[str, Any]:
username_clean = (username or "").strip().lower()
@@ -436,6 +444,7 @@ def create_user(
code=dept_code,
phone=(service_department_phone or "").strip() or None,
parent_id=(parent_department_id or "").strip() or None,
+ region_id=(service_department_region_id or "").strip() or None,
)
dept_token = created.get("id")
except Exception as exc:
diff --git a/static/super_admin.html b/static/super_admin.html
index e904acf..4760181 100644
--- a/static/super_admin.html
+++ b/static/super_admin.html
@@ -1185,6 +1185,7 @@
用户名 |
显示名 |
部门 |
+ 区域 |
角色 |
创建时间 |
操作 |
@@ -1214,6 +1215,11 @@
+