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('\\','/')
img.save(filepath)
return filepath
def makeqr2(data):
def makeqr_train(data):
upload_folder = 'media/qr_train'
if not os.path.exists(upload_folder):
os.mkdir(upload_folder)
@ -26,7 +26,7 @@ def makeqr2(data):
img.save(filepath)
return filepath
def makeqr3(data):
def makeqr_riskact(data):
upload_folder = 'media/qr_riskact'
if not os.path.exists(upload_folder):
os.mkdir(upload_folder)
@ -35,7 +35,7 @@ def makeqr3(data):
img.save(filepath)
return filepath
def makeqr4(data):
def makeqr_examtest(data):
upload_folder = 'media/qr_examtest'
if not os.path.exists(upload_folder):
os.mkdir(upload_folder)
@ -44,6 +44,15 @@ def makeqr4(data):
img.save(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):
wb = load_workbook(path)
sheet = wb.worksheets[0]
@ -274,7 +283,7 @@ def drrisks(companyid,path):
if users.exists():
obj.zrr = users[0]
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()
a = Risk()
a.riskact=obj

View File

@ -119,13 +119,17 @@ def api(req):
elif a == 'del':
id =req.GET.get('id')
userid = req.session['userid']
companyid = getcompany(userid)#公司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.save()
return JsonResponse({"code":1})
else:
return JsonResponse({"code":0})
#点击阅读
elif a=='readnumber':
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'}))
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_fax = forms.CharField(max_length=13, label='联系人传真', widget=forms.TextInput(attrs={'size': '50'}))
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
import uuid
import django.utils.timezone as timezone
from django.contrib.postgres.fields import JSONField
from django.contrib.postgres.fields import JSONField,ArrayField
import jwt
import datetime
# Create your models here.
@ -120,6 +120,7 @@ class Trouble(models.Model):#隐患排查
(3, '复查未通过'),
(4, '已修改'),
(5,'评估未通过'),
(6,'未采纳'),
)
deletemark=models.IntegerField(default='1')
troubleid = models.AutoField(primary_key=True)
@ -212,7 +213,7 @@ class Observe(models.Model):#行为观察
lookplace = models.CharField(max_length=200)
looktime = models.DateTimeField(default = timezone.now)
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) #观察部门
looker = models.ForeignKey(User,related_name='gcr',default='1', on_delete=models.CASCADE)#观察人
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) #预计完成时间
sjwcsj = models.DateTimeField(null=True,blank=True) #实际完成时间
shyj = models.CharField(max_length=1000,null=True,blank=True) #审核意见
accept = models.IntegerField(default=1)
class Suggestflow(models.Model):#建议流程
id = models.AutoField(primary_key=True)
@ -464,6 +466,7 @@ class Operation(models.Model):#作业表
zyzt = JSONField()
fxcs = models.CharField(max_length=200)
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)
class Fxcs(models.Model):#作业分析措施
@ -506,12 +509,13 @@ class Operzyry(models.Model):#作业确认人
modifytime = models.DateTimeField(auto_now = True)
submittime = models.DateTimeField(default = timezone.now)
class Operationspjd(models.Model):#作业审批节点
class Operationspjd(models.Model):#作业审批节点配置
id = models.AutoField(primary_key=True)
zylx = models.ForeignKey(Dickey, on_delete=models.CASCADE,null=True,blank=True)
jdmc = models.CharField(max_length=100)
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)#审批部门
sprs = ArrayField(models.IntegerField(), blank=True,null=True)
submittime = models.DateTimeField(u'创建时间',default = timezone.now)
modifytime = models.DateTimeField(auto_now = 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='法人电话')
liaison = 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='公司概况')
createtime = models.DateTimeField(auto_now_add=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)
downnum = models.IntegerField(default=0)
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')
return HttpResponse(json.dumps(list(list_items)),content_type="application/json")
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")
elif a == 'add':
data = json.loads(req.body.decode('utf-8'))
@ -129,7 +129,7 @@ def lawstype(req):
id = req.GET.get('id')
user = User.objects.get(userid=userid)
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)
return JsonResponse({"code":1})
else:
@ -139,7 +139,7 @@ def lawstype(req):
elif a == 'canedit':
id = req.GET.get('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})
else:
return JsonResponse({"code":0})
@ -169,7 +169,7 @@ def lawstype(req):
id =req.GET.get('id')
userid = req.session['userid']
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.save()
return JsonResponse({"code":1})

View File

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

View File

@ -148,6 +148,9 @@
.icon-edu{
background:url('icons/edu.png') no-repeat center center;
}
.icon-gmt {
background: url('icons/gmt.png') no-repeat center center;
}
.icon-regulationstype {
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;
w = obj.width || w;
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
//生成canvas
var canvas = document.createElement('canvas');
@ -45,9 +56,9 @@ function canvasDataURL(path, obj, callback) {
canvas.setAttributeNode(anh);
ctx.drawImage(that, 0, 0, w, h);
// 图像质量
if (obj.quality && obj.quality <= 1 && obj.quality > 0) {
quality = obj.quality;
}
// if (obj.quality && obj.quality <= 1 && obj.quality > 0) {
// quality = obj.quality;
// }
// quality值越小所绘制出的图像越模糊
var base64 = canvas.toDataURL('image/jpeg', quality);
// 回调函数返回base64的值
@ -62,7 +73,6 @@ function convertBase64UrlToBlob(urlData) {
}
return new Blob([u8arr], { type: mime });
}
//取消上传
function cancleUploadFile() {

View File

@ -301,7 +301,16 @@
$("#yhms").textbox('disable');
$('#fcyjdiv,#file2,#zgxq,#shyjdiv,#csyj,#reject').hide(); $('#jxpg').show();
$("#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) {
// $("#yhpg").combobox('setValue', data.yhpg__dickeyid).combobox('readonly');
// $("#yhlx").combobox({ url: 'getdicclass?dicid=15' }).combobox('setValue', data.yhlx__dicid).combobox('readonly');

View File

@ -6,6 +6,12 @@
</div>
<div data-options="region:'center'" style="height:100%;padding:15px 15px;">
<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">
<input id="lookeder" name="lookeder" class="easyui-textbox" style="width:480px"
data-options="label:'被观察人员'" required=true>
@ -68,6 +74,12 @@
</div>
</div>
<script>
function aaa(x) {
if (x == "lookers") {
$('#lookers').attr('value', top.$('#in').val());
$('#lookersname').textbox('setValue', top.$('#in').attr('show'));
}
}
function getunsafe() {
obj = document.getElementsByName("unsafe");
check_val = [];

View File

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

View File

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

View File

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

View File

@ -120,7 +120,7 @@
<tr>
<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);
},">
</td>
@ -135,7 +135,7 @@
<a class="list" href="javascript:;">
<input id="file" type="file" name="myfile" onchange="UpladFile();" /><span>选择视频</span>
</a>
<button class="btn" type="button" onclick="sub();">上传</button>
<!--<button class="btn" type="button" onclick="sub();">上传</button>-->
</p>
<!--显示消失-->
@ -220,37 +220,35 @@
$(".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 = "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 {
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) {

View File

@ -135,7 +135,7 @@
<tr>
<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);
},">
</td>
@ -150,7 +150,7 @@
<a class="list" href="javascript:;">
<input id="file" type="file" name="myfile" onchange="UpladFile();" /><span>选择文件</span>
</a>
<button class="btn" type="button" onclick="sub();">上传</button>
<!--<button class="btn" type="button" onclick="sub();">上传</button>-->
<a class="el-upload-list__item-name">
<i class="el-icon-document"></i><span class="ploadname" id="fileName">上传文件名称</span>
</a>
@ -228,7 +228,30 @@
$(".el-upload-list").css("display", "block");
$(".el-upload-list li").css("border", "1px solid #20a0ff");
$("#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 {
@ -236,35 +259,7 @@
}
}
/*点击提交*/
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) {
// event.total是需要传输的总字节event.loaded是已经传输的字节。如果event.lengthComputable不为真则event.total等于0

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

View File

@ -99,7 +99,7 @@
<tr>
<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>
</tr>
@ -113,7 +113,7 @@
<tr>
<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);
},">
</td>
@ -158,7 +158,7 @@
<a class="list" href="javascript:;">
<input id="file" type="file" name="maragepath" onchange="UpladFile();" /><span>选择文件</span>
</a>
<button class="btn" type="button" onclick="sub();">上传</button>
</p>
<!--显示消失-->
@ -219,7 +219,7 @@
success: function (data) {
if (data.code == 1) {
alert("数据保存!");
$('#edutab').datagrid('reload');
$('#tmtable').datagrid('reload');
$("#dd").dialog("close");
} else { $.messager.alert('提示', '失败!'); }
$('#submitb').linkbutton('enable');
@ -241,37 +241,37 @@
//$("#maragename").text(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 {
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) {

View File

@ -263,7 +263,7 @@ float: left;">
<div style="width:70%;float:left;height:100%;margin-top: 10px;" align=center>
<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,"
align=center style="height:100%">
<div id='gzbqst' style="width:90%;height:500px;"></div>
@ -326,6 +326,12 @@ float: left;">
</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">
//首页总数统计
$.ajax({
@ -372,13 +378,12 @@ float: left;">
<script>
var data=JSON.parse(localStorage.getItem("data"));
bindmap9('gzbqst')
if(data.rights.indexOf('30')!=-1){ //有无地图功能
$('#panelx').panel({
href:'html/mapshow',
title:'地图展示'
})
}else{
bindmap9('gzbqst')
}
$("#sfxbm").combotree({
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: 'actname', 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: 'otherunsafe', title: '过程和交流记录', width: 300 },
]]

View File

@ -14,7 +14,10 @@
</tr>
<tr>
<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>
<td>开始时间:{{looktime| dateFormat 'yyyy-MM-dd hh:mm'}}</td>

View File

@ -13,7 +13,7 @@
required=true />
</div>
<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 />
</div>
</form>
@ -22,9 +22,13 @@
<script>
$('#spbm').combotree({ url: 'parthandle?a=tree', loadFilter: function(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() {
var spjddata = $('#spjdff').serializeJSON();
spjddata['spr'] = $('#spr').combobox('getValues')
console.log(spjddata)
spjddata['zylx'] = $('#zylxlist').datalist('getSelected').value
$.ajax({
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 name="right" type="radio" value="B" />
</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>
</div>
</div>

View File

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

View File

@ -106,6 +106,7 @@
//$('#station').combobox('setValue',res.station__groupid)
$('#label').textbox('setValue',res.label)
$('#title').textbox('setValue',res.title)
$('#resolution').textbox('setValue',res.resolution)
for(var key in res.answer){
$('#'+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="Bcheck" name="right" type="radio" value="B" />
</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>
</div>
</div>
@ -83,6 +87,7 @@
// $('#station').combobox('setValue',res.station__groupid)
$('#label').textbox('setValue',res.label)
$('#title').textbox('setValue',res.title)
$('#resolution').textbox('setValue',res.resolution)
for(var key in res.answer){
$('#'+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:'具体位置'"
/>
</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">
<select id="gkcj" class="easyui-combobox" name="gkcj" style="width:480px" data-options="label:'管控层级'"
required=true editable=false>
@ -80,7 +84,7 @@
$('#fxdmc').textbox('setValue',data.name)
$('#jtwz').textbox('setValue',data.place)
$('#qrcode').attr('src',data.qrcode)
$('#group').combobox('setValue', res.group__groupid)
$('#group').combobox('setValue', data.group__groupid)
$("#zrbm").combotree({
url: 'parthandle?a=tree',
onSelect: function (node) {

View File

@ -94,6 +94,20 @@
{ field: 'dqxz', title: '当前现状', width: 200 },
{ field: 'jynr', 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(){

View File

@ -116,12 +116,13 @@
{ field: 'todouser__userid', 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) {
case 1: return ''; break;
case 2: return 'background-color:red;'; break;
case 3: return 'background-color:red;'; break;
case 4: return 'background-color:yellow;'; break;
case 6: return 'background-color:yellow;'; break;
}
}, formatter: function (value, row, index) {
switch (value) {
@ -130,6 +131,7 @@
case 3: return '复查未通过'; break;
case 4: return '已修改'; break;
case 5: return '评估未通过'; break;
case 6: return '未采纳'; break;
}
}
},

View File

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

View File

@ -148,7 +148,7 @@ urlpatterns = [
#path('api/riskactcheck',views.apiriskactcheck),
path('api/riskcheck2',views.apiriskcheck2),
path('api/report',views.apireport),
path('html/examhistory/<int:id>/',views.examhistory),
#path('api/rights/group/<int:groupid>',views.rightsgroup),
@ -172,4 +172,5 @@ urlpatterns = [
path('datashow/charthandle', views.charthandle),
path('companyinfo/', views.companyinfo),
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
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 .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 .safespider import getTzzs,getAqzs
from duibiao import calsim
@ -135,6 +135,8 @@ def exampaperadd(req):
return render(req,'exampaperadd.html')
def exampaper(req):
return render(req,'exampaper.html')
def examhistory(req,id):
return render(req,'examhistory.html',{'id':id})
def questionadd(req):
return render(req,'questionadd.html')
def questionadd2(req):
@ -480,6 +482,32 @@ def getspr(ubp):
return User.objects.get(ubelongpart=currentpart,issuper=1)
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
def menutree(req):
userid = req.session['userid']
@ -945,29 +973,55 @@ def accessyh(req):
return JsonResponse({"code":1})
elif a.yhzt==1:
if yhdata['shresult'] == 'reject':
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':'请查看评估意见并修改后上传。'}
if 'accept' in yhdata:
if yhdata['accept'] == 'no':
a.shresult = 6
a.yhzt = 6
a.sybzt = 1
a.todouser = None
a.pgyj = yhdata['pgyj']
a.save()
m=TroubleAccess(troubleid=a,clr=a.pgr,yhzt=6,action='未采纳',opinion=yhdata['pgyj'])
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.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
send_wechatmsg.delay(postdict)
return JsonResponse({"code":1})
postdict['touser']=a.todouser.openid
send_wechatmsg.delay(postdict)
return JsonResponse({"code":1})
elif 'zppg' in yhdata and yhdata['zppg']=='yes':
a.yhzt=1
a.sybzt=1
@ -1213,7 +1267,7 @@ def addtrain(req):
a.duration=req.POST.get('duration')
a.trainnum='PX'+time.strftime('%Y%m%d%H%M%S')
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()
plist=req.POST.getlist('trainpart')
ustr = req.POST.get('participant')
@ -1473,13 +1527,15 @@ def troublehandle(req):
userid = req.session['userid']
if User.objects.get(userid = userid).issuper == 1:
a = Trouble.objects.get(troubleid = req.POST.get('troubleid'))
a.delete()
a.deletemark=0
a.save()
return JsonResponse({"code":1})
else:
a = Trouble.objects.get(troubleid = req.POST.get('troubleid'))
b = TroubleAccess.objects.filter(troubleid__troubleid=req.POST.get('troubleid')).count()
if b == 1 and a.fxr.userid==userid:
a.delete()
a.deletemark=0
a.save()
return JsonResponse({"code":1})
else:
return JsonResponse({"code":0})
@ -2543,12 +2599,18 @@ def gchandle(req):
if 'lookimg' in gcdata:
obj.lookimg = '?'.join(gcdata['lookimg'])
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:
olist = gcdata['unsafe']
for i in olist:
dickey = Dickey.objects.get(dickeyid=i)
m = Unsafes(observe = obj,unsafedickey=dickey,unsafedicclass=dickey.dicparent)
m.save()
if i != 0:
dickey = Dickey.objects.get(dickeyid=i)
m = Unsafes(observe = obj,unsafedickey=dickey,unsafedicclass=dickey.dicparent)
m.save()
yjjs_gc.delay(companyid)
return JsonResponse({"code":1})
elif a == 'listall':
@ -2621,9 +2683,10 @@ def gchandle(req):
x['lookimg'] = x['lookimg'].split('?')
else:
x['lookimg']=[]
for key in x:
if x[key] == None:
x[key] = ''
x['lookers']=[]
for i in a[0].lookers.all():
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})
return HttpResponse(json.dumps(x,cls=MyEncoder),content_type="application/json")
elif a == 'getdics':
@ -3345,19 +3408,19 @@ def apipartuser(req):
if req.GET.get('parentid')=='company':
lst=[]
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:
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:
lst.append({'id':i.userid,'name':i.name,'parentId':0,'checked':False,'isPeople':True,'children':[]})
return JsonResponse({"code":1,"data":lst})
else:
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:
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:
lst.append({'id':i.userid,'name':i.name,'parentId':0,'checked':False,'isPeople':True,'children':[]})
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')
total = a.count()
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")
elif a == 'listself':
userid = req.session['userid']
@ -3471,7 +3534,7 @@ def apisuggest(req):
a = Suggest.objects.filter(jyr__userid=userid).order_by('-submittime')
total = a.count()
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")
elif a == 'listtodo':
userid = req.session['userid']
@ -3479,7 +3542,7 @@ def apisuggest(req):
a = Suggest.objects.filter(todouser__userid=userid).order_by('-submittime')
total = a.count()
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")
elif a == 'todonum':
userid = req.session['userid']
@ -3488,7 +3551,7 @@ def apisuggest(req):
elif a == 'detail':
jyid=req.GET.get('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']!='':
x['jyimg'] = x['jyimg'].split('?')
else:
@ -3518,7 +3581,7 @@ def apisuggest(req):
if req.GET.get('jssj'):
a = a.filter(submittime__lte=req.GET.get('jssj'))
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")
elif a == 'exportexcel':
userid = req.session['userid']
@ -3560,6 +3623,15 @@ def apisuggest(req):
obj.save()
Suggestflow.objects.create(suggest=obj,user=User.objects.get(userid=userid),action='转交'+user.name+'评估')
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:
obj.jyzt = 4
obj.todouser = None
@ -3620,7 +3692,7 @@ def apitool(req):
return JsonResponse({'code':1,'clist':clist})
elif a == 'correct_train_qr':
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()
return JsonResponse({'code':1})
elif a == 'correct_teacher':
@ -3631,12 +3703,17 @@ def apitool(req):
return JsonResponse({'code':1})
elif a == 'correct_riskact_qr':
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()
return JsonResponse({'code':1})
elif a == 'correct_examtest_qr':
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()
return JsonResponse({'code':1})
elif a == 'correct_risk':
@ -3681,11 +3758,23 @@ def apitool(req):
newpart = req.GET.get('part')
username = req.GET.get('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)
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.usecomp = Partment.objects.get(partid=companyid)
user.usecomp = usecomp
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})
elif a == 'correctionzs':
objs = Socertificate.objects.all()
@ -3928,13 +4017,14 @@ def apioperation(req):
obj.zyzt = {'zyzt':'确认中','index':0}
obj.save()
splc = []
splc.append({'jdmc':'作业部门审批','spr':getspr(obj.zybm)})
splc.append({'jdmc':'属地部门审批','spr':getspr(obj.sdbm)})
splc.append({'jdmc':'作业负责人审批','sprs':[userid]})
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'):
splc.append({'jdmc':i.jdmc,'spr':i.spr.userid})
splc.append({'jdmc':i.jdmc,'sprs':i.sprs})
obj.zyzt['splc']=splc
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=[]#发送通知
for i in data['zyry']:
x=User.objects.get(userid=i)
@ -3989,7 +4079,7 @@ def apioperation(req):
for x in b:
i.append(x.oper.zyid)
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()
startnum,endnum=fenye(req)
a = a[startnum:endnum].values('zyid','zylx__dickeyname','zynum','zyfzr__name','zynr','zyzt','submittime')
@ -4028,7 +4118,8 @@ def apioperation(req):
return res
elif a == 'qrzy':
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)
if Operzyry.objects.filter(oper__zyid=zyid,checked=0).exists():
pass
@ -4039,14 +4130,57 @@ def apioperation(req):
obj.zyzt['index'] = 0
index = obj.zyzt['index']
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()
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={
'touser':'',
'template_id':obj.todouser.openid,
'template_id':obj.zyfzr.openid,
'data':{
'first':{
'value':obj.zylx.dickeyname + '作业审批:'
'value':obj.zylx.dickeyname + '作业审批通过:'
},
'keyword1':{
'value':obj.zynr
@ -4058,53 +4192,79 @@ def apioperation(req):
'value':obj.zydd
},
'remark':{
'value':'请您及时完成审批!'
'value':'你是作业负责人,可以开始作业,作业完成请及时关闭!'
}
}
}
send_wechatmsg.delay(postdict)
return JsonResponse({"code":1})
elif a == 'spzy':
zyid = req.POST.get('zyid')
obj = Operation.objects.get(zyid=zyid)
oldtodo = obj.todouser
oldjdmc = obj.zyzt['jdmc']
nextindex = obj.zyzt['index']+1
return JsonResponse({"code":1})
if 'zjsp' in data:
newsprs = data['newsprs']#新审批人
obj.todousers = newsprs
obj.save()
for i in newsprs:
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:
nextsplc = obj.zyzt['splc'][nextindex]
obj.zyzt['zyzt'] = '审批中'
obj.zyzt['index'] = nextindex
obj.zyzt['jdmc'] = nextsplc['jdmc']
obj.todouser = User.objects.get(userid=nextsplc['spr'])
obj.todousers = nextsplc['sprs']
obj.save()
postdict={
'touser':'',
'template_id':obj.todouser.openid,
'data':{
'first':{
'value':obj.zylx.dickeyname + '作业审批:'
},
'keyword1':{
'value':obj.zynr
},
'keyword2':{
'value':obj.kssj
},
'keyword3':{
'value':obj.zydd
},
'remark':{
'value':'请您及时完成审批!'
for i in nextsplc['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)
Operspxq.objects.create(oper=Operation.objects.get(zyid=zyid),jdmc=oldjdmc,spr=oldtodo,checked=1,spbm=oldtodo.ubelongpart)
send_wechatmsg.delay(postdict)
Operspxq.objects.create(oper=Operation.objects.get(zyid=zyid),jdmc=oldjdmc,spr=spruser,checked=1,spbm=spruser.ubelongpart)
except :
obj.zyzt['zyzt'] = '待关闭'
obj.todouser = obj.zyfzr
obj.todouser = None
obj.todousers = [obj.zyfzr.userid]
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={
'touser':'',
'template_id':obj.zyfzr.openid,
@ -4137,13 +4297,14 @@ def apioperation(req):
obj.zyimg2 = '?'.join(zyimg2)
obj.zyzt['zyzt']='已关闭'
obj.todouser = None
obj.todousers = None
obj.save()
return JsonResponse({"code":1})
elif a == 'todonum':
userid = req.session['userid']
i = []
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:
i.append(x.oper.zyid)
for x in c:
@ -4227,8 +4388,9 @@ def apioperationspjd(req):
zylx = Dickey.objects.get(dickeyid=data['zylx'])
jdmc = data['jdmc']
spbm = Partment.objects.get(partid=data['spbm'])
spr = User.objects.get(userid=data['spr'])
Operationspjd.objects.create(jdmc=jdmc,zylx=zylx,spbm=spbm,spr=spr,usecomp=Partment.objects.get(partid=companyid))
#spr = User.objects.get(userid=data['spr'])
sprs = data['spr']
Operationspjd.objects.create(jdmc=jdmc,zylx=zylx,spbm=spbm,sprs=sprs,usecomp=Partment.objects.get(partid=companyid))
return JsonResponse({"code":1})
elif a=='listall':
if req.GET.get('zylx'):
@ -4237,8 +4399,9 @@ def apioperationspjd(req):
companyid = getcompany(userid)
a = Operationspjd.objects.filter(zylx=Dickey.objects.get(dickeyid=zylx),usecomp=Partment.objects.get(partid=companyid)).order_by('id')
total = a.count()
startnum,endnum=fenye(req)
a = a[startnum:endnum].values('id','jdmc','spbm__partname','spr__name')
a = a.values('id','jdmc','spbm__partname','sprs')
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")
elif a == 'del':
id = req.GET.get('id')
@ -4506,7 +4669,7 @@ def apiexamtest(req):
obj.duration = data['duration']
obj.createuser = User.objects.get(userid=userid)
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()
ksry = data['participant'].split(',')
b = []
@ -4584,7 +4747,7 @@ def apiexamtest(req):
obj.passscore = data['passscore']
obj.duration = data['duration']
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()
ksry = data['participant'].split(',')
b = []
@ -4745,7 +4908,7 @@ def apiexamtestdetail(req):
elif a == 'detail':
id = req.GET.get('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)
def apitrain(req):
@ -4857,7 +5020,8 @@ def apiarea(req):
return JsonResponse({"code":0})
map = data['map']
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})
elif a == 'del':
if User.objects.get(userid=userid).issuper==1:
@ -4866,7 +5030,7 @@ def apiarea(req):
else:
return JsonResponse({"code":0})
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)
elif a == 'edit':
data = json.loads(req.body.decode('utf-8'))
@ -5078,6 +5242,13 @@ def apiriskact(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')
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':
groups = Group.objects.filter(users=User.objects.get(userid=userid))
objs = RiskAct.objects.filter(group__in=groups)
@ -5102,7 +5273,7 @@ def apiriskact(req):
obj.zrr = User.objects.get(userid=data['zrr'])
obj.group = Group.objects.get(groupid=data['group'])
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()
return JsonResponse({'code':1})
elif a == 'edit':
@ -5441,8 +5612,8 @@ def apiriskacttask(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')
return HttpResponse(transjson(total,objs),content_type="application/json")
elif a == 'listself':
a = RiskActTask.objects.filter(user__userid=userid,istask=1)
elif a == 'listself':#排查记录
a = RiskActTask.objects.filter(user__userid=userid)
total = a.count()
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')