角色管理列表,新增,修改
This commit is contained in:
parent
7478527647
commit
2ed27bdd65
|
|
@ -54,4 +54,9 @@ public class Role extends PageEntity {
|
||||||
*/
|
*/
|
||||||
private Integer state;
|
private Integer state;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色级别
|
||||||
|
*/
|
||||||
|
private Integer level;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ public interface RoleDao {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Options(useGeneratedKeys = true, keyProperty = "id")
|
@Options(useGeneratedKeys = true, keyProperty = "id")
|
||||||
@Insert("insert into sys_role(role_name, role_code,remarks,org_id,state, create_time, update_time,del_flag) values(#{name},#{roleCode}, #{remarks},#{orgId},#{state}, now(),now(),0)")
|
@Insert("insert into sys_role(role_name, role_code,remarks,org_id,state, create_time, update_time,del_flag,level) values(#{name},#{roleCode}, #{remarks},#{orgId},#{state}, now(),now(),0,#{level})")
|
||||||
int save(Role role);
|
int save(Role role);
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -55,7 +55,7 @@ public interface RoleDao {
|
||||||
* @param role
|
* @param role
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Update("update sys_role t set t.role_name = #{name},t.role_code = #{roleCode}, t.remarks = #{remarks},org_id=#{orgId},state=#{state}, update_time = now() where t.role_id = #{id}")
|
@Update("update sys_role t set t.role_name = #{name},t.role_code = #{roleCode}, t.remarks = #{remarks},org_id=#{orgId},state=#{state}, update_time = now(),level=#{level} where t.role_id = #{id}")
|
||||||
int update(Role role);
|
int update(Role role);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -51,12 +51,12 @@ public class RoleServiceImpl implements RoleService {
|
||||||
return ServerResponse.createErroe(role.getName() + "已存在");
|
return ServerResponse.createErroe(role.getName() + "已存在");
|
||||||
}
|
}
|
||||||
//查询角色编码是否存在
|
//查询角色编码是否存在
|
||||||
if (role.getRoleCode() != null) {
|
// if (role.getRoleCode() != null) {
|
||||||
Role r1 = roleDao.getRoleCode(role.getRoleCode());
|
// Role r1 = roleDao.getRoleCode(role.getRoleCode());
|
||||||
if (r1 != null) {
|
// if (r1 != null) {
|
||||||
return ServerResponse.createErroe(role.getRoleCode() + "已存在");
|
// return ServerResponse.createErroe(role.getRoleCode() + "已存在");
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
roleDao.save(role);
|
roleDao.save(role);
|
||||||
if (!CollectionUtils.isEmpty(permissionIds)) {
|
if (!CollectionUtils.isEmpty(permissionIds)) {
|
||||||
roleDao.saveRolePermission(role.getId(), permissionIds);
|
roleDao.saveRolePermission(role.getId(), permissionIds);
|
||||||
|
|
@ -72,12 +72,12 @@ public class RoleServiceImpl implements RoleService {
|
||||||
return ServerResponse.createErroe(role.getName() + "已存在");
|
return ServerResponse.createErroe(role.getName() + "已存在");
|
||||||
}
|
}
|
||||||
//查询角色编码是否存在
|
//查询角色编码是否存在
|
||||||
if (role.getRoleCode() != null) {
|
/*if (role.getRoleCode() != null) {
|
||||||
Role r1 = roleDao.getRoleCode(role.getRoleCode());
|
Role r1 = roleDao.getRoleCode(role.getRoleCode());
|
||||||
if (r1 != null && !Objects.equals(r1.getId(), role.getId())) {
|
if (r1 != null && !Objects.equals(r1.getId(), role.getId())) {
|
||||||
return ServerResponse.createErroe(role.getRoleCode() + "已存在");
|
return ServerResponse.createErroe(role.getRoleCode() + "已存在");
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
roleDao.update(role);
|
roleDao.update(role);
|
||||||
roleDao.deleteRolePermission(role.getId());
|
roleDao.deleteRolePermission(role.getId());
|
||||||
if (!CollectionUtils.isEmpty(permissionIds)) {
|
if (!CollectionUtils.isEmpty(permissionIds)) {
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,9 @@
|
||||||
t.remarks,
|
t.remarks,
|
||||||
so.org_name as orgName,
|
so.org_name as orgName,
|
||||||
t.state,
|
t.state,
|
||||||
t.create_time AS createTime
|
t.create_time AS createTime,
|
||||||
|
t.level ,
|
||||||
|
t.update_time AS updateTime
|
||||||
from sys_role t
|
from sys_role t
|
||||||
LEFT JOIN sys_org so on so.org_id=t.org_id and so.del_flag='0'
|
LEFT JOIN sys_org so on so.org_id=t.org_id and so.del_flag='0'
|
||||||
<include refid="where" />
|
<include refid="where" />
|
||||||
|
|
@ -49,7 +51,8 @@
|
||||||
t.role_code as roleCode,
|
t.role_code as roleCode,
|
||||||
t.remarks,
|
t.remarks,
|
||||||
t.org_id as orgId,
|
t.org_id as orgId,
|
||||||
t.state
|
t.state,
|
||||||
|
t.level
|
||||||
from sys_role t where t.role_id = #{id}
|
from sys_role t where t.role_id = #{id}
|
||||||
</select>
|
</select>
|
||||||
<!--获取用户使用该角色数量-->
|
<!--获取用户使用该角色数量-->
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
let form, layer, util, idParam;
|
let form, layer, util, idParam, laydate;
|
||||||
let arr = ['background', 'web', 'mobile', 'wx'];
|
let arr = ['background', 'web', 'mobile', 'wx'];
|
||||||
let background, web, mobile, wx;
|
let background, web, mobile, wx;
|
||||||
let data = [];
|
let data = [];
|
||||||
|
|
@ -7,6 +7,200 @@ let data = [];
|
||||||
let proList;
|
let proList;
|
||||||
let majorList;
|
let majorList;
|
||||||
let processList;
|
let processList;
|
||||||
|
|
||||||
|
|
||||||
|
// 模拟后台返回的数据结构
|
||||||
|
const mockBackendResponse = (file) => {
|
||||||
|
const originalPath = `/uploads/original/${file.name}`;
|
||||||
|
const compressedPath = `/uploads/compressed/${file.name}`;
|
||||||
|
const watermarkedPath = `/uploads/watermarked/${file.name}`;
|
||||||
|
return {
|
||||||
|
code: 200,
|
||||||
|
msg: '上传成功',
|
||||||
|
data: {
|
||||||
|
originalPath,
|
||||||
|
compressedPath,
|
||||||
|
watermarkedPath
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// 存储图片路径信息
|
||||||
|
var imagePaths = [];
|
||||||
|
|
||||||
|
layui.use(['laydate', 'upload'], function () {
|
||||||
|
var upload = layui.upload;
|
||||||
|
var layer = layui.layer;
|
||||||
|
var element = layui.element;
|
||||||
|
var $ = layui.$;
|
||||||
|
|
||||||
|
|
||||||
|
// 多图片上传
|
||||||
|
upload.render({
|
||||||
|
elem: '#ID-upload-demo-btn-2',
|
||||||
|
url: '/your/upload/endpoint',
|
||||||
|
// url: 'javascript:;', // 阻止真实请求
|
||||||
|
multiple: true,
|
||||||
|
auto: true,
|
||||||
|
// 文件选择后的回调
|
||||||
|
choose: function (obj) {
|
||||||
|
// 当前已有的图片数量
|
||||||
|
const currentImages = $('#upload-demo-preview div').length;
|
||||||
|
// 获取当前批次选择的文件列表
|
||||||
|
const newFiles = obj.pushFile();
|
||||||
|
const newFilesCount = Object.keys(newFiles).length;
|
||||||
|
// 总图片数量
|
||||||
|
const totalImages = currentImages + newFilesCount;
|
||||||
|
if (totalImages > 9) {
|
||||||
|
layer.alert(`最多只能上传9张图片,当前已选 ${currentImages} 张,此次选择了 ${newFilesCount} 张`, { icon: 2 });
|
||||||
|
return false; // 阻止上传
|
||||||
|
}
|
||||||
|
},
|
||||||
|
before: function (obj) {
|
||||||
|
obj.preview(function (index, file, result) {
|
||||||
|
const uniqueId = new Date().getTime() + '-' + index;
|
||||||
|
$('#upload-demo-preview').append(
|
||||||
|
'<div id="img-' + uniqueId + '" style="display: inline-block; position: relative;">' +
|
||||||
|
'<img src="' + result + '" alt="' + file.name + '" style="width: 90px; height: 90px;">' +
|
||||||
|
'<button class="layui-btn layui-btn-xs layui-btn-danger" style="position: absolute; top: 0; right: 0;" onclick="removeImage(\'' + uniqueId + '\')">删除</button>' +
|
||||||
|
'</div>'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
done: function (res, index, upload) {
|
||||||
|
// 获取当前上传的文件
|
||||||
|
const files = this.files;
|
||||||
|
const file = files[index];
|
||||||
|
const backendResponse = mockBackendResponse(file);
|
||||||
|
if (backendResponse.code === 200) {
|
||||||
|
const imageData = {
|
||||||
|
uniqueId: `${new Date().getTime()}-${index}`,
|
||||||
|
originalPath: backendResponse.data.originalPath,
|
||||||
|
compressedPath: backendResponse.data.compressedPath,
|
||||||
|
watermarkedPath: backendResponse.data.watermarkedPath
|
||||||
|
};
|
||||||
|
imagePaths.push(imageData);
|
||||||
|
$('#imagePaths').val(JSON.stringify(imagePaths));
|
||||||
|
} else {
|
||||||
|
layer.alert('上传失败: ' + res.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
console.log("imagePaths",imagePaths)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
upload.render({
|
||||||
|
elem: '#ID-upload-demo-btn-3',
|
||||||
|
url: '/your/upload/endpoint',
|
||||||
|
// url: 'javascript:;', // 阻止真实请求
|
||||||
|
multiple: true,
|
||||||
|
auto: true,
|
||||||
|
// 文件选择后的回调
|
||||||
|
choose: function (obj) {
|
||||||
|
// 当前已有的图片数量
|
||||||
|
const currentImages = $('#upload-demo-preview div').length;
|
||||||
|
// 获取当前批次选择的文件列表
|
||||||
|
const newFiles = obj.pushFile();
|
||||||
|
const newFilesCount = Object.keys(newFiles).length;
|
||||||
|
// 总图片数量
|
||||||
|
const totalImages = currentImages + newFilesCount;
|
||||||
|
if (totalImages > 9) {
|
||||||
|
layer.alert(`最多只能上传9张图片,当前已选 ${currentImages} 张,此次选择了 ${newFilesCount} 张`, { icon: 2 });
|
||||||
|
return false; // 阻止上传
|
||||||
|
}
|
||||||
|
},
|
||||||
|
before: function (obj) {
|
||||||
|
obj.preview(function (index, file, result) {
|
||||||
|
const uniqueId = new Date().getTime() + '-' + index;
|
||||||
|
$('#upload-demo-preview-3').append(
|
||||||
|
'<div id="img-' + uniqueId + '" style="display: inline-block; position: relative;">' +
|
||||||
|
'<img src="' + result + '" alt="' + file.name + '" style="width: 90px; height: 90px;">' +
|
||||||
|
'<button class="layui-btn layui-btn-xs layui-btn-danger" style="position: absolute; top: 0; right: 0;" onclick="removeImage(\'' + uniqueId + '\')">删除</button>' +
|
||||||
|
'</div>'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
done: function (res, index, upload) {
|
||||||
|
// 获取当前上传的文件
|
||||||
|
const files = this.files;
|
||||||
|
const file = files[index];
|
||||||
|
const backendResponse = mockBackendResponse(file);
|
||||||
|
if (backendResponse.code === 200) {
|
||||||
|
const imageData = {
|
||||||
|
uniqueId: `${new Date().getTime()}-${index}`,
|
||||||
|
originalPath: backendResponse.data.originalPath,
|
||||||
|
compressedPath: backendResponse.data.compressedPath,
|
||||||
|
watermarkedPath: backendResponse.data.watermarkedPath
|
||||||
|
};
|
||||||
|
imagePaths.push(imageData);
|
||||||
|
$('#imagePaths').val(JSON.stringify(imagePaths));
|
||||||
|
} else {
|
||||||
|
layer.alert('上传失败: ' + res.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
console.log("imagePaths",imagePaths)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#ID-upload-submit-btn').click(function() {
|
||||||
|
if (imagePaths.length === 0) {
|
||||||
|
layer.msg('请先选择图片', {icon: 2});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
layer.msg('模拟上传中...', {icon: 16, time: 2000});
|
||||||
|
|
||||||
|
// 模拟上传延迟
|
||||||
|
setTimeout(function() {
|
||||||
|
// 清空旧数据(仅保留成功上传的)
|
||||||
|
const successPaths = [];
|
||||||
|
|
||||||
|
// 遍历所有图片,模拟上传
|
||||||
|
imagePaths.forEach(item => {
|
||||||
|
const backendResponse = mockBackendResponse(item.file);
|
||||||
|
if (backendResponse.code === 200) {
|
||||||
|
successPaths.push({
|
||||||
|
uniqueId: item.uniqueId,
|
||||||
|
originalPath: backendResponse.data.originalPath,
|
||||||
|
compressedPath: backendResponse.data.compressedPath,
|
||||||
|
watermarkedPath: backendResponse.data.watermarkedPath
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 更新数据
|
||||||
|
imagePaths = successPaths;
|
||||||
|
$('#imagePaths').val(JSON.stringify(imagePaths));
|
||||||
|
|
||||||
|
layer.msg('上传成功!', {icon: 1});
|
||||||
|
console.log("当前图片数据:", imagePaths);
|
||||||
|
}, 1500);
|
||||||
|
});
|
||||||
|
|
||||||
|
window.removeImage = function (uniqueId) {
|
||||||
|
$('#img-' + uniqueId).remove();
|
||||||
|
const indexToRemove = imagePaths.findIndex(path => path.uniqueId === uniqueId);
|
||||||
|
if (indexToRemove !== -1) {
|
||||||
|
imagePaths.splice(indexToRemove, 1);
|
||||||
|
$('#imagePaths').val(JSON.stringify(imagePaths));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
laydate = layui.laydate;
|
||||||
|
// Render date pickers
|
||||||
|
laydate.render({
|
||||||
|
elem: '#violationTime',
|
||||||
|
});
|
||||||
|
laydate.render({
|
||||||
|
elem: '#rectificationDeadline',
|
||||||
|
});
|
||||||
|
laydate.render({
|
||||||
|
elem: '#correctionTime',
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
function setParams(params) {
|
function setParams(params) {
|
||||||
console.log(params)
|
console.log(params)
|
||||||
idParam = JSON.parse(params).id;
|
idParam = JSON.parse(params).id;
|
||||||
|
|
@ -21,21 +215,9 @@ function setParams(params) {
|
||||||
if (idParam) {
|
if (idParam) {
|
||||||
getUserById();
|
getUserById();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
form.render();//重新渲染页面checkbox控件
|
form.render();//重新渲染页面checkbox控件
|
||||||
form.on('submit(formData)', function (data) {
|
form.on('submit(formData)', function (data) {
|
||||||
data.field.id = $('#id').val();
|
data.field.id = $('#id').val();
|
||||||
console.log( data.field.orgId_select_nodeId);
|
|
||||||
if(!data.field.orgId_select_nodeId){
|
|
||||||
return layer.alert("请选择组织机构!", {icon: 2})
|
|
||||||
}
|
|
||||||
let phone = $('#phone').val();
|
|
||||||
if(phone){
|
|
||||||
if (!(/^1[3456789]\d{9}$/.test(phone))) {
|
|
||||||
return layer.alert("请输入正确的手机号", {icon: 2})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
saveData(data);
|
saveData(data);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -50,7 +232,7 @@ function getProSelected() {
|
||||||
ajaxRequest(url, "POST", null, true, function () {
|
ajaxRequest(url, "POST", null, true, function () {
|
||||||
}, function (result) {
|
}, function (result) {
|
||||||
if (result.code === 200) {
|
if (result.code === 200) {
|
||||||
setSelectValueName(result.data, 'projectName',"请选择项目(可搜索)");
|
setSelectValueName(result.data, 'projectName', "请选择项目(可搜索)");
|
||||||
} else {
|
} else {
|
||||||
layer.alert(result.msg, {icon: 2})
|
layer.alert(result.msg, {icon: 2})
|
||||||
}
|
}
|
||||||
|
|
@ -63,11 +245,11 @@ function getProSelected() {
|
||||||
* 获取专业数据
|
* 获取专业数据
|
||||||
*/
|
*/
|
||||||
function getMajorSelected() {
|
function getMajorSelected() {
|
||||||
let url = dataUrl + '/users/getRoleAll';
|
let url = dataUrl + '/sys/select/getProfessionSelect';
|
||||||
ajaxRequest(url, "POST", null, true, function () {
|
ajaxRequest(url, "GET", null, true, function () {
|
||||||
}, function (result) {
|
}, function (result) {
|
||||||
if (result.code === 200) {
|
if (result.code === 200) {
|
||||||
setSelectValueName(result.data, 'specialty',"请选择专业");
|
setSelectValueName(result.data, 'specialty', "请选择专业");
|
||||||
} else {
|
} else {
|
||||||
layer.alert(result.msg, {icon: 2})
|
layer.alert(result.msg, {icon: 2})
|
||||||
}
|
}
|
||||||
|
|
@ -80,11 +262,11 @@ function getMajorSelected() {
|
||||||
* 获取工序数据
|
* 获取工序数据
|
||||||
*/
|
*/
|
||||||
function getProcessSelected() {
|
function getProcessSelected() {
|
||||||
let url = dataUrl + '/users/getRoleAll';
|
let url = dataUrl + '/sys/select/getProcessSelect';
|
||||||
ajaxRequest(url, "POST", null, true, function () {
|
ajaxRequest(url, "GET", null, true, function () {
|
||||||
}, function (result) {
|
}, function (result) {
|
||||||
if (result.code === 200) {
|
if (result.code === 200) {
|
||||||
setSelectValueName(result.data, 'process','请选择工序');
|
setSelectValueName(result.data, 'process', '请选择工序');
|
||||||
} else {
|
} else {
|
||||||
layer.alert(result.msg, {icon: 2})
|
layer.alert(result.msg, {icon: 2})
|
||||||
}
|
}
|
||||||
|
|
@ -94,7 +276,6 @@ function getProcessSelected() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 根据id获取用户信息
|
// 根据id获取用户信息
|
||||||
function getUserById() {
|
function getUserById() {
|
||||||
let loadingMsg = layer.msg("数据加载中,请稍候...", {icon: 16, scrollbar: false, time: 0,});
|
let loadingMsg = layer.msg("数据加载中,请稍候...", {icon: 16, scrollbar: false, time: 0,});
|
||||||
|
|
@ -103,8 +284,8 @@ function getUserById() {
|
||||||
id: idParam
|
id: idParam
|
||||||
}
|
}
|
||||||
console.log(params)
|
console.log(params)
|
||||||
params={
|
params = {
|
||||||
encryptedData:encryptCBC(JSON.stringify(params))
|
encryptedData: encryptCBC(JSON.stringify(params))
|
||||||
}
|
}
|
||||||
ajaxRequest(url, "POST", params, true, function () {
|
ajaxRequest(url, "POST", params, true, function () {
|
||||||
}, function (result) {
|
}, function (result) {
|
||||||
|
|
@ -123,49 +304,14 @@ function getUserById() {
|
||||||
|
|
||||||
// 设置表单内容
|
// 设置表单内容
|
||||||
function setFormData(data) {
|
function setFormData(data) {
|
||||||
console.log("data:",data)
|
console.log("data:", data)
|
||||||
if (data) {
|
if (data) {
|
||||||
$("#password").removeAttr("lay-verify");
|
|
||||||
$("#pwd").css("display","none");
|
|
||||||
$('#id').val(data.id)
|
$('#id').val(data.id)
|
||||||
// $('#userCode').val(data.userCode)
|
$('#inspector').val("修改")
|
||||||
$('#username').val(data.username)
|
|
||||||
$('#loginName').val(data.loginName)
|
$('#loginName').val(data.loginName)
|
||||||
$('#phone').val(data.phone)
|
$('#phone').val(data.phone)
|
||||||
|
|
||||||
// 设置选中状态
|
|
||||||
if (data.sex === 1) {
|
|
||||||
document.getElementById('sex_1').checked = true;
|
|
||||||
} else if (data.sex === 0) {
|
|
||||||
document.getElementById('sex_0').checked = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.userType === '1') {
|
|
||||||
document.getElementById('userType_1').checked = true;
|
|
||||||
} else if (data.userType === '0') {
|
|
||||||
document.getElementById('userType_0').checked = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.state === 1) {
|
|
||||||
document.getElementById('state_1').checked = true;
|
|
||||||
} else if (data.state === 0) {
|
|
||||||
document.getElementById('state_0').checked = true;
|
|
||||||
}
|
|
||||||
$('#type_'+data.type).attr('checked', true)
|
|
||||||
$('#orgId').val(data.orgId)
|
|
||||||
$('#roleId').val(data.roleId)
|
|
||||||
$('#roleId option[value=' + data.roleId + ']').attr('selected', true)
|
$('#roleId option[value=' + data.roleId + ']').attr('selected', true)
|
||||||
$('#teamId').val(data.teamId)
|
|
||||||
$('#teamId option[value=' + data.teamId + ']').attr('selected', true)
|
|
||||||
var arrCB = data.loginTypes;
|
|
||||||
for (var j = 0; j < arrCB.length; j++) {
|
|
||||||
var cbthis = $("input[name='loginType']");
|
|
||||||
for (var i = 0; i < cbthis.length; i++) {
|
|
||||||
if (cbthis[i].value == arrCB[j]) {
|
|
||||||
cbthis[i].checked = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
layui.form.render();
|
layui.form.render();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -179,19 +325,12 @@ function saveData(data) {
|
||||||
let loadingMsg = layer.msg('数据上传中,请稍候...', {icon: 16, scrollbar: false, time: 0});
|
let loadingMsg = layer.msg('数据上传中,请稍候...', {icon: 16, scrollbar: false, time: 0});
|
||||||
let url = dataUrl + "/users/addTemp";
|
let url = dataUrl + "/users/addTemp";
|
||||||
let params = data.field;
|
let params = data.field;
|
||||||
var arr_box = [];//固定复选框
|
if (params.id != "") {
|
||||||
$('#cbGuDing input[type=checkbox]:checked').each(function () {
|
|
||||||
arr_box.push($(this).val());
|
|
||||||
});
|
|
||||||
console.log(arr_box)
|
|
||||||
params.loginType = arr_box.join()
|
|
||||||
params.orgId = params.orgId_select_nodeId;
|
|
||||||
if(params.id !=""){
|
|
||||||
url = dataUrl + "/users/update";
|
url = dataUrl + "/users/update";
|
||||||
}
|
}
|
||||||
console.log(params)
|
console.log(params)
|
||||||
params={
|
params = {
|
||||||
encryptedData:encryptCBC(JSON.stringify(params))
|
encryptedData: encryptCBC(JSON.stringify(params))
|
||||||
}
|
}
|
||||||
ajaxRequest(url, "POST", params, true, function () {
|
ajaxRequest(url, "POST", params, true, function () {
|
||||||
$('.save').addClass("layui-btn-disabled").attr("disabled", true);
|
$('.save').addClass("layui-btn-disabled").attr("disabled", true);
|
||||||
|
|
@ -214,40 +353,6 @@ function saveData(data) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 手机号名称是否重复
|
|
||||||
function isRepeat(paramName, phone) {
|
|
||||||
let data = {};
|
|
||||||
let url = dataUrl + "/sys/user/isRepeat";
|
|
||||||
let params = {
|
|
||||||
'value': phone,
|
|
||||||
'paramName': paramName
|
|
||||||
}
|
|
||||||
ajaxRequest(url, "POST", params, false, function () {
|
|
||||||
}, function (result) {
|
|
||||||
if (result.code === 200) {
|
|
||||||
data = result
|
|
||||||
} else if (result.code === 500) {
|
|
||||||
}
|
|
||||||
}, function (xhr) {
|
|
||||||
error(xhr)
|
|
||||||
});
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getPasswordConfig(callback) {
|
|
||||||
let url = dataUrl + "/users/getPasswordConfig"
|
|
||||||
ajaxRequest(url, "POST", null, true, function () {}, function (result) {
|
|
||||||
// layer.close(loadingMsg); // 关闭提示层
|
|
||||||
if (result.status === 200) {
|
|
||||||
callback(result.data);
|
|
||||||
} else if (result.status === 500) {
|
|
||||||
layer.alert(result.msg, {icon: 2})
|
|
||||||
}
|
|
||||||
}, function (xhr) {
|
|
||||||
error(xhr)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// 关闭页面
|
// 关闭页面
|
||||||
function closePage(type) {
|
function closePage(type) {
|
||||||
let index = parent.layer.getFrameIndex(window.name); //先得到当前 iframe层的索引
|
let index = parent.layer.getFrameIndex(window.name); //先得到当前 iframe层的索引
|
||||||
|
|
|
||||||
|
|
@ -116,7 +116,7 @@ function initTable(dataList, limit, page) {
|
||||||
templet: function (d) {
|
templet: function (d) {
|
||||||
|
|
||||||
let html = '';
|
let html = '';
|
||||||
let updaetpwd="<a class=\"layui-icon layui-icon-password\" style='cursor:pointer;' title='修改密码' onclick=\"resetPwd('" + d.id + "')\"></a>";
|
let updaetpwd="<a class=\"layui-icon layui-icon-search\" style='cursor:pointer;' title='查看' onclick=\"detailsData('" + d.id + "')\"></a>";
|
||||||
let del="<a class=\"layui-icon layui-icon-delete\" style='cursor:pointer;' title='删除' onclick=\"delData('" + d.id + "')\"></a>"
|
let del="<a class=\"layui-icon layui-icon-delete\" style='cursor:pointer;' title='删除' onclick=\"delData('" + d.id + "')\"></a>"
|
||||||
let edit="<a class=\"layui-icon layui-icon-edit\" style='cursor:pointer;' title='修改' onclick=\"addData('" + d.id + "')\"></a>";
|
let edit="<a class=\"layui-icon layui-icon-edit\" style='cursor:pointer;' title='修改' onclick=\"addData('" + d.id + "')\"></a>";
|
||||||
html=updaetpwd + edit+del;
|
html=updaetpwd + edit+del;
|
||||||
|
|
@ -192,20 +192,22 @@ function reloadData() {
|
||||||
pages(pageNum, limitSize);
|
pages(pageNum, limitSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 新增/修改平台用户
|
//详情
|
||||||
function addData(id) {
|
function detailsData(id) {
|
||||||
let title = '新增用户'
|
let title = '详情'
|
||||||
if (id) {
|
|
||||||
title = '修改用户';
|
|
||||||
}
|
|
||||||
let param = {
|
let param = {
|
||||||
'id': id
|
'id': id
|
||||||
}
|
}
|
||||||
openIframe2("addOrEditUser", title, "child/userForm.html", '1000px', '625px', param);
|
openIframe2("detailsSafetyViolations", title, "child/safetyViolationsForm.html", '1200px', '625px', param);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 新增/修改
|
||||||
function addData(id) {
|
function addData(id) {
|
||||||
let title = '新增'
|
let title = '新增'
|
||||||
|
if (id) {
|
||||||
|
title = '修改';
|
||||||
|
}
|
||||||
let param = {
|
let param = {
|
||||||
'id': id
|
'id': id
|
||||||
}
|
}
|
||||||
|
|
@ -326,12 +328,11 @@ function getProTypeSelected() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取工序 http://127.0.0.1:11997/imgTool/sys/select/getProfessionSelect
|
* 获取工序
|
||||||
* http://127.0.0.1:11997/imgTool/sys/select/getProcessSelect
|
|
||||||
*/
|
*/
|
||||||
function getProcessIdSelected() {
|
function getProcessIdSelected() {
|
||||||
let url = dataUrl + '/sys/select/getProcessSelect';
|
let url = dataUrl + '/sys/select/getProcessSelect';
|
||||||
ajaxRequest(url, "POST", null, true, function () {
|
ajaxRequest(url, "GET", null, true, function () {
|
||||||
}, function (result) {
|
}, function (result) {
|
||||||
if (result.code === 200) {
|
if (result.code === 200) {
|
||||||
setSelectValue(result.data, 'processId','请选择工序类型');
|
setSelectValue(result.data, 'processId','请选择工序类型');
|
||||||
|
|
|
||||||
|
|
@ -106,12 +106,18 @@ function initTable(dataList, limit, page) {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: "roleCode",
|
field: "",
|
||||||
title: "角色编码",
|
title: "角色级别",
|
||||||
unresize: true,
|
unresize: true,
|
||||||
align: "center",
|
align: "center",
|
||||||
templet: function(d) {
|
templet: function(d) {
|
||||||
return '<div class="ellipsis" title="' + d.roleCode + '">' + d.roleCode + '</div>';
|
var name = "";
|
||||||
|
if(d.level == 0){
|
||||||
|
name = "项目部级"
|
||||||
|
}else{
|
||||||
|
name = "公司级"
|
||||||
|
}
|
||||||
|
return '<div class="ellipsis" >' + name + '</div>';
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -124,6 +130,13 @@ function initTable(dataList, limit, page) {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
field: "updateTime",
|
||||||
|
title: "更新时间",
|
||||||
|
unresize: true,
|
||||||
|
align: "center"
|
||||||
|
},
|
||||||
|
{field: "state", title: "状态", align: "center", templet: '#is-state'},
|
||||||
|
/*{
|
||||||
field: "orgName",
|
field: "orgName",
|
||||||
title: "上级组织",
|
title: "上级组织",
|
||||||
unresize: true,
|
unresize: true,
|
||||||
|
|
@ -131,14 +144,14 @@ function initTable(dataList, limit, page) {
|
||||||
templet: function(d) {
|
templet: function(d) {
|
||||||
return '<div class="ellipsis" title="' + d.orgName + '">' + d.orgName + '</div>';
|
return '<div class="ellipsis" title="' + d.orgName + '">' + d.orgName + '</div>';
|
||||||
}
|
}
|
||||||
},
|
},*/
|
||||||
{
|
/*{
|
||||||
field: "createTime",
|
field: "createTime",
|
||||||
title: "创建时间",
|
title: "创建时间",
|
||||||
unresize: true,
|
unresize: true,
|
||||||
align: "center"
|
align: "center"
|
||||||
},
|
},*/
|
||||||
{field: "state", title: "状态", align: "center", templet: '#is-state'},
|
|
||||||
{
|
{
|
||||||
title: "操作",
|
title: "操作",
|
||||||
unresize: true,
|
unresize: true,
|
||||||
|
|
|
||||||
|
|
@ -56,13 +56,11 @@
|
||||||
<div id="main-box">
|
<div id="main-box">
|
||||||
<form class="layui-form" onsubmit="return false;">
|
<form class="layui-form" onsubmit="return false;">
|
||||||
<input hidden id="id">
|
<input hidden id="id">
|
||||||
|
|
||||||
<!-- Project Information Section -->
|
|
||||||
<div class="section-title">项目信息</div>
|
<div class="section-title">项目信息</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>项目名称:</label>
|
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>项目名称:</label>
|
||||||
<div class="layui-input-inline">
|
<div class="layui-input-inline">
|
||||||
<select class="layui-input" id="projectName" name="projectName" lay-verify="required">
|
<select class="layui-input" id="projectName" name="projectName" lay-verify="required" lay-search="">
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -87,36 +85,80 @@
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label">检查人:</label>
|
<label class="layui-form-label">检查人:</label>
|
||||||
<div class="layui-input-inline">
|
<div class="layui-input-inline">
|
||||||
<input type="text" name="inspector" placeholder="输入内容" autocomplete="off" class="layui-input">
|
<input type="text" name="inspector" id="inspector" placeholder="输入内容" maxlength="30" autocomplete="off" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
<label class="layui-form-label">违章时间:</label>
|
<label class="layui-form-label">违章时间:</label>
|
||||||
<div class="layui-input-inline">
|
<div class="layui-input-inline">
|
||||||
<input type="text" name="violationTime" id="violationTime" placeholder="yyyy-MM-dd" autocomplete="off" class="layui-input">
|
<input type="text" name="violationTime" id="violationTime" readonly placeholder="yyyy-MM-dd" autocomplete="off" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>违章地点:</label>
|
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>违章地点:</label>
|
||||||
<div class="layui-input-inline">
|
<div class="layui-input-inline">
|
||||||
<input type="text" name="violationLocation" lay-verify="required" placeholder="输入内容" autocomplete="off" class="layui-input">
|
<input type="text" name="violationLocation" lay-verify="required" maxlength="30" placeholder="输入内容" autocomplete="off" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
<label class="layui-form-label">整改期限:</label>
|
<label class="layui-form-label">整改期限:</label>
|
||||||
<div class="layui-input-inline">
|
<div class="layui-input-inline">
|
||||||
<input type="text" name="rectificationDeadline" id="rectificationDeadline" placeholder="yyyy-MM-dd" autocomplete="off" class="layui-input">
|
<input type="text" name="rectificationDeadline" readonly id="rectificationDeadline" placeholder="yyyy-MM-dd" autocomplete="off" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>违章描述:</label>
|
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>违章描述:</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<textarea name="violationDescription" lay-verify="required" placeholder="输入内容" class="layui-textarea"></textarea>
|
<textarea name="violationDescription" lay-verify="required" maxlength="100" placeholder="输入内容" class="layui-textarea"></textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>违章照片:</label>
|
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>违章照片:</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<button type="button" class="layui-btn" id="uploadPhoto">点击或拖拽上传照片,最多可上传 9 张</button>
|
<div class="layui-upload">
|
||||||
|
<button type="button" class="layui-btn" id="ID-upload-demo-btn-2">
|
||||||
|
<i class="layui-icon layui-icon-upload"></i> 多图片上传
|
||||||
|
</button>
|
||||||
|
<blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 11px;">
|
||||||
|
预览图:
|
||||||
|
<div class="layui-upload-list" id="upload-demo-preview"></div>
|
||||||
|
</blockquote>
|
||||||
|
<input type="hidden" id="imagePaths" name="imagePaths">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section-title">整改信息</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">整改人:</label>
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<input type="text" name="correction" placeholder="输入内容" maxlength="30" autocomplete="off" class="layui-input">
|
||||||
|
</div>
|
||||||
|
<label class="layui-form-label">整改时间:</label>
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<input type="text" name="correctionTime" id="correctionTime" readonly placeholder="yyyy-MM-dd" autocomplete="off" class="layui-input">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>整改说明:</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<textarea name="correctionDescription" lay-verify="required" maxlength="100" placeholder="输入内容" class="layui-textarea"></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>整改照片:</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<div class="layui-upload">
|
||||||
|
<button type="button" class="layui-btn" id="ID-upload-demo-btn-3">
|
||||||
|
<i class="layui-icon layui-icon-upload"></i> 多图片上传
|
||||||
|
</button>
|
||||||
|
<blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 11px;">
|
||||||
|
预览图:
|
||||||
|
<div class="layui-upload-list" id="upload-demo-preview-3"></div>
|
||||||
|
</blockquote>
|
||||||
|
<input type="hidden" id="imagePaths-3" name="imagePaths-3">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,26 +23,6 @@
|
||||||
lay-verify="required">
|
lay-verify="required">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item" style="margin-top: 2%;">
|
|
||||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>角色编码</label>
|
|
||||||
<div class="layui-input-inline">
|
|
||||||
<input class="layui-input" placeholder="角色编码" type="text" name="roleCode" id="roleCode" autocomplete="off" maxlength="25"
|
|
||||||
lay-verify="required">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="layui-form-item" style="margin-top: 2%;">
|
|
||||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>角色描述</label>
|
|
||||||
<div class="layui-input-inline" layui-input>
|
|
||||||
<textarea class="layui-textarea" placeholder="角色描述" name="remarks" id="remarks" lay-verify="required" maxlength="100"></textarea>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="layui-form-item">
|
|
||||||
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>上级组织</label>
|
|
||||||
<div class="layui-input-inline">
|
|
||||||
<ul id="orgId" class="dtree" data-id="0"></ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label"> <i style="padding: 0 10px;">*</i> 状态:</label>
|
<label class="layui-form-label"> <i style="padding: 0 10px;">*</i> 状态:</label>
|
||||||
|
|
@ -52,6 +32,37 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label"> <i style="padding: 0 10px;">*</i> 角色级别:</label>
|
||||||
|
<div class="layui-input-block" >
|
||||||
|
<input type="radio" id="level_1" name="level" value="1" title="公司级" checked>
|
||||||
|
<input type="radio" id="level_0" name="level" value="0" title="项目部级">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!--<div class="layui-form-item" style="margin-top: 2%;">
|
||||||
|
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>角色编码</label>
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<input class="layui-input" placeholder="角色编码" type="text" name="roleCode" id="roleCode" autocomplete="off" maxlength="25"
|
||||||
|
lay-verify="required">
|
||||||
|
</div>
|
||||||
|
</div>-->
|
||||||
|
<div class="layui-form-item" style="margin-top: 2%;">
|
||||||
|
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>角色描述</label>
|
||||||
|
<div class="layui-input-inline" layui-input>
|
||||||
|
<textarea class="layui-textarea" placeholder="角色描述" name="remarks" id="remarks" lay-verify="required" maxlength="100"></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!--<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>上级组织</label>
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<ul id="orgId" class="dtree" data-id="0"></ul>
|
||||||
|
</div>
|
||||||
|
</div>-->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="layui-form-item" style="margin-top: 2%;">
|
<div class="layui-form-item" style="margin-top: 2%;">
|
||||||
<label class="layui-form-label">权限</label>
|
<label class="layui-form-label">权限</label>
|
||||||
<div class="layui-input-inline">
|
<div class="layui-input-inline">
|
||||||
|
|
@ -130,13 +141,20 @@
|
||||||
$("#name").val(result.data.name);
|
$("#name").val(result.data.name);
|
||||||
$("#roleCode").val(result.data.roleCode);
|
$("#roleCode").val(result.data.roleCode);
|
||||||
$("#remarks").val(result.data.remarks);
|
$("#remarks").val(result.data.remarks);
|
||||||
$('#orgId').val(result.data.orgId);
|
// $('#orgId').val(result.data.orgId);
|
||||||
console.log("result.data.state",result.data.state);
|
console.log("result.data.state",result.data.state);
|
||||||
if (result.data.state === 1) {
|
if (result.data.state === 1) {
|
||||||
document.getElementById('state_1').checked = true;
|
document.getElementById('state_1').checked = true;
|
||||||
} else if (result.data.state === 0) {
|
} else if (result.data.state === 0) {
|
||||||
document.getElementById('state_0').checked = true;
|
document.getElementById('state_0').checked = true;
|
||||||
}
|
}
|
||||||
|
console.log("result.data.level",result.data.level)
|
||||||
|
if (result.data.level === 1) {
|
||||||
|
document.getElementById('level_1').checked = true;
|
||||||
|
} else if (result.data.level === 0) {
|
||||||
|
document.getElementById('level_0').checked = true;
|
||||||
|
}
|
||||||
|
layui.form.render();
|
||||||
} else if (result.status === 500) {
|
} else if (result.status === 500) {
|
||||||
layer.alert(result.msg, {icon: 2})
|
layer.alert(result.msg, {icon: 2})
|
||||||
}
|
}
|
||||||
|
|
@ -156,10 +174,10 @@
|
||||||
function saveData(data) {
|
function saveData(data) {
|
||||||
var formdata = data.field;
|
var formdata = data.field;
|
||||||
formdata.permissionIds = getCheckedMenuIds();
|
formdata.permissionIds = getCheckedMenuIds();
|
||||||
if (!formdata.orgId_select_nodeId){
|
// if (!formdata.orgId_select_nodeId){
|
||||||
return layer.alert("请选择上级组织!", {icon: 2})
|
// return layer.alert("请选择上级组织!", {icon: 2})
|
||||||
}
|
// }
|
||||||
formdata.orgId=formdata.orgId_select_nodeId;
|
// formdata.orgId=formdata.orgId_select_nodeId;
|
||||||
console.log(formdata)
|
console.log(formdata)
|
||||||
var params={
|
var params={
|
||||||
encryptedData:encryptCBC(JSON.stringify(formdata))
|
encryptedData:encryptCBC(JSON.stringify(formdata))
|
||||||
|
|
@ -194,7 +212,7 @@
|
||||||
if (result.code === 200) {
|
if (result.code === 200) {
|
||||||
console.log(result,"getOrgTree")
|
console.log(result,"getOrgTree")
|
||||||
data = result.data;
|
data = result.data;
|
||||||
setOrgTree(data)
|
// setOrgTree(data)
|
||||||
} else {
|
} else {
|
||||||
layer.alert(result.msg, {icon: 2})
|
layer.alert(result.msg, {icon: 2})
|
||||||
}
|
}
|
||||||
|
|
@ -204,7 +222,7 @@
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
function setOrgTree(data){
|
/*function setOrgTree(data){
|
||||||
orgTree = dtree.renderSelect({
|
orgTree = dtree.renderSelect({
|
||||||
elem: "#orgId",
|
elem: "#orgId",
|
||||||
data: data,
|
data: data,
|
||||||
|
|
@ -221,7 +239,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}*/
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue