# 宇航百川成员通讯录 (YHBC Contacts)

企业内部通讯录 Web 应用，支持搜索、筛选、一键拨号等功能。

## 功能特性

- **智能搜索** - 按姓名、部门、职位模糊搜索，支持搜索词高亮
- **多维筛选** - 按部门、职位组合筛选
- **一键拨号** - 手机端点击电话号码直接拨打（`tel:` 链接）
- **一键复制** - 电话、邮箱点击即复制到剪贴板
- **快捷键** - `Ctrl+K` 聚焦搜索框，`Escape` 关闭弹窗
- **PWA 支持** - 可添加到主屏幕，支持离线访问
- **响应式设计** - 适配手机、平板、桌面端
- **毛玻璃风格** - 现代化 Glassmorphism UI

## 🔒 安全架构 (v3.0)

- **API 后端分离** - 通讯录数据通过 `/api/contacts` 接口异步加载，不再暴露在 HTML 源代码中
- **鉴权验证** - API 请求需携带 HMAC-SHA256 签名或 API Key
- **CORS 白名单** - 仅允许指定来源访问 API
- **速率限制** - 每 IP 60次/60秒，防止恶意爬取
- **敏感文件阻断** - `data.js`、`data.json`、`server.py` 等无法通过 HTTP 直接访问
- **前端防护** - 禁用右键、F12/Ctrl+U 等开发者工具快捷键

## 项目结构

```
├── server.py             # 安全后端服务（Python）
├── data.json             # 成员数据（仅后端读取，不对外暴露）
├── data.js               # 成员数据模块（开发参考）
├── contacts.html         # 主页
├── dept.html             # 部门详情页
├── about.html            # 关于我们
├── app.js                # 前端应用逻辑
├── sw.js                 # Service Worker（PWA 离线缓存）
├── manifest.json         # PWA 清单
├── logo.png              # 公司 Logo
├── requirements.txt      # Python 依赖（仅标准库）
└── members/
    └── default-avatar.png  # 默认头像
```

## 快速开始

### 启动服务

```bash
# 安装依赖（无需，仅用 Python 标准库）
# 启动服务（端口 80）
python server.py --port 80
```

打开浏览器访问 `http://127.0.0.1/contacts.html`

### 修改成员数据

编辑 `data.json` 文件，在数组末尾添加新成员：

```json
{
  "id": 56,
  "name": "新成员姓名",
  "department": "部门名称",
  "position": "职位",
  "phone": "手机号",
  "email": "",
  "avatar": "members/default-avatar.png"
}
```

保存后无需重启，服务会自动热加载（检测文件变更）。

### 添加成员头像

将头像图片放入 `members/` 目录，然后在 `data.json` 中设置对应 `avatar` 路径。

## 部署说明

### 生产环境

```bash
# 后台运行
nohup python server.py --port 80 > server.log 2>&1 &

# 或使用 systemd（推荐）
```

## 浏览器兼容性

- Chrome / Edge 80+
- Safari / iOS Safari 14+
- Firefox 80+
- 微信内置浏览器

## 版本更新

- **v3.0.0** (2026-07-02) - 安全架构重构：API 后端、HMAC鉴权、CORS、速率限制、前端防护
- **v2.1.0** (2026-06-11) - 新增 A-Z 索引、一键拨号、筛选记忆、PWA 支持
- **v2.0.0** (2026-06-10) - 毛玻璃 UI 重构、骨架屏、搜索高亮、职级排序
