mirror of
https://gitee.com/zmister/MrDoc.git
synced 2025-12-06 11:30:15 +08:00
add:后台文档分享管理
This commit is contained in:
@@ -20,6 +20,8 @@ urlpatterns = [
|
||||
path('doc_history_manage/<int:id>/', views.admin_doc_history, name='doc_history_manage'), # 文档历史记录管理
|
||||
path('api/doc_history/<int:id>/', views.AdminDocHistory.as_view(), name="api_doc_history"), # 文档历史记录接口
|
||||
path('api/doc_history_detail/', views.AdminDocHistoryDetail.as_view(), name="api_doc_history_detail"), # 文档历史记录详情接口
|
||||
# 文档分享管理
|
||||
path('doc_share_manage/',views.admin_doc_share,name="admin_doc_share"), # 分享文档管理
|
||||
path('doctemp_manage/',views.admin_doctemp,name='doctemp_manage'), # 文档模板管理
|
||||
path('setting/',views.admin_setting,name="sys_setting"), # 应用设置
|
||||
path('config',views.admin_site_config,name="site_config"), # 站点配置
|
||||
|
||||
@@ -939,7 +939,86 @@ class AdminDocHistoryDetail(APIView):
|
||||
|
||||
return Response({'code':5,'data':_("系统异常")})
|
||||
|
||||
|
||||
# 文档分享管理
|
||||
@superuser_only
|
||||
@require_http_methods(['GET','POST'])
|
||||
def admin_doc_share(request):
|
||||
if request.method == 'GET':
|
||||
return render(request, 'app_admin/admin_doc_share.html', locals())
|
||||
else:
|
||||
types = request.POST.get('type')
|
||||
# 请求类型 1:获取列表 2:删除 3:修改
|
||||
if types == '1':
|
||||
page = request.POST.get('page', 1)
|
||||
limit = request.POST.get('limit', 10)
|
||||
docshare_list = DocShare.objects.all().order_by('-create_time')
|
||||
paginator = Paginator(docshare_list, limit)
|
||||
page = request.GET.get('page', page)
|
||||
try:
|
||||
docshares = paginator.page(page)
|
||||
except PageNotAnInteger:
|
||||
docshares = paginator.page(1)
|
||||
except EmptyPage:
|
||||
docshares = paginator.page(paginator.num_pages)
|
||||
share_list = []
|
||||
for doc in docshares:
|
||||
item = {
|
||||
'token':doc.token,
|
||||
'doc_id':doc.doc.id,
|
||||
'doc_name':doc.doc.name,
|
||||
'share_type':doc.share_type,
|
||||
'share_value':doc.share_value,
|
||||
'share_status':doc.is_enable,
|
||||
'create_user': doc.doc.create_user.username,
|
||||
# 'expire_type':doc.expire_type,
|
||||
# 'expire_time':doc.expire_time,
|
||||
'create_time':doc.create_time
|
||||
}
|
||||
share_list.append(item)
|
||||
resp_data = {
|
||||
"code":0,
|
||||
"msg":"ok",
|
||||
"count":docshare_list.count(),
|
||||
"data":share_list
|
||||
}
|
||||
return JsonResponse(resp_data)
|
||||
# 删除
|
||||
elif types == '2':
|
||||
range = request.POST.get("range")
|
||||
token = request.POST.get("token")
|
||||
if range == 'single':
|
||||
try:
|
||||
share = DocShare.objects.get(token=token)
|
||||
share.delete()
|
||||
return JsonResponse({'status':True,'data':'ok'})
|
||||
except:
|
||||
return JsonResponse({'status':False,'data':_('无指定内容')})
|
||||
elif range == "multi":
|
||||
tokens = token.split(",")
|
||||
try:
|
||||
share = DocShare.objects.filter(token__in=tokens)
|
||||
share.delete()
|
||||
return JsonResponse({'status':True,'data':'ok'})
|
||||
except:
|
||||
return JsonResponse({'status':False,'data':_('无指定内容')})
|
||||
else:
|
||||
return JsonResponse({'status':False,'data':_('类型错误')})
|
||||
# 修改
|
||||
elif types == '3':
|
||||
token = request.POST.get("token",'')
|
||||
name = request.POST.get('key','')
|
||||
value = request.POST.get('value','')
|
||||
# 修改分享状态
|
||||
if name == 'share_status':
|
||||
is_enable = True if value == 'true' else False
|
||||
DocShare.objects.filter(token=token).update(is_enable=is_enable)
|
||||
# 修改分享类型
|
||||
elif name == 'share_type':
|
||||
share_type = 0 if value == '0' else 1
|
||||
DocShare.objects.filter(token=token).update(share_type=share_type)
|
||||
else:
|
||||
return JsonResponse({'status':False,'data':_('参数错误')})
|
||||
return JsonResponse({'status':True,'data':'ok'})
|
||||
|
||||
# 后台管理 - 文档模板管理
|
||||
@superuser_only
|
||||
@@ -1587,16 +1666,34 @@ def admin_center_menu(request):
|
||||
{
|
||||
"id": 3,
|
||||
"title": _("文档管理"),
|
||||
"type": 1,
|
||||
"type": 0,
|
||||
"icon": "layui-icon layui-icon-form",
|
||||
"href": reverse('doc_manage'),
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"title": _("文档模板管理"),
|
||||
"type": 1,
|
||||
"icon": "layui-icon layui-icon-templeate-1",
|
||||
"href": reverse('doctemp_manage'),
|
||||
"href": "",
|
||||
"children": [
|
||||
{
|
||||
"id": 'doc_manage',
|
||||
"title": _("文档管理"),
|
||||
"type": 1,
|
||||
"icon": "layui-icon layui-icon-form",
|
||||
"href": reverse('doc_manage'),
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"title": _("文档模板管理"),
|
||||
"type": 1,
|
||||
"icon": "layui-icon layui-icon-templeate-1",
|
||||
"href": reverse('doctemp_manage'),
|
||||
},
|
||||
{
|
||||
"id": 'doc_share_manage',
|
||||
"title": _("文档分享管理"),
|
||||
"type": 1,
|
||||
"icon": "layui-icon layui-icon-templeate-1",
|
||||
"href": reverse('admin_doc_share'),
|
||||
},
|
||||
|
||||
],
|
||||
|
||||
},
|
||||
{
|
||||
"id": "my_fodder",
|
||||
|
||||
298
template/app_admin/admin_doc_share.html
Normal file
298
template/app_admin/admin_doc_share.html
Normal file
@@ -0,0 +1,298 @@
|
||||
{% extends 'app_admin/admin_base.html' %}
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
{% block title %}{% trans "文档分享管理" %}{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<table id="share-doc-table" lay-filter="share-doc-table"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 自定义表单工具栏 -->
|
||||
<script type="text/html" id="share-doc-toolbar">
|
||||
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="batchRemove">
|
||||
<i class="layui-icon layui-icon-delete"></i>
|
||||
{% trans "删除" %}
|
||||
</button>
|
||||
</script>
|
||||
|
||||
<!-- 表格操作栏 -->
|
||||
<script type="text/html" id="share-doc-bar">
|
||||
{% verbatim %}
|
||||
<a href="javascript:void(0);" title="查看分享信息" class="table-col-link" lay-event="showShare">查看</a>
|
||||
<a href="/doc/{{d.doc_id}}/" target="_blank" title="查看源文档" class="table-col-link">前往文档</a>
|
||||
<a href="javascript:void(0);" title="删除文档分享" class="table-col-link" lay-event="remove">删除</a>
|
||||
{% endverbatim %}
|
||||
</script>
|
||||
|
||||
<!-- 分享类型 -->
|
||||
<script type="text/html" id="share-type">
|
||||
{% verbatim %}
|
||||
{{#if (d['share_type'] == '0') { }}
|
||||
<span>公开</span>
|
||||
{{# }else if(d['share_type'] == '1'){ }}
|
||||
<span>私密</span>
|
||||
{{# } }}
|
||||
{% endverbatim %}
|
||||
</script>
|
||||
|
||||
|
||||
<!-- 有效期 -->
|
||||
<script type="text/html" id="expire-date">
|
||||
{% verbatim %}
|
||||
{{#if(d.expire_type == -1){ }}
|
||||
<span>永久</span>
|
||||
{{# }else{ }}
|
||||
<span>{{layui.util.toDateString(d.expire_time, "yyyy-MM-dd")}}</span>
|
||||
{{# } }}
|
||||
{% endverbatim %}
|
||||
</script>
|
||||
|
||||
<!-- 分享时间 -->
|
||||
<script type="text/html" id="share-create-time">
|
||||
{% verbatim %}
|
||||
{{layui.util.toDateString(d.create_time, "yyyy-MM-dd HH:mm:ss")}}
|
||||
{% endverbatim %}
|
||||
</script>
|
||||
|
||||
<!-- 分享状态 -->
|
||||
<script type="text/html" id="share-enable">
|
||||
{% verbatim %}
|
||||
<input type="checkbox" name="share-enable" value="{{d.token}}" lay-skin="switch" lay-text="启用|禁用" lay-filter="share-enable" {{ d.share_status == true ? 'checked' : '' }}>
|
||||
{% endverbatim %}
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
||||
{% block custom_script %}
|
||||
<div id="show-share-info-div" style="margin:10px;display: none;">
|
||||
<div class="layui-form" lay-filter="show-share-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">文档名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="doc_name" readonly lay-verify="required" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item" style="display: none;">
|
||||
<label class="layui-form-label">分享类型</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="share_type" readonly lay-verify="required" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">分享链接</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="share_url" readonly lay-verify="required" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item" id="share-code-input">
|
||||
<label class="layui-form-label">分享码</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="share_pwd" readonly lay-verify="required" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn layui-btn-sm layui-btn-normal" id="copyShareInfo">复制链接</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="{% static '/clipboard/clipboard.min.js' %}"></script>
|
||||
<script>
|
||||
layui.use(['layer', 'echarts', 'element', 'count','topBar','form','table'], function() {
|
||||
var $ = layui.jquery,
|
||||
table = layui.table,
|
||||
layer = layui.layer,
|
||||
form = layui.form,
|
||||
element = layui.element,
|
||||
count = layui.count,
|
||||
echarts = layui.echarts;
|
||||
$.ajaxSetup({
|
||||
data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
|
||||
});
|
||||
let cols = [
|
||||
[
|
||||
{type: 'checkbox'},
|
||||
{title: '文档名称',field: 'doc_name',align: 'left'},
|
||||
{title: '分享类型',field: 'share_type',align: 'left',width: 100,templet:"#share-type"},
|
||||
{title: '分享码',field: 'share_value',align: 'left',width: 100},
|
||||
{title: '有效期',field: 'expire_date',align: 'left',templet:"#expire-date"},
|
||||
{title: '作者',field: 'create_user',align: 'left',},
|
||||
{title: '分享时间',field: 'create_time',align: 'left',width: 150,templet:"#share-create-time"},
|
||||
{title: '状态',field: 'share_status',align: 'left',width: 100,templet:"#share-enable"},
|
||||
{title: '操作',toolbar: '#share-doc-bar',align: 'left',minWidth:200}
|
||||
]
|
||||
]
|
||||
// 渲染表格
|
||||
table.render({
|
||||
elem: '#share-doc-table',
|
||||
method:'post',
|
||||
where:{'type':1},
|
||||
url: "{% url 'admin_doc_share' %}",
|
||||
page: true,
|
||||
cols: cols,
|
||||
skin: 'line',
|
||||
escape:true,
|
||||
toolbar: '#share-doc-toolbar',
|
||||
defaultToolbar: ['filter']
|
||||
});
|
||||
|
||||
// 侦听分享状态开关
|
||||
form.on('switch(share-enable)',function(obj){
|
||||
var data = {
|
||||
'type':3,
|
||||
'token':this.value,
|
||||
'key':'share_status',
|
||||
}
|
||||
if(obj.elem.checked){
|
||||
data['value'] = 'true'
|
||||
}else{
|
||||
data['value'] = 'false'
|
||||
}
|
||||
$.post("{% url 'manage_doc_share' %}",data,function(r){
|
||||
if(r.status){
|
||||
layer.msg("设置成功")
|
||||
}else{
|
||||
layer.msg("设置失败")
|
||||
}
|
||||
})
|
||||
})
|
||||
// 侦听单个分享操作
|
||||
table.on('tool(share-doc-table)', function(obj) {
|
||||
// console.log(obj)
|
||||
if (obj.event === 'remove') {
|
||||
// console.log(obj)
|
||||
window.remove(obj);
|
||||
}else if(obj.event === 'showShare'){
|
||||
showShareInfo(obj.data)
|
||||
}
|
||||
});
|
||||
// 显示文集分享信息
|
||||
showShareInfo = function(data){
|
||||
let share_link = window.location.protocol
|
||||
+ '//'
|
||||
+ document.location.host
|
||||
+ '/share_doc/?token='
|
||||
+ data.token;
|
||||
if(data.share_type == 0){
|
||||
$("#share-code-input").css('display','none');
|
||||
}else{
|
||||
$("#share-code-input").css('display','block');
|
||||
}
|
||||
form.val('show-share-form',{
|
||||
'doc_name':data.doc_name,
|
||||
'share_type':data.share_type,
|
||||
'share_url':share_link,
|
||||
'share_pwd':data.share_value,
|
||||
})
|
||||
layer.open({
|
||||
type:1,
|
||||
area:["500px"],
|
||||
title:"查看文档分享信息",
|
||||
content:$("#show-share-info-div"),
|
||||
})
|
||||
};
|
||||
// 复制分享URL及分享码
|
||||
var copy_share_link = new ClipboardJS('#copyShareInfo', {
|
||||
text: function() {
|
||||
let share_val = form.val("show-share-form");
|
||||
if(share_val['share_type'] == 0){
|
||||
return share_val['share_url']
|
||||
}else{
|
||||
return '链接:' + share_val['share_url'] + " 分享码:" + share_val['share_pwd']
|
||||
}
|
||||
}
|
||||
});
|
||||
copy_share_link.on('success', function(e) {
|
||||
layer.msg("复制成功!")
|
||||
});
|
||||
// 删除文档分享
|
||||
window.remove = function(obj) {
|
||||
layer.confirm('确定要删除该分享?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
layer.close(index);
|
||||
let loading = layer.load();
|
||||
$.ajax({
|
||||
url: "{% url 'admin_doc_share' %}",
|
||||
dataType: 'json',
|
||||
type: 'post',
|
||||
data:{'token':obj.data.token,'type':2,'range':'single'},
|
||||
success: function(r) {
|
||||
layer.close(loading);
|
||||
if (r.status) {
|
||||
layer.msg("删除成功", {
|
||||
icon: 1,
|
||||
time: 1000
|
||||
}, function() {
|
||||
obj.del();
|
||||
});
|
||||
} else {
|
||||
layer.msg(r.data, {
|
||||
icon: 2,
|
||||
time: 1000
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
};
|
||||
// 侦听批量删除
|
||||
table.on('toolbar(share-doc-table)', function(obj) {
|
||||
if (obj.event === 'batchRemove') {
|
||||
window.batchRemove(obj);
|
||||
}
|
||||
});
|
||||
window.batchRemove = function(obj) {
|
||||
let data = table.checkStatus(obj.config.id).data;
|
||||
if (data.length === 0) {
|
||||
layer.msg("未选中数据", {
|
||||
icon: 3,
|
||||
time: 1000
|
||||
});
|
||||
return false;
|
||||
}
|
||||
let tokens = "";
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
tokens += data[i].token + ",";
|
||||
}
|
||||
tokens = tokens.substr(0, tokens.length - 1);
|
||||
console.log(tokens)
|
||||
layer.confirm('确定要删除这些分享?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
layer.close(index);
|
||||
let loading = layer.load();
|
||||
$.ajax({
|
||||
url: "{% url 'admin_doc_share' %}",
|
||||
dataType: 'json',
|
||||
type: 'post',
|
||||
data:{'token':tokens,'type':2,'range':'multi'},
|
||||
success: function(r) {
|
||||
layer.close(loading);
|
||||
if (r.status) {
|
||||
layer.msg("删除成功", {
|
||||
icon: 1,
|
||||
time: 1000
|
||||
}, function() {
|
||||
table.reload('share-doc-table',{
|
||||
page:{curr:1}
|
||||
});
|
||||
});
|
||||
} else {
|
||||
layer.msg(r.data, {
|
||||
icon: 2,
|
||||
time: 1000
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
})
|
||||
</script>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user