# 统一硬编码登录验证（2026-07-28）

## 背景

原登录系统使用 CloudBase 匿名登录 + `user_roles` 集合验证密码。问题：
1. CloudBase 匿名登录偶尔失败（网络/TLS 问题），导致所有销售员无法登录
2. `user_roles` 集合密码与预期不一致（如宋学伟密码不是 `biori2026`）
3. 赵云浩/张立娅有硬编码绕过，其他人没有，不公平

## 最终方案

**所有销售员统一使用 `biori2026` 密码 + `_personnel.json` 验证角色。**

```javascript
function doLogin() {
  var name = document.getElementById('loginRole').value;
  var pwd = document.getElementById('loginPwd').value;

  // 统一硬编码验证
  if (pwd !== 'biori2026') {
    showError('密码错误'); return;
  }

  // 从 personnel.json 获取角色/部门
  fetch('../数据/pricing/_personnel.json')
    .then(function(r) { return r.json(); })
    .then(function(data) {
      var found = data.personnel.filter(function(p) { return p.name === name; })[0];
      if (found) {
        // 角色映射：中文职衔 → 系统角色
        var role = found.role;
        if (name === '刘新元' || role === '销售总监') role = 'admin';
        else if (role === '销售经理') role = 'manager';
        else role = 'sales';
        finishLogin({name: found.name, role: role, dept: found.dept, email: found.email});
      } else {
        // 不在人员表中：允许登录，默认 sales
        finishLogin({name: name, role: 'sales', dept: '', email: ''});
      }
    });
}
```

## 角色映射

`_personnel.json` 中 `role` 字段为中文职衔，需映射到系统角色：

| personnel.role | 系统角色 | 权限 |
|---------------|---------|------|
| 销售总监 | admin | 全部数据 |
| 销售经理/大客户经理 | manager | 本部门 |
| 销售工程师/其他 | sales | 本人名下 |

## 注意事项

- `loadUserList()` 仍然从 CloudBase 加载下拉列表（用户头像标记），不可用时 fallback 到硬编码名单
- `_personnel.json` 由 ERP 系统生成，需定期同步
- 不再依赖 CloudBase `user_roles` 集合进行登录验证
