xuigaiquanxian2

This commit is contained in:
shilixia 2019-12-25 13:57:05 +08:00
commit 80dd24a14c
28 changed files with 684 additions and 140 deletions

View File

@ -38,6 +38,7 @@ INSTALLED_APPS = [
'django.contrib.messages', 'django.contrib.messages',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'safesite', 'safesite',
'safesite.templatetags',
'groups', 'groups',
'captcha', 'captcha',
] ]
@ -148,6 +149,7 @@ CELERY_ENABLE_UTC=True
SESSION_EXPIRE_AT_BROWSER_CLOSE = True SESSION_EXPIRE_AT_BROWSER_CLOSE = True
#SESSION_COOKIE_AGE = 2400 #SESSION_COOKIE_AGE = 2400
SESSION_SAVE_EVERY_REQUEST = True SESSION_SAVE_EVERY_REQUEST = True
# PERMISSIONS_SESSION_KEY = {} #权限字典
#日志配置 #日志配置
# 创建日志的路径 # 创建日志的路径

View File

@ -6,3 +6,12 @@ admin.site.register(models.Trouble)
admin.site.register(models.Dicclass) admin.site.register(models.Dicclass)
admin.site.register(models.Dickey) admin.site.register(models.Dickey)
admin.site.register(models.Partment) admin.site.register(models.Partment)
@admin.register(models.Menu)
class Menuadmin(admin.ModelAdmin):
list_display = ('menuname','menucode','type','url')
list_display_links = ('menuname',)
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "parentid":
kwargs["queryset"] = models.Menu.objects.filter(type=1)
return super().formfield_for_foreignkey(db_field, request, **kwargs)

View File

@ -10,6 +10,7 @@ import qrcode
import os import os
from django.contrib.auth.hashers import make_password from django.contrib.auth.hashers import make_password
from django.db.models import Q from django.db.models import Q
from .tasks import send_wechatmsg
def makeqr(data): def makeqr(data):
upload_folder = 'media/qr_equipment' upload_folder = 'media/qr_equipment'
@ -109,7 +110,7 @@ def drquestions(companyid,path,userid):
obj.level = leveldict[level] obj.level = leveldict[level]
else: else:
obj.level = 1 obj.level = 1
obj.usecoms = ','+companyid+',' obj.usecomps = ','+companyid+','
obj.createuser = user obj.createuser = user
obj.save() obj.save()
elif type == '多选': elif type == '多选':
@ -131,7 +132,7 @@ def drquestions(companyid,path,userid):
obj.level = leveldict[level] obj.level = leveldict[level]
else: else:
obj.level = 1 obj.level = 1
obj.usecoms = ','+companyid+',' obj.usecomps = ','+companyid+','
obj.createuser = user obj.createuser = user
obj.save() obj.save()
elif type == '判断': elif type == '判断':
@ -153,14 +154,169 @@ def drquestions(companyid,path,userid):
obj.level = leveldict[level] obj.level = leveldict[level]
else: else:
obj.level = 1 obj.level = 1
obj.usecoms = ','+companyid+',' obj.usecomps = ','+companyid+','
obj.createuser = user obj.createuser = user
obj.save() obj.save()
i = i +1 i = i +1
print(notinlist) print(notinlist)
return notinlist return notinlist
def drtodotroubles(companyid,path,userid):
wb = load_workbook(path)
sheet = wb.worksheets[0]
# 验证文件内容
if sheet['a2'].value != '检查类型':
return {'code':0,'msg':'excel格式错误!'}
if sheet['b2'].value != '隐患等级':
return {'code':0,'msg':'excel格式错误!'}
if sheet['h2'].value != '隐患地点':
return {'code':0,'msg':'excel格式错误!'}
partdict = {}
jclxdict = {}
yhdjdict = {}
yhlxdicto = {}
yhlbdict = {}
yhpgdict = {}
yhqydict = {}
parts = Partment.objects.filter(partlink__contains=',' + companyid + ',')|Partment.objects.filter(partid=companyid) #获取所有部门
for i in parts:
partdict[i.partname] = i
for i in Dickey.objects.filter(dicparent__dicid=14):
jclxdict[i.dickeyname] = i
for i in Dickey.objects.filter(dicparent__dicid=18):
yhdjdict[i.dickeyname] = i
for i in Dickey.objects.filter(dicparent__dicid=15):
yhlxdicto[i.dickeyname] = i
for i in Dickey.objects.filter(Q(dicparent__dicid=16)|Q(dicparent__dicid=17)):
yhlbdict[i.dickeyname] = i
for i in Dickey.objects.filter(dicparent__dicid=19):
yhpgdict[i.dickeyname] = i
for i in Area.objects.filter(usecomp__partid=companyid):
yhqydict[i.name]=i
i = 3
sheetimages = sheet._images #获取图片列表
username = User.objects.get(userid=userid).username
while sheet['B'+str(i)].value:
try:
jclx = sheet['A'+str(i)].value
yhdj = sheet['B'+str(i)].value
yhlxo = sheet['C'+str(i)].value
yhlb = sheet['D'+str(i)].value
yhpg = sheet['E'+str(i)].value
fxsj = sheet['F'+str(i)].value
yhqy = sheet['g'+str(i)].value
yhdd = sheet['h'+str(i)].value
fxbm = sheet['i'+str(i)].value
fxr = sheet['j'+str(i)].value
yhms = sheet['k'+str(i)].value
zgbm = sheet['l'+str(i)].value
zgr= sheet['m'+str(i)].value
zgqx = sheet['n'+str(i)].value
yyfx = sheet['o'+str(i)].value
zgcs = sheet['p'+str(i)].value
fcbm = sheet['q'+str(i)].value
fcr = sheet['r'+str(i)].value
obj = Trouble()
if jclx in jclxdict:
obj.jclx = jclxdict[jclx]
if yhdj in yhdjdict:
obj.yhdj = yhdjdict[yhdj]
if yhlxo in yhlxdicto:
obj.yhlxo = yhlxdicto[yhlxo]
for key in yhlbdict:
if key in yhlb:
obj.yhlb = yhlbdict[key]
obj.yhlx = obj.yhlb.dicparent
if yhpg in yhpgdict:
obj.yhpg = yhpgdict[yhpg]
if fxsj:
if isinstance(fxsj,datetime):
obj.fxsj = fxsj
else:
fxsj = fxsj.replace(' ','')
if '-' in fxsj:
obj.fxsj = datetime.strptime(fxsj,'%Y-%m-%d').date()
elif '.' in fdate:
obj.fxsj = datetime.strptime(fxsj,'%Y.%m.%d').date()
elif '/' in fdate:
obj.fxsj = datetime.strptime(fxsj,'%Y/%m/%d').date()
if yhqy in yhqydict:
obj.yhqy = yhqydict[yhqy]
if yhdd:
obj.yhdd = yhdd
if fxbm in partdict:
obj.fxbm = partdict[fxbm]
if fxr:
obj.fxr = User.objects.filter(name=fxr,ubelongpart=obj.fxbm)[0]
if yhms:
obj.yhms = yhms
if zgbm in partdict:
obj.zgbm = partdict[zgbm]
if zgr:
obj.zgr = User.objects.filter(name=zgr,ubelongpart=obj.zgbm)[0]
obj.todouser = obj.zgr
if zgqx:
if isinstance(zgqx,datetime):
obj.zgqx = zgqx
else:
zgqx = zgqx.replace(' ','')
if '-' in zgqx:
obj.zgqx = datetime.strptime(zgqx,'%Y-%m-%d').date()
elif '.' in fdate:
obj.zgqx = datetime.strptime(zgqx,'%Y.%m.%d').date()
elif '/' in fdate:
obj.zgqx = datetime.strptime(zgqx,'%Y/%m/%d').date()
if yyfx:
obj.yyfx = yyfx
if zgcs:
obj.zgcs = zgcs
if fcbm in partdict:
user = User.objects.filter(name=fcr,ubelongpart=partdict[fcbm])[0]
obj.fcr = user
for image in sheetimages:
if image.anchor._from.row == i-1 and image.anchor._from.col == 18:
imagedata = image._data()#图片二进制数据
file_name = datetime.now().strftime('%Y%m%d%H%M%S') + '_yh'+str(i)+'.jpg'
user_upload_folder = os.path.join('media', 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(imagedata)
obj.yhtp = filepath
obj.yhzt = 3 #待整改
obj.yhnum = 'YH'+datetime.now().strftime('%Y%m%d%H%M%S')+str(i)
obj.usecomp = Partment.objects.get(partid=companyid)
obj.save()
postdict = {
'touser': 'oPGqkweX75QtLmgehUN-ipR4hcyc',
'template_id': 'lOuwSE67vZC3ZVFYPZvz2eb7JdFxqx7ysMFkXrYmYh0',
"miniprogram": {"appid": "wx5c39b569f01c27db"},
'data': {
'first': {
'value': yhdj + '待整改:'
},
'keyword1': {
'value': yhms
},
'keyword2': {
'value': fxsj
},
'keyword3': {
'value': yhdd
},
'remark': {
'value': '请您及时完成整改。'
}
}
}
postdict['touser'] = obj.todouser.openid
send_wechatmsg.delay(postdict)
i = i + 1
except:
return ''+str(i)+'行数据错误,导入终止!'
def drequipments(companyid,path): def drequipments(companyid,path):
@ -298,12 +454,6 @@ def drequipments(companyid,path):
return {'code':2,'msg':'部分未导入成功!','info':numsdict} return {'code':2,'msg':'部分未导入成功!','info':numsdict}
def drusers(companyid,path): def drusers(companyid,path):
wb = load_workbook(path) wb = load_workbook(path)
sheet = wb.worksheets[0] sheet = wb.worksheets[0]
@ -373,6 +523,7 @@ def drusers(companyid,path):
else: else:
return {'code':1,'msg':'导入全部成功!'} return {'code':1,'msg':'导入全部成功!'}
def drrisks(companyid,path): def drrisks(companyid,path):
wb = load_workbook(path) wb = load_workbook(path)
sheet = wb.worksheets[0] sheet = wb.worksheets[0]
@ -530,6 +681,7 @@ def drrisks(companyid,path):
i = i+1 i = i+1
return errorlist return errorlist
def cal_riskact_level(riskact): def cal_riskact_level(riskact):
levellist = [] levellist = []
for i in Risk.objects.filter(riskact=riskact): for i in Risk.objects.filter(riskact=riskact):
@ -548,6 +700,7 @@ def cal_riskact_level(riskact):
riskact.save() riskact.save()
cal_area_risk_level(riskact.area) cal_area_risk_level(riskact.area)
def cal_area_risk_level(area): def cal_area_risk_level(area):
levellist = [] levellist = []
objs = RiskAct.objects.filter(area=area,type__dickeyid=396) objs = RiskAct.objects.filter(area=area,type__dickeyid=396)
@ -570,6 +723,7 @@ def cal_area_risk_level(area):
area.risklevel = None area.risklevel = None
area.save() area.save()
def is_float(str): def is_float(str):
if str.count('.') == 1: #小数有且仅有一个小数点 if str.count('.') == 1: #小数有且仅有一个小数点
left = str.split('.')[0] #小数点左边(整数位,可为正或负) left = str.split('.')[0] #小数点左边(整数位,可为正或负)

View File

@ -0,0 +1,14 @@
# Generated by Django 2.2.8 on 2019-12-17 12:00
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('safesite', '0296_auto_20191209_1029'),
('safesite', '0296_auto_20191206_1559'),
]
operations = [
]

