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

3.8 KiB
Raw Blame History

用户搜索 API - 快速总结

已完成

新增 API 端点

GET /user.user/search

功能: 搜索用户/患者,用于创建订单等场景

后端实现

文件: server/app/adminapi/controller/user/UserController.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
    ]);
}

前端实现

文件: admin/src/api/order.ts

// 搜索用户/患者
export function searchPatients(params: any) {
    return request.get({ url: '/user.user/search', params })
}

组件集成

文件: admin/src/views/order/index.vue

import { searchPatients as searchPatientsAPI } from '@/api/order'

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
    }
}

🔌 API 使用

请求

GET /user.user/search?keyword=张三&page_no=1&page_size=10

参数

参数 说明
keyword 搜索关键词(必填)
page_no 页码(可选,默认1
page_size 每页数量(可选,默认10

响应

{
  "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
  }
}

🎯 使用场景

在创建订单时搜索患者:

<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>

📊 搜索字段

  • nickname - 用户昵称
  • mobile - 手机号码
  • account - 账号

特性

多字段搜索 分页支持 性能优化 模糊匹配 权限控制

📝 修改的文件

  1. server/app/adminapi/controller/user/UserController.php - 新增 search() 方法
  2. admin/src/api/order.ts - 新增 searchPatients() 函数
  3. admin/src/views/order/index.vue - 更新患者搜索逻辑

🚀 立即使用

无需额外配置,创建订单时患者搜索框会自动使用新的 API。

📚 详细文档

  • USER_SEARCH_API.md - 完整 API 文档
  • USER_SEARCH_IMPLEMENTATION.md - 实现细节

创建日期: 2024-03-10 版本: 1.0.0 状态: 完成