优化个人中心我协作的文集页面及功能

This commit is contained in:
zmister 2021-07-06 15:09:26 +08:00
parent 1adc56195f
commit 57d7217dc6
5 changed files with 161 additions and 39 deletions

View File

@ -1,5 +1,11 @@
## 版本更新记录
### v0.6.9 2021-07
- [新增]后台管理中心的图片管理和附件管理功能;
- [修复]vditor编辑器粘贴多图片文本时图片只有一张图的问题
- [优化]个人中心我协作的文集页面及功能;
### v0.6.8 2021-06-27
- [新增]文档页面支持OGP协议

View File

@ -25,6 +25,31 @@ class ProjectSerializer(ModelSerializer):
model = Project
fields = ('__all__')
# 协作文集序列化器
class ProjectCollaSerializer(ModelSerializer):
project_id = serializers.SerializerMethodField(label="文集ID")
project_name = serializers.SerializerMethodField(label="文集名称")
username = serializers.SerializerMethodField(label='文集创建人')
top_doc = serializers.SerializerMethodField(label="上级")
class Meta:
model = ProjectCollaborator
fields = ('__all__')
def get_project_name(self,obj):
return obj.project.name
def get_project_id(self,obj):
return obj.project.id
def get_username(self,obj):
username = obj.project.create_user.username
return username
def get_top_doc(self,obj):
return 0
# 文档序列化器
class DocSerializer(ModelSerializer):

View File

