基础管理-线路工程管理

This commit is contained in:
lSun 2025-04-27 10:44:26 +08:00
parent 5fad49cc29
commit 11d850275e
13 changed files with 298 additions and 61 deletions

View File

@ -10,4 +10,6 @@ import lombok.Data;
public class DistinctDto {
private String keyWord;
private String dictCode;
}

View File

@ -149,4 +149,19 @@ public class DistinctController {
}
return ServerResponse.createSuccess(list);
}
@PostMapping(value = "getProjectDepartment")
@DecryptAndVerify(decryptedClass = DistinctDto.class)//加解密统一管理
@LogAnnotation(operModul = "系统管理-字典管理", operation = "查询所属项目部列表", operDesc = "业务级事件", operType = "查询")
public ServerResponse getProjectDepartment(EncryptedReq<DistinctDto> dto) {
List<DistinctVo> list = new ArrayList();
try {
list = service.getProjectDepartment(dto.getData());
} catch (Exception e) {
log.error("字典列表", e);
}
return ServerResponse.createSuccess(list);
}
}

View File

@ -66,4 +66,6 @@ public interface DistinctDao {
int isHasChild(String id);
List<DistinctVo> getDistinctListByParentCode(DistinctDto data);
List<DistinctVo> getProjectDepartment(DistinctDto data);
}

View File

@ -67,4 +67,6 @@ public interface DistinctService {
* @date 2023/11/1 15:06
*/
List<DistinctVo> getDistinctListByParentCode(DistinctDto data);
List<DistinctVo> getProjectDepartment(DistinctDto data);
}

View File

