DataList.html 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017
  1. <!DOCTYPE html>
  2. <html class="x-admin-sm">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="renderer" content="webkit">
  6. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  7. <meta name="viewport"
  8. content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
  9. <link rel="shortcut icon" href="/static/favicon.ico">
  10. <link rel="bookmark" href="/static/favicon.ico">
  11. <link rel="stylesheet" href="/static/css/font.css">
  12. <link rel="stylesheet" href="/static/css/xadmin.css">
  13. <script src="/static/js/jquery.min.js"></script>
  14. <script src="/static/js/jquery.cookie.min.js"></script>
  15. <script src="/static/lib/layui/layui.js" charset="utf-8"></script>
  16. <script type="text/javascript" src="/static/js/xadmin.js"></script>
  17. </head>
  18. <body>
  19. <div class="x-nav">
  20. <span class="layui-breadcrumb">
  21. <a href="">首页</a>
  22. <a><cite>数据展示</cite></a>
  23. </span>
  24. <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right"
  25. onclick="location.reload()" title="刷新">
  26. <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
  27. </a>
  28. </div>
  29. <div class="layui-fluid">
  30. <div class="layui-row" style="display: flex;">
  31. <!-- 传感器 选择 start-->
  32. <div style="width: 340px">
  33. <div class="layui-card">
  34. <div class="layui-card-body ">
  35. <form class="layui-form layui-col-space5" οnsubmit="return false;">
  36. <div class="layui-input-inline layui-show-xs-block">
  37. <input value="" type="text" id="D_T_sn" name="D_T_sn" placeholder="请输入 SN"
  38. autocomplete="off"
  39. class="layui-input"></div>
  40. <div class="layui-input-inline layui-show-xs-block">
  41. <input value="" type="text" id="D_Name" name="D_Name" placeholder="请输入 传感器名称"
  42. autocomplete="off"
  43. class="layui-input"></div>
  44. <div class="layui-input-inline layui-show-xs-block" style="width: 168px">
  45. <select id="Class_1" name="Class_1">
  46. <option value=0>所有分类</option>
  47. {{range $index, $elem := .Class_List}}
  48. <option value={{$elem.Id}}>{{$elem.T_name}}</option>
  49. {{end}}
  50. </select>
  51. </div>
  52. <div class="layui-input-inline layui-show-xs-block">
  53. <div class="layui-btn layui-btn-normal"
  54. onclick="get_DeviceSensor_list(0)">
  55. <i class="layui-icon">&#xe615;</i></div>
  56. </div>
  57. </form>
  58. <hr>
  59. </div>
  60. <div class="layui-card-body " style="margin-top: -20px">
  61. <!-- <div class="layui-progress " >-->
  62. <!-- <div id="progress" class="layui-progress-bar layui-bg-blue" lay-percent="80%"></div>-->
  63. <!-- </div>-->
  64. <div id="DeviceSensor_list" style="width: 98%; overflow: hidden;max-height: 616px;overflow-y: auto">
  65. <div style="color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px">加载中...</div>
  66. </div>
  67. </div>
  68. <div class="layui-card-body ">
  69. <div style="height: 70px">
  70. <div class="layui-card-body " style="text-align: center">
  71. <div class="layui-input-inline layui-show-xs-block">
  72. <div class="layui-btn layui-btn-normal"
  73. onclick="Checkboxs_All()">
  74. <i class="layui-icon">全选择</i>
  75. </div>
  76. </div>
  77. <div class="layui-input-inline layui-show-xs-block">
  78. <div class="layui-btn layui-btn-normal"
  79. onclick="Checkboxs_Allno()">
  80. <i class="layui-icon">全取消</i>
  81. </div>
  82. </div>
  83. <div class="layui-input-inline layui-show-xs-block">
  84. <div class="layui-btn layui-btn-normal"
  85. onclick="Checkboxs_Allto()">
  86. <i class="layui-icon">反选</i>
  87. </div>
  88. </div>
  89. <!-- <div class="page">-->
  90. <!-- <div id="DeviceSensor_list_Pages">-->
  91. <!-- &lt;!&ndash; <a class="prev" href="">&lt;&lt;</a>&ndash;&gt;-->
  92. <!-- &lt;!&ndash; <a class="num" href="">1222</a>&ndash;&gt;-->
  93. <!-- &lt;!&ndash; <span class="current">111</span>&ndash;&gt;-->
  94. <!-- &lt;!&ndash; <a class="num" href="">444</a>&ndash;&gt;-->
  95. <!-- &lt;!&ndash; <a class="next" href="">&gt;&gt;</a>&ndash;&gt;-->
  96. <!-- </div>-->
  97. <!-- </div>-->
  98. <div style="color: #1E9FFF;text-align: center" id="DeviceSensor_list_Pages_x"></div>
  99. </div>
  100. </div>
  101. </div>
  102. </div>
  103. </div>
  104. <!-- 传感器 选择 end-->
  105. <div style="padding-left: 15px; height: 100%;flex:1;">
  106. <div class="layui-card">
  107. <!-- 传感器数据时间选择 选择 start-->
  108. <div class="layui-card-body ">
  109. <div class="layui-form layui-col-space5" οnsubmit="return false;">
  110. <div class="layui-input-inline layui-show-xs-block">
  111. <div class="layui-btn layui-btn-normal"
  112. onclick="quick_1()">
  113. <i class="layui-icon">今天</i>
  114. </div>
  115. </div>
  116. <div class="layui-input-inline layui-show-xs-block">
  117. <div class="layui-btn layui-btn-normal"
  118. onclick="quick_2()">
  119. <i class="layui-icon">近一周</i>
  120. </div>
  121. </div>
  122. <div class="layui-input-inline layui-show-xs-block">
  123. <div class="layui-btn layui-btn-normal"
  124. onclick="quick_3()">
  125. <i class="layui-icon">近一月</i>
  126. </div>
  127. </div>
  128. <div class="layui-input-inline layui-show-xs-block">
  129. <div class="layui-btn layui-btn-normal"
  130. onclick="quick_4()">
  131. <i class="layui-icon">近一季度</i>
  132. </div>
  133. </div>
  134. <div class="layui-input-inline layui-show-xs-block">
  135. 自定义时间:
  136. </div>
  137. <div class="layui-inline layui-show-xs-block">
  138. <input class="layui-input" autocomplete="off" placeholder="开始日" name="Time_start"
  139. id="Time_start" lay-key="1"></div>
  140. <div class="layui-inline layui-show-xs-block">
  141. <input class="layui-input" autocomplete="off" placeholder="截止日" name="Time_end"
  142. id="Time_end" lay-key="2"></div>
  143. <div class="layui-input-inline layui-show-xs-block">
  144. <div class="layui-btn layui-btn-normal"
  145. onclick="get_DeviceSensor_data(0)">
  146. <i class="layui-icon">&#xe615;</i></div>
  147. </div>
  148. <div class="layui-input-inline layui-show-xs-block" style="float: right">
  149. <button class="layui-btn layui-btn-normal" id="importData">导入数据
  150. </button>
  151. <button class="layui-btn layui-btn-normal" onclick="F_moban()">导入模板说明</button>
  152. </div>
  153. </div>
  154. <hr>
  155. </div>
  156. <!-- 传感器数据时间选择 选择 end-->
  157. <div class="layui-card-body" style="height: 540px;">
  158. <table class="layui-table ">
  159. <colgroup>
  160. <col width="100">
  161. <col>
  162. <col>
  163. <col>
  164. <col>
  165. <col>
  166. <col>
  167. </colgroup>
  168. <thead>
  169. <tr>
  170. <th>选择</th>
  171. <th>采集时间</th>
  172. <th>温度℃</th>
  173. <th>湿度%</th>
  174. <th>GPS</th>
  175. <th>录入时间</th>
  176. <th>操作</th>
  177. </tr>
  178. </thead>
  179. <tbody id="DeviceSensor_data">
  180. </tbody>
  181. </table>
  182. </div>
  183. <div class="layui-card-body " style="display: flex;justify-content: space-between">
  184. <!--按钮部分 start-->
  185. <div>
  186. <button class="layui-btn layui-btn-normal" onclick="selectAll()">全选</button>
  187. <button class="layui-btn layui-btn-normal" onclick="reverseSelect()">反选</button>
  188. <button class="layui-btn layui-btn-normal" onclick="noSelect()">全不选</button>
  189. <button class="layui-btn layui-btn-danger" onclick="deleteSelect()">删除</button>
  190. </div>
  191. <!--按钮部分 end-->
  192. <!--分页部分 start-->
  193. <div id="pageTool">
  194. </div>
  195. <!--分页部分 end-->
  196. </div>
  197. </div>
  198. </div>
  199. </div>
  200. <!--数据记录展示-->
  201. <div id="recordShow" style="display: none">
  202. <table class="layui-table">
  203. <colgroup>
  204. <col width="20px">
  205. <col width="20px">
  206. <col>
  207. <col>
  208. <col>
  209. <col>
  210. </colgroup>
  211. <thead>
  212. <tr>
  213. <th>温度</th>
  214. <th>湿度</th>
  215. <th>GPS</th>
  216. <th>操作人</th>
  217. <th>录入时间</th>
  218. <th>操作</th>
  219. </tr>
  220. </thead>
  221. <tbody id="recordTableBody"></tbody>
  222. </table>
  223. </div>
  224. </div>
  225. </body>
  226. <script>
  227. let uploadInst
  228. //获取GET
  229. function getPar(par) {
  230. //获取当前URL
  231. var local_url = document.location.href;
  232. //获取要取得的get参数位置
  233. var get = local_url.indexOf(par + "=")
  234. ;
  235. if (get == -1) {
  236. return false;
  237. }
  238. //截取字符串
  239. //截取字符串
  240. var get_par = local_url.slice(par.length + get + 1);
  241. //判断截取后的字符串是否还有其他get参数
  242. var nextPar = get_par.indexOf("&")
  243. ;
  244. if (nextPar != -1) {
  245. get_par = get_par.slice(0, nextPar);
  246. }
  247. return get_par;
  248. }
  249. function ChangeDiv(e) {
  250. // var divs = document.getElementsByClassName("ChangeDiv");
  251. // var len = divs.length;
  252. // for(var i=0;i<len;i++){
  253. // divs[i].style.border = "1px solid #ffffff";
  254. // }
  255. // e.style.border = "1px solid #ed0000";
  256. }
  257. // 今天
  258. function quick_1() {
  259. var myDate = new Date();
  260. y = myDate.getFullYear(); //获取当前年份(2位)
  261. m = myDate.getMonth() + 1; //获取当前月份(0-11,0代表1月)
  262. d = myDate.getDate(); //获取当前日(1-31)
  263. console.log(y + "-" + m + "-" + d)
  264. Time_start = y + "-" + m + "-" + d + " 00:00:00"
  265. Time_end = y + "-" + m + "-" + d + " 23:59:59"
  266. $("#Time_start").val(Time_start)
  267. $("#Time_end").val(Time_end)
  268. get_DeviceSensor_data(0)
  269. }
  270. // 近一周
  271. function quick_2() {
  272. var myDate = new Date();
  273. y = myDate.getFullYear(); //获取当前年份(2位)
  274. m = myDate.getMonth() + 1; //获取当前月份(0-11,0代表1月)
  275. d = myDate.getDate(); //获取当前日(1-31)
  276. console.log(y + "-" + m + "-" + d)
  277. Time_end = y + "-" + m + "-" + d + " 23:59:59"
  278. $("#Time_end").val(Time_end)
  279. myDate = myDate.setDate(myDate.getDay() - 6);
  280. myDate = new Date(myDate);
  281. y = myDate.getFullYear(); //获取当前年份(2位)
  282. m = myDate.getMonth() + 1; //获取当前月份(0-11,0代表1月)
  283. d = myDate.getDate(); //获取当前日(1-31)
  284. Time_start = y + "-" + m + "-" + d + " 00:00:00"
  285. $("#Time_start").val(Time_start)
  286. get_DeviceSensor_data(0)
  287. }
  288. // 近一月
  289. function quick_3() {
  290. var myDate = new Date();
  291. y = myDate.getFullYear(); //获取当前年份(2位)
  292. m = myDate.getMonth() + 1; //获取当前月份(0-11,0代表1月)
  293. d = myDate.getDate(); //获取当前日(1-31)
  294. console.log(y + "-" + m + "-" + d)
  295. Time_end = y + "-" + m + "-" + d + " 23:59:59"
  296. $("#Time_end").val(Time_end)
  297. myDate = myDate.setDate(myDate.getDate() - 30);
  298. myDate = new Date(myDate);
  299. y = myDate.getFullYear(); //获取当前年份(2位)
  300. m = myDate.getMonth() + 1; //获取当前月份(0-11,0代表1月)
  301. d = myDate.getDate(); //获取当前日(1-31)
  302. Time_start = y + "-" + m + "-" + d + " 00:00:00"
  303. $("#Time_start").val(Time_start)
  304. get_DeviceSensor_data(0)
  305. }
  306. // 近一季度
  307. function quick_4() {
  308. var myDate = new Date();
  309. y = myDate.getFullYear(); //获取当前年份(2位)
  310. m = myDate.getMonth() + 1; //获取当前月份(0-11,0代表1月)
  311. d = myDate.getDate(); //获取当前日(1-31)
  312. console.log(y + "-" + m + "-" + d)
  313. Time_end = y + "-" + m + "-" + d + " 23:59:59"
  314. $("#Time_end").val(Time_end)
  315. myDate = myDate.setDate(myDate.getDate() - 30 * 3);
  316. myDate = new Date(myDate);
  317. y = myDate.getFullYear(); //获取当前年份(2位)
  318. m = myDate.getMonth() + 1; //获取当前月份(0-11,0代表1月)
  319. d = myDate.getDate(); //获取当前日(1-31)
  320. Time_start = y + "-" + m + "-" + d + " 00:00:00"
  321. $("#Time_start").val(Time_start)
  322. get_DeviceSensor_data(0)
  323. }
  324. layui.use(['laydate', 'form', 'element'],
  325. function () {
  326. var laydate = layui.laydate;
  327. //执行一个laydate实例
  328. laydate.render({
  329. elem: '#Time_start' //指定元素
  330. , type: 'datetime'
  331. });
  332. //执行一个laydate实例
  333. laydate.render({
  334. elem: '#Time_end' //指定元素
  335. , type: 'datetime'
  336. });
  337. var element = layui.element;
  338. element.length = 30
  339. });
  340. var T_name = ""
  341. var T_sn = ""
  342. var T_class_id = 0
  343. var T_id = 0
  344. var T_sn_T_id = ""
  345. var Time_start = ""
  346. var Time_end = ""
  347. var DeviceSensor_lite = []
  348. var DeviceSensor_data = []
  349. var DeviceSensor_snid_list = ""
  350. /// --------------- 传感器列表
  351. // 页面 加载完成后执行
  352. window.onload = function () {
  353. console.log("页面 加载完成后执行")
  354. quick_1()
  355. get_DeviceSensor_list(0)
  356. }
  357. //获取div中所有的复选框 .value
  358. var checkboxs = document.getElementsByClassName("checkboxxx");
  359. function Checkboxs_All() {
  360. for (var i = 0; i < checkboxs.length; i++) {
  361. checkboxs[i].checked = true
  362. }
  363. }
  364. function Checkboxs_Allno() {
  365. for (var i = 0; i < checkboxs.length; i++) {
  366. checkboxs[i].checked = false
  367. }
  368. }
  369. function Checkboxs_Allto() {
  370. for (var i = 0; i < checkboxs.length; i++) {
  371. if (checkboxs[i].checked) {
  372. checkboxs[i].checked = false
  373. } else {
  374. checkboxs[i].checked = true
  375. }
  376. }
  377. }
  378. function Checkboxs_GetAll() {
  379. DeviceSensor_snid_list = ""
  380. for (var i = 0; i < checkboxs.length; i++) {
  381. if (checkboxs[i].checked) {
  382. DeviceSensor_snid_list = DeviceSensor_snid_list + checkboxs[i].value + "|"
  383. }
  384. }
  385. }
  386. function get_DeviceSensor_list(page) {
  387. T_sn = $("#D_T_sn").val();
  388. T_name = $("#D_Name").val();
  389. T_class_id = $("#Class_1").val();
  390. $.ajax({
  391. type: 'POST',
  392. url: '/Data/Device_Sensor_List',//发送请求
  393. data: {
  394. User_tokey: $.cookie("User_tokey"),
  395. T_sn: T_sn,
  396. T_name: T_name,
  397. T_class_id: parseInt(T_class_id),
  398. page: page,
  399. page_z: 1000,
  400. },
  401. success: function (result) {
  402. console.log(result)
  403. if (result.Code == 200) {
  404. if (page == 0)
  405. $('#DeviceSensor_list').html("")
  406. // $('#DeviceSensor_list_Pages').html("")
  407. // $('#DeviceSensor_list_Pages_x').html("")
  408. DeviceSensor_lite = result.Data.DeviceSensor_lite
  409. if (DeviceSensor_lite.length == 0) {
  410. $('#DeviceSensor_list').html("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px\">没有设备</div>")
  411. return
  412. }
  413. Add_DeviceSensor_list(result.Data.DeviceSensor_lite) // 列表
  414. // Add_DeviceSensor_list_Pages(result.Data.Pages) // 分页
  415. $('#DeviceSensor_list_Pages_x').html(" 传感器 总数:" + result.Data.Num);
  416. if (result.Data.Page_size > result.Data.Page) {
  417. get_DeviceSensor_list(result.Data.Page + 1)
  418. }
  419. } else {
  420. }
  421. }
  422. });
  423. return false
  424. }
  425. //选择所有选择框
  426. let sensors = []
  427. function selectAll() {
  428. sensors = []
  429. $('#DeviceSensor_data > tr > td > input[type="checkbox"]').each((i, e) => {
  430. $(e).prop('checked', true)
  431. })
  432. }
  433. //反选
  434. function reverseSelect() {
  435. sensors = []
  436. $('#DeviceSensor_data > tr > td > input[type="checkbox"]').each((i, e) => {
  437. $(e).prop('checked', !$(e).prop('checked'))
  438. })
  439. }
  440. //全不选
  441. function noSelect() {
  442. sensors = []
  443. $('#DeviceSensor_data > tr > td > input[type="checkbox"]').each((i, e) => {
  444. $(e).prop('checked', false)
  445. })
  446. }
  447. //删除所选择的内容
  448. function deleteSelect() {
  449. //获取选择的行
  450. sensors = []
  451. $('#DeviceSensor_data > tr > td > input[type="checkbox"]').each((i, e) => {
  452. if ($(e).prop('checked')) {
  453. let t = {
  454. t_sn: $(e).attr('data-sn'),
  455. t_id: Number.parseInt($(e).attr('data-id')),
  456. t_t: Number.parseFloat($(e).attr('data-tt')),
  457. t_rh: Number.parseFloat($(e).attr('data-trh')),
  458. t_site: $(e).attr('data-site'),
  459. }
  460. sensors.push(t)
  461. }
  462. })
  463. console.log(sensors)
  464. if (sensors.length == 0) {
  465. layui.layer.msg('没有选中要删除的记录哦!')
  466. return
  467. }
  468. layui.layer.confirm(`是否删除选中${sensors.length}条记录`, {title: '删除记录'}, function (index) {
  469. $.ajax({
  470. type: "POST",
  471. url: '/Data/Device_Sensor_List_Delete',
  472. data: JSON.stringify(sensors),
  473. cookie: $.cookie("User_tokey"),
  474. contentType: 'application/json;charset=utf-8',
  475. success: function (rlt) {
  476. if (rlt.Code == 200) {
  477. layui.layer.msg(`删除${sensors.length}条数据成功!`)
  478. get_DeviceSensor_data(0)
  479. } else {
  480. layui.layer.msg(rlt.Msg)
  481. }
  482. }
  483. })
  484. layui.layer.close(index);
  485. });
  486. }
  487. //删除当前行,当当前行按钮被点击后
  488. function deleteOne(e) {
  489. e = $(e).parent().prevAll()
  490. e = e[e.length - 1]
  491. e = $(e).children()[0]
  492. console.log(e,"==============")
  493. let t = {
  494. t_sn: $(e).attr('data-sn'),
  495. t_id: Number.parseInt($(e).attr('data-id')),
  496. t_t: Number.parseFloat($(e).attr('data-tt')),
  497. t_rh: Number.parseFloat($(e).attr('data-trh')),
  498. t_site: $(e).attr('data-site'),
  499. User_tokey: $.cookie("User_tokey")
  500. }
  501. layui.layer.confirm(`是否删除选中 sn: ${t.t_sn} 1 条记录`, {title: '删除记录'}, function (index) {
  502. $.ajax({
  503. type: "POST",
  504. url: '/Data/Device_Sensor_List_Delete',
  505. data: JSON.stringify([t]),
  506. contentType: 'application/json;charset=utf-8',
  507. success: function (rlt) {
  508. if (rlt.Code == 200) {
  509. layui.layer.msg(`删除1条数据成功!`)
  510. get_DeviceSensor_data(0)
  511. } else {
  512. layui.layer.msg(rlt.Msg)
  513. }
  514. }
  515. })
  516. layui.layer.close(index);
  517. });
  518. }
  519. function Add_DeviceSensor_list(DS_lite) {
  520. for (let i = 0; i < DS_lite.length; i++) {
  521. if (T_id == 0) {
  522. T_id = DS_lite[i].T_id;
  523. T_sn_T_id = DS_lite[i].T_sn;
  524. get_DeviceSensor_data(0)
  525. }
  526. $('#DeviceSensor_list').append("" +
  527. "<div class=\"layui-col ChangeDiv\" onclick=\"ChangeDiv(this);T_id = " + DS_lite[i].T_id + ";T_sn_T_id = '" + DS_lite[i].T_sn + "';\" \n" +
  528. " style=\"border: 1px solid #ffffff;height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;margin-top: 6px;\">\n" +
  529. " <input type=\"checkbox\" name='checkboxxx' class='checkboxxx' value='" + DS_lite[i].T_sn + "," + DS_lite[i].T_id + "' style='float: left;width: 18px;height: 18px;margin-top: 16px;margin-left: 10px;'/>" +
  530. "<img style=\"float: left;width: 50px;margin: 0px 10px\" src=\"/static/images/温湿度传感器-1.png\"\n" +
  531. " height=\"50\"\n" +
  532. " width=\"40\"/>\n" +
  533. " <div style=\"float: left;\">\n" +
  534. " <div style=\"margin-top: 4px;font-size: 14px;height: 24px;\">" + DS_lite[i].T_name + "</div>\n" +
  535. " <div style=\"margin-top: -3px;font-size: 12px\">SN:" + DS_lite[i].T_sn + " [" + DS_lite[i].T_id + "]</div>\n" +
  536. " </div>\n" +
  537. " <div class=\"layui-card-header\"\n" +
  538. " style=\"float: right;padding-left: 0px;padding-top: 6px;color: #1E9FFF\">\n" +
  539. " \n" +
  540. " </div>\n" +
  541. " </div>")
  542. }
  543. }
  544. function get_DeviceSensor_data(page) {
  545. if ($("#Time_start").val().length > 0) {
  546. Time_start = $("#Time_start").val();
  547. } else {
  548. Time_start = ""
  549. }
  550. if ($("#Time_end").val().length > 0) {
  551. Time_end = $("#Time_end").val();
  552. } else {
  553. Time_end = ""
  554. }
  555. Checkboxs_GetAll()
  556. var loading = layer.load(0, {
  557. shade: false,
  558. time: 99 * 1000
  559. });
  560. $.ajax({
  561. type: 'POST',
  562. url: 'Device_Sensor_Data_More',//发送请求
  563. data: {
  564. User_tokey: $.cookie("User_token"),
  565. Time_start: Time_start,
  566. Time_end: Time_end,
  567. T_snid: DeviceSensor_snid_list,
  568. page: page,
  569. page_z: 10,
  570. },
  571. success: function (result) {
  572. console.log(result)
  573. layer.close(loading)
  574. if (result.Code == 200) {
  575. $('#DeviceSensor_data').html("")
  576. $('#DeviceSensor_data_Pages').html("")
  577. $('#DeviceSensor_data_Pages_x').html("")
  578. DeviceSensor_data = result.Data.list
  579. if (DeviceSensor_data.length == 0) {
  580. $('#DeviceSensor_data').html("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px\">没有数据</div>")
  581. return
  582. }
  583. addDeviceSensorData(result.Data.list)
  584. addDeviceSensorDataPage(result.Data)
  585. } else {
  586. }
  587. }
  588. });
  589. return false
  590. }
  591. function f_Device_Sensor_Data_Pu_data(Sn, tap, num, id) {
  592. $.ajax({
  593. type: 'POST',
  594. url: 'Device_Sensor_Data_Pu_data',//发送请求
  595. data: {
  596. Sn: Sn,
  597. tap: tap,
  598. num: num,
  599. id: id,
  600. },
  601. success: function (result) {
  602. if (result.Code != 200) {
  603. layer.msg(result.Msg);
  604. }
  605. }
  606. });
  607. }
  608. function f_Device_Sensor_Data_Del_data(Sn, id) {
  609. $.ajax({
  610. type: 'POST',
  611. url: 'Device_Sensor_Data_Del_data',//发送请求
  612. data: {
  613. Sn: Sn,
  614. id: id,
  615. },
  616. success: function (result) {
  617. if (result.Code != 200) {
  618. layer.msg(result.Msg);
  619. }
  620. get_DeviceSensor_data(0)
  621. }
  622. });
  623. }
  624. function ShowElement(element) {
  625. var oldhtml = element.innerHTML;
  626. var newobj = document.createElement('input');
  627. //创建新的input元素
  628. newobj.type = 'text';
  629. //为新增元素添加类型
  630. console.log(oldhtml)
  631. console.log(element.dataset.th)
  632. console.log(element.dataset.sn)
  633. console.log(element.dataset.id)
  634. newobj.value = oldhtml
  635. newobj.onblur = function () {
  636. console.log(this.value)
  637. element.innerHTML = this.value ? this.value : oldhtml;
  638. if (element.dataset.th == 1) {
  639. f_Device_Sensor_Data_Pu_data(element.dataset.sn, "t_t", this.value, element.dataset.id)
  640. } else {
  641. f_Device_Sensor_Data_Pu_data(element.dataset.sn, "t_rh", this.value, element.dataset.id)
  642. }
  643. //当触发时判断新增元素值是否为空,为空则不修改,并返回原有值
  644. }
  645. element.innerHTML = '';
  646. element.appendChild(newobj);
  647. newobj.focus();
  648. }
  649. //分页添加
  650. function addDeviceSensorDataPage(pageInfo) {
  651. let start, end
  652. start = pageInfo.currentPage - 5 < 1 ? 1 : pageInfo.currentPage - 5
  653. end = pageInfo.currentPage + 5 > pageInfo.totalPage ? pageInfo.totalPage : pageInfo.currentPage + 5
  654. end = end + Math.abs(end - start - 10) > pageInfo.totalPage ? pageInfo.totalPage : end + Math.abs(end - start - 10)
  655. $('#pageTool').html('')
  656. $('#pageTool').append(`<span style="padding: 0 10px;color: #0bace6">共${pageInfo.totalPage}页 / 当前${pageInfo.currentPage}页 共${pageInfo.totalCount}条数据</span>`)
  657. //上一页
  658. if (pageInfo.previousPage) {
  659. $('#pageTool').append(`<button class="layui-btn layui-btn-primary layui-btn-sm" onclick="get_DeviceSensor_data(${pageInfo.currentPage - 1})">上一页</button>`)
  660. } else {
  661. $('#pageTool').append(`<button class="layui-btn layui-btn-disabled layui-btn-primary layui-btn-sm">上一页</button>`)
  662. }
  663. //页码
  664. for (; start <= end; start++) {
  665. if (start == pageInfo.currentPage) {
  666. $('#pageTool').append(`<button class="layui-btn layui-btn-disabled layui-btn-primary layui-btn-sm">${start}</button>`)
  667. } else {
  668. $('#pageTool').append(`<button class="layui-btn layui-btn-primary layui-btn-sm" onclick="get_DeviceSensor_data(${start})">${start}</button>`)
  669. }
  670. }
  671. //下一页
  672. if (pageInfo.nextPage) {
  673. $('#pageTool').append(`<button class="layui-btn layui-btn-primary layui-btn-sm" onclick="get_DeviceSensor_data(${pageInfo.currentPage + 1})">下一页</button>`)
  674. } else {
  675. $('#pageTool').append(`<button class="layui-btn layui-btn-disabled layui-btn-primary layui-btn-sm">下一页</button>`)
  676. }
  677. }
  678. //添加设备数据
  679. function addDeviceSensorData(list) {
  680. let style
  681. for (let v of list) {
  682. if (v.t_t < v.t_tl || v.t_rh < v.t_rhl) {
  683. style = 'style="background-color: #a8f7ff'
  684. }
  685. if (v.t_t > v.t_tu || v.t_rh > v.t_rhu) {
  686. style = 'style="background-color: #ff8585'
  687. }
  688. $('#DeviceSensor_data').append(`
  689. <tr>
  690. <td><input type="checkbox" class="layui-form-checkbox" data-sn="${v.t_sn}" data-id="${v.t_id}" data-tt="${v.t_t}" data-trh="${v.t_rh}" data-site="${v.t_site}" data-createTime="${v.create_time}"/></td>
  691. <td ondblclick="changeData(this)" data-type="t_time">${v.t_time}</td>
  692. <td ondblclick="changeData(this)" data-type="t_t">${v.t_t}</td>
  693. <td ondblclick="changeData(this)" data-type="t_rh">${v.t_rh}</td>
  694. <td ondblclick="changeData(this)" data-type="t_site">${v.t_site}</td>
  695. <td ondblclick="changeData(this)" data-type="create_time">${v.create_time}</td>
  696. <td>
  697. <button class="layui-btn layui-btn-danger layui-btn-sm" onclick="deleteOne(this)">删除</button>
  698. <button class="layui-btn layui-bg-blue layui-btn-sm" onclick="deleteOne(this)">复制添加</button>
  699. </td>
  700. </tr>
  701. `)
  702. /*
  703. <button class="layui-btn layui-btn-normal layui-btn-sm" onclick="showRecord(this)">记录</button>
  704. */
  705. }
  706. }
  707. function showRecord(e) {
  708. e = $(e).parent().prevAll()
  709. e = e[e.length - 1]
  710. e = $(e).children()[0]
  711. console.log(e)
  712. $.ajax({
  713. type: "post",
  714. url: "/Data/Device_Sensor_Record",
  715. data: {
  716. sn: $(e).attr('data-sn'),
  717. tId: $(e).attr('data-id'),
  718. createTime: $(e).attr('data-createTime')
  719. },
  720. success: function (rlt) {
  721. if (rlt.Code === 200) {
  722. if (rlt.Data == null) {
  723. layui.layer.msg("没有数据!")
  724. return
  725. }
  726. for (let v of rlt.Data) {
  727. $('#tableBody').append(`
  728. <tr>
  729. <td>${v.t_t}</td>
  730. <td>${v.t_rh}</td>
  731. <td>${v.t_site}</td>
  732. <td>${v.t_uuid}</tdj>
  733. <td>${v.create_time}</td>
  734. <td>
  735. <button class="layui-btn layui-btn-normal" onclick="">更新</button>
  736. </td>
  737. </tr>
  738. `)
  739. }
  740. layui.layer.open({
  741. type: 1,
  742. area: ['1200px', '800px'],
  743. content: $('#recordShow'),
  744. isOutAnim: true
  745. })
  746. }
  747. }
  748. })
  749. }
  750. //双击表格改变值
  751. function changeData(even) {
  752. let e = $(even).prevAll()
  753. console.log(e)
  754. e = $(e[e.length - 1]).children()[0]
  755. console.log(e)
  756. let t = {
  757. t_sn: $(e).attr('data-sn'),
  758. t_id: Number.parseInt($(e).attr('data-id')),
  759. t_t: Number.parseFloat($(e).attr('data-tt')),
  760. t_rh: Number.parseFloat($(e).attr('data-trh')),
  761. t_site: $(e).attr('data-site'),
  762. }
  763. let type = $(even).attr('data-type')
  764. console.log(t)
  765. let input = $(`<input class="layui-input" type="text" value="${even.innerText}">`)
  766. input[0].onblur = function () {
  767. t["type"] = type
  768. t["value"] = $(this).val()
  769. t["User_tokey"] = $.cookie("User_tokey")
  770. if (t[type] == t.value) {
  771. } else {
  772. $.ajax({
  773. type: "POST",
  774. url: "/Data/Device_Sensor_Update",
  775. data: t,
  776. cookie: $.cookie("User_token"),
  777. success: function (rlt) {
  778. console.log(rlt)
  779. }
  780. })
  781. }
  782. console.log(t)
  783. even.innerHTML = this.value
  784. $(e).attr(`data-${type}`, $(this).val())
  785. }
  786. $(even).html('')
  787. $(even).append(input)
  788. input.focus()
  789. }
  790. //点击上传按钮
  791. layui.use('upload', function () {
  792. let upload = layui.upload;
  793. //执行实例
  794. let uploadInst = upload.render({
  795. elem: '#importData',
  796. url: '/Data/importData' //上传接口
  797. , accept: 'file',
  798. data: {
  799. User_tokey: $.cookie("User_tokey"),
  800. }
  801. , field: 'file'
  802. , done: function (res) {
  803. layui.layer.success(res.Msg)
  804. layui.layer.msg(res.Msg)
  805. // layui.layer.close(index)
  806. }
  807. , error: function () {
  808. //请求异常回调
  809. layui.layer.msg('上传错误!')
  810. }
  811. })
  812. })
  813. //导出数据
  814. function exportData() {
  815. }
  816. function Add_DeviceSensor_data(DS_lite) {
  817. console.log(DS_lite)
  818. for (let i = 0; i < DS_lite.length; i++) {
  819. style_s = ""
  820. if (DS_lite[i].T_t < DS_lite[i].T_Tlower || DS_lite[i].T_rh < DS_lite[i].T_RHlower) {
  821. style_s = " style='background-color: #a8f7ff' "
  822. }
  823. if (DS_lite[i].T_t > DS_lite[i].T_Tupper || DS_lite[i].T_rh > DS_lite[i].T_RHupper) {
  824. style_s = " style='background-color: #ff8585' "
  825. }
  826. $('#DeviceSensor_data').append("" +
  827. "<tr " + style_s + ">\n" +
  828. // " <td>"+DS_lite[i].T_sn+"</td>\n" +
  829. " <td>" + DS_lite[i].T_name + " [" + DS_lite[i].T_id + "]</td>\n" +
  830. " <td ondblclick=\"ShowElement(this)\" data-th=1 data-sn=\"" + DS_lite[i].T_sn + "\" data-id=" + DS_lite[i].T_id + " >" + DS_lite[i].T_t + "</td>\n" +
  831. " <td ondblclick=\"ShowElement(this)\" data-th=2 data-sn=\"" + DS_lite[i].T_sn + "\" data-id=" + DS_lite[i].T_id + " >" + DS_lite[i].T_rh + "</td>\n" +
  832. " <td>" + DS_lite[i].T_tl + "~" + DS_lite[i].T_tu + "</td>\n" +
  833. " <td>" + DS_lite[i].T_rhl + "~" + DS_lite[i].T_rhu + "</td>\n" +
  834. " <td>" + DS_lite[i].T_time + "</td>\n" +
  835. " <td> <span class='layui-btn layui-btn-danger' onclick='f_Device_Sensor_Data_Del_data(\"" + DS_lite[i].T_sn + "\"," + DS_lite[i].ID + ")'>删除</span>" + `<span class='layui-btn layui-btn-normal'>记录</span>` + "</td>\n" +
  836. "</tr>")
  837. }
  838. }
  839. function Add_DeviceSensor_data_Pages(Pages) {
  840. for (let i = 0; i < Pages.length; i++) {
  841. elem = Pages[i]
  842. switch (elem.A) {
  843. case 1:
  844. $('#DeviceSensor_data_Pages').append("<a class=\"prev\" onclick='get_DeviceSensor_data(" + elem.V + ")' >&lt;&lt;</a>\n");
  845. break;
  846. case 2:
  847. $('#DeviceSensor_data_Pages').append("<a class=\"num\" onclick='get_DeviceSensor_data(" + elem.V + ")' >" + elem.V + "</a>\n");
  848. break;
  849. case 3:
  850. $('#DeviceSensor_data_Pages').append("<span class=\"current\">" + elem.V + "</span>\n");
  851. break;
  852. case 4:
  853. $('#DeviceSensor_data_Pages').append("<a class=\"num\" onclick='get_DeviceSensor_data(" + elem.V + ")' >" + elem.V + "</a>\n");
  854. break;
  855. case 5:
  856. $('#DeviceSensor_data_Pages').append("<a class=\"next\" onclick='get_DeviceSensor_data(" + elem.V + ")' >&gt;&gt;</a>\n");
  857. break;
  858. }
  859. }
  860. }
  861. function get_DeviceSensor_Excel() {
  862. if ($("#Time_start").val().length > 0) {
  863. Time_start = $("#Time_start").val();
  864. } else {
  865. Time_start = ""
  866. }
  867. if ($("#Time_end").val().length > 0) {
  868. Time_end = $("#Time_end").val();
  869. } else {
  870. Time_end = ""
  871. }
  872. Checkboxs_GetAll()
  873. var loading = layer.load(0, {
  874. shade: false,
  875. time: 99 * 1000
  876. });
  877. $.ajax({
  878. type: 'POST',
  879. url: 'Device_Sensor_Data_Excel',//发送请求
  880. data: {
  881. User_tokey: $.cookie("User_tokey"),
  882. Time_start: Time_start,
  883. Time_end: Time_end,
  884. T_snid: DeviceSensor_snid_list,
  885. },
  886. success: function (result) {
  887. console.log(result)
  888. layer.close(loading)
  889. if (result.Code != 200) {
  890. layer.msg(result.Msg);
  891. return
  892. }
  893. window.location.href = result.Data;
  894. }
  895. });
  896. return false
  897. }
  898. function F_moban() {
  899. layer.open({
  900. title: '导入模版'
  901. ,content: '1、根据模板格式 导入数据 <a href="/static/20240523140020.xlsx" style="color: #1E9FFF">点击下载模版</a><hr>'+
  902. '2、导入文件名为 SN编号,如 2024xxxxxxxxxx.xlsx <hr>'
  903. });
  904. }
  905. </script>
  906. </html>