Merge branch 'master' of https://e.coding.net/ctcdevteam/safesite
This commit is contained in:
commit
cd19746949
|
@ -0,0 +1,31 @@
|
|||
# Generated by Django 2.2.8 on 2021-05-09 15:19
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('safesite', '0377_troublefollowtask_gridlevel'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Offence',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('type', models.CharField(default='公司员工', max_length=200, verbose_name='人员类型')),
|
||||
('dept', models.CharField(default='', max_length=200, verbose_name='车间')),
|
||||
('post', models.CharField(default='', max_length=200, verbose_name='岗位')),
|
||||
('area', models.CharField(default='', max_length=200, verbose_name='具体区域')),
|
||||
('parter', models.CharField(default='', max_length=200, verbose_name='当事人')),
|
||||
('description', models.TextField(blank=True, null=True, verbose_name='描述')),
|
||||
('imgs', models.TextField(blank=True, null=True, verbose_name='图片地址')),
|
||||
('createtime', models.DateTimeField(auto_now_add=True)),
|
||||
('modifytime', models.DateTimeField(auto_now=True)),
|
||||
('reporter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.User', verbose_name='举报人')),
|
||||
('usecomp', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.Partment', verbose_name='所属公司')),
|
||||
],
|
||||
),
|
||||
]
|
|
@ -0,0 +1,31 @@
|
|||
# Generated by Django 2.2.8 on 2021-05-09 19:16
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('safesite', '0378_offence'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='offence',
|
||||
name='happentime',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='发生时间'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='offence',
|
||||
name='place',
|
||||
field=models.CharField(default='', max_length=200, verbose_name='具体地点'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='offence',
|
||||
name='area',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='safesite.Area', verbose_name='区域'),
|
||||
),
|
||||
]
|
|
@ -392,12 +392,17 @@ class Offence(models.Model):
|
|||
type = models.CharField(verbose_name="人员类型", default="公司员工", max_length=200)
|
||||
dept = models.CharField(verbose_name="车间", default="", max_length=200)
|
||||
post = models.CharField(verbose_name="岗位", default="", max_length=200)
|
||||
area = models.CharField(verbose_name="具体区域", default="", max_length=200)
|
||||
area = models.ForeignKey(Area, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="区域")
|
||||
place = models.CharField(verbose_name="具体地点", default="", max_length=200)
|
||||
parter = models.CharField(verbose_name="当事人", default="", max_length=200)
|
||||
description = models.TextField("描述", null=True, blank=True)
|
||||
imgs = models.TextField("图片地址", null=True, blank=True)
|
||||
happentime = models.DateTimeField('发生时间')
|
||||
reporter = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="举报人")
|
||||
|
||||
|
||||
createtime = models.DateTimeField(auto_now_add=True)
|
||||
modifytime = models.DateTimeField(auto_now=True)
|
||||
usecomp = models.ForeignKey(Partment, on_delete=models.CASCADE, verbose_name='所属公司')
|
||||
|
||||
|
||||
class Group(models.Model): # 用户组,岗位
|
||||
|
|
|
@ -21,24 +21,25 @@
|
|||
{% if request|has_permission:'b_inspect_del' %}
|
||||
<a id="delxj" onclick="delxj()" class="easyui-linkbutton" data-options="iconCls: 'fa-trash',plain:true">删除</a>
|
||||
{% endif %} -->
|
||||
<a id="deloffence" onclick="deloffence()" class="easyui-linkbutton" data-options="iconCls: 'fa-trash',plain:true">删除</a>
|
||||
<a id="offencedetail" onclick="offencedetail()" class="easyui-linkbutton" data-options="iconCls: 'fa-info-circle',plain:true">查看详情</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
$(function(){
|
||||
$('#offencetable').datagrid({url:'api/inspectitem',queryParams:{a:'listyc'}});
|
||||
$('#offencetable').datagrid({url:'api/offence/',queryParams:{a:'listall'}});
|
||||
$("#searchoffenceff").form('clear');
|
||||
})
|
||||
function offencesearch() {
|
||||
var querydata = $('#searchoffenceff').serializeJSON();
|
||||
querydata['a'] = 'listyc'
|
||||
querydata['a'] = 'listall'
|
||||
$('#offencetable').datagrid('load',querydata);
|
||||
}
|
||||
function reset() {
|
||||
$('#searchoffenceff').form('clear')
|
||||
$('#offencetable').datagrid('options').queryParams = {
|
||||
a:'listyc'
|
||||
a:'listall'
|
||||
}
|
||||
$('#offencetable').datagrid('load');
|
||||
|
||||
|
@ -56,62 +57,48 @@
|
|||
border:false,
|
||||
columns: [[
|
||||
{ field: 'id', title: 'ID', hidden: true },
|
||||
{ field: 'inspect__equipment__num', title: '设备编号', width: 80 },
|
||||
{ field: 'inspect__equipment__name', title: '设备名称', width: 80 },
|
||||
{ field: 'checkitem__name', title: '异常项目', width: 100 },
|
||||
// { field: 'state', title: '设备状态', width: 80 , styler: function (value, row, index) {
|
||||
// if (value == 1) {
|
||||
// return 'background-color:green;color:white';
|
||||
// }else{ return 'background-color:red;'; }
|
||||
// }, formatter: function (value, row, index) {
|
||||
// if (value == 1) {
|
||||
// return '正常';
|
||||
// }else{return '异常'}
|
||||
// }
|
||||
// },
|
||||
{ field: 'state', title: '处理状态', width: 80 , styler: function (value, row, index) {
|
||||
switch (value) {
|
||||
case '正常': return 'background-color:green;color:white'; break;
|
||||
case '异常待处理': return 'background-color:red;color:white'; break;
|
||||
case '异常已处理': return 'background-color:green;color:white'; break;
|
||||
}
|
||||
}
|
||||
},
|
||||
// { field: 'content', title: '巡检结论', width: 200 , formatter: function (value, row, index) {
|
||||
// if(value==null){
|
||||
// return row.trouble__yhms
|
||||
// }
|
||||
// }},
|
||||
{ field: 'inspect__user__name', title: '巡检人', width: 80 },
|
||||
{ field: 'todouser__name', title: '处理人', width: 80 },
|
||||
{ field: 'inspect__creattime', title: '提交时间', width: 100 },
|
||||
{ field: 'happentime', title: '发现时间', width: 80 },
|
||||
{ field: 'type', title: '人员类型', width: 100 },
|
||||
{ field: 'dept', title: '车间', width: 100 },
|
||||
{ field: 'area__name', title: '区域', width: 80 },
|
||||
{ field: 'place', title: '地点', width: 100 },
|
||||
{ field: 'parter', title: '当事人', width: 80 },
|
||||
{ field: 'description', title: '描述', width: 200 },
|
||||
{ field: 'reporter__name', title: '举报人', width: 80 },
|
||||
|
||||
|
||||
]]
|
||||
});
|
||||
function exportxjexcel() {
|
||||
var querydata = $('#searchoffenceff').serializeJSON();
|
||||
console.log(querydata)
|
||||
let url = 'api/inspect?a=exportexcel&'+parseParams(querydata)
|
||||
let url = 'api/offence?a=exportexcel&'+parseParams(querydata)
|
||||
$('<form method="post" action="' + url + '"></form>').appendTo('body').submit().remove();
|
||||
}
|
||||
function delxj(){
|
||||
function deloffence(){
|
||||
var row = $('#offencetable').datagrid('getSelected');
|
||||
if (row) {
|
||||
var url = 'api/inspect?a=del&id=' + row.id
|
||||
$.get(url,function(res){
|
||||
if(res.code==1){
|
||||
$('#offencetable').datagrid('reload')
|
||||
}else{
|
||||
$.messager.alert('提示', '没有权限!');
|
||||
}
|
||||
})
|
||||
var data = {id:row.id}
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: 'api/offence/?a=del',
|
||||
data: JSON.stringify(data),
|
||||
datatype: "json",
|
||||
processData: false,
|
||||
contentType: "application/json;charset=utf-8",
|
||||
success: function (data) {
|
||||
if (data.code == 1) {
|
||||
$('#offencetable').datagrid('reload');
|
||||
} else { $.messager.alert('提示', '失败!'); }
|
||||
},
|
||||
});
|
||||
}
|
||||
else { $.messager.alert('提示', '请选择一行数据!'); }
|
||||
}
|
||||
function offencedetail(){
|
||||
var row = $('#offencetable').datagrid('getSelected');
|
||||
if (row) {
|
||||
var url = 'html/inspectitem/detail/' + row.id
|
||||
var url = 'html/offence/detail/' + row.id
|
||||
opendg('查看详情',url)
|
||||
}
|
||||
else { $.messager.alert('提示', '请选择一行数据!'); }
|
||||
|
|
|
@ -0,0 +1,100 @@
|
|||
<div class="easyui-layout" id="result" style="width:100%;height:100%"></div>
|
||||
<script type="text/html" id="text">
|
||||
{% verbatim %}
|
||||
<div id='southdiv' data-options="region:'south'" style="height:50px;text-align:center;padding:5px">
|
||||
<!-- <a id="exportwzword" onclick="exportwzword()" class="easyui-linkbutton" data-options="iconCls: 'fa-download'">导出</a> -->
|
||||
<a iconCls="fa-close" class="easyui-linkbutton" onclick="closeForm()">关闭</a>
|
||||
</div>
|
||||
<div data-options="region:'center'" style="height:100%;padding:15px 15px;">
|
||||
<div class="labeldiv">违章概况</div>
|
||||
<table class='detailtable'>
|
||||
<tr>
|
||||
|
||||
<td>发生时间:{{happentime| dateFormat 'yyyy-MM-dd hh:mm:ss'}}</td>
|
||||
<td>人员类型:{{type}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width:50%">区域:{{area__name}}</td>
|
||||
<td style="width:50%">地点:{{place}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>车间:{{dept}}</td>
|
||||
<td>岗位:{{post}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">当事人:{{parter}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">简要描述:{{description}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">举报人:{{reporter__name}}</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="labeldiv">现场照片</div>
|
||||
<table class='detailtable'>
|
||||
|
||||
<tr>
|
||||
{{each missimg value index}}
|
||||
<td><img onclick='bigger(this)' class='tp' width="200" height="200" src='{{value}}' /></td>
|
||||
{{/each}}
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
{% endverbatim %}
|
||||
</script>
|
||||
<script type="text/javascript" src="/static/safesite/mystatic/js/template-web.js"></script>
|
||||
<script>
|
||||
var html;
|
||||
var state;
|
||||
var id = {{ id }};
|
||||
template.defaults.imports.dateFormat = function (date, format) {
|
||||
date = new Date(date);
|
||||
var map = {
|
||||
"M": date.getMonth() + 1, //月份
|
||||
"d": date.getDate(), //日
|
||||
"h": date.getHours(), //小时
|
||||
"m": date.getMinutes(), //分
|
||||
"s": date.getSeconds(), //秒
|
||||
"q": Math.floor((date.getMonth() + 3) / 3), //季度
|
||||
"S": date.getMilliseconds() //毫秒
|
||||
};
|
||||
format = format.replace(/([yMdhmsqS])+/g, function (all, t) {
|
||||
var v = map[t];
|
||||
if (v !== undefined) {
|
||||
if (all.length > 1) {
|
||||
v = '0' + v;
|
||||
v = v.substr(v.length - 2);
|
||||
}
|
||||
return v;
|
||||
}
|
||||
else if (t === 'y') {
|
||||
return (date.getFullYear() + '').substr(4 - all.length);
|
||||
}
|
||||
return all;
|
||||
});
|
||||
return format;
|
||||
};
|
||||
template.defaults.imports.gfilename = function(value){
|
||||
x = value.split('/').pop();
|
||||
return x;
|
||||
}
|
||||
$.ajax({
|
||||
type: "get",
|
||||
url: "api/offence?a=detail",
|
||||
data: { id: id },
|
||||
async: false, // ajax同步使用false
|
||||
success: function (data) {
|
||||
html = template('text', data);
|
||||
state = data.state;
|
||||
}
|
||||
});
|
||||
|
||||
$('#result').html(html);
|
||||
function exportwzword() {
|
||||
let url = 'api/offence?a=exportword&id='+missid
|
||||
$('<form method="post" action="' + url + '"></form>').appendTo('body').submit().remove();
|
||||
}
|
||||
</script>
|
|
@ -1,4 +1,4 @@
|
|||
from safesite.views import apitrainplan, inspectitem, trainplanchosehtml, trainplanhtml
|
||||
from safesite.views import apioffence, apitrainplan, inspectitem, trainplanchosehtml, trainplanhtml
|
||||
from django.urls import path,include
|
||||
from . import views, viewsdrf, viewsn
|
||||
from . import datashowview
|
||||
|
@ -145,6 +145,8 @@ urlpatterns = [
|
|||
|
||||
|
||||
path('html/personalp/', views.personalphtml),
|
||||
path('html/offence/', views.offence),
|
||||
path('html/offence/detail/<int:id>/', views.offencedetail),
|
||||
|
||||
path('getuser', views.getuser),
|
||||
path('addyh', views.addyh),
|
||||
|
@ -220,8 +222,7 @@ urlpatterns = [
|
|||
path('api/trainplan/', views.apitrainplan),
|
||||
path('api/troublefollowtask/', views.apitroublefollowtask),
|
||||
|
||||
|
||||
|
||||
path('api/offence/', views.apioffence),
|
||||
path('api/countsafe/', viewsn.apicountsafe), # 安全数据统计
|
||||
|
||||
|
||||
|
|
|
@ -160,6 +160,12 @@ def upfile(req):
|
|||
|
||||
# html页面
|
||||
|
||||
def offence(req):
|
||||
return render(req, 'offence.html')
|
||||
|
||||
def offencedetail(req, id):
|
||||
return render(req, 'offencedetail.html', {'id':id})
|
||||
|
||||
def personalphtml(req):
|
||||
user = User.objects.get(userid=req.session['userid'])
|
||||
return render(req, 'personalp.html', locals())
|
||||
|
@ -8883,3 +8889,45 @@ def checkprojects(req):
|
|||
|
||||
return HttpResponse(transjson(total, a), content_type="application/json")
|
||||
|
||||
|
||||
|
||||
@apicheck_login
|
||||
def apioffence(req):
|
||||
a = req.GET.get('a')
|
||||
userid = req.session['userid']
|
||||
companyid = getcompany(userid)
|
||||
if a == 'listall':
|
||||
objs = Offence.objects.filter(usecomp__partid=companyid)
|
||||
if req.GET.get('qssj', None):
|
||||
objs = objs.filter(happentime__gte=req.GET.get('qssj'))
|
||||
if req.GET.get('jssj', None):
|
||||
objs = objs.filter(happentime__lte=req.GET.get('jssj'))
|
||||
total = objs.count()
|
||||
startnum, endnum = fenye(req)
|
||||
objs = objs.order_by('-createtime')[startnum:endnum].values('id', 'type', 'dept', 'area', 'parter', 'reporter', 'reporter__name', 'createtime', 'area__name', 'happentime', 'description')
|
||||
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=userid)
|
||||
if data.get('area', None):
|
||||
data['area'] = Area.objects.get(id=data['area'])
|
||||
data['reporter'] = user
|
||||
data['usecomp'] = user.usecomp
|
||||
if 'imgs' in data and data['imgs']:
|
||||
data['imgs'] = '?'.join(data['imgs'])
|
||||
instance = Offence(**data)
|
||||
instance.save()
|
||||
return JsonResponse({"code":1})
|
||||
elif a == 'detail':
|
||||
id = req.GET.get('id')
|
||||
obj = Offence.objects.filter(id=id)
|
||||
res = obj.values('id', 'type', 'dept', 'area', 'parter', 'reporter', 'reporter__name', 'createtime', 'area__name', 'happentime', 'description', 'imgs', 'post', 'place')[0]
|
||||
if res['imgs']:
|
||||
res['imgs'] = res['imgs'].split('?')
|
||||
return HttpResponse(json.dumps(res, cls=MyEncoder), content_type="application/json")
|
||||
elif a == 'del':
|
||||
data = json.loads(req.body.decode('utf-8'))
|
||||
obj = Offence.objects.get(id=data['id'])
|
||||
obj.delete()
|
||||
return JsonResponse({"code":1})
|
||||
|
Loading…
Reference in New Issue