This commit is contained in:
caoqianming 2021-07-10 22:37:09 +08:00
commit 8d5b4546e6
22 changed files with 804 additions and 128 deletions

Binary file not shown.

View File

@ -0,0 +1,28 @@
# Generated by Django 2.2.8 on 2021-07-10 09:56
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('safesite', '0383_safelist_qrcode'),
]
operations = [
migrations.CreateModel(
name='ContingencyPlan',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('name', models.CharField(max_length=200, verbose_name='名称')),
('path', models.CharField(max_length=200, verbose_name='地址')),
('type', models.CharField(choices=[('ZH', '综合应急预案'), ('ZX', '专项应急预案'), ('XC', '现场处置方案')], max_length=200, verbose_name='预案类型')),
('deletemark', models.IntegerField(default=1, verbose_name='删除标记')),
('createtime', models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间')),
('updatetime', models.DateTimeField(auto_now=True, verbose_name='编辑时间')),
('usecomp', models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='safesite.Partment')),
],
),
]

View File

@ -0,0 +1,20 @@
# Generated by Django 2.2.8 on 2021-07-10 10:02
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('safesite', '0384_contingencyplan'),
]
operations = [
migrations.AddField(
model_name='contingencyplan',
name='createby',
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='safesite.User'),
preserve_default=False,
),
]

View File

@ -319,6 +319,8 @@ class ContingencyPlan(models.Model):
path = models.CharField(verbose_name='地址', max_length=200)
type = models.CharField(verbose_name='预案类型', max_length=200, choices=TYPE_CHOICES)
usecomp = models.ForeignKey(Partment, default=1, on_delete=models.CASCADE)
deletemark = models.IntegerField(default=1, verbose_name='删除标记')
createby = models.ForeignKey(User, on_delete=models.CASCADE)
createtime = models.DateTimeField(default=timezone.now, verbose_name='创建时间')
updatetime = models.DateTimeField(auto_now=True, verbose_name='编辑时间')
@ -813,7 +815,7 @@ class ExamTestDetail(models.Model): # 考试详情表
testnum = models.IntegerField(default=0) # 做卷次数
remainnum = models.IntegerField('剩余次数', default=1)
examtest = models.ForeignKey(
ExamTest, on_delete=models.CASCADE, null=True, blank=True)
ExamTest, on_delete=models.CASCADE, null=True, blank=True, related_name='detail_examtest')
user = models.ForeignKey(User, on_delete=models.CASCADE)
starttime = models.DateTimeField(null=True, blank=True)
endtime = models.DateTimeField(null=True, blank=True)

View File

@ -0,0 +1,112 @@
<div id="plantablebar" style="padding: 4px;height: 40px;background-color:#FCFCFC">
<div style="width: 500px;padding: 5px;">
<a id="addplan" class="easyui-linkbutton" onclick="javascript:opendg('新增','html/contingencyplan/add/')" data-options="iconCls: 'fa-plus',plain:true">新增</a>
<a id="delplan" class="easyui-linkbutton" onclick="delplan()" data-options="iconCls: 'fa-trash',plain:true">删除</a>
</div>
</div>
<table id="plantable" style="width:100%;height:100%;text-align: center;"></table>
<script>
//点击观看
// function tzdetail() {
// var row = $('#plantable').datagrid('getSelected');
// if (row) {
// var row = $('#plantable').datagrid('getSelected');
// $.ajax({
// type: "get",
// url: "api/getresbilitydata?a=readnum",
// data: { 'id': row.id },
// dateType: "json",
// success: function (data) {
// if (data.code == 1) {
// document.getElementById("tzdetail").href = data.url;
// document.getElementById("tzdetail").target = '_blank';//定义成打开新窗口
// }
// },
// error: function () {
// return false;
// },
// async: false
// });
// }
// else { $.messager.alert('提示', '请选择一行数据!'); }
// }
$('#plantable').datagrid({
url: 'api/contingencyplan/?a=listall',
rownumbers: true,
singleSelect: true,
striped: true,
fitColumns: true,
method: 'get',
pagination: 'true',
pageSize: 20,
border: false,
toolbar:'#plantablebar',
columns: [[
{ field: 'id', title: 'ID', hidden: true },
{ field: 'type', title: '预案类型', width: 40,formatter: function (value, row, index) {
switch (value) {
case 'ZH': return '综合应急预案'; break;
case 'ZX': return '专项应急预案'; break;
case 'XC': return '现场处置方案'; break;
}
} },
{ field: 'name', title: '名称', width: 100,formatter: function (value, row, index) {
return '<a href="' + row.path+'" target="_blank">' + value + '</a>'
} },
{ field: 'createby__name', title: '创建人', width: 40 },
{ field: 'createtime', title: '创建时间', width: 100 },
]]
});
function delplan() {
var row = $('#plantable').datagrid('getSelected');
if (row) {
$.messager.confirm('提示', '确定删除吗?', function (r) {
if (r) {
$.ajax({
type: "POST",
url: 'api/contingencyplan/?a=del',
data: JSON.stringify({ 'id': row.id }),
datatype: "json",
beforeSend: function () { },
success: function (data) {
if (data.code == 1) {
$("#plantable").datagrid('reload');
}
else {
$.messager.alert('提示', '你无权删除该条责任制度!');
}
},
complete: function (XMLHttpRequest, textStatus) {
},
error: function () {
}
});
}
});
}
else {
$.messager.alert('提示', '请选择一行数据!');
}
}
function jydetail() {
var row = $('#plantable').datagrid('getSelected');
if (row) {
var url = 'html/resbility/detail/' + row.id
opendg('观看详情', url)
}
else { $.messager.alert('提示', '请选择一行数据!'); }
}
</script>

View File

