| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073 | 
							- <!DOCTYPE html>
 
- <html class="x-admin-sm">
 
- <head>
 
-     <meta charset="UTF-8">
 
-     <meta name="renderer" content="webkit">
 
-     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
 
-     <meta name="viewport"
 
-           content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
 
-     <link rel="shortcut icon" href="/static/favicon.ico">
 
-     <link rel="bookmark" href="/static/favicon.ico">
 
-     <link rel="stylesheet" href="/static/css/font.css">
 
-     <link rel="stylesheet" href="/static/css/xadmin.css">
 
-     <script src="/static/js/jquery.min.js"></script>
 
-     <script src="/static/js/jquery.cookie.min.js"></script>
 
-     <script src="/static/lib/layui/layui.js" charset="utf-8"></script>
 
-     <script type="text/javascript" src="/static/js/xadmin.js"></script>
 
-     <script src="/static/js/echarts.min.js"></script>
 
- </head>
 
- <body>
 
- <div class="x-nav">
 
-             <span class="layui-breadcrumb">
 
-                 <a href="">首页</a>
 
-                 <a><cite>数据展示</cite></a>
 
-             </span>
 
-     <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right"
 
-        onclick="location.reload()" title="刷新">
 
-         <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
 
-     </a>
 
- </div>
 
- <div class="layui-fluid">
 
-     <div class="layui-row" style="display: flex;">
 
-         <!-- 传感器 选择 start-->
 
-         <div style="width: 340px;">
 
-             <div class="layui-card">
 
-                 <div class="layui-card-body ">
 
-                     <form class="layui-form layui-col-space5" οnsubmit="return false;">
 
-                         <div class="layui-input-inline layui-show-xs-block">
 
-                             <input value="" type="text" id="D_T_sn" name="D_T_sn" placeholder="请输入 SN"
 
-                                    autocomplete="off"
 
-                                    class="layui-input"></div>
 
-                         <div class="layui-input-inline layui-show-xs-block">
 
-                             <input value="" type="text" id="D_Name" name="D_Name" placeholder="请输入 传感器名称"
 
-                                    autocomplete="off"
 
-                                    class="layui-input"></div>
 
-                         <div class="layui-input-inline layui-show-xs-block" style="width: 168px">
 
-                             <select id="Class_1" name="Class_1">
 
-                                 <option value=0>所有分类</option>
 
-                                 {{range $index, $elem := .Class_List}}
 
-                                 <option value={{$elem.Id}}>{{$elem.T_name}}</option>
 
-                                 {{end}}
 
-                             </select>
 
-                         </div>
 
-                         <div class="layui-input-inline layui-show-xs-block">
 
-                             <div class="layui-btn layui-btn-normal"
 
-                                  onclick="get_DeviceSensor_list(0)">
 
-                                 <i class="layui-icon"></i></div>
 
-                         </div>
 
-                     </form>
 
-                     <hr>
 
-                 </div>
 
-                 <div class="layui-card-body " style="margin-top: -20px">
 
-                     <!--                    <div class="layui-progress " >-->
 
-                     <!--                        <div id="progress" class="layui-progress-bar layui-bg-blue" lay-percent="80%"></div>-->
 
-                     <!--                    </div>-->
 
-                     <div id="DeviceSensor_list" style="width: 98%; overflow: hidden;max-height: 616px;overflow-y: auto">
 
-                         <div style="color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px">加载中...</div>
 
-                     </div>
 
-                 </div>
 
-                 <div class="layui-card-body ">
 
-                     <div style="height: 70px">
 
-                         <div class="layui-card-body " style="text-align: center">
 
-                             <div class="layui-input-inline layui-show-xs-block">
 
-                                 <div class="layui-btn layui-btn-normal"
 
-                                      onclick="checkAll()">
 
-                                     <i class="layui-icon">全选择</i>
 
-                                 </div>
 
-                             </div>
 
-                             <div class="layui-input-inline layui-show-xs-block">
 
-                                 <div class="layui-btn layui-btn-normal"
 
-                                      onclick="checkCancel()">
 
-                                     <i class="layui-icon">全取消</i>
 
-                                 </div>
 
-                             </div>
 
-                             <div class="layui-input-inline layui-show-xs-block">
 
-                                 <div class="layui-btn layui-btn-normal"
 
-                                      onclick="checkReverse()">
 
-                                     <i class="layui-icon">反选</i>
 
-                                 </div>
 
-                             </div>
 
-                             <div style="color: #1E9FFF;text-align: center" id="DeviceSensor_list_Pages_x"></div>
 
-                         </div>
 
-                     </div>
 
-                 </div>
 
-             </div>
 
-         </div>
 
-         <!-- 传感器 选择 end-->
 
-         <div style="padding-left: 15px; height: 100%;flex:1;">
 
-             <div class="layui-card">
 
-                 <div class="layui-card-body">
 
-                     <div class="layui-inline">
 
-                         <div class="layui-input-inline">数据时间:</div>
 
-                         <div class="layui-input-inline">
 
-                             <input type="text" class="layui-input" id="startTime" placeholder="开始时间">
 
-                         </div>
 
-                         <span style="padding: 5px">~</span>
 
-                         <div class="layui-input-inline">
 
-                             <input type="text" class="layui-input" id="endTime" placeholder="结束时间">
 
