This commit is contained in:
commit
1dacb3dc7a
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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': '导入成功'}
|
|
@ -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')),
|
||||
],
|
||||
),
|
||||
]
|
|
@ -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',
|
||||
),
|
||||
]
|
|
@ -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',
|
||||
),
|
||||
]
|
|
@ -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),
|
||||
),
|
||||
]
|
|
@ -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.
|
@ -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>
|
|
@ -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>
|
|
@ -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), # 安全数据统计
|
||||
|
||||
|
||||
|
|
|
@ -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})
|
Loading…
Reference in New Issue