加入案件设置标签的接口
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
from django.urls import path
|
||||
|
||||
from .models import Schedule
|
||||
from .views import registration,registrationDetail,Project,Projectquerytype,ProjectDetail,EditProject,BidRegistration,BidDetail,registrationList,caseManagement,caseManagementDetail,CaseAttachmentUpload,CaseAttachmentUpdate,Uploadinvoice,InvoiceDetail,Log,LogDetail,accumulate,preFilingLinkedCases,Application,ApplicationDetail,WarehousingRegistration,WarehousingDetail,PlatformRegistration,PlatformDetail,EditPlatformDetail,DeletePlatformDetail,bulletin,BulletinDetail,EditBulletin,deleteBulletin,Lawyersdocuments,LawyersdocumentsDetail,LwaDetail,CreateSchedule,DeleteSchedule,ScheduleDetail,handleSchedule,AddRermission,DisplayRermission,DeleteRermission,EditRermission,addRole,DeleteRole,EditRole,displayRole,modifypermissions,getRolePermissions,DeleteRegistration,EditRegistration,DeleteProject,EditBid,DeleteBid,EditCase,DeleteCase,EditApplication,DeleteApplication,EditWarehousing,DeleteWarehousing,EditLawyerFlie,EditSchedule,TransferCase,CaseChangeRequestCreate,CaseChangeRequestList,CaseChangeRequestDetail,ProjectDropdownList,CaseDropdownList,ConflictSearch,CreateCaseTag,CaseTagList,CaseTagDetail,EditCaseTag,DeleteCaseTag,CaseTagDropdownList,CaseListByTag
|
||||
from .views import registration,registrationDetail,Project,Projectquerytype,ProjectDetail,EditProject,BidRegistration,BidDetail,registrationList,caseManagement,caseManagementDetail,CaseAttachmentUpload,CaseAttachmentUpdate,Uploadinvoice,InvoiceDetail,Log,LogDetail,accumulate,preFilingLinkedCases,Application,ApplicationDetail,WarehousingRegistration,WarehousingDetail,PlatformRegistration,PlatformDetail,EditPlatformDetail,DeletePlatformDetail,bulletin,BulletinDetail,EditBulletin,deleteBulletin,Lawyersdocuments,LawyersdocumentsDetail,LwaDetail,CreateSchedule,DeleteSchedule,ScheduleDetail,handleSchedule,AddRermission,DisplayRermission,DeleteRermission,EditRermission,addRole,DeleteRole,EditRole,displayRole,modifypermissions,getRolePermissions,DeleteRegistration,EditRegistration,DeleteProject,EditBid,DeleteBid,EditCase,DeleteCase,EditApplication,DeleteApplication,EditWarehousing,DeleteWarehousing,EditLawyerFlie,EditSchedule,TransferCase,CaseChangeRequestCreate,CaseChangeRequestList,CaseChangeRequestDetail,ProjectDropdownList,CaseDropdownList,ConflictSearch,CreateCaseTag,CaseTagList,CaseTagDetail,EditCaseTag,DeleteCaseTag,CaseTagDropdownList,CaseListByTag,SetCaseTags
|
||||
urlpatterns = [
|
||||
|
||||
path('register',registration.as_view(),name='register'),
|
||||
@@ -79,5 +79,6 @@ urlpatterns = [
|
||||
path('case-tag-edit',EditCaseTag.as_view(),name='case-tag-edit'),
|
||||
path('case-tag-delete',DeleteCaseTag.as_view(),name='case-tag-delete'),
|
||||
path('case-tag-dropdown-list',CaseTagDropdownList.as_view(),name='case-tag-dropdown-list'),
|
||||
path('case-list-by-tag',CaseListByTag.as_view(),name='case-list-by-tag')
|
||||
path('case-list-by-tag',CaseListByTag.as_view(),name='case-list-by-tag'),
|
||||
path('set-case-tags',SetCaseTags.as_view(),name='set-case-tags')
|
||||
]
|
||||
@@ -4254,6 +4254,109 @@ class CaseTagDropdownList(APIView):
|
||||
}, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class SetCaseTags(APIView):
|
||||
"""给案件设置标签"""
|
||||
def post(self, request, *args, **kwargs):
|
||||
"""
|
||||
给案件设置标签
|
||||
支持设置多个标签,也可以清空所有标签
|
||||
"""
|
||||
case_id = request.data.get('case_id')
|
||||
tag_ids = request.data.get('tag_ids') # 标签ID列表(数组或逗号分隔的字符串)
|
||||
|
||||
if not case_id:
|
||||
return Response({
|
||||
'status': 'error',
|
||||
'message': '缺少参数:case_id(案件ID)',
|
||||
'code': 1
|
||||
}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
# 验证案件是否存在
|
||||
try:
|
||||
case = Case.objects.get(id=case_id, is_deleted=False)
|
||||
except Case.DoesNotExist:
|
||||
return Response({
|
||||
'status': 'error',
|
||||
'message': '案件不存在或已被删除',
|
||||
'code': 1
|
||||
}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
# 记录操作前的标签
|
||||
old_tags = list(case.tags.filter(is_deleted=False).values('id', 'name'))
|
||||
old_tag_ids = [tag['id'] for tag in old_tags]
|
||||
|
||||
# 处理标签ID列表
|
||||
tag_id_list = []
|
||||
if tag_ids is not None:
|
||||
try:
|
||||
# 支持数组或逗号分隔的字符串
|
||||
if isinstance(tag_ids, str):
|
||||
if tag_ids.strip() == '':
|
||||
tag_id_list = [] # 空字符串表示清空所有标签
|
||||
elif ',' in tag_ids:
|
||||
tag_id_list = [int(x.strip()) for x in tag_ids.split(',') if x.strip()]
|
||||
else:
|
||||
tag_id_list = [int(tag_ids)]
|
||||
elif isinstance(tag_ids, list):
|
||||
tag_id_list = [int(x) for x in tag_ids if x]
|
||||
else:
|
||||
tag_id_list = []
|
||||
except (ValueError, TypeError) as e:
|
||||
return Response({
|
||||
'status': 'error',
|
||||
'message': f'标签ID格式错误:{str(e)}',
|
||||
'code': 1
|
||||
}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
# 验证标签是否存在
|
||||
if tag_id_list:
|
||||
valid_tags = CaseTag.objects.filter(id__in=tag_id_list, is_deleted=False)
|
||||
valid_tag_ids = list(valid_tags.values_list('id', flat=True))
|
||||
|
||||
# 检查是否有无效的标签ID
|
||||
invalid_tag_ids = set(tag_id_list) - set(valid_tag_ids)
|
||||
if invalid_tag_ids:
|
||||
return Response({
|
||||
'status': 'error',
|
||||
'message': f'以下标签ID不存在或已被删除:{", ".join(map(str, invalid_tag_ids))}',
|
||||
'code': 1
|
||||
}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
# 设置标签关联
|
||||
case.tags.set(valid_tags)
|
||||
else:
|
||||
# 清空所有标签
|
||||
case.tags.clear()
|
||||
|
||||
# 获取更新后的标签信息
|
||||
new_tags = list(case.tags.filter(is_deleted=False).values('id', 'name', 'color'))
|
||||
new_tag_ids = [tag['id'] for tag in new_tags]
|
||||
|
||||
# 记录操作日志
|
||||
log_operation(
|
||||
request=request,
|
||||
operation_type='UPDATE',
|
||||
module='Business',
|
||||
action='设置案件标签',
|
||||
target_type='Case',
|
||||
target_id=case.id,
|
||||
target_name=case.contract_no or f'案件ID-{case.id}',
|
||||
old_data={'tag_ids': old_tag_ids, 'tags': old_tags},
|
||||
new_data={'tag_ids': new_tag_ids, 'tags': new_tags},
|
||||
remark=f'设置案件标签:案件ID {case_id},标签ID {new_tag_ids}'
|
||||
)
|
||||
|
||||
return Response({
|
||||
'message': '设置成功',
|
||||
'code': 0,
|
||||
'data': {
|
||||
'case_id': case.id,
|
||||
'tags': new_tags,
|
||||
'tag_ids': new_tag_ids
|
||||
}
|
||||
}, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class CaseListByTag(APIView):
|
||||
"""按标签筛选案件列表"""
|
||||
def post(self, request, *args, **kwargs):
|
||||
|
||||
Reference in New Issue
Block a user