@ -0,0 +1,147 @@
<div class="easyui-layout" style="width:100%;height:100%;">
<form id="form" method="post" name="form" enctype="multipart/form-data">
<div data-options="region:'center'" style="padding:15px 15px;">
<table class="listTab">
<tr>
<td>名称</td>
<td>
<input class="easyui-textbox" name="name" style="width:480px" required>
</td>
</tr>
<tr>
<td>类型</td>
<td>
<select class="easyui-combobox" name="type" style="width:480px;" required editable=false>
<option ></option>
<option value="ZH">综合应急预案</option>
<option value="ZX">专项应急预案</option>
<option value="XC">现场处置方案</option>
</select>
</td>
</tr>
</table>
<div id='filediv' style="margin-bottom:5px;">
<label>文件</label><input type="file" id="file" name="" accept=".doc,.docx,.pdf" style="margin-left: 20px"/>
<span id='ps' style="display:none">
<input type="button" onclick="cancleUploadFile()" value="取消" />
<progress id="progressBar" value="0" max="100" style="width: 100px;"></progress>
<span id="percentage"></span>
<span id="time"></span>
</span>
<ol id="fileol"></ol>
</div>
</div>
<div id='southdiv' data-options="region:'south'" style="height:50px;text-align:center;padding:5px">
<a href="javascript:void(0)" iconCls="fa-check" class="easyui-linkbutton" onclick="submitForm()" id="submitb">提交</a>
<a href="javascript:void(0)" iconCls="fa-close" class="easyui-linkbutton" onclick="closeForm()">取消</a>
</div>
</form>
</div>
<script type="text/javascript">
function submitForm() {
var data = $('#form').serializeJSON();
var filearray = new Array();
$(".filea").each(function () {
filearray.push($(this).attr("filepath"));
});
if(filearray.length==0){
$.messager.alert('提示', '未上传文件!');
return
}
data['path'] = filearray[0]
$.ajax({
type: "POST",
url: 'api/contingencyplan/?a=add',
data: JSON.stringify(data),
datatype: "json",
processData: false,
contentType: "application/json;charset=utf-8",
beforeSend: function () {
var bo = $('#form').form('validate')
if (bo == false) {
return bo
} else {
$('#submitb').linkbutton('disable');
}
},
success: function (data) {
if (data.code == 1) {
$('#plantable').datagrid('reload');
$("#dd").dialog("close");
} else { $.messager.alert('提示', '失败!'); }
$('#submitb').linkbutton('enable');
},
});
}
document.getElementById('file').onchange = function () {
var fileObj = this.files[0];
var url = 'upfile'
var form = new FormData();
form.append("upfile", fileObj); // 文件对象
xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
xhr.open("post", url, true); //post方式url为服务器请求地址true 该参数规定请求是否异步处理。
$('#ps').show();
xhr.onload = function (evt) { //服务断接收完文件返回的结果
var data = JSON.parse(evt.target.responseText);
if (data.code = 1) {
$('#ps').css('display', 'none');
$("#fileol").html('<li><button onclick="removep(this)" >删除</button><a class = "filea" target="_blank" filepath="' + data.filepath + '" href="' + data.filepath + '" >' + data.filename + '</a></li>');
} else { alert("上传失败!"); } document.getElementById('file').value = '';
}; //请求完成
xhr.onerror = function (evt) { alert("上传失败!"); $('#ps').css('display', 'none'); }; //请求失败
xhr.upload.onprogress = progressFunction;//【上传进度调用方法实现】
xhr.upload.onloadstart = function () {//上传开始执行方法
ot = new Date().getTime(); //设置上传开始时间
oloaded = 0;//设置上传开始时以上传的文件大小为0
};
xhr.send(form); //开始上传发送form数据
//上传进度实现方法,上传过程中会频繁调用该方法
}
//取消上传
function cancleUploadFile() {
xhr.abort();
$('#ps').hide();
document.getElementById('file').value = '';
}
function progressFunction(evt) {
var progressBar = document.getElementById("progressBar");
var percentageDiv = document.getElementById("percentage");
// event.total是需要传输的总字节event.loaded是已经传输的字节。如果event.lengthComputable不为真则event.total等于0
if (evt.lengthComputable) {//
progressBar.max = evt.total;
progressBar.value = evt.loaded;
percentageDiv.innerHTML = Math.round(evt.loaded / evt.total * 100) + "%";
}
var time = document.getElementById("time");
var nt = new Date().getTime();//获取当前时间
var pertime = (nt - ot) / 1000; //计算出上次调用该方法时到现在的时间差单位为s
ot = new Date().getTime(); //重新赋值时间,用于下次计算
var perload = evt.loaded - oloaded; //计算该分段上传的文件大小单位b
oloaded = evt.loaded;//重新赋值已上传文件大小,用以下次计算
//上传速度计算
var speed = perload / pertime;//单位b/s
var bspeed = speed;
var units = 'b/s';//单位名称
if (speed / 1024 > 1) {
speed = speed / 1024;
units = 'k/s';
}
if (speed / 1024 > 1) {
speed = speed / 1024;
units = 'M/s';
}
speed = speed.toFixed(1);
//剩余时间
var resttime = ((evt.total - evt.loaded) / bspeed).toFixed(1);
time.innerHTML = ',速度:' + speed + units + ',剩余时间:' + resttime + 's';
}
</script>

View File