View File

@ -0,0 +1,22 @@
# Generated by Django 2.2.8 on 2019-12-17 12:00
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('safesite', '0297_merge_20191217_1200'),
]
operations = [
migrations.RemoveField(
model_name='companyinfo',
name='liaison_fax',
),
migrations.AddField(
model_name='menu',
name='type',
field=models.IntegerField(default=1),
),
]

View File

@ -0,0 +1,17 @@
# Generated by Django 2.2.8 on 2019-12-17 12:01
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('safesite', '0298_auto_20191217_1200'),
]
operations = [
migrations.RemoveField(
model_name='menu',
name='type',
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 2.2.8 on 2019-12-17 12:01
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('safesite', '0299_remove_menu_type'),
]
operations = [
migrations.AddField(
model_name='menu',
name='type',
field=models.IntegerField(default=1),
),
]

View File

@ -0,0 +1,28 @@
# Generated by Django 2.2.8 on 2019-12-17 14:14
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('safesite', '0300_menu_type'),
]
operations = [
migrations.AlterField(
model_name='menu',
name='deletemark',
field=models.IntegerField(default=1),
),
migrations.AlterField(
model_name='menu',
name='icon',
field=models.CharField(blank=True, max_length=100, null=True),
),
migrations.AlterField(
model_name='menu',
name='sortnum',
field=models.IntegerField(default=1),
),
]

View File

@ -0,0 +1,19 @@
# Generated by Django 2.2.8 on 2019-12-17 15:06
import django.contrib.postgres.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('safesite', '0301_auto_20191217_1414'),
]
operations = [
migrations.AddField(
model_name='group',
name='menulist',
field=django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(), blank=True, null=True, size=None),
),
]

View File

@ -0,0 +1,19 @@
# Generated by Django 2.2.8 on 2019-12-18 09:18
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('safesite', '0302_group_menulist'),
]
operations = [
migrations.AddField(
model_name='trouble',
name='yhlxo',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='yhlxo', to='safesite.Dickey'),
),
]

View File

@ -0,0 +1,19 @@
# Generated by Django 2.2.8 on 2019-12-19 16:00
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('safesite', '0303_trouble_yhlxo'),
]
operations = [
migrations.AddField(
model_name='trouble',
name='submituser',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='submituser', to='safesite.User'),
),
]

View File