-                         </div>
 
-                         <div class="layui-input-inline">
 
-                             <a class="layui-btn layui-btn-normal" onclick="loadEcharts()" title="刷新">
 
-                                 <!--                                <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>-->
 
-                                 加载
 
-                             </a>
 
-                         </div>
 
-                     </div>
 
-                     <div class="layui-inline " style="padding-left: 15px">
 
-                         <div class="layui-inline">选择时间:</div>
 
-                         <div class="layui-input-inline">
 
-                             <input type="text" class="layui-input"  id="selectStartTime" placeholder="开始时间">
 
-                         </div>
 
-                         <span style="padding: 5px">~</span>
 
-                         <div class="layui-input-inline">
 
-                             <input type="text" class="layui-input "  id="selectEndTime" placeholder="结束时间">
 
-                         </div>
 
-                     </div>
 
-                 </div>
 
-                 <div class="layui-inline">
 
-                     <!--按钮-->
 
-                     <div class="layui-clear" style="margin-left: 15px">
 
-                         <button onclick="offset()" class="layui-btn layui-btn-normal layui-btn-sm">偏移(固定)</button>
 
-                         <button onclick="offsetRandom()" class="layui-btn layui-btn-normal layui-btn-sm">偏移(随机)
 
-                         <button onclick="ProportionalScaling()" class="layui-btn layui-btn-normal layui-btn-sm">等比缩放
 
-                         </button>
 
- <!--                        <button onclick="copyFrom()" class="layui-btn layui-btn-normal layui-btn-sm">复制到</button>-->
 
-                         <button onclick="repair()" class="layui-btn layui-btn-normal layui-btn-sm">补漏</button>
 
-                         <button onclick="smooth()" class="layui-btn layui-btn-normal layui-btn-sm">平滑</button>
 
- <!--                        <button onclick="trend()" class="layui-btn layui-btn-normal layui-btn-sm">趋势</button>-->
 
-                         <button onclick="Delete()" class="layui-btn layui-btn-normal layui-btn-sm">删除</button>
 
- <!--                        <button onclick="importExcel()" class="layui-btn layui-btn-normal">导入表格</button>-->
 
-                     </div>
 
-                 </div>
 
-                 <hr>
 
-                 <div class="layui-card-body" id="echartsBox" style="height: 100%">
 
-                 </div>
 
-             </div>
 
-         </div>
 
-     </div>
 
- </div>
 
- <!--固定偏移-->
 
- <div style="display: none;padding: 20px" id="offsetFix">
 
-     <div class="layui-form">
 
-         <div class="layui-form-item">
 
-             温度:
 
-             <input type="number" class="layui-input" lay-verify="number" placeholder="固定下调温度" id="fixTemperature"
 
-                    value="0">
 
-         </div>
 
-         <div class="layui-form-item">
 
-             湿度:
 
-             <input type="number" class="layui-input" lay-verify="number" placeholder="固定下调湿度" id="fixHumidity"
 
-                    value="0">
 
-         </div>
 
-     </div>
 
- </div>
 
- <div style="display: none;padding: 20px" id="ProportionalScaling">
 
-     <div class="layui-form">
 
-         <div class="layui-form-item">
 
-             温度:
 
-             <input type="number" class="layui-input" lay-verify="number" placeholder="固定下调温度" id="Temperature"
 
-                    value="0">
 
-         </div>
 
-         <div class="layui-form-item">
 
-             湿度:
 
-             <input type="number" class="layui-input" lay-verify="number" placeholder="固定下调湿度" id="Humidity"
 
-                    value="0">
 
-         </div>
 
-     </div>
 
- </div>
 
- <!--随机偏移-->
 
- <div style="display: none;padding: 20px;justify-content: center" id="offsetRand">
 
-     <div class="layui-form">
 
-         <div class="layui-form-item " style="display: flex;align-items: center">
 
-             温度:
 
-             <input type="number" value="0" class="layui-input layui-input-inline" lay-verify="number"
 
-                    placeholder="温度min"
 
-                    id="temperatureStart">
 
-             <span style="padding-right: 10px">~</span>
 
-             <input type="number" value="0" class="layui-input layui-input-inline" lay-verify="number"
 
-                    placeholder="温度max"
 
-                    id="temperatureEnd">
 
-         </div>
 
-         <div class="layui-form-item" style="display: flex;align-items: center">
 
-             湿度:
 
-             <input type="number" value="0" class="layui-input layui-input-inline" lay-verify="number"
 
-                    placeholder="湿度min"
 
-                    id="humidityStart">
 
-             <span style="padding-right: 10px">~</span>
 
-             <input type="number" value="0" class="layui-input layui-input-inline" lay-verify="number"
 
-                    placeholder="湿度max"
 
-                    id="humidityEnd">
 
-         </div>
 
-     </div>
 
- </div>
 
- <!--复制移动-->
 
- <div id="copyMove" style="display: none;padding: 20px">
 
-     <div class="layui-form" style="display: flex;justify-content: center;flex-direction: column">
 
-         <div id="copyInfo">
 
-             您选择的了从 2023-01-01 00:00:00 ~ 2023-01-02 23:59:59 共 100条记录
 
-         </div>
 
-         <div>
 
-             <input class="layui-input" type="text" id="copyPosition" placeholder="拷贝到的开始时间">
 
