新增首页文集置顶功能

This commit is contained in:
yangjian 2021-01-31 20:48:24 +08:00
parent 8d532cbf8a
commit 577f6c11e8
8 changed files with 117 additions and 27 deletions

View File

@ -12,6 +12,7 @@ urlpatterns = [
path('modify_pwd',views.change_pwd,name="modify_pwd"), # 普通用户修改密码
path('project_manage/',views.admin_project,name='project_manage'), # 文集管理
path('project_role_manage/<int:pro_id>/',views.admin_project_role,name="admin_project_role"), # 管理文集权限
path('project_manage_istop',views.admin_project_istop,name="admin_project_istop"), # 修改文集置顶状态
path('doc_manage/',views.admin_doc,name='doc_manage'), # 文档管理
path('doctemp_manage/',views.admin_doctemp,name='doctemp_manage'), # 文档模板管理
path('setting/',views.admin_setting,name="sys_setting"), # 应用设置

View File

@ -4,6 +4,7 @@ from django.http.response import JsonResponse,HttpResponse,Http404
from django.contrib.auth import authenticate,login,logout # 认证相关方法
from django.contrib.auth.models import User # Django默认用户模型
from django.contrib.auth.decorators import login_required # 登录需求装饰器
from django.views.decorators.http import require_http_methods,require_GET,require_POST # 视图请求方法装饰器
from django.core.paginator import Paginator,PageNotAnInteger,EmptyPage,InvalidPage # 后端分页
from app_admin.decorators import superuser_only,open_register
from django.core.exceptions import ObjectDoesNotExist
@ -402,6 +403,7 @@ def admin_project(request):
'role': project.role,
'role_value': project.role_value,
'colla_total': ProjectCollaborator.objects.filter(project=project).count(),
'is_top':project.is_top,
'create_user':project.create_user.username,
'create_time': project.create_time,
'modify_time': project.modify_time
@ -449,6 +451,23 @@ def admin_project_role(request,pro_id):
else:
return Http404
# 后台管理 - 控制文集置顶状态
@superuser_only
@require_POST
def admin_project_istop(request):
try:
project_id = request.POST.get('id')
is_top = request.POST.get('is_top')
if is_top == 'true':
is_top = True
else:
is_top = False
Project.objects.filter(id=project_id).update(is_top=is_top)
return JsonResponse({'status':True})
except:
logger.exception("置顶文集出错")
return JsonResponse({'status':False,'data':'执行出错'})
# 后台管理 - 文档管理
@superuser_only

View File

@ -0,0 +1,18 @@
# Generated by Django 2.2.12 on 2021-01-31 16:24
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app_doc', '0037_mycollect'),
]
operations = [
migrations.AddField(
model_name='project',
name='is_top',
field=models.BooleanField(default=False, verbose_name='是否置顶'),
),
]

View File

@ -13,6 +13,7 @@ class Project(models.Model):
is_watermark = models.BooleanField(verbose_name="水印状态",default=False)
watermark_type = models.IntegerField(verbose_name="水印类型",default=1) # 1表示文字水印 2表示图片水印
watermark_value = models.CharField(verbose_name="水印内容",null=True,blank=True,default='',max_length=250)
is_top = models.BooleanField(verbose_name="是否置顶",default=False)
create_user = models.ForeignKey(User,on_delete=models.CASCADE)
create_time = models.DateTimeField(auto_now_add=True)
modify_time = models.DateTimeField(auto_now=True)

View File

