# 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()})