diff --git a/.gitignore b/.gitignore index b87d680..2abff53 100644 --- a/.gitignore +++ b/.gitignore @@ -56,7 +56,7 @@ coverage.xml # Django stuff: *.log local_settings.py -# db.sqlite3 +db.sqlite3 # Flask stuff: instance/ diff --git a/app_admin/views.py b/app_admin/views.py index 0f4099d..edcba02 100644 --- a/app_admin/views.py +++ b/app_admin/views.py @@ -3,7 +3,7 @@ from django.http.response import JsonResponse,HttpResponse 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.core.paginator import Paginator,PageNotAnInteger,EmptyPage,InvalidPage +from django.core.paginator import Paginator,PageNotAnInteger,EmptyPage,InvalidPage # 后端分页 from app_admin.decorators import superuser_only import json import datetime @@ -209,8 +209,8 @@ def admin_del_user(request): @superuser_only def admin_project(request): if request.method == 'GET': - username = request.GET.get('kw','') - if username == '': + search_kw = request.GET.get('kw','') + if search_kw == '': project_list = Project.objects.all() paginator = Paginator(project_list,20) page = request.GET.get('page',1) @@ -221,15 +221,17 @@ def admin_project(request): except EmptyPage: projects = paginator.page(paginator.num_pages) else: - project_list = Project.objects.filter(intro__icontains=username) + project_list = Project.objects.filter(intro__icontains=search_kw) paginator = Paginator(project_list, 20) page = request.GET.get('page', 1) + try: projects = paginator.page(page) except PageNotAnInteger: projects = paginator.page(1) except EmptyPage: projects = paginator.page(paginator.num_pages) + projects.kw = search_kw return render(request,'app_admin/admin_project.html',locals()) else: return HttpResponse('方法错误') @@ -260,6 +262,7 @@ def admin_doc(request): docs = paginator.page(1) except EmptyPage: docs = paginator.page(paginator.num_pages) + docs.kw = kw return render(request,'app_admin/admin_doc.html',locals()) @@ -288,6 +291,7 @@ def admin_doctemp(request): doctemps = paginator.page(1) except EmptyPage: doctemps = paginator.page(paginator.num_pages) + doctemps.kw = kw return render(request,'app_admin/admin_doctemp.html',locals()) diff --git a/app_doc/views.py b/app_doc/views.py index 3746e85..d2103c7 100644 --- a/app_doc/views.py +++ b/app_doc/views.py @@ -1,6 +1,7 @@ from django.shortcuts import render from django.http.response import JsonResponse,Http404,HttpResponseNotAllowed,HttpResponse from django.contrib.auth.decorators import login_required # 登录需求装饰器 +from django.core.paginator import Paginator,PageNotAnInteger,EmptyPage,InvalidPage # 后端分页 from app_doc.models import Project,Doc,DocTemp from django.contrib.auth.models import User from django.db.models import Q @@ -22,7 +23,7 @@ def create_project(request): if name != '': project = Project.objects.create( name=name, - intro=desc, + intro=desc[:100], create_user=request.user ) project.save() @@ -69,7 +70,7 @@ def modify_project(request): try: pro_id = request.POST.get('pro_id',None) project = Project.objects.get(id=pro_id) - if request.user == project.create_user: + if (request.user == project.create_user) or request.user.is_superuser: name = request.POST.get('name',None) content = request.POST.get('desc',None) project.name = name @@ -91,7 +92,7 @@ def del_project(request): pro_id = request.POST.get('pro_id','') if pro_id != '': pro = Project.objects.get(id=pro_id) - if request.user == pro.create_user: + if (request.user == pro.create_user) or request.user.is_superuser: # 删除文集下的文档 pro_doc_list = Doc.objects.filter(top_doc=int(pro_id)) pro_doc_list.delete() @@ -114,8 +115,25 @@ def manage_project(request): search_kw = request.GET.get('kw', None) if search_kw: pro_list = Project.objects.filter(create_user=request.user,intro__icontains=search_kw) + paginator = Paginator(pro_list, 10) + page = request.GET.get('page', 1) + try: + pros = paginator.page(page) + except PageNotAnInteger: + pros = paginator.page(1) + except EmptyPage: + pros = paginator.page(paginator.num_pages) + pros.kw = search_kw else: pro_list = Project.objects.filter(create_user=request.user) + paginator = Paginator(pro_list, 10) + page = request.GET.get('page', 1) + try: + pros = paginator.page(page) + except PageNotAnInteger: + pros = paginator.page(1) + except EmptyPage: + pros = paginator.page(paginator.num_pages) return render(request,'app_doc/manage_project.html',locals()) except Exception as e: return HttpResponse('请求出错') @@ -248,8 +266,25 @@ def manage_doc(request): search_kw = request.GET.get('kw',None) if search_kw: doc_list = Doc.objects.filter(create_user=request.user,content__icontains=search_kw) + paginator = Paginator(doc_list, 10) + page = request.GET.get('page', 1) + try: + docs = paginator.page(page) + except PageNotAnInteger: + docs = paginator.page(1) + except EmptyPage: + docs = paginator.page(paginator.num_pages) + docs.kw = search_kw else: doc_list = Doc.objects.filter(create_user=request.user) + paginator = Paginator(doc_list, 10) + page = request.GET.get('page', 1) + try: + docs = paginator.page(page) + except PageNotAnInteger: + docs = paginator.page(1) + except EmptyPage: + docs = paginator.page(paginator.num_pages) return render(request,'app_doc/manage_doc.html',locals()) else: return HttpResponse('方法不允许') @@ -340,8 +375,25 @@ def manage_doctemp(request): search_kw = request.GET.get('kw', None) if search_kw: doctemp_list = DocTemp.objects.filter(create_user=request.user,content__icontains=search_kw) + paginator = Paginator(doctemp_list, 10) + page = request.GET.get('page', 1) + try: + doctemps = paginator.page(page) + except PageNotAnInteger: + doctemps = paginator.page(1) + except EmptyPage: + doctemps = paginator.page(paginator.num_pages) + doctemps.kw = search_kw else: doctemp_list = DocTemp.objects.filter(create_user=request.user) + paginator = Paginator(doctemp_list, 10) + page = request.GET.get('page', 1) + try: + doctemps = paginator.page(page) + except PageNotAnInteger: + doctemps = paginator.page(1) + except EmptyPage: + doctemps = paginator.page(paginator.num_pages) return render(request, 'app_doc/manage_doctemp.html', locals()) except Exception as e: return HttpResponse('请求出错') diff --git a/static/style.css b/static/style.css index fb32256..cf76f9f 100644 --- a/static/style.css +++ b/static/style.css @@ -44,13 +44,94 @@ .project-item{ float: left; width: 200px; - height: 120px; + /*height: 120px;*/ margin-top: 20px; margin-left: 20px; border: 1px solid #ddd; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,.055); } +.project-desc{ + overflow:hidden; + text-overflow:ellipsis; /* 加省略号 */ + white-space:nowrap; /* 强制不换行 */ +} + +.tooltip { + display: inline; + /*position: relative;*/ + z-index: 999; +} + +/* Gap filler */ + +.tooltip-item::after { + content: ''; + position: absolute; + width: 360px; + height: 20px; + bottom: 100%; + left: 50%; + pointer-events: none; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); +} + +.tooltip:hover .tooltip-item::after { + pointer-events: auto; +} + +/* 文集简介提示工具 */ + +.tooltip-content { + position: absolute; + z-index: 9999; + width: 170px; + left: 78%; + margin: 0 -60px 20px -150px; + padding:10px; + top: 100%; + text-align: left; + box-shadow: -5px -5px 15px rgba(48,54,61,0.2); + background: #2a3035; + opacity: 0; + cursor: default; + pointer-events: none; + font-size: 0.68em; + line-height: 1.35; + display: block; + color: #fff; + -webkit-transform: translate3d(0,-10px,0); + transform: translate3d(0,-10px,0); + -webkit-transition: opacity 0.3s, -webkit-transform 0.3s; + transition: opacity 0.3s, transform 0.3s; +} + +.tooltip:hover .tooltip-content { + pointer-events: auto; + opacity: 1; + -webkit-transform: translate3d(0,0,0) rotate3d(0,0,0,0); + transform: translate3d(0,0,0) rotate3d(0,0,0,0); +} + +/* 箭头 */ + +.tooltip-content::after { + content: ''; + bottom: 100%; /* 箭头在头部 */ + left: 50%; + border: solid transparent; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-color: transparent; + border-bottom-color: #2a3035; + border-width: 10px; + /*margin-left: 10px;8*/ +} + + .layui-card{ box-shadow:0 0 0 0; } @@ -242,7 +323,7 @@ li.active > a{ font-size: 28px; font-weight: 700; } - +/* 返回顶部 */ .toTop { width: 70px; height: 70px; @@ -264,7 +345,7 @@ li.active > a{ cursor: pointer; color: red; } - +/*切换字号*/ .switch-font{ font-family: Serif; } diff --git a/template/app_admin/admin_base.html b/template/app_admin/admin_base.html index 37b5613..f5ec857 100644 --- a/template/app_admin/admin_base.html +++ b/template/app_admin/admin_base.html @@ -19,7 +19,7 @@ {# #}