@ -169,34 +169,36 @@ def project_list(request):
Q(role=2,role_value__contains=str(request.user.username)) | \
Q(create_user=request.user) | \
Q(id__in=colla_list)
).order_by("{}create_time".format(sort_str))
).order_by('-is_top',"{}create_time".format(sort_str))
# 没有搜索 and 认证用户 and 有筛选
elif (is_kw is False ) and (is_auth) and (is_role):
if role in ['0',0]:
project_list = Project.objects.filter(role=0).order_by("{}create_time".format(sort_str))
project_list = Project.objects.filter(role=0).order_by('-is_top',"{}create_time".format(sort_str))
elif role in ['1',1]:
project_list = Project.objects.filter(create_user=request.user,role=1).order_by("{}create_time".format(sort_str))
project_list = Project.objects.filter(create_user=request.user,role=1).order_by(
'-is_top',"{}create_time".format(sort_str))
elif role in ['2',2]:
project_list = Project.objects.filter(role=2,role_value__contains=str(request.user.username)).order_by("{}create_time".format(sort_str))
project_list = Project.objects.filter(role=2,role_value__contains=str(request.user.username)).order_by(
'-is_top',"{}create_time".format(sort_str))
elif role in ['3',3]:
project_list = Project.objects.filter(role=3).order_by("{}create_time".format(sort_str))
project_list = Project.objects.filter(role=3).order_by('-is_top',"{}create_time".format(sort_str))
elif role in ['99',99]:
colla_list = [i.project.id for i in ProjectCollaborator.objects.filter(user=request.user)] # 用户的协作文集列表
project_list = Project.objects.filter(id__in=colla_list).order_by("{}create_time".format(sort_str))
project_list = Project.objects.filter(id__in=colla_list).order_by('-is_top',"{}create_time".format(sort_str))
else:
return render(request,'404.html')
# 没有搜索 and 游客 and 没有筛选
elif (is_kw is False) and (is_auth is False) and (is_role is False):
project_list = Project.objects.filter(role__in=[0,3]).order_by("{}create_time".format(sort_str))
project_list = Project.objects.filter(role__in=[0,3]).order_by('-is_top',"{}create_time".format(sort_str))
# 没有搜索 and 游客 and 有筛选
elif (is_kw is False) and (is_auth is False) and (is_role):
if role in ['0',0]:
project_list = Project.objects.filter(role=0).order_by("{}create_time".format(sort_str))
project_list = Project.objects.filter(role=0).order_by('-is_top',"{}create_time".format(sort_str))
elif role in ['3',3]:
project_list = Project.objects.filter(role=3).order_by("{}create_time".format(sort_str))
project_list = Project.objects.filter(role=3).order_by('-is_top',"{}create_time".format(sort_str))
else:
return render(request,'404.html')
@ -210,7 +212,7 @@ def project_list(request):
Q(create_user=request.user) | \
Q(id__in=colla_list),
Q(name__icontains=kw) | Q(intro__icontains=kw)
).order_by('{}create_time'.format(sort_str))
).order_by('-is_top','{}create_time'.format(sort_str))
# 有搜索 and 认证用户 and 有筛选
elif (is_kw) and (is_auth) and (is_role):
@ -218,29 +220,29 @@ def project_list(request):
project_list = Project.objects.filter(
Q(name__icontains=kw)|Q(intro__icontains=kw),
role=0
).order_by("{}create_time".format(sort_str))
).order_by('-is_top',"{}create_time".format(sort_str))
elif role in ['1',1]:
project_list = Project.objects.filter(
Q(name__icontains=kw) | Q(intro__icontains=kw),
create_user=request.user
).order_by("{}create_time".format(sort_str))
).order_by('-is_top',"{}create_time".format(sort_str))
elif role in ['2',2]:
project_list = Project.objects.filter(
Q(name__icontains=kw) | Q(intro__icontains=kw),
role=2,
role_value__contains=str(request.user.username)
).order_by("{}create_time".format(sort_str))
).order_by('-is_top',"{}create_time".format(sort_str))
elif role in ['3',3]:
project_list = Project.objects.filter(
Q(name__icontains=kw) | Q(intro__icontains=kw),
role=3
).order_by("{}create_time".format(sort_str))
).order_by('-is_top',"{}create_time".format(sort_str))
elif role in ['99',99]:
colla_list = [i.project.id for i in ProjectCollaborator.objects.filter(user=request.user)] # 用户的协作文集列表
project_list = Project.objects.filter(
Q(name__icontains=kw) | Q(intro__icontains=kw),
id__in=colla_list
).order_by("{}create_time".format(sort_str))
).order_by('-is_top',"{}create_time".format(sort_str))
else:
return render(request,'404.html')
@ -249,7 +251,7 @@ def project_list(request):
project_list = Project.objects.filter(
Q(name__icontains=kw) | Q(intro__icontains=kw),
role__in=[0, 3]
).order_by("{}create_time".format(sort_str))
).order_by('-is_top',"{}create_time".format(sort_str))
# 有搜索 and 游客 and 有筛选
elif (is_kw) and (is_auth is False) and (is_role):
@ -257,12 +259,12 @@ def project_list(request):
project_list = Project.objects.filter(
Q(name__icontains=kw) | Q(intro__icontains=kw),
role=0
).order_by("{}create_time".format(sort_str))
).order_by('-is_top',"{}create_time".format(sort_str))
elif role in ['3',3]:
project_list = Project.objects.filter(
Q(name__icontains=kw) | Q(intro__icontains=kw),
role=3
).order_by("{}create_time".format(sort_str))
).order_by('-is_top',"{}create_time".format(sort_str))
else:
return render(request,'404.html')
@ -2016,7 +2018,6 @@ def report_md(request):
def genera_project_file(request):
report_type = request.POST.get('types',None) # 获取前端传入到导出文件类型参数
# 导出EPUB文件
pro_id = request.POST.get('pro_id')
try:
project = Project.objects.get(id=int(pro_id))
@ -2136,6 +2137,7 @@ def genera_project_file(request):
return JsonResponse({'status': True, 'data': pdf_file})
except Exception as e:
logger.exception("生成出错")
return JsonResponse({'status': False, 'data': '生成出错'})
else:
return JsonResponse({'status': False, 'data': '不支持的类型'})