@ -23,6 +23,7 @@ urlpatterns = [
path('manage_project_doc_sort/',views_import.project_doc_sort,name='project_doc_sort'), # 导入文集文档排序
path('manage_project_transfer/<int:pro_id>/',views.manage_project_transfer,name='manage_pro_transfer'), # 文集转让
path('manage_pro_doc_sort/<int:pro_id>/',views.manage_project_doc_sort,name='manage_pro_doc_sort'), # 文集排序
path('api/my_colla_list/', views.MyCollaList.as_view(), name="my_colla_list"), # 我的协作文集列表
#################文档相关
path('project-<int:pro_id>/doc-<int:doc_id>/', views.doc, name='doc'), # 文档浏览页
path('create_doc/', views.create_doc, name="create_doc"), # 新建文档

View File

@ -20,6 +20,7 @@ from django.db import transaction
from django.utils.html import strip_tags
from django.utils.translation import gettext_lazy as _
from loguru import logger
from app_api.serializers_app import *
from app_doc.report_utils import *
from app_admin.models import UserOptions,SysSetting
from app_admin.decorators import check_headers,allow_report_file
@ -849,6 +850,64 @@ def manage_pro_colla_self(request):
return render(request,'app_doc/manage/manage_project_self_colla.html',locals())
# 我协作的文集文档列表接口
class MyCollaList(APIView):
authentication_classes = (AppAuth, SessionAuthentication)
# 获取列表
def get(self,request):
pid = request.query_params.get('pid','')
page_num = request.query_params.get('page', 1)
limit = request.query_params.get('limit', 10)
if pid == '':
doc_data = ProjectCollaborator.objects.filter(user=request.user).order_by('-create_time')
else:
project = Project.objects.get(id=pid)
doc_data = ProjectCollaborator.objects.filter(user=request.user,project=project).order_by('-create_time')
page = PageNumberPagination() # 实例化一个分页器
page.page_size = limit
page_docs = page.paginate_queryset(doc_data, request, view=self) # 进行分页查询
serializer = ProjectCollaSerializer(page_docs, many=True) # 对分页后的结果进行序列化处理
colla_doc_list = []
for s in serializer.data:
item = {
"project_id": s['project_id'],
"project_name": s['project_name'],
'role':s['role'],
"top_doc": 0,
'type':'project',
'create_time':s['create_time'],
'username':s['username'],
# "checkArr": "0"
}
colla_doc_list.append(item)
for doc in doc_data:
doc_list = Doc.objects.filter(
top_doc=doc.project.id,
create_user=request.user
).defer('content','pre_content')
if doc_list.exists():
for d in doc_list:
item = {
"project_id": d.id,
"project_name": d.name,
"top_doc": d.top_doc,
'role':None,
'type':'doc',
'create_time':d.create_time,
'username':d.create_user.username,
}
colla_doc_list.append(item)
resp = {
'code': 0,
'data': colla_doc_list,
# 'data':a,
'count': doc_data.count()
}
return Response(resp)
# 转让文集
@login_required()
@require_http_methods(['GET',"POST"])

View File

@ -12,58 +12,89 @@
</span>
</div>
</div>
{% if colla_pros.count != 0 %}
<div class="layui-row">
<table class="layui-table">
<thead>
<tr>
<th>{% trans "文集名称" %}</th>
<th>{% trans "作者" %}</th>
<th>{% trans "权限" %}</th>
<th>{% trans "操作" %}</th>
</tr>
</thead>
<tbody>
{% for colla in colla_pros %}
<tr>
<td>{{ colla.project }}</td>
<td>{{ colla.project.create_user }}</td>
<td>
{% if colla.role == 0 %}
{% trans "初级 - 可新建文档、修改和删除自己创建的文档" %}
{% else %}
{% trans "高级 - 可新建文档、修改所有文档、删除自己创建的文档" %}
{% endif %}
</td>
<td>
<a href="{% url 'pro_index' colla.project.id %}" target="_blank" class="layui-btn layui-btn-normal layui-btn-xs">{% trans "查看" %}</a>
{% if colla.role == 1 %}
<a href="{% url 'manage_pro_doc_sort' colla.project.id %}" class="layui-btn layui-btn-normal layui-btn-xs">{% trans "排序" %}</a>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<div class="layui-row">
{% trans "你还没有成为任何文集的协作者" %}
</div>
{% endif %}
<table id="mycolla-table" lay-filter="mycolla-table"></table>
</div>
</div>
{% endblock %}
{% block custom_script %}
<!-- 文档名称 -->
<script type="text/html" id="colla-name">
{% verbatim %}
{{# if (d.type == 'doc'){ }}
文档
{{# }else{ }}
文集
{{# } }}
{% endverbatim %}
</script>
<!-- 协作权限 -->
<script type="text/html" id="colla-role">
{% verbatim %}
{{# if (d.role == 0){ }}
<span>初级权限</span><i class="layui-icon layui-icon-about" title="可新建文档,修改、删除自己创建的文档"></i>
{{# }else if(d.role == 1){ }}
<span>高级权限</span><i class="layui-icon layui-icon-about" title="可操作所有文档"></i>
{{# } }}
{% endverbatim %}
</script>
<!-- 创建时间 -->
<script type="text/html" id="create-time">
{% verbatim %}
{{layui.util.toDateString(d.create_time, "yyyy-MM-dd HH:mm:ss")}}
{% endverbatim %}
</script>
<!-- 操作栏 -->
<script type="text/html" id="colla-bar">
{% verbatim %}
{{# if (d.type == 'doc'){ }}
<a class="pear-btn pear-btn-primary pear-btn-sm" href="/modify_doc/{{d.project_id}}/" target="_blank"><i class="layui-icon layui-icon-edit"></i></button>
{{# }else{ }}
<a class="pear-btn pear-btn-primary pear-btn-sm" href="/create_doc/?pid={{d.project_id}}" target="_blank"><i class="layui-icon layui-icon-add-1"></i></button>
{{# } }}
{% endverbatim %}
</script>
<script>
layui.use(['table','jquery','form','layer','element'], function() {
layui.use(['table','jquery','form','layer','element','treetable'], function() {
let table = layui.table;
let form = layui.form;
let $ = layui.jquery;
let layer = layui.layer;
let element = layui.element;
let treetable = layui.treetable;
$.ajaxSetup({
data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
headers: {"X-CSRFToken":'{{ csrf_token }}'},
});
let cols =
// 渲染表格
treetable.render({
treeColIndex: 0,
treeSpid: 0,
treeIdName: 'project_id',
treePidName: 'top_doc',
skin:'line',
method:'get',
treeDefaultClose: true,
elem: '#mycolla-table',
url: "{% url 'my_colla_list' %}",
page: true,
cols: [
[
// {type: 'checkbox',width:20},
{title: '{% trans "名称" %}',field: 'project_name',align: 'left',minWidth:200},
{title: '类型',field: 'type',align: 'left',templet:"#colla-name"},
{title: '权限',field: 'role',align: 'left',templet:"#colla-role"},
{title: '创建人',field: 'username',align: 'left'},
{title: '{% trans "创建时间" %}',field: 'create_time',align: 'left',templet:"#create-time"},
{title: '{% trans "操作" %}',toolbar: '#colla-bar',align: 'left',}
]
],
});
})
</script>