MrDoc - 后台管理 + 后台管理

diff --git a/template/app_admin/admin_doc.html b/template/app_admin/admin_doc.html index 09351d7..c82eea8 100644 --- a/template/app_admin/admin_doc.html +++ b/template/app_admin/admin_doc.html @@ -56,13 +56,13 @@ diff --git a/template/app_admin/admin_doctemp.html b/template/app_admin/admin_doctemp.html index 5ea1daf..8fad960 100644 --- a/template/app_admin/admin_doctemp.html +++ b/template/app_admin/admin_doctemp.html @@ -55,13 +55,13 @@ diff --git a/template/app_admin/admin_project.html b/template/app_admin/admin_project.html index e863a52..3196029 100644 --- a/template/app_admin/admin_project.html +++ b/template/app_admin/admin_project.html @@ -21,6 +21,14 @@
+ + + + + + + + @@ -55,13 +63,13 @@ diff --git a/template/app_doc/create_base.html b/template/app_doc/create_base.html index 29194a3..406c40f 100644 --- a/template/app_doc/create_base.html +++ b/template/app_doc/create_base.html @@ -64,7 +64,19 @@ var editor = editormd("editor-md", { width : "100%", height : "1000px;", - placeholder : "开始使用Markdown书写……", + placeholder : "开始使用Markdown书写MrDoc文档……\n编辑器支持粘贴上传图片", + toolbarIcons : function() { + return [ + "undo", "redo", "|", + "bold", "del", "italic", "quote", "ucwords", "uppercase", "lowercase", "|", + "h1", "h2", "h3", "h4", "h5", "h6", "|", + "list-ul", "list-ol", "hr", "|", + "link", "reference-link", "image", "code", "preformatted-text", "code-block", "table", "datetime", "emoji", "html-entities", "pagebreak", "|", + "watch", "preview", "clear", "search", "|", + "help" + ] + }, + pageBreak : true, //分页符 path : "/static/editor.md/lib/", saveHTMLToTextarea : true, tex : true,//开启科学公式 diff --git a/template/app_doc/create_doc.html b/template/app_doc/create_doc.html index 6415f5b..69a4167 100644 --- a/template/app_doc/create_doc.html +++ b/template/app_doc/create_doc.html @@ -56,7 +56,7 @@ title:'新建文集', area:'300px;', id:'createPro',//配置ID - content:'
', + content:'
', btn:['确定','取消'], //添加按钮 btnAlign:'c', //按钮居中 yes:function (index,layero) { @@ -107,17 +107,25 @@ 'sort':$("#sort").val(), } console.log(data) - $.post("{% url 'create_doc' %}",data,function(r){ - if(r.status){ - //创建成功 - layer.msg('保存成功',function(){ - window.location.href = "{% url 'pro_list' %}"; - }); - }else{ - //创建失败 - layer.msg('保存失败'); - } - }); + if(data.doc_name == ""){ + layer.msg('请输入文档标题!'); + } + else if(data.project == ""){ + layer.msg('请选择文集!'); + } + else{ + $.post("{% url 'create_doc' %}",data,function(r){ + if(r.status){ + //创建成功 + layer.msg('保存成功',function(){ + window.location.href = "{% url 'pro_list' %}"; + }); + }else{ + //创建失败 + layer.msg('保存失败:'+r.data); + } + }); + } }; //选择文档模板 $("#sel-doctemp").click(function(){ diff --git a/template/app_doc/manage_base.html b/template/app_doc/manage_base.html index 335d5fa..7161829 100644 --- a/template/app_doc/manage_base.html +++ b/template/app_doc/manage_base.html @@ -21,7 +21,10 @@ {% load doc_filter %} - {% for doc in doc_list %} + {% for doc in docs %} @@ -54,6 +54,22 @@
文集名称
{{ doc.name }} {{ doc.parent_doc|get_doc_parent }}
+ +
+ +
{% endblock %} {% block custom_script %}