@ -162,6 +162,8 @@ class Trouble(models.Model): # 隐患排查
yhdd = models.CharField(max_length=200, default='test') yhdd = models.CharField(max_length=200, default='test')
yhdj = models.ForeignKey(Dickey, related_name='yhdj', yhdj = models.ForeignKey(Dickey, related_name='yhdj',
on_delete=models.CASCADE, null=True, blank=True) on_delete=models.CASCADE, null=True, blank=True)
yhlxo = models.ForeignKey(Dickey, related_name='yhlxo',
on_delete=models.CASCADE, null=True, blank=True)
yhlx = models.ForeignKey( yhlx = models.ForeignKey(
Dicclass, related_name='yhlx', on_delete=models.CASCADE, null=True, blank=True) Dicclass, related_name='yhlx', on_delete=models.CASCADE, null=True, blank=True)
yhlb = models.ForeignKey(Dickey, related_name='yhlb', yhlb = models.ForeignKey(Dickey, related_name='yhlb',
@ -208,6 +210,8 @@ class Trouble(models.Model): # 隐患排查
pgyj = models.TextField(null=True, blank=True) # 评估退回意见 pgyj = models.TextField(null=True, blank=True) # 评估退回意见
yhqy = models.ForeignKey( yhqy = models.ForeignKey(
Area, on_delete=models.CASCADE, null=True, blank=True) # 隐患区域 Area, on_delete=models.CASCADE, null=True, blank=True) # 隐患区域
submituser = models.ForeignKey(User, related_name='submituser',
on_delete=models.CASCADE, null=True, blank=True) # 记录人
class TroubleAccess(models.Model): # 隐患流程表 class TroubleAccess(models.Model): # 隐患流程表
@ -357,6 +361,7 @@ class Group(models.Model): # 用户组,岗位
usecomp = models.ForeignKey( usecomp = models.ForeignKey(
Partment, on_delete=models.CASCADE, related_name='usecompg', default=1) Partment, on_delete=models.CASCADE, related_name='usecompg', default=1)
menulink = models.CharField(max_length=200, default='11') menulink = models.CharField(max_length=200, default='11')
menulist = ArrayField(models.IntegerField(), blank=True, null=True)
class Groupuser2(models.Model): # 比较好的方式 class Groupuser2(models.Model): # 比较好的方式
@ -367,16 +372,26 @@ class Groupuser2(models.Model): # 比较好的方式
class Menu(models.Model): # 菜单 class Menu(models.Model): # 菜单
menuid = models.AutoField(primary_key=True) type_choices = (
menuname = models.CharField(max_length=30, blank=True, null=True) (1, '菜单'),
menucode = models.CharField(max_length=30, blank=True, null=True) (2, '按钮'),
url = models.CharField(max_length=30, blank=True, null=True) )
detail = models.CharField(max_length=100, blank=True, null=True) menuid = models.AutoField(primary_key=True,verbose_name='ID')
menuname = models.CharField(max_length=30, blank=True, null=True,verbose_name='名称')
menucode = models.CharField(max_length=30, blank=True, null=True,verbose_name='菜单标识')
url = models.CharField(max_length=30, blank=True, null=True,verbose_name='操作地址')
detail = models.CharField(max_length=100, blank=True, null=True,verbose_name='描述')
parentid = models.ForeignKey( parentid = models.ForeignKey(
'self', blank=True, null=True, on_delete=models.CASCADE) 'self', blank=True, null=True, on_delete=models.CASCADE,verbose_name='上级')
icon = models.CharField(max_length=100, default='') icon = models.CharField(max_length=100, blank=True, null=True,verbose_name='图标')
sortnum = models.IntegerField(default='1') sortnum = models.IntegerField(default=1,verbose_name='排序号')
deletemark = models.IntegerField(default='1') deletemark = models.IntegerField(default=1,verbose_name='删除标记')
type = models.IntegerField(default=1,choices=type_choices,verbose_name='类型')#1是菜单2是按钮
class Meta:
verbose_name = '菜单&按钮'
verbose_name_plural = "菜单&按钮"
def __str__(self):
return self.menuname+self.menucode
class Yjyc(models.Model): # 预警预测表 class Yjyc(models.Model): # 预警预测表

View File

@ -164,6 +164,9 @@ function convertmenu(rows) {
var row = rows[i]; var row = rows[i];
if (row.parentid == node.id) { if (row.parentid == node.id) {
var child = { id: row.menuid, text: row.menuname, attributes: row.url, iconCls: row.icon, checked: row.checked }; var child = { id: row.menuid, text: row.menuname, attributes: row.url, iconCls: row.icon, checked: row.checked };
if (row.type!=1){
node.state = 'closed'
}
if (node.children) { if (node.children) {
node.children.push(child); node.children.push(child);
} else { } else {
@ -598,4 +601,54 @@ $.get('api/check_session',function(res){
}) })
} }
var t1 = window.setInterval(update, 1000 * 60) var t1 = window.setInterval(update, 1000 * 60)
var t2 = window.setInterval(checksession,1000*60*41) var t2 = window.setInterval(checksession,1000*60*41)
//扩展easyui表单的验证
$.extend($.fn.validatebox.defaults.rules, {
//验证汉字
CHS: {
validator: function (value) {
return /^[\u0391-\uFFE5]+$/.test(value);
},
message: '请输入汉字'
},
//移动手机号码验证
Mobile: {//value值为文本框中的值
validator: function (value) {
var reg = /^1[3|4|5|8|9]\d{9}$/;
return reg.test(value);
},
message: '请输入正确号码'
},
//国内邮编验证
ZipCode: {
validator: function (value) {
var reg = /^[0-9]\d{5}$/;
return reg.test(value);
},
message: '6位数字'
},
//数字
Number: {
validator: function (value) {
var reg =/^[0-9]*$/;
return reg.test(value);
},
message: '请输入数字'
},
//非负整数
Integer: {
validator: function (value) {
var reg = /^[1-9]\d*|0$/;
return reg.test(value);
},
message: '请输入非负整数'
},
Password:{
validator:function(value){
var reg = /(?=.*[0-9])(?=.*[a-zA-Z]).{8,30}/;
return reg.test(value);
},
message:'至少8位包含数字,大小写字母'
}
})

View File

@ -18,15 +18,15 @@
</form> </form>
</div> </div>
<script> <script>
$('#parentid').combotree({ var a = GetQueryString('a');
url: 'parthandle?a=tree', if (a == 'editparth') {
partid = GetQueryString('partid');
$('#parentid').combotree({
url: 'parthandle?a=tree4&expart='+ partid,
loadFilter: function (rows) { loadFilter: function (rows) {
return convert(rows); return convert(rows);
}, },
}); });
var a = GetQueryString('a');
if (a == 'editparth') {
partid = GetQueryString('partid');
$.ajax({ $.ajax({
type: "GET", type: "GET",
url: 'parthandle?a=detail&partid=' + partid, url: 'parthandle?a=detail&partid=' + partid,
@ -44,6 +44,13 @@
} }
}); });
}else{
$('#parentid').combotree({
url: 'parthandle?a=tree',
loadFilter: function (rows) {
return convert(rows);
},
});
} }
function submitFormp() { function submitFormp() {
var form = new FormData(document.getElementById("partff")); var form = new FormData(document.getElementById("partff"));

View File

@ -16,7 +16,7 @@
<div style="margin-bottom:5px"> <div style="margin-bottom:5px">
<input id="username" class="easyui-textbox" name="username" style="width:90%" data-options="label:'账户',required:true"></input></div> <input id="username" class="easyui-textbox" name="username" style="width:90%" data-options="label:'账户',required:true"></input></div>
<div style="margin-bottom:5px"> <div style="margin-bottom:5px">
<input id="password" class="easyui-textbox" name="password" style="width:90%" data-options="label:'密码',required:true"></input></div> <input id="password" class="easyui-passwordbox validatebox" name="password" style="width:90%" data-options="label:'密码',required:true,validType:'Password'"></input></div>
<div style="margin-bottom:5px"> <div style="margin-bottom:5px">
<input id="ubelongpart" class="easyui-combotree" name="ubelongpart" style="width:90%" <input id="ubelongpart" class="easyui-combotree" name="ubelongpart" style="width:90%"
data-options=" data-options="

View File

@ -13,6 +13,15 @@
textField:'text', textField:'text',
" /> " />
</div> </div>
<div style="margin-bottom:5px">
<input class="easyui-combobox" editable="false" required=true name="yhlxo" id="yhlxo" style="width:480px;" data-options="
url:'getdickey?dicclass=56&a=combobox',
label:'隐患类型',
method: 'get',
valueField:'value',
textField:'text',
" />
</div>
<div style="margin-bottom:5px"> <div style="margin-bottom:5px">
<input editable="false" required=true name="jclx" id="jclx" style="width:480px" data-options=" <input editable="false" required=true name="jclx" id="jclx" style="width:480px" data-options="
label:'检查类型', label:'检查类型',

View File

@ -57,7 +57,7 @@
<div class="center_top"> <div class="center_top">
<div class="title"><img src="/static/safesite/mystatic/images/bigdata/icon03.png" /> 平台数据分布</div> <div class="title"><img src="/static/safesite/mystatic/images/bigdata/icon03.png" /> 平台数据分布</div>
<div class="center_top_con" id="distribution_map"> <div class="center_top_con" id="distribution_map">
<div id="map" class="map" style="width:100%;height:auto;outline: #4A74A8 solid 0.15em;"> <div id="map" class="map" style="width:100%;height:100%;outline: #4A74A8 solid 0.15em;">
</div> </div>
<input type='hidden' id='mapshowinput'></input> <input type='hidden' id='mapshowinput'></input>
<div id="popup" class="ol-popup"> <div id="popup" class="ol-popup">
@ -67,25 +67,19 @@
</div> </div>
</div> </div>
<div class="center_bot"> <div class="center_bot">
<table name="" id="zgrpmtable" class='panel-table' title="隐患整改人排名" data-options=" <table class='panel-table' bordercolor="#0d48e0" border="1">
rownumbers:true,
singleSelect:true,
striped: true,
method:'get',
url: 'fxhandle?a=yhzgpm',
toolbar:'#zgrpmbar'" bordercolor="#0d48e0" border="1">
<thead bgcolor="#0e4ae0" align="center" > <thead bgcolor="#0e4ae0" align="center" >
<tr height="40"> <tr height="40">
<th colspan="7"> 隐患排查</th> <th colspan="7" bgcolor="#FF0000"> 隐患排查</th>
</tr> </tr>
<tr> <tr>
<th data-options="field:'zgr__userid',hidden:true">编号</th> <th>编号</th>
<th data-options="field:'zgr__name',align:'right'">流程状态</th> <th>流程状态</th>
<th data-options="field:'number',align:'right'>整改隐患数">隐患等级</th> <th>隐患等级</th>
<th data-options="field:'number',align:'right'>整改隐患数">隐患类别</th> <th>隐患类别</th>
<th data-options="field:'number',align:'right'>整改隐患数">隐患评估</th> <th>隐患评估</th>
<th data-options="field:'number',align:'right'>整改隐患数">发现人</th> <th>发现人</th>
<th data-options="field:'zgbm__partname',align:'right'">下一步处理人</th> <th>下一步处理人</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -337,7 +331,7 @@
.ol-popup-closer:after { .ol-popup-closer:after {
content: "✖"; content: "✖";
} }
</style> </style>
<script> <script>
var map, source, vector;// global so we can remove it later var map, source, vector;// global so we can remove it later
var container = document.getElementById("popup"); var container = document.getElementById("popup");
@ -351,7 +345,6 @@
}); });
$.get('../api/map?a=default', function (res) { $.get('../api/map?a=default', function (res) {
$('#map').empty() $('#map').empty()
map = initMap(res.pic) map = initMap(res.pic)
update() update()
}) })
@ -398,18 +391,18 @@
if (feature) { if (feature) {
var data = feature.getProperties() var data = feature.getProperties()
//设置弹出框内容可以HTML自定义 //设置弹出框内容可以HTML自定义
var html = "<p style='color:blue'>" + data.name + "</span></p>" var html = "<p style='color:blue'>" + data.name + "</p>"
if (data.type == 'yh') { if (data.type == 'yh') {
html = html + "<p>事故隐患数量:" + data.num.toString() + "</p>" + "<p><a href='#' onclick='opendetail(" + data.id.toString() + ")'>查看详情</a></p>" html = html + "<p style='color:blue'>事故隐患数量:" + data.num.toString() + "</p>"
} }
else if (data.type == 'ws') { else if (data.type == 'ws') {
html = html + "<p>未遂事件数量:" + data.num.toString() + "</p>" + "<p><a href='#' onclick='opendetail(" + data.id.toString() + ")'>查看详情</a></p>" html = html + "<p style='color:blue'>未遂事件数量:" + data.num.toString() + "</p>"
}
else if (data.type == 'fx') {
html = html + "<p>风险等级:" + data.risklevel + "</p>" + "<p><a href='#' onclick='opendetail(" + data.id.toString() + ")'>查看详情</a></p>"
} }
else if (data.type == 'zy') { else if (data.type == 'zy') {
html = html + "<p>危险作业数量:" + data.num.toString() + "</p>" + "<p><a href='#' onclick='opendetail(" + data.id.toString() + ")'>查看详情</a></p>" html = html + "<p style='color:blue'>危险作业数量:" + data.num.toString() + "</p>"
}
else if (data.type == 'fx') {
html = html + "<p style='color:blue'>风险等级:" + data.risklevel + "</p>"
} }
content.innerHTML = html; content.innerHTML = html;
//设置overlay的显示位置 //设置overlay的显示位置

View File

@ -69,7 +69,8 @@
function adddict() { function adddict() {
var row = $('#dicclasstree').tree('getSelected'); var row = $('#dicclasstree').tree('getSelected');
var x = 0; var x = 0;
if (row && ($('#dicclasstree').tree('isLeaf', row.target)) ) {
if (row&&($('#dicclasstree').tree('isLeaf', row.target))) {
x = row.id; x = row.id;
$("#dd").dialog({ $("#dd").dialog({
maximizable: true, maximizable: true,
@ -85,7 +86,7 @@
}); });
$("#dd").window('center'); $("#dd").window('center');
}else{ }else{
$.messager.alert('提示', '请先选择左侧子目录!'); $.messager.alert('提示', '请先选择左侧根节点!');
} }

View File

@ -125,7 +125,7 @@
var row = $('#kstable').datagrid('getSelected'); var row = $('#kstable').datagrid('getSelected');
if (row) { if (row) {
var url = 'html/examtest/detail/' + row.id var url = 'html/examtest/detail/' + row.id
opendg('查看详情',url) opendg('查看详情',url,1000)
} }
else { $.messager.alert('提示', '请选择一行数据!'); } else { $.messager.alert('提示', '请选择一行数据!'); }
} }

View File

@ -75,6 +75,9 @@
<th style="width:10%"> <th style="width:10%">
得分 得分
</th> </th>
<th style="width:15%">
参考时间
</th>
<th style="width:10%"> <th style="width:10%">
用时 用时
</th> </th>
@ -98,6 +101,7 @@
<td><font color="green">已参加</font></td> <td><font color="green">已参加</font></td>
{{/if}} {{/if}}
<td>{{$value.score}}</td> <td>{{$value.score}}</td>
<td>{{$value.starttime}}</td>
<td>{{$value.took}}</td> <td>{{$value.took}}</td>
<td><a target="_blank" href="/html/examhistory/{{$value.id}}">点击查看</a></td> <td><a target="_blank" href="/html/examhistory/{{$value.id}}">点击查看</a></td>

View File

@ -27,6 +27,7 @@
<script src="https://cdn.bootcss.com/jquery.form/4.2.1/jquery.form.min.js"></script> <script src="https://cdn.bootcss.com/jquery.form/4.2.1/jquery.form.min.js"></script>
<script src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.js"></script> <script src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.js"></script>
<script type="text/javascript" src="/static/safesite/mystatic/js/util.js"></script> <script type="text/javascript" src="/static/safesite/mystatic/js/util.js"></script>
<script type="text/javascript" src="/static/safesite/easyui/datagrid-scrollview.js"></script>
<style type="text/css"> <style type="text/css">
.easyui-linkbutton:hover { .easyui-linkbutton:hover {
background: #1148a0; background: #1148a0;
@ -84,7 +85,7 @@
<div style="width:30%;float:right"> <div style="width:30%;float:right">
<div style="margin-top: 10px;text-align: center;position: fixed;width: 500px;height: 70px;right: 20px;"> <div style="margin-top: 10px;text-align: center;position: fixed;width: 500px;height: 70px;right: 20px;">
<span style=" padding-right:20px;font-size: 18px;color:#F5EBEB" class="head"> <span style=" padding-right:20px;font-size: 18px;color:#F5EBEB" class="head">
{{ username }} 欢迎您! {{ user.username }} 欢迎您!
</span> </span>
</div> </div>
<div style="text-align: center;position: fixed;width: 500px;height: 70px;top: 40px;right: 60px;"> <div style="text-align: center;position: fixed;width: 500px;height: 70px;top: 40px;right: 60px;">
@ -145,16 +146,16 @@
</ul> </ul>
</div> </div>
<div id='pwdg' title='修改密码' style="width:500px;height:250px;display:none" data-options="modal:true"> <div id='pwdg' title='修改密码' style="width:500px;height:250px;display:none" data-options="modal:true">
<form method="post" style="margin-top:10px"> <form method="post" style="margin:10px;">
<div style="margin-bottom:5px;"> <div style="margin-bottom:5px;">
<input id="oldpwd" class="easyui-textbox" name="oldpwd" type="password" style="width:100%;" <input id="oldpwd" class="easyui-passwordbox" name="oldpwd" type="password"
data-options="label:'旧密码'" /></div> data-options="label:'旧密码',required:true" style="width:90%"/></div>
<div style="margin-bottom:5px;"> <div style="margin-bottom:5px;">
<input id="newpwd" class="easyui-textbox" name="newpwd" type="password" style="width:100%;" <input id="newpwd" class="easyui-passwordbox validatebox" name="newpwd"
data-options="label:'新密码'" /></div> data-options="label:'新密码',validType:'Password',required:true" style="width:90%"/></div>
<div style="margin-bottom:5px;"> <div style="margin-bottom:5px;">
<input id="newpwd2" class="easyui-textbox" name="newpwd2" type="password" style="width:100%;" <input id="newpwd2" class="easyui-passwordbox validatebox" name="newpwd2"
data-options="label:'确认新密码'" /></div> data-options="label:'确认新密码',validType:'Password',required:true" style="width:90%"/></div>
</form> </form>
<div style="text-align: center"> <div style="text-align: center">
<a id="btnpwc" class="easyui-linkbutton" iconCls="icon-ok" onclick="btnpwc()">保存</a> <a id="btnpwc" class="easyui-linkbutton" iconCls="icon-ok" onclick="btnpwc()">保存</a>
@ -183,6 +184,12 @@
} }
}); });
} }
var pwstr = {{pwstr}};
if(pwstr==0){
$.messager.alert('','您的密码复杂度太低,请修改!','warning',function(){
$('#pwdg').dialog()
});}
function bindwx() { function bindwx() {
if (openid == 0 ||openid == 'None') { if (openid == 0 ||openid == 'None') {
$('#wxdg').dialog('open'); $('#wxdg').dialog('open');

View File

@ -379,7 +379,7 @@ float: left;">
<script> <script>
var data=JSON.parse(localStorage.getItem("data")); var data=JSON.parse(localStorage.getItem("data"));
bindmap9('gzbqst') bindmap9('gzbqst')
if(data.rights.indexOf('30')!=-1){ //有无地图功能 if(data.rights.indexOf(30)!=-1){ //有无地图功能
$('#panelxdiv').show() $('#panelxdiv').show()
$('#panelx').panel({ $('#panelx').panel({
href:'html/mapshow', href:'html/mapshow',

View File

@ -30,7 +30,10 @@
return s; return s;
}," /> }," />
<a id="BindZt" onclick="BindZt();">查询</a> <a id="BindZt" onclick="BindZt();">查询</a>
{% load myfilter %}
{% if request|has_permission:'b_report_export' %}
<a id="Export" onclick="Export()">导出</a> <a id="Export" onclick="Export()">导出</a>
{% endif %}
</form> </form>
<div id="depinfo"> <div id="depinfo">
<form id="form1" method="post"> <form id="form1" method="post">

View File

@ -14,6 +14,7 @@
animate: true, animate: true,
checkbox: true, checkbox: true,
lines: true, lines: true,
cascadeCheck :true,
loadFilter: function (rows) { loadFilter: function (rows) {
var rows = convertmenu(rows) var rows = convertmenu(rows)
return rows; return rows;

View File

@ -1,16 +1,5 @@
<div id="yhtablebar" style="padding:4px;height:40px"> <div id="yhtablebar" style="padding:4px;">
<div style="width: 600px;float: right;padding: 5px;"> <div>
<a id="addyh" onclick="javascript:opendg('新增隐患','addtrouble?a=addyh')">新增</a>
<a id="doyh" onclick="doyh()">处理</a>
<a id="delyh" onclick="delyh()">删除</a>
<a id="duibiao" class='easyui-linkbutton' onclick="duibiao()" data-options="iconCls: 'fa-thumb-tack',plain:true">对标</a>
<a id="detailyh2" onclick="detailyh()">查看详情</a>
<a id="exportword" onclick="exportyhword()">导出Word</a>
<a id="exportexcel" onclick="exportyhexcel()">导出Excel</a>
</div>
<div style="padding: 5px;float: left;width: 400px;">
<label>快捷查询</label> <label>快捷查询</label>
<select id='kjcxyh' style='width:150px;'> <select id='kjcxyh' style='width:150px;'>
<option value="">请选择</option> <option value="">请选择</option>
@ -20,6 +9,29 @@
</select> </select>
<a onclick="javascript:$('#sdg_yh').dialog('open')" class="easyui-linkbutton" data-options="iconCls: 'fa-search',plain:true">详细筛选</a> <a onclick="javascript:$('#sdg_yh').dialog('open')" class="easyui-linkbutton" data-options="iconCls: 'fa-search',plain:true">详细筛选</a>
</div> </div>
<div>
{% load myfilter %}
{% if request|has_permission:'b_trouble_add' %}
<a id="addyh" onclick="javascript:opendg('新增隐患','addtrouble?a=addyh')">新增</a>
{% endif %}
<a id="doyh" onclick="doyh()">处理</a>
<a id="delyh" onclick="delyh()">删除</a>
<a id="duibiao" class='easyui-linkbutton' onclick="duibiao()" data-options="iconCls: 'fa-thumb-tack',plain:true">对标</a>
<a id="detailyh2" onclick="detailyh()">查看详情</a>
{% if request|has_permission:'b_trouble_import' %}
<a onclick="javascript:$('#drtroubledg').dialog('open').window('center');" class="easyui-linkbutton"
data-options="iconCls:'fa-upload',plain:true">导入待整改隐患</a>
{% endif %}
{% if request|has_permission:'b_trouble_exportdoc' %}
<a id="exportword" onclick="exportyhword()">导出Word</a>
{% endif %}
{% if request|has_permission:'b_trouble_exportxls' %}
<a id="exportexcel" onclick="exportyhexcel()">导出Excel</a>
{% endif %}
</div>
<div id="sdg_yh" class="easyui-dialog" title="筛选条件" style="width:400px;height:420px;" <div id="sdg_yh" class="easyui-dialog" title="筛选条件" style="width:400px;height:420px;"
data-options="iconCls:'fa-search',resizable:true,modal:true,closed:true,border:false"> data-options="iconCls:'fa-search',resizable:true,modal:true,closed:true,border:false">
<div class="easyui-layout" style="width:100%;height:100%;"> <div class="easyui-layout" style="width:100%;height:100%;">
@ -56,7 +68,13 @@
</div> </div>
</div> </div>
<table id="yhtable" style="width:100%;height:100%;"></table> <table id="yhtable" style="width:100%;height:100%;"></table>
<div id="drtroubledg" class="easyui-dialog" title="导入隐患" style="width:400px;height:200px;"
data-options="iconCls:'fa-upload',resizable:true,modal:true,closed:true,border:false">
<p style="color:red;margin-left: 10px">请按模板录入后导入</p>
<p style="margin-left: 10px"><a href="/static/safesite/muban/trouble.xlsx" target="_blank">点击下载模板</a></p>
<p style="margin-left: 10px">录入完成后点击下方按钮上传文件</p>
<input type="file" id="drfile" name="" accept=".xls,.xlsx" style="margin-left: 10px" />
</div>
<!-- <a id="downa" href="" target="_blank" style="display:none"></a> --> <!-- <a id="downa" href="" target="_blank" style="display:none"></a> -->
<script> <script>
$(function () { $(function () {
@ -72,7 +90,7 @@
method: 'get', method: 'get',
url: '', url: '',
fitColumns: true, fitColumns: true,
pagination: 'true', pagination:true,
pageSize: 20, pageSize: 20,
toolbar: '#yhtablebar', toolbar: '#yhtablebar',
border:false, border:false,
@ -221,27 +239,26 @@
url: 'getdickey?dicclass=19&a=combobox', url: 'getdickey?dicclass=19&a=combobox',
editable: false, editable: false,
}); });
$("#sfxbm,#szgbm").combotree({ // $.get('parthandle?a=tree',function(res){
// var data = convert(res);
// $('#sfxbm,#szgbm').combotree();
// $("#sfxbm").combotree('loadData',data);
// $("#szgbm").combotree('loadData',data);
// })
$("#sfxbm").combotree({
url: 'parthandle?a=tree',
editable: false,
loadFilter: function (rows) {
return convert(rows);
},
});
$("#szgbm").combotree({
url: 'parthandle?a=tree', url: 'parthandle?a=tree',
editable: false, editable: false,
loadFilter: function (rows) { loadFilter: function (rows) {
return convert(rows); return convert(rows);
}, },
// formatter: function (node) {
// var s = node.text;
// if (node.children) {
// s += '&nbsp;<span style=\'color:blue\'>(' + node.children.length + ')</span>';
// }
// return s;
// },
// onSelect: function (node) {
// $('#sfxr').combobox({
// url: 'getuser?partid=' + node.id + '&a=combobox',
// editable: false,
// });
// }
}); });
function detailyh() { function detailyh() {
var row = $('#yhtable').datagrid('getSelected'); var row = $('#yhtable').datagrid('getSelected');
if (row) { if (row) {
@ -368,7 +385,39 @@
} }
else { $.messager.alert('提示', '请选择一行数据!'); } else { $.messager.alert('提示', '请选择一行数据!'); }
} }
document.getElementById('drfile').onchange = function () {
var fileObj = this.files[0];
var url = 'drapi?a=todotrouble'
var form = new FormData();
form.append("upfile", fileObj); // 文件对象
xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
xhr.open("post", url, true); //post方式url为服务器请求地址true 该参数规定请求是否异步处理。
xhr.send(form)
$('#drtroubledg').dialog('close')
loading('导入中。。');
xhr.onload = function (evt) { //服务断接收完文件返回的结果
var data = JSON.parse(evt.target.responseText);
removeLoading();
if (data.code == 1) {
$.messager.alert('提示', '上传成功!', 'info', function () {
$("#yhtable").datagrid('reload');
});
}
else if (data.code == 2) {
$.messager.alert('警告', data.msg, 'info', function () {
$("#yhtable").datagrid('reload');
});
}
else {
$.messager.alert('提示', '失败!文件内容有误');
}
document.getElementById('drfile').value = '';
}; //请求完成
xhr.onerror = function (evt) { $.messager.alert('提示', '失败!文件内容有误'); document.getElementById('drfile').value = ''; }; //请求失败
}
</script> </script>
</body> </body>
</html> </html>

View File

View File

@ -0,0 +1,8 @@
from django import template # 导入模板模块
register = template.Library() # 获取模板库对象
#@register.filter(name='tostr') # 通过模板库对象中的装饰器装饰自定义过滤器参数name是过滤器的名称。
@register.filter
def has_permission(req,menucode):
if menucode in req.session.get('permissions'):
return True

View File

@ -7,6 +7,7 @@ from .models import User, Trouble, Dickey, Partment, Dicclass, Train, Drill, Tro
from django.template import RequestContext from django.template import RequestContext
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from django.core import serializers from django.core import serializers
from django.conf import settings
from .forms import UserForm from .forms import UserForm
import json import json
from uuid import UUID from uuid import UUID
@ -17,7 +18,7 @@ from django.db.models import F, Count, Sum
import requests import requests
from .tasks import send_wechatmsgs, send_wechatmsg, yjjs, gettime, yjjs_px, yjjs_yl, updateTzzs, updateAqzs, yjjs_gc, yjjs_ws from .tasks import send_wechatmsgs, send_wechatmsg, yjjs, gettime, yjjs_px, yjjs_yl, updateTzzs, updateAqzs, yjjs_gc, yjjs_ws
from .export import exportdoc, exportxlsx, exportyjdoc, exportsimplexlsx, exportdoc2 from .export import exportdoc, exportxlsx, exportyjdoc, exportsimplexlsx, exportdoc2
from .daoru import drusers, drequipments, drrisks, drquestions, cal_riskact_level, cal_area_risk_level, makeqr, makeqr_train, makeqr_riskact, makeqr_examtest, makeqr_area from .daoru import drusers, drequipments, drrisks, drquestions, cal_riskact_level, cal_area_risk_level, makeqr, makeqr_train, makeqr_riskact, makeqr_examtest, makeqr_area,drtodotroubles
from django.forms.models import model_to_dict from django.forms.models import model_to_dict
from .safespider import getTzzs, getAqzs from .safespider import getTzzs, getAqzs
from duibiao import calsim from duibiao import calsim
@ -33,6 +34,7 @@ from django.contrib.sessions.models import Session
from groups import models as g_models from groups import models as g_models
import logging import logging
from django.contrib.auth.hashers import make_password, check_password from django.contrib.auth.hashers import make_password, check_password
import re
logger = logging.getLogger('log') logger = logging.getLogger('log')
# 分页功能 # 分页功能
@ -511,6 +513,28 @@ def mainhtml(req):
first_day, first_day_of_next_month)).count() first_day, first_day_of_next_month)).count()
return render(req, 'main.html', {'yhnum': yhnum, 'totalyh': totalyh, 'monthyh': monthyh, 'pxnum': pxnum, 'totalpx': totalpx, 'monthpx': monthpx, 'ylnum': ylnum, 'totalyl': totalyl, 'monthyl': monthyl}) return render(req, 'main.html', {'yhnum': yhnum, 'totalyh': totalyh, 'monthyh': monthyh, 'pxnum': pxnum, 'totalpx': totalpx, 'monthpx': monthpx, 'ylnum': ylnum, 'totalyl': totalyl, 'monthyl': monthyl})
def checkpw(data): #密码复杂度校验
reg = re.compile('(?=.*[0-9])(?=.*[a-zA-Z]).{8,30}')
return re.match(reg,data)
def init_permission(user,req):
permission_dict = {}
bgroups = user.userg.all() #所属用户组
x = []
for i in bgroups:
x.extend(i.menulist)
menus = Menu.objects.exclude(menuid__in=[11, 9]).filter(menuid__in=list(set(x)), deletemark=1)
for item in menus:
permission_dict[item.menucode] = ({
'url':item.url,
'parentid':item.parentid.menuid,
'id': item.menuid,
'name': item.menuname,
})
print(permission_dict)
req.session['permissions'] = permission_dict
def login(req): def login(req):
if req.session.get('userid', None): if req.session.get('userid', None):
@ -525,6 +549,7 @@ def login(req):
if check_password(password, user[0].epassword): if check_password(password, user[0].epassword):
req.session['userid'] = user[0].userid req.session['userid'] = user[0].userid
req.session.set_expiry(60*40) req.session.set_expiry(60*40)
init_permission(user[0],req)
return redirect('index') return redirect('index')
else: else:
msg = '密码错误' msg = '密码错误'
@ -545,13 +570,17 @@ def index(req):
return redirect('login') return redirect('login')
userid = req.session['userid'] userid = req.session['userid']
user = User.objects.get(userid=userid) user = User.objects.get(userid=userid)
pwstr = 0
if checkpw(user.password):
pwstr = 1
companyname = user.usecomp.partname companyname = user.usecomp.partname
name = user.name name = user.name
openid = user.openid openid = user.openid
headimgurl = user.headimgurl headimgurl = user.headimgurl
nickname = user.nickname nickname = user.nickname
issuper = user.issuper issuper = user.issuper
return render(req, 'index.html', {'username': name, 'userid': userid, 'openid': openid, 'headimgurl': headimgurl, 'nickname': nickname, 'companyname': companyname, 'issuper': issuper, 'token': user.token}) token = user.token
return render(req, 'index.html', locals())
def logout(req): def logout(req):
@ -781,16 +810,13 @@ def menutree(req):
userid = req.session['userid'] userid = req.session['userid']
if User.objects.get(userid=userid).issuper == 1: # 如果是超管 if User.objects.get(userid=userid).issuper == 1: # 如果是超管
companyid = getcompany(userid) companyid = getcompany(userid)
x = Group.objects.get(usecomp__partid=companyid, grouptype=0).menulink x = Group.objects.get(usecomp__partid=companyid, grouptype=0).menulist
list1 = x.split(',')
else: else:
bgroups = User.objects.get(userid=userid).userg.all() bgroups = User.objects.get(userid=userid).userg.all()
x = '' x = []
for i in bgroups: for i in bgroups:
x = x + ',' + i.menulink x.extend(i.menulist)
list1 = x.split(',') menus = Menu.objects.exclude(menuid__in=[11, 9]).filter(menuid__in=list(set(x)), deletemark=1,type=1).order_by(
# del list1[0]#删除首空字符
menus = Menu.objects.exclude(menuid__in=[11, 9]).filter(menuid__in=list(filter(None, list(set(list1)))), deletemark=1).order_by(
'sortnum').values('menuid', 'menucode', 'parentid', 'url', 'menuname', 'icon').distinct() 'sortnum').values('menuid', 'menucode', 'parentid', 'url', 'menuname', 'icon').distinct()
return HttpResponse(json.dumps(list(menus)), content_type="application/json") return HttpResponse(json.dumps(list(menus)), content_type="application/json")
@ -799,15 +825,15 @@ def apirights(req):
a = req.GET.get('a') a = req.GET.get('a')
if a == 'detail': if a == 'detail':
groupid = req.GET.get('groupid') groupid = req.GET.get('groupid')
haverights = Group.objects.get(groupid=groupid).menulink.split(',') haverights = Group.objects.get(groupid=groupid).menulist
userid = req.session['userid'] userid = req.session['userid']
companyid = getcompany(userid) companyid = getcompany(userid)
allrights = Group.objects.get( allrights = Group.objects.get(
usecomp__partid=companyid, grouptype=0).menulink.split(',') usecomp__partid=companyid, grouptype=0).menulist
menus = Menu.objects.exclude(menuid__in=[11, 9]).filter(menuid__in=allrights, deletemark=1).order_by( menus = Menu.objects.exclude(menuid__in=[11, 9]).filter(menuid__in=allrights, deletemark=1).order_by(
'menuid').values('menuid', 'menucode', 'parentid', 'url', 'menuname', 'icon').distinct() 'menuid').values('menuid', 'menucode', 'parentid', 'url', 'menuname', 'icon','type').distinct()
for i in menus: for i in menus:
if str(i['menuid']) in haverights and i['url'] != None: if i['menuid'] in haverights:
i['checked'] = True i['checked'] = True
else: else:
i['checked'] = False i['checked'] = False
@ -816,21 +842,17 @@ def apirights(req):
groupid = req.GET.get('groupid') groupid = req.GET.get('groupid')
data = req.POST.get('data') data = req.POST.get('data')
data = json.loads(data) data = json.loads(data)
rlist = ['11', '9'] rlist = [11, 9]
for i in data: for i in data:
rlist.append(str(i['id'])) rlist.append(i['id'])
# x = i['id']
# while Menu.objects.get(menuid=x).parentid != None:
# x = Menu.objects.get(menuid=x).parentid.menuid
# rlist.append(str(x))
Group.objects.filter(groupid=groupid).update( Group.objects.filter(groupid=groupid).update(
menulink=','.join(list(set(rlist)))) menulist=rlist)
return JsonResponse({"code": 1}) return JsonResponse({"code": 1})
elif a == 'have': elif a == 'have':
userid = req.session['userid'] userid = req.session['userid']
companyid = getcompany(userid) companyid = getcompany(userid)
allrights = Group.objects.get( allrights = Group.objects.get(
usecomp__partid=companyid, grouptype=0).menulink.split(',') usecomp__partid=companyid, grouptype=0).menulist
return JsonResponse({'code': 1, 'rights': allrights}) return JsonResponse({'code': 1, 'rights': allrights})
@ -848,6 +870,7 @@ def addyh(req):
yhpg = yhdata['yhpg'] if 'yhpg' in yhdata else '' yhpg = yhdata['yhpg'] if 'yhpg' in yhdata else ''
jclx = yhdata['jclx'] jclx = yhdata['jclx']
yhlx = yhdata['yhlx'] if 'yhlx' in yhdata else '' yhlx = yhdata['yhlx'] if 'yhlx' in yhdata else ''
yhlxo = yhdata['yhlxo'] if 'yhlxo' in yhdata else ''
yhlb = yhdata['yhlb'] if 'yhlb' in yhdata else '' yhlb = yhdata['yhlb'] if 'yhlb' in yhdata else ''
yyfx = yhdata['yyfx'] if 'yyfx' in yhdata else '' yyfx = yhdata['yyfx'] if 'yyfx' in yhdata else ''
zgcs = yhdata['zgcs'] if 'zgcs' in yhdata else '' zgcs = yhdata['zgcs'] if 'zgcs' in yhdata else ''
@ -881,6 +904,8 @@ def addyh(req):
a.yhpg = Dickey.objects.get(dickeyid=yhpg) a.yhpg = Dickey.objects.get(dickeyid=yhpg)
if jclx != '': if jclx != '':
a.jclx = Dickey.objects.get(dickeyid=jclx) a.jclx = Dickey.objects.get(dickeyid=jclx)
if yhlxo:
a.yhlxo = Dickey.objects.get(dickeyid=yhlxo)
if yhlx != '': if yhlx != '':
a.yhlx = Dicclass.objects.get(dicid=yhlx) a.yhlx = Dicclass.objects.get(dicid=yhlx)
if yhlb != '': if yhlb != '':
@ -1751,7 +1776,7 @@ def grouphandle(req):
userid = req.session['userid'] userid = req.session['userid']
companyid = getcompany(userid) companyid = getcompany(userid)
a = Group.objects.filter(usecomp__partid=companyid).exclude( a = Group.objects.filter(usecomp__partid=companyid).exclude(
grouptype=0).values('groupid', 'groupname', 'grouptype') grouptype=0).order_by('groupid').values('groupid', 'groupname', 'grouptype')
total = a.count() total = a.count()
return HttpResponse(transjson(total, a), content_type="application/json") return HttpResponse(transjson(total, a), content_type="application/json")
elif req.GET.get('a') == 'list2': # 排除全体用户组 elif req.GET.get('a') == 'list2': # 排除全体用户组
@ -2633,13 +2658,17 @@ def parthandle(req):
partname = req.POST.get('partname') partname = req.POST.get('partname')
parentid = req.POST.get('parentid') parentid = req.POST.get('parentid')
partobj = Partment.objects.get(partid=partid) partobj = Partment.objects.get(partid=partid)
oldpartlink = partobj.partlink + partid + ',' if partobj.iscompany==1:
partlink = Partment.objects.get( partobj.partname = partname
partid=parentid).partlink + parentid + ',' partobj.save()
Partment.objects.filter(partid=partid).update( else:
partname=partname, parentid=parentid, partlink=partlink) oldpartlink = partobj.partlink + partid + ','
Partment.objects.filter(partlink__contains=oldpartlink).update( partlink = Partment.objects.get(
partlink=partlink + partid + ',') partid=parentid).partlink + parentid + ','
Partment.objects.filter(partid=partid).update(
partname=partname, parentid=parentid, partlink=partlink)
Partment.objects.filter(partlink__contains=oldpartlink).update(
partlink=partlink + partid + ',')
return JsonResponse({"code": 1}) return JsonResponse({"code": 1})
else: else:
try: try:
@ -2656,13 +2685,19 @@ def parthandle(req):
elif req.GET.get('a') == 'tree': elif req.GET.get('a') == 'tree':
userid = req.session['userid'] userid = req.session['userid']
companyid = getcompany(userid) companyid = getcompany(userid)
list_items = (Partment.objects.filter(partlink__contains=','+companyid+',') | Partment.objects.filter(partid=companyid) list_items = (Partment.objects.filter(Q(partlink__contains=','+companyid+',') | Q(partid=companyid),Q(deletemark=1))
).annotate(id=F('partid'), parentId=F('parentid'), name=F('partname')).values('id', 'parentId', 'name') ).annotate(id=F('partid'), parentId=F('parentid'), name=F('partname')).values('id', 'parentId', 'name')
return HttpResponse(json.dumps(list(list_items)), content_type="application/json") return HttpResponse(json.dumps(list(list_items)), content_type="application/json")
elif req.GET.get('a') == 'tree4':#不能选自己部门及以下
userid = req.session['userid']
companyid = getcompany(userid)
expart = req.GET.get('expart')
list_items = (Partment.objects.filter(Q(partlink__contains=','+companyid+',') | Q(partid=companyid),Q(deletemark=1)).exclude(Q(partid=expart)|Q(partlink__contains=','+expart+','))).annotate(id=F('partid'), parentId=F('parentid'), name=F('partname')).values('id', 'parentId', 'name')
return HttpResponse(json.dumps(list(list_items)), content_type="application/json")
elif req.GET.get('a') == 'tree2': elif req.GET.get('a') == 'tree2':
userid = req.session['userid'] userid = req.session['userid']
companyid = getcompany(userid) companyid = getcompany(userid)
list_items = (Partment.objects.filter(partlink__contains=','+companyid+',')).annotate(id=F('partid'), list_items = (Partment.objects.filter(partlink__contains=','+companyid+',',deletemark=1)).annotate(id=F('partid'),
parentId=F('parentid'), name=F('partname')).values('id', 'parentId', 'name', 'iscompany') parentId=F('parentid'), name=F('partname')).values('id', 'parentId', 'name', 'iscompany')
return HttpResponse(json.dumps(list(list_items)), content_type="application/json") return HttpResponse(json.dumps(list(list_items)), content_type="application/json")
elif req.GET.get('a') == 'tree3': # 能够指派的部门,包括自己所在的部门 elif req.GET.get('a') == 'tree3': # 能够指派的部门,包括自己所在的部门
@ -3596,7 +3631,7 @@ def importusers(req):
def apicompany(req): def apicompany(req):
if int(req.session.get('userid')) == 8: if int(req.session.get('userid')) == 8:
a = req.GET.get('a') a = req.GET.get('a')
menurights = '11,1,2,3,4,5,6,7,8,9,10,12,13,15,16,17,18,19,20,21,22,23,24,28,29,32,36,46,47,48,50' # 菜单编码 menurights = [11,1,2,3,4,5,6,7,8,9,10,12,13,15,16,17,18,19,20,21,22,23,24,28,29,32,36,46,47,48,50] # 初始化菜单编码
if a == 'add': if a == 'add':
admin = req.GET.get('admin') admin = req.GET.get('admin')
company = req.GET.get('company') company = req.GET.get('company')
@ -3621,13 +3656,13 @@ def apicompany(req):
y.save() y.save()
part = Partment.objects.get(partid=y.partid) part = Partment.objects.get(partid=y.partid)
Group.objects.create( Group.objects.create(
groupname='超管', grouptype=0, usecomp=part, menulink=menurights) groupname='超管', grouptype=0, usecomp=part, menulist=menurights)
Group.objects.create( Group.objects.create(
groupname='安全员', grouptype=1, usecomp=part, menulink=menurights) groupname='安全员', grouptype=1, usecomp=part, menulist=menurights)
Group.objects.create( Group.objects.create(
groupname='全体用户', grouptype=3, usecomp=part, menulink=menurights) groupname='全体用户', grouptype=3, usecomp=part, menulist=menurights)
z = Group(groupname='主管', grouptype=2, z = Group(groupname='主管', grouptype=2,
usecomp=part, menulink=menurights) usecomp=part, menulist=menurights)
z.save() z.save()
z.users.add(x) z.users.add(x)
Yjsetup.objects.create(monthyhavg=100, safev=50, warnv=75, alertv=100, maxv=200, yhpgqz=4, Yjsetup.objects.create(monthyhavg=100, safev=50, warnv=75, alertv=100, maxv=200, yhpgqz=4,
@ -3705,7 +3740,22 @@ def drapi(req):
return JsonResponse({"code": 2, "msg": msg}) return JsonResponse({"code": 2, "msg": msg})
else: else:
return JsonResponse({"code": 1}) return JsonResponse({"code": 1})
elif a == 'todotrouble':
userid = req.session['userid']
companyid = getcompany(userid)
file_name = 'c'+str(companyid)+'_'+req.FILES['upfile'].name
upload_folder = 'media/temp'
if not os.path.exists(upload_folder):
os.mkdir(upload_folder)
filepath = os.path.join(upload_folder, file_name)
filepath = filepath.replace('\\', '/')
with open(filepath, 'wb') as f:
f.write(req.FILES['upfile'].read())
msg = drtodotroubles(companyid, filepath, userid)
if msg:
return JsonResponse({"code": 2, "msg": msg})
else:
return JsonResponse({"code": 1})
def apimiss(req): def apimiss(req):
a = req.GET.get('a') a = req.GET.get('a')
@ -4514,9 +4564,9 @@ def apitool(req):
if req.GET.get('company'): if req.GET.get('company'):
objs = objs.filter(usecomp__partid=req.GET.get('company')) objs = objs.filter(usecomp__partid=req.GET.get('company'))
for i in objs: for i in objs:
menulist = i.menulink.split(',') menulist = i.menulist
menulist.append(menu) menulist.append(menu)
if menu == '30': if menu == 30:
company = Partment.objects.get(partid=req.GET.get('company')) company = Partment.objects.get(partid=req.GET.get('company'))
objs = Map.objects.filter(usecomp=company) objs = Map.objects.filter(usecomp=company)
if objs.exists(): if objs.exists():
@ -4524,8 +4574,7 @@ def apitool(req):
else: else:
Map.objects.create( Map.objects.create(
name='默认地图', pic='/static/safesite/mystatic/images/snc.jpg', usecomp=company, default=1) name='默认地图', pic='/static/safesite/mystatic/images/snc.jpg', usecomp=company, default=1)
newlist = list(set(menulist)) i.menulist = list(set(menulist))
i.menulink = ','.join(newlist)
i.save() i.save()
return JsonResponse({"code": 1}) return JsonResponse({"code": 1})
elif a == 'correction': elif a == 'correction':
@ -4658,6 +4707,27 @@ def apitool(req):
i.aqy = i.aqy.replace(',,', ',') i.aqy = i.aqy.replace(',,', ',')
i.save() i.save()
return JsonResponse({"code": 1}) return JsonResponse({"code": 1})
elif a == 'correct_question':
for i in Question.objects.exclude(questioncat__usecomp__partid=1):
i.usecomps = ','+str(i.questioncat.usecomp.partid)+','
i.save()
return JsonResponse({"code": 1})
elif a == 'correct_menulist':
for i in Group.objects.all():
if i.menulink:
i.menulist = list(set(list(filter(None, i.menulink.split(',')))))
i.save()
return JsonResponse({"code": 1})
elif a == 'correct_menuhas':
buttons = Menu.objects.filter(type=2)
for group in Group.objects.filter(grouptype=0):
menulist = group.menulist
for button in buttons:
if button.parentid.menuid in menulist: #如果菜单在所拥有权限内
menulist.append(button.menuid)
group.menulist = list(set(menulist))
group.save()
return JsonResponse({"code": 1})
def apinotice(req): def apinotice(req):
@ -5399,15 +5469,14 @@ def apiquestion(req):
companyid = getcompany(userid) companyid = getcompany(userid)
if a == 'listall': if a == 'listall':
x = Question.objects.filter(deletemark=1) x = Question.objects.filter(deletemark=1)
a = (x.filter(usecomps__contains=',1,') | x.filter( a = x.exclude(nousecomps__contains=','+companyid+',').filter(Q(usecomps__contains=',1,') | Q(usecomps__contains=','+companyid+','))
usecomps__contains=','+companyid+',')).exclude(nousecomps__contains=','+companyid+',')
if req.GET.get('tmlx'): if req.GET.get('tmlx'):
tmlx = req.GET.get('tmlx') tmlx = req.GET.get('tmlx')
a = x.filter(questioncat__link__contains=',' + a = a.filter(Q(questioncat__link__contains=',' +
str(tmlx)+',') | x.filter(questioncat__id=tmlx) str(tmlx)+',') | Q(questioncat__id=tmlx))
elif req.GET.get('gwlx'): elif req.GET.get('gwlx'):
gwlx = req.GET.get('gwlx') gwlx = req.GET.get('gwlx')
a = x.filter(station=Group.objects.get(groupid=gwlx)) a = a.filter(station=Group.objects.get(groupid=gwlx))
total = a.count() total = a.count()
startnum, endnum = fenye(req) startnum, endnum = fenye(req)
a = a.order_by('-id')[startnum:endnum].values('id', 'title', 'type', 'level', 'questioncat__id', a = a.order_by('-id')[startnum:endnum].values('id', 'title', 'type', 'level', 'questioncat__id',
@ -5470,7 +5539,7 @@ def apiquestion(req):
if user.issuper == 1 or a.createuser == user: if user.issuper == 1 or a.createuser == user:
nl = a.nousecomps.split(',') nl = a.nousecomps.split(',')
nl.append(companyid) nl.append(companyid)
nl = ','+','.join(list(filter(None, nl)))+',' nl = ','+','.join(list(set(list(filter(None, nl)))))+','
a.nousecomps = nl a.nousecomps = nl
a.save() a.save()
return JsonResponse({"code": 1}) return JsonResponse({"code": 1})
@ -5815,8 +5884,12 @@ def apiexamtest(req):
a = ExamTest.objects.filter(id=id).values('id', 'num', 'name', 'starttime', 'endtime', 'duration', 'totalscore', a = ExamTest.objects.filter(id=id).values('id', 'num', 'name', 'starttime', 'endtime', 'duration', 'totalscore',
'passscore', 'exampaper__total', 'createtime', 'state', 'exampaper__name', 'createuser__name', 'type', 'qrcode')[0] 'passscore', 'exampaper__total', 'createtime', 'state', 'exampaper__name', 'createuser__name', 'type', 'qrcode')[0]
objs = ExamTestDetail.objects.filter(examtest__id=id).order_by('-score').values( objs = ExamTestDetail.objects.filter(examtest__id=id).order_by('-score').values(
'id', 'user__name', 'user__ubelongpart__partname', 'took', 'score', 'ison', 'passcode') 'id', 'user__name', 'user__ubelongpart__partname', 'took', 'score', 'ison', 'passcode','starttime')
a['cjrydetail'] = list(objs) a['cjrydetail'] = list(objs)
a['ison'] = 1
tests = ExamTestDetail.objects.filter(examtest__id=id,user__userid=userid)#考试记录
if tests.exists():
a['ison'] = tests[0].ison
return HttpResponse(json.dumps(a, cls=MyEncoder), content_type="application/json") return HttpResponse(json.dumps(a, cls=MyEncoder), content_type="application/json")
elif a == 'detailtm': elif a == 'detailtm':
id = req.GET.get('id') id = req.GET.get('id')