From 93f22564b6e001fdf6b2bae508cef0250277540a Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 7 May 2021 22:06:48 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=BF=9D=E7=AB=A0?= =?UTF-8?q?=E4=B8=BE=E6=8A=A5=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- safesite/models.py | 15 ++++++++++++++- safesite/static/safesite/easyui/themes/icon.css | 4 +++- .../safesite/easyui/themes/icons/offence.png | Bin 0 -> 435 bytes 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 safesite/static/safesite/easyui/themes/icons/offence.png diff --git a/safesite/models.py b/safesite/models.py index bc0ed093..7243c35e 100644 --- a/safesite/models.py +++ b/safesite/models.py @@ -378,7 +378,6 @@ class Miss(models.Model): # 未遂事件 reads = models.ManyToManyField( User, related_name='misstouser', through='Missto') - class Missto(models.Model): # 未遂事件阅读表 id = models.AutoField(primary_key=True) miss = models.ForeignKey(Miss, on_delete=models.CASCADE) @@ -386,6 +385,20 @@ class Missto(models.Model): # 未遂事件阅读表 read = models.IntegerField(default=0) submittime = models.DateTimeField(default=timezone.now) +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) + parter = models.CharField(verbose_name="当事人", default="", max_length=200) + description = models.TextField("描述", null=True, blank=True) + imgs = models.TextField("图片地址", null=True, blank=True) + reporter = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="举报人") + + class Group(models.Model): # 用户组,岗位 type_choices = ( diff --git a/safesite/static/safesite/easyui/themes/icon.css b/safesite/static/safesite/easyui/themes/icon.css index 2d31ce8a..9be80535 100644 --- a/safesite/static/safesite/easyui/themes/icon.css +++ b/safesite/static/safesite/easyui/themes/icon.css @@ -203,7 +203,9 @@ background: url('icons/discharge.png') no-repeat center center; } - +.icon-offence { + background: url('icons/offence.png') no-repeat center center; +} diff --git a/safesite/static/safesite/easyui/themes/icons/offence.png b/safesite/static/safesite/easyui/themes/icons/offence.png new file mode 100644 index 0000000000000000000000000000000000000000..6bdaae6e725ea2557107438a5cc176a87a108160 GIT binary patch literal 435 zcmV;k0ZjghP)qMLjuj->Ebyu(Wwsil?ef(;yWoxrdvzbhOz6FjVrKg_a8X z^v-Aq{K$|~2)~wc$Ju&gOB?Y$ry*#=#Y&iUVT>roUh&N-{FZC!%smsGe7Mft_ge!X z7T=x)$#BVY_Wx>|oiNv^@>zXb8vyn|W}FoTZ4#h1Bj0C@M Date: Sat, 8 May 2021 17:09:32 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0offence=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements.txt | Bin 2130 -> 2130 bytes safesite/templates/offence.html | 119 ++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 safesite/templates/offence.html diff --git a/requirements.txt b/requirements.txt index 15b0fea1c3d6710e9c904d6e259cae3d13905648..0d352b4f17d4cf333758f6f527d709f88abe8301 100644 GIT binary patch delta 18 Zcmca4a7kc;06VJ*gC2w7W>I!qMgTGL1Tg>r delta 18 Zcmca4a7kc;06VK8gC2wNW>I!qMgTG31TX*q diff --git a/safesite/templates/offence.html b/safesite/templates/offence.html new file mode 100644 index 00000000..4df4d5d6 --- /dev/null +++ b/safesite/templates/offence.html @@ -0,0 +1,119 @@ +
+ +
+ +
+
+ + - + 查询 + 重置 +
+ +
+
+ + + 查看详情 + +
+
+ \ No newline at end of file From 74be0b6f03d23d6db5d91e53b874520462b4c548 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Sun, 9 May 2021 21:14:04 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=BF=9D=E7=AB=A0?= =?UTF-8?q?=E4=B8=BE=E6=8A=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- safesite/migrations/0378_offence.py | 31 ++++++ .../migrations/0379_auto_20210509_1916.py | 31 ++++++ safesite/models.py | 9 +- safesite/templates/offence.html | 73 ++++++------- safesite/templates/offencedetail.html | 100 ++++++++++++++++++ safesite/urls.py | 7 +- safesite/views.py | 48 +++++++++ 7 files changed, 251 insertions(+), 48 deletions(-) create mode 100644 safesite/migrations/0378_offence.py create mode 100644 safesite/migrations/0379_auto_20210509_1916.py create mode 100644 safesite/templates/offencedetail.html diff --git a/safesite/migrations/0378_offence.py b/safesite/migrations/0378_offence.py new file mode 100644 index 00000000..2bb77be7 --- /dev/null +++ b/safesite/migrations/0378_offence.py @@ -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='所属公司')), + ], + ), + ] diff --git a/safesite/migrations/0379_auto_20210509_1916.py b/safesite/migrations/0379_auto_20210509_1916.py new file mode 100644 index 00000000..55196670 --- /dev/null +++ b/safesite/migrations/0379_auto_20210509_1916.py @@ -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='区域'), + ), + ] diff --git a/safesite/models.py b/safesite/models.py index 7243c35e..698b156c 100644 --- a/safesite/models.py +++ b/safesite/models.py @@ -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): # 用户组,岗位 diff --git a/safesite/templates/offence.html b/safesite/templates/offence.html index 4df4d5d6..d70d219d 100644 --- a/safesite/templates/offence.html +++ b/safesite/templates/offence.html @@ -21,24 +21,25 @@ {% if request|has_permission:'b_inspect_del' %} 删除 {% endif %} --> + 删除 查看详情 + + \ No newline at end of file diff --git a/safesite/urls.py b/safesite/urls.py index 89fa2ec2..fbc85eca 100644 --- a/safesite/urls.py +++ b/safesite/urls.py @@ -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//', 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), # 安全数据统计 diff --git a/safesite/views.py b/safesite/views.py index 16667dc6..bace21c4 100644 --- a/safesite/views.py +++ b/safesite/views.py @@ -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}) + \ No newline at end of file