-         </div>
 
-     </div>
 
- </div>
 
- <!--数据补漏-->
 
- <div id="dataRepair" style="padding: 20px;display: none">
 
-     发现了缺少100条数据,确认需要补充数据吗?
 
- </div>
 
- <!--数据补漏-->
 
- <div id="Delete" style="padding: 20px;display: none">
 
-     确认删除数据吗?
 
- </div>
 
- <div style="display: none;padding: 20px;justify-content: center" id="smoothBox">
 
-     <div class="layui-form">
 
-         <div class="layui-form-item " style="display: flex;align-items: center">
 
-             温度浮动范围:
 
-             <input type="number" value="0" class="layui-input layui-input-inline" lay-verify="number"
 
-                    placeholder="温度浮动范围"
 
-                    id="temperatureRange">
 
-         </div>
 
-         <div class="layui-form-item" style="display: flex;align-items: center">
 
-             湿度浮动范围:
 
-             <input type="number" value="0" class="layui-input layui-input-inline" lay-verify="number"
 
-                    placeholder="湿度浮动范围" id="humidityRange">
 
-         </div>
 
-     </div>
 
- </div>
 
- <!--数据导入-->
 
- <div id="importDataBox" style="display: none;padding: 20px;width: 300px">
 
-     <div class="layui-form">
 
-         <button onclick="document.getElementById('excelInput').click()" class="layui-btn layui-btn-danger">
 
-             选择文件
 
-         </button>
 
-         <span id="fileName"></span>
 
-         <input type="file" id="excelInput" style="display: none" class="layui-input" placeholder="选择上传文件!">
 
-     </div>
 
- </div>
 
- <script>
 
-     //温度数据
 
-     let temperatureData = []
 
-     //湿度数据
 
-     let humidityData = []
 
-     //当页面加载完毕后会执行的函数
 
-     $(function () {
 
-         //初始化页面元素
 
-         layui.use(['laydate', 'form', 'element'], function () {
 
-             let laydate = layui.laydate
 
-             laydate.render({
 
-                 elem: '#startTime',
 
-                 type: 'datetime',
 
-                 value: new Date(new Date().setUTCDate(new Date().getDate() - 1))
 
-             })
 
-             laydate.render({
 
-                 elem: '#endTime',
 
-                 type: 'datetime',
 
-                 value: new Date()
 
-             })
 
-             laydate.render({
 
-                 elem: '#selectStartTime',
 
-                 type: 'datetime',
 
-                 done: function(value){
 
-                     onTimeRangeChange(value, selectEndTime.value);
 
-                 }
 
-             })
 
-             laydate.render({
 
-                 elem: '#selectEndTime',
 
-                 type: 'datetime',
 
-                 done: function(value){
 
-                     onTimeRangeChange(selectStartTime.value, value);
 
-                 }
 
-             })
 
-             laydate.render({
 
-                 elem: '#copyPosition',
 
-                 type: 'datetime',
 
-             })
 
-         })
 
-         //添加图
 
-         // addCharts()
 
-         //获取设备探头列表
 
-         get_DeviceSensor_list(0)
 
-     })
 
-     //获取设备探头列表
 
-     function get_DeviceSensor_list(page) {
 
-         T_sn = $("#D_T_sn").val();
 
-         T_name = $("#D_Name").val();
 
-         T_class_id = $("#Class_1").val();
 
-         $.ajax({
 
-             type: 'POST',
 
-             url: '/Data/Device_Sensor_List',//发送请求
 
-             data: {
 
-                 User_tokey: $.cookie("User_tokey"),
 
-                 T_sn: T_sn,
 
-                 T_name: T_name,
 
-                 T_class_id: parseInt(T_class_id),
 
-                 page: page,
 
-                 page_z: 1000,
 
-             },
 
-             success: function (result) {
 
-                 console.log(result)
 
-                 if (result.Code == 200) {
 
-                     if (page == 0)
 
-                         $('#DeviceSensor_list').html("")
 
-                     // $('#DeviceSensor_list_Pages').html("")
 
-                     // $('#DeviceSensor_list_Pages_x').html("")
 
-                     DeviceSensor_lite = result.Data.DeviceSensor_lite
 
-                     if (DeviceSensor_lite.length == 0) {
 
-                         $('#DeviceSensor_list').html("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px\">没有设备</div>")
 
-                         return
 
-                     }
 
-                     Add_DeviceSensor_list(result.Data.DeviceSensor_lite) // 列表
 
-                     // Add_DeviceSensor_list_Pages(result.Data.Pages) // 分页
 
-                     $('#DeviceSensor_list_Pages_x').html(" 传感器 总数:" + result.Data.Num);
 
-                     if (result.Data.Page_size > result.Data.Page) {
 
-                         get_DeviceSensor_list(result.Data.Page + 1)
 
-                     }
 
-                 } else {
 
-                 }
 
-             }
 
-         });
 
-         return false
 
-     }
 
-     var T_name = ""
 
-     var T_sn = ""
 
-     var T_class_id = 0
 
-     var T_id = 0
 
-     var T_sn_T_id = ""
 
-     var Time_start = ""
 
-     var Time_end = ""
 
-     //添加设备探头数据
 
