feat: 增强搜索功能,支持通过 ID、名称和其他字段搜索任务、文件和报告

This commit is contained in:
kuaifan
2025-12-29 15:43:50 +00:00
parent 869ac7d316
commit 16a55de6f1
8 changed files with 249 additions and 108 deletions
+20 -5
View File
@@ -991,10 +991,12 @@ class ProjectController extends AbstractController
* - keys.tag: 标签名称
* - keys.status: 任务状态 (completed: 已完成、uncompleted: 未完成、flow-xx: 流程状态ID)
*
* @apiParam {Number} [project_id] 项目ID
* @apiParam {Number} [parent_id] 主任务ID(project_id && parent_id ≤ 0 时 仅查询自己参与的任务)
* - 大于0:指定主任务下的子任务
* - 等于-1:表示仅主任务
* @apiParam {Number} [project_id] 项目ID(传入后只查询该项目内任务)
* @apiParam {Number} [parent_id] 主任务ID(查询优先级最高)
* - 大于0:只查该主任务下的子任务(此时 archived 强制 all,忽略 project_id/scope)
* - 等于-1:仅主任务(可与 project_id 组合)
* @apiParam {String} [scope] 查询范围(仅在未指定 project_id 且 parent_id ≤ 0 时生效)
* - all_project:查询“我参与的项目”下的所有任务(仍受可见性限制)
*
* @apiParam {String} [time] 指定时间范围,如:today, week, month, year, 2020-12-12,2020-12-30
* - today: 今天
@@ -1038,6 +1040,7 @@ class ProjectController extends AbstractController
$deleted = Request::input('deleted', 'no');
$keys = Request::input('keys');
$sorts = Request::input('sorts');
$scope = Request::input('scope');
$keys = is_array($keys) ? $keys : [];
$sorts = is_array($sorts) ? $sorts : [];
@@ -1045,7 +1048,11 @@ class ProjectController extends AbstractController
//
if ($keys['name']) {
if (Base::isNumber($keys['name'])) {
$builder->where("project_tasks.id", intval($keys['name']));
$builder->where(function ($query) use ($keys) {
$query->where("project_tasks.id", intval($keys['name']))
->orWhere("project_tasks.name", "like", "%{$keys['name']}%")
->orWhere("project_tasks.desc", "like", "%{$keys['name']}%");
});
} else {
$builder->where(function ($query) use ($keys) {
$query->where("project_tasks.name", "like", "%{$keys['name']}%");
@@ -1089,6 +1096,14 @@ class ProjectController extends AbstractController
$scopeAll = true;
$builder->where('project_tasks.project_id', $project_id);
}
if (!$scopeAll && $scope === 'all_project') {
$scopeAll = true;
$builder->whereIn('project_tasks.project_id', function ($query) use ($userid) {
$query->select('project_id')
->from('project_users')
->where('userid', $userid);
});
}
if ($scopeAll) {
$builder->allData();
} else {