# Dual Auth Pitfall — state.user 新旧格式兼容

## 问题

`销售工作台.html` 存在两套登录认证：

| 方式 | state.user 格式 | 示例 |
|------|----------------|------|
| 旧 AUTH 硬编码 | 字符串 | `'gm'`, `'director'`, `'zhaoyunhao'` |
| CloudBase/API 登录 | 对象 | `{name:'宋学伟', role:'sales', dept:'...', email:'...'}` |

当代码用 `state.user === 'gm'` 或 `AUTH[state.user].name` 时，对对象格式用户全部失效：
- `state.user === 'gm'` → 永远是 false（对象 ≠ 字符串）→ 管理员权限丢失
- `AUTH[state.user]` → undefined → `.name` 崩溃 → 页面白屏
- `USER_DEPTS[state.user]` → undefined → 订单不过滤 → 看到全公司数据

## 修复

添加三个兼容函数，全局替换：

```javascript
function getUserName() {
  if (!state.user) return '';
  if (typeof state.user === 'object') return state.user.name || '';
  return state.user;
}
function getUserRole() {
  if (!state.user) return '';
  if (typeof state.user === 'object') return state.user.role || 'sales';
  return state.user;
}
function isAdminUser() {
  var r = getUserRole();
  return r === 'admin' || r === 'gm' || r === 'director';
}
```

## 受影响代码位置

| 原代码 | 替换为 |
|--------|--------|
| `state.user === 'gm' \|\| state.user === 'director'` | `isAdminUser()` |
| `AUTH[state.user].name` | `getUserName()` |
| `AUTH[state.user].label` | `getUserName()` |
| `USER_DEPTS[state.user]` | `USER_DEPTS[getUserName()]` |

## 订单过滤优化

`getShipmentOrders()` 改用 `creatorEmail` 精确匹配，不再依赖部门映射：

```javascript
if (!isAdminUser() && state.user && state.user.email) {
  var userEmail = state.user.email;
  orders = orders.filter(function(o) { return o.creatorEmail === userEmail; });
}
```

优势：每个销售员只看自己创建的订单，不依赖部门字段。
