feat(admin): 账号创建支持单位电话

This commit is contained in:
Codex Agent 2025-11-27 16:19:43 +08:00
parent 334aa77622
commit 34bce0f5df
3 changed files with 13 additions and 1 deletions

View File

@ -275,6 +275,7 @@ 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
department_phone = (payload.get("department_phone") or "").strip() or None
# 如果未显式绑定部门,则为该用户创建一个同名单位,并按父级决定层级
created_department: Optional[Dict[str, Any]] = None
@ -285,6 +286,7 @@ def admin_create_user():
created_department = create_service_department(
name=dept_name,
code=dept_code,
phone=department_phone,
parent_id=parent_department_id,
)
service_department_id = created_department.get("id")
@ -301,6 +303,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_phone=department_phone,
)
return jsonify({"success": True, "data": {"user": user, "department": created_department}})
except ValueError as exc:

View File

@ -419,6 +419,7 @@ def create_user(
service_department_id: Optional[str] = None,
department_role: Optional[str] = None,
parent_department_id: Optional[str] = None,
service_department_phone: Optional[str] = None,
) -> Dict[str, Any]:
username_clean = (username or "").strip().lower()
if not username_clean or not password:
@ -433,6 +434,7 @@ def create_user(
created = lic_repo.create_service_department(
name=dept_name,
code=dept_code,
phone=(service_department_phone or "").strip() or None,
parent_id=(parent_department_id or "").strip() or None,
)
dept_token = created.get("id")

View File

@ -1211,6 +1211,9 @@
<label>显示名称
<input type="text" name="display_name" placeholder="可选,用于展示">
</label>
<label>单位电话(可选)
<input type="text" name="department_phone" placeholder="用于自动创建的单位联系电话">
</label>
<label>上级单位(可选,不选则创建顶级市级单位)
<select id="userCreateParent" class="form-select">
<option value="">不选择上级(顶级单位)</option>
@ -1672,12 +1675,14 @@ function fillUserDrawer(user) {
}
if (userSummaryBox) {
const dept = user.department ? `${user.department.name || ''}${user.department.code ? ' · ' + user.department.code : ''}` : '未绑定';
const deptPhone = user.department ? (user.department.phone || '—') : '—';
userSummaryBox.innerHTML = `
<div class="summary-grid">
<div><div class="label">登录账号</div><div class="value">${user.username || '—'}</div></div>
<div><div class="label">显示名</div><div class="value">${user.display_name || '—'}</div></div>
<div><div class="label">角色</div><div class="value"><span class="pill">${getRoleLabel(user.role)}</span></div></div>
<div><div class="label">绑定部门</div><div class="value">${dept}</div></div>
<div><div class="label">单位电话</div><div class="value">${deptPhone}</div></div>
<div><div class="label">创建时间</div><div class="value">${formatDate(user.created_at)}</div></div>
</div>
`;
@ -1779,7 +1784,8 @@ if (userCreateForm) {
username: form.username.value.trim(),
password: form.password.value.trim(),
display_name: form.display_name.value.trim(),
parent_department_id: parentDepartmentId || null
parent_department_id: parentDepartmentId || null,
department_phone: (form.department_phone.value || '').trim()
};
try {
const resp = await fetchJSON(`${API_BASE}/admin/users`, {
@ -1793,6 +1799,7 @@ if (userCreateForm) {
if (parentSelect) {
parentSelect.value = '';
}
form.department_phone.value = '';
switchUserSubtab('user-list-panel');
await refreshDepartments();
await refreshUsers();