Merge branch 'master' of 10.7.100.160:/job/safesite

This commit is contained in:
wcharles 2019-10-15 17:38:04 +08:00
commit 05e78a2a98
50 changed files with 1361 additions and 239 deletions

View File

@ -0,0 +1,31 @@
# Generated by Django 2.1.5 on 2019-09-19 14:09
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Groups',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=128, unique=True)),
('password', models.CharField(max_length=256)),
('groupname', models.CharField(max_length=128, unique=True)),
('type', models.CharField(choices=[('real', '集团'), ('fictitious', '组合')], default='集团', max_length=32)),
('createtime', models.DateTimeField(auto_now_add=True)),
('members', models.ManyToManyField(to='safesite.Partment')),
],
options={
'ordering': ['-createtime'],
'verbose_name_plural': '集团',
'verbose_name': '集团',
},
),
]

View File

@ -17,7 +17,7 @@ def makeqr(data):
filepath = os.path.join(upload_folder, data.split('=')[1]+'.png').replace('\\','/') filepath = os.path.join(upload_folder, data.split('=')[1]+'.png').replace('\\','/')
img.save(filepath) img.save(filepath)
return filepath return filepath
def makeqr2(data): def makeqr_train(data):
upload_folder = 'media/qr_train' upload_folder = 'media/qr_train'
if not os.path.exists(upload_folder): if not os.path.exists(upload_folder):
os.mkdir(upload_folder) os.mkdir(upload_folder)
@ -26,7 +26,7 @@ def makeqr2(data):
img.save(filepath) img.save(filepath)
return filepath return filepath
def makeqr3(data): def makeqr_riskact(data):
upload_folder = 'media/qr_riskact' upload_folder = 'media/qr_riskact'
if not os.path.exists(upload_folder): if not os.path.exists(upload_folder):
os.mkdir(upload_folder) os.mkdir(upload_folder)
@ -35,7 +35,7 @@ def makeqr3(data):
img.save(filepath) img.save(filepath)
return filepath return filepath
def makeqr4(data): def makeqr_examtest(data):
upload_folder = 'media/qr_examtest' upload_folder = 'media/qr_examtest'
if not os.path.exists(upload_folder): if not os.path.exists(upload_folder):
os.mkdir(upload_folder) os.mkdir(upload_folder)
@ -44,6 +44,15 @@ def makeqr4(data):
img.save(filepath) img.save(filepath)
return filepath return filepath
def makeqr_area(data):
upload_folder = 'media/qr_area'
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 drequipments(companyid,path): def drequipments(companyid,path):
wb = load_workbook(path) wb = load_workbook(path)
sheet = wb.worksheets[0] sheet = wb.worksheets[0]
@ -274,7 +283,7 @@ def drrisks(companyid,path):
if users.exists(): if users.exists():
obj.zrr = users[0] obj.zrr = users[0]
obj.save() obj.save()
obj.qrcode = makeqr3('https://safeyun.ctcshe.com/miniprogram/riskact?id='+str(obj.id)) obj.qrcode = makeqr_riskact('https://safeyun.ctcshe.com/miniprogram/riskact?id='+str(obj.id))
obj.save() obj.save()
a = Risk() a = Risk()
a.riskact=obj a.riskact=obj

View File

@ -119,13 +119,17 @@ def api(req):
elif a == 'del': elif a == 'del':
id =req.GET.get('id') id =req.GET.get('id')
userid = req.session['userid'] userid = req.session['userid']
companyid = getcompany(userid)#公司ID
a = Edulesson.objects.get(id=id) a = Edulesson.objects.get(id=id)
if User.objects.get(userid = userid).issuper == 1: if a.usecomp==Partment.objects.get(partid=companyid):
a.deletemark=0 a.deletemark=0
a.save() a.save()
return JsonResponse({"code":1}) return JsonResponse({"code":1})
else: else:
return JsonResponse({"code":0}) return JsonResponse({"code":0})
#点击阅读 #点击阅读
elif a=='readnumber': elif a=='readnumber':
id =req.GET.get('id') id =req.GET.get('id')

View File

@ -19,6 +19,5 @@ class CompanyInfoForm(forms.Form):
legalperson_phone = forms.CharField(max_length=24, label='法人电话', widget=forms.TextInput(attrs={'size': '50'})) legalperson_phone = forms.CharField(max_length=24, label='法人电话', widget=forms.TextInput(attrs={'size': '50'}))
liaison = forms.CharField(max_length=24, label='联系人', widget=forms.TextInput(attrs={'size': '50'})) liaison = forms.CharField(max_length=24, label='联系人', widget=forms.TextInput(attrs={'size': '50'}))
liaison_phone = forms.CharField(max_length=24, label='联系人电话', widget=forms.TextInput(attrs={'size': '50'})) liaison_phone = forms.CharField(max_length=24, label='联系人电话', widget=forms.TextInput(attrs={'size': '50'}))
liaison_fax = forms.CharField(max_length=13, label='联系人传真', widget=forms.TextInput(attrs={'size': '50'}))
introduce = forms.CharField(label='公司概况', widget=forms.Textarea) introduce = forms.CharField(label='公司概况', widget=forms.Textarea)

0
safesite/mgt/__init__.py Normal file
View File

11
safesite/mgt/urls.py Normal file
View File

@ -0,0 +1,11 @@
from django.urls import path
from . import views
urlpatterns = [
path('', views.index),
path('add',views.add),
path('api',views.api),
path('getdickey', views.getdickey),
path('upload', views.upload),
]

95
safesite/mgt/views.py Normal file
View File

@ -0,0 +1,95 @@
from django.shortcuts import render,redirect,render_to_response
from django.http import HttpResponse, HttpResponseRedirect,JsonResponse
from ..models import User,Trouble,Dickey,Partment,Dicclass,Train,Drill,TroubleAccess,Group,Yjyc,Trainuser,Drilluser,Yjsetup,Menu,Observe,Observeto,Unsafes,Miss,Socertificate,Userprofile,Suggest,Notice,Noticeto,Operation,Operzyry,Fxcs,Operationspjd,Operspxq,Question,ExamPaper,ExamTest,ExamPaperDetail,ExamTestDetail,Questioncat,Safecert,Map,Area,Missto,Suggestflow,Equipment,Inspect,Risk,RiskAct,Edulesson,EdulessonWatch,FileManage,FileReader,Regulations,Mgtsystem
from django.template import RequestContext
from django.views.decorators.csrf import csrf_exempt
from django.core import serializers
import json
from uuid import UUID
import os
import time
from datetime import datetime,date,timedelta
from django.db.models import F,Count,Sum
import requests
from ..tasks import send_wechatmsgs,send_wechatmsg,yjjs,gettime,yjjs_px,yjjs_yl,updateTzzs,updateAqzs
from ..export import exportdoc,exportxlsx,exportyjdoc,exportsimplexlsx,exportdoc2
from ..daoru import drusers,drequipments,drrisks
from django.forms.models import model_to_dict
from ..safespider import getTzzs,getAqzs
#from duibiao import calsim
from django.db.models import Q
from django.core.serializers.json import DjangoJSONEncoder
from io import StringIO
import operator
import jwt
from ..views import getcompany,fenye,transjson
#法律法规
def index(req):
return render(req,'mgtindex.html')
def add(req):
return render(req,'mgtadd.html')
#上传文件,返回地址和名称
def upload(req):
username = User.objects.get(userid=req.session['userid']).username
file_name = time.strftime('%Y%m%d%H%M%S')+ '_' + req.FILES['mf'].name
user_upload_folder = os.path.join('media/mgt', username)
if not os.path.exists(user_upload_folder):
os.mkdir(user_upload_folder)
filepath = os.path.join(user_upload_folder, file_name)
filepath = filepath.replace('\\','/')
with open( filepath, 'wb') as f:
f.write(req.FILES['mf'].read())
return JsonResponse({"code":1,"filename":file_name,"filepath":filepath})
#转换为combobox所用string
def transstr(obj,str1,str2):
keylist = []
for i in list(obj):
keydictstr = '{"value":"'+ str(i[str1])+'","text":"'+i[str2]+'"}'
keylist.append(keydictstr)
keystr = '['+','.join(keylist)+']'
return keystr
def getdickey(req):
userid = req.session['userid']
companyid = getcompany(userid)
dicclass=req.GET.get('dicclass')
a = Dickey.objects.filter(dicparent=dicclass,deletemark=1)
a = (a.filter(usecomps__contains=',1,')|a.filter(usecomps__contains=','+companyid+',')).exclude(nousecomps__contains=','+companyid+',')
a = a.values('dickeyid','dicparent__dicname','dickeyname','dicparent__dicid','detail').order_by('dickeyid')
return HttpResponse(transstr(a,'dickeyid','dickeyname'),content_type="application/json")
def api(req):
a=req.GET.get('a')
userid = req.session['userid']
companyid = getcompany(userid)
if a == 'add':
obj = Mgtsystem()
data = json.loads(req.body.decode('utf-8'))
obj.mgtname = data['mgtname']
obj.mgtpath = data['filepath']
obj.type= Dickey.objects.get(dickeyid=data['type'])
obj.publisdate=data['publisdate']
obj.usecomp=Partment.objects.get(partid=companyid)
obj.createuser=User.objects.get(userid=userid)
obj.save()
return JsonResponse({"code":1})
elif a=='listall':
startnum,endnum=fenye(req)
a = Mgtsystem.objects.filter(usecomp__partid__in= [1,Partment.objects.get(partid=companyid).partid] ,deletemark=1).order_by('id')
total = a.count()
startnum,endnum=fenye(req)
a = a[startnum:endnum].values('id','mgtname','mgtpath','type__dickeyname','publisdate','createuser__name')
return HttpResponse(transjson(total,a),content_type="application/json")
elif a == 'del':
id =req.GET.get('id')
userid = req.session['userid']
a = Mgtsystem.objects.get(id=id)
if a.usecomp==Partment.objects.get(partid=companyid):
a.deletemark=0
a.save()
return JsonResponse({"code":1})
else:
return JsonResponse({"code":0})

View File

@ -0,0 +1,19 @@
# Generated by Django 2.1.5 on 2019-09-17 23:14
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('safesite', '0265_auto_20190917_1716'),
]
operations = [
migrations.AddField(
model_name='area',
name='qrcode',
field=models.CharField(blank=True, max_length=200, null=True),
),
]

View File

@ -0,0 +1,14 @@
# Generated by Django 2.1.5 on 2019-09-19 14:23
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('safesite', '0267_auto_20190917_1543'),
('safesite', '0265_auto_20190917_1716'),
]
operations = [
]

View File

@ -0,0 +1,18 @@
# Generated by Django 2.1.5 on 2019-09-19 14:23
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('safesite', '0268_merge_20190919_1423'),
]
operations = [
migrations.AddField(
model_name='observe',
name='lookers',
field=models.ManyToManyField(related_name='gcrs', to='safesite.User'),
),
]

View File

@ -0,0 +1,17 @@
# Generated by Django 2.1.5 on 2019-09-20 12:00
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('safesite', '0269_auto_20190919_1423'),
]
operations = [
migrations.RemoveField(
model_name='companyinfo',
name='liaison_fax',
),
]

View File

@ -0,0 +1,29 @@
# Generated by Django 2.1.5 on 2019-09-23 10:17
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('safesite', '0269_auto_20190919_1423'),
]
operations = [
migrations.CreateModel(
name='Mgtsystem',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('mgtname', models.CharField(max_length=50)),
('mgtpath', models.CharField(blank=True, max_length=200, null=True)),
('publisdate', models.DateTimeField(default=django.utils.timezone.now)),
('deletemark', models.IntegerField(default=1)),
('createuser', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.User')),
('type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='safesite.Dickey')),
('usecomp', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='safesite.Partment')),
],
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 2.1.5 on 2019-09-23 10:18
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('safesite', '0270_auto_20190923_1017'),
]
operations = [
migrations.AlterField(
model_name='mgtsystem',
name='mgtname',
field=models.CharField(max_length=64),
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 2.1.5 on 2019-09-25 11:13
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('safesite', '0270_auto_20190920_1200'),
]
operations = [
migrations.AlterField(
model_name='trouble',
name='shresult',
field=models.IntegerField(blank=True, choices=[(1, '通过'), (2, '审核未通过'), (3, '复查未通过'), (4, '已修改'), (5, '评估未通过'), (6, '未采纳')], null=True),
),
]

View File

@ -0,0 +1,23 @@
# Generated by Django 2.1.5 on 2019-09-23 10:26
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('safesite', '0271_auto_20190923_1018'),
]
operations = [
migrations.AlterField(
model_name='mgtsystem',
name='id',
field=models.AutoField(primary_key=True, serialize=False),
),
migrations.AlterField(
model_name='mgtsystem',
name='mgtname',
field=models.CharField(max_length=50),
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 2.1.5 on 2019-09-25 16:57
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('safesite', '0271_auto_20190925_1113'),
]
operations = [
migrations.AddField(
model_name='suggest',
name='accept',
field=models.IntegerField(default=1),
),
]

View File

@ -0,0 +1,29 @@
# Generated by Django 2.1.5 on 2019-10-08 16:04
import django.contrib.postgres.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('safesite', '0272_auto_20190925_1657'),
]
operations = [
# migrations.AddField(
# model_name='area',
# name='qrcode',
# field=models.CharField(blank=True, max_length=200, null=True),
# ),
migrations.AddField(
model_name='operation',
name='todousers',
field=django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(), blank=True, null=True, size=None),
),
migrations.AddField(
model_name='operationspjd',
name='sprs',
field=django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(), blank=True, null=True, size=None),
),
]

View File