View File

@ -80,6 +80,14 @@
{{layui.util.toDateString(d.create_time, "yyyy-MM-dd HH:mm:ss")}}
{% endverbatim %}
</script>
<!-- 文集置顶 -->
<script type="text/html" id="is-top">
{% verbatim %}
<input type="checkbox" name="is_top" value="{{d.id}}" lay-skin="switch" lay-text="是|否" lay-filter="topActive" {{ d.is_top === true ? 'checked' : '' }}>
{% endverbatim %}
</script>
{% endblock %}
{% block custom_script %}
<script>
@ -100,6 +108,7 @@
{title: '文档数',field: 'doc_total',align: 'left',width:90},
{title: '协作人数',field: 'colla_total',align: 'left',templet:"#colla-cnt",width:90},
{title: '作者',field: 'create_user',align: 'left',width:90},
{title: '置顶',field: 'is_top',align: 'left',width:90,templet:"#is-top"},
{title: '创建时间',field: 'create_time',align: 'left',templet:"#project-create-time"},
{title: '操作',toolbar: '#project-bar',align: 'left',}
]
@ -140,6 +149,39 @@
})
}
});
// 侦听文集置顶开关
form.on('switch(topActive)', function(obj){
loading = layer.load(1)
$.ajax({
url:'{% url "admin_project_istop" %}',
type:'post',
data:{
'id':this.value,'is_top':obj.elem.checked,
},
success: function(r) {
layer.close(loading);
if (r.status) {
layer.msg('修改成功', {
icon: 1,
time: 1000
},function(){
table.reload("project-table")
});
} else {
layer.msg(r.data, {
icon: 2,
time: 1000
});
}
},
error:function(){
layer.close(loading);
layer.msg("置顶失败")
}
})
});
//创建文集
createProject = function(){
layer.open({

View File

@ -98,7 +98,7 @@
// {title: '简介',field: 'intro',align: 'left',templet:"#share-type"},
// {title: '权限',field: 'role',align: 'left',templet:"#project-role"},
{title: '{% trans "文档数" %}',field: 'doc_total',align: 'left',width:90},
{title: '{% trans "协作人数" %}',field: 'colla_total',align: 'left',templet:"#colla-cnt",width:90},
{title: '{% trans "文集成员" %}',field: 'colla_total',align: 'left',templet:"#colla-cnt",width:90},
{title: '{% trans "创建时间" %}',field: 'create_time',align: 'left',templet:"#project-create-time"},
{title: '{% trans "操作" %}',toolbar: '#project-bar',align: 'left',}
]
@ -131,13 +131,13 @@
}else if(obj.event === 'batchRemove'){ // 批量删除文集
batchRemove(obj)
}else if(obj.event === 'search'){ // 搜索文集
console.log('搜索文集')
// console.log('搜索文集')
table.reload('project-table',{
where:{
'type':1,'kw':$('input[name="project-search-kw"]').val()
},
'type':1,'kw':$('input[name="project-search-kw"]').val()
},
})
}
}
});
//创建文集
createProject = function(){
@ -295,7 +295,7 @@
}
}
});
}
};
})
</script>
{% endblock %}

