47 lines
2.0 KiB
Python
47 lines
2.0 KiB
Python
|
|
# inventory-backend/app/api/v1/common/users.py
|
|||
|
|
from flask import jsonify
|
|||
|
|
from flask_jwt_extended import jwt_required
|
|||
|
|
|
|||
|
|
from . import common_bp
|
|||
|
|
|
|||
|
|
|
|||
|
|
def active_user_options():
|
|||
|
|
"""
|
|||
|
|
在职人员名单(id + 姓名)——「选择某人」类下拉框的**共用实现**。
|
|||
|
|
|
|||
|
|
★ 为什么单独开一条中性路径,而不是复用 /transactions/borrow/users:
|
|||
|
|
那条路径在语义上属于借库模块,出库补发、报废执行等处若直接复用,
|
|||
|
|
后人读代码时会困惑「出库为什么在调借库的接口」。这里提供统一入口,
|
|||
|
|
借库那条路径改为调本函数,实现只有一份。
|
|||
|
|
|
|||
|
|
★ 公司隔离与业务台账同口径(get_current_company_filter):
|
|||
|
|
否则 A 公司的人能在选择器里看到 B 公司人员。
|
|||
|
|
|
|||
|
|
★ 只返回 id 与姓名:不含邮箱 / 角色 / 部门,最小披露。
|
|||
|
|
"""
|
|||
|
|
from app.utils.decorators import get_current_company_filter
|
|||
|
|
from app.models.system import SysUser
|
|||
|
|
from app.services.trans_service import user_display_name
|
|||
|
|
|
|||
|
|
company_limit = get_current_company_filter()
|
|||
|
|
query = SysUser.query.filter(SysUser.status == 'active')
|
|||
|
|
if company_limit is not None:
|
|||
|
|
# 与 borrow_service.get_request_list 一致:SysUser.department 即公司维度
|
|||
|
|
query = query.filter(SysUser.department == company_limit)
|
|||
|
|
|
|||
|
|
return [{'id': u.id, 'name': user_display_name(u)}
|
|||
|
|
for u in query.order_by(SysUser.username).all()]
|
|||
|
|
|
|||
|
|
|
|||
|
|
@common_bp.route('/active-users', methods=['GET'])
|
|||
|
|
@jwt_required()
|
|||
|
|
def get_active_users():
|
|||
|
|
"""
|
|||
|
|
在职人员名单,供借出 / 转交 / 归还 / 出库补发等多个页面的选择器共用。
|
|||
|
|
|
|||
|
|
★ 无 permission_required,仅要求登录:
|
|||
|
|
同一份名单要被多个页面共用,绑定其中任一权限码都会让其他页面 403;
|
|||
|
|
且只暴露 id 与姓名(与 /auth/users/approvers 同一处理方式)。
|
|||
|
|
"""
|
|||
|
|
return jsonify({'code': 200, 'msg': 'success', 'data': active_user_options()})
|