@ -1,7 +1,7 @@
from django.db import models from django.db import models
import uuid import uuid
import django.utils.timezone as timezone import django.utils.timezone as timezone
from django.contrib.postgres.fields import JSONField from django.contrib.postgres.fields import JSONField,ArrayField
import jwt import jwt
import datetime import datetime
# Create your models here. # Create your models here.
@ -120,6 +120,7 @@ class Trouble(models.Model):#隐患排查
(3, '复查未通过'), (3, '复查未通过'),
(4, '已修改'), (4, '已修改'),
(5,'评估未通过'), (5,'评估未通过'),
(6,'未采纳'),
) )
deletemark=models.IntegerField(default='1') deletemark=models.IntegerField(default='1')
troubleid = models.AutoField(primary_key=True) troubleid = models.AutoField(primary_key=True)
@ -212,7 +213,7 @@ class Observe(models.Model):#行为观察
lookplace = models.CharField(max_length=200) lookplace = models.CharField(max_length=200)
looktime = models.DateTimeField(default = timezone.now) looktime = models.DateTimeField(default = timezone.now)
looktime2 = models.DateTimeField(null=True,blank=True) looktime2 = models.DateTimeField(null=True,blank=True)
#accompanyman = models.ManyToManyField(User,related_name='gcptr',null=True,blank=True)#陪同人员 lookers = models.ManyToManyField(User,related_name='gcrs')#陪同人员
lookpart = models.ForeignKey(Partment,related_name='gcbm',on_delete=models.CASCADE) #观察部门 lookpart = models.ForeignKey(Partment,related_name='gcbm',on_delete=models.CASCADE) #观察部门
looker = models.ForeignKey(User,related_name='gcr',default='1', on_delete=models.CASCADE)#观察人 looker = models.ForeignKey(User,related_name='gcr',default='1', on_delete=models.CASCADE)#观察人
lookeder = models.CharField(max_length=100,null=True,blank=True)#被观察对象 lookeder = models.CharField(max_length=100,null=True,blank=True)#被观察对象
@ -409,6 +410,7 @@ class Suggest(models.Model):#合理化建议
yjwcsj = models.DateTimeField(null=True,blank=True) #预计完成时间 yjwcsj = models.DateTimeField(null=True,blank=True) #预计完成时间
sjwcsj = models.DateTimeField(null=True,blank=True) #实际完成时间 sjwcsj = models.DateTimeField(null=True,blank=True) #实际完成时间
shyj = models.CharField(max_length=1000,null=True,blank=True) #审核意见 shyj = models.CharField(max_length=1000,null=True,blank=True) #审核意见
accept = models.IntegerField(default=1)
class Suggestflow(models.Model):#建议流程 class Suggestflow(models.Model):#建议流程
id = models.AutoField(primary_key=True) id = models.AutoField(primary_key=True)
@ -464,6 +466,7 @@ class Operation(models.Model):#作业表
zyzt = JSONField() zyzt = JSONField()
fxcs = models.CharField(max_length=200) fxcs = models.CharField(max_length=200)
todouser = models.ForeignKey(User,related_name='zyclr',on_delete=models.CASCADE,null=True,blank=True) todouser = models.ForeignKey(User,related_name='zyclr',on_delete=models.CASCADE,null=True,blank=True)
todousers = ArrayField(models.IntegerField(), blank=True,null=True)
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True,default=1) usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True,default=1)
class Fxcs(models.Model):#作业分析措施 class Fxcs(models.Model):#作业分析措施
@ -506,12 +509,13 @@ class Operzyry(models.Model):#作业确认人
modifytime = models.DateTimeField(auto_now = True) modifytime = models.DateTimeField(auto_now = True)
submittime = models.DateTimeField(default = timezone.now) submittime = models.DateTimeField(default = timezone.now)
class Operationspjd(models.Model):#作业审批节点 class Operationspjd(models.Model):#作业审批节点配置
id = models.AutoField(primary_key=True) id = models.AutoField(primary_key=True)
zylx = models.ForeignKey(Dickey, on_delete=models.CASCADE,null=True,blank=True) zylx = models.ForeignKey(Dickey, on_delete=models.CASCADE,null=True,blank=True)
jdmc = models.CharField(max_length=100) jdmc = models.CharField(max_length=100)
spbm = models.ForeignKey(Partment,related_name='spbm',on_delete=models.CASCADE,null=True,blank=True)#审批部门 spbm = models.ForeignKey(Partment,related_name='spbm',on_delete=models.CASCADE,null=True,blank=True)#审批部门
spr = models.ForeignKey(User,related_name='spr',on_delete=models.CASCADE,null=True,blank=True)#审批部门 spr = models.ForeignKey(User,related_name='spr',on_delete=models.CASCADE,null=True,blank=True)#审批部门
sprs = ArrayField(models.IntegerField(), blank=True,null=True)
submittime = models.DateTimeField(u'创建时间',default = timezone.now) submittime = models.DateTimeField(u'创建时间',default = timezone.now)
modifytime = models.DateTimeField(auto_now = True) modifytime = models.DateTimeField(auto_now = True)
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True) usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)
@ -830,7 +834,6 @@ class CompanyInfo(models.Model):
legalperson_phone = models.CharField(max_length=24, null=True, blank=True, verbose_name='法人电话') legalperson_phone = models.CharField(max_length=24, null=True, blank=True, verbose_name='法人电话')
liaison = models.CharField(max_length=24, verbose_name='联系人') liaison = models.CharField(max_length=24, verbose_name='联系人')
liaison_phone = models.CharField(max_length=24, verbose_name='联系人电话') liaison_phone = models.CharField(max_length=24, verbose_name='联系人电话')
liaison_fax = models.CharField(max_length=10, null=True, blank=True, verbose_name='联系人传真')
introduce = models.TextField( null=True, blank=True, verbose_name='公司概况') introduce = models.TextField( null=True, blank=True, verbose_name='公司概况')
createtime = models.DateTimeField(auto_now_add=True) createtime = models.DateTimeField(auto_now_add=True)
modifytime = models.DateTimeField(auto_now=True) modifytime = models.DateTimeField(auto_now=True)
@ -868,3 +871,14 @@ class FileManage(models.Model):
usecomp= models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True) usecomp= models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)
downnum = models.IntegerField(default=0) downnum = models.IntegerField(default=0)
deletemark = models.IntegerField(default=1) deletemark = models.IntegerField(default=1)
#管理制度表
class Mgtsystem(models.Model):
id = models.AutoField(primary_key=True)
mgtname = models.CharField(max_length=50)
type = models.ForeignKey(Dickey,on_delete=models.CASCADE,null=True,blank=True)
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)
mgtpath = models.CharField(max_length=200,null=True,blank=True)
publisdate = models.DateTimeField(default = timezone.now)
createuser = models.ForeignKey(User,on_delete=models.CASCADE)
deletemark = models.IntegerField(default=1)

View File

@ -75,7 +75,7 @@ def lawstype(req):
list_items = (Regulations.objects.filter(usecomp__partid=companyid,deletemark=1)).annotate(parentId=F('parent__id'),name=F('typename')).values('id','parentId','name') list_items = (Regulations.objects.filter(usecomp__partid=companyid,deletemark=1)).annotate(parentId=F('parent__id'),name=F('typename')).values('id','parentId','name')
return HttpResponse(json.dumps(list(list_items)),content_type="application/json") return HttpResponse(json.dumps(list(list_items)),content_type="application/json")
elif a == 'tree': elif a == 'tree':
list_items = (Regulations.objects.filter(usecomp__partid=1,deletemark=1)|Regulations.objects.filter(usecomp__partid=companyid,deletemark=1)).annotate(parentId=F('parent__id')).values('id','parentId','typename') list_items = (Regulations.objects.filter(usecomp__partid=1,deletemark=1)|Regulations.objects.filter(usecomp__partid=companyid,deletemark=1)).annotate(parentId=F('parent__id'),name=F('typename')).values('id','parentId','name')
return HttpResponse(json.dumps(list(list_items)),content_type="application/json") return HttpResponse(json.dumps(list(list_items)),content_type="application/json")
elif a == 'add': elif a == 'add':
data = json.loads(req.body.decode('utf-8')) data = json.loads(req.body.decode('utf-8'))
@ -129,7 +129,7 @@ def lawstype(req):
id = req.GET.get('id') id = req.GET.get('id')
user = User.objects.get(userid=userid) user = User.objects.get(userid=userid)
a = Regulations.objects.get(id=id) a = Regulations.objects.get(id=id)
if user.issuper==1 or a.usecomp.partid == companyid: if a.usecomp==Partment.objects.get(partid=companyid):
Regulations.objects.filter(id = id).update(deletemark=0) Regulations.objects.filter(id = id).update(deletemark=0)
return JsonResponse({"code":1}) return JsonResponse({"code":1})
else: else:
@ -139,7 +139,7 @@ def lawstype(req):
elif a == 'canedit': elif a == 'canedit':
id = req.GET.get('id') id = req.GET.get('id')
a = Regulations.objects.get(id=id) a = Regulations.objects.get(id=id)
if a.usecomp == companyid or int(companyid)==1: if a.usecomp==Partment.objects.get(partid=companyid):
return JsonResponse({'code':1}) return JsonResponse({'code':1})
else: else:
return JsonResponse({"code":0}) return JsonResponse({"code":0})
@ -169,7 +169,7 @@ def lawstype(req):
id =req.GET.get('id') id =req.GET.get('id')
userid = req.session['userid'] userid = req.session['userid']
a = FileManage.objects.get(id=id) a = FileManage.objects.get(id=id)
if User.objects.get(userid = userid).issuper == 1: if a.usecomp==Partment.objects.get(partid=companyid):
a.deletemark=0 a.deletemark=0
a.save() a.save()
return JsonResponse({"code":1}) return JsonResponse({"code":1})

View File

