This commit is contained in:
caoqianming 2021-05-23 22:22:02 +08:00
commit 1dacb3dc7a
17 changed files with 811 additions and 7 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -2,7 +2,7 @@ from docxtpl import DocxTemplate, InlineImage
from docx.shared import Mm, Inches, Pt
from openpyxl import Workbook, load_workbook
from openpyxl.drawing.image import Image
from .models import User,Trouble,Dickey,Partment,Dicclass,Train,Drill,TroubleAccess,Group,Yjyc,Equipment,Area,RiskAct,Risk,Question,Questioncat
from .models import SafeItem, SafeList, User,Trouble,Dickey,Partment,Dicclass,Train,Drill,TroubleAccess,Group,Yjyc,Equipment,Area,RiskAct,Risk,Question,Questioncat
from datetime import datetime,date
import base64
from django.conf import settings
@ -56,6 +56,15 @@ def makeqr_area(data):
img.save(filepath)
return filepath
def makeqr_safelist(data):
upload_folder = 'media/qr_safelist'
if not os.path.exists(upload_folder):
os.mkdir(upload_folder)
img = qrcode.make(data=data)
filepath = os.path.join(upload_folder, data.split('=')[1]+'.png').replace('\\','/')
img.save(filepath)
return filepath
def drquestions(companyid,path,userid):
wb = load_workbook(path)
sheet = wb.worksheets[0]
@ -743,4 +752,49 @@ def is_float(str):
return False
else:
#print('%s 不是小数'%str)
return False
return False
def drsafelist(companyid,path):
wb = load_workbook(path)
sheet = wb.worksheets[0]
# 验证文件内容
if sheet['a5'].value != '项目类型':
return {'code':0,'msg':'项目类型列错误!'}
if sheet['b5'].value != '项目内容':
return {'code':0,'msg':'项目内容列错误!'}
safelist_name = sheet['b3'].value
user_name = sheet['b4'].value
if not safelist_name:
return {'code':0,'msg':'清单名称不能为空!'}
try:
user = User.objects.get(usecomp__partid=companyid, name=user_name)
except:
return {'code':0,'msg':'责任人不存在或重名!'}
try:
safelist = SafeList()
safelist.user = user
safelist.usecomp = user.usecomp
safelist.name = safelist_name
safelist.save()
safelist.qrcode = makeqr_safelist('https://safeyun.ctcshe.com/miniprogram/safelist?id='+str(safelist.id))
safelist.save()
except:
return {'code':0,'msg':'创建清单失败!'}
i=6
while sheet['a'+str(i)].value!=None:
type = sheet['a'+str(i)].value
name = sheet['b'+str(i)].value
if type == '职责':
type = 1
elif type == '目标':
type = 2
else:
return {'code':0,'msg': ''+str(i)+ '行项目类型错误!'}
if name:
safeitem = SafeItem()
safeitem.name = name
safeitem.type = type
safeitem.safelist = safelist
safeitem.save()
i = i+1
return {'code':1,'msg': '导入成功'}

View File