-     function Add_DeviceSensor_list(DS_lite) {
 
-         for (let i = 0; i < DS_lite.length; i++) {
 
-             if (T_id == 0) {
 
-                 T_id = DS_lite[i].T_id;
 
-                 T_sn_T_id = DS_lite[i].T_sn;
 
-             }
 
-             $('#DeviceSensor_list').append(`
 
-             <div style="display: flex; user-select: none;align-items: center;" class="layui-row">
 
-                 <input type="checkbox" data-sn="${DS_lite[i].T_sn}" data-id="${DS_lite[i].T_id}" style="width: 18px;height: 18px">
 
-                 <img src="/static/images/温湿度传感器-1.png" height="50" width="50" alt="">
 
-                 <div style="display: flex;flex-direction: column;margin-left: 10px">
 
-                     <div>${DS_lite[i].T_name}</div>
 
-                     <div>${DS_lite[i].T_sn}</div>
 
-                 </div>
 
-             </div>
 
-             `)
 
-         }
 
-     }
 
-     //修改选择状态
 
-     function changeCheckStatus(event) {
 
-         let check = $(event).find("> input[type='checkbox']");
 
-         check.prop('checked', !check.prop('checked'))
 
-     }
 
-     //全选
 
-     function checkAll() {
 
-         $('#DeviceSensor_list > div > input[type="checkbox"]').each((index, item) => {
 
-             $(item).prop('checked', true)
 
-         })
 
-     }
 
-     //反选
 
-     function checkReverse() {
 
-         $('#DeviceSensor_list > div > input[type="checkbox"]').each((index, item) => {
 
-             $(item).prop('checked', !$(item).prop('checked'))
 
-         })
 
-     }
 
-     //取消全选
 
-     function checkCancel() {
 
-         $('#DeviceSensor_list > div > input[type="checkbox"]').each((index, item) => {
 
-             $(item).prop('checked', false)
 
-         })
 
-     }
 
-     //获取选择的sn
 
-     function getSelectedSn() {
 
-         let sns = []
 
-         $('#DeviceSensor_list > div > input[type="checkbox"]').each((index, item) => {
 
-             let dom = $(item)
 
-             if (dom.prop('checked')) {
 
-                 let sn = dom.attr('data-sn')
 
-                 let id = dom.attr('data-id')
 
-                 sns.push([sn, id])
 
-             }
 
-         })
 
-         return sns
 
-     }
 
-     let chartsData = new Map()
 
-     //加载图
 
-     function loadEcharts() {
 
-         //1.获取选中的设备
 
-         let sns = getSelectedSn()
 
-         //1.1是否选有设备选中
 
-         if (sns.length === 0) {
 
-             layui.layer.msg('没有选中操作设备!')
 
-             return
 
-         }
 
-         let startTime = $('#startTime').val()
 
-         let endTime = $('#endTime').val()
 
-         //2.请求对应设备数据
 
-         let index = loading();
 
-         $.ajax({
 
-             type: "POST",
 
-             url: "/Data/DeviceSensorData",
 
-             data: {
 
-                 sns: JSON.stringify(sns),
 
-                 startTime: startTime,
 
-                 endTime: endTime,
 
-             },
 
-             success: function (rlt) {
 
-                 layui.layer.close(index)
 
-                 if (rlt.Code === 200) {
 
-                     //2.1清空图
 
-                     $('#echartsBox').html('');
 
-                     //2.2添加图
 
-                     /*
 
-                                         for (let v of rlt.Data) {
 
-                                             chartsData.set(v.sn.join('|'), v)
 
-                                             addCharts(v)
 
-                                             // console.log(v)
 
-                                         }
 
-                     */
 
-                     handleEchartData(rlt.Data)
 
-                 }
 
-                 layui.layer.msg(rlt.Msg)
 
-             }
 
-         })
 
-     }
 
-     //处理图的数据
 
-     let temperatureChar = null
 
-     let humidityChar = null
 
-     function handleEchartData(data) {
 
-         //1.将图中数据分开
 
-         let temperatureList = []
 
-         let humidityList = []
 
-         for (let v of data) {
 
-             let t = []
 
-             let h = []
 
-             if (v.data == null) continue
 
-             for (let val of v.data) {
 
-                 t.push([val.t_time, val.t_t])
 
-                 h.push([val.t_time, val.t_rh])
 
-             }
 
-             temperatureList.push([v.sn.join(' | '), t])
 
-             humidityList.push([v.sn.join(' | '), h])
 
-             chartsData.set(v.sn.join(' | '), v)
 
-         }
 
-         temperatureChar = addCharts(temperatureList, '温度t_t', 'temperature', true)
 
-         humidityChar = addCharts(humidityList, '湿度t_rh', 'humidity', false)
 
-     }
 
-     var myChar;
 
-     //添加图
 
