Device_Sensor-.html 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581
  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="https://osscold.baozhida.cn/favicon.ico">
  10. <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
  11. <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
  12. <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
  13. <link rel="stylesheet" href="https://osscold.baozhida.cn/layui/css/layui.css">
  14. <script type="text/javascript" src="https://osscold.baozhida.cn/layui/layui.js" charset="utf-8"></script>
  15. <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
  16. <script src="https://cdn.staticfile.org/jquery/3.4.0/jquery.min.js"></script>
  17. <script src="https://cdn.staticfile.org/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
  18. <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
  19. <!--[if lt IE 9]>
  20. <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
  21. <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
  22. <![endif]--></head>
  23. <body>
  24. <div class="layui-fluid">
  25. <div class="layui-row" id="tab_2">
  26. <div class="layui-row">
  27. <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
  28. <legend >传感器参数 {{if gt $.DeviceSensorParameter_T_SendState_0 0 }} <span style="background-color: #dedede;"> 上次设置的参数 还没有生效,再次提交会替换上次的数据!</span> {{end}}</legend>
  29. </fieldset>
  30. </div>
  31. <div class="layui-row">
  32. <div class="layui-col-md7" style="margin-bottom: 30px">
  33. <div style="{{if gt $.DeviceSensorParameter_T_SendState_0 0 }} background-color: #dedede; {{end}}">
  34. <form class="layui-form" action="" lay-filter="example">
  35. <div class="layui-form-item">
  36. <div class="layui-inline">
  37. <label class="layui-form-label">设备名称</label>
  38. <div class="layui-input-inline">
  39. <input type="text" id="S_devName layui-disabled" value="{{.Device.T_devName}}" name="S_devName" autocomplete="off"
  40. class="layui-input layui-disabled">
  41. </div>
  42. <div class="layui-input-inline">
  43. <input class="layui-input layui-disabled" value="{{.Device.T_sn}}" type="text" id="S_sn" name="S_sn"
  44. autocomplete="off">
  45. </div>
  46. </div>
  47. </div>
  48. <div class="layui-form-item">
  49. <div class="layui-inline">
  50. <label class="layui-form-label">传感器名称</label>
  51. <div class="layui-input-inline">
  52. <input type="text" id="S_name" value="{{.DeviceSensor.T_name}}" name="S_name" autocomplete="off" class="layui-input">
  53. </div>
  54. <div class="layui-input-inline" style="width: 50px">
  55. <input class="layui-input layui-disabled" type="text" value="{{.DeviceSensor.T_id}}" id="S_id" name="S_id"
  56. autocomplete="off"
  57. class="layui-input">
  58. </div>
  59. </div>
  60. </div>
  61. <div class="layui-form-item">
  62. <div class="layui-inline">
  63. <label class="layui-form-label">温度范围 ℃</label>
  64. <div class="layui-input-inline" style="width: 100px;">
  65. <input type="text" name="S_Tlower" autocomplete="off" value="{{.DeviceSensor.T_Tlower}}" class="layui-input">
  66. </div>
  67. <div class="layui-form-mid">-</div>
  68. <div class="layui-input-inline" style="width: 100px;">
  69. <input type="text" name="S_Tupper" autocomplete="off" value="{{.DeviceSensor.T_Tupper}}" class="layui-input">
  70. </div>
  71. </div>
  72. </div>
  73. <div class="layui-form-item">
  74. <div class="layui-inline">
  75. <label class="layui-form-label">湿度范围 %</label>
  76. <div class="layui-input-inline" style="width: 100px;">
  77. <input type="text" name="S_RHlower" autocomplete="off" value="{{.DeviceSensor.T_RHlower}}" class="layui-input">
  78. </div>
  79. <div class="layui-form-mid">-</div>
  80. <div class="layui-input-inline" style="width: 100px;">
  81. <input type="text" name="S_RHupper" autocomplete="off" value="{{.DeviceSensor.T_RHupper}}" class="layui-input">
  82. </div>
  83. </div>
  84. </div>
  85. <div class="layui-form-item">
  86. <label class="layui-form-label" style="width: 60px;">启用</label>
  87. <div class="layui-input-block">
  88. <input type="checkbox" id="S_en" name="S_en" lay-filter="switchTest" lay-skin="switch"
  89. lay-text="开|关">
  90. <div class="layui-unselect layui-form-switch" lay-skin="_switch"><em>关</em><i></i></div>
  91. </div>
  92. </div>
  93. <div class="layui-form-item">
  94. <label class="layui-form-label" style="width: 60px;">空库</label>
  95. <div class="layui-input-block">
  96. <input type="checkbox" id="S_free" name="S_free" lay-filter="switchTest" lay-skin="switch"
  97. lay-text="开|关">
  98. <div class="layui-unselect layui-form-switch" lay-skin="_switch"><em>关</em><i></i></div>
  99. </div>
  100. </div>
  101. <div class="layui-form-item" style="text-align: center;margin-top: 20px">
  102. <button id="Pu_DeviceParameter_Sensor_id" type="submit" class="layui-btn layui-btn-normal" lay-submit="" lay-filter="add">传感器配置{{if gt $.DeviceSensorParameter_T_SendState_0 0 }} (替换上次参数) {{end}}</button>
  103. </div>
  104. </form>
  105. </div>
  106. <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
  107. <legend>实时数据显示排序</legend>
  108. </fieldset>
  109. <div class="layui-form-item">
  110. <div class="layui-inline">
  111. <label class="layui-form-label" style="width: 170px;">实时数据显示排序:</label>
  112. <div class="layui-input-inline" style="width: 100px;">
  113. <input type="text" value="{{.DeviceSensor.T_sort}}" id="T_sort" autocomplete="off" class="layui-input">
  114. </div>
  115. <div class="layui-form-mid">(越小越靠前,可以负数)</div>
  116. <div class="layui-input-inline" style="width: 100px;">
  117. <button class="layui-btn layui-btn-normal" onclick="UpDeviceSensor_Tsort()" >设置排序</button>
  118. </div>
  119. </div>
  120. </div>
  121. <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
  122. <legend>屏蔽数据展示</legend>
  123. </fieldset>
  124. <form class="layui-form" action="" lay-filter="example">
  125. <div class="layui-inline" style="font-size: 13px">
  126. <label class="layui-form-label" style="width: 170px;">是否屏蔽数据展示</label>
  127. <div class="layui-input-block">
  128. <input type="radio" name="T_datashow" value="0" title="屏蔽数据展示"
  129. {{if eq $.DeviceSensor.T_datashow 0 }}
  130. checked=""
  131. {{end}}
  132. ><div class="layui-unselect layui-form-radio"><i class="layui-anim layui-icon"></i><div>弃用设备</div></div>
  133. <input type="radio" name="T_datashow" value="1" title="正常数据展示"
  134. {{if eq $.DeviceSensor.T_datashow 1 }}
  135. checked=""
  136. {{end}}
  137. ><div class="layui-unselect layui-form-radio"><i class="layui-anim layui-icon"></i><div>开启设备</div></div>
  138. </div>
  139. </div>
  140. <div class="layui-input-inline" style="text-align: center;margin-top: 20px">
  141. <button type="submit" class="layui-btn layui-btn-normal" lay-submit="" lay-filter="T_datashow">配置参数</button>
  142. </div>
  143. </form>
  144. <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
  145. <legend>数据视图订阅</legend>
  146. </fieldset>
  147. <div class="layui-form-item">
  148. <div class="layui-inline">
  149. <label class="layui-form-label" style="width: 100px;">3D视图ID:</label>
  150. <div class="layui-input-inline" style="width: 200px;">
  151. <input type="text" value="{{.DeviceSensor.T_3dview}}" id="T_3dview" autocomplete="off" class="layui-input">
  152. </div>
  153. <div class="layui-input-inline" style="width: 100px;">
  154. <button class="layui-btn layui-btn-normal" onclick="UpDeviceSensor_T3dview()" >设置</button>
  155. </div>
  156. </div>
  157. </div>
  158. <fieldset class="layui-elem-field layui-field-title" style="margin-top: 10px;">
  159. <legend>设备操作</legend>
  160. </fieldset>
  161. <button style="margin-left: 80px;background-color: #e09d00;" class="layui-btn layui-btn" onclick="f_Device_Parameter_Del()" >删除此设备(从数据库删除)</button>
  162. <button style="background-color: #ff3b00;" class="layui-btn layui-btn" onclick="f_Device_Parameter_Del_Device()" >删除此设备(从设备删除)</button>
  163. </div>
  164. <div class="layui-col-md5">
  165. <fieldset class="layui-elem-field layui-field-title" style="margin-top: -10px;">
  166. <legend>最近修改记录(
  167. <span style="background-color:#dedede;margin: 0px 10px;">灰色:等待执行</span>
  168. <span style="background-color:#00FF00;margin: 0px 10px;">绿色:修改成功</span>
  169. <span style="background-color:#ffa5a5;margin: 0px 10px;">红色:修改失败</span>
  170. <span style="background-color:#d7b3f5;margin: 0px 10px;">紫色:覆盖参数</span>
  171. )</legend>
  172. </fieldset>
  173. {{range $index, $elem := .DeviceSensorParameter_lite}}
  174. <div class="layui-inline" style="margin-left: 40px;margin-bottom: 20px;padding: 10px;{{if eq $elem.T_SendState 0 }}background-color:#dedede; {{end}} {{if eq $elem.T_SendState 1 }}background-color:#00FF00; {{end}} {{if eq $elem.T_SendState 2 }}background-color:#ffa5a5; {{end}} {{if eq $elem.T_SendState 3 }}background-color:#d7b3f5; {{end}}">
  175. <span style="margin-right: 20px">操作人UUID:{{$elem.T_uuid}}</span>
  176. <span style="margin-right: 20px">设备名称:{{$elem.T_name}}</span>
  177. <span style="margin-right: 20px">温度下限:{{$elem.T_Tlower}}</span>
  178. <span style="margin-right: 20px">温度上限:{{$elem.T_Tupper}}</span>
  179. <span style="margin-right: 20px">湿度下限:{{$elem.T_RHlower}}</span>
  180. <span style="margin-right: 20px">湿度上限:{{$elem.T_RHupper}}</span>
  181. <span style="margin-right: 20px">启用:{{$elem.T_en}}</span>
  182. <span style="margin-right: 20px">空库:{{$elem.T_free}}</span>
  183. <span style="margin-right: 20px">修改时间:{{$elem.CreateTime}}</span>
  184. </div>
  185. {{end}}
  186. </div>
  187. </div>
  188. </div>
  189. </div>
  190. <script>
  191. //获取url中的参数
  192. function getQueryString(name) {
  193. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  194. var r = window.location.search.substr(1).match(reg);
  195. if (r != null)
  196. return decodeURIComponent(r[2]);
  197. return null;
  198. }
  199. function timestampToTime(timestamp) {
  200. var date = new Date(timestamp * 1000); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
  201. Y = date.getFullYear() + '-';
  202. M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
  203. D = date.getDate() + ' ';
  204. h = date.getHours() + ':';
  205. m = date.getMinutes() + ':';
  206. s = date.getSeconds();
  207. return Y + M + D + h + m + s;
  208. }
  209. $("#tab_1").hide()
  210. $("#tab_2").show()
  211. function tab_1() {
  212. $("#tab_1").show()
  213. $("#tab_2").hide()
  214. }
  215. function tab_2() {
  216. $("#tab_1").hide()
  217. $("#tab_2").show()
  218. }
  219. function f_Read_DeviceSensorParameter() {
  220. $.ajax({
  221. type: 'POST',
  222. url: 'Read_DeviceSensorParameter',//发送请求
  223. data: {
  224. SN:getQueryString("Sn"),
  225. },
  226. success: function(result) {
  227. layer.msg('请求成功!');
  228. }
  229. });
  230. }
  231. function f_Device_Parameter_Del() {
  232. // console.log(getQueryString("Sn"),getQueryString("Id"))
  233. layer.confirm('确认要 删除 当前传感器吗?',
  234. function(index) {
  235. var loading = layer.load(0, {
  236. shade: false,
  237. time: 99*1000
  238. });
  239. $.ajax({
  240. type: 'POST',
  241. url: 'Device_Parameter_Del',//发送请求】
  242. data: {
  243. Sn: getQueryString("Sn"),
  244. Id: getQueryString("Id")
  245. },
  246. success: function (result) {
  247. console.log(result)
  248. layer.close(loading)
  249. //关闭当前frame
  250. var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
  251. parent.layer.close(index); //再执行关闭
  252. parent.location.reload();
  253. // return false;
  254. }
  255. });
  256. });
  257. }
  258. function f_Device_Parameter_Del_Device() {
  259. // console.log(getQueryString("Sn"),getQueryString("Id"))
  260. layer.confirm('确认要 删除 当前传感器吗?',
  261. function(index) {
  262. var loading = layer.load(0, {
  263. shade: false,
  264. time: 99*1000
  265. });
  266. $.ajax({
  267. type: 'POST',
  268. url: 'Device_Parameter_Del_Device',//发送请求】
  269. data: {
  270. Sn: getQueryString("Sn"),
  271. Id: getQueryString("Id")
  272. },
  273. success: function (result) {
  274. console.log(result)
  275. var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
  276. parent.layer.close(index); //再执行关闭
  277. parent.location.reload();
  278. // return false;
  279. }
  280. });
  281. });
  282. }
  283. function UpDeviceSensor_Tsort() {
  284. // console.log(getQueryString("Sn"),getQueryString("Id"))
  285. //
  286. $.ajax({
  287. type: 'POST',
  288. url: '../../Device/UpDeviceSensor_Tsort',//发送请求】
  289. data: {
  290. Sn: getQueryString("Sn"),
  291. Id: getQueryString("Id"),
  292. T_sort: $("#T_sort").val()
  293. },
  294. success: function (result) {
  295. console.log(result)
  296. //关闭当前frame
  297. var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
  298. parent.layer.close(index); //再执行关闭
  299. parent.location.reload();
  300. // return false;
  301. }
  302. });
  303. }
  304. function UpDeviceSensor_T3dview() {
  305. // console.log(getQueryString("Sn"),getQueryString("Id"))
  306. //
  307. $.ajax({
  308. type: 'POST',
  309. url: '../../Device/UpDeviceSensor_T3dview',//发送请求】
  310. data: {
  311. Sn: getQueryString("Sn"),
  312. Id: getQueryString("Id"),
  313. T_3dview: $("#T_3dview").val()
  314. },
  315. success: function (result) {
  316. console.log(result)
  317. //关闭当前frame
  318. var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
  319. parent.layer.close(index); //再执行关闭
  320. parent.location.reload();
  321. // return false;
  322. }
  323. });
  324. }
  325. f_Read_DeviceParameter_is = true
  326. function f_Read_DeviceParameter() {
  327. if(f_Read_DeviceParameter_is){
  328. console.log("Read_DeviceSensorParameter",getQueryString("Sn"))
  329. $.ajax({
  330. type: 'POST',
  331. url: 'Read_DeviceSensorParameter',//发送请求
  332. data: {
  333. SN:getQueryString("Sn"),
  334. },
  335. success: function(result) {
  336. }
  337. });
  338. f_Read_DeviceParameter_is = false
  339. }
  340. }
  341. layui.use(['form', 'layer', "layedit"],
  342. function () {
  343. $ = layui.jquery;
  344. var form = layui.form,
  345. layer = layui.layer;
  346. var layedit = layui.layedit
  347. layedit.set({
  348. uploadImage: {
  349. url: '/UpFile' //接口url
  350. }
  351. });
  352. T_en = false
  353. if ("{{.DeviceSensor.T_en}}" == 1) {
  354. T_en = true
  355. }
  356. T_free = false
  357. if ("{{.DeviceSensor.T_free}}" == 1) {
  358. T_free = true
  359. }
  360. form.val('example', {
  361. "S_en": T_en
  362. , "S_free": T_free
  363. });
  364. //监听提交
  365. form.on('submit(add)',
  366. function (data) {
  367. console.log("=== submit(add) ==");
  368. loading = layer.load(0, {
  369. shade: false,
  370. time: 99 * 1000
  371. });
  372. console.log(data);
  373. S_en = 0
  374. if (data.field.S_en != undefined) {
  375. S_en = 1
  376. }
  377. S_free = 0
  378. if (data.field.S_free != undefined) {
  379. S_free = 1
  380. }
  381. var T_sensor_list = [];
  382. T_sensor_list.push({
  383. })
  384. $.ajax({
  385. type: 'POST',
  386. url: "Pu_DeviceParameter_Sensor",//发送请求】
  387. data: {
  388. T_SN: Sn,
  389. T_id: parseInt(Id),
  390. "T_name": data.field.S_name,
  391. "T_Tlower": parseFloat(data.field.S_Tlower),
  392. "T_Tupper": parseFloat(data.field.S_Tupper),
  393. "T_RHlower": parseFloat(data.field.S_RHlower),
  394. "T_RHupper": parseFloat(data.field.S_RHupper),
  395. "T_en": S_en,
  396. "T_free": S_free
  397. },
  398. success: function (result) {
  399. console.log(result)
  400. if(result.Code == 200){
  401. //关闭当前frame
  402. var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
  403. parent.layer.close(index); //再执行关闭
  404. parent.location.reload();
  405. }else {
  406. layer.msg(result.Msg);
  407. }
  408. // return false;
  409. }
  410. });
  411. return false;
  412. });
  413. {{if eq $.Admin_Power.Power_DeviceSensor_Compensate_e 1}}
  414. form.on('submit(T_datashow)',
  415. function(data) {
  416. console.log("=== submit(T_datashow) ==");
  417. loading = layer.load(0, {
  418. shade: false,
  419. time: 99*1000
  420. });
  421. $.ajax({
  422. type: 'POST',
  423. url: 'UpDeviceSensor_T_datashow',//发送请求
  424. data: {
  425. Sn: Sn,
  426. Id: parseInt(Id),
  427. T_datashow:data.field.T_datashow,
  428. },
  429. success: function(result) {
  430. console.log(result)
  431. layer.close(loading)
  432. if(result.Code != 200){
  433. return
  434. }
  435. layer.msg('配置参数成功!', {
  436. offset: '6px'
  437. });
  438. //关闭当前frame
  439. var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
  440. parent.layer.close(index); //再执行关闭
  441. parent.location.reload();
  442. // return false;
  443. }
  444. });
  445. return false;
  446. });
  447. //监听提交
  448. form.on('submit(O_add)',
  449. function (data) {
  450. console.log("=== submit(add) ==");
  451. loading = layer.load(0, {
  452. shade: false,
  453. time: 99 * 1000
  454. });
  455. var T_sompensate_list = [];
  456. T_sompensate_list.push({
  457. "id": parseInt(Id),
  458. "T": parseFloat(data.field.O_T),
  459. "RH": parseFloat(data.field.O_RH)
  460. })
  461. $.ajax({
  462. type: 'POST',
  463. url: 'Pu_DeviceParameter_Compensate',//发送请求】
  464. data: {
  465. User_tokey: $.cookie('User_tokey'),
  466. SN: Sn,
  467. T_sompensate_list: JSON.stringify(T_sompensate_list)
  468. },
  469. success: function (result) {
  470. console.log(result)
  471. // return false;
  472. }
  473. });
  474. return false;
  475. });
  476. {{end}}
  477. // //监听指定开关
  478. // form.on('switch(switchTest)', function(data){
  479. // layer.msg('开关checked:'+ (this.checked ? 'true' : 'false'), {
  480. // offset: '6px'
  481. // });
  482. // layer.tips('温馨提示:请注意开关状态的文字可以随意定义,而不仅仅是ON|OFF', data.othis)
  483. // });
  484. //表单取值
  485. // layui.$('#LAY-component-form-getval').on('click', function(){
  486. // var data = form.val('example');
  487. // alert(JSON.stringify(data));
  488. // });
  489. var Sn = getQueryString("Sn")
  490. var Id = getQueryString("Id")
  491. $("#T_devName").html(getQueryString("Sn_name"))
  492. });
  493. </script>
  494. </body>
  495. <style>
  496. .tab_show {
  497. background-color: #CCE9FF;
  498. border-radius: 5px;
  499. padding: 4px;
  500. }
  501. </style>
  502. </html>