优化案件搜索
This commit is contained in:
@@ -1774,9 +1774,8 @@ class caseManagementDetail(APIView):
|
||||
def post(self, request, *args, **kwargs):
|
||||
"""
|
||||
案件管理版块展示
|
||||
:param request:
|
||||
:param args:
|
||||
:param kwargs:
|
||||
搜索支持按标签:传 tags(标签名称,模糊匹配)或 tag_ids(标签ID列表/逗号分隔,匹配拥有任一标签的案件),可同时使用。
|
||||
:param request: page, per_page 必填;可选 times, end_time, type, contract_no, party_name, client_name, tags, tag_ids
|
||||
:return:
|
||||
"""
|
||||
page = request.data.get('page')
|
||||
@@ -1787,7 +1786,8 @@ class caseManagementDetail(APIView):
|
||||
serialnumber = request.data.get('contract_no')
|
||||
party_name = request.data.get('party_name')
|
||||
client_name = request.data.get('client_name')
|
||||
tags = request.data.get('tags')
|
||||
tags = request.data.get('tags') # 标签名称模糊匹配
|
||||
tag_ids = request.data.get('tag_ids') # 标签ID列表,匹配拥有任一标签的案件
|
||||
if not all([page, per_page]):
|
||||
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
|
||||
Q_obj = Q()
|
||||
@@ -1804,11 +1804,27 @@ class caseManagementDetail(APIView):
|
||||
Q_obj &= Q(party_name__icontains=party_name)
|
||||
if client_name:
|
||||
Q_obj &= Q(client_name__icontains=client_name)
|
||||
# 按标签搜索:支持标签名称模糊匹配(tags) 和 标签ID列表(tag_ids),满足其一即可
|
||||
tag_id_list = []
|
||||
if tags:
|
||||
cas = CaseTag.objects.filter(name__icontains=tags).values_list('id', flat=True)
|
||||
Q_obj &= Q(tags__in=cas)
|
||||
tag_id_list.extend(
|
||||
CaseTag.objects.filter(name__icontains=tags, is_deleted=False).values_list('id', flat=True)
|
||||
)
|
||||
if tag_ids:
|
||||
try:
|
||||
if isinstance(tag_ids, str):
|
||||
tag_id_list.extend([int(x.strip()) for x in tag_ids.split(',') if x.strip()])
|
||||
elif isinstance(tag_ids, list):
|
||||
tag_id_list.extend([int(x) for x in tag_ids if x is not None and str(x).strip() != ''])
|
||||
except (ValueError, TypeError):
|
||||
pass
|
||||
tag_id_list = list(set(tag_id_list))
|
||||
if tag_id_list:
|
||||
Q_obj &= Q(tags__in=tag_id_list)
|
||||
|
||||
pre = Case.objects.filter(Q_obj, is_deleted=False).order_by('-id')
|
||||
if tag_id_list:
|
||||
pre = pre.distinct()
|
||||
total = len(pre)
|
||||
|
||||
paginator = Paginator(pre, per_page)
|
||||
@@ -2391,23 +2407,43 @@ class CaseDropdownList(APIView):
|
||||
def post(self, request, *args, **kwargs):
|
||||
"""
|
||||
获取案件列表(用于下拉选择)
|
||||
返回案件数据,格式简洁,适合下拉列表使用
|
||||
:param request:
|
||||
:param args:
|
||||
:param kwargs:
|
||||
返回案件数据,格式简洁,适合下拉列表使用。
|
||||
可选按标签筛选:传 tags(标签名称模糊)或 tag_ids(标签ID列表/逗号分隔),匹配拥有任一标签的案件。
|
||||
:param request: 可选 state, tags, tag_ids
|
||||
:return:
|
||||
"""
|
||||
# 可选参数:状态过滤
|
||||
state_filter = request.data.get('state', None) # 可以按状态过滤,如"已通过"
|
||||
tags = request.data.get('tags') # 标签名称模糊匹配
|
||||
tag_ids = request.data.get('tag_ids') # 标签ID列表
|
||||
|
||||
# 查询未删除的案件
|
||||
Q_obj = Q(is_deleted=False)
|
||||
|
||||
# 如果指定了状态过滤
|
||||
if state_filter:
|
||||
Q_obj &= Q(state=state_filter)
|
||||
|
||||
# 按标签筛选(可选)
|
||||
tag_id_list = []
|
||||
if tags:
|
||||
tag_id_list.extend(
|
||||
CaseTag.objects.filter(name__icontains=tags, is_deleted=False).values_list('id', flat=True)
|
||||
)
|
||||
if tag_ids:
|
||||
try:
|
||||
if isinstance(tag_ids, str):
|
||||
tag_id_list.extend([int(x.strip()) for x in tag_ids.split(',') if x.strip()])
|
||||
elif isinstance(tag_ids, list):
|
||||
tag_id_list.extend([int(x) for x in tag_ids if x is not None and str(x).strip() != ''])
|
||||
except (ValueError, TypeError):
|
||||
pass
|
||||
tag_id_list = list(set(tag_id_list))
|
||||
if tag_id_list:
|
||||
Q_obj &= Q(tags__in=tag_id_list)
|
||||
|
||||
cases = Case.objects.filter(Q_obj).order_by('-id')
|
||||
if tag_id_list:
|
||||
cases = cases.distinct()
|
||||
|
||||
data = []
|
||||
for case in cases:
|
||||
|
||||
Reference in New Issue
Block a user