题目导入
This commit is contained in:
parent
023709fd9b
commit
26c4d25cbc
|
@ -0,0 +1,15 @@
|
||||||
|
# Generated by Django 2.1.5 on 2019-10-11 14:15
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('safesite', '0272_auto_20190923_1026'),
|
||||||
|
('safesite', '0266_auto_20190917_2314'),
|
||||||
|
('safesite', '0273_auto_20191008_1604'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
]
|
|
@ -0,0 +1,33 @@
|
||||||
|
# Generated by Django 2.1.5 on 2019-10-11 14:15
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('safesite', '0274_merge_20191011_1415'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='user',
|
||||||
|
name='headimgurl',
|
||||||
|
field=models.CharField(blank=True, max_length=200, null=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='user',
|
||||||
|
name='mpopenid',
|
||||||
|
field=models.CharField(blank=True, max_length=200, null=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='user',
|
||||||
|
name='nickname',
|
||||||
|
field=models.CharField(blank=True, max_length=200, null=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='user',
|
||||||
|
name='openid',
|
||||||
|
field=models.CharField(blank=True, max_length=200, null=True),
|
||||||
|
),
|
||||||
|
]
|
|
@ -51,12 +51,12 @@ class User(models.Model):
|
||||||
name = models.CharField(max_length=20)
|
name = models.CharField(max_length=20)
|
||||||
password = models.CharField(max_length=30)
|
password = models.CharField(max_length=30)
|
||||||
ubelongpart = models.ForeignKey(Partment,related_name='upart', on_delete=models.CASCADE)
|
ubelongpart = models.ForeignKey(Partment,related_name='upart', on_delete=models.CASCADE)
|
||||||
openid=models.CharField(max_length=200,default='0')#公众号openid
|
openid=models.CharField(max_length=200,null=True,blank=True)#公众号openid
|
||||||
nickname=models.CharField(max_length=200,default='wechartname')#昵称
|
nickname=models.CharField(max_length=200,null=True,blank=True)#昵称
|
||||||
headimgurl=models.CharField(max_length=200,default='0')#头像
|
headimgurl=models.CharField(max_length=200,null=True,blank=True)#头像
|
||||||
issuper=models.IntegerField(default='0')#超管
|
issuper=models.IntegerField(default='0')#超管
|
||||||
deletemark=models.IntegerField(default='1')
|
deletemark=models.IntegerField(default='1')
|
||||||
mpopenid=models.CharField(max_length=200,default='0') #小程序openid
|
mpopenid=models.CharField(max_length=200,null=True,blank=True) #小程序openid
|
||||||
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)#所属公司
|
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)#所属公司
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.username
|
return self.username
|
||||||
|
@ -577,8 +577,8 @@ class ExamTest(models.Model):#考试表
|
||||||
state = models.IntegerField(default=1) #1进行中
|
state = models.IntegerField(default=1) #1进行中
|
||||||
exampaper = models.ForeignKey(ExamPaper,on_delete=models.CASCADE)
|
exampaper = models.ForeignKey(ExamPaper,on_delete=models.CASCADE)
|
||||||
user = models.ManyToManyField(User,through='ExamTestDetail') #考试人员
|
user = models.ManyToManyField(User,through='ExamTestDetail') #考试人员
|
||||||
starttime = models.DateTimeField(null=True,blank=True)
|
starttime = models.DateTimeField(null=True,blank=True)#最早参加
|
||||||
endtime = models.DateTimeField(null=True,blank=True)
|
endtime = models.DateTimeField(null=True,blank=True)#最迟参加
|
||||||
createtime = models.DateTimeField(default = timezone.now)
|
createtime = models.DateTimeField(default = timezone.now)
|
||||||
modifytime = models.DateTimeField(auto_now = True)
|
modifytime = models.DateTimeField(auto_now = True)
|
||||||
totalscore=models.IntegerField(default=100)
|
totalscore=models.IntegerField(default=100)
|
||||||
|
|
Binary file not shown.
|
@ -15,6 +15,7 @@ from .safespider import getTzzs
|
||||||
dirname = settings.BASE_DIR +'/safesite/'
|
dirname = settings.BASE_DIR +'/safesite/'
|
||||||
|
|
||||||
def getcs(companyid):#获取公司相关参数设置
|
def getcs(companyid):#获取公司相关参数设置
|
||||||
|
print(companyid)
|
||||||
return Yjsetup.objects.filter(usecomp__partid=companyid).values()[0]
|
return Yjsetup.objects.filter(usecomp__partid=companyid).values()[0]
|
||||||
|
|
||||||
def gettime(x=datetime.datetime.now()):
|
def gettime(x=datetime.datetime.now()):
|
||||||
|
@ -55,7 +56,10 @@ def yjjs(companyid):
|
||||||
else:
|
else:
|
||||||
sbjs = 0
|
sbjs = 0
|
||||||
#隐患整改率
|
#隐患整改率
|
||||||
zgjs = a.filter(yhzt__in=[4,5,6]).count()/a.count()
|
if a.count() != 0:
|
||||||
|
zgjs = a.filter(yhzt__in=[4,5,6]).count()/a.count()
|
||||||
|
else:
|
||||||
|
zgjs = 4
|
||||||
if zgjs == 1:
|
if zgjs == 1:
|
||||||
zgjs = 0
|
zgjs = 0
|
||||||
elif zgjs>=0.8 and zgjs <1:
|
elif zgjs>=0.8 and zgjs <1:
|
||||||
|
@ -92,7 +96,10 @@ def yjjs_px(companyid):
|
||||||
#计算培训效果
|
#计算培训效果
|
||||||
participantnum = Trainuser.objects.filter(train__in=a).count()
|
participantnum = Trainuser.objects.filter(train__in=a).count()
|
||||||
knownum = a.aggregate(knownum = Sum('knownum'))['knownum']
|
knownum = a.aggregate(knownum = Sum('knownum'))['knownum']
|
||||||
x = knownum/participantnum
|
if participantnum != 0:
|
||||||
|
x = knownum/participantnum
|
||||||
|
else:
|
||||||
|
x = 0
|
||||||
if x == 1:
|
if x == 1:
|
||||||
pxxg = 1
|
pxxg = 1
|
||||||
elif 1>x>= 0.9:
|
elif 1>x>= 0.9:
|
||||||
|
@ -149,7 +156,10 @@ def yjjs_yl(companyid):
|
||||||
#计算演练效果
|
#计算演练效果
|
||||||
participantnum = Drill.objects.filter(drillid__in=a).count()
|
participantnum = Drill.objects.filter(drillid__in=a).count()
|
||||||
knownum = a.aggregate(knownum = Sum('knownum'))['knownum']
|
knownum = a.aggregate(knownum = Sum('knownum'))['knownum']
|
||||||
x = knownum/participantnum
|
if participantnum != 0:
|
||||||
|
x = knownum/participantnum
|
||||||
|
else:
|
||||||
|
x = 0
|
||||||
if x == 1:
|
if x == 1:
|
||||||
ylxg = 1
|
ylxg = 1
|
||||||
elif 1>x>= 0.9:
|
elif 1>x>= 0.9:
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
<div id="examtestdiv" style="margin-bottom:5px;display:none">
|
<div id="examtestdiv" style="margin-bottom:5px;display:none">
|
||||||
<input id="examtest" name="examtest" class="easyui-combobox" style="width:480px;" editable=false data-options="label:'关联考试',url:'api/examtest?a=listtrain'">
|
<input id="examtest" name="examtest" class="easyui-combobox" style="width:480px;" editable=false data-options="label:'关联考试',url:'api/examtest?a=listtrain'">
|
||||||
</div>
|
</div>
|
||||||
<div id='filediv' style="margin-bottom:5px;display:none">
|
<div id='filediv' style="margin-bottom:5px;">
|
||||||
<label>相关资料 </label><input type="file" id="file" name="" accept="*" style="margin-left: 20px" />
|
<label>相关资料 </label><input type="file" id="file" name="" accept="*" style="margin-left: 20px" />
|
||||||
<span id='ps' style="display:none">
|
<span id='ps' style="display:none">
|
||||||
<input type="button" onclick="cancleUploadFile()" value="取消" />
|
<input type="button" onclick="cancleUploadFile()" value="取消" />
|
||||||
|
@ -99,7 +99,7 @@
|
||||||
var data = JSON.parse(evt.target.responseText);
|
var data = JSON.parse(evt.target.responseText);
|
||||||
if (data.code = 1) {
|
if (data.code = 1) {
|
||||||
$('#ps').css('display', 'none');
|
$('#ps').css('display', 'none');
|
||||||
$("#fileol").append('<li><button onclick="removep(this)" >删除</button><a class = "filea" target="_blank" filepath="' + data.filepath + '" href="http://' + window.location.host + '/' + data.filepath + '" >' + data.filename + '</a></li>');
|
$("#fileol").append('<li><button onclick="removep(this)" >删除</button><a class = "filea" target="_blank" filepath="' + data.filepath + '" href="' + data.filepath + '" >' + data.filename + '</a></li>');
|
||||||
} else { alert("上传失败!"); } document.getElementById('file').value = '';
|
} else { alert("上传失败!"); } document.getElementById('file').value = '';
|
||||||
}; //请求完成
|
}; //请求完成
|
||||||
xhr.onerror = function (evt) { alert("上传失败!"); $('#ps').css('display', 'none'); }; //请求失败
|
xhr.onerror = function (evt) { alert("上传失败!"); $('#ps').css('display', 'none'); }; //请求失败
|
||||||
|
@ -182,6 +182,11 @@
|
||||||
|
|
||||||
if (a == 'addtrain') {
|
if (a == 'addtrain') {
|
||||||
$.messager.confirm('提示', '请仔细核对信息,确定后将向用户发送微信通知!', function (r) {
|
$.messager.confirm('提示', '请仔细核对信息,确定后将向用户发送微信通知!', function (r) {
|
||||||
|
var filearray = new Array();
|
||||||
|
$(".filea").each(function () {
|
||||||
|
filearray.push($(this).attr("filepath"));
|
||||||
|
});
|
||||||
|
fd.append("upfile", filearray.join('?'));
|
||||||
if (r) {
|
if (r) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: "POST",
|
type: "POST",
|
||||||
|
@ -268,6 +273,10 @@
|
||||||
$("#participantname").textbox('setValue', data.participantname).textbox('disable');
|
$("#participantname").textbox('setValue', data.participantname).textbox('disable');
|
||||||
$("#trainid").attr('value', data.trainid);
|
$("#trainid").attr('value', data.trainid);
|
||||||
$("#knownumdiv,#filediv,#pxxgdiv,#examtestdiv").show();
|
$("#knownumdiv,#filediv,#pxxgdiv,#examtestdiv").show();
|
||||||
|
for(var i=0;i<data.material.length;i++){
|
||||||
|
let x = data.material[i]
|
||||||
|
$("#fileol").append('<li><button onclick="removep(this)" >删除</button><a class = "filea" target="_blank" filepath="' + x + '" href="/' + x + '" >' + x.split('_').pop() + '</a></li>');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
|
@ -168,7 +168,7 @@
|
||||||
var issuper = {{ issuper }};
|
var issuper = {{ issuper }};
|
||||||
if (issuper == 1) { $('#setupb').show() }
|
if (issuper == 1) { $('#setupb').show() }
|
||||||
if (openid == 0 && issuper != 1) { $('#wxdg').dialog(); } else { $('#bindwx').text('解绑微信'); };
|
if (openid == 0 && issuper != 1) { $('#wxdg').dialog(); } else { $('#bindwx').text('解绑微信'); };
|
||||||
if (headimgurl != 0) { $('#headimg').attr('src', headimgurl); }
|
if (headimgurl != 0 && headimgurl != 'None') { $('#headimg').attr('src', headimgurl); }
|
||||||
function logout() {
|
function logout() {
|
||||||
$.messager.confirm('系统提示', '您确定要退出本次登录吗?', function (r) {
|
$.messager.confirm('系统提示', '您确定要退出本次登录吗?', function (r) {
|
||||||
if (r) {
|
if (r) {
|
||||||
|
|
|
@ -326,11 +326,11 @@ float: left;">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style="width:100%;height:800px">
|
|
||||||
<div id="panelx" class="easyui-panel" data-options="iconCls:'fa-bar-chart'" >
|
<div id="panelx" class="easyui-panel" data-options="iconCls:'fa-bar-chart'" style="width:100%;height:800px">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
//首页总数统计
|
//首页总数统计
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
data-options="iconCls:'fa-pencil',plain:true">编辑</a>
|
data-options="iconCls:'fa-pencil',plain:true">编辑</a>
|
||||||
<a id="deltm" onclick="deltm()" class="easyui-linkbutton"
|
<a id="deltm" onclick="deltm()" class="easyui-linkbutton"
|
||||||
data-options="iconCls:'fa-trash',plain:true">删除</a>
|
data-options="iconCls:'fa-trash',plain:true">删除</a>
|
||||||
<!-- <a id="drtms" onclick="javascript:$('#drtmdg').dialog('open').window('center');" class="easyui-linkbutton"
|
<a id="drtms" onclick="javascript:$('#drtmdg').dialog('open').window('center');" class="easyui-linkbutton"
|
||||||
data-options="iconCls:'fa-upload',plain:true">导入试题</a> -->
|
data-options="iconCls:'fa-upload',plain:true">导入试题</a>
|
||||||
</div>
|
</div>
|
||||||
<table id="tmtable" style="height:100%;"></table>
|
<table id="tmtable" style="height:100%;"></table>
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
if(value==1){
|
if(value==1){
|
||||||
return '正常';
|
return '正常';
|
||||||
}else{
|
}else{
|
||||||
return value;
|
return '异常';
|
||||||
}
|
}
|
||||||
}, styler: function (value, row, index) {
|
}, styler: function (value, row, index) {
|
||||||
if(value==1){
|
if(value==1){
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
<th data-options="field:'username',align:'right'" width="20%">账户</th>
|
<th data-options="field:'username',align:'right'" width="20%">账户</th>
|
||||||
<th data-options="field:'ubelongpart__partname',align:'right'" width="30%">所属部门</th>
|
<th data-options="field:'ubelongpart__partname',align:'right'" width="30%">所属部门</th>
|
||||||
<th data-options="field:'openid',align:'center',formatter: function (value, row, index) {
|
<th data-options="field:'openid',align:'center',formatter: function (value, row, index) {
|
||||||
if(value!=0){return '<img src='+'/static/safesite/easyui/themes/icons/ok.png'+'/>';}
|
if(value!=0 && value != null){return '<img src='+'/static/safesite/easyui/themes/icons/ok.png'+'/>';}
|
||||||
}"
|
}"
|
||||||
width="15%">是否可接受通知</th>
|
width="15%">是否可接受通知</th>
|
||||||
|
|
||||||
|
|
|
@ -82,7 +82,7 @@ urlpatterns = [
|
||||||
path('html/risk/add/<int:id>/',views.riskadd),
|
path('html/risk/add/<int:id>/',views.riskadd),
|
||||||
path('html/task',views.task),
|
path('html/task',views.task),
|
||||||
path('html/taskdo',views.taskdo),
|
path('html/taskdo',views.taskdo),
|
||||||
path('html/riskcheck',views.riskcheck),
|
path('html/riskcheck',views.riskcheck),#风险点排查记录
|
||||||
path('html/risk/edit/<int:id>/',views.riskedit),
|
path('html/risk/edit/<int:id>/',views.riskedit),
|
||||||
path('html/report/edit',views.reportedit),
|
path('html/report/edit',views.reportedit),
|
||||||
#html页面
|
#html页面
|
||||||
|
|
|
@ -1266,6 +1266,7 @@ def addtrain(req):
|
||||||
a.submituser=User.objects.get(userid=userid)
|
a.submituser=User.objects.get(userid=userid)
|
||||||
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.material= req.POST.get('upfile')
|
||||||
a.save()
|
a.save()
|
||||||
a.checkqr = makeqr_train('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()
|
||||||
|
@ -2788,18 +2789,21 @@ def bwlogin(req):
|
||||||
headimgurl = req.POST.get('headimgurl')
|
headimgurl = req.POST.get('headimgurl')
|
||||||
user = User.objects.filter(username__exact = username, password__exact = password)
|
user = User.objects.filter(username__exact = username, password__exact = password)
|
||||||
if user:
|
if user:
|
||||||
mpuser = User.objects.filter(openid=openid).exclude(username = username)
|
# mpuser = User.objects.filter(openid=openid).exclude(username = username)
|
||||||
if mpuser.exists():
|
# if mpuser.exists():
|
||||||
return render(req,'bindwechat.html',{'msg':'您的微信已绑定平台下'+mpuser[0].username+'账号,不可重复绑定,请先至pc端解绑!','code':0}) #已绑定其他账号
|
# return render(req,'bindwechat.html',{'msg':'您的微信已绑定平台下'+mpuser[0].username+'账号,不可重复绑定,请先至pc端解绑!','code':0}) #已绑定其他账号
|
||||||
else:
|
# else:
|
||||||
if user[0].openid == '0' or user[0].openid == None or user[0].openid == '':
|
# if user[0].openid == '0' or user[0].openid == None or user[0].openid == '':
|
||||||
user.update(openid=openid,headimgurl=headimgurl,nickname=nickname)
|
# user.update(openid=openid,headimgurl=headimgurl,nickname=nickname)
|
||||||
return render(req,'bindwechat.html',{'msg':'绑定成功,请刷新电脑端浏览器!','code':1})
|
# return render(req,'bindwechat.html',{'msg':'绑定成功,请刷新电脑端浏览器!','code':1})
|
||||||
else:
|
# else:
|
||||||
if user[0].openid == openid:
|
User.objects.filter(openid=openid).update(openid=None,headimgurl=None,nickname=None)
|
||||||
return render(req,'bindwechat.html',{'msg':'绑定成功,请刷新电脑端浏览器!','code':1})
|
user.update(openid=openid,headimgurl=headimgurl,nickname=nickname)
|
||||||
else:
|
return render(req,'bindwechat.html',{'msg':'绑定成功,请刷新电脑端浏览器!','code':1})
|
||||||
return render(req,'bindwechat.html',{'msg':'该平台账号已绑定昵称为'+user[0].nickname+'的微信,不可重复绑定,请先至pc端解绑!','code':0}) #已绑定其他账号
|
# if user[0].openid == openid:
|
||||||
|
# return render(req,'bindwechat.html',{'msg':'绑定成功,请刷新电脑端浏览器!','code':1})
|
||||||
|
# else:
|
||||||
|
# return render(req,'bindwechat.html',{'msg':'该平台账号已绑定昵称为'+user[0].nickname+'的微信,不可重复绑定,请先至pc端解绑!','code':0}) #已绑定其他账号
|
||||||
else:
|
else:
|
||||||
return render(req,'bwlogin.html',{'msg':'用户名或密码错误!'})
|
return render(req,'bwlogin.html',{'msg':'用户名或密码错误!'})
|
||||||
|
|
||||||
|
@ -3802,6 +3806,26 @@ def apitool(req):
|
||||||
i.zghtp = i.zghtp.replace('#','')
|
i.zghtp = i.zghtp.replace('#','')
|
||||||
i.save()
|
i.save()
|
||||||
return JsonResponse({"code":1})
|
return JsonResponse({"code":1})
|
||||||
|
elif a == 'correct_yjyc':
|
||||||
|
for i in Partment.objects.filter(iscompany=1,deletemark=1):
|
||||||
|
yjjs(i.partid)
|
||||||
|
yjjs_gc(i.partid)
|
||||||
|
yjjs_px(i.partid)
|
||||||
|
yjjs_ws(i.partid)
|
||||||
|
yjjs_yl(i.partid)
|
||||||
|
return JsonResponse({"code":1})
|
||||||
|
elif a == 'correct_company':
|
||||||
|
m = []
|
||||||
|
for i in Partment.objects.filter(iscompany=1,deletemark=1):
|
||||||
|
if User.objects.filter(usecomp=i).exists() :
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
x = {}
|
||||||
|
x['name']=i.partname
|
||||||
|
x['id']=i.partid
|
||||||
|
m.append(x)
|
||||||
|
return JsonResponse({'wxgs':m})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def apinotice(req):
|
def apinotice(req):
|
||||||
|
@ -4821,7 +4845,7 @@ def apiexamtestdetail(req):
|
||||||
companyid = getcompany(userid)
|
companyid = getcompany(userid)
|
||||||
if a=='dknum':
|
if a=='dknum':
|
||||||
a = ExamTestDetail.objects
|
a = ExamTestDetail.objects
|
||||||
a = a.filter(user__userid=userid,examtest__state=1,ison=0)
|
a = a.filter(user__userid=userid,examtest__state=1,ison=0,examtest__endtime__gte=datetime.now())
|
||||||
dknum = a.count()
|
dknum = a.count()
|
||||||
return JsonResponse({"code":1,"dknum":dknum})
|
return JsonResponse({"code":1,"dknum":dknum})
|
||||||
elif a=='listdk':
|
elif a=='listdk':
|
||||||
|
|
Loading…
Reference in New Issue