50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
import { Request, Response } from 'express'
|
|
import prisma from '../utils/prisma'
|
|
import { successResponse, errorResponse } from '../utils/response'
|
|
|
|
// 全局搜索
|
|
export const globalSearch = async (req: Request, res: Response) => {
|
|
try {
|
|
const { keyword } = req.query
|
|
|
|
if (!keyword || String(keyword).trim().length === 0) {
|
|
return successResponse(res, [], '请输入搜索关键词')
|
|
}
|
|
|
|
const kw = String(keyword).trim()
|
|
|
|
const equipments = await prisma.equipment.findMany({
|
|
where: {
|
|
OR: [
|
|
{ equipment_code: { contains: kw } },
|
|
{ equipment_name: { contains: kw } },
|
|
{ equipment_model: { contains: kw } }
|
|
]
|
|
},
|
|
select: {
|
|
id: true,
|
|
equipment_code: true,
|
|
equipment_name: true,
|
|
equipment_type: true,
|
|
status: true,
|
|
assetType: { select: { name: true } }
|
|
},
|
|
take: 10,
|
|
orderBy: { updated_at: 'desc' }
|
|
})
|
|
|
|
const results = equipments.map(eq => ({
|
|
id: eq.id,
|
|
code: eq.equipment_code,
|
|
name: eq.equipment_name,
|
|
type: eq.assetType?.name || eq.equipment_type,
|
|
status: eq.status,
|
|
category: 'equipment'
|
|
}))
|
|
|
|
successResponse(res, results, '搜索成功')
|
|
} catch (error: any) {
|
|
errorResponse(res, error.message || '搜索失败')
|
|
}
|
|
}
|