@ -0,0 +1,49 @@
# Generated by Django 2.2.8 on 2021-05-23 08:41
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('safesite', '0379_auto_20210509_1916'),
]
operations = [
migrations.CreateModel(
name='SafeList',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=200, verbose_name='清单名称')),
('createtime', models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间')),
('updatetime', models.DateTimeField(auto_now=True)),
('usecomp', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.Partment', verbose_name='所属公司')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='safesite.User', verbose_name='责任人')),
],
),
migrations.CreateModel(
name='SafeItem',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.TextField(verbose_name='清单项目名称')),
('type', models.IntegerField(default=1)),
('createtime', models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间')),
('updatetime', models.DateTimeField(auto_now=True)),
('worklist', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.SafeList', verbose_name='所属清单')),
],
),
migrations.CreateModel(
name='SafeFeedBack',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('isdone', models.IntegerField(default=1)),
('content', models.TextField(verbose_name='反馈内容')),
('createtime', models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间')),
('updatetime', models.DateTimeField(auto_now=True)),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.User', verbose_name='反馈人')),
('workitem', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='safesite.SafeItem')),
],
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 2.2.8 on 2021-05-23 10:33
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('safesite', '0380_safefeedback_safeitem_safelist'),
]
operations = [
migrations.RenameField(
model_name='safeitem',
old_name='worklist',
new_name='safelist',
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 2.2.8 on 2021-05-23 11:10
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('safesite', '0381_auto_20210523_1033'),
]
operations = [
migrations.RenameField(
model_name='safefeedback',
old_name='workitem',
new_name='safeitem',
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 2.2.8 on 2021-05-23 13:54
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('safesite', '0382_auto_20210523_1110'),
]
operations = [
migrations.AddField(
model_name='safelist',
name='qrcode',
field=models.CharField(blank=True, max_length=200, null=True),
),
]

View File

@ -1383,4 +1383,38 @@ class Checkjob(models.Model):
pmpeople=models.ManyToManyField(User,related_name='bcfr')#被处罚人员
content=models.TextField(null=True)#处罚内容
yhtp = models.TextField(null=True, blank=True)
zghtp = models.TextField(null=True, blank=True)
zghtp = models.TextField(null=True, blank=True)
class SafeList(models.Model):
"""
安全清单
"""
user = models.OneToOneField(User, on_delete=models.CASCADE, verbose_name="责任人")
usecomp = models.ForeignKey(Partment, on_delete=models.CASCADE, verbose_name="所属公司")
name = models.CharField('清单名称', max_length=200)
qrcode = models.CharField(max_length=200, blank=True, null=True) # 清单二维码
createtime = models.DateTimeField(default=timezone.now, verbose_name="创建时间")
updatetime = models.DateTimeField(auto_now=True)
class SafeItem(models.Model):
"""
清单项目
"""
safelist = models.ForeignKey(SafeList, on_delete=models.CASCADE, verbose_name="所属清单")
name = models.TextField('清单项目名称')
type = models.IntegerField(default=1) # 默认是责任2是指标 ,需反馈
createtime = models.DateTimeField(default=timezone.now, verbose_name="创建时间")
updatetime = models.DateTimeField(auto_now=True)
class SafeFeedBack(models.Model):
"""
清单反馈记录
"""
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="反馈人")
safeitem = models.ForeignKey(SafeItem, on_delete=models.SET_NULL, null=True, blank=True)
isdone = models.IntegerField(default=1) # 默认是完成0是未完成
content = models.TextField('反馈内容')
createtime = models.DateTimeField(default=timezone.now, verbose_name="创建时间")
updatetime = models.DateTimeField(auto_now=True)

Binary file not shown.

View File

@ -0,0 +1,95 @@
<table id="feedbacktable" style="width:auto;height:100%;"></table>
<a id="downa" href="" target="_blank" style="display:none"></a>
<div id="feedbacktablebar" style="padding: 4px">
<div >
<form id='searchfeedbackff'>
<label>反馈人</label><input name="fkr" class="easyui-textbox"/>
<label>提交时间</label><input name='qssj' class="easyui-datebox" editable=false>-<input name='jssj'
class="easyui-datebox" editable=false>
<a onclick="feedbacksearch()" class="easyui-linkbutton" data-options="iconCls: 'fa-search'">查询</a>
<a onclick="searchfeedbackffreset()" class="easyui-linkbutton">重置</a>
</form>
</div>
<div >
<!-- <a id="xjdetail2" onclick="xjdetail2()" class="easyui-linkbutton" data-options="iconCls: 'fa-info-circle',plain:true">查看详情</a> -->
<a onclick="delsafefeedback()" class="easyui-linkbutton" data-options="iconCls: 'fa-trash',plain:true">删除</a>
</div>
</div>
<script>
$(function(){
$('#feedbacktable').datagrid({url:'api/safefeedback/',queryParams:{a:'listall'}});
$("#searchfeedbackff").form('clear');
})
function feedbacksearch() {
var querydata = $('#searchfeedbackff').serializeJSON();
querydata['a'] = 'listall'
$('#feedbacktable').datagrid('load',querydata);
}
function searchfeedbackffreset() {
$('#searchfeedbackff').form('clear')
$('#feedbacktable').datagrid('options').queryParams = {
a:'listall'
}
$('#feedbacktable').datagrid('load');
}
$('#feedbacktable').datagrid({
url: '',
rownumbers: true,
singleSelect: true,
striped: true,
fitColumns: true,
method: 'get',
pagination: 'true',
pageSize: 20,
toolbar: '#feedbacktablebar',
border:false,
columns: [[
{ field: 'id', hidden: true },
{ field: 'user', hidden:true },
{ field: 'user__name', title: '反馈人', width: 150 },
{ field: 'isdone', title: '完成情况', width: 80 , formatter: function (value, row, index) {
switch (value) {
case 0: return '未完成'; break;
case 1: return '完成'; break;
}},styler: function (value, row, index) {
switch (value) {
case 0: return 'color:red;'; break;
case 1: return 'color:green;'; break;
}
} },
{ field: 'content', title: '反馈描述', width: 150 },
{ field: 'safeitem__name', title: '反馈项目', width: 100 },
{ field: 'createtime', title: '创建时间', width: 100 },
]]
});
function delsafefeedback(){
var row = $('#feedbacktable').datagrid('getSelected');
if (row) {
$.messager.confirm('提示', '确定删除吗?', function (r) {
if (r) {
var data = { id: row.id }
$.ajax({
type: "POST",
url: 'api/safefeedback/?a=del',
data: JSON.stringify(data),
datatype: "json",
beforeSend: function () { },
success: function (data) {
if (data.code == 1) {
$("#feedbacktable").datagrid('reload');
}
else {
$.messager.alert('提示', '操作失败!');
}
},
});
}
});
}
else { $.messager.alert('提示', '请选择一条数据!'); }
}
</script>

View File

@ -0,0 +1,361 @@
<div class="easyui-layout" style="width:100%;height:100%;fit:true">
<div data-options="region:'west',title:'安全清单',split:true,border:false" style="width:30%;height:100%;">
<div id="safelisttablebar" style="padding: 4px">
<div>
<form id='searchsafelistff'>
<input name='search' class="easyui-textbox" data-options="prompt:'用户名/清单名'">
<a id="safelistsearch" onclick="safelistsearch()" class="easyui-linkbutton"
data-options="iconCls: 'fa-search',plain:true">查询</a>
<a onclick="drsafelist()" class="easyui-linkbutton"
data-options="iconCls:'fa-upload',plain:true">导入清单</a>
</form>
</div>
<div>
<a onclick="addsafelist()" class="easyui-linkbutton" data-options="iconCls: 'fa-plus',plain:true">新增</a>
<a onclick="editsafelist()" class="easyui-linkbutton"
data-options="iconCls: 'fa-pencil',plain:true">编辑</a>
<a onclick="delsafelist()" class="easyui-linkbutton" data-options="iconCls:'fa-trash',plain:true">删除</a>
</div>
</div>
<table id="safelisttable" style="width:100%;height:100%;"></table>
</div>
<div data-options="region:'center',title:'清单项目',split:true,border:false" style="height:100%;">
<div id="safeitemtablebar" style="padding:5px;height:auto">
<div>
<a onclick="addsafeitem()" class="easyui-linkbutton" data-options="iconCls:'fa-plus',plain:true">新增</a>
<a onclick="editsafeitem()" class="easyui-linkbutton"
data-options="iconCls:'fa-pencil',plain:true">编辑</a>
<a onclick="delsafeitem()" class="easyui-linkbutton" data-options="iconCls:'fa-trash',plain:true">删除</a>
</div>
</div>
<table id="safeitemtable" style="height:50%;width:100%"></table>
<table id="safefeedbacktable" style="height:50%;width:100%" title="反馈记录"></table>
</div>
</div>
</div>
<div id="drsafelistdialog" class="easyui-dialog" title="导入个人清单" style="width:400px;height:200px;"
data-options="iconCls:'fa-upload',resizable:true,modal:true,closed:true,border:false">
<p style="color:red;margin-left: 10px">请按模板录入个人清单后导入</p>
<p style="margin-left: 10px"><a href="/static/safesite/muban/safelist.xlsx">点击下载模板</a></p>
<p style="margin-left: 10px">录入完成后点击下方按钮上传文件</p>
<input type="file" id="drfile" name="" accept=".xls,.xlsx" style="margin-left: 10px" />
</div>
<div id="safelistdg" class="easyui-dialog" style="width:400px;height:400px;padding:5px 15px;"
data-options="resizable:true,modal:true,closed:true,border:false">
<form method="post" id="safelistff">
<input id="safelistuser" name="user" type="hidden">
<input id="safelistid" name="id" type="hidden">
<div style="margin-bottom:10px">
<input id="safelistname" name="name" data-options="label:'名称'" class="easyui-textbox" style="width:300px"
required></input>
</div>
<div style="margin-bottom:10px">
<input id="safelistuser_name" name="user__name" data-options="label:'责任人'" class="easyui-textbox"
editable="false" style="width:300px" required>
</input>
<a class='easyui-linkbutton' onclick="choseuser()" style="width:auto" id="safelistuserchoseb">选择</a>
</div>
<div style="margin-bottom:10px;text-align: center;" id="qrcodediv">
<div class="labeldiv">清单二维码</div>
<img id="qrcode" height=160px width=160px>
</div>
<div style="text-align: center;">
<a class="easyui-linkbutton" iconCls="fa-floppy-o" onclick="savesafelist()">保存</a>
</div>
</form>
</div>
<div id="safeitemdg" class="easyui-dialog" style="width:400px;height:200px;padding:5px 15px;"
data-options="resizable:true,modal:true,closed:true,border:false">
<form method="post" id="safeitemff">
<input name="id" type="hidden">
<input name="safelist" type="hidden" id = "safelistId">
<div style="margin-bottom:10px">
<input id="safeitemname" name="name" data-options="label:'项目描述',multiline:true" class="easyui-textbox"
style="width:300px;height:60px" required></input>
</div>
<div style="margin-bottom:10px">
<select class="easyui-combobox" name="type" style="width:300px;" data-options="label:'类型'" required editable="false">
<option value="1">职责</option>
<option value="2">目标</option>
</select>
</div>
<div style="text-align: center;">
<a class="easyui-linkbutton" iconCls="fa-floppy-o" onclick="savesafeitem()">保存</a>
</div>
</form>
</div>
<script>
var safelist_cu_url = "/api/safelist/?a=add";
var safeitem_cu_url = "/api/safeitem/?a=add";
$(function () {
$('#safelisttable').datagrid({
url: '/api/safelist/',
queryParams: { a: 'listall' },
rownumbers: true,
singleSelect: true,
striped: true,
method: 'get',
fitColumns: true,
pagination: true,
pageSize: 20,
toolbar: '#safelisttablebar',
border: false,
onSelect: function (index, data) {
$('#safeitemtable').datagrid({ url: 'api/safeitem/?a=listall&safelist=' + data.id })
},
columns: [[
{ field: 'id', hidden: true },
{ field: 'qr_code', hidden: true },
{ field: 'name', title: '名称', width: 150 },
{ field: 'user__name', title: '责任人', width: 80 },
{ field: 'createtime', title: '创建时间', width: 100 },
{ field: 'updatetime', title: '最近编辑时间', width: 100 }
]],
});
})
$('#safeitemtable').datagrid({
rownumbers: true,
singleSelect: true,
striped: true,
method: 'get',
fitColumns: true,
pagination: true,
pageSize: 20,
toolbar: '#safeitemtablebar',
border: false,
onSelect: function (index, data) {
$('#safefeedbacktable').datagrid({ url: 'api/safefeedback/?a=listall&safeitem=' + data.id })
},
columns: [[
{ field: 'id', hidden: true },
{ field: 'safelist', hidden: true },
{ field: 'name', title: '名称', width: 150 },
{ field: 'type', title: '类型', width: 80, formatter: function (value, row, index) {
switch (value) {
case 1: return '职责'; break;
case 2: return '目标'; break;
}} },
{ field: 'createtime', title: '创建时间', width: 100 },
{ field: 'updatetime', title: '最近编辑时间', width: 100 }
]],
});
$('#safefeedbacktable').datagrid({
rownumbers: true,
singleSelect: true,
striped: true,
method: 'get',
fitColumns: true,
pagination: true,
pageSize: 20,
border: true,
columns: [[
{ field: 'id', hidden: true },
{ field: 'content', title: '反馈内容', width: 150 },
{ field: 'isdone', title: '完成情况', width: 80 , formatter: function (value, row, index) {
switch (value) {
case 0: return '未完成'; break;
case 1: return '完成'; break;
}},styler: function (value, row, index) {
switch (value) {
case 0: return 'color:red;'; break;
case 1: return 'color:green;'; break;
}
} },
{ field: 'createtime', title: '创建时间', width: 100 },
]],
});
function addsafelist() {
$('#safelistdg').dialog('open').dialog('setTitle', '创建个人清单').window('center');
$('#safelistff').form('clear');
$('#qrcodediv').hide()
$('#safelistuserchoseb').linkbutton('enable');
safelist_cu_url = '/api/safelist/?a=add'
}
function editsafelist() {
var row = $('#safelisttable').datagrid('getSelected');
if(row){
$('#safelistdg').dialog('open').dialog('setTitle', '编辑个人清单').window('center');
$('#safelistff').form('load', row);
$('#safelistuserchoseb').linkbutton('disable');
$('#qrcodediv').show();
$('#qrcode').attr('src',row.qrcode);
safelist_cu_url = '/api/safelist/?a=edit&id=' + row.id}
else{
$.messager.alert('提示', '请选择一条数据!');
}
}
function addsafeitem() {
$('#safeitemdg').dialog('open').dialog('setTitle', '新增项目').window('center');
$('#safeitemff').form('clear');
var row = $('#safelisttable').datagrid('getSelected');
$('#safelistId').attr('value', row.id);
safeitem_cu_url = '/api/safeitem/?a=add'
}
function editsafeitem() {
var row = $('#safeitemtable').datagrid('getSelected');
if(row){
$('#safeitemdg').dialog('open').dialog('setTitle', '编辑项目').window('center');
$('#safeitemff').form('load', row);
safeitem_cu_url = '/api/safeitem/?a=edit&id=' + row.id}
else{
$.messager.alert('提示', '请选择一条数据!');
}
}
function drsafelist() {
$('#drsafelistdialog').dialog('open').window('center');
}
function choseuser() {
var myh = screen.availHeight * 0.5;
$('#userdd').dialog({
maximizable: true,
title: '选择人员',
width: 700,
height: myh,
closed: false,
cache: false,
href: 'getuserf?a=user',
modal: true,
border: false,
});
$('#userdd').window('center');
}
function aaa(x) {
if (x == "user") {
$('#safelistuser').attr('value', top.$('#in').val());
$('#safelistuser_name').textbox('setValue', top.$('#in').attr('show'));
}
}
function savesafelist() {
var data = $('#safelistff').serializeJSON();
$.ajax({
type: "POST",
url: safelist_cu_url,
data: JSON.stringify(data),
datatype: "json",
processData: false,
contentType: "application/json;charset=utf-8",
beforeSend: function () {
return $('#safelistff').form('validate')
},
success: function (data) {
if (data.code == 1) {
$("#safelisttable").datagrid('reload');
$("#safelistdg").dialog("close");
} else { $.messager.alert('提示', '失败!'); }
},
});
}
function savesafeitem() {
var data = $('#safeitemff').serializeJSON();
$.ajax({
type: "POST",
url: safeitem_cu_url,
data: JSON.stringify(data),
datatype: "json",
processData: false,
contentType: "application/json;charset=utf-8",
beforeSend: function () {
return $('#safeitemff').form('validate')
},
success: function (data) {
if (data.code == 1) {
$("#safeitemtable").datagrid('reload');
$("#safeitemdg").dialog("close");
} else { $.messager.alert('提示', '失败!'); }
},
});
}
function delsafelist() {
var row = $('#safelisttable').datagrid('getSelected');
if (row) {
$.messager.confirm('提示', '确定删除吗?', function (r) {
if (r) {
var data = { id: row.id }
$.ajax({
type: "POST",
url: 'api/safelist/?a=del',
data: JSON.stringify(data),
datatype: "json",
beforeSend: function () { },
success: function (data) {
if (data.code == 1) {
$("#safelisttable").datagrid('reload');
$("#safeitemtable").datagrid('reload');
}
else {
$.messager.alert('提示', '操作失败!');
}
},
});
}
});
}
else { $.messager.alert('提示', '请选择一条数据!'); }
}
function delsafeitem() {
var row = $('#safeitemtable').datagrid('getSelected');
if (row) {
$.messager.confirm('提示', '确定删除吗?', function (r) {
if (r) {
var data = { id: row.id }
$.ajax({
type: "POST",
url: 'api/safeitem/?a=del',
data: JSON.stringify(data),
datatype: "json",
beforeSend: function () { },
success: function (data) {
if (data.code == 1) {
$("#safeitemtable").datagrid('reload');
$("#safefeedbacktable").datagrid('reload');
}
else {
$.messager.alert('提示', '操作失败!');
}
},
});
}
});
}
else { $.messager.alert('提示', '请选择一条数据!'); }
}
function safelistsearch() {
var querydata = $('#searchsafelistff').serializeJSON();
querydata['a'] = 'listall'
$('#safelisttable').datagrid('load',querydata);
}
document.getElementById('drfile').onchange = function () {
var fileObj = this.files[0];
var url = 'api/safelist/?a=dr'
var form = new FormData();
form.append("upfile", fileObj); // 文件对象
xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
xhr.open("post", url, true); //post方式url为服务器请求地址true 该参数规定请求是否异步处理。
xhr.send(form)
$('#drsafelistdialog').dialog('close')
loading('导入中。。');
xhr.onload = function (evt) { //服务断接收完文件返回的结果
var data = JSON.parse(evt.target.responseText);
removeLoading();
if (data.code == 1) {
$.messager.alert('提示', '导入成功', 'info', function () {
$("#safelisttable").datagrid('reload');
});
}
else if (data.code == 2) {
}
else {
$.messager.alert('提示', data.msg);
}
document.getElementById('drfile').value = '';
}; //请求完成
xhr.onerror = function (evt) { $.messager.alert('提示', '失败!文件内容有误'); document.getElementById('drfile').value = ''; }; //请求失败
}
</script>

View File

@ -1,4 +1,4 @@
from safesite.views import apioffence, apitrainplan, inspectitem, trainplanchosehtml, trainplanhtml
from safesite.views import apioffence, apisafefeedback, apitrainplan, inspectitem, trainplanchosehtml, trainplanhtml
from django.urls import path,include
from . import views, viewsdrf, viewsn
from . import datashowview
@ -145,9 +145,13 @@ urlpatterns = [
path('html/personalp/', views.personalphtml),
# 违章举报
path('html/offence/', views.offence),
path('html/offence/detail/<int:id>/', views.offencedetail),
path('html/safelist/', views.safelist),
path('html/safefeedback/', views.safefeedback),
path('getuser', views.getuser),
path('addyh', views.addyh),
path('accessyh',views.accessyh),
@ -223,6 +227,9 @@ urlpatterns = [
path('api/troublefollowtask/', views.apitroublefollowtask),
path('api/offence/', views.apioffence),
path('api/safelist/', views.apisafelist),
path('api/safeitem/', views.apisafeitem),
path('api/safefeedback/', views.apisafefeedback),
path('api/countsafe/', viewsn.apicountsafe), # 安全数据统计

View File

@ -34,8 +34,8 @@ from groups import models as g_models
from . import forms
from .daoru import (cal_area_risk_level, cal_riskact_level, drequipments,
drquestions, drrisks, drtodotroubles, drusers, makeqr,
makeqr_area, makeqr_examtest, makeqr_riskact, makeqr_train)
drquestions, drrisks, drtodotroubles, drusers, makeqr, drsafelist,
makeqr_area, makeqr_examtest, makeqr_riskact, makeqr_train, makeqr_safelist)
from .export import (exportdoc, exportdoc2, exportsimplexlsx, exportxlsx,
exportyjdoc)
from .forms import UserForm
@ -160,6 +160,12 @@ def upfile(req):
# html页面
def safelist(req):
return render(req, 'safelist.html')
def safefeedback(req):
return render(req, 'safefeedback.html')
def offence(req):
return render(req, 'offence.html')
@ -8933,4 +8939,148 @@ def apioffence(req):
obj = Offence.objects.get(id=data['id'])
obj.delete()
return JsonResponse({"code":1})
@apicheck_login
def apisafelist(req):
a = req.GET.get('a')
userid = req.session['userid']
companyid = getcompany(userid)
if a == 'listall':
# objs = SafeList.objects.filter(usecomp__partid=companyid)
objs = SafeList.objects.all()
if req.GET.get('search', None):
objs = objs.filter(Q(user__name__contains=req.GET.get('search'))|Q(name__contains=req.GET.get('search')))
total = objs.count()
startnum, endnum = fenye(req)
objs = objs.order_by('-createtime')[startnum:endnum].values('id', 'name', 'user__name', 'createtime', 'updatetime', 'user', 'qrcode')
return HttpResponse(transjson(total, objs), content_type="application/json")
elif a == 'add':
data = json.loads(req.body.decode('utf-8'))
user = User.objects.get(userid=data['user'])
obj= SafeList()
obj.user = user
obj.usecomp = user.usecomp
obj.name = data['name']
obj.save()
obj.qrcode = makeqr_safelist(
'https://safeyun.ctcshe.com/miniprogram/safelist?id='+str(obj.id))
obj.save()
return JsonResponse({"code":1})
elif a == 'edit':
data = json.loads(req.body.decode('utf-8'))
obj= SafeList.objects.get(id=data['id'])
obj.name = data['name']
obj.save()
return JsonResponse({"code":1})
elif a == 'my':
try:
obj = SafeList.objects.filter(user__userid=userid)
res = obj.values('id', 'name', 'user__name', 'createtime', 'updatetime')[0]
items = SafeItem.objects.filter(safelist=obj[0])
res['items'] = list(items.values('id', 'name', 'type', 'createtime', 'updatetime'))
res['code'] = 1
except:
return JsonResponse({"code":0, "msg":"清单配置有误"})
return HttpResponse(json.dumps(res, cls=MyEncoder), content_type="application/json")
elif a == 'detail':
try:
id = req.GET.get('id')
obj = SafeList.objects.filter(id=id)
res = obj.values('id', 'name', 'user__name', 'createtime', 'updatetime')[0]
items = SafeItem.objects.filter(safelist=obj[0])
res['items'] = list(items.values('id', 'name', 'type', 'createtime', 'updatetime'))
res['code'] = 1
except:
return JsonResponse({"code":0, "msg":"清单配置有误"})
return HttpResponse(json.dumps(res, cls=MyEncoder), content_type="application/json")
elif a == 'del':
data = json.loads(req.body.decode('utf-8'))
obj = SafeList.objects.get(id=data['id'])
obj.delete()
return JsonResponse({"code":1})
elif a == 'dr':
file_name = 'c'+str(companyid)+'_'+req.FILES['upfile'].name
upload_folder = 'media/temp'
if not os.path.exists(upload_folder):
os.mkdir(upload_folder)
filepath = os.path.join(upload_folder, file_name)
filepath = filepath.replace('\\', '/')
with open(filepath, 'wb') as f:
f.write(req.FILES['upfile'].read())
return JsonResponse(drsafelist(companyid, filepath))
@apicheck_login
def apisafeitem(req):
a = req.GET.get('a')
userid = req.session['userid']
companyid = getcompany(userid)
if a == 'listall':
# objs = SafeItem.objects.filter(safelist__usecomp__partid=companyid)
objs = SafeItem.objects.all()
if req.GET.get('safelist', None):
objs = objs.filter(safelist = req.GET.get('safelist'))
total = objs.count()
startnum, endnum = fenye(req)
objs = objs.order_by('type', 'name')[startnum:endnum].values('id', 'name', 'type', 'createtime', 'updatetime', 'safelist')
return HttpResponse(transjson(total, objs), content_type="application/json")
elif a == 'add':
data = json.loads(req.body.decode('utf-8'))
obj= SafeItem()
obj.safelist = SafeList.objects.get(id=data['safelist'])
obj.name = data['name']
obj.type = data['type']
obj.save()
obj.safelist.updatetime = datetime.now()
obj.safelist.save()
return JsonResponse({"code":1})
elif a == 'edit':
data = json.loads(req.body.decode('utf-8'))
obj= SafeItem.objects.get(id=data['id'])
obj.name = data['name']
obj.type = data['type']
obj.save()
obj.safelist.updatetime = datetime.now()
obj.safelist.save()
return JsonResponse({"code":1})
elif a == 'del':
data = json.loads(req.body.decode('utf-8'))
obj = SafeItem.objects.get(id=data['id'])
obj.delete()
return JsonResponse({"code":1})
@apicheck_login
def apisafefeedback(req):
a = req.GET.get('a')
userid = req.session['userid']
companyid = getcompany(userid)
if a == 'listall':
objs = SafeFeedBack.objects.filter(safeitem__safelist__usecomp=companyid)
if req.GET.get('safeitem', None):
objs = objs.filter(safeitem = req.GET.get('safeitem'))
if req.GET.get('qssj', None):
objs = objs.filter(createtime__gte=req.GET.get('qssj'))
if req.GET.get('jssj', None):
objs = objs.filter(createtime__lte=req.GET.get('jssj'))
if req.GET.get('fkr', None):
objs = objs.filter(user__name__contains=req.GET.get('fkr'))
total = objs.count()
startnum, endnum = fenye(req)
objs = objs.order_by('-createtime')[startnum:endnum].values('id', 'content', 'isdone', 'createtime', 'updatetime', 'safeitem','user', 'user__name', 'safeitem__name')
return HttpResponse(transjson(total, objs), content_type="application/json")
elif a == 'add':
data = json.loads(req.body.decode('utf-8'))
obj= SafeFeedBack()
obj.safeitem = SafeItem.objects.get(id=data['safeitem'])
obj.content = data['content']
obj.isdone = data['isdone']
obj.user = User.objects.get(userid=userid)
obj.save()
return JsonResponse({"code":1})
elif a == 'del':
data = json.loads(req.body.decode('utf-8'))
obj = SafeFeedBack.objects.get(id=data['id'])
obj.delete()
return JsonResponse({"code":1})