-     function addCharts(data, name, type, show) {
 
-         //没有数据
 
-         if (data == null || data.length === 0) {
 
-             return null
 
-         }
 
-         //获取容器
 
-         let eChartsBox = $('#echartsBox')[0]
 
-         //设置要放置图的框架
 
-         let eChar = $(`<div class="layui-row" style="width: 100%;height: 500px"></div>`)[0]
 
-         eChartsBox.appendChild(eChar)
 
-         //初始化
 
-         myChar = echarts.init(eChar)
 
-         // myChart=myChar
 
-         //图标配置选项
 
-         let options = {
 
-             title: {
 
-                 text: name
 
-             },
 
-             grid: {
 
-                 left: '10%',
 
-                 right: '10%',
 
-                 // containLabel: true,
 
-                 // width: '100%',
 
-                 // x: '35px',
 
-                 // y: '40px'
 
-             },
 
-             xAxis: {
 
-                 type: 'time',
 
-                 splitLine: {
 
-                     show: false
 
-                 }
 
-             },
 
-             yAxis: {
 
-                 type: 'value',
 
-                 splitLine: {
 
-                     show: false
 
-                 },
 
-             },
 
-             toolbox: {
 
-                 feature: {
 
-                     restore: {},
 
-                 }
 
-             },
 
-             dataZoom: [
 
-                 {
 
-                     type: 'inside',
 
-                     start: 0,
 
-                     end: 100
 
-                 },
 
-                 {
 
-                     start: 0,
 
-                     end: 100
 
-                 }
 
-             ],
 
-             tooltip: {
 
-                 trigger: 'axis',
 
-                 formatter: function (params) {
 
-                     let v = params[0]
 
-                     return `${v.seriesName}\n
 
-                             时间:${v.data[0]} 数据:${v.data[1]}`
 
-                 },
 
-                 // position: function (pt) {
 
-                 //     return [pt[0], '10%'];
 
-                 // }
 
-             },
 
-             brush: {
 
-                 xAxisIndex: 0,
 
-                 toolbox: ['lineX', 'keep', 'clear'],
 
-                 brushMode: 'multiple',
 
-                 throttleType: 'debounce',
 
-                 throttleDelay: 600
 
-             },
 
-             series: []
 
-         }
 
-         for (let v of data) {
 
-             console.log(v)
 
-             options.series.push({
 
-                 name: v[0],
 
-                 data: v[1],
 
-                 type: 'line',
 
-             })
 
-         }
 
-         if (!show) {
 
-             options.dataZoom[1]["show"] = false
 
-             options.toolbox = null
 
-             options.brush = null
 
-         }
 
-         console.log(options)
 
-         //设置参数
 
-         myChar.setOption(options)
 
-         //设置选中后的函数
 
-         myChar.on('brushSelected', brushSelected)
 
-         myChar.on('dataZoom', brushDataZoom)
 
-         return myChar
 
-     }
 
-     function brushDataZoom(param) {
 
-         console.log(param)
 
-         let option = humidityChar.getOption();
 
-         if (param.start !== undefined) {
 
-             option.dataZoom[0].start = param.start
 
-             option.dataZoom[0].end = param.end
 
-         } else {
 
-             option.dataZoom[0].start = param.batch[0].start
 
-             option.dataZoom[0].end = param.batch[0].end
 
-         }
 
-         humidityChar.setOption(option)
 
-     }
 
-     //图获取选中数据
 
-     let timeRange = []
 
-     function brushSelected(param) {
 
-         if (!param.batch || !param.batch[0] || !param.batch[0].areas || !param.batch[0].areas[0]) {
 
-             return; // 如果参数不完整,直接返回避免错误
 
-         }
 
-         let coordRange = param.batch[0].areas[0].coordRange;
 
-         timeRange = [Math.floor(coordRange[0]), Math.floor(coordRange[1])];
 
-         $("#selectStartTime").val(dateFormat(new Date(timeRange[0])));
 
-         $("#selectEndTime").val(dateFormat(new Date(timeRange[1])));
 
-     }
 
-     function onTimeRangeChange(startTimeStr, endTimeStr) {
 
-         var startTime = new Date(startTimeStr).getTime();
 
-         var endTime = new Date(endTimeStr).getTime();
 
-         console.log("============")
 
-         console.log(startTime, endTime)
 
-         if (startTime > endTime) {
 
-             alert("开始时间不能大于结束时间");
 
-             return;
 
-         }
 
-         // 清除现有的画刷区域(如果存在)
 
-         myChar.dispatchAction({
 
-             type: 'brush',
 
-             areas: [] // 清空画刷区域
 
-         });
 
-         console.log("前:",myChar.getOption())
 
-         // 设置新的画刷区域
 
-         myChar.dispatchAction({
 
-             type: 'brush',
 
-             areas: [{
 
-                 brushType: 'lineX',
 
-                 range: [startTime, endTime]
 
-             }]
 
-         });
 
-         console.log("后:",myChar.getOption())
 
-     }
 
-     //温湿度偏移
 