@ -1,5 +1,5 @@
.panel { .panel {
overflow: hidden; /*overflow: hidden;*/
text-align: left; text-align: left;
margin: 0; margin: 0;
border: 0; border: 0;
@ -37,11 +37,7 @@
border-bottom-width: 0; border-bottom-width: 0;
} }
.panel-with-icon { .panel-with-icon {
<<<<<<< HEAD padding-left: 20px;
padding-left: 20px;
=======
padding-left: 10px;
>>>>>>> 0ed848ff177ad9c427f58c714cb22f8012e2c913
} }
.panel-icon, .panel-icon,
.panel-tool { .panel-tool {
@ -3411,7 +3407,7 @@
height: 40px; height: 40px;
line-height: 30px; line-height: 30px;
color: #313030; color: #313030;
margin-left: 25px; margin-left: 10px;
} }
.sidemenu .accordion-header:hover { .sidemenu .accordion-header:hover {
background: #0066cc; background: #0066cc;

View File

@ -148,6 +148,9 @@
.icon-edu{ .icon-edu{
background:url('icons/edu.png') no-repeat center center; background:url('icons/edu.png') no-repeat center center;
} }
.icon-gmt {
background: url('icons/gmt.png') no-repeat center center;
}
.icon-regulationstype { .icon-regulationstype {
background: url('icons/regulationstype.png') no-repeat center center; background: url('icons/regulationstype.png') no-repeat center center;
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 859 B

File diff suppressed because one or more lines are too long

View File

@ -32,6 +32,17 @@ function canvasDataURL(path, obj, callback) {
scale = w / h; scale = w / h;
w = obj.width || w; w = obj.width || w;
h = obj.height || (w / scale); h = obj.height || (w / scale);
if(w <= h ){
if(w>640){
w = 640
h = w/scale
}
}else{
if(h>640){
h=640
w = h*scale
}
}
var quality = 0.7; // 默认图片质量为0.7 var quality = 0.7; // 默认图片质量为0.7
//生成canvas //生成canvas
var canvas = document.createElement('canvas'); var canvas = document.createElement('canvas');
@ -45,9 +56,9 @@ function canvasDataURL(path, obj, callback) {
canvas.setAttributeNode(anh); canvas.setAttributeNode(anh);
ctx.drawImage(that, 0, 0, w, h); ctx.drawImage(that, 0, 0, w, h);
// 图像质量 // 图像质量
if (obj.quality && obj.quality <= 1 && obj.quality > 0) { // if (obj.quality && obj.quality <= 1 && obj.quality > 0) {
quality = obj.quality; // quality = obj.quality;
} // }
// quality值越小所绘制出的图像越模糊 // quality值越小所绘制出的图像越模糊
var base64 = canvas.toDataURL('image/jpeg', quality); var base64 = canvas.toDataURL('image/jpeg', quality);
// 回调函数返回base64的值 // 回调函数返回base64的值
@ -62,7 +73,6 @@ function convertBase64UrlToBlob(urlData) {
} }
return new Blob([u8arr], { type: mime }); return new Blob([u8arr], { type: mime });
} }
//取消上传 //取消上传
function cancleUploadFile() { function cancleUploadFile() {

View File

@ -301,7 +301,16 @@
$("#yhms").textbox('disable'); $("#yhms").textbox('disable');
$('#fcyjdiv,#file2,#zgxq,#shyjdiv,#csyj,#reject').hide(); $('#jxpg').show(); $('#fcyjdiv,#file2,#zgxq,#shyjdiv,#csyj,#reject').hide(); $('#jxpg').show();
$("#yhpg").combobox({ url: 'getdickey?dicclass=19&a=combobox', }); $("#yhpg").combobox({ url: 'getdickey?dicclass=19&a=combobox', });
$("#zgbm").combotree({ url: 'parthandle?a=tree3', onSelect: function (node) { $('#zgr').combobox({ url: 'getuser?partid=' + node.id + '&a=combobox', }); } }); $("#zgbm").combotree({ url: 'parthandle?a=tree3', onSelect: function (node) {
$('#zgr').combobox({
url: 'getuser?partid=' + node.id + '&a=combobox',
editable: false,
filter: function (q, row) {
var opts = $(this).combobox('options');
return row[opts.textField].indexOf(q) >= 0;//这里改成>=即可在任意地方匹配
},
});
} });
// if (data.yhpg__dickeyname != '' & data.yhpg__dickeyname != null) { // if (data.yhpg__dickeyname != '' & data.yhpg__dickeyname != null) {
// $("#yhpg").combobox('setValue', data.yhpg__dickeyid).combobox('readonly'); // $("#yhpg").combobox('setValue', data.yhpg__dickeyid).combobox('readonly');
// $("#yhlx").combobox({ url: 'getdicclass?dicid=15' }).combobox('setValue', data.yhlx__dicid).combobox('readonly'); // $("#yhlx").combobox({ url: 'getdicclass?dicid=15' }).combobox('setValue', data.yhlx__dicid).combobox('readonly');

View File

@ -6,6 +6,12 @@
</div> </div>
<div data-options="region:'center'" style="height:100%;padding:15px 15px;"> <div data-options="region:'center'" style="height:100%;padding:15px 15px;">
<form id="gcff" method="post" name="gcff" enctype="multipart/form-data"> <form id="gcff" method="post" name="gcff" enctype="multipart/form-data">
<div style="margin-bottom:5px">
<input class="easyui-textbox" id="lookersname" style="width:480px;height:60px" editable="false"
data-options="label:'观察人',multiline:true,prompt:'请选择'" required=true>
<input type="hidden" id="lookers" name="lookers" />
<a id="chooserys" class='easyui-linkbutton' onclick="choseusers('lookers')" style="width:auto">选择</a>
</div>
<div style="margin-bottom:5px"> <div style="margin-bottom:5px">
<input id="lookeder" name="lookeder" class="easyui-textbox" style="width:480px" <input id="lookeder" name="lookeder" class="easyui-textbox" style="width:480px"
data-options="label:'被观察人员'" required=true> data-options="label:'被观察人员'" required=true>
@ -68,6 +74,12 @@
</div> </div>
</div> </div>
<script> <script>
function aaa(x) {
if (x == "lookers") {
$('#lookers').attr('value', top.$('#in').val());
$('#lookersname').textbox('setValue', top.$('#in').attr('show'));
}
}
function getunsafe() { function getunsafe() {
obj = document.getElementsByName("unsafe"); obj = document.getElementsByName("unsafe");
check_val = []; check_val = [];

View File

@ -219,9 +219,7 @@
var form = new FormData(); var form = new FormData();
if (fileObj.size / 1024 > 500) { //大于500k进行压缩上传 if (fileObj.size / 1024 > 500) { //大于500k进行压缩上传
$("#file").after('<span id="tip" style="color:blue">图片大于500k,正在压缩...</span>'); $("#file").after('<span id="tip" style="color:blue">图片大于500k,正在压缩...</span>');
photoCompress(fileObj, { photoCompress(fileObj, {}, function (base64Codes) {
quality: 0.2
}, function (base64Codes) {
//console.log("压缩后:" + base.length / 1024 + " " + base); //console.log("压缩后:" + base.length / 1024 + " " + base);
var bl = convertBase64UrlToBlob(base64Codes); var bl = convertBase64UrlToBlob(base64Codes);
form.append("upfile", bl, fileObj.name); // 文件对象 form.append("upfile", bl, fileObj.name); // 文件对象
@ -310,9 +308,7 @@
var form = new FormData(); var form = new FormData();
if (fileObj.size / 1024 > 500) { //大于500k进行压缩上传 if (fileObj.size / 1024 > 500) { //大于500k进行压缩上传
$("#file2").after('<span id="tip" style="color:blue">图片大于500k,正在压缩...</span>'); $("#file2").after('<span id="tip" style="color:blue">图片大于500k,正在压缩...</span>');
photoCompress(fileObj, { photoCompress(fileObj, {}, function (base64Codes) {//quality: 0.2
quality: 0.2
}, function (base64Codes) {
//console.log("压缩后:" + base.length / 1024 + " " + base); //console.log("压缩后:" + base.length / 1024 + " " + base);
var bl = convertBase64UrlToBlob(base64Codes); var bl = convertBase64UrlToBlob(base64Codes);
form.append("upfile", bl, fileObj.name); // 文件对象 form.append("upfile", bl, fileObj.name); // 文件对象

View File

@ -16,6 +16,8 @@
</input> </input>
</div> </div>
</form> </form>
<div class="labeldiv">区域二维码</div>
<img id="qrcode" height=240px width=240px>
</div> </div>
<script> <script>
var id = {{id}} var id = {{id}}
@ -23,6 +25,7 @@
console.log(res) console.log(res)
$('#qyname').textbox('setValue',res.name); $('#qyname').textbox('setValue',res.name);
$('#qyorder').textbox('setValue',res.order) $('#qyorder').textbox('setValue',res.order)
$('#qrcode').attr('src',res.qrcode)
}) })
function submitform() { function submitform() {
var data = $('#qyff').serializeJSON() var data = $('#qyff').serializeJSON()

View File

@ -1,4 +1,3 @@
<div class="labeldiv" style="margin:10px">公司信息</div>
<form method="post" action="/companyinfo/" id="companyform"> <form method="post" action="/companyinfo/" id="companyform">
{% csrf_token %} {% csrf_token %}
{{ companyinfo.non_field_errors }} {{ companyinfo.non_field_errors }}

View File

@ -120,7 +120,7 @@
<tr> <tr>
<td>所属类别:</td> <td>所属类别:</td>
<td> <td>
<input id="cate" class="easyui-combotree" name="cate" style="width:480px" data-options="url:'api/questioncat?a=tree2',loadFilter: function (rows) { <input id="cate" class="easyui-combotree" name="cate" style="width:480px" data-options="url:'api/questioncat?a=tree',loadFilter: function (rows) {
return convert(rows); return convert(rows);
},"> },">
</td> </td>
@ -135,7 +135,7 @@
<a class="list" href="javascript:;"> <a class="list" href="javascript:;">
<input id="file" type="file" name="myfile" onchange="UpladFile();" /><span>选择视频</span> <input id="file" type="file" name="myfile" onchange="UpladFile();" /><span>选择视频</span>
</a> </a>
<button class="btn" type="button" onclick="sub();">上传</button> <!--<button class="btn" type="button" onclick="sub();">上传</button>-->
</p> </p>
<!--显示消失--> <!--显示消失-->
@ -220,37 +220,35 @@
$(".el-upload-list").css("display", "block"); $(".el-upload-list").css("display", "block");
$(".el-upload-list li").css("border", "1px solid #20a0ff"); $(".el-upload-list li").css("border", "1px solid #20a0ff");
$("#videoName").text(fileObj.name); $("#videoName").text(fileObj.name);
var fileObj = document.getElementById("file").files[0]; // js 获取文件对象
if (fileObj == undefined || fileObj == "") {
alert("请选择文件");
return false;
};
var imagSize = document.getElementById("file").files[0].size;
if (imagSize > 1024 * 1024 * 10) {
alert("视频大小为:" + (imagSize / (1024 * 1024)).toFixed(2) + "M超出了上传大小" + "请选择3M以内的视频");
return false;
}
var url = "edu/api/upload"; // 接收上传文件的后台地址
var form = new FormData(); // FormData 对象
form.append("mf", fileObj); // 文件对象
xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
xhr.open("post", url, true); //post方式url为服务器请求地址true 该参数规定请求是否异步处理。
xhr.onload = uploadComplete; //请求完成
xhr.onerror = uploadFailed; //请求失败
xhr.upload.onprogress = progressFunction; //【上传进度调用方法实现】
xhr.upload.onloadstart = function () { //上传开始执行方法
ot = new Date().getTime(); //设置上传开始时间
oloaded = 0; //设置上传开始时以上传的文件大小为0
};
xhr.send(form); //开始上传发送form数据
} else { } else {
alert("请选择文件"); alert("请选择文件");
} }
} }
/*点击提交*/
function sub() {
var fileObj = document.getElementById("file").files[0]; // js 获取文件对象
if (fileObj == undefined || fileObj == "") {
alert("请选择文件");
return false;
};
var imagSize = document.getElementById("file").files[0].size;
if (imagSize > 1024 * 1024 * 10) {
alert("视频大小为:" + (imagSize / (1024 * 1024)).toFixed(2) + "M超出了上传大小" + "请选择3M以内的视频");
return false;
}
var url = "edu/api/upload"; // 接收上传文件的后台地址
var form = new FormData(); // FormData 对象
form.append("mf",fileObj); // 文件对象
xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
xhr.open("post", url, true); //post方式url为服务器请求地址true 该参数规定请求是否异步处理。
xhr.onload = uploadComplete; //请求完成
xhr.onerror = uploadFailed; //请求失败
xhr.upload.onprogress = progressFunction; //【上传进度调用方法实现】
xhr.upload.onloadstart = function () { //上传开始执行方法
ot = new Date().getTime(); //设置上传开始时间
oloaded = 0; //设置上传开始时以上传的文件大小为0
};
xhr.send(form); //开始上传发送form数据
}
//上传进度实现方法,上传过程中会频繁调用该方法 //上传进度实现方法,上传过程中会频繁调用该方法
function progressFunction(evt) { function progressFunction(evt) {

View File

@ -135,7 +135,7 @@
<tr> <tr>
<td>所属类别:</td> <td>所属类别:</td>
<td> <td>
<input id="cate" class="easyui-combotree" name="cate" style="width:480px" data-options="url:'api/questioncat?a=tree2',loadFilter: function (rows) { <input id="cate" class="easyui-combotree" name="cate" style="width:480px" data-options="url:'api/questioncat?a=tree',loadFilter: function (rows) {
return convert(rows); return convert(rows);
},"> },">
</td> </td>
@ -150,7 +150,7 @@
<a class="list" href="javascript:;"> <a class="list" href="javascript:;">
<input id="file" type="file" name="myfile" onchange="UpladFile();" /><span>选择文件</span> <input id="file" type="file" name="myfile" onchange="UpladFile();" /><span>选择文件</span>
</a> </a>
<button class="btn" type="button" onclick="sub();">上传</button> <!--<button class="btn" type="button" onclick="sub();">上传</button>-->
<a class="el-upload-list__item-name"> <a class="el-upload-list__item-name">
<i class="el-icon-document"></i><span class="ploadname" id="fileName">上传文件名称</span> <i class="el-icon-document"></i><span class="ploadname" id="fileName">上传文件名称</span>
</a> </a>
@ -228,7 +228,30 @@
$(".el-upload-list").css("display", "block"); $(".el-upload-list").css("display", "block");
$(".el-upload-list li").css("border", "1px solid #20a0ff"); $(".el-upload-list li").css("border", "1px solid #20a0ff");
$("#fileName").text(fileObj.name); $("#fileName").text(fileObj.name);
var fileObj = document.getElementById("file").files[0]; // js 获取文件对象
if (fileObj == undefined || fileObj == "") {
alert("请选择文件");
return false;
};
var imagSize = document.getElementById("file").files[0].size;
if (imagSize > 1024 * 1024 * 3) {
alert("文件大小为:" + (imagSize / (1024 * 1024)).toFixed(2) + "M超出了上传大小" + "请选择3M以内的文件");
return false;
}
var url = "edu/api/upload"; // 接收上传文件的后台地址
var form = new FormData(); // FormData 对象
form.append("mf", fileObj); // 文件对象
xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
xhr.open("post", url, true); //post方式url为服务器请求地址true 该参数规定请求是否异步处理。
xhr.onload = uploadComplete; //请求完成
xhr.onerror = uploadFailed; //请求失败
xhr.upload.onprogress = progressFunction; //【上传进度调用方法实现】
xhr.upload.onloadstart = function () { //上传开始执行方法
ot = new Date().getTime(); //设置上传开始时间
oloaded = 0; //设置上传开始时以上传的文件大小为0
};
xhr.send(form); //开始上传发送form数据
} }
else { else {
@ -236,34 +259,6 @@
} }
} }
/*点击提交*/
function sub() {
var fileObj = document.getElementById("file").files[0]; // js 获取文件对象
if (fileObj == undefined || fileObj == "") {
alert("请选择文件");
return false;
};
var imagSize = document.getElementById("file").files[0].size;
if (imagSize > 1024 * 1024 * 3)
{
alert("文件大小为:" + (imagSize / (1024 * 1024)).toFixed(2) + "M超出了上传大小" + "请选择3M以内的文件");
return false;
}
var url = "edu/api/upload"; // 接收上传文件的后台地址
var form = new FormData(); // FormData 对象
form.append("mf",fileObj); // 文件对象
xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
xhr.open("post", url, true); //post方式url为服务器请求地址true 该参数规定请求是否异步处理。
xhr.onload = uploadComplete; //请求完成
xhr.onerror = uploadFailed; //请求失败
xhr.upload.onprogress = progressFunction; //【上传进度调用方法实现】
xhr.upload.onloadstart = function () { //上传开始执行方法
ot = new Date().getTime(); //设置上传开始时间
oloaded = 0; //设置上传开始时以上传的文件大小为0
};
xhr.send(form); //开始上传发送form数据
}
//上传进度实现方法,上传过程中会频繁调用该方法 //上传进度实现方法,上传过程中会频繁调用该方法
function progressFunction(evt) { function progressFunction(evt) {

View File

@ -0,0 +1,123 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>答题详情</title>
<script type="text/javascript" src="/static/safesite/easyui/jquery.min.js"></script>
</head>
<body >
<div style="height:100%;overflow:auto;width:70%;background-color:lightcyan;margin:0 auto;">
<div id="examname" style="font-size: 36px;color: #73348a;text-align: center;margin-top: 30px;font-weight: bold;"></div>
<div style="height:200px" id="user">
</div>
<div id="examtype1"></div>
</div>
</body>
</html>
<script>
var id = {{id }};
var html;
$.ajax({
type: "get",
url: "/api/examtestdetail?a=detail",
data: { 'id': id },
dateType: "json",
success: function (data) {
document.getElementById("examname").innerHTML = data.examtest__name;
var divUserHtml = "";
divUserHtml += '<div style="margin-left:10px;padding-bottom:13px;float:left"><image style="margin: 10px 10px;" src=' + data.user__headimgurl + '></image></div>';
divUserHtml += '<div style="float:left;margin-top: 20px;margin-left:20px"><p>姓名:' + data.user__name + '</p><p>得分:' + data.score + '</p><p>是否通过:' + (data.passcode == 1 ? '通过' : '不通过') + '</p></div > ';
$("#user").append(divUserHtml);
for (var i = 1; i <= data.testdetail.length; i++) {
if (data.testdetail[i].question__type == 3)
{
var divHtml = "";
divHtml += '<div style="margin-left:30px;padding-bottom:13px">';
divHtml += '<span style="color:blue">' + "【判断题】</span></span>"+"第"+i+"题:" + data.testdetail[i].question__title +'</span>';
divHtml += '<span style=" margin-left: 40px; color:#d5cc1d;">此题得分:' + data.testdetail[i].iscore + ' 分</span>';
divHtml += '<br />';
divHtml += '<div style="margin-left: 80px;margin-top: 15px;"><span>A.' + data.testdetail[i].question__answer.A + '</span></br></br><span>B.' + data.testdetail[i].question__answer.B +'</span></div>';
divHtml += '<br />';
divHtml += '<div style="padding-left: 10px; padding-top: 10px;">';
divHtml += '<div style="color:green;">正确答案:' + data.testdetail[i].question__right + '</div>';
if (data.testdetail[i].iscore == 0) {
divHtml += '<div style="color:red;">您的答案错误:' + data.testdetail[i].userchecked + '</div>';
}
else {
divHtml += '<div style="color:green;">您的答案正确:' + data.testdetail[i].userchecked + '</div>';
}
divHtml += '<div style="margin-top: 10px;color: #4f3b08;font-size:13px;">' + (data.testdetail[i].question_resolution == undefined ? '本题无解析!' : data.testdetail[i].question_resolution) +'</div>';
}
else if (data.testdetail[i].question__type == 2) {
var divHtml = "";
var answrText = "";
divHtml += '<div style="margin-left:30px;padding-bottom:13px">';
divHtml += '<span style="color:blue">' + "【多选题】</span></span>" +"第" + i + "题:" + data.testdetail[i].question__title + '</span>';
divHtml += '<span style=" margin-left: 40px; color:#d5cc1d;">此题得分:' + data.testdetail[i].iscore + ' 分</span>';
divHtml += '<br />';
divHtml += '<div style="margin-left: 80px;margin-top: 15px;"><span>A.' + data.testdetail[i].question__answer.A + '</span></br></br><span>B.' + data.testdetail[i].question__answer.B + '</span></br></br><span>C.' + data.testdetail[i].question__answer.C + '</span></br></br><span>D.' + data.testdetail[i].question__answer.D + '</span></br></br><span>E.' + (data.testdetail[i].question__answer.E == undefined ? '无该选项' : data.testdetail[i].question__answer.E) + '</span></br></br><span>F.' + (data.testdetail[i].question__answer.F == undefined ? '无该选项' : data.testdetail[i].question__answer.F) + '</span></div>';
divHtml += '<br />';
divHtml += '<div style="padding-left: 10px; padding-top: 10px;">';
divHtml += '<div style="color:green;">正确答案:' + data.testdetail[i].question__right + '</div>';
if (data.testdetail[i].iscore == data.testdetail[i].score) {
divHtml += '<div style="color:green;">您的答案正确:' + data.testdetail[i].userchecked + '</div>';
}
else if (data.testdetail[i].iscore == 0) {
divHtml += '<div style="color:red;">您的答案错误:' + data.testdetail[i].userchecked + '</div>';
}
else {
divHtml += '<div style="color:yellow;">您没有选全答案:' + data.testdetail[i].userchecked + '</div>';
}
divHtml += '<div style="margin-top: 10px;color: #4f3b08;font-size:13px;">' + (data.testdetail[i].question_resolution == undefined ? '本题无解析!' : data.testdetail[i].question_resolution) + '</div>';
}
else {
var divHtml = "";
var answrText = "";
divHtml += '<div style="margin-left:30px;padding-bottom:13px">';
divHtml += '<span style="color:blue">' + "【单选题】</span></span>" + "第" + i + "题:" + data.testdetail[i].question__title + '</span>';
divHtml += '<span style=" margin-left: 40px; color:#d5cc1d;">此题得分:' + data.testdetail[i].iscore + ' 分</span>';
divHtml += '<br />';
divHtml += '<div style="margin-left: 80px;margin-top: 15px;"><span>A.' + data.testdetail[i].question__answer.A + '</span></br></br><span>B.' + data.testdetail[i].question__answer.B + '</span></br></br><span>C.' + data.testdetail[i].question__answer.C + '</span></br></br><span>D.' + data.testdetail[i].question__answer.D + '</span></div>';
divHtml += '<br />';
divHtml += '<div style="padding-left: 10px; padding-top: 10px;">';
divHtml += '<div style="color:green;">正确答案:' + data.testdetail[i].question__right + '</div>';
if (data.testdetail[i].iscore == 0) {
divHtml += '<div style="color:red;">您的答案错误:' + data.testdetail[i].userchecked + '</div>';
}
else {
divHtml += '<div style="color:green;">您的答案正确:' + data.testdetail[i].userchecked + '</div>';
}
divHtml += '<div style="margin-top: 10px;color: #4f3b08;font-size:13px;">' + (data.testdetail[i].question_resolution == undefined ? '本题无解析!' : data.testdetail[i].question_resolution) + '</div>';
}
$("#examtype1").append(divHtml);
}
},
error: function () {
return false;
},
async: false
});
</script>

View File

@ -60,16 +60,16 @@
<table class='detailtable'> <table class='detailtable'>
<thead> <thead>
<tr> <tr>
<th style="width:10%"> <th style="width:10%">
序号 序号
</th> </th>
<th style="width:20%"> <th style="width:20%">
姓名 姓名
</th> </th>
<th style="width:30%">
部门
</th>
<th style="width:20%"> <th style="width:20%">
部门
</th>
<th style="width:15%">
状态 状态
</th> </th>
<th style="width:10%"> <th style="width:10%">
@ -78,6 +78,9 @@
<th style="width:10%"> <th style="width:10%">
用时 用时
</th> </th>
<th style="width:15%">
答题详情
</th>
</tr> </tr>
</thead> </thead>
{{each cjrydetail}} {{each cjrydetail}}
@ -92,6 +95,7 @@
{{/if}} {{/if}}
<td>{{$value.score}}</td> <td>{{$value.score}}</td>
<td>{{$value.took}}</td> <td>{{$value.took}}</td>
<td><a target="_blank" href="/html/examhistory/{{$value.id}}" >点击查看</a></td>
</tr> </tr>
{{/each}} {{/each}}
</table> </table>
@ -183,4 +187,6 @@
} }
}); });
} }
</script> </script>

View File

@ -99,7 +99,7 @@
<tr> <tr>
<td>法律法规名称:</td> <td>法律法规名称:</td>
<td> <td>
<input id="maragename" class="easyui-textbox" name="maragename" style="width:480px"> <input id="maragename" class="easyui-textbox" name="maragename" readonly="readonly" style="width:480px">
</td> </td>
</tr> </tr>
@ -113,7 +113,7 @@
<tr> <tr>
<td>法律法规分类:</td> <td>法律法规分类:</td>
<td> <td>
<input id="maragetype" class="easyui-combotree" name="maragetype" style="width:480px" data-options="url:'rlt/api/lawstype?a=tree2',loadFilter: function (rows) { <input id="maragetype" class="easyui-combotree" name="maragetype" style="width:480px" data-options="url:'rlt/api/lawstype?a=tree',loadFilter: function (rows) {
return convert(rows); return convert(rows);
},"> },">
</td> </td>
@ -158,7 +158,7 @@
<a class="list" href="javascript:;"> <a class="list" href="javascript:;">
<input id="file" type="file" name="maragepath" onchange="UpladFile();" /><span>选择文件</span> <input id="file" type="file" name="maragepath" onchange="UpladFile();" /><span>选择文件</span>
</a> </a>
<button class="btn" type="button" onclick="sub();">上传</button>
</p> </p>
<!--显示消失--> <!--显示消失-->
@ -219,7 +219,7 @@
success: function (data) { success: function (data) {
if (data.code == 1) { if (data.code == 1) {
alert("数据保存!"); alert("数据保存!");
$('#edutab').datagrid('reload'); $('#tmtable').datagrid('reload');
$("#dd").dialog("close"); $("#dd").dialog("close");
} else { $.messager.alert('提示', '失败!'); } } else { $.messager.alert('提示', '失败!'); }
$('#submitb').linkbutton('enable'); $('#submitb').linkbutton('enable');
@ -241,37 +241,37 @@
//$("#maragename").text(fileObj.name); //$("#maragename").text(fileObj.name);
$("#maragename").textbox('setValue', fileObj.name) $("#maragename").textbox('setValue', fileObj.name)
var fileObj = document.getElementById("file").files[0]; // js 获取文件对象
if (fileObj == undefined || fileObj == "") {
alert("请选择文件");
return false;
};
var imagSize = document.getElementById("file").files[0].size;
if (imagSize > 1024 * 1024 * 10) {
alert("文件大小为:" + (imagSize / (1024 * 1024)).toFixed(2) + "M超出了上传大小" + "请选择10M以内的文件");
return false;
}
var url = "rlt/api/upload"; // 接收上传文件的后台地址
var form = new FormData(); // FormData 对象
form.append("mf", fileObj); // 文件对象
xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
xhr.open("post", url, true); //post方式url为服务器请求地址true 该参数规定请求是否异步处理。
xhr.onload = uploadComplete; //请求完成
xhr.onerror = uploadFailed; //请求失败
xhr.upload.onprogress = progressFunction; //【上传进度调用方法实现】
xhr.upload.onloadstart = function () { //上传开始执行方法
ot = new Date().getTime(); //设置上传开始时间
oloaded = 0; //设置上传开始时以上传的文件大小为0
};
xhr.send(form); //开始上传发送form数据
} else { } else {
alert("请选择文件"); alert("请选择文件");
} }
} }
/*点击提交*/ /*点击提交*/
function sub() {
var fileObj = document.getElementById("file").files[0]; // js 获取文件对象
if (fileObj == undefined || fileObj == "") {
alert("请选择文件");
return false;
};
var imagSize = document.getElementById("file").files[0].size;
if (imagSize > 1024 * 1024 * 10) {
alert("文件大小为:" + (imagSize / (1024 * 1024)).toFixed(2) + "M超出了上传大小" + "请选择3M以内的文件");
return false;
}
var url = "rlt/api/upload"; // 接收上传文件的后台地址
var form = new FormData(); // FormData 对象
form.append("mf",fileObj); // 文件对象
xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
xhr.open("post", url, true); //post方式url为服务器请求地址true 该参数规定请求是否异步处理。
xhr.onload = uploadComplete; //请求完成
xhr.onerror = uploadFailed; //请求失败
xhr.upload.onprogress = progressFunction; //【上传进度调用方法实现】
xhr.upload.onloadstart = function () { //上传开始执行方法
ot = new Date().getTime(); //设置上传开始时间
oloaded = 0; //设置上传开始时以上传的文件大小为0
};
xhr.send(form); //开始上传发送form数据
}
//上传进度实现方法,上传过程中会频繁调用该方法 //上传进度实现方法,上传过程中会频繁调用该方法
function progressFunction(evt) { function progressFunction(evt) {

View File

@ -263,7 +263,7 @@ float: left;">
<div style="width:70%;float:left;height:100%;margin-top: 10px;" align=center> <div style="width:70%;float:left;height:100%;margin-top: 10px;" align=center>
<div style="margin-left:10px;margin-right: 10px"> <div style="margin-left:10px;margin-right: 10px">
<div id="panelx" class="easyui-panel" title="各指标数量趋势" data-options="iconCls:'fa-bar-chart',closable:true, <div class="easyui-panel" title="各指标数量趋势" data-options="iconCls:'fa-bar-chart',closable:true,
collapsible:true," collapsible:true,"
align=center style="height:100%"> align=center style="height:100%">
<div id='gzbqst' style="width:90%;height:500px;"></div> <div id='gzbqst' style="width:90%;height:500px;"></div>
@ -326,6 +326,12 @@ float: left;">
</div> </div>
<div style="width:98%;margin-left:1%;margin-right:1%;height:800px">
<div id="panelx" class="easyui-panel" data-options="iconCls:'fa-bar-chart'" >
</div>
</div>
<script type="text/javascript"> <script type="text/javascript">
//首页总数统计 //首页总数统计
$.ajax({ $.ajax({
@ -372,13 +378,12 @@ float: left;">
<script> <script>
var data=JSON.parse(localStorage.getItem("data")); var data=JSON.parse(localStorage.getItem("data"));
bindmap9('gzbqst')
if(data.rights.indexOf('30')!=-1){ //有无地图功能 if(data.rights.indexOf('30')!=-1){ //有无地图功能
$('#panelx').panel({ $('#panelx').panel({
href:'html/mapshow', href:'html/mapshow',
title:'地图展示' title:'地图展示'
}) })
}else{
bindmap9('gzbqst')
} }
$("#sfxbm").combotree({ $("#sfxbm").combotree({
url: 'parthandle?a=tree', url: 'parthandle?a=tree',

View File

@ -0,0 +1,312 @@
<style type="text/css">
#content {
border: 1px solid saddlebrown;
padding: 16px;
border-radius: 2px
}
.list {
top: 15px;
width: 140px;
height: 40px;
border: 1px solid #0082E6;
display: inline-block;
border-radius: 2px;
position: relative;
line-height: 40px;
}
#file {
position: absolute;
opacity: 0;
color: white;
width: 100%;
height: 100%;
z-index: 100;
}
.list span {
display: inline-block;
text-align: center;
width: 100%;
line-height: 40px;
position: absolute;
color: #0082E6;
}
video {
margin-top: 8px;
border-radius: 4px;
}
._p {
margin: 14px;
}
._p input {
display: inline-block;
width: 70%;
margin-left: 6px;
}
._p span {
font-size: 15px;
}
.container {
width: 100%;
height: 20px;
background-color: gray;
}
#progress {
height: 20px;
background-color: orange;
display: inline-block;
}
.btn {
text-align: center;
color: #0082E6;
width: 140px;
height: 41px;
border: 1px solid #0082E6;
display: inline-block;
border-radius: 2px;
position: relative;
line-height: 40px;
background-color: white;
}
.ploadname {
display: inline-block;
text-align: center;
color: #0082E6;
height: 40px;
display: inline-block;
border-radius: 2px;
position: relative;
line-height: 40px;
background-color: white;
}
</style>
<div class="easyui-layout" style="width:100%;height:100%;">
<form id="edu" method="post" name="edu" enctype="multipart/form-data">
<div data-options="region:'center'" style="padding:15px 15px;">
<table class="listTab">
<tr>
<td>制度标题:</td>
<td>
<input id="title" class="easyui-textbox" name="mgtname" style="width:480px">
</td>
</tr>
<tr>
<td>上传时间:</td>
<td>
<input id="submittime" editable="false" name="publisdate" class="easyui-datetimebox" style="width:480px"
data-options="currentText:'今天',closeText:'关闭',showSeconds:false" />
</td>
</tr>
<tr>
<td>所属类别:</td>
<td>
<input id="mgttype" name="type" class="easyui-textbox" style="width:480px">
</td>
</tr>
</table>
<div id="content">
<p class="_p">
<span>选择文件: </span>
<!--文件选择按钮-->
<a class="list" href="javascript:;">
<input id="file" type="file" name="myfile" onchange="UpladFile();" /><span>选择文件</span>
</a>
</p>
<!--显示消失-->
<ul class="el-upload-list el-upload-list--text" style="display: none;list-style-type:none">
<li tabindex="0" class="el-upload-list__item is-success">
<a class="el-upload-list__item-name">
<i class="el-icon-document"></i><span class="ploadname" id="videoName">food.jpeg</span>
</a>
</li>
</ul>
<span id="url" style="display:none"></span>
<!--进度条-->
<div class="el-progress el-progress--line" style="display: none;">
<div class='container'>
<span id="progress"></span>
</div>
<!--上传速度显示-->
<span id="time"></span>
</div>
</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="wssubmitForm()" id="submitb">提交</a>
<a href="javascript:void(0)" iconCls="fa-close" class="easyui-linkbutton" onclick="closeForm()">取消</a>
</div>
</form>
</div>
<script type="text/javascript">
$("#mgttype").combobox({
url: 'mgt/getdickey?dicclass=55',
valueField: 'value',
textField: 'text',
editable: false,
});
function wssubmitForm() {
var edudata = $('#edu').serializeJSON();
edudata['filepath'] = document.getElementById('url').innerHTML;
$.ajax({
type: "POST",
url: 'mgt/api?a=add',
data: JSON.stringify(edudata),
datatype: "json",
processData: false,
contentType: "application/json;charset=utf-8",
beforeSend: function () {
var bo = $('#edu').form('validate')
if (bo == false) {
return bo
} else {
$('#submitb').linkbutton('disable');
}
},
success: function (data) {
if (data.code == 1) {
alert("数据保存!");
$('#mgttab').datagrid('reload');
$("#dd").dialog("close");
} else { $.messager.alert('提示', '失败!'); }
$('#submitb').linkbutton('enable');
},
});
}
var xhr;//异步请求对象
var ot; //时间
var oloaded;//大小
//上传文件方法
function UpladFile() {
var fileObj = document.getElementById("file").files[0]; // js 获取文件对象
if (fileObj.name) {
$(".el-upload-list").css("display", "block");
$(".el-upload-list li").css("border", "1px solid #20a0ff");
$("#videoName").text(fileObj.name);
var fileObj = document.getElementById("file").files[0]; // js 获取文件对象
if (fileObj == undefined || fileObj == "") {
alert("请选择文件");
return false;
};
var imagSize = document.getElementById("file").files[0].size;
if (imagSize > 1024 * 1024 * 10) {
alert("视频大小为:" + (imagSize / (1024 * 1024)).toFixed(2) + "M超出了上传大小" + "请选择3M以内的视频");
return false;
}
var url = "mgt/upload"; // 接收上传文件的后台地址
var form = new FormData(); // FormData 对象
form.append("mf", fileObj); // 文件对象
xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
xhr.open("post", url, true); //post方式url为服务器请求地址true 该参数规定请求是否异步处理。
xhr.onload = uploadComplete; //请求完成
xhr.onerror = uploadFailed; //请求失败
xhr.upload.onprogress = progressFunction; //【上传进度调用方法实现】
xhr.upload.onloadstart = function () { //上传开始执行方法
ot = new Date().getTime(); //设置上传开始时间
oloaded = 0; //设置上传开始时以上传的文件大小为0
};
xhr.send(form); //开始上传发送form数据
} else {
alert("请选择文件");
}
}
//上传进度实现方法,上传过程中会频繁调用该方法
function progressFunction(evt) {
// event.total是需要传输的总字节event.loaded是已经传输的字节。如果event.lengthComputable不为真则event.total等于0
if (evt.lengthComputable) {
$(".el-progress--line").css("display", "block");
var percent = Math.round(evt.loaded * 100 / evt.total);
/*进度条显示进度*/
document.getElementById('progress').innerHTML = Math.round(evt.loaded / evt.total * 100) + "%";
document.getElementById('progress').style.width = percent.toFixed(2) + '%';
}
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';
if (bspeed == 0)
time.innerHTML = '上传已取消';
}
//上传成功响应
function uploadComplete(evt) {
//服务断接收完文件返回的结果 注意返回的字符串要去掉双引号
if (evt.target.responseText) {
var data = JSON.parse(evt.target.responseText);
if (data.code = 1) {
var str = data.filepath;
document.getElementById('url').innerHTML = str;
alert("上传成功!");
$(".preview").append("<video controls='' autoplay='' style='width:200px;height200px' name='media'><source src=" + str + " type='video/mp4'></video>");
}
} else {
alert("上传失败");
}
}
//上传失败
function uploadFailed(evt) {
alert("上传失败!");
}
</script>

View File

@ -0,0 +1,78 @@
<div id="edubar" style="padding: 4px;height: 40px;background-color:#FCFCFC">
<div style="width: 500px;padding: 5px;">
<a id="addedu" class="easyui-linkbutton" onclick="javascript:opendg('新增文件','mgt/add')" data-options="iconCls: 'fa-plus',plain:true">新增</a>
<a id="deledu" class="easyui-linkbutton" onclick="deledu()" data-options="iconCls: 'fa-trash',plain:true">删除</a>
</div>
</div>
<table id="mgttab" style="width:100%;height:100%;text-align: center;"></table>
<script>
$('#mgttab').datagrid({
url: 'mgt/api?a=listall',
rownumbers: true,
singleSelect: true,
striped: true,
fitColumns: true,
method: 'get',
pagination: 'true',
pageSize: 20,
border: false,
toolbar:'#edubar',
columns: [[
{ field: 'id', title: 'ID', hidden: true },
{ field: 'mgtname', title: '制度名称', width: 100 },
{ field: 'type__dickeyname', title: '制度类别', width: 100 },
{ field: 'publisdate', title: '上传时间', width: 100 },
{ field: 'createuser__name', title: '创建人', width: 100 },
{
field: 'mgtpath', title: '点击观看', width: 100, formatter: function (value, row, index) {
return '<a style="color:blue" target="_blank" href="' + row.mgtpath + '" id="one">点击查看</a>';
}
},
]]
});
function deledu() {
var row = $('#mgttab').datagrid('getSelected');
if (row) {
$.messager.confirm('提示', '确定删除吗?', function (r) {
if (r) {
$.ajax({
type: "GET",
url: 'mgt/api?a=del',
data: { 'id': row.id },
datatype: "json",
beforeSend: function () { },
success: function (data) {
if (data.code == 1) {
$("#mgttab").datagrid('reload');
}
else {
$.messager.alert('提示', '你无权删除该条管理制度!');
}
},
complete: function (XMLHttpRequest, textStatus) {
},
error: function () {
}
});
}
});
}
else {
$.messager.alert('提示', '请选择一行数据!');
}
}
</script>

View File

@ -101,7 +101,7 @@
{ field: 'lookplace', title: '观察地点', width: 150 }, { field: 'lookplace', title: '观察地点', width: 150 },
{ field: 'actname', title: '作业名称', width: 200 }, { field: 'actname', title: '作业名称', width: 200 },
{ field: 'looktime', title: '观察时间', width: 200 }, { field: 'looktime', title: '观察时间', width: 200 },
{ field: 'looker__name', title: '观察人', width: 200 }, { field: 'looker__name', title: '观察记录人', width: 200 },
{ field: 'lookeder', title: '被观察对象', width: 200 }, { field: 'lookeder', title: '被观察对象', width: 200 },
{ field: 'otherunsafe', title: '过程和交流记录', width: 300 }, { field: 'otherunsafe', title: '过程和交流记录', width: 300 },
]] ]]

View File

@ -14,7 +14,10 @@
</tr> </tr>
<tr> <tr>
<td style="width:50%">所属部门:{{lookpart__partname}}</td> <td style="width:50%">所属部门:{{lookpart__partname}}</td>
<td style="width:50%">观察人:{{looker__name}}</td> <td>观察人记录人:{{looker__name}}</td>
</tr>
<tr>
<td colspan="2">观察人员:{{lookers}}</td>
</tr> </tr>
<tr> <tr>
<td>开始时间:{{looktime| dateFormat 'yyyy-MM-dd hh:mm'}}</td> <td>开始时间:{{looktime| dateFormat 'yyyy-MM-dd hh:mm'}}</td>

View File

@ -13,7 +13,7 @@
required=true /> required=true />
</div> </div>
<div style="margin-bottom:5px"> <div style="margin-bottom:5px">
<input id="spr" class="easyui-combobox" name="spr" style="width:480px;" editable="false" data-options="label:'审批人'" <input id="spr" class="easyui-combobox" name="spr" style="width:480px;" editable="false" data-options="label:'审批人',multiple:true"
required=true /> required=true />
</div> </div>
</form> </form>
@ -22,9 +22,13 @@
<script> <script>
$('#spbm').combotree({ url: 'parthandle?a=tree', loadFilter: function(rows){ $('#spbm').combotree({ url: 'parthandle?a=tree', loadFilter: function(rows){
return convert(rows); return convert(rows);
},onSelect: function (node) { $('#spr').combobox({ url: 'getuser?partid=' + node.id + '&a=combobox', }); } }); },onSelect: function (node) { $('#spr').combobox({
url: 'getuser?partid=' + node.id + '&a=combobox',
}); } });
function spjdsubmitForm() { function spjdsubmitForm() {
var spjddata = $('#spjdff').serializeJSON(); var spjddata = $('#spjdff').serializeJSON();
spjddata['spr'] = $('#spr').combobox('getValues')
console.log(spjddata)
spjddata['zylx'] = $('#zylxlist').datalist('getSelected').value spjddata['zylx'] = $('#zylxlist').datalist('getSelected').value
$.ajax({ $.ajax({
type: "POST", type: "POST",

View File

@ -72,6 +72,10 @@
<input id="B" class="easyui-textbox" name="B" style="width:480px;" data-options="label:'选项B'," value="错" editable=false/> <input id="B" class="easyui-textbox" name="B" style="width:480px;" data-options="label:'选项B'," value="错" editable=false/>
<input name="right" type="radio" value="B" /> <input name="right" type="radio" value="B" />
</div> </div>
<div style="margin-top:5px;margin-bottom:5px">
<input id="resolution" class="easyui-textbox" name="resolution" style="width:480px;height:80px"
data-options="label:'解析',multiline:true" />
</div>
</form> </form>
</div> </div>
</div> </div>

View File

@ -93,6 +93,7 @@
//$('#station').combobox('setValue',res.station__groupid) //$('#station').combobox('setValue',res.station__groupid)
$('#label').textbox('setValue',res.label) $('#label').textbox('setValue',res.label)
$('#title').textbox('setValue',res.title) $('#title').textbox('setValue',res.title)
$('#resolution').textbox('setValue',res.resolution)
for(var key in res.answer){ for(var key in res.answer){
$('#'+key).textbox('setValue',res.answer[key]) $('#'+key).textbox('setValue',res.answer[key])
} }

View File

@ -106,6 +106,7 @@
//$('#station').combobox('setValue',res.station__groupid) //$('#station').combobox('setValue',res.station__groupid)
$('#label').textbox('setValue',res.label) $('#label').textbox('setValue',res.label)
$('#title').textbox('setValue',res.title) $('#title').textbox('setValue',res.title)
$('#resolution').textbox('setValue',res.resolution)
for(var key in res.answer){ for(var key in res.answer){
$('#'+key).textbox('setValue',res.answer[key]) $('#'+key).textbox('setValue',res.answer[key])
} }

View File

@ -72,6 +72,10 @@
<input id="B" class="easyui-textbox" name="B" style="width:480px;" data-options="label:'选项B'," value="错" editable=false/> <input id="B" class="easyui-textbox" name="B" style="width:480px;" data-options="label:'选项B'," value="错" editable=false/>
<input id="Bcheck" name="right" type="radio" value="B" /> <input id="Bcheck" name="right" type="radio" value="B" />
</div> </div>
<div style="margin-top:5px;margin-bottom:5px">
<input id="resolution" class="easyui-textbox" name="resolution" style="width:480px;height:80px"
data-options="label:'解析',multiline:true" />
</div>
</form> </form>
</div> </div>
</div> </div>
@ -83,6 +87,7 @@
// $('#station').combobox('setValue',res.station__groupid) // $('#station').combobox('setValue',res.station__groupid)
$('#label').textbox('setValue',res.label) $('#label').textbox('setValue',res.label)
$('#title').textbox('setValue',res.title) $('#title').textbox('setValue',res.title)
$('#resolution').textbox('setValue',res.resolution)
for(var key in res.answer){ for(var key in res.answer){
$('#'+key).textbox('setValue',res.answer[key]) $('#'+key).textbox('setValue',res.answer[key])
} }

View File

@ -39,6 +39,10 @@
<input id="jtwz" class="easyui-textbox" name="place" style="width:480px" data-options="label:'具体位置'" <input id="jtwz" class="easyui-textbox" name="place" style="width:480px" data-options="label:'具体位置'"
/> />
</div> </div>
<div style="margin-top:10px;margin-bottom:5px">
<input id="group" class="easyui-combobox" name="group" style="width:480px" data-options="label:'所属岗位',url:'grouphandle?a=combobox'"
required=true editable=false/>
</div>
<div style="margin-top:10px;margin-bottom:5px"> <div style="margin-top:10px;margin-bottom:5px">
<select id="gkcj" class="easyui-combobox" name="gkcj" style="width:480px" data-options="label:'管控层级'" <select id="gkcj" class="easyui-combobox" name="gkcj" style="width:480px" data-options="label:'管控层级'"
required=true editable=false> required=true editable=false>
@ -80,7 +84,7 @@
$('#fxdmc').textbox('setValue',data.name) $('#fxdmc').textbox('setValue',data.name)
$('#jtwz').textbox('setValue',data.place) $('#jtwz').textbox('setValue',data.place)
$('#qrcode').attr('src',data.qrcode) $('#qrcode').attr('src',data.qrcode)
$('#group').combobox('setValue', res.group__groupid) $('#group').combobox('setValue', data.group__groupid)
$("#zrbm").combotree({ $("#zrbm").combotree({
url: 'parthandle?a=tree', url: 'parthandle?a=tree',
onSelect: function (node) { onSelect: function (node) {

View File

@ -94,6 +94,20 @@
{ field: 'dqxz', title: '当前现状', width: 200 }, { field: 'dqxz', title: '当前现状', width: 200 },
{ field: 'jynr', title: '建议内容', width: 400 }, { field: 'jynr', title: '建议内容', width: 400 },
{ field: 'jyfk', title: '建议反馈', width: 400 }, { field: 'jyfk', title: '建议反馈', width: 400 },
{
field: 'accept', title: '建议状态', width: 80, styler: function (value, row, index) {
switch (value) {
case 1: return 'background-color:green;'; break;
case 0: return 'background-color:red;'; break;
}
}, formatter: function (value, row, index) {
switch (value) {
case 1: return '已采纳'; break;
case 0: return '未采纳'; break;
}
}
},
]] ]]
}); });
function addjy(){ function addjy(){

View File

@ -116,12 +116,13 @@
{ field: 'todouser__userid', hidden: true }, { field: 'todouser__userid', hidden: true },
{ field: 'sybzt', hidden: true }, { field: 'sybzt', hidden: true },
{ {
field: 'shresult', title: '整改结果状态', width: 100, styler: function (value, row, index) { field: 'shresult', title: '隐患状态', width: 100, styler: function (value, row, index) {
switch (value) { switch (value) {
case 1: return ''; break; case 1: return ''; break;
case 2: return 'background-color:red;'; break; case 2: return 'background-color:red;'; break;
case 3: return 'background-color:red;'; break; case 3: return 'background-color:red;'; break;
case 4: return 'background-color:yellow;'; break; case 4: return 'background-color:yellow;'; break;
case 6: return 'background-color:yellow;'; break;
} }
}, formatter: function (value, row, index) { }, formatter: function (value, row, index) {
switch (value) { switch (value) {
@ -130,6 +131,7 @@
case 3: return '复查未通过'; break; case 3: return '复查未通过'; break;
case 4: return '已修改'; break; case 4: return '已修改'; break;
case 5: return '评估未通过'; break; case 5: return '评估未通过'; break;
case 6: return '未采纳'; break;
} }
} }
}, },

View File

@ -47,7 +47,7 @@
{ field: 'id', title: 'ID', hidden: true }, { field: 'id', title: 'ID', hidden: true },
{ field: 'jdmc', title: '节点名称', width: 40 }, { field: 'jdmc', title: '节点名称', width: 40 },
{ field: 'spbm__partname', title: '审批部门', width: 120 }, { field: 'spbm__partname', title: '审批部门', width: 120 },
{ field: 'spr__name', title: '审批人', width: 120 }, { field: 'sprnames', title: '审批人', width: 120 },
]] ]]
}); });
$('#fxcstable').datagrid({ $('#fxcstable').datagrid({

View File

@ -148,7 +148,7 @@ urlpatterns = [
#path('api/riskactcheck',views.apiriskactcheck), #path('api/riskactcheck',views.apiriskactcheck),
path('api/riskcheck2',views.apiriskcheck2), path('api/riskcheck2',views.apiriskcheck2),
path('api/report',views.apireport), path('api/report',views.apireport),
path('html/examhistory/<int:id>/',views.examhistory),
#path('api/rights/group/<int:groupid>',views.rightsgroup), #path('api/rights/group/<int:groupid>',views.rightsgroup),
@ -172,4 +172,5 @@ urlpatterns = [
path('datashow/charthandle', views.charthandle), path('datashow/charthandle', views.charthandle),
path('companyinfo/', views.companyinfo), path('companyinfo/', views.companyinfo),
path('rlt/',include('safesite.rlt.urls')), path('rlt/',include('safesite.rlt.urls')),
path('mgt/',include('safesite.mgt.urls')),
] ]

View File

@ -14,7 +14,7 @@ from django.db.models import F,Count,Sum
import requests import requests
from .tasks import send_wechatmsgs,send_wechatmsg,yjjs,gettime,yjjs_px,yjjs_yl,updateTzzs,updateAqzs,yjjs_gc,yjjs_ws from .tasks import send_wechatmsgs,send_wechatmsg,yjjs,gettime,yjjs_px,yjjs_yl,updateTzzs,updateAqzs,yjjs_gc,yjjs_ws
from .export import exportdoc,exportxlsx,exportyjdoc,exportsimplexlsx,exportdoc2 from .export import exportdoc,exportxlsx,exportyjdoc,exportsimplexlsx,exportdoc2
from .daoru import drusers,drequipments,drrisks,cal_riskact_level,cal_area_risk_level,makeqr,makeqr2,makeqr3,makeqr4 from .daoru import drusers,drequipments,drrisks,cal_riskact_level,cal_area_risk_level,makeqr,makeqr_train,makeqr_riskact,makeqr_examtest,makeqr_area
from django.forms.models import model_to_dict from django.forms.models import model_to_dict
from .safespider import getTzzs,getAqzs from .safespider import getTzzs,getAqzs
from duibiao import calsim from duibiao import calsim
@ -135,6 +135,8 @@ def exampaperadd(req):
return render(req,'exampaperadd.html') return render(req,'exampaperadd.html')
def exampaper(req): def exampaper(req):
return render(req,'exampaper.html') return render(req,'exampaper.html')
def examhistory(req,id):
return render(req,'examhistory.html',{'id':id})
def questionadd(req): def questionadd(req):
return render(req,'questionadd.html') return render(req,'questionadd.html')
def questionadd2(req): def questionadd2(req):
@ -480,6 +482,32 @@ def getspr(ubp):
return User.objects.get(ubelongpart=currentpart,issuper=1) return User.objects.get(ubelongpart=currentpart,issuper=1)
return a return a
def getsprs(ubp):
currentpart=ubp
a=getsprs_ubp(currentpart)
while a==False:
currentpart=currentpart.parentid #已找不到上级部门
if currentpart:
a=getsprs_ubp(currentpart)
else:
return User.objects.get(ubelongpart=currentpart,issuper=1)
return a
def getsprs_ubp(ubp):
a=ubp
if a.aqy !=',':
aqystr = a.aqy
aqylist = aqystr.split(',')
aqylist = list(map(int, list(filter(None, aqylist))))
return aqylist
if a.bmzg !=',':
zgstr = a.bmzg
zglist = zgstr.split(',')
zglist = list(map(int, list(filter(None, zglist))))
return zglist
else:
return False
@check_login @check_login
def menutree(req): def menutree(req):
userid = req.session['userid'] userid = req.session['userid']
@ -945,29 +973,55 @@ def accessyh(req):
return JsonResponse({"code":1}) return JsonResponse({"code":1})
elif a.yhzt==1: elif a.yhzt==1:
if yhdata['shresult'] == 'reject': if yhdata['shresult'] == 'reject':
a.shresult = 5 if 'accept' in yhdata:
a.yhzt = 0 if yhdata['accept'] == 'no':
a.sybzt = 1 a.shresult = 6
a.todouser = a.fxr a.yhzt = 6
a.pgyj = yhdata['pgyj'] a.sybzt = 1
a.save() a.todouser = None
m=TroubleAccess(troubleid=a,clr=a.pgr,yhzt=0,action=''+a.fxr.name+'重新填报',result=0) a.pgyj = yhdata['pgyj']
m.save() a.save()
postdict={ m=TroubleAccess(troubleid=a,clr=a.pgr,yhzt=6,action='未采纳',opinion=yhdata['pgyj'])
'touser':'oPGqkweX75QtLmgehUN-ipR4hcyc', m.save()
'template_id':'lOuwSE67vZC3ZVFYPZvz2eb7JdFxqx7ysMFkXrYmYh0', postdict={
"miniprogram":{"appid":"wx5c39b569f01c27db","path":"pages/trouble/accesstrouble?troubleid="+str(a.troubleid)}, 'touser':'oPGqkweX75QtLmgehUN-ipR4hcyc',
'data':{ 'template_id':'lOuwSE67vZC3ZVFYPZvz2eb7JdFxqx7ysMFkXrYmYh0',
'first':{'value':a.yhdj.dickeyname + '被退出需重新上报:'}, "miniprogram":{"appid":"wx5c39b569f01c27db","path":"pages/trouble/accesstrouble?troubleid="+str(a.troubleid)},
'keyword1':{'value':a.yhms}, 'data':{
'keyword2':{'value':a.fxsj}, 'first':{'value':a.yhdj.dickeyname + '未被采纳:'},
'keyword3':{'value':a.yhdd}, 'keyword1':{'value':a.yhms},
'remark':{'value':'请查看评估意见并修改后上传。'} 'keyword2':{'value':a.fxsj},
'keyword3':{'value':a.yhdd},
'remark':{'value':'请查看未采纳原因'}
}
}
postdict['touser']=a.fxr.openid
send_wechatmsg.delay(postdict)
return JsonResponse({"code":1})
else:
a.shresult = 5
a.yhzt = 0
a.sybzt = 1
a.todouser = a.fxr
a.pgyj = yhdata['pgyj']
a.save()
m=TroubleAccess(troubleid=a,clr=a.pgr,yhzt=0,action=''+a.fxr.name+'重新填报',result=0)
m.save()
postdict={
'touser':'oPGqkweX75QtLmgehUN-ipR4hcyc',
'template_id':'lOuwSE67vZC3ZVFYPZvz2eb7JdFxqx7ysMFkXrYmYh0',
"miniprogram":{"appid":"wx5c39b569f01c27db","path":"pages/trouble/accesstrouble?troubleid="+str(a.troubleid)},
'data':{
'first':{'value':a.yhdj.dickeyname + '被退出需重新上报:'},
'keyword1':{'value':a.yhms},
'keyword2':{'value':a.fxsj},
'keyword3':{'value':a.yhdd},
'remark':{'value':'请查看评估意见并修改后上传。'}
}
} }
} postdict['touser']=a.todouser.openid
postdict['touser']=a.todouser.openid send_wechatmsg.delay(postdict)
send_wechatmsg.delay(postdict) return JsonResponse({"code":1})
return JsonResponse({"code":1})
elif 'zppg' in yhdata and yhdata['zppg']=='yes': elif 'zppg' in yhdata and yhdata['zppg']=='yes':
a.yhzt=1 a.yhzt=1
a.sybzt=1 a.sybzt=1
@ -1213,7 +1267,7 @@ def addtrain(req):
a.duration=req.POST.get('duration') a.duration=req.POST.get('duration')
a.trainnum='PX'+time.strftime('%Y%m%d%H%M%S') a.trainnum='PX'+time.strftime('%Y%m%d%H%M%S')
a.save() a.save()
a.checkqr = makeqr2('https://safeyun.ctcshe.com/miniprogram/checktrain?trainid='+str(a.trainid)) a.checkqr = makeqr_train('https://safeyun.ctcshe.com/miniprogram/checktrain?trainid='+str(a.trainid))
a.save() a.save()
plist=req.POST.getlist('trainpart') plist=req.POST.getlist('trainpart')
ustr = req.POST.get('participant') ustr = req.POST.get('participant')
@ -1473,13 +1527,15 @@ def troublehandle(req):
userid = req.session['userid'] userid = req.session['userid']
if User.objects.get(userid = userid).issuper == 1: if User.objects.get(userid = userid).issuper == 1:
a = Trouble.objects.get(troubleid = req.POST.get('troubleid')) a = Trouble.objects.get(troubleid = req.POST.get('troubleid'))
a.delete() a.deletemark=0
a.save()
return JsonResponse({"code":1}) return JsonResponse({"code":1})
else: else:
a = Trouble.objects.get(troubleid = req.POST.get('troubleid')) a = Trouble.objects.get(troubleid = req.POST.get('troubleid'))
b = TroubleAccess.objects.filter(troubleid__troubleid=req.POST.get('troubleid')).count() b = TroubleAccess.objects.filter(troubleid__troubleid=req.POST.get('troubleid')).count()
if b == 1 and a.fxr.userid==userid: if b == 1 and a.fxr.userid==userid:
a.delete() a.deletemark=0
a.save()
return JsonResponse({"code":1}) return JsonResponse({"code":1})
else: else:
return JsonResponse({"code":0}) return JsonResponse({"code":0})
@ -2543,12 +2599,18 @@ def gchandle(req):
if 'lookimg' in gcdata: if 'lookimg' in gcdata:
obj.lookimg = '?'.join(gcdata['lookimg']) obj.lookimg = '?'.join(gcdata['lookimg'])
obj.save() obj.save()
if 'lookers' in gcdata:
ulist=gcdata['lookers'].split(',')
for i in ulist:
x=User.objects.get(userid=i)
obj.lookers.add(x)
if 'unsafe' in gcdata: if 'unsafe' in gcdata:
olist = gcdata['unsafe'] olist = gcdata['unsafe']
for i in olist: for i in olist:
dickey = Dickey.objects.get(dickeyid=i) if i != 0:
m = Unsafes(observe = obj,unsafedickey=dickey,unsafedicclass=dickey.dicparent) dickey = Dickey.objects.get(dickeyid=i)
m.save() m = Unsafes(observe = obj,unsafedickey=dickey,unsafedicclass=dickey.dicparent)
m.save()
yjjs_gc.delay(companyid) yjjs_gc.delay(companyid)
return JsonResponse({"code":1}) return JsonResponse({"code":1})
elif a == 'listall': elif a == 'listall':
@ -2621,9 +2683,10 @@ def gchandle(req):
x['lookimg'] = x['lookimg'].split('?') x['lookimg'] = x['lookimg'].split('?')
else: else:
x['lookimg']=[] x['lookimg']=[]
for key in x: x['lookers']=[]
if x[key] == None: for i in a[0].lookers.all():
x[key] = '' x['lookers'].append(i.name)
x['lookers']=','.join(x['lookers'])
Observeto.objects.get_or_create(observe=a[0], user=User.objects.get(userid=req.session['userid']),defaults={'read': 1}) Observeto.objects.get_or_create(observe=a[0], user=User.objects.get(userid=req.session['userid']),defaults={'read': 1})
return HttpResponse(json.dumps(x,cls=MyEncoder),content_type="application/json") return HttpResponse(json.dumps(x,cls=MyEncoder),content_type="application/json")
elif a == 'getdics': elif a == 'getdics':
@ -3345,19 +3408,19 @@ def apipartuser(req):
if req.GET.get('parentid')=='company': if req.GET.get('parentid')=='company':
lst=[] lst=[]
company = User.objects.get(userid=userid).usecomp company = User.objects.get(userid=userid).usecomp
partobjs = Partment.objects.filter(parentid=company) partobjs = Partment.objects.filter(parentid=company,deletemark=1)
for i in partobjs: for i in partobjs:
lst.append({'id':i.partid,'name':i.partname,'parentId':0,'checked':False,'isPeople':False,'children':[]}) lst.append({'id':i.partid,'name':i.partname,'parentId':0,'checked':False,'isPeople':False,'children':[]})
userobjs = User.objects.filter(ubelongpart=company).exclude(issuper=1) userobjs = User.objects.filter(ubelongpart=company,deletemark=1).exclude(issuper=1)
for i in userobjs: for i in userobjs:
lst.append({'id':i.userid,'name':i.name,'parentId':0,'checked':False,'isPeople':True,'children':[]}) lst.append({'id':i.userid,'name':i.name,'parentId':0,'checked':False,'isPeople':True,'children':[]})
return JsonResponse({"code":1,"data":lst}) return JsonResponse({"code":1,"data":lst})
else: else:
lst=[] lst=[]
partobjs = Partment.objects.filter(parentid=req.GET.get('parentid')) partobjs = Partment.objects.filter(parentid=req.GET.get('parentid'),deletemark=1)
for i in partobjs: for i in partobjs:
lst.append({'id':i.partid,'name':i.partname,'parentId':0,'checked':False,'isPeople':False,'children':[]}) lst.append({'id':i.partid,'name':i.partname,'parentId':0,'checked':False,'isPeople':False,'children':[]})
userobjs = User.objects.filter(ubelongpart=req.GET.get('parentid')).exclude(issuper=1) userobjs = User.objects.filter(ubelongpart=req.GET.get('parentid'),deletemark=1).exclude(issuper=1)
for i in userobjs: for i in userobjs:
lst.append({'id':i.userid,'name':i.name,'parentId':0,'checked':False,'isPeople':True,'children':[]}) lst.append({'id':i.userid,'name':i.name,'parentId':0,'checked':False,'isPeople':True,'children':[]})
return JsonResponse({"code":1,"data":lst}) return JsonResponse({"code":1,"data":lst})
@ -3463,7 +3526,7 @@ def apisuggest(req):
a = Suggest.objects.filter(usecomp=Partment.objects.get(partid=companyid)).order_by('-submittime') a = Suggest.objects.filter(usecomp=Partment.objects.get(partid=companyid)).order_by('-submittime')
total = a.count() total = a.count()
startnum,endnum=fenye(req) startnum,endnum=fenye(req)
a = a[startnum:endnum].values('jyid','jylb__dickeyname','jyr__name','jybm__partname','dqxz','jynr','jynum','jyzt','todouser__userid','todouser__name','jyqy__name','jydd','submittime') a = a[startnum:endnum].values('jyid','jylb__dickeyname','jyr__name','jybm__partname','dqxz','jynr','jynum','jyzt','todouser__userid','todouser__name','jyqy__name','jydd','submittime','accept')
return HttpResponse(transjson(total,a),content_type="application/json") return HttpResponse(transjson(total,a),content_type="application/json")
elif a == 'listself': elif a == 'listself':
userid = req.session['userid'] userid = req.session['userid']
@ -3471,7 +3534,7 @@ def apisuggest(req):
a = Suggest.objects.filter(jyr__userid=userid).order_by('-submittime') a = Suggest.objects.filter(jyr__userid=userid).order_by('-submittime')
total = a.count() total = a.count()
startnum,endnum=fenye(req) startnum,endnum=fenye(req)
a = a[startnum:endnum].values('jyid','jylb__dickeyname','jyr__name','jybm__partname','dqxz','jynr','jynum','jyzt','todouser__userid','todouser__name','jyqy__name','jydd','submittime') a = a[startnum:endnum].values('jyid','jylb__dickeyname','jyr__name','jybm__partname','dqxz','jynr','jynum','jyzt','todouser__userid','todouser__name','jyqy__name','jydd','submittime','accept')
return HttpResponse(transjson(total,a),content_type="application/json") return HttpResponse(transjson(total,a),content_type="application/json")
elif a == 'listtodo': elif a == 'listtodo':
userid = req.session['userid'] userid = req.session['userid']
@ -3479,7 +3542,7 @@ def apisuggest(req):
a = Suggest.objects.filter(todouser__userid=userid).order_by('-submittime') a = Suggest.objects.filter(todouser__userid=userid).order_by('-submittime')
total = a.count() total = a.count()
startnum,endnum=fenye(req) startnum,endnum=fenye(req)
a = a[startnum:endnum].values('jyid','jylb__dickeyname','jyr__name','jybm__partname','dqxz','jynr','jynum','jyzt','todouser__userid','todouser__name','jyqy__name','jydd','submittime') a = a[startnum:endnum].values('jyid','jylb__dickeyname','jyr__name','jybm__partname','dqxz','jynr','jynum','jyzt','todouser__userid','todouser__name','jyqy__name','jydd','submittime','accept')
return HttpResponse(transjson(total,a),content_type="application/json") return HttpResponse(transjson(total,a),content_type="application/json")
elif a == 'todonum': elif a == 'todonum':
userid = req.session['userid'] userid = req.session['userid']
@ -3488,7 +3551,7 @@ def apisuggest(req):
elif a == 'detail': elif a == 'detail':
jyid=req.GET.get('jyid') jyid=req.GET.get('jyid')
a = Suggest.objects.filter(jyid=jyid) a = Suggest.objects.filter(jyid=jyid)
x = a.values('jyid','jylb__dickeyname','jynum','submittime','jyr__name','dqxz','jynr','jybm__partname','jyimg','qwxg','jyqy__name','jydd','jyzt','clr__name','jyfk','clcs','pgr__name','clms','jyimg2','sjwcsj')[0] x = a.values('jyid','jylb__dickeyname','jynum','submittime','jyr__name','dqxz','jynr','jybm__partname','jyimg','qwxg','jyqy__name','jydd','jyzt','clr__name','jyfk','clcs','pgr__name','clms','jyimg2','sjwcsj','accept')[0]
if x['jyimg']!='': if x['jyimg']!='':
x['jyimg'] = x['jyimg'].split('?') x['jyimg'] = x['jyimg'].split('?')
else: else:
@ -3518,7 +3581,7 @@ def apisuggest(req):
if req.GET.get('jssj'): if req.GET.get('jssj'):
a = a.filter(submittime__lte=req.GET.get('jssj')) a = a.filter(submittime__lte=req.GET.get('jssj'))
total = a.count() total = a.count()
a = a[startnum:endnum].values('jyid','jylb__dickeyname','jyr__name','jybm__partname','dqxz','jynr','jynum','jyzt','todouser__userid','todouser__name','jyqy__name','jydd','submittime') a = a[startnum:endnum].values('jyid','jylb__dickeyname','jyr__name','jybm__partname','dqxz','jynr','jynum','jyzt','todouser__userid','todouser__name','jyqy__name','jydd','submittime','accept')
return HttpResponse(transjson(total,a),content_type="application/json") return HttpResponse(transjson(total,a),content_type="application/json")
elif a == 'exportexcel': elif a == 'exportexcel':
userid = req.session['userid'] userid = req.session['userid']
@ -3560,6 +3623,15 @@ def apisuggest(req):
obj.save() obj.save()
Suggestflow.objects.create(suggest=obj,user=User.objects.get(userid=userid),action='转交'+user.name+'评估') Suggestflow.objects.create(suggest=obj,user=User.objects.get(userid=userid),action='转交'+user.name+'评估')
return JsonResponse({"code":1}) return JsonResponse({"code":1})
elif 'accept' in data:
if data['accept'] == 'no':
obj.jyzt = 4
obj.todouser = None
obj.jyfk = data['jyfk']
obj.accept = 0
obj.save()
Suggestflow.objects.create(suggest=obj,user=User.objects.get(userid=userid),action='未采纳该建议')
return JsonResponse({"code":1})
else: else:
obj.jyzt = 4 obj.jyzt = 4
obj.todouser = None obj.todouser = None
@ -3620,7 +3692,7 @@ def apitool(req):
return JsonResponse({'code':1,'clist':clist}) return JsonResponse({'code':1,'clist':clist})
elif a == 'correct_train_qr': elif a == 'correct_train_qr':
for i in Train.objects.all(): for i in Train.objects.all():
i.checkqr = makeqr2('https://safeyun.ctcshe.com/miniprogram/checktrain?trainid='+str(i.trainid)) i.checkqr = makeqr_train('https://safeyun.ctcshe.com/miniprogram/checktrain?trainid='+str(i.trainid))
i.save() i.save()
return JsonResponse({'code':1}) return JsonResponse({'code':1})
elif a == 'correct_teacher': elif a == 'correct_teacher':
@ -3631,12 +3703,17 @@ def apitool(req):
return JsonResponse({'code':1}) return JsonResponse({'code':1})
elif a == 'correct_riskact_qr': elif a == 'correct_riskact_qr':
for i in RiskAct.objects.all(): for i in RiskAct.objects.all():
i.qrcode = makeqr3('https://safeyun.ctcshe.com/miniprogram/riskact?id='+str(i.id)) i.qrcode = makeqr_riskact('https://safeyun.ctcshe.com/miniprogram/riskact?id='+str(i.id))
i.save() i.save()
return JsonResponse({'code':1}) return JsonResponse({'code':1})
elif a == 'correct_examtest_qr': elif a == 'correct_examtest_qr':
for i in ExamTest.objects.all(): for i in ExamTest.objects.all():
i.qrcode = makeqr3('https://safeyun.ctcshe.com/miniprogram/examtest?id='+str(i.id)) i.qrcode = makeqr_examtest('https://safeyun.ctcshe.com/miniprogram/examtest?id='+str(i.id))
i.save()
return JsonResponse({'code':1})
elif a == 'correct_area_qr':
for i in Area.objects.all():
i.qrcode = makeqr_area('https://safeyun.ctcshe.com/miniprogram/area?id='+str(i.id))
i.save() i.save()
return JsonResponse({'code':1}) return JsonResponse({'code':1})
elif a == 'correct_risk': elif a == 'correct_risk':
@ -3681,11 +3758,23 @@ def apitool(req):
newpart = req.GET.get('part') newpart = req.GET.get('part')
username = req.GET.get('username') username = req.GET.get('username')
user = User.objects.get(username=username) user = User.objects.get(username=username)
oldpart = user.ubelongpart
oldpart.aqy = oldpart.aqy.replace(','+str(user.userid)+',','')
oldpart.bmzg = oldpart.bmzg.replace(','+str(user.userid)+',','')
oldpart.bsq = oldpart.bsq.replace(','+str(user.userid)+',','')
oldpart.save()
part = Partment.objects.get(partid=newpart) part = Partment.objects.get(partid=newpart)
companyid = part.partlink.split(',')[1] if part.iscompany==1:
usecomp = part
else:
usecomp = Partment.objects.get(partid=part.partlink.split(',')[1])
user.ubelongpart = part user.ubelongpart = part
user.usecomp = Partment.objects.get(partid=companyid) user.usecomp = usecomp
user.save() user.save()
for i in Group.objects.filter(usecomp=usecomp):
i.users.remove(user)
groupobj = Group.objects.filter(usecomp=usecomp,grouptype=3).first()
groupobj.users.add(user)
return JsonResponse({"code":1}) return JsonResponse({"code":1})
elif a == 'correctionzs': elif a == 'correctionzs':
objs = Socertificate.objects.all() objs = Socertificate.objects.all()
@ -3928,13 +4017,14 @@ def apioperation(req):
obj.zyzt = {'zyzt':'确认中','index':0} obj.zyzt = {'zyzt':'确认中','index':0}
obj.save() obj.save()
splc = [] splc = []
splc.append({'jdmc':'作业部门审批','spr':getspr(obj.zybm)}) splc.append({'jdmc':'作业负责人审批','sprs':[userid]})
splc.append({'jdmc':'属地部门审批','spr':getspr(obj.sdbm)}) splc.append({'jdmc':'作业部门审批','sprs':getsprs(obj.zybm)})
splc.append({'jdmc':'属地部门审批','sprs':getsprs(obj.sdbm)})
for i in Operationspjd.objects.filter(zylx=obj.zylx,usecomp=Partment.objects.get(partid=getcompany(userid))).order_by('id'): for i in Operationspjd.objects.filter(zylx=obj.zylx,usecomp=Partment.objects.get(partid=getcompany(userid))).order_by('id'):
splc.append({'jdmc':i.jdmc,'spr':i.spr.userid}) splc.append({'jdmc':i.jdmc,'sprs':i.sprs})
obj.zyzt['splc']=splc obj.zyzt['splc']=splc
obj.save() obj.save()
Operspxq.objects.create(oper=obj,jdmc='作业负责人审批',spr=obj.zyfzr,checked=1,spbm=obj.zyfzr.ubelongpart) # Operspxq.objects.create(oper=obj,jdmc='作业负责人审批',spr=obj.zyfzr,checked=1,spbm=obj.zyfzr.ubelongpart)
b=[]#发送通知 b=[]#发送通知
for i in data['zyry']: for i in data['zyry']:
x=User.objects.get(userid=i) x=User.objects.get(userid=i)
@ -3989,7 +4079,7 @@ def apioperation(req):
for x in b: for x in b:
i.append(x.oper.zyid) i.append(x.oper.zyid)
a = Operation.objects.filter(usecomp=usecomp,deletemark=1,zyid__in=i) a = Operation.objects.filter(usecomp=usecomp,deletemark=1,zyid__in=i)
a = (a|Operation.objects.filter(todouser=User.objects.get(userid=userid))).order_by('-submittime') a = (a|Operation.objects.filter(todouser=User.objects.get(userid=userid))|Operation.objects.filter(todousers__contains=[userid])).order_by('-submittime')
total = a.count() total = a.count()
startnum,endnum=fenye(req) startnum,endnum=fenye(req)
a = a[startnum:endnum].values('zyid','zylx__dickeyname','zynum','zyfzr__name','zynr','zyzt','submittime') a = a[startnum:endnum].values('zyid','zylx__dickeyname','zynum','zyfzr__name','zynr','zyzt','submittime')
@ -4028,7 +4118,8 @@ def apioperation(req):
return res return res
elif a == 'qrzy': elif a == 'qrzy':
userid = req.session['userid'] userid = req.session['userid']
zyid = req.POST.get('zyid') data = json.loads(req.body.decode('utf-8'))
zyid = data['zyid']
Operzyry.objects.filter(oper__zyid=zyid,operzyry__userid=userid).update(checked=1) Operzyry.objects.filter(oper__zyid=zyid,operzyry__userid=userid).update(checked=1)
if Operzyry.objects.filter(oper__zyid=zyid,checked=0).exists(): if Operzyry.objects.filter(oper__zyid=zyid,checked=0).exists():
pass pass
@ -4039,14 +4130,57 @@ def apioperation(req):
obj.zyzt['index'] = 0 obj.zyzt['index'] = 0
index = obj.zyzt['index'] index = obj.zyzt['index']
obj.zyzt['jdmc'] = obj.zyzt['splc'][index]['jdmc'] obj.zyzt['jdmc'] = obj.zyzt['splc'][index]['jdmc']
obj.todouser = User.objects.get(userid=obj.zyzt['splc'][index]['spr']) if 'sprs' in obj.zyzt['splc'][index]:
sprs = obj.zyzt['splc'][index]['sprs']
else:
sprs = [obj.zyzt['splc'][index]['spr']]
obj.todousers = sprs
obj.save() obj.save()
for i in sprs:
postdict={
'touser':'',
'template_id':User.objects.get(userid=i).openid,
'data':{
'first':{
'value':obj.zylx.dickeyname + '作业审批:'
},
'keyword1':{
'value':obj.zynr
},
'keyword2':{
'value':obj.kssj
},
'keyword3':{
'value':obj.zydd
},
'remark':{
'value':'请您及时完成审批!'
}
}
}
send_wechatmsg.delay(postdict)
return JsonResponse({"code":1})
elif a == 'spzy':
userid = req.session['userid']
data = json.loads(req.body.decode('utf-8'))
zyid = data['zyid']
obj = Operation.objects.get(zyid=zyid)
oldtodo = obj.todousers
oldjdmc = obj.zyzt['jdmc']
nextindex = obj.zyzt['index']+1
spruser = User.objects.get(userid=userid)
if 'zzsp' in data:
obj.zyzt['zyzt'] = '待关闭'
obj.todouser = obj.zyfzr
obj.todousers = None
obj.save()
Operspxq.objects.create(oper=Operation.objects.get(zyid=zyid),jdmc=oldjdmc,spr=spruser,checked=1,spbm=spruser.ubelongpart)
postdict={ postdict={
'touser':'', 'touser':'',
'template_id':obj.todouser.openid, 'template_id':obj.zyfzr.openid,
'data':{ 'data':{
'first':{ 'first':{
'value':obj.zylx.dickeyname + '作业审批:' 'value':obj.zylx.dickeyname + '作业审批通过:'
}, },
'keyword1':{ 'keyword1':{
'value':obj.zynr 'value':obj.zynr
@ -4058,53 +4192,79 @@ def apioperation(req):
'value':obj.zydd 'value':obj.zydd
}, },
'remark':{ 'remark':{
'value':'请您及时完成审批!' 'value':'你是作业负责人,可以开始作业,作业完成请及时关闭!'
} }
} }
} }
send_wechatmsg.delay(postdict) send_wechatmsg.delay(postdict)
return JsonResponse({"code":1}) return JsonResponse({"code":1})
elif a == 'spzy': if 'zjsp' in data:
zyid = req.POST.get('zyid') newsprs = data['newsprs']#新审批人
obj = Operation.objects.get(zyid=zyid) obj.todousers = newsprs
oldtodo = obj.todouser obj.save()
oldjdmc = obj.zyzt['jdmc'] for i in newsprs:
nextindex = obj.zyzt['index']+1 postdict={
'touser':'',
'template_id':User.objects.get(userid=i).openid,
'data':{
'first':{
'value':obj.zylx.dickeyname + '作业审批:'
},
'keyword1':{
'value':obj.zynr
},
'keyword2':{
'value':obj.kssj
},
'keyword3':{
'value':obj.zydd
},
'remark':{
'value':'请您及时完成审批!'
}
}
}
send_wechatmsg.delay(postdict)
Operspxq.objects.create(oper=Operation.objects.get(zyid=zyid),jdmc=oldjdmc,spr=spruser,checked=2,spbm=spruser.ubelongpart)
return JsonResponse({"code":1})
try: try:
nextsplc = obj.zyzt['splc'][nextindex] nextsplc = obj.zyzt['splc'][nextindex]
obj.zyzt['zyzt'] = '审批中' obj.zyzt['zyzt'] = '审批中'
obj.zyzt['index'] = nextindex obj.zyzt['index'] = nextindex
obj.zyzt['jdmc'] = nextsplc['jdmc'] obj.zyzt['jdmc'] = nextsplc['jdmc']
obj.todouser = User.objects.get(userid=nextsplc['spr']) obj.todousers = nextsplc['sprs']
obj.save() obj.save()
postdict={ for i in nextsplc['sprs']:
'touser':'', postdict={
'template_id':obj.todouser.openid, 'touser':'',
'data':{ 'template_id':User.objects.get(userid=i).openid,
'first':{ 'data':{
'value':obj.zylx.dickeyname + '作业审批:' 'first':{
}, 'value':obj.zylx.dickeyname + '作业审批:'
'keyword1':{ },
'value':obj.zynr 'keyword1':{
}, 'value':obj.zynr
'keyword2':{ },
'value':obj.kssj 'keyword2':{
}, 'value':obj.kssj
'keyword3':{ },
'value':obj.zydd 'keyword3':{
}, 'value':obj.zydd
'remark':{ },
'value':'请您及时完成审批!' 'remark':{
'value':'请您及时完成审批!'
}
} }
} }
} send_wechatmsg.delay(postdict)
send_wechatmsg.delay(postdict)
Operspxq.objects.create(oper=Operation.objects.get(zyid=zyid),jdmc=oldjdmc,spr=oldtodo,checked=1,spbm=oldtodo.ubelongpart) Operspxq.objects.create(oper=Operation.objects.get(zyid=zyid),jdmc=oldjdmc,spr=spruser,checked=1,spbm=spruser.ubelongpart)
except : except :
obj.zyzt['zyzt'] = '待关闭' obj.zyzt['zyzt'] = '待关闭'
obj.todouser = obj.zyfzr obj.todouser = None
obj.todousers = [obj.zyfzr.userid]
obj.save() obj.save()
Operspxq.objects.create(oper=Operation.objects.get(zyid=zyid),jdmc=oldjdmc,spr=oldtodo,checked=1,spbm=oldtodo.ubelongpart) Operspxq.objects.create(oper=Operation.objects.get(zyid=zyid),jdmc=oldjdmc,spr=spruser,checked=1,spbm=spruser.ubelongpart)
postdict={ postdict={
'touser':'', 'touser':'',
'template_id':obj.zyfzr.openid, 'template_id':obj.zyfzr.openid,
@ -4137,13 +4297,14 @@ def apioperation(req):
obj.zyimg2 = '?'.join(zyimg2) obj.zyimg2 = '?'.join(zyimg2)
obj.zyzt['zyzt']='已关闭' obj.zyzt['zyzt']='已关闭'
obj.todouser = None obj.todouser = None
obj.todousers = None
obj.save() obj.save()
return JsonResponse({"code":1}) return JsonResponse({"code":1})
elif a == 'todonum': elif a == 'todonum':
userid = req.session['userid'] userid = req.session['userid']
i = [] i = []
b = Operzyry.objects.filter(operzyry__userid=userid,checked=0) b = Operzyry.objects.filter(operzyry__userid=userid,checked=0)
c = Operation.objects.filter(todouser=User.objects.get(userid=userid)) c = Operation.objects.filter(Q(todouser=User.objects.get(userid=userid))|Q(todousers__contains=[userid]))
for x in b: for x in b:
i.append(x.oper.zyid) i.append(x.oper.zyid)
for x in c: for x in c:
@ -4227,8 +4388,9 @@ def apioperationspjd(req):
zylx = Dickey.objects.get(dickeyid=data['zylx']) zylx = Dickey.objects.get(dickeyid=data['zylx'])
jdmc = data['jdmc'] jdmc = data['jdmc']
spbm = Partment.objects.get(partid=data['spbm']) spbm = Partment.objects.get(partid=data['spbm'])
spr = User.objects.get(userid=data['spr']) #spr = User.objects.get(userid=data['spr'])
Operationspjd.objects.create(jdmc=jdmc,zylx=zylx,spbm=spbm,spr=spr,usecomp=Partment.objects.get(partid=companyid)) sprs = data['spr']
Operationspjd.objects.create(jdmc=jdmc,zylx=zylx,spbm=spbm,sprs=sprs,usecomp=Partment.objects.get(partid=companyid))
return JsonResponse({"code":1}) return JsonResponse({"code":1})
elif a=='listall': elif a=='listall':
if req.GET.get('zylx'): if req.GET.get('zylx'):
@ -4237,8 +4399,9 @@ def apioperationspjd(req):
companyid = getcompany(userid) companyid = getcompany(userid)
a = Operationspjd.objects.filter(zylx=Dickey.objects.get(dickeyid=zylx),usecomp=Partment.objects.get(partid=companyid)).order_by('id') a = Operationspjd.objects.filter(zylx=Dickey.objects.get(dickeyid=zylx),usecomp=Partment.objects.get(partid=companyid)).order_by('id')
total = a.count() total = a.count()
startnum,endnum=fenye(req) a = a.values('id','jdmc','spbm__partname','sprs')
a = a[startnum:endnum].values('id','jdmc','spbm__partname','spr__name') for i in a:
i['sprnames'] = list(User.objects.filter(userid__in=i['sprs']).values_list('name',flat=True))
return HttpResponse(transjson(total,a),content_type="application/json") return HttpResponse(transjson(total,a),content_type="application/json")
elif a == 'del': elif a == 'del':
id = req.GET.get('id') id = req.GET.get('id')
@ -4506,7 +4669,7 @@ def apiexamtest(req):
obj.duration = data['duration'] obj.duration = data['duration']
obj.createuser = User.objects.get(userid=userid) obj.createuser = User.objects.get(userid=userid)
obj.save() obj.save()
obj.qrcode = makeqr4('https://safeyun.ctcshe.com/miniprogram/examtest?id='+str(obj.id)) obj.qrcode = makeqr_examtest('https://safeyun.ctcshe.com/miniprogram/examtest?id='+str(obj.id))
obj.save() obj.save()
ksry = data['participant'].split(',') ksry = data['participant'].split(',')
b = [] b = []
@ -4584,7 +4747,7 @@ def apiexamtest(req):
obj.passscore = data['passscore'] obj.passscore = data['passscore']
obj.duration = data['duration'] obj.duration = data['duration']
obj.createuser = User.objects.get(userid=userid) obj.createuser = User.objects.get(userid=userid)
obj.qrcode = makeqr4('https://safeyun.ctcshe.com/miniprogram/examtest?id='+str(obj.id)) obj.qrcode = makeqr_examtest('https://safeyun.ctcshe.com/miniprogram/examtest?id='+str(obj.id))
obj.save() obj.save()
ksry = data['participant'].split(',') ksry = data['participant'].split(',')
b = [] b = []
@ -4745,7 +4908,7 @@ def apiexamtestdetail(req):
elif a == 'detail': elif a == 'detail':
id = req.GET.get('id') id = req.GET.get('id')
obj = ExamTestDetail.objects.filter(id=id) obj = ExamTestDetail.objects.filter(id=id)
data = obj.values('id','starttime','took','score','testdetail')[0] data = obj.values('id','starttime','took','score','passcode','testdetail','examtest__name','user__headimgurl','user__name')[0]
return JsonResponse(data) return JsonResponse(data)
def apitrain(req): def apitrain(req):
@ -4857,7 +5020,8 @@ def apiarea(req):
return JsonResponse({"code":0}) return JsonResponse({"code":0})
map = data['map'] map = data['map']
order = data['order'] order = data['order']
Area.objects.create(name = name,order=order,belongmap=Map.objects.get(id=map),usecomp=Partment.objects.get(partid=companyid)) obj = Area.objects.create(name = name,order=order,belongmap=Map.objects.get(id=map),usecomp=Partment.objects.get(partid=companyid))
makeqr_area('https://safeyun.ctcshe.com/miniprogram/area?id='+str(obj.id))
return JsonResponse({"code":1}) return JsonResponse({"code":1})
elif a == 'del': elif a == 'del':
if User.objects.get(userid=userid).issuper==1: if User.objects.get(userid=userid).issuper==1:
@ -4866,7 +5030,7 @@ def apiarea(req):
else: else:
return JsonResponse({"code":0}) return JsonResponse({"code":0})
elif a == 'detail': elif a == 'detail':
obj = Area.objects.filter(deletemark=1,id=req.GET.get('id')).values('id','name','polygon','order')[0] obj = Area.objects.filter(deletemark=1,id=req.GET.get('id')).values('id','name','polygon','order','qrcode')[0]
return JsonResponse(obj) return JsonResponse(obj)
elif a == 'edit': elif a == 'edit':
data = json.loads(req.body.decode('utf-8')) data = json.loads(req.body.decode('utf-8'))
@ -5078,6 +5242,13 @@ def apiriskact(req):
startnum,endnum=fenye(req) startnum,endnum=fenye(req)
a = a.order_by('area')[startnum:endnum].values('id','area__name','type__dickeyname','name','level','qrcode','group__groupname','zrbm__partname','zrr__name','gkcj') a = a.order_by('area')[startnum:endnum].values('id','area__name','type__dickeyname','name','level','qrcode','group__groupname','zrbm__partname','zrr__name','gkcj')
return HttpResponse(transjson(total,a),content_type="application/json") return HttpResponse(transjson(total,a),content_type="application/json")
elif a=='listall2':
a = RiskAct.objects
if req.GET.get('area'):
a = a.filter(area__id = req.GET.get('area'))
total = a.count()
a = a.values('id','area__name','type__dickeyname','name','level','qrcode','group__groupname','zrbm__partname','zrr__name','gkcj')
return HttpResponse(transjson(total,a),content_type="application/json")
elif a=='listself': elif a=='listself':
groups = Group.objects.filter(users=User.objects.get(userid=userid)) groups = Group.objects.filter(users=User.objects.get(userid=userid))
objs = RiskAct.objects.filter(group__in=groups) objs = RiskAct.objects.filter(group__in=groups)
@ -5102,7 +5273,7 @@ def apiriskact(req):
obj.zrr = User.objects.get(userid=data['zrr']) obj.zrr = User.objects.get(userid=data['zrr'])
obj.group = Group.objects.get(groupid=data['group']) obj.group = Group.objects.get(groupid=data['group'])
obj.save() obj.save()
obj.qrcode = makeqr3('https://safeyun.ctcshe.com/miniprogram/riskact?id='+str(obj.id)) obj.qrcode = makeqr_riskact('https://safeyun.ctcshe.com/miniprogram/riskact?id='+str(obj.id))
obj.save() obj.save()
return JsonResponse({'code':1}) return JsonResponse({'code':1})
elif a == 'edit': elif a == 'edit':
@ -5441,8 +5612,8 @@ def apiriskacttask(req):
startnum,endnum=fenye(req) startnum,endnum=fenye(req)
objs = objs[startnum:endnum].values('id','riskact__group__groupname','riskact__area__name','riskact__type__dickeyname','riskact__id','riskact__group__groupid','riskact__name','riskact__level','riskact__tasktype','taskadd','taskexpire','user__userid','usable') objs = objs[startnum:endnum].values('id','riskact__group__groupname','riskact__area__name','riskact__type__dickeyname','riskact__id','riskact__group__groupid','riskact__name','riskact__level','riskact__tasktype','taskadd','taskexpire','user__userid','usable')
return HttpResponse(transjson(total,objs),content_type="application/json") return HttpResponse(transjson(total,objs),content_type="application/json")
elif a == 'listself': elif a == 'listself':#排查记录
a = RiskActTask.objects.filter(user__userid=userid,istask=1) a = RiskActTask.objects.filter(user__userid=userid)
total = a.count() total = a.count()
startnum,endnum=fenye(req) startnum,endnum=fenye(req)
a = a.order_by('-id')[startnum:endnum].values('id','riskact__level','riskact__name','riskact__area__name','riskact__place','taskdo','state','usable','riskact__group__groupname','taskadd','taskexpire','user__userid','riskact__id') a = a.order_by('-id')[startnum:endnum].values('id','riskact__level','riskact__name','riskact__area__name','riskact__place','taskdo','state','usable','riskact__group__groupname','taskadd','taskexpire','user__userid','riskact__id')