View File

@ -14,6 +14,7 @@
<title>{% if site_name != None and site_name != '' %}{{site_name}} {% else %}{% trans "站点标题" %}{% endif %} - {% if site_sub_name != None %}{{site_sub_name}} {% else %}{% trans "又一个MrDoc站点" %}{% endif %}</title>
<link href="{% static 'layui/css/layui.css' %}" rel="stylesheet">
<link href="{% static 'mrdoc/mrdoc.css' %}?version={{mrdoc_version}}" rel="stylesheet">
<link href="{% static 'iconFont/iconfont.css' %}?version={{mrdoc_version}}" rel="stylesheet">
<link rel="icon" href="{% static 'search/mrdoc_logo_300.png' %}" sizes="192x192" />
<style>
.layui-nav .layui-this:after, .layui-nav-bar, .layui-nav-tree, .layui-nav-itemed:after {
@ -134,9 +135,15 @@
{% endif %}
>
{% if p.icon %}
<p class="layui-elip" style="font-weight: 700;"><svg class="icon" aria-hidden="true"><use xlink:href="#{{p.icon}}"></use></svg> {{ p.name }}&nbsp;&nbsp;<span class="layui-badge-rim">{{p.id|get_doc_count}}</span></p>
<p class="layui-elip" style="font-weight: 700;">
{% if p.is_top %}<i class="iconfont mrdoc-icon-totop" title="置顶文集" style="color: red;font-size: 12px;"></i>{% endif %}
<svg class="icon" aria-hidden="true"><use xlink:href="#{{p.icon}}"></use></svg> {{ p.name }}&nbsp;&nbsp;<span class="layui-badge-rim">{{p.id|get_doc_count}}</span>
</p>
{% else %}
<p class="layui-elip" style="font-weight: 700;"><svg class="icon" aria-hidden="true"><use xlink:href="#mrdoc-icon-pro-2"></use></svg> {{ p.name }}&nbsp;&nbsp;<span class="layui-badge-rim">{{p.id|get_doc_count}}</span></p>
<p class="layui-elip" style="font-weight: 700;">
{% if p.is_top %}<i class="iconfont mrdoc-icon-totop" title="置顶文集" style="color: red;font-size: 12px;"></i>{% endif %}
<svg class="icon" aria-hidden="true"><use xlink:href="#mrdoc-icon-pro-2"></use></svg> {{ p.name }}&nbsp;&nbsp;<span class="layui-badge-rim">{{p.id|get_doc_count}}</span>
</p>
{% endif %}
</div>
<div class="layui-card-body" style="font-size: 12px;">