完善文档管理功能

This commit is contained in:
yangjian 2019-07-23 22:03:51 +08:00
parent a4996c0f52
commit 8c7ba0d6bb
9 changed files with 385 additions and 45 deletions

View File

@ -9,14 +9,15 @@ urlpatterns = [
path('get_pro_doc/', views.get_pro_doc, name="get_pro_doc"), # 获取某个文集的下级文档
path('modify_pro/',views.modify_project,name='modify_project'), # 修改文集
path('manage_project',views.manage_project,name="manage_project"), # 管理文集
path('del_project/',views.del_project,name='del_project'), # 删除文集
#################文档相关
path('project/<int:pro_id>/<int:doc_id>/', views.doc, name='doc'), # 文档浏览页
path('create_doc/', views.create_doc, name="create_doc"), # 新建文档
path('modify_doc/<int:doc_id>/', views.modify_doc, name="modify_doc"), # 修改文档
path('del_doc/<int:doc_id>/',views.del_doc,name="del_doc"), # 删除文档
path('del_doc/',views.del_doc,name="del_doc"), # 删除文档
path('manage_doc/',views.manage_doc,name="manage_doc"), # 管理文档
#################文档模板相关
path('manage_doctemp',views.manage_doctemp,name='manage_doctemp'), # 文档模板列表
path('manage_doctemp/',views.manage_doctemp,name='manage_doctemp'), # 文档模板列表
path('create_doctemp/',views.create_doctemp,name="create_doctemp"), # 创建文档模板
path('get_doctemp/',views.get_doctemp,name='get_doctemp'), # 获取某一个文档模板内容
path('del_doctemp/',views.del_doctemp,name="del_doctemp"), # 删除某一个文档模板

View File

@ -60,12 +60,13 @@ def modify_project(request):
if request.method == 'POST':
pro_id = request.POST.get('pro_id',None)
project = Project.objects.get(id=pro_id)
if request.user is project.create_user:
if request.user == project.create_user:
name = request.POST.get('name',None)
content = request.POST.get('desc',None)
project.name = name
project.intro = content
project.save()
return JsonResponse({'status':True,'data':'修改成功'})
else:
return JsonResponse({'status':False,'data':'非法请求'})
else:
@ -74,14 +75,27 @@ def modify_project(request):
# 删除文集
@login_required()
def del_project(request,pro_id):
pass
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:
pro.delete()
return JsonResponse({'status':True})
else:
return JsonResponse({'status':False,'data':'非法请求'})
else:
return JsonResponse({'status':False,'data':'参数错误'})
# 管理文集
@login_required()
def manage_project(request):
if request.method == 'GET':
pro_list = Project.objects.filter(create_user=request.user)
search_kw = request.GET.get('kw', None)
if search_kw:
pro_list = Project.objects.filter(create_user=request.user,intro__icontains=search_kw)
else:
pro_list = Project.objects.filter(create_user=request.user)
return render(request,'app_doc/manage_project.html',locals())
@ -161,19 +175,27 @@ def modify_doc(request,doc_id):
# 删除文档
@login_required()
def del_doc(request,doc_id):
doc = Doc.objects.get(id=doc_id)
if request.user == doc.create_user:
doc.delete()
return JsonResponse({'status': True, 'data': '删除完成'})
def del_doc(request):
doc_id = request.POST.get('doc_id',None)
if doc_id:
doc = Doc.objects.get(id=doc_id)
if request.user == doc.create_user:
doc.delete()
return JsonResponse({'status': True, 'data': '删除完成'})
else:
return JsonResponse({'status': False, 'data': '非法请求'})
else:
return JsonResponse({'status': False, 'data': '非法请求'})
return JsonResponse({'status':False,'data':'参数错误'})
# 管理文档
@login_required()
def manage_doc(request):
if request.method == 'GET':
doc_list = Doc.objects.filter(create_user=request.user)
search_kw = request.GET.get('kw',None)
if search_kw:
doc_list = Doc.objects.filter(create_user=request.user,content__icontains=search_kw)
else:
doc_list = Doc.objects.filter(create_user=request.user)
return render(request,'app_doc/manage_doc.html',locals())
# 创建文档模板
@ -206,7 +228,20 @@ def modify_doctemp(request,doctemp_id):
else:
return HttpResponse('非法请求')
elif request.method == 'POST':
pass
doctemp_id = request.POST.get('doctemp_id','')
name = request.POST.get('name','')
content = request.POST.get('content','')
if doctemp_id != '' and name !='':
doctemp = DocTemp.objects.get(id=doctemp_id)
if request.user.id == doctemp.create_user.id:
doctemp.name = name
doctemp.content = content
doctemp.save()
return JsonResponse({'status':True,'data':'修改成功'})
else:
return JsonResponse({'status':False,'data':'非法操作'})
else:
return JsonResponse({'status':False,'data':'参数错误'})
# 删除文档模板
@ -228,7 +263,11 @@ def del_doctemp(request):
@login_required()
def manage_doctemp(request):
if request.method == 'GET':
doctemp_list = DocTemp.objects.filter(create_user=request.user)
search_kw = request.GET.get('kw', None)
if search_kw:
doctemp_list = DocTemp.objects.filter(create_user=request.user,content__icontains=search_kw)
else:
doctemp_list = DocTemp.objects.filter(create_user=request.user)
return render(request, 'app_doc/manage_doctemp.html', locals())

Binary file not shown.

View File

@ -266,4 +266,4 @@ li.active > a{
.switch-font{
font-family: Serif;
}
}

View File

@ -10,6 +10,9 @@
.logo img{
height: 30px;
}
.layui-btn a{
color:white;
}
</style>
</head>
<body class="layui-layout-body">
@ -64,18 +67,21 @@
<script src="{% static 'layui/layui.all.js' %}"></script>
<script>
//为当前页面的目录链接添加样式
$("li a").each(function (i) {
var $me = $(this);
var lochref = $.trim(window.location.href);
var mehref = $.trim($me.get(0).href);
if (lochref.indexOf(mehref) != -1) {
//console.log($me,lochref,mehref)
$me.parent().addClass("layui-this");
} else {
//console.log(lochref,mehref)
$me.parent().removeClass("layui-this");
}
});
$("li a").each(function (i) {
var $me = $(this);
var lochref = $.trim(window.location.href);
var mehref = $.trim($me.get(0).href);
if (lochref.indexOf(mehref) != -1) {
//console.log($me,lochref,mehref)
$me.parent().addClass("layui-this");
} else {
//console.log(lochref,mehref)
$me.parent().removeClass("layui-this");
}
});
$.ajaxSetup({
data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
});
</script>
{% block custom_script %}
{% endblock %}

View File

@ -9,13 +9,15 @@
</div>
</div>
<div class="layui-row">
<form action="{% url 'manage_doc' %}" method="get">
<div class="layui-form-item">
<div class="layui-input-inline">
<input type="text" name="username" id="username" required lay-verify="required" placeholder="输入文档内容" autocomplete="off" class="layui-input">
<input type="text" name="kw" id="kw" required lay-verify="required" placeholder="输入文档内容" autocomplete="off" class="layui-input">
</div>
<button class="layui-btn layui-btn-normal">搜索</button>
<button class="layui-btn layui-btn-normal" onclick="createTemp()">新建文档</button>
<button class="layui-btn layui-btn-normal" type="submit">搜索</button>
<button class="layui-btn layui-btn-normal"><a href="{% url 'create_doc' %}" target="_blank">新建文档</a></button>
</div>
</form>
</div>
<div class="layui-row" lay-skin="line">
<table class="layui-table" id="doctemp-list" lay-skin="line">
@ -45,11 +47,42 @@
<td>
{# <a href="javascript:void(0);" onclick="insertTemp('{{temp.id}}');">查看</a>#}
<a href="{% url 'modify_doc' doc_id=doc.id %}" target="_blank">修改</a>
<a href="javascript:void(0);" onclick="delDoc();">删除</a>
<a href="javascript:void(0);" onclick="delDoc('{{doc.id}}');">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}
{% block custom_script %}
<script>
delDoc = function(doc_id){
layer.open({
type:1,
title:'删除文档',
area:'300px;',
id:'delPro',//配置ID
content:'<div style="margin-left:10px;">警告:此操作将删除此文档!</div>',
btn:['确定','取消'], //添加按钮
btnAlign:'c', //按钮居中
yes:function (index,layero) {
data = {
'doc_id':doc_id,
}
$.post("{% url 'del_doc' %}",data,function(r){
if(r.status){
//修改成功
window.location.reload();
//layer.close(index)
}else{
//修改失败,提示
console.log(r)
layer.msg(r.data)
}
})
},
});
}
</script>
{% endblock %}

View File

@ -9,13 +9,15 @@
</div>
</div>
<div class="layui-row">
<form action="{% url 'manage_doctemp' %}" method="get">
<div class="layui-form-item">
<div class="layui-input-inline">
<input type="text" name="username" id="username" required lay-verify="required" placeholder="输入文档模板内容" autocomplete="off" class="layui-input">
<input type="text" name="kw" id="kw" required lay-verify="required" placeholder="输入文档模板内容" autocomplete="off" class="layui-input">
</div>
<button class="layui-btn layui-btn-normal">搜索</button>
<button class="layui-btn layui-btn-normal" onclick="createTemp()">新建文档模板</button>
<button class="layui-btn layui-btn-normal" type="submit">搜索</button>
<button class="layui-btn layui-btn-normal" type="button"><a href="{% url 'create_doctemp' %}" target="_blank">新建文档模板</a></button>
</div>
</form>
</div>
<div class="layui-row" lay-skin="line">
<table class="layui-table" id="doctemp-list" lay-skin="line">
@ -39,11 +41,42 @@
<td>
{# <a href="javascript:void(0);" onclick="insertTemp('{{temp.id}}');">查看</a>#}
<a href="{% url 'modify_doctemp' doctemp_id=temp.id %}" target="_blank">修改</a>
<a href="javascript:void(0);" onclick="delTemp();">删除</a>
<a href="javascript:void(0);" onclick="delTemp('{{temp.id}}');">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}
{% block custom_script %}
<script>
delTemp = function(doctemp_id){
layer.open({
type:1,
title:'删除文档',
area:'300px;',
id:'delPro',//配置ID
content:'<div style="margin-left:10px;">警告:此操作将删除此文档模板!</div>',
btn:['确定','取消'], //添加按钮
btnAlign:'c', //按钮居中
yes:function (index,layero) {
data = {
'doctemp_id':doctemp_id,
}
$.post("{% url 'del_doctemp' %}",data,function(r){
if(r.status){
//修改成功
window.location.reload();
//layer.close(index)
}else{
//修改失败,提示
console.log(r)
layer.msg(r.data)
}
})
},
});
}
</script>
{% endblock %}

View File

@ -9,13 +9,15 @@
</div>
</div>
<div class="layui-row">
<form action="{% url 'manage_project' %}" method="get">
<div class="layui-form-item">
<div class="layui-input-inline">
<input type="text" name="username" id="username" required lay-verify="required" placeholder="输入文内容" autocomplete="off" class="layui-input">
<input type="text" name="kw" id="kw" required lay-verify="required" placeholder="输入文内容" autocomplete="off" class="layui-input">
</div>
<button class="layui-btn layui-btn-normal">搜索</button>
<button class="layui-btn layui-btn-normal" onclick="createTemp()">新建文集</button>
<button class="layui-btn layui-btn-normal" type="submit">搜索</button>
<button class="layui-btn layui-btn-normal" onclick="createProject()" type="button">新建文集</button>
</div>
</form>
</div>
<div class="layui-row" lay-skin="line">
<table class="layui-table" id="doctemp-list" lay-skin="line">
@ -39,13 +41,104 @@
<td>{{ pro.intro }}</td>
<td>{{ pro.create_time }}</td>
<td>
{# <a href="javascript:void(0);" onclick="insertTemp('{{temp.id}}');">查看</a>#}
<a href="{% url 'modify_doc' doc_id=pro.id %}" target="_blank">修改</a>
<a href="javascript:void(0);" onclick="delDoc();">删除</a>
<a href="{% url 'pro_index' pro_id=pro.id %}" target="_blank">查看</a>
<a href="javascript:void(0);" onclick="modifyProject('{{pro.id}}','{{pro.name}}','{{pro.intro}}')">修改</a>
<a href="javascript:void(0);" onclick="delProject('{{pro.id}}');">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}
{% block custom_script %}
<script>
$.ajaxSetup({
data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
});
createProject = function(){
layer.open({
type:1,
title:'新建文集',
area:'300px;',
id:'createPro',//配置ID
content:'<div style="padding: 20px;"><input class="layui-input" type="text" id="pname" style="margin-bottom:10px;" placeholder="输入文集名" required lay-verify="required"><textarea name="desc" id="desc" placeholder="输入文集简介" class="layui-textarea"></textarea></div>',
btn:['确定','取消'], //添加按钮
btnAlign:'c', //按钮居中
yes:function (index,layero) {
data = {
'pname':$("#pname").val(),
'desc':$("#desc").val(),
}
$.post("{% url 'create_project' %}",data,function(r){
if(r.status){
//创建成功
window.location.reload();
//layer.close(index)
}else{
//创建失败,提示
console.log(r)
}
})
},
});
};
modifyProject = function(pro_id,pro_name,pro_intro){
layer.open({
type:1,
title:'修改文集',
area:'300px;',
id:'modifyPro',//配置ID
content:'<div style="padding: 20px;"><input class="layui-input" type="text" id="pname" style="margin-bottom:10px;" placeholder="输入文集名" required lay-verify="required" value="'+pro_name+'"><textarea name="desc" id="desc" placeholder="输入文集简介" class="layui-textarea">'+pro_intro+'</textarea></div>',
btn:['确定','取消'], //添加按钮
btnAlign:'c', //按钮居中
yes:function (index,layero) {
data = {
'pro_id':pro_id,
'name':$("#pname").val(),
'desc':$("#desc").val(),
}
$.post("{% url 'modify_project' %}",data,function(r){
if(r.status){
//修改成功
window.location.reload();
//layer.close(index)
}else{
//修改失败,提示
console.log(r)
layer.msg(r.data)
}
})
},
});
};
delProject = function(pro_id){
layer.open({
type:1,
title:'删除文集',
area:'300px;',
id:'delPro',//配置ID
content:'<div style="margin-left:10px;">警告:此操作将删除文集及文集下所有文档!</div>',
btn:['确定','取消'], //添加按钮
btnAlign:'c', //按钮居中
yes:function (index,layero) {
data = {
'pro_id':pro_id,
}
$.post("{% url 'del_project' %}",data,function(r){
if(r.status){
//修改成功
window.location.reload();
//layer.close(index)
}else{
//修改失败,提示
console.log(r)
layer.msg(r.data)
}
})
},
});
}
</script>
{% endblock %}

View File

@ -1,10 +1,145 @@
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>Title</title>
<title>修改文档模板 - MrDoc</title>
<link href="{% static 'layui/css/layui.css' %}" rel="stylesheet">
<link rel="stylesheet" href="{% static 'editor.md/css/editormd.css' %}" />
<link href="{% static 'style.css' %}" rel="stylesheet">
</head>
<body>
<body class="layui-layout-body">
<div class="layui-header">
<div class="layui-main">
<a class="logo" href="{% url 'pro_list' %}">
<img src="/media/logo.png" />
</a>
{# <div class="component">#}
{# <div class="layui-input-inline">#}
{# <input class="layui-input" placeholder="搜索文集"/>#}
{# </div>#}
{# </div>#}
<ul class="layui-nav layui-layout-right">
{% if request.user.is_authenticated %}
<li class="layui-nav-item">
<a href="javascript:void(0);">
<i class="layui-icon layui-icon-username"></i> {{request.user.username}}
</a>
<dl class="layui-nav-child">
<!-- <dd><a href="">基本资料</a></dd> -->
<dd><a href="{% url 'manage_doc' %}">管理文档</a></dd>
<dd><a href="javascript:void(0);">修改密码</a></dd>
<dd><a href="{% url 'logout' %}">退出登录</a></dd>
</dl>
</li>
{% else %}
<li class="layui-nav-item">
<a href="javascript:void(0);">
<i class="layui-icon layui-icon-username"></i> 游客
</a>
<dl class="layui-nav-child">
<!-- <dd><a href="">基本资料</a></dd> -->
<dd><a href="javascript:void(0);">注册</a></dd>
<dd><a href="{% url 'login' %}">登录</a></dd>
</dl>
</li>
{% endif %}
</ul>
</div>
</div>
<div class="layui-main">
<div class="create-doc-form">
<div class="layui-form">
<label class="layui-form-label">模板标题</label>
<div class="layui-input-inline">
<input type="text" name="doc-name" id="doctemp-name" required lay-verify="required" value="{{doctemp.name}}" placeholder="请输入模板名称" autocomplete="off" class="layui-input">
</div>
<label class="doc-form-label">
<button class="layui-btn layui-btn-normal" onclick="modifyDocTemp()">保存</button>
</label>
</div>
</div>
<div id="editor-md">
<textarea style="display:none;">{{doctemp.content}}</textarea>
<textarea class="editormd-html-textarea" name="$id-html-code"></textarea>
</div>
</div>
<script src="https://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
<script src="{% static 'layui/layui.all.js' %}"></script>
<script src="{% static 'editor.md/editormd.min.js' %}"></script>
{% block custom_script %}
<script>
layui.config({
base: "/static/layui/module/"
}).extend({
treeSelect: "treeSelect/treeSelect"
});
$.ajaxSetup({
data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
});
//初始化editormd
var editor = editormd("editor-md", {
width : "100%",
height : "1000px;",
placeholder:"开始使用Markdown书写……",
path : "/static/editor.md/lib/",
saveHTMLToTextarea : true,
tex:true,//开启科学公式
tocm:true,//开启下拉目录
taskList:true,//开启任务列表
tocTitle:'文章导读',
tocContainer:'',
tocDropdown:false,
emoji:true,
});
//粘贴上传图片
$("#editor-md").on('paste', function (ev) {
var data = ev.clipboardData;
var items = (event.clipboardData || event.originalEvent.clipboardData).items;
for (var index in items) {
var item = items[index];
if (item.kind === 'file') {
var blob = item.getAsFile();
var reader = new FileReader();
reader.onload = function (event) {
var base64 = event.target.result;
//ajax上传图片
$.post("{% url 'upload_doc_img' %}",{base:base64}, function (ret) {
layer.msg(ret.message);
if (ret.success === 1) {
//新一行的图片显示
editor.insertValue("\n![](" + ret.url + ")");
}
});
}; // data url!
var url = reader.readAsDataURL(blob);
}
}
});
var layer = layui.layer;
var form = layui.form;
//修改文档模板
modifyDocTemp = function(){
var data = {
'doctemp_id':{{ doctemp.id }},
'name':$("#doctemp-name").val(),
'content':editor.getMarkdown(),
}
$.post("{% url 'modify_doctemp' doctemp_id=doctemp.id %}",data,function(r){
if(r.status){
//修改成功
layer.msg('修改成功,即将跳转',function(){
window.location.href = "{% url 'manage_doctemp' %}";
});
}else{
//创建失败
layer.msg('保存失败');
}
});
};
</script>
{% endblock %}
</body>
</html>