@ -61,8 +61,14 @@
</div>
<script>
$(function () {
var option = $('#main').attr('value')
$('#yltable').datagrid({ url: 'ylhandle', queryParams: { a: option } });
var searchStr = sessionStorage.getItem("drill");
var queryParams = {'a':'listall'}
if(searchStr){
var lls = JSON.parse(searchStr)
queryParams = Object.assign(queryParams, lls)
}
$('#yltable').datagrid({ url: 'ylhandle', queryParams: queryParams });
$("#searchylff").form('clear');
})
$('#yltable').datagrid({

View File

@ -39,8 +39,14 @@
</div>
<script>
$(function(){
var option = $('#main').attr('value')
$('#kstable').datagrid({url:'api/examtest',queryParams:{a:option}});
var searchStr = sessionStorage.getItem("examtest");
var queryParams = {'a':'listall'}
if(searchStr){
var lls = JSON.parse(searchStr)
queryParams = Object.assign(queryParams, lls)
}
$('#kstable').datagrid({url:'api/examtest',queryParams:queryParams});
})
function addks(obj){
opendg('发布考试','html/examtest/add')

View File

@ -177,56 +177,61 @@
<div id="questiondd" style="overflow: hidden;"></div>
<input type="hidden" id="in" show="" total="" target="" show2="" />
<!-- <button type="hidden" id="getb" onclick="test()" /> -->
<!-- tab页的右键菜单 -->
<div id="home-tabs-menu" class="easyui-menu">
<div data-options="name:1">关闭</div>
<div data-options="name:2">关闭其他</div>
<div data-options="name:3">关闭所有</div>
</div>
<!-- tab页的右键菜单 -->
<div id="home-tabs-menu" class="easyui-menu">
<div data-options="name:0">刷新当前</div>
<div data-options="name:1">关闭当前</div>
<div data-options="name:2">关闭其他</div>
<div data-options="name:3">关闭所有</div>
</div>
<script>
$(document).ready(function () {
$('#tt').tabs({
border: false,
onSelect: function (title) {
var allTabs = $('#tt').tabs('tabs');
var selectTab = $('#tt').tabs('getSelected');
for (var i = 0; i < allTabs.length; i++) {
if(allTabs[i]){
if (allTabs[i].panel('options').title != selectTab.panel('options').title) {
var allTabs = $('#tt').tabs('tabs');
var selectTab = $('#tt').tabs('getSelected');
for (var i = 0; i < allTabs.length; i++) {
if (allTabs[i]) {
var ecludetitles = ['个人安全数据']
if(ecludetitles.indexOf(allTabs[i].panel('options').title)!=-1){
return
}
if (allTabs[i].panel('options').title != selectTab.panel('options').title) {
$('#tt').tabs('update', {
tab: allTabs[i],
options: {
content: 'Tab Body'
}
});
}
});
}
}
//selectTab.panel('refresh')
// console.log(allTabs[0].panel('options').content)
}
//selectTab.panel('refresh')
// console.log(allTabs[0].panel('options').content)
},
onContextMenu: function(e, title, index){
       //该方法通知浏览器不要执行与此事件关联的默认动作
       //即屏蔽了浏览器在tab页上的鼠标右键事件
e.preventDefault();
var mm = $("#home-tabs-menu");
//显示右键菜单
mm.menu("show",{
top: e.pageY,
left: e.pageX
}).data("tabTitle",title);
//为右键菜单选项绑定事件
mm.menu({
onClick: function(item){
closeTab(this, item.name);
onContextMenu: function (e, title, index) {
//该方法通知浏览器不要执行与此事件关联的默认动作
//即屏蔽了浏览器在tab页上的鼠标右键事件
e.preventDefault();
var mm = $("#home-tabs-menu");
//显示右键菜单
mm.menu("show", {
top: e.pageY,
left: e.pageX
}).data("tabTitle", title);
//为右键菜单选项绑定事件
mm.menu({
onClick: function (item) {
closeTab(this, item.name);
}
});
}
});
}
});
});
$.messager.show({
@ -364,41 +369,45 @@
localStorage.setItem('data', JSON.stringify(res));
})
function closeTab(menu, type){
var allTabs = $("#tt").tabs("tabs");
var allTabTitle = [];
$.each(allTabs, function(i, n){
var opt = $(n).panel("options");
if(opt.closable){
allTabTitle.push(opt.title);
function closeTab(menu, type) {
var allTabs = $("#tt").tabs("tabs");
var allTabTitle = [];
$.each(allTabs, function (i, n) {
var opt = $(n).panel("options");
if (opt.closable) {
allTabTitle.push(opt.title);
}
});
var curTabTitle = $(menu).data("tabTitle");
switch (type) {
case 0:
var tab = $('#tt').tabs('getSelected');
tab.panel('refresh');
break;
case 1:
//关闭当前
$("#tt").tabs("close", curTabTitle);
return false;
break;
case 2:
//关闭其他
for (var i = 0; i < allTabTitle.length; i++) {
if (curTabTitle != allTabTitle[i] && curTabTitle != '主页') {
$("#tt").tabs("close", allTabTitle[i]);
}
}
$("#tt").tabs("select", curTabTitle);
break;
case 3:
//关闭所有
for (var i = 0; i < allTabTitle.length; i++) {
if (curTabTitle != '主页') {
$("#tt").tabs("close", allTabTitle[i]);
}
}
break;
}
}
});
var curTabTitle = $(menu).data("tabTitle");
switch(type){
case 1:
//关闭当前
$("#tt").tabs("close", curTabTitle);
return false;
break;
case 2:
//关闭其他
for(var i = 0; i < allTabTitle.length; i++){
if(curTabTitle != allTabTitle[i] && curTabTitle != '主页'){
$("#tt").tabs("close",allTabTitle[i]);
}
}
$("#tt").tabs("select",curTabTitle);
break;
case 3:
//关闭所有
for(var i = 0; i < allTabTitle.length; i++){
if(curTabTitle != '主页'){
$("#tt").tabs("close",allTabTitle[i]);
}
}
break;
}
}
</script>
</body>

View File

@ -65,8 +65,14 @@
</div>
<script>
$(function () {
var option = $('#main').attr('value')
$('#xjtable').datagrid({ url: 'api/inspect', queryParams: { a: option } });
var searchStr = sessionStorage.getItem("inspect");
var queryParams = {'a':'listall'}
if(searchStr){
var lls = JSON.parse(searchStr)
queryParams = Object.assign(queryParams, lls)
}
$('#xjtable').datagrid({ url: 'api/inspect', queryParams: queryParams });
$("#searchxjff").form('clear');
})
$("#sxjbm").combotree({

View File

@ -34,7 +34,14 @@
</div>
<script>
$(function(){
$('#ycitemtable').datagrid({url:'api/inspectitem',queryParams:{a:'listyc'}});
var searchStr = sessionStorage.getItem("inspectitem");
var queryParams = {'a':'listyc'}
if(searchStr){
var lls = JSON.parse(searchStr)
queryParams = Object.assign(queryParams, lls)
}
$('#ycitemtable').datagrid({url:'api/inspectitem',queryParams:queryParams});
$("#searchxjff").form('clear');
})
$("#sxjbm").combotree({

View File

@ -49,8 +49,14 @@
</div>
<script>
$(function(){
var option = $('#main').attr('value')
$('#wstable').datagrid({url:'api/miss',queryParams:{a:option}});
var searchStr = sessionStorage.getItem("miss");
var queryParams = {'a':'listall'}
if(searchStr){
var lls = JSON.parse(searchStr)
queryParams = Object.assign(queryParams, lls)
}
$('#wstable').datagrid({url:'api/miss',queryParams:queryParams});
$("#searchwsff").form('clear');
})
$("#sfsbm").combotree({

View File

@ -47,8 +47,14 @@
</div>
<script>
$(function(){
var option = $('#main').attr('value')
$('#zytable').datagrid({url:'api/operation',queryParams:{a:option}});
var searchStr = sessionStorage.getItem("operation");
var queryParams = {'a':'listall'}
if(searchStr){
var lls = JSON.parse(searchStr)
queryParams = Object.assign(queryParams, lls)
}
$('#zytable').datagrid({url:'api/operation',queryParams:queryParams});
$.get('getdickey?dicclass=33&a=combobox',function(data){
let html=''
for (var x = 0, len = data.length; x < len; x++) {

View File

@ -25,7 +25,109 @@
<div id="infodiv">
</div>
<div id="troublediv">
<table border="1" style="margin: auto">
<tr>
<th>指标</th>
<th id="pname" width="400px">本人</th>
</tr>
<tr>
<th>上报隐患</th>
<th>
<a href="javascript:void(0);" onclick="goDetail('trouble', 'fxr', 'qssj', 'jssj')" id="troublediv1">0</a>
</th>
</tr>
<tr>
<th>整改隐患</th>
<th>
<a href="javascript:void(0);" onclick="goDetail('trouble', 'zgr', 'qssj', 'jssj')" id="troublediv2">0</a>
</th>
</tr>
<tr>
<th>参加培训</th>
<th>
<a href="javascript:void(0);" onclick="goDetail('train', 'participant', 'qssj', 'jssj')" id="traindiv1">0</a>
</th>
</tr>
<tr>
<th>参与作业</th>
<th>
<a href="javascript:void(0);" onclick="goDetail('operation', 'zyry', 'qssj', 'jssj')" id="operationdiv1">0</a>
</th>
</tr>
<tr>
<th>作业负责人</th>
<th>
<a href="javascript:void(0);" onclick="goDetail('operation', 'zyfzr', 'qssj', 'jssj')" id="operationdiv2">0</a>
</th>
</tr>
<tr>
<th>上报未遂</th>
<th>
<a href="javascript:void(0);" onclick="goDetail('miss', 'misser', 'qssj', 'jssj')" id="missdiv1">0</a>
</th>
</tr>
<tr>
<th>提出建议</th>
<th>
<a href="javascript:void(0);" onclick="goDetail('suggest', 'jyr', 'qssj', 'jssj')" id="suggestdiv1">0</a>
</th>
</tr>
<tr>
<th>处理建议</th>
<th >
<a href="javascript:void(0);" onclick="goDetail('suggest', 'clr', 'qssj', 'jssj')" id="suggestdiv2">0</a>
</th>
</tr>
<tr>
<th>参加考试</th>
<th>
<a href="javascript:void(0);" onclick="goDetail('examtest', 'user', 'starttime1', 'starttime2')" id="testdiv1">0</a>
</th>
</tr>
<tr>
<th>通过考试</th>
<th>
<a href="javascript:void(0);" onclick="goDetail('examtest', 'user_tg', 'starttime1', 'starttime2')" id="testdiv2">0</a>
</th>
</tr>
<tr>
<th>参加演练</th>
<th>
<a href="javascript:void(0);" onclick="goDetail('drill', 'participant', 'qssj', 'jssj')" id="drilldiv1">0</a>
</th>
</tr>
<tr>
<th>巡检设备</th>
<th>
<a href="javascript:void(0);" onclick="goDetail('inspect', 'xjr', 'qssj', 'jssj')" id="inspectdiv1">0</a>
</th>
</tr>
<tr>
<th>发现设备异常</th>
<th>
<a href="javascript:void(0);" onclick="goDetail('inspect', 'xjr_0', 'qssj', 'jssj')" id="inspectdiv2">0</a>
</th>
</tr>
<tr>
<th>处理设备异常</th>
<th>
<a href="javascript:void(0);" onclick="goDetail('inspectitem', 'todouser_0', 'qssjx', 'jssjx')" id="inspectdiv3">0</a>
</th>
</tr>
<tr>
<th>有效安全证书</th>
<th>
<a href="javascript:void(0);" onclick="goDetail('safecert', 'user', 'qssj', 'jssj')" id="certdiv1">0</a>
</th>
</tr>
<tr>
<th>有效作业证书</th>
<th>
<a href="javascript:void(0);" onclick="goDetail('socert', 'user', 'qssj', 'jssj')" id="certdiv2">0</a>
</th>
</tr>
</table>
<!-- <div id="troublediv">
</div>
<div id="traindiv">
@ -54,17 +156,22 @@
</div>
<div id="certdiv">
</div>
</div> -->
</div>
</div>
</div>
<script type="text/javascript">
var arrs = new Array("trouble","train","operation", "miss", "suggest", "test", "drill", "inspect", "cert")
var arrs = new Array("trouble", "train", "operation", "miss", "suggest", "test", "drill", "inspect", "cert")
var useridx = '{{ user.userid }}';
var namex = '{{user.name}}'
$('#pname').html(namex)
var querydatax = {}
$(function () {
for(var i=0;i<arrs.length;i++){
var querydata = {type:arrs[i]}
for (var i = 0; i < arrs.length; i++) {
var querydata = { type: arrs[i] }
beginsearch(querydata)
}
})
@ -74,18 +181,23 @@
$('#username').textbox('setValue', top.$('#in').attr('show'));
}
}
function startSearch(){
var date = $('#ff').serializeJSON()
function startSearch() {
var date = $('#ff').serializeJSON()
var name = $('#username').textbox('getValue')
if(name==""){
if (name == "") {
name = '{{ user.name }}';
}
$('#infodiv').html('<p>'+name+'&nbsp;&nbsp;&nbsp;'+ date.startdate + '-' + date.enddate +'</p>')
for(var i=0;i<arrs.length;i++){
var querydata = $('#ff').serializeJSON()
querydata.type = arrs[i];
$('#pname').html(name + '&nbsp;&nbsp;&nbsp;' + date.startdate + '至' + date.enddate)
if(date.userid){
useridx = date.userid
}
querydatax = date
for (var i = 0; i < arrs.length; i++) {
var querydata = $('#ff').serializeJSON()
querydata.type = arrs[i];
beginsearch(querydata)
}
}
function ExportWord(e) {
@ -100,33 +212,40 @@
dataType: "json", //返回数据形式为json
success: function (res) {
//请求成功时执行该函数内容data即为服务器返回的json对象
if(res){
if(data.type == 'trouble'){
$('#troublediv').html('<p>上报隐患共<span style="color:red;font-weight:bold">' + res.fx_count + '</span>条, 整改隐患<span style="color:red;font-weight:bold">' + res.zg_count + '</span>条.</p>')
if (res) {
if (data.type == 'trouble') {
$('#troublediv1').html(res.fx_count)
$('#troublediv2').html(res.zg_count)
}
else if(data.type == 'train'){
$('#traindiv').html('<p>需参加培训<span style="color:red;font-weight:bold">' + res.px_count + '</span>场, 参加并签到<span style="color:red;font-weight:bold">' + res.qd_count + '</span>场.</p>')
else if (data.type == 'train') {
$('#traindiv1').html(res.px_count)
}
else if(data.type == 'operation'){
$('#operationdiv').html('<p>参与作业共<span style="color:red;font-weight:bold">' + res.zy_count + '</span>场, 其中身为作业负责人<span style="color:red;font-weight:bold">' + res.zyfzr_count + '</span>场.</p>')
else if (data.type == 'operation') {
$('#operationdiv1').html(res.zy_count)
$('#operationdiv2').html(res.zyfzr_count)
}
else if(data.type == 'miss'){
$('#missdiv').html('<p>上报未遂事件共<span style="color:red;font-weight:bold">' + res.ws_count + '</span>件.</p>')
else if (data.type == 'miss') {
$('#missdiv1').html(res.ws_count)
}
else if(data.type == 'suggest'){
$('#suggestdiv').html('<p>提出并被采纳的建议共<span style="color:red;font-weight:bold">' + res.jy_count + '</span>条, 本人处理了<span style="color:red;font-weight:bold">' + res.jycl_count + '</span>条.</p>')
else if (data.type == 'suggest') {
$('#suggestdiv1').html(res.jy_count)
$('#suggestdiv2').html(res.jycl_count)
}
else if(data.type == 'test'){
$('#testdiv').html('<p>共参加考试<span style="color:red;font-weight:bold">' + res.ks_count + '</span>场, 其中<span style="color:red;font-weight:bold">' + res.kstg_count + '</span>场通过.</p>')
else if (data.type == 'test') {
$('#testdiv1').html(res.ks_count)
$('#testdiv2').html(res.kstg_count)
}
else if(data.type == 'drill'){
$('#drilldiv').html('<p>共参加应急演练<span style="color:red;font-weight:bold">' + res.yl_count + '</span>场.')
else if (data.type == 'drill') {
$('#drilldiv1').html(res.yl_count)
}
else if(data.type == 'inspect'){
$('#inspectdiv').html('<p>共巡检设备<span style="color:red;font-weight:bold">' + res.xj_count + '</span>次, 其中<span style="color:red;font-weight:bold">' + res.xjyc_count + '</span>次发现异常.本人处理了<span style="color:red;font-weight:bold">'+ res.clyc_count+'</span>个异常</p>')
else if (data.type == 'inspect') {
$('#inspectdiv1').html(res.xj_count)
$('#inspectdiv2').html(res.xjyc_count)
$('#inspectdiv3').html(res.clyc_count)
}
else if(data.type == 'cert'){
$('#certdiv').html('<p>拥有特种作业证书<span style="color:red;font-weight:bold">' + res.tz_count + '</span>张, 其中<span style="color:red;font-weight:bold">' + res.tzcq_count + '</span>张超期.</p><p>拥有安全证书<span style="color:red;font-weight:bold">'+ res.aq_count+'</span>张,其中<span style="color:red;font-weight:bold">' + res.aqcq_count + '</span>张超期.</p>')
else if (data.type == 'cert') {
$('#certdiv1').html(res.aq_count)
$('#certdiv2').html(res.tz_count)
}
@ -138,4 +257,40 @@
}
});
}
function goDetail(k1, k2, k3, k4) {
var options = {
'trouble': ['事故隐患', '/troublehtml'],
'operation': ['作业许可', '/html/operation'],
'train': ['线下培训', '/trainhtml'],
'miss': ['未遂事件', '/misshtml'],
'suggest': ['合理化建议', '/html/suggest'],
'drill': ['应急演练', '/drillhtml'],
'examtest': ['在线考试', '/html/examtest'],
'inspect': ['巡检记录', '/html/inspect'],
'inspectitem': ['异常处理', '/html/inspectitem'],
'safecert':['安全资格证书', '/html/safecert'],
'socert':['特种作业证书', '/socerthtml']
}
var myquerydata={}
if(querydatax.startdate){
myquerydata[k3]= querydatax.startdate
}
if(querydatax.enddate){
myquerydata[k4]= querydatax.enddate
}
myquerydata[k2] = useridx
var title = options[k1][0]
if ($('#tt').tabs('exists', title)) {
sessionStorage.setItem(k1, JSON.stringify(myquerydata))
$('#tt').tabs('select', title);
var tab = $('#tt').tabs('getSelected');
tab.panel('refresh');
} else {
$('#tt').tabs('add', {
title: title,
href: options[k1][1],
closable: true,
});
}
}
</script>

View File

@ -28,8 +28,14 @@
</div>
<script>
$(function(){
var option = $('#main').attr('value')
$('#aqzstable').datagrid({url:'api/safecert',queryParams:{a:option}});
var searchStr = sessionStorage.getItem("safecert");
var queryParams = {'a':'listall'}
if(searchStr){
var lls = JSON.parse(searchStr)
queryParams = Object.assign(queryParams, lls)
}
$('#aqzstable').datagrid({url:'api/safecert',queryParams:queryParams});
})
$('#kjcxaqzs').combobox({
editable:false,

View File

@ -40,8 +40,14 @@
</div>
<script>
$(function(){
var option = $('#main').attr('value')
$('#tzzstable').datagrid({url:'api/socert',queryParams:{a:option}});
var searchStr = sessionStorage.getItem("socert");
var queryParams = {'a':'listall'}
if(searchStr){
var lls = JSON.parse(searchStr)
queryParams = Object.assign(queryParams, lls)
}
$('#tzzstable').datagrid({url:'api/socert',queryParams:queryParams});
})
// $("#sfsbm").combotree({
// url: 'parthandle?a=tree',

View File

@ -51,8 +51,14 @@
</div>
<script>
$(function(){
var option = $('#main').attr('value')
$('#jytable').datagrid({url:'api/suggest',queryParams:{a:option}});
var searchStr = sessionStorage.getItem("suggest");
var queryParams = {'a':'listall'}
if(searchStr){
var lls = JSON.parse(searchStr)
queryParams = Object.assign(queryParams, lls)
}
$('#jytable').datagrid({url:'api/suggest',queryParams:queryParams});
$("#searchjyff").form('clear');
$("#sjybm").combotree({
url: 'parthandle?a=tree',

View File

@ -59,8 +59,14 @@
</div>
<script>
$(function () {
var option = $('#main').attr('value')
$('#pxtable').datagrid({ url: 'pxhandle', queryParams: { a: option } });
var searchStr = sessionStorage.getItem("train");
var queryParams = {'a':'listall'}
if(searchStr){
var lls = JSON.parse(searchStr)
queryParams = Object.assign(queryParams, lls)
}
$('#pxtable').datagrid({ url: 'pxhandle', queryParams: queryParams });
$("#searchpxff").form('clear');
})
$('#pxtable').datagrid({

View File

@ -81,8 +81,15 @@
<!-- <a id="downa" href="" target="_blank" style="display:none"></a> -->
<script>
$(function () {
var option = $('#main').attr('value')
$('#yhtable').datagrid({ url: 'troublehandle', queryParams: { a: option } });
// var option = $('#main').attr('value')
var searchStr = sessionStorage.getItem("trouble");
var queryParams = {'a':'listall'}
if(searchStr){
var lls = JSON.parse(searchStr)
queryParams = Object.assign(queryParams, lls)
}
$('#yhtable').datagrid({ url: 'troublehandle', queryParams: queryParams });
$("#searchyhff").form('clear');
})

View File

@ -145,7 +145,8 @@ urlpatterns = [
path('html/personalp/', views.personalphtml),
path('html/contingencyplan/', views.contingencyplan), #应急预案
path('html/contingencyplan/add/', views.contingencyplanadd), #应急预案
# 违章举报
path('html/offence/', views.offence),
path('html/offence/detail/<int:id>/', views.offencedetail),
@ -225,7 +226,7 @@ urlpatterns = [
path('api/myschedule/',views.apimyschedule),
path('api/trainplan/', views.apitrainplan),
path('api/troublefollowtask/', views.apitroublefollowtask),
path('api/contingencyplan/', views.apicontingencyplan),
path('api/offence/', views.apioffence),
path('api/safelist/', views.apisafelist),
path('api/safeitem/', views.apisafeitem),

View File

@ -564,6 +564,11 @@ def equipmentfigure(req):
def resbility(req):
return render(req, 'resbility.html')
def contingencyplan(req):
return render(req, 'contingencyplan.html')
def contingencyplanadd(req):
return render(req, 'contingencyplanadd.html')
def addresbility(req):#责任制
return render(req,'resbilityadd.html')
@ -2100,6 +2105,7 @@ def troublehandle(req):
yhpg = req.GET.get('yhpg')
fxbm = req.GET.get('fxbm')
fxr = req.GET.get('fxr')
zgr = req.GET.get('zgr')
qssj = req.GET.get('qssj')
jssj = req.GET.get('jssj')
yhqy = req.GET.get('yhqy')
@ -2118,6 +2124,8 @@ def troublehandle(req):
a = a.filter(jclx__dickeyid=jclx)
if yhpg:
a = a.filter(yhpg__dickeyid=yhpg)
if zgr:
a = a.filter(zgr__userid=zgr)
if fxbm or fxr:
if fxr:
a = a.filter(fxr__userid=fxr)
@ -3199,6 +3207,24 @@ def pxhandle(req):
companyid = getcompany(userid)
a = Train.objects.filter(usecomp=Partment.objects.get(
partid=companyid), deletemark=1)
qssj = req.GET.get('qssj', None)
jssj = req.GET.get('jssj', None)
pxbm = req.GET.get('trainpart', None)
pxjb = req.GET.get('trainlevel', None)
pxnr = req.GET.get('traincontent', None)
participant = req.GET.get('participant', None)
if pxjb:
a = a.filter(trainlevel__dicid=pxjb)
if pxnr:
a = a.filter(traincontent__dickeyid=pxnr)
if pxbm:
a = a.filter(trainpart__partid=pxbm)
if qssj:
a = a.filter(starttime__gte=qssj)
if jssj:
a = a.filter(starttime__lte=jssj)
if participant:
a = a.filter(participant__userid=participant)
total = a.count()
startnum, endnum = fenye(req)
a = a.order_by('-starttime')[startnum:endnum].values('trainnum', 'trainid', 'state', 'trainplace', 'starttime', 'trainname',
@ -3316,6 +3342,24 @@ def ylhandle(req):
startnum, endnum = fenye(req)
a = Drill.objects.filter(usecomp=Partment.objects.get(
partid=companyid), deletemark=1).order_by('-starttime')
qssj = req.GET.get('qssj', None)
jssj = req.GET.get('jssj', None)
ylbm = req.GET.get('drillpart', None)
yljb = req.GET.get('drilllevel', None)
ylnr = req.GET.get('drillcontent', None)
participant = req.GET.get('participant', None)
if yljb:
a = a.filter(drilllevel__dicid=yljb)
if ylnr:
a = a.filter(drillcontent__dickeyid=ylnr)
if ylbm:
a = a.filter(drillpart__partid=ylbm)
if qssj:
a = a.filter(starttime__gte=qssj)
if jssj:
a = a.filter(starttime__lte=jssj)
if participant:
a = a.filter(participant__userid=participant)
total = a.count()
startnum, endnum = fenye(req)
a = a[startnum:endnum].values('drillnum', 'drillid', 'state', 'drillplace', 'starttime',
@ -4067,8 +4111,18 @@ def apimiss(req):
startnum, endnum = fenye(req)
a = Miss.objects.filter(usecomp=Partment.objects.get(
partid=companyid), deletemark=1)
if req.GET.get('misser', None):
a = a.filter(misser__userid=req.GET.get('misser'))
if req.GET.get('missqy', None):
a = a.filter(missqy__id=req.GET.get('missqy'))
if req.GET.get('fsbm'):
parts = Partment.objects.filter(partlink__contains=','+req.GET.get(
'fsbm')+',') | Partment.objects.filter(partid=req.GET.get('fsbm'))
a = a.filter(misspart__in=parts)
if req.GET.get('qssj'):
a = a.filter(misstime__gte=req.GET.get('qssj'))
if req.GET.get('jssj'):
a = a.filter(misstime__lte=req.GET.get('jssj'))
a = a.order_by('-misstime')
total = a.count()
startnum, endnum = fenye(req)
@ -4165,6 +4219,8 @@ def apisocert(req):
companyid = getcompany(userid)
startnum, endnum = fenye(req)
a = Socertificate.objects.filter(user__usecomp__partid=companyid).order_by('id') # 无deletemark
if req.GET.get('user', None):
a = a.filter(user=req.GET.get('user'), zszt=1)
total = a.count()
startnum, endnum = fenye(req)
if req.GET.get('sort'):
@ -4373,6 +4429,8 @@ def apisafecert(req):
companyid = getcompany(userid)
startnum, endnum = fenye(req)
a = Safecert.objects.filter(user__usecomp__partid=companyid).order_by('id') # 无deletemark
if req.GET.get('user', None):
a = a.filter(user=req.GET.get('user'), zszt=1)
total = a.count()
startnum, endnum = fenye(req)
if req.GET.get('sort'):
@ -4703,6 +4761,14 @@ def apisuggest(req):
startnum, endnum = fenye(req)
a = Suggest.objects.filter(usecomp=Partment.objects.get(
partid=companyid)).order_by('-submittime')
if req.GET.get('jyr', None):
a = a.filter(jyr__userid=req.GET.get('jyr'))
if req.GET.get('clr', None):
a = a.filter(clr__userid=req.GET.get('clr'))
if req.GET.get('qssj'):
a = a.filter(submittime__gte=req.GET.get('qssj'))
if req.GET.get('jssj'):
a = a.filter(submittime__lte=req.GET.get('jssj'))
if req.GET.get('jyrname', None):
a = a.filter(jyr__name__contains=req.GET.get('jyrname'))
if req.GET.get('jybm'):
@ -5520,6 +5586,10 @@ def apioperation(req):
usecomp=usecomp, deletemark=1).order_by('-submittime')
if req.GET.get('zyqy', False):
a = a.filter(zyqy__id=req.GET.get('zyqy'))
if req.GET.get('zyfzr', None):
a = a.filter(zyfzr__userid=req.GET.get('zyfzr'))
if req.GET.get('zyry', None):
a = a.filter(zyry__userid=req.GET.get('zyry'))|a.filter(zyfzr__userid=req.GET.get('zyry'))
if req.GET.get('qssj', None):
a = a.filter(kssj__gte=req.GET.get('qssj'))
if req.GET.get('jssj', None):
@ -6296,6 +6366,8 @@ def apiexamtest(req):
search = req.GET.get('search', None)
starttime1 = req.GET.get('starttime1', None)
starttime2 = req.GET.get('starttime2', None)
user = req.GET.get('user', None)
user_tg = req.GET.get('user_tg', None)
if search:
a = a.filter(Q(name__contains=search)|Q(exampaper__name=search))
if starttime1:
@ -6306,6 +6378,10 @@ def apiexamtest(req):
a = a.filter(state=1)
if state == 'close':
a = a.filter(state=0)
if user:
a = a.filter(user__userid=user)
if user_tg:
a = a.filter(user__userid=user_tg, detail_examtest__passcode=1)
if owner == 'yes':
ownerlist = ExamTestDetail.objects.filter(user__userid=userid, examtest__state=1,testnum=0).values_list('examtest__id',flat=True)
a = a.filter(Q(id__in=ownerlist)|Q(ispublic=1))
@ -7095,6 +7171,28 @@ def apiinspect(req):
companyid = getcompany(userid)
if a == 'listall':
a = Inspect.objects.filter(usecomp__partid=companyid)
qssj = req.GET.get('qssj')
jssj = req.GET.get('jssj')
xjbm = req.GET.get('xjbm')
xjr = req.GET.get('xjr')
state = req.GET.get('state')
if xjbm or xjr:
if xjr:
a = a.filter(user__userid=xjr)
else:
parts = Partment.objects.filter(partid=xjbm) | Partment.objects.filter(
partlink__contains=','+xjbm+',')
a = a.filter(user__ubelongpart__in=parts)
if req.GET.get('xjr_0'):
a = a.filter(user__userid=req.GET.get('xjr_0'), state=0)
if qssj:
a = a.filter(creattime__gte=qssj)
if jssj:
a = a.filter(creattime__lte=jssj)
if state:
a = a.filter(state=state)
if req.GET.get('num', None):
a = a.filter(equipment__num__contains = req.GET.get('num'))
total = a.count()
startnum, endnum = fenye(req)
a = a.order_by('-id')[startnum:endnum].values('id', 'state', 'content', 'creattime', 'equipment__num', 'equipment__name',
@ -7297,10 +7395,16 @@ def apiinspectitem(req):
objs = objs.filter(inspect__creattime__gte=req.GET.get("qssj"))
if req.GET.get("jssj", None):
objs = objs.filter(inspect__creattime__lte=req.GET.get("jssj"))
if req.GET.get("qssjx", None):
objs = objs.filter(handletime__gte=req.GET.get("qssjx"))
if req.GET.get("jssjx", None):
objs = objs.filter(handletime__lte=req.GET.get("jssjx"))
# xjbm = req.GET.get('xjbm',None)
xjr = req.GET.get('xjr',None)
if xjr:
objs = objs.filter(inspect__user__name__contains=xjr)
if req.GET.get('todouser_0', None):
objs = objs.filter(todouser__userid=req.GET.get('todouser_0'), state='异常已处理')
# if xjbm or xjr:
# if xjr:
# objs = objs.filter(inspect__user__userid=xjr)
@ -9112,4 +9216,34 @@ def apisafefeedback(req):
data = json.loads(req.body.decode('utf-8'))
obj = SafeFeedBack.objects.get(id=data['id'])
obj.delete()
return JsonResponse({"code":1})
return JsonResponse({"code":1})
@apicheck_login
def apicontingencyplan(req):
a = req.GET.get('a')
userid = req.session['userid']
user= User.objects.get(userid=userid)
if a == 'listall':
objs = ContingencyPlan.objects.filter(usecomp=user.usecomp, deletemark=1)
if req.GET.get('type', None):
objs = objs.filter(type=req.GET.get('type'))
total = objs.count()
startnum, endnum = fenye(req)
objs = objs[startnum:endnum].values('id', 'name', 'path', 'createtime', 'type', 'createby__name', 'path')
return HttpResponse(transjson(total, objs), content_type="application/json")
elif a == 'add':
data = json.loads(req.body.decode('utf-8'))
obj= ContingencyPlan()
obj.name = data['name']
obj.type = data['type']
obj.path = data['path']
obj.createby = user
obj.save()
return JsonResponse({"code":1})
elif a == 'del':
data = json.loads(req.body.decode('utf-8'))
obj = ContingencyPlan.objects.get(id=data['id'])
obj.delete()
return JsonResponse({"code":1})

View File

@ -14,7 +14,7 @@ def apicountsafe(req):
startdate = req.GET.get('startdate', None)
enddate = req.GET.get('enddate', None)
if type == 'trouble':
objs = Trouble.objects.filter(deletemark=1)
objs = Trouble.objects.filter(deletemark=1, usecomp__partid=companyid)
if startdate:
objs = objs.filter(fxsj__gte=startdate)
if enddate:
@ -26,7 +26,7 @@ def apicountsafe(req):
ret['zg_count'] = objs.filter(zgr__userid=userid).count()
return JsonResponse(ret)
elif type == 'train':
objs = Trainuser.objects.filter(train__deletemark=1)
objs = Trainuser.objects.filter(train__deletemark=1, train__usecomp__partid=companyid)
if startdate:
objs = objs.filter(train__starttime__gte=startdate)
if enddate:
@ -69,8 +69,8 @@ def apicountsafe(req):
if dept:
pass
else:
ret['jy_count'] = objs.filter(jyr__userid=userid, accept=1).count()
ret['jycl_count'] = objs.filter(clr__userid=userid, accept=1).count()
ret['jy_count'] = objs.filter(jyr__userid=userid).count()
ret['jycl_count'] = objs.filter(clr__userid=userid).count()
return JsonResponse(ret)
elif type == 'test':
objs = ExamTestDetail.objects.exclude(examtest__nousecomps__contains=','+companyid+',')