-     function offset() {
 
-         if (timeRange.length === 0) {
 
-             layui.layer.msg('请在图中选择要操作数据的区域!')
 
-             return
 
-         }
 
-         //2.layer 打开一个窗口设置要统一设置下移的数据
 
-         layui.layer.open({
 
-             type: 1,
 
-             area: ['300px', '270px'],
 
-             content: $('#offsetFix'),
 
-             btn: '确定',
 
-             btnAlign: 'c',
 
-             yes: function (index, elem) {
 
-                 let fixTemperature = $('#fixTemperature').val();
 
-                 let fixHumidity = $('#fixHumidity').val();
 
-                 if (fixHumidity === "" || fixTemperature === "") {
 
-                     //提示消息
 
-                     layui.layer.msg("没有设置固定温湿度偏移")
 
-                     return
 
-                 }
 
-                 //3.发送修改数据区域进行循环对值进行统一下调
 
-                 let index2 = loading();
 
-                 $.ajax({
 
-                     type: 'POST',
 
-                     url: '/Data/UpdateFix',
 
-                     data: JSON.stringify({
 
-                         fixTemperature: fixTemperature,
 
-                         fixHumidity: fixHumidity,
 
-                         sns: getSelectedSn(),
 
-                         data: timeRange
 
-                     }),
 
-                     contentType: 'application/json;charset=utf-8',
 
-                     processData: false,
 
-                     success: function (rlt) {
 
-                         layui.layer.close(index2)
 
-                         if (rlt.Code === 200) {
 
-                             //3.1判断是否处理成功
 
-                             //3.1.1成功更新该设备的数据
 
-                             timeRange = []
 
-                             loadEcharts()
 
-                             layui.layer.close(index)
 
-                         }
 
-                         //提示消息
 
-                         layui.layer.msg(rlt.Msg)
 
-                     }
 
-                 })
 
-             }
 
-         })
 
-     }
 
-     //等比缩放
 
-     function ProportionalScaling() {
 
-         if (timeRange.length === 0) {
 
-             layui.layer.msg('请在图中选择要操作数据的区域!')
 
-             return
 
-         }
 
-         //2.layer 打开一个窗口设置要统一设置下移的数据
 
-         layui.layer.open({
 
-             type: 1,
 
-             area: ['300px', '270px'],
 
-             content: $('#ProportionalScaling'),
 
-             btn: '确定',
 
-             btnAlign: 'c',
 
-             yes: function (index, elem) {
 
-                 let Temperature = $('#Temperature').val();
 
-                 let Humidity = $('#Humidity').val();
 
-                 if (Humidity === "" || Temperature === "") {
 
-                     //提示消息
 
-                     layui.layer.msg("没有设置固定温湿度偏移")
 
-                     return
 
-                 }
 
-                 //3.发送修改数据区域进行循环对值进行统一下调
 
-                 let index2 = loading();
 
-                 $.ajax({
 
-                     type: 'POST',
 
-                     url: '/Data/ProportionalScaling',
 
-                     data: JSON.stringify({
 
-                         fixTemperature: Temperature,
 
-                         fixHumidity: Humidity,
 
-                         sns: getSelectedSn(),
 
-                         data: timeRange
 
-                     }),
 
-                     contentType: 'application/json;charset=utf-8',
 
-                     processData: false,
 
-                     success: function (rlt) {
 
-                         layui.layer.close(index2)
 
-                         if (rlt.Code === 200) {
 
-                             //3.1判断是否处理成功
 
-                             //3.1.1成功更新该设备的数据
 
-                             timeRange = []
 
-                             loadEcharts()
 
-                             layui.layer.close(index)
 
-                         }
 
-                         //提示消息
 
-                         layui.layer.msg(rlt.Msg)
 
-                     }
 
-                 })
 
-             }
 
-         })
 
-     }
 
-     //删除
 
-     function Delete() {
 
-         if (timeRange.length === 0) {
 
-             layui.layer.msg('请在图中选择要操作数据的区域!')
 
-             return
 
-         }
 
-         //2.layer 打开一个窗口设置要统一设置下移的数据
 
-         layui.layer.open({
 
-             type: 1,
 
-             area: ['300px', '270px'],
 
-             content: $('#Delete'),
 
-             btn: '确定',
 
-             btnAlign: 'c',
 
-             yes: function (index, elem) {
 
-                 //3.发送修改数据区域进行循环对值进行统一下调
 
-                 let index2 = loading();
 
-                 $.ajax({
 
-                     type: 'POST',
 
-                     url: '/Data/Delete',
 
-                     data: JSON.stringify({
 
-                         sns: getSelectedSn(),
 
-                         data: timeRange
 
-                     }),
 
-                     contentType: 'application/json;charset=utf-8',
 
-                     processData: false,
 
-                     success: function (rlt) {
 
-                         layui.layer.close(index2)
 
-                         if (rlt.Code === 200) {
 
-                             //3.1判断是否处理成功
 
-                             //3.1.1成功更新该设备的数据
 
-                             timeRange = []
 
-                             loadEcharts()
 
-                             layui.layer.close(index)
 
-                         }
 
-                         //提示消息
 
-                         layui.layer.msg(rlt.Msg)
 
-                     }
 
-                 })
 
-             }
 
-         })
 
-     }
 
-     //温湿度随机偏移
 