@ -142,6 +142,11 @@ public class DistinctServiceImpl implements DistinctService {
return mapper.getDistinctListByParentCode(data);
}
@Override
public List<DistinctVo> getProjectDepartment(DistinctDto data) {
return mapper.getProjectDepartment(data);
}
@Override
public ServerResponse isRepeat(EncryptedReq<RepeatEntity> vo) {
try {

View File

@ -13,4 +13,6 @@ public class Org{
private String title;//组织机构名称
private String checkArr;//组织机构名称
private String level;//组织机构名称
}

View File

@ -81,4 +81,8 @@
</if>
ORDER BY sd.dict_sort
</select>
<select id="getProjectDepartment" resultType="com.bonus.digitalSignage.system.vo.DistinctVo">
</select>
</mapper>

View File

@ -175,7 +175,8 @@
select id,
depart_name as title,
parent_id as parentId,
'0' AS checkArr
'0' AS checkArr,
level
from tb_depart
where is_active = '1'
</select>

View File

@ -1,32 +1,71 @@
let form, layer, util,laydate, idParam, phoneParam;
let form, layer, util, laydate, idParam, phoneParam;
let arr = ['background', 'web', 'mobile', 'wx'];
let background, web, mobile, wx;
let data = [], appResList = [];
let startDate, endDate;
function setParams(params) {
console.log(params)
idParam = JSON.parse(params).id;
layui.use(['form', 'layer', 'util', 'laydate'], function () {
layui.config({
base: "../../../../js/layui-v2.6.8/"
}).extend({
dtree: 'dtree/dtree',
formSelects: 'formSelects-v4',
}).use(['form', 'layer', 'dtree', 'util', 'laydate', 'formSelects'], function () {
form = layui.form;
layer = layui.layer;
util = layui.util;
formSelects = layui.formSelects;
dtree = layui.dtree;
laydate = layui.laydate;
var $ = layui.jquery;
// 添加自定义验证规则
form.verify({
// 正数验证(线路长度)
positiveNumber: function (value, item) {
if (value) {
if (!/^[0-9]+\.?[0-9]*$/.test(value)) {
return '请输入正数';
}
if (parseFloat(value) <= 0) {
return '请输入大于0的数';
}
}
},
// 经度验证
longitude: function (value, item) {
if (value) {
if (!/^[\-\+]?((180(\.0{1,6})?)|((\d{1,2}|1[0-7]\d)(\.\d{1,6})?))$/.test(value)) {
return '请输入正确的经度(-180.0+180.0';
}
}
},
// 纬度验证
latitude: function (value, item) {
if (value) {
if (!/^[\-\+]?((90(\.0{1,6})?)|(([0-8]?\d)(\.\d{1,6})?))$/.test(value)) {
return '请输入正确的纬度(-90.0+90.0';
}
}
}
});
// 初始化日期选择器
laydate.render({
elem: '#plannedStartTime',
done: function(value, date){
elem: '#planStartTime',
done: function (value, date) {
startDate = value;
validateDates();
}
});
laydate.render({
elem: '#plannedEndTime',
done: function(value, date){
elem: '#planEndTime',
done: function (value, date) {
endDate = value;
validateDates();
}
@ -39,9 +78,14 @@ function setParams(params) {
if (idParam) {
getUserById();
}
form.render("select");//重新渲染页面checkbox控件
form.on('submit(formData)', function (data) {
data.field.id = $('#id').val();
console.log(data)
if (!data.field.orgId_select_nodeId) {
return layer.alert("请选择项目部!", {icon: 2})
}
saveData(data);
});
@ -54,7 +98,7 @@ function validateDates() {
var start = new Date(startDate);
var end = new Date(endDate);
if (start > end) {
$("#plannedEndTime").val("")
$("#planEndTime").val("")
layer.msg("开始日期不能大于结束日期")
return false;
}
@ -64,16 +108,20 @@ function validateDates() {
// 初始化下拉选项
function initSelects() {
// 这里可以通过AJAX获取下拉选项数据
// 项目部下拉选项
// 工程状态下拉选项
getOrgTree();
let voltageLevelData = getDistinctListByParentCode({dictCode: "voltage_level"});
setSelectValueNameCode(voltageLevelData, "voltageLevel", "请选择电压等级")
let proStatusData = getDistinctListByParentCode({dictCode: "pro_status"});
setSelectValueNameCode(proStatusData, "proStatus", "请选择状态")
}
// 根据id获取用户信息
function getUserById() {
let loadingMsg = layer.msg("数据加载中,请稍候...", {icon: 16, scrollbar: true, time: 0,});
setTimeout(() => {
let url = dataUrl + "/users/getById";
let url = dataUrl + "/tbProject/getTbProjectById";
let params = {
id: idParam
}
@ -100,11 +148,21 @@ function getUserById() {
function setFormData(data) {
console.log("data:", data)
if (data) {
$("#password").removeAttr("lay-verify");
$("#pwd").css("display", "none");
$('#id').val(data.id)
$('#username').val(data.username)
$('#loginName').val(data.loginName)
$('#proName').val(data.proName)
$('#voltageLevel').val(data.voltageLevel)
$('#lineLength').val(data.lineLength)
$('#planStartTime').val(data.planStartTime)
$('#planEndTime').val(data.planEndTime)
$('#lon').val(data.lon)
$('#lat').val(data.lat)
$('#address').val(data.address)
$('#proStatus').val(data.proStatus)
$('#orgId').val(data.departId)
dtree.dataInit("orgId", data.departId);
dtree.selectVal("orgId");
layui.form.render();
}
}
@ -116,12 +174,13 @@ function saveData2() {
// 保存数据
function saveData(data) {
let loadingMsg = layer.msg('数据上传中,请稍候...', {icon: 16, scrollbar: false, time: 0});
let url = dataUrl + "/users/addTemp";
let url = dataUrl + "/tbProject/addTbProject";
let params = data.field;
if (params.id != "") {
url = dataUrl + "/users/update";
url = dataUrl + "/tbProject/updateTbProject";
}
console.log("线路工程管理的新增修改",params)
params.departId = params.orgId_select_nodeId;
console.log("线路工程管理的新增修改", params)
params = {
encryptedData: encryptCBC(JSON.stringify(params))
}
@ -146,6 +205,67 @@ function saveData(data) {
});
}
function getOrgTree() {
let data = [];
let url = dataUrl + '/users/getOrg';
ajaxRequest(url, "POST", null, false, function () {
}, function (result) {
if (result.code === 200) {
console.log(result, "getOrgTree")
data = result.data;
data.forEach(node => {
if (node.level !== "3") {
node.disabled = true; // 标记为不可选中
}
});
setOrgTree(data)
} else {
layer.alert(result.msg, {icon: 2})
}
}, function (xhr) {
error(xhr)
});
return data;
}
function setOrgTree(data) {
orgTree = dtree.renderSelect({
elem: "#orgId",
data: data,
dataFormat: "list",
skin: "laySimple",
line: true, // 显示树线
checkbar: false, //开启复选框
done: function (data, url, first) {
console.log($('#orgId').val())
if (first) {
var params = dtree.dataInit("orgId", $('#orgId').val());
var selectParam = dtree.selectVal("orgId");
console.log(params)
}
},
formatter: {
title: function (data) {
// 非第三层的节点显示为灰色
if (data.level != "3") {
return '<span style="color: #999;" >'
+ data.title + '</span>';
}
return data.title;
}
},
nodeClick: function (param) {
alert(param)
// 如果节点不是第三层,则阻止选择
if (param.level !== "3") {
layer.msg("只能选择第三层节点!", { icon: 0 });
return false; // 阻止选择
}
return true; // 允许选择
}
});
}
// 关闭页面
function closePage(type) {
let index = parent.layer.getFrameIndex(window.name); //先得到当前 iframe层的索引

View File

@ -6,12 +6,16 @@ layui.use(['form', 'layer', 'table', 'laydate'], function () {
layer = layui.layer;
table = layui.table;
layui.form.render();
let proStatusData = getDistinctListByParentCode({dictCode: "pro_status"});
setSelectValueNameCode(proStatusData, "proStatus","请选择状态")
pages(1, 10, 1);
})
function pages(pageNum, pageSize, typeNum) {
let params = getReqParams(pageNum, pageSize, typeNum);
let url = dataUrl + "/users/getList"
let url = dataUrl + "/tbProject/getTbProjectList"
ajaxRequest(url, "POST", params, true, function () {
}, function (result) {
console.log(result);
@ -67,29 +71,46 @@ function initTable(dataList, limit, page) {
return (page - 1) * limit + d.LAY_INDEX;
}
},
{field: "loginName", title: "所属项目部", width: 180, unresize: true, align: "center"},
{field: "username", title: "线路工程名称",width: 180, unresize: true, align: "center"},
{field: "username", title: "电压等级",width: 180, unresize: true, align: "center"},
{field: "roleName", title: "线路长度km",width: 200, unresize: true, align: "center"},
{field: "createTime", title: "计划起止时间",width: 180, unresize: true, align: "center"},
{field: "deptName", title: "工程地址 ",width: 180, unresize: true, align: "center"},
{field: "deptName", title: "工程状态 ",width: 180, unresize: true, align: "center"},
{field: "departName", title: "所属项目部", width: 180, unresize: true, align: "center"},
{field: "proName", title: "线路工程名称",width: 180, unresize: true, align: "center"},
{field: "voltageLevel", title: "电压等级",width: 180, unresize: true, align: "center"},
{field: "lineLength", title: "线路长度km",width: 200, unresize: true, align: "center"},
{field: "", title: "计划起止时间",width: 180, unresize: true, align: "center",
templet: function (d) {
let html = d.planStartTime + "~" + d.planEndTime;
return html;
}
},
{field: "address", title: "工程地址 ",width: 180, unresize: true, align: "center"},
{field: "proStatus", title: "工程状态 ",width: 180, unresize: true, align: "center"},
{field: "", title: "杆塔数量 ",width: 130, unresize: true, align: "center",
templet: function (d) {
let html = "<a class=\"layui-icon\" style='cursor:pointer;' title='杆塔管理' onclick=\"addTower('" + d.id + "')\">0</a>";
let num = 0;
if (d.tbTowerVoList) {
num = d.tbTowerVoList.length;
}
let html = "<a class=\"layui-icon\" style='cursor:pointer;' title='杆塔管理' onclick=\"addTower('" + d.id + "')\">"+num+"</a>";
return html;
}
},
{field: "", title: "“三跨”数量 ",width: 150, unresize: true, align: "center",
templet: function (d) {
let html = "<a class=\"layui-icon\" style='cursor:pointer;' title='“三跨”管理' onclick=\"addThreeSpan('" + d.id + "')\">1</a>";
let num = 0;
if (d.tbThreeSpanVoList) {
num = d.tbThreeSpanVoList.length;
}
let html = "<a class=\"layui-icon\" style='cursor:pointer;' title='“三跨”管理' onclick=\"addThreeSpan('" + d.id + "')\">"+num+"</a>";
return html;
}
},
{
field: "", title: "索道数量 ",width: 130, unresize: true, align: "center",
templet: function (d) {
let html = "<a class=\"layui-icon\" style='cursor:pointer;' title='索道运输' onclick=\"addRopeway('" + d.id + "')\">12</a>";
let num = 0;
if (d.tbCablewaTransVoList) {
num = d.tbCablewaTransVoList.length;
}
let html = "<a class=\"layui-icon\" style='cursor:pointer;' title='索道运输' onclick=\"addRopeway('" + d.id + "')\">"+num+"</a>";
return html;
}
},
@ -128,7 +149,7 @@ function getReqParams(page, limit, type) {
if (type === 2) {
$('#departName').val('');
$('#proName').val('');
$('#state').val('');
$('#proStatus').val('');
layui.form.render();
}
obj = {
@ -136,7 +157,7 @@ function getReqParams(page, limit, type) {
limit: limit + "",
departName: $('#departName').val(),
proName: $('#proName').val(),
state: $('#state').val(),
proStatus: $('#proStatus').val(),
};
console.log("线路工程管理查询条件", obj)
obj={
@ -151,7 +172,7 @@ function query(type) {
if(type === 2){
$('#departName').val('');
$('#proName').val('');
$('#state').val('');
$('#proStatus').val('');
layui.form.render();
}
pages(1, limitSize,type);
@ -184,7 +205,7 @@ function delData(id) {
move: false
}, function () {
let loadingMsg = layer.msg('数据删除中,请稍候...', {icon: 16, scrollbar: false, time: 0});
let url = dataUrl + "/users/delById";
let url = dataUrl + "/tbProject/delTbProject";
let params = {
'id': id
}
@ -195,10 +216,10 @@ function delData(id) {
}, function (result) {
layer.close(loadingMsg); // 关闭提示层
if (result.code === 200) {
parent.layer.msg(result.msg, {icon: 1})
parent.layer.msg(result.data, {icon: 1})
query()
} else if (result.code === 500) {
layer.alert(result.msg, {icon: 2})
layer.alert(result.data, {icon: 2})
}
}, function (xhr) {
layer.close(loadingMsg); // 关闭提示层
@ -261,5 +282,34 @@ function addRopeway(id){
}
function exportPro(){
alert("导出")
let obj = {
departName: $('#departName').val(),
proName: $('#proName').val(),
proStatus: $('#proStatus').val(),
}
let params = {
encryptedData: encryptCBC(JSON.stringify(obj))
}
let loadingMsg = layer.msg("数据导出中,请稍候...", {icon: 16, scrollbar: false, time: 0,});
let url = dataUrl + "/tbProject/tbProjectExport?token=" + tokens + "&encryptedData=" + encodeURIComponent(encryptCBC(JSON.stringify(obj)));
let xhr = new XMLHttpRequest();
xhr.open("post", url, true);
xhr.responseType = "blob"; // 转换流
xhr.setRequestHeader('Content-Type','application/json;charset=UTF-8')
xhr.onload = function () {
layer.close(loadingMsg);
if (this.status === 200) {
let blob = this.response;
var a = document.createElement("a");
var url = window.URL.createObjectURL(blob);
a.href = url;
a.download = "线路工程管理" + ".xlsx"; // 文件名
} else {
layer.msg("数据导出发生异常,请稍后重试", {icon: 16, scrollbar: false, time: 2000});
}
a.click();
window.URL.revokeObjectURL(url);
};
// xhr.send(params);
xhr.send();
}

View File

@ -296,4 +296,34 @@ function getCurrentDate() {
var month = String(today.getMonth() + 1).padStart(2, '0'); // 月份从0开始需要+1
var day = String(today.getDate()).padStart(2, '0'); // 获取日
return `${year}-${month}-${day}`;
}
// 字典-下拉选
function getDistinctListByParentCode(obj) {
let data = [];
let url = dataUrl + "/sys/distinct/getDistinctListByParentCode"
let params = {
encryptedData: encryptCBC(JSON.stringify(obj))
}
ajaxRequest(url, "POST", params, false, function () {
}, function (result) {
if (result.status === 200) {
data = result.data;
} else if (result.status === 500) {
layer.alert(result.msg, {icon: 2})
}
}, function (xhr) {
error(xhr)
});
return data;
}
function setSelectValueNameCode(list, selectName, placeholder) {
let html = '<option value="" selected>' + placeholder + '</option>';
$.each(list, function (index, item) {
html += '<option value="' + item.dictCode + '">' + item.dictName + '</option>';
})
$('#' + selectName).empty().append(html);
layui.form.render();
}

View File

@ -60,6 +60,9 @@
color: red;
margin-right: 5px;
}
.dtree-select{
width: 34.8%;
}
</style>
</head>
<body>
@ -68,18 +71,16 @@
<input hidden id="id">
<div class="form-row">
<div class="form-item">
<div class="form-item" id="projectDiv">
<div class="form-label"><span class="required">*</span>项目部:</div>
<div class="input-container">
<select id="projectId" lay-verify="required" name="projectId" lay-filter="projectId" class="layui-input">
<option value="">选择选项</option>
</select>
<ul id="orgId" class="dtree" data-id="0"></ul>
</div>
</div>
<div class="form-item">
<div class="form-label"><span class="required">*</span>工程名称:</div>
<div class="input-container">
<input class="layui-input" id="engineeringName" name="engineeringName" autocomplete="off"
<input class="layui-input" id="proName" name="proName" autocomplete="off"
placeholder="输入内容" lay-verify="required" maxlength="50">
</div>
</div>
@ -89,15 +90,17 @@
<div class="form-item">
<div class="form-label">电压等级:</div>
<div class="input-container">
<input class="layui-input" id="voltageLevel" name="voltageLevel" autocomplete="off"
placeholder="输入内容" maxlength="20">
<select id="voltageLevel" name="voltageLevel" lay-filter="voltageLevel" lay-search="">
</select>
</div>
</div>
<div class="form-item">
<div class="form-label">线路长度km</div>
<div class="input-container">
<input class="layui-input" id="lineLength" name="lineLength" autocomplete="off"
placeholder="输入内容" maxlength="20">
<input class="layui-input" id="lineLength" name="lineLength"
lay-verify="positiveNumber" autocomplete="off"
placeholder="请输入正数" maxlength="10">
</div>
</div>
</div>
@ -106,14 +109,14 @@
<div class="form-item">
<div class="form-label">计划开始时间:</div>
<div class="input-container">
<input type="text" class="layui-input" id="plannedStartTime" name="plannedStartTime"
<input type="text" class="layui-input" id="planStartTime" name="planStartTime"
readonly>
</div>
</div>
<div class="form-item">
<div class="form-label">计划完工时间:</div>
<div class="input-container">
<input type="text" class="layui-input" id="plannedEndTime" name="plannedEndTime"
<input type="text" class="layui-input" id="planEndTime" name="planEndTime"
readonly>
</div>
</div>
@ -121,17 +124,19 @@
<div class="form-row">
<div class="form-item">
<div class="form-label">工程度:</div>
<div class="form-label">工程度:</div>
<div class="input-container">
<input class="layui-input" id="engineeringDegree" name="engineeringDegree" autocomplete="off"
placeholder="输入内容" maxlength="50">
<input class="layui-input" id="lon" name="lon"
lay-verify="longitude" autocomplete="off"
placeholder="请输入经度(-180.0+180.0" maxlength="10">
</div>
</div>
<div class="form-item">
<div class="form-label">工程结果</div>
<div class="form-label">工程纬度</div>
<div class="input-container">
<input class="layui-input" id="engineeringResult" name="engineeringResult" autocomplete="off"
placeholder="输入内容" maxlength="50">
<input class="layui-input" id="lat" name="lat"
lay-verify="latitude" autocomplete="off"
placeholder="请输入纬度(-90.0+90.0" maxlength="10">
</div>
</div>
</div>
@ -140,15 +145,15 @@
<div class="form-item">
<div class="form-label">工程地址:</div>
<div class="input-container">
<input class="layui-input" id="engineeringAddress" name="engineeringAddress" autocomplete="off"
<input class="layui-input" id="address" name="address" autocomplete="off"
placeholder="输入内容" maxlength="100">
</div>
</div>
<div class="form-item">
<div class="form-label">工程状态:</div>
<div class="input-container">
<select id="engineeringStatus" name="engineeringStatus" lay-filter="engineeringStatus" class="layui-input">
<option value="">选择选项</option>
<select id="proStatus" name="proStatus" lay-filter="engineeringStatus" lay-search="">
</select>
</div>
</div>

View File

@ -11,6 +11,7 @@
<script src="../../../js/openIframe.js"></script>
<script src="../../../js/my/aes.js"></script>
<script src="../../../js/ajaxRequest.js"></script>
<script src="../../../js/select.js"></script>
<title>线路工程管理</title>
</head>
<body>
@ -28,10 +29,8 @@
</div>
<div class="layui-input-inline">
<select id="state" name="state" lay-filter="state" lay-search="">
<option value="">请选择状态</option>
<option value="1">启用</option>
<option value="0">禁用</option>
<select id="proStatus" name="proStatus" lay-filter="proStatus" lay-search="">
</select>
</div>
</div>