From 712f539ae7439e1974e0e873990ed90fc7459f29 Mon Sep 17 00:00:00 2001 From: skjia <106962133@qq.com> Date: Mon, 26 Aug 2024 09:00:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E7=9B=9B=E5=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../html/dataStatistics/staff/staffList.html | 6 +- hxy-web/html/videoPlay.html | 4 +- hxy-web/html/wireManager/staff/staffAdd.html | 6 +- .../html/wireManager/staff/staffImport.html | 24 +- hxy-web/html/wireManager/staff/staffList.html | 7 +- .../wireManager/viewResult/uploadPhoto.html | 2 +- .../viewResult/uploadSpecialPhoto.html | 54 +++ .../viewResult/viewResultUpdate.html | 2 +- .../workVisa/workVisaDetails.js | 6 + hxy-web/js/wireManager/staff/staffAdd.js | 28 +- hxy-web/js/wireManager/staff/staffImport.js | 98 +++-- hxy-web/js/wireManager/staff/staffList.js | 76 ++-- .../viewResult/normalInspectionUpload.js | 4 +- .../viewResult/patrolOutsideAdd.js | 27 +- .../viewResult/specialPatrolAdd.js | 4 +- .../js/wireManager/viewResult/uploadPhoto.js | 7 +- .../viewResult/uploadSpecialPhoto.js | 179 ++++++++ .../js/wireManager/viewResult/viewResult.js | 3 +- .../viewResult/viewResultDetails.js | 26 +- .../viewResult/viewResultUpdate.js | 390 +++++++++++++++++- hxy-web/templateDown/人员信息.xlsx | Bin 0 -> 11241 bytes 21 files changed, 822 insertions(+), 131 deletions(-) create mode 100644 hxy-web/html/wireManager/viewResult/uploadSpecialPhoto.html create mode 100644 hxy-web/js/wireManager/viewResult/uploadSpecialPhoto.js create mode 100644 hxy-web/templateDown/人员信息.xlsx diff --git a/hxy-web/html/dataStatistics/staff/staffList.html b/hxy-web/html/dataStatistics/staff/staffList.html index 1d1f128..5f59171 100644 --- a/hxy-web/html/dataStatistics/staff/staffList.html +++ b/hxy-web/html/dataStatistics/staff/staffList.html @@ -38,17 +38,17 @@
- +
- +
- +
diff --git a/hxy-web/html/videoPlay.html b/hxy-web/html/videoPlay.html index a09ab9d..f76a7a3 100644 --- a/hxy-web/html/videoPlay.html +++ b/hxy-web/html/videoPlay.html @@ -48,8 +48,8 @@ let player = document.querySelector('#myVideo'); //测试用 - player.src = 'http://192.168.0.14:1909/file/ynRealName/zys_cs/mp4.mp4'; - //player.src = fileUrl + '/' + filePath; + // player.src = 'http://192.168.0.14:1909/file/ynRealName/zys_cs/mp4.mp4'; + player.src = filePath; player.play(); // 获取视频元素 diff --git a/hxy-web/html/wireManager/staff/staffAdd.html b/hxy-web/html/wireManager/staff/staffAdd.html index 7cc5f08..e5b874f 100644 --- a/hxy-web/html/wireManager/staff/staffAdd.html +++ b/hxy-web/html/wireManager/staff/staffAdd.html @@ -242,7 +242,7 @@
+ placeholder="请填写范围、基数" style="width: 425px;max-height: 200px;" maxlength="500">
@@ -309,6 +309,10 @@ +
+ 预览图: +
+
diff --git a/hxy-web/html/wireManager/staff/staffImport.html b/hxy-web/html/wireManager/staff/staffImport.html index 7c65349..7616ce7 100644 --- a/hxy-web/html/wireManager/staff/staffImport.html +++ b/hxy-web/html/wireManager/staff/staffImport.html @@ -2,14 +2,15 @@ - 护线员考勤 + 导入 + + - - + @@ -22,21 +23,28 @@
-
- + +
+
填写导入数据信息
请按照数据模板的格式准备导入数据,模板中的表头名称不可更改,表头行不能删除。
- 下载模板 + 下载模板
-
- +
*上传填好的信息表
文件后缀名必须为xls或xlsx(即Excel格式),文件大小不得大于10M
+
+ +
+
特别提示
+
导入过程中请确保工程名称、杆塔名称与系统工程名称、杆塔名称一致性
+
+
diff --git a/hxy-web/html/wireManager/staff/staffList.html b/hxy-web/html/wireManager/staff/staffList.html index c9ef1a7..5ccc24c 100644 --- a/hxy-web/html/wireManager/staff/staffList.html +++ b/hxy-web/html/wireManager/staff/staffList.html @@ -67,7 +67,7 @@
- @@ -77,8 +77,9 @@ - - + diff --git a/hxy-web/html/wireManager/viewResult/uploadPhoto.html b/hxy-web/html/wireManager/viewResult/uploadPhoto.html index 7e2f659..00d3496 100644 --- a/hxy-web/html/wireManager/viewResult/uploadPhoto.html +++ b/hxy-web/html/wireManager/viewResult/uploadPhoto.html @@ -33,7 +33,7 @@ + *考勤照片:
diff --git a/hxy-web/html/wireManager/viewResult/uploadSpecialPhoto.html b/hxy-web/html/wireManager/viewResult/uploadSpecialPhoto.html new file mode 100644 index 0000000..cb2109d --- /dev/null +++ b/hxy-web/html/wireManager/viewResult/uploadSpecialPhoto.html @@ -0,0 +1,54 @@ + + + + + 特巡结果上传 + + + + + + + + + + + +
+
+
+
+ + + + + + + +
+
+
+
+ +
+ +
+
+
+
+ + + +
+
+ + diff --git a/hxy-web/html/wireManager/viewResult/viewResultUpdate.html b/hxy-web/html/wireManager/viewResult/viewResultUpdate.html index 96aec10..149affc 100644 --- a/hxy-web/html/wireManager/viewResult/viewResultUpdate.html +++ b/hxy-web/html/wireManager/viewResult/viewResultUpdate.html @@ -246,7 +246,7 @@
--
- +
diff --git a/hxy-web/js/dataStatistics/workVisa/workVisaDetails.js b/hxy-web/js/dataStatistics/workVisa/workVisaDetails.js index cea3d03..c34715d 100644 --- a/hxy-web/js/dataStatistics/workVisa/workVisaDetails.js +++ b/hxy-web/js/dataStatistics/workVisa/workVisaDetails.js @@ -27,6 +27,8 @@ layui.use(['form','layer','table','laydate','element'], function () { $("#queryBt").click(function(){ var keyword = $('#keyword').val(); let json = { + proId:localStorage.getItem("resultVisaProId"), + makeMonth:localStorage.getItem("resultVisaMakeMonth"),orders:orders, "keyword": keyword } // 对表格进行重载。id 即 table表格的id @@ -47,6 +49,8 @@ layui.use(['form','layer','table','laydate','element'], function () { orders=" order by state desc" }else if(data.value==3){ orders=" order by state asc" + }else{ + orders=""; } }); @@ -55,6 +59,8 @@ layui.use(['form','layer','table','laydate','element'], function () { $("#reset").click(function(){ $('#keyword').val(''); let json = { + proId:localStorage.getItem("resultVisaProId"), + makeMonth:localStorage.getItem("resultVisaMakeMonth"),orders:orders, "keyword": '' } // 对表格进行重载。id 即 table表格的id diff --git a/hxy-web/js/wireManager/staff/staffAdd.js b/hxy-web/js/wireManager/staff/staffAdd.js index 5877cd1..15dd54c 100644 --- a/hxy-web/js/wireManager/staff/staffAdd.js +++ b/hxy-web/js/wireManager/staff/staffAdd.js @@ -70,14 +70,18 @@ layui.use(['element','layer','transfer', 'form', 'upload','laydate','tree'], fun chosenum=1; //预读本地文件,如果是多文件,则会遍历。(不支持ie8/9) obj.preview(function(index, file, result){ - console.log(index); //得到文件索引 - console.log(file); //得到文件对象 - console.log(result); //得到文件base64编码,比如图片 - - //这里还可以做一些 append 文件列表 DOM 的操作 - - //obj.upload(index, file); //对上传失败的单个文件重新上传,一般在某个事件中使用 - //delete files[index]; //删除列表中对应的文件,一般在某个事件中使用 + var length = $('#demo1 img').length; + if (length > 2) { + delete files[index];//删除指定图片 + $(this).remove(); + return layer.msg("附件为1-3张,请勿过多上传", {icon: 5}); + } + $('#demo1').append('' + file.name + ''); + $('#' + index).bind('dblclick', function () {//双击删除指定预上传图片 + delete files[index];//删除指定图片 + $(this).remove(); + }); + var imgNum = $("#demo1 img").length; }); }, before: function (obj) { @@ -248,6 +252,14 @@ layui.use(['element','layer','transfer', 'form', 'upload','laydate','tree'], fun layer.msg("请上传附件!") return; } + var usertype=$("#userType").val(); + if(usertype==0){ + var gtid=$("#gtId").val(); + if(gtid==null||gtid==""){ + layer.msg("请选择范围、基数!") + return; + } + } $("#hideUpload1").trigger("click"); }else{ updateData(data); // 修改 diff --git a/hxy-web/js/wireManager/staff/staffImport.js b/hxy-web/js/wireManager/staff/staffImport.js index 9cacab6..79a85c8 100644 --- a/hxy-web/js/wireManager/staff/staffImport.js +++ b/hxy-web/js/wireManager/staff/staffImport.js @@ -1,9 +1,7 @@ var idNumber; var loadingMsg; -var trainFileNames = []; -var trainFilePaths = []; -var examFileNames = []; -var examFilePaths = []; +var parentValue; + layui.use(['layer', 'form', 'upload'], function () { var upload1 = layui.upload; @@ -11,8 +9,6 @@ layui.use(['layer', 'form', 'upload'], function () { var form = layui.form; var layer = layui.layer; - getProjectSelect(); - $("#closeBt").click(function () { var index = parent.layer.getFrameIndex(window.name); //先得到当前 iframe层的索引 @@ -25,63 +21,52 @@ layui.use(['layer', 'form', 'upload'], function () { return } - $("#hideUpload1").trigger("click"); excelUpload(); }); + }); +function setParam(data){ + parentValue = data; +} -function importData() { - var fileData = new FormData(); - fileData.append('file', $('#file')[0].files[0]); - // 加载提示 - loadingMsg = top.layer.msg('数据上传中,请稍候...', {icon: 16, scrollbar: false, time: 0, shade: [0.8, '#393D49']}); - // form请求地址 - var formUrl = oiPlanUrl + "/monthlyPlanSubmission/importData"; - $.ajax({ - type: 'POST', - url: formUrl, // 请求地址 - data: fileData, - processData: false, - contentType: false, - success: function (data) { - top.layer.close(loadingMsg); //再执行关闭 - if (data.code == 200) { - top.layer.alert(data.msg); - reloading(); - } else { - top.layer.alert(data.msg, {icon: 2}); - } - }, - error: function (XMLHttpRequest, textStatus, e) { - layer.msg('数据请求发生异常,请稍后重试', {icon: 16, scrollbar: false}); - top.layer.close(addLoadingMsg); //再执行关闭 +/** + * 下拉框set值 + */ +function setOption(id,resultObj,html) { + for (let i = 0; i < resultObj.length; i++) { + if (id == resultObj[i].id) { + html += ''; + } else { + html += ''; } - }); + } + return html; } function excelUpload() { - loadingMsg = top.layer.msg('数据上传中,请稍候...', {icon: 16, scrollbar: false, time: 0, shade: [0.8, '#393D49']}); //④创建一个formData对象 + loadingMsg = layer.msg('数据上传中,请稍候...', {icon: 16, scrollbar: false, time: 0, shade: [0.8, '#393D49']}); //④创建一个formData对象 var fileData = new FormData(); fileData.append('file', $('#file')[0].files[0]); $.ajax({ - url : oiPlanUrl + "/monthlyPlanSubmission/importData", + url : PATH_URL + "/personbase/importData", type : 'POST', data : fileData, processData : false,// ⑧告诉jQuery不要去处理发送的数据 contentType : false, // ⑨告诉jQuery不要去设置Content-Type请求头 success : function(result) { console.log(result) - top.layer.close(loadingMsg); - if (result.data.success) { - layer.msg(result.data.msg,{icon:1,time:1500},function () { - // reloadData(); - reloading(); - }); + layer.close(loadingMsg); + if (result.code == 200) { + parent.document.getElementById('powerNum').innerText = result.data.powerNum; + + parent.layer.alert(result.msg,{icon:1}); + var index = parent.layer.getFrameIndex(window.name); //先得到当前 iframe层的索引 + parent.layer.close(index); //再执行关闭 } else { - showModal(result.data); + layer.alert(result.msg,{icon:2}); } }, error : function(XMLHttpRequest, textStatus, errorThrown,result) { @@ -124,6 +109,35 @@ function showModal(result) { }, 1000); } + +//初始化工程下拉选 +function getProSelect(subId,proId) { + $("#proId").empty(); + $.ajax({ + type: 'get', + url: systemPath + '/select/getProBySubId', + data: { + subId: subId + }, + async: false, + success: function (data) { + console.log("获取工程下拉列表OK"); + if(data.code == 200){ + let html = ''; + let resultObj = data.data; + let htm = setOption(proId,resultObj,html); + $("#proId").html(htm); + }else{ + $("#proId").html(''); + } + layui.form.render(); + }, + error: function (err) { + console.log("获取工程下拉列表出错:", err); + } + }); +} + //刷新页面 function reloading() { var index = parent.layer.getFrameIndex(window.name); //先得到当前 iframe层的索引 diff --git a/hxy-web/js/wireManager/staff/staffList.js b/hxy-web/js/wireManager/staff/staffList.js index 87e02e1..e62adea 100644 --- a/hxy-web/js/wireManager/staff/staffList.js +++ b/hxy-web/js/wireManager/staff/staffList.js @@ -253,7 +253,6 @@ function updateView(id) { * 删除 * */ function delView(id) { - let index = layer.confirm("是否确定删除数据?相关数据也会删除!", function () { $.ajax({ type: 'post', @@ -265,8 +264,8 @@ function delView(id) { success: function (data) { layer.close(index); if (data.code == 200) { - top.layer.alert('删除成功', {icon: 1}); - // example.ajax.reload(); // 刷新页面 + layer.msg('删除成功'); + $("#query").trigger("click"); // 刷新页面 } else { layer.msg("删除失败", {icon: 2}, function () { // example.ajax.reload(); // 刷新页面 @@ -300,34 +299,6 @@ function importData(){ }); } -function importDataThread(formData, idx) { - $.ajax({ - url: oiPlanUrl + "/basePerson/importData", - type: 'POST', - async: false, - data: formData, - timeout: 20000, - // 告诉jQuery不要去处理发送的数据 - processData: false, - // 告诉jQuery不要去设置Content-Type请求头 - contentType: false, - success: function (data) { - layer.close(idx); - if (data.code == 200) { - layer.alert(data.data, {icon: 1}); - // example.ajax.reload(); // 刷新页面 - } else{ - layer.alert(data.msg, {icon: 2}); - } - - }, - error: function (XMLHttpRequest, textStatus, errorThrown) { - console.log(JSON.stringify(errorThrown)); - layer.close(idx); - } - }); - $("#basePersonFile").val(""); -} //导出 function exportData() { @@ -342,4 +313,47 @@ function exportData() { + "&userState=" + userState + "&contractState=" + contractState + "&yjId=" + yjId +} +function excelUpload() { + if($("#projecct").val() == ""){ + layer.msg("请选择工程", { icon: 0 }); + return + } + + loadingMsg = layer.msg('数据上传中,请稍候...', {icon: 16, scrollbar: false, time: 0, shade: [0.8, '#393D49']}); //④创建一个formData对象 + var fileData = new FormData(); + fileData.append('file', $('#file')[0].files[0]); + fileData.append('proId', $("#projecct").val()); + $.ajax({ + url : PATH_URL + "/lineProject/importData", + type : 'POST', + data : fileData, + processData : false,// ⑧告诉jQuery不要去处理发送的数据 + contentType : false, // ⑨告诉jQuery不要去设置Content-Type请求头 + success : function(result) { + console.log(result) + layer.close(loadingMsg); + if (result.code == 200) { + parent.document.getElementById('powerNum').innerText = result.data.powerNum; + + parent.layer.alert(result.msg,{icon:1}); + var index = parent.layer.getFrameIndex(window.name); //先得到当前 iframe层的索引 + parent.layer.close(index); //再执行关闭 + } else { + layer.alert(result.msg,{icon:2}); + } + }, + error : function(XMLHttpRequest, textStatus, errorThrown,result) { + top.layer.close(loadingMsg); + if(XMLHttpRequest.status === 401){ + localStorage.removeItem("token"); + layer.msg('用户登录过期,请重新登录',{icon:5,time:2000},function(){ + location.href = ctxPath + '/login.html'; + }); + }else{ + layer.msg(result.data.msg,{icon:5,time:2000}); + } + // $.dialog({title: '提示', content: result.msg}); + } + }); } \ No newline at end of file diff --git a/hxy-web/js/wireManager/viewResult/normalInspectionUpload.js b/hxy-web/js/wireManager/viewResult/normalInspectionUpload.js index 61bdc98..f4c5fb6 100644 --- a/hxy-web/js/wireManager/viewResult/normalInspectionUpload.js +++ b/hxy-web/js/wireManager/viewResult/normalInspectionUpload.js @@ -126,7 +126,7 @@ function firstDayStr(){ var year = today.getFullYear(); // 获取当前年份 // 当月的第一天 - var firstDay = new Date(year, thisMonth, 1); + var firstDay = new Date(year, thisMonth, 2); var firstDayString = firstDay.toISOString().slice(0, 10); // 转换为YYYY-MM-DD格式 // 当月的最后一天 @@ -142,7 +142,7 @@ function lastDayStr(){ var year = today.getFullYear(); // 获取当前年份 // 当月的第一天 - var firstDay = new Date(year, thisMonth, 1); + var firstDay = new Date(year, thisMonth, 2); var firstDayString = firstDay.toISOString().slice(0, 10); // 转换为YYYY-MM-DD格式 // 当月的最后一天 diff --git a/hxy-web/js/wireManager/viewResult/patrolOutsideAdd.js b/hxy-web/js/wireManager/viewResult/patrolOutsideAdd.js index 15ff6aa..0ccd3e0 100644 --- a/hxy-web/js/wireManager/viewResult/patrolOutsideAdd.js +++ b/hxy-web/js/wireManager/viewResult/patrolOutsideAdd.js @@ -39,7 +39,9 @@ layui.use(['form', 'table', 'upload', 'laydate'], function () { }) form.on('submit(formDemo)', function (data) { - $("#hideUpload").trigger("click"); + console.log(data) + checkGt(data.field.gtId); + // $("#hideUpload").trigger("click"); }); form.on('select(proId)', function(data){ console.log(data); @@ -47,13 +49,34 @@ layui.use(['form', 'table', 'upload', 'laydate'], function () { }) }); +function checkGt(gtid){ + $.ajax({//id获取详情打开弹窗传值子页面 + type: 'post', + url: PATH_URL + "/makeInfo/checkGt", + dataType: 'json', + async:false, + data: { + gtid:gtid,makeTime:$("#dataTime").val() + }, + success: function (res) { + if(res.code==200){ + $("#hideUpload").trigger("click"); + }else{ + layer.msg("该杆塔已被巡视!"); + } + }, + error:function(e){ + layer.msg("该杆塔已被巡视!"); + } + }) +} function firstDayStr(){ var today = new Date(); var thisMonth = today.getMonth(); // 获取当前月份(从0开始) var year = today.getFullYear(); // 获取当前年份 // 当月的第一天 - var firstDay = new Date(year, thisMonth, 1); + var firstDay = new Date(year, thisMonth, 2); var firstDayString = firstDay.toISOString().slice(0, 10); // 转换为YYYY-MM-DD格式 // 当月的最后一天 diff --git a/hxy-web/js/wireManager/viewResult/specialPatrolAdd.js b/hxy-web/js/wireManager/viewResult/specialPatrolAdd.js index 56c8916..f07aff5 100644 --- a/hxy-web/js/wireManager/viewResult/specialPatrolAdd.js +++ b/hxy-web/js/wireManager/viewResult/specialPatrolAdd.js @@ -30,7 +30,7 @@ function firstDayStr(){ var year = today.getFullYear(); // 获取当前年份 // 当月的第一天 - var firstDay = new Date(year, thisMonth, 1); + var firstDay = new Date(year, thisMonth, 2); var firstDayString = firstDay.toISOString().slice(0, 10); // 转换为YYYY-MM-DD格式 // 当月的最后一天 @@ -46,7 +46,7 @@ function lastDayStr(){ var year = today.getFullYear(); // 获取当前年份 // 当月的第一天 - var firstDay = new Date(year, thisMonth, 1); + var firstDay = new Date(year, thisMonth, 2); var firstDayString = firstDay.toISOString().slice(0, 10); // 转换为YYYY-MM-DD格式 // 当月的最后一天 diff --git a/hxy-web/js/wireManager/viewResult/uploadPhoto.js b/hxy-web/js/wireManager/viewResult/uploadPhoto.js index 8f1ac7e..f5fd4ca 100644 --- a/hxy-web/js/wireManager/viewResult/uploadPhoto.js +++ b/hxy-web/js/wireManager/viewResult/uploadPhoto.js @@ -23,6 +23,9 @@ layui.use(['form', 'table', 'upload'], function () { uploadFile(); form.on('submit(formDemo)', function (data) { + if(urls.length==0){ + layer.msg("请上传文件!") + } $("#hideUpload").trigger("click"); }); }); @@ -61,7 +64,7 @@ function uploadFile(){ console.log(index); //得到文件索引 console.log(file.name); //得到文件对象 var files = $('#demo img') - if(files.length <= 2){ + if(files.length <= 1){ $('#demo').append( '
' + '
' + @@ -74,7 +77,7 @@ function uploadFile(){ '
' ); }else{ - layer.msg('最多上传2张照片',{icon:2}) + layer.msg('最多上传1张照片',{icon:2}) } addDelete(startWorkFiles); }); diff --git a/hxy-web/js/wireManager/viewResult/uploadSpecialPhoto.js b/hxy-web/js/wireManager/viewResult/uploadSpecialPhoto.js new file mode 100644 index 0000000..e7deb3a --- /dev/null +++ b/hxy-web/js/wireManager/viewResult/uploadSpecialPhoto.js @@ -0,0 +1,179 @@ +//全局的页面遮盖 +let loadingMsg; +var startWorkFiles = {}; +var upload; +var id; +var formData; +var gtId; +var month; +var numTimes; +var userId; +var makeType; +var proId; +layui.use(['form', 'table', 'upload'], function () { + let form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功 + form.render(); + upload = layui.upload; + gtId=$("#gtId").val(); + month=$("#month").val(); + numTimes=$("#numTimes").val(); + userId=$("#userId").val(); + makeType=$("#makeType").val(); + proId=$("#proId").val(); + uploadFile(); + + form.on('submit(formDemo)', function (data) { + if(urls.length==0){ + layer.msg("请上传文件!") + } + $("#hideUpload").trigger("click"); + }); +}); +function setGtId(gtId,month,numTimes,resultUserId,makeType,proId){ + console.log(gtId,"gtId"); + console.log(month,"month"); + $("#gtId").val(gtId); + $("#month").val(month); + $("#numTimes").val(numTimes); + $("#userId").val(resultUserId); + $("#makeType").val(makeType); + $("#proId").val(proId); +} +var ysUrls=""; +var urls=""; +function uploadFile(){ + var uploadcom = upload.render({ + elem: '#test', + url: FILE_URL + "/file/uploadmake" , //上传接口 //改成您自己的上传接口 + multiple: true, //是否允许多文件上传,默认未false + dataType: "json", + exts: 'jpg|png|mp4', + //acceptMime: 'image/jpg,image/png,image/jpeg,file/pdf,file/xlsx', + auto: false, //是否自动上传 ,默认为true + number: 1, //最大上传数量 + // size: 1024*5, //最大文件大小,单位k + bindAction: '#hideUpload', //绑定的按钮 + field: 'file', //传到后台的字段名,默认file + choose: function (obj) { + flag = false; + var suffixType = ''; //后缀类型 + uploadcom.config.elem.next()[0].value = ''; + obj.files = obj.pushFile(); + startWorkFiles = obj.pushFile(); + obj.preview(function (index, file, result) { + console.log(index); //得到文件索引 + console.log(file.name); //得到文件对象 + var files = $('#demo img') + if(files.length <= 1){ + $('#demo').append( + '
' + + '
' + + '
' + + '' + + '
' + + '' + file.name + '' + + '
' + (file.name.length > 8 ? (file.name.substr(0, 8) + "..") : file.name) + '
' + + '
'+ + '
' + ); + }else{ + layer.msg('最多上传1张照片',{icon:2}) + } + addDelete(startWorkFiles); + }); + }, + before: function (obj) { + ysUrls=""; + urls=""; + this.data = { + "gtId": gtId,uploadType:"one",photoType:"hxy",month:month,numTimes:numTimes + }; + }, + done: function (data) { + console.log(data,"donedata"); + urls=data.data.url; + ysUrls=data.data.ysUrl; + }, + allDone: function (data) { + console.log(data,"allDonedata"); + if(ysUrls!=null&&urls!=null){ + insertMakeGt(); + var iframeWindow = parent.window['layui-layer-iframe' + localStorage.getItem("resultindex")]; + iframeWindow.reloadData(); + var index = parent.layer.getFrameIndex(window.name); //先得到当前 iframe层的索引 + parent.layer.close(index); + }else{ + layer.msg("上传错误!") + } + + }, + error: function (e) { + //请求异常回调 + console.log(e) + } + }); +} +function insertMakeGt(){ + if(ysUrls.length == 0){ + layer.msg('请上传文件', {icon: 2}); + return; + } + $.ajax({ + type:"post", + url : PATH_URL + "/makeInfo/insertMakeGt", + async:false, + data:{ + "gtId": $("#gtId").val(), + userId:userId, + makeMonth:month, + sFilePath:ysUrls, + filePath:urls,makeType:3,proId:proId, + numTimes:numTimes + }, + dataType:"json", + success:function(res){ + console.log(res,"res") + if(res.code==500){ + parent.layer.msg(res.msg) + return; + } + }, + error:function(data){ + } + }); +} + + + + +var deletePhoto = []; +function delPhoto(i,id) { + var parentcolor = document.getElementById("demo" + i); + var childcolor = document.getElementById(id + ""); + var path = childcolor.name; + deletePhoto.push(path); + parentcolor.removeChild(childcolor); + var photoNum = $("#demo" + i).children().length; + if (photoNum == 0) { + $("#preview" + i).css("display", "none"); + } +} +function addDelete(arr) { + $('#demo').click(function (e) { + var target = $(e.target) + if (target.hasClass('handle') || target.hasClass('layui-icon')) { + var dataIdx = target.attr('data-idx') + var filePath = $('#' + dataIdx).children().children().next().attr('file') + delete arr[dataIdx]; // 通过获取绑定在标签上的index,删除files对象中对应的key属性即可 + target.parents('.item').remove() // 页面文件标签也删除 + } + }); +} +//设置弹窗关闭 +function reloading() { + var index = parent.layer.getFrameIndex(window.name); //先得到当前 iframe层的索引 + parent.layer.close(index); //再执行关闭 + window.parent.location.reload(); +} + + diff --git a/hxy-web/js/wireManager/viewResult/viewResult.js b/hxy-web/js/wireManager/viewResult/viewResult.js index 7c8aa5c..5c761d1 100644 --- a/hxy-web/js/wireManager/viewResult/viewResult.js +++ b/hxy-web/js/wireManager/viewResult/viewResult.js @@ -16,6 +16,8 @@ layui.use(['form','layer','table','laydate'], function () { // 触发submit提交 按钮点击或者表单被执行提交时触发 form.on('submit(query)', function (data) { console.log(data,"搜索") + yjId=localStorage.getItem("oneselectyj"); + data.field.yjId=yjId; // 对表格进行重载。id 即 table表格的id table.reload('table', { // //设定异步数据接口的额外参数 @@ -154,7 +156,6 @@ function init(){ } - //详情 function detailsView(id,userId,makeMonth) { localStorage.setItem("resultId",id); diff --git a/hxy-web/js/wireManager/viewResult/viewResultDetails.js b/hxy-web/js/wireManager/viewResult/viewResultDetails.js index 286a127..ef3ddd9 100644 --- a/hxy-web/js/wireManager/viewResult/viewResultDetails.js +++ b/hxy-web/js/wireManager/viewResult/viewResultDetails.js @@ -198,10 +198,20 @@ function getView(){ var gtName = viewList1[i].gtName.length>4?viewList1[i].gtName.substring(0,4) + '...': viewList1[i].gtName; html += `
` + var ystate=0; + for (var j = 0; j < photoList1.length; j++) { + if(viewList1[i].gtId == photoList1[j].gtId){ + //照片存在,直接显示 + ystate=1; + break; + } + } if("1"==viewList1[i].makeType){ html +=`
` + }else if(ystate==0){ + html +=`
` }else{ - html +=`
` + html +=`
` } html += ` ${gtName} @@ -260,10 +270,20 @@ function getView(){ html += `
` + var ystate=0; + for (var j = 0; j < photoList2.length; j++) { + if(viewList2[i].gtId == photoList2[j].gtId){ + //照片存在,直接显示 + ystate=1; + break; + } + } if("1"==viewList2[i].makeType){ html +=`
` + }else if(ystate==0){ + html +=`
` }else{ - html +=`
` + html +=`
` } html += ` @@ -325,7 +345,7 @@ function getView(){ var gtName = viewList3[i].gtName.length>11?viewList3[i].gtName.substring(0,11) + '...': viewList3[i].gtName; html += `
-
+
${gtName}
diff --git a/hxy-web/js/wireManager/viewResult/viewResultUpdate.js b/hxy-web/js/wireManager/viewResult/viewResultUpdate.js index 75eecf7..27a3f6b 100644 --- a/hxy-web/js/wireManager/viewResult/viewResultUpdate.js +++ b/hxy-web/js/wireManager/viewResult/viewResultUpdate.js @@ -18,6 +18,8 @@ layui.use(['form','layer','table','laydate','element'], function () { elem:'#month', //指定元素 元素选择器 type:'month', //选择时间类型 可选值:year(年) month(年月) date(年月日) time(时分秒) datetime(年月日时分秒) trigger:'click', + min:firstDayStr(), + max:lastDayStr(), format: 'yyyy-MM', btns:['now','confirm'], //选择框右下角显示的按钮 清除-现在-确定 value: formatCurrentMonth(), // 如果你想预设当前日期为选中状态 @@ -34,7 +36,42 @@ layui.use(['form','layer','table','laydate','element'], function () { setData() }); - +function firstDayStr(){ + var today = new Date(); + var thisMonth = today.getMonth(); // 获取当前月份(从0开始) + var year = today.getFullYear(); // 获取当前年份 + + // 当月的第一天 + var firstDay = new Date(year, thisMonth-1, 2); + var firstDayString = firstDay.toISOString().slice(0, 10); // 转换为YYYY-MM-DD格式 + + // 当月的最后一天 + var lastDay = new Date(year, thisMonth + 1, 1); + var lastDayString = lastDay.toISOString().slice(0, 7); // 转换为YYYY-MM-DD格式 + console.log("First day of this month: " + firstDayString); + return firstDayString; +} +function lastDayStr(){ + var today = new Date(); + var thisMonth = today.getMonth(); // 获取当前月份(从0开始) + var year = today.getFullYear(); // 获取当前年份 + + // 当月的第一天 + var firstDay = new Date(year, thisMonth, 1); + var firstDayString = firstDay.toISOString().slice(0, 7); // 转换为YYYY-MM-DD格式 + + // 当月的最后一天 + var lastDay = new Date(); + var lastDayString = lastDay.toISOString().slice(0, 10); // 转换为YYYY-MM-DD格式 + console.log("Last day of this month: " + lastDayString); + return lastDayString; +} +function currMonth(){ + var lastDay = new Date(); + var lastDayString = lastDay.toISOString().slice(0, 7); // 转换为YYYY-MM-DD格式 + console.log("Last day of this month: " + lastDayString); + return lastDayString; +} //工程切换 function projectTab(event,proId){ resultProId=proId; @@ -58,7 +95,13 @@ function formatCurrentMonth() { function init(chosenYear,chosenMonth){ layui.use(['table'], function () { getTab(chosenMonth) - getView() + if(localStorage.getItem("resultMakeMonth")!=currMonth()){ + $("#normalInspectionUpload").css("display","none") + getViewc(); + }else{ + $("#normalInspectionUpload").css("display","") + getView(); + } getSpecial(chosenYear,chosenMonth) }) } @@ -199,10 +242,20 @@ function getView(){ var gtName = viewList1[i].gtName.length>4?viewList1[i].gtName.substring(0,4) + '...': viewList1[i].gtName; html += `
` + var ystate=0; + for (var j = 0; j < photoList1.length; j++) { + if(viewList1[i].gtId == photoList1[j].gtId){ + //照片存在,直接显示 + ystate=1; + break; + } + } if("1"==viewList1[i].makeType){ html +=`
` + }else if(ystate==0){ + html +=`
` }else{ - html +=`
` + html +=`
` } html += ` ${gtName} @@ -263,10 +316,20 @@ function getView(){ html += `
` + var ystate=0; + for (var j = 0; j < photoList2.length; j++) { + if(viewList2[i].gtId == photoList2[j].gtId){ + //照片存在,直接显示 + ystate=1; + break; + } + } if("1"==viewList2[i].makeType){ html +=`
` + }else if(ystate==0){ + html +=`
` }else{ - html +=`
` + html +=`
` } html += ` @@ -290,7 +353,7 @@ function getView(){
上传图片
` } html += `
- @@ -330,9 +393,10 @@ function getView(){ var gtName = viewList3[i].gtName.length>11?viewList3[i].gtName.substring(0,11) + '...': viewList3[i].gtName; html += `
-
+
${gtName} +
@@ -353,7 +417,7 @@ function getView(){ } html += `
- @@ -379,36 +443,301 @@ function getView(){ $("#inspectionTourContent").append(html); } -//页面赋值 -function setData(){ - var id=localStorage.getItem("resultUserId"); +function getViewc(){ + // ①已上传:展示修改、删除图标,上传日期不可选择,照片信息,杆塔号;颜色为“#52C1F5”; + // ②未上传:展示上传图标,上传日期可选择,杆塔号,颜色为“#F56C6C”; + // ③巡护段外:展示修改、删除图标,上传日期不可选择,照片信息,工程名称,杆塔号;颜色为“#FF9900”; + // ④特巡/值守:展示修改、删除图标,上传日期不可选择,照片信息,备注;颜色为“#73A0FA”; + // ⑤正在编辑:修改图标绿色背景,可重新上传照片、重新选择日期,编辑即边框闪烁; $.ajax({//id获取详情打开弹窗传值子页面 type: 'post', - url: PATH_URL + "/makeInfo/getUserDetail", + url: PATH_URL + "/makeInfo/getById", dataType: 'json', + async:false, data: { - id: id + userId: localStorage.getItem("resultUserId"),makeMonth:localStorage.getItem("resultMakeMonth"),proId:localStorage.getItem("resultProId") }, success: function (data) { - $("#username").text(data.data.userName); - $("#phone").text(data.data.tel); - $("#num").text(data.data.powerNum); - $("#oneNum").text(data.data.oneMake); - $("#twoNum").text(data.data.twoMake); - $("#otherNum").text(data.data.special); + console.log(data,"result"); + viewList1=data.mgtListone; + photoList1=data.vgtListone; + viewList2=data.mgtListtwo; + photoList2=data.vgtListtwo; + viewList3=data.mgtListspe; + photoList3=data.mgtListspe; + }, error:function(e){ } }) + + $("#inspectionTourContent").empty(); + //杆塔集合 + // viewList1 = [{id:"1",name:"#1"},{id:"2",name:'#2'},{id:"3",name:'#3'},{id:"4",name:'#4'},{id:"5",name:'#5'},{id:"6",name:'#6'}, + // {id:"7",name:'#7'},{id:"8",name:'#8'},{id:"9",name:'#9'}] + // //照片集合 + var filePath = 'http://192.168.0.14:1909/file/ynRealName/violationBlack/2024/05/13/c0a62f0b51924a4584ec0c8f011fc2af0074P3wTgy1h3gtizuzvfj30zk0zg7ad.jpg'; + var sFilePath='../../../image/viewImg.jpg'; + // photoList1 = [{name:'#2', filePath:filePath,sFilePath:sFilePath,makeTime:'2024-08-19'},{name:'#3', filePath:filePath,sFilePath:sFilePath,makeTime:'2024-08-19'}, + // {name:'#4', filePath:filePath,sFilePath:sFilePath,makeTime:'2024-08-19'},{name:'#5', filePath:filePath,sFilePath:sFilePath,makeTime:'2024-08-19'}, + // {name:'#6', filePath:filePath,sFilePath:sFilePath,makeTime:'2024-08-19'}] + + let html = ``; + html += `
+ + 正常巡视-第一次巡视 + (负责的巡护区段杆塔)       + 注:若需上传负责区域之外的杆塔,请点击 + 巡护段外上传>> +
+
` + for (let i = 0;i < viewList1.length;i++) { + var gtName = viewList1[i].gtName.length>4?viewList1[i].gtName.substring(0,4) + '...': viewList1[i].gtName; + html += `
+
` + var ystate=0; + for (var j = 0; j < photoList1.length; j++) { + if(viewList1[i].gtId == photoList1[j].gtId){ + //照片存在,直接显示 + ystate=1; + break; + } + } + if("1"==viewList1[i].makeType){ + html +=`
` + }else if(ystate==0){ + html +=`
` + }else{ + html +=`
` + } + html += ` + ${gtName} +
+
` + var flag = false; + for (var j = 0; j < photoList1.length; j++) { + if(viewList1[i].gtId == photoList1[j].gtId){ + //照片存在,直接显示 + html += `` + flag = true; + break; + } + } + if(!flag){ + //照片不存在,显示上传照片按钮 + html += ` +
上传图片
` + } + html += `
+ +
+
+
+   ` + for (var j = 0; j < photoList1.length; j++) { + if(viewList1[i].gtId == photoList1[j].gtId){ + //照片存在,直接显示 + html += `${photoList1[j].makeTime}` + break; + } + } + html +=`
+
+ +
` + } + html += `
`; + + // viewList2 = [{id:"1",name:"#1"},{id:"2",name:'#2'},{id:"3",name:'#3'},{id:"4",name:'#4'},{id:"5",name:'#5'},{id:"6",name:'#6'}, + // {id:"7",name:'#7'},{id:"8",name:'#8'},{id:"9",name:'#9'}] + // photoList2 = [{name:'#2', filePath:filePath,sFilePath:sFilePath,makeTime:'2024-08-19'},{name:'#3', filePath:filePath,sFilePath:sFilePath,makeTime:'2024-08-19'}, + // {name:'#4', filePath:filePath,sFilePath:sFilePath,makeTime:'2024-08-19'},{name:'#5', filePath:filePath,sFilePath:sFilePath,makeTime:'2024-08-19'}, + // {name:'#6', filePath:filePath,sFilePath:sFilePath,makeTime:'2024-08-19'}] + html += `
+ + 正常巡视-第二次巡视 + (负责的巡护区段杆塔) +
+
` + for (let i = 0;i < viewList2.length;i++) { + var gtName = viewList2[i].gtName.length>4?viewList2[i].gtName.substring(0,4) + '...': viewList2[i].gtName; + html += `
+
+ ` + var ystate=0; + for (var j = 0; j < photoList2.length; j++) { + if(viewList2[i].gtId == photoList2[j].gtId){ + //照片存在,直接显示 + ystate=1; + break; + } + } + if("1"==viewList2[i].makeType){ + html +=`
` + }else if(ystate==0){ + html +=`
` + }else{ + html +=`
` + } + html += ` + + ${gtName} +
+
` + var flag = false; + for (var j = 0; j < photoList2.length; j++) { + if(viewList2[i].gtId == photoList2[j].gtId){ + //照片存在,直接显示 + html += `` + flag = true; + break; + } + } + if(!flag){ + //照片不存在,显示上传照片按钮 + html += ` +
上传图片
` + } + html += `
+ +
+
+
+   ` + for (var j = 0; j < photoList2.length; j++) { + if(viewList2[i].gtId == photoList2[j].gtId){ + //照片存在,直接显示 + html += `${photoList2[j].makeTime}` + break; + } + } + html +=` +
+
+
` + } + html += `
`; + + + + // viewList3 = [{id:"1",name:"#1"},{id:"2",name:'#2'},{id:"3",name:'#3'},{id:"4",name:'#4'},{id:"5",name:'#5'},{id:"6",name:'#6'}, + // {id:"7",name:'#7'},{id:"8",name:'#8'},{id:"9",name:'#9'}] + // photoList3 = [{name:'#2', filePath:filePath,sFilePath:sFilePath,makeTime:'2024-08-19'},{name:'#3', filePath:filePath,sFilePath:sFilePath,makeTime:'2024-08-19'}, + // {name:'#4', filePath:filePath,sFilePath:sFilePath,makeTime:'2024-08-19'},{name:'#5', filePath:filePath,sFilePath:sFilePath,makeTime:'2024-08-19'}, + // {name:'#6', filePath:filePath,sFilePath:sFilePath,makeTime:'2024-08-19'}] + html += `
+ 特巡 / 值守 +
+
+
+
+
` + for (let i = 0;i < viewList3.length;i++) { + var gtName = viewList3[i].gtName.length>11?viewList3[i].gtName.substring(0,11) + '...': viewList3[i].gtName; + html += `
+
+
+ + ${gtName} + + +
+
+ ` + var flag = false; + for (var j = 0; j < photoList3.length; j++) { + if(viewList3[i].gtId == photoList3[j].gtId){ + //照片存在,直接显示 + html += `` + flag = true; + break; + } + } + if(!flag){ + //照片不存在,显示上传照片按钮 + html += ` +
上传图片
` + } + html += ` +
+ +
+
+
+    + ` + for (var j = 0; j < photoList3.length; j++) { + if(viewList3[i].gtId == photoList3[j].gtId){ + //照片存在,直接显示 + html += `${photoList3[j].makeTime}` + break; + } + } + html +=` +
+
+ +
` + } + html += `
`; + $("#inspectionTourContent").append(html); } + +function towerSpeciaEdit(event,id,numTimes){ + var color = $(event).css("background-color"); + //通过按钮样式判断按钮状态 + if(color == "rgb(22, 186, 170)"){ + //此为编辑状态 + //呼吸灯效果 + $(event).parent().parent().removeClass("arrow_box"); + //修改按钮背景颜色 + $(event).css("background-color", ""); + //展示编辑按钮 + $(event).parent().next().children("div").css("display","none") + }else{ + //常规状态 + //呼吸灯效果 + $(event).parent().parent().addClass("arrow_box"); + //修改按钮背景颜色 + $(event).css("background-color", "#16BAAA"); + //展示编辑按钮 + $(event).parent().next().children("div").css("display","flex") + } +} +function uploadSpecialPhoto(id){ + let height = '70%'; + let width = '60%'; + var index = parent.layer.open({ + title: ['上传特巡', 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'], + type: 2, + content: './uploadSpecialPhoto.html', + area: [width, height], + maxmin: false, + success: function (layero, index) { + var myIframe = parent.window[layero.find('iframe')[0]['name']]; + myIframe.setGtId(id,localStorage.getItem("resultMakeMonth"),3,localStorage.getItem("resultUserId"),3,localStorage.getItem("resultProId")); + // var fnc = myIframe.setData(data.data); //aaa()为子页面的方法 + + }, + }); +} //文件查看 //查看附件详情 function filePreView(url) { if(url != "" && url != null){ var suffix = url.split(".")[1]; - if(suffix == "mp4"){ + if(url.includes("mp4")){ localStorage.setItem("filePath", url); var height = '99%'; var width = '70%'; @@ -594,4 +923,27 @@ function uploadPhoto(id,numTimes,makeType){ }, }); +} +//页面赋值 +function setData(){ + var id=localStorage.getItem("resultUserId"); + $.ajax({//id获取详情打开弹窗传值子页面 + type: 'post', + url: PATH_URL + "/makeInfo/getUserDetail", + dataType: 'json', + data: { + id: id + }, + success: function (data) { + $("#username").text(data.data.userName); + $("#phone").text(data.data.tel); + $("#num").text(data.data.powerNum); + $("#oneNum").text(data.data.oneMake); + $("#twoNum").text(data.data.twoMake); + $("#otherNum").text(data.data.special); + }, + error:function(e){ + + } + }) } \ No newline at end of file diff --git a/hxy-web/templateDown/人员信息.xlsx b/hxy-web/templateDown/人员信息.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c42d122311bfc23065b212be68fae84e6764d607 GIT binary patch literal 11241 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 literal 0 HcmV?d00001