-     function offsetRandom() {
 
-         if (timeRange.length === 0) {
 
-             layui.layer.msg('请在图中选择要操作数据的区域!')
 
-             return
 
-         }
 
-         layui.layer.open({
 
-             type: 1,
 
-             area: ['520px', '240px'],
 
-             content: $('#offsetRand'),
 
-             btn: '确定',
 
-             btnAlign: 'c',
 
-             yes: function (index, elem) {
 
-                 let t_s = Number.parseFloat($('#temperatureStart').val()) * 100
 
-                 let t_e = Number.parseFloat($('#temperatureEnd').val()) * 100
 
-                 let h_s = Number.parseFloat($('#humidityStart').val()) * 100
 
-                 let h_e = Number.parseFloat($('#humidityEnd').val()) * 100
 
-                 if (!t_s && !t_e && !h_s && !h_e) {
 
-                     layui.layer.msg('随机值设置错误!因该从最小到最大!')
 
-                     return
 
-                 }
 
-                 let index2 = loading();
 
-                 $.ajax({
 
-                     type: 'POST',
 
-                     url: '/Data/UpdateRand',
 
-                     data: JSON.stringify({
 
-                         temperatureMax: Math.max(Math.floor(t_e), Math.floor(t_s)),
 
-                         temperatureMin: Math.min(Math.floor(t_e), Math.floor(t_s)),
 
-                         humidityMax: Math.max(Math.floor(h_e), Math.floor(h_s)),
 
-                         humidityMin: Math.min(Math.floor(h_e), Math.floor(h_s)),
 
-                         sns: getSelectedSn(),
 
-                         data: timeRange
 
-                     }),
 
-                     contentType: "application/json;charset=utf-8",
 
-                     processData: false,
 
-                     success: function (rlt) {
 
-                         layui.layer.close(index2)
 
-                         if (rlt.Code === 200) {
 
-                             //操作成功
 
-                             layui.layer.close(index)
 
-                             rangeData = []
 
-                             loadEcharts()
 
-                         }
 
-                         layui.layer.msg(rlt.Msg)
 
-                     }
 
-                 })
 
-             }
 
-         })
 
-         //2.layer 打开一个窗口设置随机值范围,温湿度
 
-         //3.发送修改数据区域进行循环对值进行随机值统一下调(layer点击确定之后)
 
-         //3.1判断是否处理成功
 
-         //3.1.1成功更新该设备的数据
 
-         //3.1.2失败提示
 
-     }
 
-     //复制时间段内的数据到另一个时间段
 
-     function copyFrom() {
 
-         if (timeRange.length === 0) {
 
-             layui.layer.msg('请在图中选择要操作数据的区域!')
 
-             return
 
-         }
 
-         //2.layer 提示选区的内容条目数,选区内的开始时间和结束时间(可以进行修改)(layer点击确定之后),要复制到的区域时间
 
-         $('#copyInfo').html(`<p style="color: red">${dateFormat(new Date(timeRange[0]))} ~ ${dateFormat(new Date(timeRange[1]))}</p>`)
 
-         layui.layer.open({
 
-             type: 1,
 
-             title: '数据复制(指定开始时间)',
 
-             areas: ['300px', '200px'],
 
-             content: $('#copyMove'),
 
-             btn: '确定',
 
-             btnAlign: 'c',
 
-             yes: function (index, elem) {
 
-                 let copyPosition = $('#copyPosition').val();
 
-                 if (copyPosition === '') {
 
-                     layui.layer.msg('复制到时间节点不能为空!', {icon: 6})
 
-                     return
 
-                 }
 
-                 let index2 = loading();
 
-                 $.ajax({
 
-                     type: "POST",
 
-                     url: "/Data/CopyFromPosition",
 
-                     data: JSON.stringify({
 
-                         copyPosition: copyPosition,
 
-                         sns: getSelectedSn(),
 
-                         data: timeRange
 
-                     }),
 
-                     processData: false,
 
-                     contentType: "application/json;charset=utf-8",
 
-                     success: function (rlt) {
 
-                         layui.layer.close(index2)
 
-                         if (rlt.Code === 200) {
 
-                             layui.layer.close(index)
 
-                         }
 
-                         layui.layer.msg(rlt.Msg, {icon: 1})
 
-                     }
 
-                 })
 
-             }
 
-         })
 
-     }
 
-     //补漏数据
 
-     function repair() {
 
-         if (timeRange.length === 0) {
 
-             layui.layer.msg('请在图中选择要操作数据的区域!')
 
-             return
 
-         }
 
-         let index2 = loading();
 
-         layui.layer.confirm(`确认对${dateFormat(new Date(timeRange[0]))}~${dateFormat(new Date(timeRange[1]))} 时间的数据进行查询补漏吗?`, function (index) {
 
-             layui.layer.load();
 
-             $.ajax({
 
-                 type: "POST",
 
-                 url: '/Data/RepairSensorData',
 
-                 data: {
 
-                     sns: JSON.stringify(getSelectedSn()),
 
-                     data: JSON.stringify(timeRange)
 
-                 },
 
-                 success: function (rlt) {
 
-                     if (rlt.Code === 200) {
 
-                         layui.layer.closeAll('loading');
 
-                         loadEcharts()
 
-                     }
 
-                     layui.layer.msg(rlt.Msg)
 
-                 },
 
-                 error: function(xhr, status, error) {
 
-                     layui.layer.close(index2)
 
-                     layui.layer.msg('数据补漏请求出错!');
 
-                 }
 
-             });
 
-         },function(index) {
 
-             layui.layer.close(index2); // 用户点击取消时,关闭加载提示
 
-             layui.layer.close(index);  //
 
-         });
 
-         //3.需要补漏,则将数据处理后生成中间缺失的数据发送到服务
 
-         //4.提示结果,成功刷新
 
-     }
 
-     //选区内做平滑
 
