diff --git a/CHANGES.md b/CHANGES.md index ed5a848..ba2dca1 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,6 +4,7 @@ - [新增]后台管理中心的图片管理和附件管理功能; - [新增]站点搜索中文档搜索支持「全文搜索」和「匹配搜索」功能和切换开关; +- [新增]后台文档管理文档历史记录页面和接口; - [修复]vditor编辑器粘贴多图片文本时图片只有一张图的问题; - [修复]找回密码邮件发送失败的问题; - [修复]后台管理用户管理用户无法搜索的问题; @@ -16,6 +17,7 @@ - [优化]文集内搜索文档; - [优化]后台文档管理文档编辑模式显示; - [优化]后台图片管理图片预览功能; +- [优化]文档历史记录对比接口; ### v0.6.8 2021-06-27 diff --git a/app_admin/urls.py b/app_admin/urls.py index b5555c2..aff91dd 100644 --- a/app_admin/urls.py +++ b/app_admin/urls.py @@ -15,6 +15,10 @@ urlpatterns = [ path('project_del/',views.admin_project_delete,name="admin_project_del"), # 删除文集 path('doc_manage/',views.admin_doc,name='doc_manage'), # 文档管理 + # 文档历史记录管理及接口 + path('doc_history_manage//', views.admin_doc_history, name='doc_history_manage'), # 文档历史记录管理 + path('api/doc_history//', views.AdminDocHistory.as_view(), name="api_doc_history"), # 文档历史记录接口 + path('api/doc_history_detail/', views.AdminDocHistoryDetail.as_view(), name="api_doc_history_detail"), # 文档历史记录详情接口 path('doctemp_manage/',views.admin_doctemp,name='doctemp_manage'), # 文档模板管理 path('setting/',views.admin_setting,name="sys_setting"), # 应用设置 path('forget_pwd/',views.forget_pwd,name='forget_pwd'), # 忘记密码 diff --git a/app_admin/views.py b/app_admin/views.py index 89145fd..6abbea1 100644 --- a/app_admin/views.py +++ b/app_admin/views.py @@ -689,6 +689,63 @@ def admin_doc(request): } return JsonResponse(resp_data) +# 后台管理 - 文档管理 - 文档历史管理 +@superuser_only +def admin_doc_history(request,id): + doc = Doc.objects.get(id=id) + return render(request,'app_admin/admin_doc_history.html',locals()) + + +# 文档历史接口 - 通过文档id +class AdminDocHistory(APIView): + authentication_classes = [SessionAuthentication, AppMustAuth] + permission_classes = [SuperUserPermission] + + def get_object(self, id): + try: + return Doc.objects.get(id=id) + except ObjectDoesNotExist: + raise Http404 + + # 获取文档的历史记录 + def get(self,request, id): + doc = self.get_object(id=id) + page_num = request.query_params.get('page', 1) + limit = request.query_params.get('limit', 10) + + history_data = DocHistory.objects.filter(doc=doc).order_by('-create_time') + page = PageNumberPagination() # 实例化一个分页器 + page.page_size = limit + page_historys = page.paginate_queryset(history_data, request, view=self) # 进行分页查询 + serializer = DocHistorySerializer(page_historys, many=True) # 对分页后的结果进行序列化处理 + resp = { + 'code': 0, + 'data': serializer.data, + 'count': history_data.count() + } + + return Response(resp) + + # 删除文档的历史记录 + def delete(self,request,id): + pass + + +# 文档历史详情接口 - 通过文档历史id +class AdminDocHistoryDetail(APIView): + authentication_classes = [SessionAuthentication, AppMustAuth] + permission_classes = [SuperUserPermission] + + def delete(self,request): + try: + id = request.data.get('id','') + his = DocHistory.objects.filter(id=id).delete() + return Response({'code':0}) + except: + + return Response({'code':5,'data':_("系统异常")}) + + # 后台管理 - 文档模板管理 @superuser_only diff --git a/app_api/serializers_app.py b/app_api/serializers_app.py index 9230093..ec9822f 100644 --- a/app_api/serializers_app.py +++ b/app_api/serializers_app.py @@ -65,6 +65,18 @@ class DocSerializer(ModelSerializer): pro_name = Project.objects.get(id=obj.top_doc).name return pro_name + +# 文档历史序列化器 +class DocHistorySerializer(ModelSerializer): + username = serializers.SerializerMethodField(label="用户名") + class Meta: + model = DocHistory + fields = ('__all__') + + def get_username(self,obj): + return obj.create_user.username + + # 文档模板序列化器 class DocTempSerializer(ModelSerializer): class Meta: diff --git a/app_doc/views.py b/app_doc/views.py index e8bff04..60981e6 100644 --- a/app_doc/views.py +++ b/app_doc/views.py @@ -1492,7 +1492,7 @@ def diff_doc(request,doc_id,his_id): doc = Doc.objects.get(id=doc_id) # 查询文档信息 project = Project.objects.get(id=doc.top_doc) # 查询文档所属的文集信息 pro_colla = ProjectCollaborator.objects.filter(project=project, user=request.user) # 查询用户的协作文集信息 - if (request.user == doc.create_user) or (pro_colla[0].role == 1): + if (request.user == doc.create_user) or (pro_colla[0].role == 1) or (request.user.is_superuser): history = DocHistory.objects.get(id=his_id) history_list = DocHistory.objects.filter(doc=doc).order_by('-create_time') if history.doc == doc: @@ -1510,7 +1510,7 @@ def diff_doc(request,doc_id,his_id): doc = Doc.objects.get(id=doc_id) # 查询文档信息 project = Project.objects.get(id=doc.top_doc) # 查询文档所属的文集信息 pro_colla = ProjectCollaborator.objects.filter(project=project, user=request.user) # 查询用户的协作文集信息 - if (request.user == doc.create_user) or (pro_colla[0].role == 1): + if (request.user == doc.create_user) or (pro_colla[0].role == 1) or (request.user.is_superuser): history = DocHistory.objects.get(id=his_id) if history.doc == doc: return JsonResponse({'status':True,'data':history.pre_content}) diff --git a/template/app_admin/admin_doc.html b/template/app_admin/admin_doc.html index 0454388..8ac5369 100644 --- a/template/app_admin/admin_doc.html +++ b/template/app_admin/admin_doc.html @@ -128,7 +128,7 @@ + + + + +{% endblock %} +{% block custom_script %} + +{% endblock %} \ No newline at end of file