Files
zyt/admin/USER_SEARCH_IMPLEMENTATION.md
T
2026-03-11 09:49:47 +08:00

270 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 用户搜索 API 实现总结
## ✅ 完成的工作
### 1. 后端 API 实现
**文件**: `server/app/adminapi/controller/user/UserController.php`
新增 `search()` 方法:
```php
public function search()
{
$keyword = $this->request->get('keyword', '');
$page_no = $this->request->get('page_no', 1);
$page_size = $this->request->get('page_size', 10);
if (empty($keyword)) {
return $this->success('', ['lists' => [], 'count' => 0]);
}
$offset = ($page_no - 1) * $page_size;
$lists = \app\common\model\user\User::where('nickname|mobile|account', 'like', '%' . $keyword . '%')
->field(['id', 'nickname', 'mobile', 'account', 'avatar'])
->limit($offset, $page_size)
->order('id desc')
->select()
->toArray();
$count = \app\common\model\user\User::where('nickname|mobile|account', 'like', '%' . $keyword . '%')
->count();
return $this->success('', [
'lists' => $lists,
'count' => $count,
'page_no' => $page_no,
'page_size' => $page_size
]);
}
```
### 2. 前端 API 实现
**文件**: `admin/src/api/order.ts`
新增导出函数:
```typescript
// 搜索用户/患者
export function searchPatients(params: any) {
return request.get({ url: '/user.user/search', params })
}
```
### 3. 前端组件更新
**文件**: `admin/src/views/order/index.vue`
- 导入新的 API 函数
- 更新患者搜索逻辑
- 使用新的搜索端点
## 🔌 API 端点
```
GET /user.user/search
```
### 请求参数
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| keyword | string | 是 | 搜索关键词 |
| page_no | int | 否 | 页码(默认1 |
| page_size | int | 否 | 每页数量(默认10) |
### 搜索字段
- `nickname` - 用户昵称
- `mobile` - 手机号码
- `account` - 账号
### 响应数据
```json
{
"code": 1,
"msg": "success",
"data": {
"lists": [
{
"id": 1,
"nickname": "张三",
"mobile": "13800138000",
"account": "zhangsan",
"avatar": "https://example.com/avatar.jpg"
}
],
"count": 1,
"page_no": 1,
"page_size": 10
}
}
```
## 📊 对比旧方案
### 旧方案(使用 /user.user/lists
```typescript
const res = await getUserList({
page_no: 1,
page_size: 10,
keyword: query
})
```
**问题**
- 需要获取完整用户列表
- 返回所有用户字段
- 性能较差
### 新方案(使用 /user.user/search
```typescript
const res = await searchPatientsAPI({
keyword: query,
page_no: 1,
page_size: 10
})
```
**优势**
- ✅ 专门为搜索优化
- ✅ 只返回必要字段
- ✅ 性能更好
- ✅ 支持多字段搜索
- ✅ 支持分页
## 🎯 使用场景
### 创建订单时搜索患者
在订单创建弹窗中,患者输入框使用远程搜索:
```vue
<el-select
v-model="createForm.patient_id"
placeholder="请选择患者"
filterable
remote
:remote-method="searchPatients"
:loading="patientLoading"
>
<el-option
v-for="item in patientList"
:key="item.id"
:label="`${item.nickname} (${item.mobile})`"
:value="item.id"
/>
</el-select>
```
### 搜索函数
```typescript
const searchPatients = async (query: string) => {
if (!query) {
patientList.value = []
return
}
try {
patientLoading.value = true
const res = await searchPatientsAPI({
keyword: query,
page_no: 1,
page_size: 10
})
patientList.value = res?.lists || []
} finally {
patientLoading.value = false
}
}
```
## 📝 修改的文件
### 后端
- `server/app/adminapi/controller/user/UserController.php` - 新增 search() 方法
### 前端
- `admin/src/api/order.ts` - 新增 searchPatients() 函数
- `admin/src/views/order/index.vue` - 更新患者搜索逻辑
## 🚀 快速开始
### 1. 后端已实现
`search()` 方法已添加到 `UserController`,无需额外配置。
### 2. 前端已集成
订单创建弹窗已使用新的搜索 API。
### 3. 立即使用
在创建订单时,患者搜索框会自动使用新的 API:
```bash
# 搜索昵称为"张三"的用户
GET /user.user/search?keyword=张三&page_no=1&page_size=10
```
## 📚 相关文档
- `USER_SEARCH_API.md` - 详细 API 文档
- `CREATE_ORDER_FEATURE.md` - 创建订单功能说明
- `admin/src/views/order/index.vue` - 订单列表页面
## ✨ 特性
**多字段搜索** - 支持按昵称、手机号、账号搜索
**分页支持** - 支持分页查询
**性能优化** - 只返回必要字段
**模糊匹配** - 支持模糊搜索
**排序** - 按 ID 倒序排列
**权限控制** - 受后端权限系统控制
## 🔒 安全性
- 使用参数化查询防止 SQL 注入
- 受后端权限系统控制
- 只返回必要的用户信息
## 📊 性能
- 支持分页,避免一次性加载大量数据
- 只返回必要字段
- 使用数据库索引优化查询
## 🎓 示例
### 搜索昵称
```bash
curl -X GET "http://localhost:8000/user.user/search?keyword=张三" \
-H "token: your_admin_token"
```
### 搜索手机号
```bash
curl -X GET "http://localhost:8000/user.user/search?keyword=138" \
-H "token: your_admin_token"
```
### 搜索账号
```bash
curl -X GET "http://localhost:8000/user.user/search?keyword=zhang" \
-H "token: your_admin_token"
```
---
**实现日期**: 2024-03-10
**版本**: 1.0.0
**状态**: ✅ 完成