-     function smooth() {
 
-         if (timeRange.length === 0) {
 
-             layui.layer.msg('请在图中选择要操作数据的区域!')
 
-             return
 
-         }
 
-         //2.获取选区内的最开始第一条数据和最后一条数据,中间存在多少条数据,
 
-         if (timeRange.length === 0) {
 
-             layui.layer.msg('请在图中选择要操作数据的区域!')
 
-             return
 
-         }
 
-         layui.layer.open({
 
-             type: 1,
 
-             area: ['300px', '240px'],
 
-             content: $('#smoothBox'),
 
-             btn: '提交',
 
-             btnAlign: 'c',
 
-             yes: function (index, elem) {
 
-                 let index2 = loading();
 
-                 $.ajax({
 
-                     type: "POST",
 
-                     url: "/Data/DataSensorDataSmooth",
 
-                     data: {
 
-                         sns: JSON.stringify(getSelectedSn()),
 
-                         data: JSON.stringify(timeRange),
 
-                         tRange: Number.parseFloat($('#temperatureRange').val()),
 
-                         hRange: Number.parseFloat($('#humidityRange').val()),
 
-                     },
 
-                     success: function (rlt) {
 
-                         layui.layer.close(index2)
 
-                         if (rlt.Code === 200) {
 
-                             layui.layer.close(index)
 
-                             loadEcharts()
 
-                         }
 
-                         layui.layer.msg(rlt.Msg)
 
-                     }
 
-                 })
 
-             }
 
-         })
 
-         //count = (time_end -time_start) / time_threshold
 
-         //(temperature_end - temperature_start) /  count
 
-         //3.生成数据发送,判断是否发送成功数据
 
-     }
 
-     //趋势
 
-     function trend() {
 
-         if (timeRange.length === 0) {
 
-             layui.layer.msg('请在图中选择要操作数据的区域!')
 
-             return
 
-         }
 
-         layui.layer.confirm("1.确保数据没有存在遗漏!\n2.确定对选区做数据趋势吗?", function (index) {
 
-             let index2 = loading();
 
-             $.ajax({
 
-                 type: "POST",
 
-                 url: "/Data/DataSensorDataTrend",
 
-                 data: {
 
-                     sns: JSON.stringify(getSelectedSn()),
 
-                     data: JSON.stringify(timeRange),
 
-                 },
 
-                 success: function (rlt) {
 
-                     layui.layer.close(index2)
 
-                     if (rlt.Code === 200) {
 
-                         layui.layer.close(index)
 
-                         loadEcharts()
 
-                     }
 
-                     layui.layer.msg(rlt.Msg)
 
-                 }
 
-             })
 
-         })
 
-     }
 
-     //导入excel
 
-     function importExcel() {
 
-         let sns = getSelectedSn();
 
-         if (sns.length === 0) {
 
-             //没有选择设备
 
-             layui.layer.msg("没有选择设备,请选择设备后再执行导入!")
 
-             return
 
-         }
 
-         $('#excelInput').change(function () {
 
-             let f = this.files[0]
 
-             let suffix = f.name.split(".")[1];
 
-             if (suffix !== 'xlsx' && suffix !== 'xls') {
 
-                 layui.layer.msg("上传文件必须为 excel 类型的文件")
 
-                 this.files[0] = null
 
-                 return
 
-             }
 
-             $('#fileName').text(f.name)
 
-         })
 
-         //1.弹出需要导入的页面
 
-         layui.layer.open({
 
-             type: 1,
 
-             title: '导入数据',
 
-             areas: ['400px', '300px'],
 
-             content: $('#importDataBox'),
 
-             btn: '提交',
 
-             btnAlign: 'c',
 
-             yes: function (index, elem) {
 
-                 let data = new FormData()
 
-                 let file = $('#excelInput')[0].files[0];
 
-                 console.log(file.name)
 
-                 data.set("file", file)
 
-                 data.set("sn", sns.join("|"))
 
-                 let index2 = loading();
 
-                 $.ajax({
 
-                     type: "POST",
 
-                     url: "/Data/ImportSensorData",
 
-                     data: data,
 
-                     contentType: false,
 
-                     processData: false,
 
-                     success: function (rlt) {
 
-                         layui.layer.close(index2)
 
-                         if (rlt.Code === 200) {
 
-                             layui.layer.close(index)
 
-                         }
 
-                         layui.layer.msg(rlt.Msg)
 
-                     }
 
-                 })
 
-             }
 
-         })
 
-         //判断是否有存在文件,文件后缀是否正确
 
-         //如果正确则上传到服务器处理
 
-         //2.提示处理结果
 
-     }
 
-     function dateFormat(date) {
 
-         date.setHours(date.getHours() + 8);
 
-         let year = date.getUTCFullYear();
 
-         let month = date.getUTCMonth()+1;
 
-         month = month < 10 ? `0${month}` : month
 
-         let day = date.getUTCDate()
 
-         day = day < 10 ? `0${day}` : day
 
-         let hour = date.getUTCHours()
 
-         hour = hour < 10 ? `0${hour}` : hour
 
-         let minute = date.getUTCMinutes()
 
-         minute = minute < 10 ? `0${minute}` : minute
 
-         let second = date.getUTCSeconds()
 
-         second = second < 10 ? `0${second}` : second
 
-         return `${year}-${month}-${day} ${hour}:${minute}:${second}`
 
-     }
 
-     function loading() {
 
-         return layui.layer.load("Loading...", {
 
-             icon: 16,
 
-             shade: 0.2
 
-         })
 
-     }
 
- </script>
 
- </body>
 
- </html>
 
 
  |