template.html 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Template</title>
  8. <link rel="stylesheet" href="./js/layui/css/layui.css">
  9. <link rel="stylesheet" href="./js/layui/css/modules/index.css">
  10. <style>
  11. .all {
  12. padding-top: 10px;
  13. padding-left: 30px;
  14. padding-right: 30px;
  15. }
  16. .c {
  17. float: left;
  18. background-color: #fff;
  19. padding: 10px;
  20. }
  21. .c1 {
  22. margin: 10px;
  23. float: left;
  24. }
  25. .t1 {
  26. /* width: 18%; */
  27. /* margin-right: 10px; */
  28. -webkit-box-sizing:border-box;
  29. -moz-box-sizing:border-box;
  30. -ms-box-sizing:border-box;
  31. box-sizing:border-box
  32. }
  33. .row {
  34. height: 50px;
  35. }
  36. .row2 {
  37. height: 130px;
  38. }
  39. .t2 {
  40. width: 10%;
  41. }
  42. .view {
  43. /* width: 79%; */
  44. }
  45. #timeType {
  46. float: left;
  47. width: 10%;
  48. }
  49. #time1 {
  50. float: left;
  51. width: 10%;
  52. }
  53. .btn {
  54. float: left;
  55. width: 10%;
  56. }
  57. .label {
  58. height: 50px;
  59. line-height: 32px;
  60. }
  61. #column{
  62. width: 100%;
  63. }
  64. </style>
  65. </head>
  66. <body>
  67. <div class="banner">
  68. <!-- <img src="../static/js/layui/css/modules/layer/default/nokiaLogo.png" alt="" width="150px" height="50px"> -->
  69. <div class="logo"></div>
  70. <div class="name">KPI-Analyser</div>
  71. <div class="userinfo">
  72. <!-- <i class="layui-icon layui-icon-username"></i> -->
  73. <span>你好,</span>
  74. <span id="userName"></span>
  75. <span class="logOut" onclick="logOutFun()">退出登录</span>
  76. </div>
  77. </div>
  78. <div class="all layui-row">
  79. <div class=" t1 layui-col-md2 " >
  80. <div class="c" style="width:90%;height: 85vh;overflow: auto;">
  81. <div class="grid-demo grid-demo-bg1">
  82. <button type="button" class="layui-btn layui-btn-sm" onclick="addTemplate()">添加指标模板</button>
  83. <button type="button" class="layui-btn layui-btn-sm layui-btn-danger" onclick="deleteTemplate()">删除指标模板</button>
  84. <button type="button" class="layui-btn layui-btn-sm layui-btn-normal" onclick="editTemplate()" style="margin-left: 0px;margin-top: 10px;">修改指标模板</button>
  85. <div id="allArea"></div>
  86. <div id="allMetrics"></div>
  87. <div id="indicatorTemplate"></div>
  88. <div id="add-template" style="display: none;">
  89. <form class="layui-form" action="">
  90. <div class="layui-form-item" style="margin-top: 20px">
  91. <label class="layui-form-label">模板名称</label>
  92. <div class="layui-input-block" style="width: 400px">
  93. <input id="templateName" type="text" name="templateName" required lay-verify="required"
  94. placeholder="请输入模板名称" autocomplete="off" class="layui-input">
  95. </div>
  96. </div>
  97. </form>
  98. <div id="allIndicator"></div>
  99. </div>
  100. </div>
  101. </div>
  102. </div>
  103. <!-- <div class="c t2">
  104. <form class="layui-form" action="">
  105. <div class="column" id="searchType">
  106. <input type="radio" name="where" value="eci" title="按eci查询" lay-filter="where" checked>
  107. <input type="radio" name="where" value="all" title="全网选择" lay-filter="where">
  108. </div>
  109. <textarea id="condition" cols="14" rows="19"
  110. style="border-width:1px;border-style: solid;border-color: #eee;"></textarea>
  111. </form>
  112. </div> -->
  113. <div class="c view layui-col-md10">
  114. <div class="grid-demo">
  115. <div class="row layui-form row2">
  116. <div style="width:100%;float: left;">
  117. <div class="c1 label"> 粒度:</div>
  118. <div class="timeTypeDiv c1" style="width: 10%;">
  119. <select name="timeType" id="timeType" onchange="handleChange(this)">
  120. <option value="QUATER">15分钟</option>
  121. <option value="HOUR">小时</option>
  122. <option value="DAY">天</option>
  123. <!--<option value="week">星期</option>-->
  124. <!--<option value="month">月</option>-->
  125. </select>
  126. </div>
  127. <div class="c1 label" style="margin-left: 120px;">时间:</div>
  128. <input type="text" class="layui-input c1" style="width: 300px;" id="time1">
  129. <button class="layui-btn btn c1" style="margin-left: 20px;" onclick="search()">查询</button>
  130. <!-- <button class="layui-btn btn c1" style="margin-left: 20px;" onclick="conditionSearch()">条件查询</button>-->
  131. </div>
  132. </br>
  133. <div style="width:100%;float: left;">
  134. <div class="column" id="searchType" style="width:auto;float: left;">
  135. <input type="radio" name="where" value="AREA" title="按地市查询" lay-filter="where" checked>
  136. <input type="radio" name="where" value="ECI" title="按eci查询" lay-filter="where" >
  137. </div>
  138. <div style="width:70%;float: left;">
  139. <input id="condition" class="layui-input" placeholder="如多个eci查询请用英文逗号隔开"
  140. style="border-width:1px;border-style: solid;border-color: #eee;"></input>
  141. </div>
  142. </div>
  143. </div>
  144. <div>
  145. <table id="demo" lay-filter="test" style="width: 200px;"></table>
  146. </div>
  147. </div>
  148. </div>
  149. </div>
  150. <script src="./js/jquery-3.5.1.min.js"></script>
  151. <script src="./js/layui/layui.js"></script>
  152. <script>
  153. const host = window.location.host
  154. const username = window.sessionStorage.getItem('userName')
  155. const socket = new WebSocket(`ws://${host}/ws?username=${username}`);
  156. socket.onopen = (event) => {
  157. console.log(event)
  158. }
  159. socket.onclose = (event) => {
  160. console.log(event)
  161. logout()
  162. }
  163. socket.onerror = (event) => {
  164. console.log(event)
  165. logout()
  166. }
  167. const logout = () => {
  168. alert('websocket连接异常,请重新登录')
  169. setTimeout(() => window.location.href = '/login', 1000)
  170. }
  171. var dataA;
  172. var layer;
  173. var tree;
  174. var table;
  175. layui.use(['layer', 'tree', 'form', 'laydate', 'table'], function () {
  176. tree = layui.tree;
  177. layer = layui.layer;
  178. table = layui.table;
  179. var form = layui.form, laydate = layui.laydate;
  180. // layer.msg('Hello Zhou')
  181. table.render({
  182. elem: '#demo',
  183. height: 480,
  184. // url: 'https://www.layui.com/demo/table/user/' , //数据接口
  185. page: true, //开启分页
  186. toolbar: true,
  187. defaultToolbar: [{
  188. title: '导出' //标题
  189. ,
  190. layEvent: 'export' //事件名,用于 toolbar 事件中使用
  191. ,
  192. icon: 'layui-icon-export' //图标类名
  193. }],
  194. limit: 50,
  195. limits: [50, 200, 500],
  196. cols: [],
  197. data: []
  198. });
  199. //工具条事件
  200. table.on('toolbar(test)', function (obj) { //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
  201. var data = obj.data; //获得当前行数据
  202. var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
  203. if (layEvent === 'export') {
  204. // layer.alert('Hi,头部工具栏扩展的右侧图标。');
  205. var tableData = table.cache['demo']
  206. obj.config.title = "地市指标"
  207. table.exportFile(obj.config.id, dataA, 'csv')
  208. }
  209. });
  210. let dateArray = '';
  211. let timeType = $('#timeType').val()
  212. console.log('timeType: ', timeType);
  213. let date = new Date();
  214. if(timeType == 'QUATER'){
  215. dateArray= formatDate(date) + ' ' + '00:00:00' + ' - ' + formatDate(date) + ' ' + '00:15:00';
  216. console.log('dateArray: ', dateArray);
  217. }
  218. if(timeType == 'HOUR'){
  219. console.log('xiaoshi')
  220. // dateArray= formatDate(date) + ' ' + '00:00:00' + ' - ' + formatDate(date) + ' ' + '00:15:00';
  221. // console.log('dateArray: ', dateArray);
  222. }
  223. laydate.render({
  224. elem: '#time1',
  225. type: 'datetime',
  226. range: true,
  227. value: dateArray,
  228. ready: function(date){
  229. console.log(date); //得到初始的日期时间对象:{year: 2017, month: 8, date: 18, hours: 0, minutes: 0, seconds: 0}
  230. }
  231. });
  232. initTreeCity(tree)
  233. initTreeIndicator(tree)
  234. initAllIndicator(tree)
  235. initTreeIndicatorTemplate(tree)
  236. // console.log(window.sessionStorage.getItem('userName'))
  237. $("#userName").text(window.sessionStorage.getItem('userName'))
  238. })
  239. function handleChange(){
  240. console.log('5555')
  241. console.log($('#timeType').val())
  242. let timeType = $('#timeType').val()
  243. console.log('timeType: ', timeType);
  244. let date = new Date();
  245. if(timeType == 'QUATER'){
  246. dateArray= formatDate(date) + ' ' + '00:00:00' + ' - ' + formatDate(date) + ' ' + '00:15:00';
  247. console.log('dateArray: ', dateArray);
  248. }
  249. if(timeType == 'HOUR'){
  250. console.log('xiaoshi')
  251. dateArray= formatDate(date) + ' ' + '00:00:00' + ' - ' + formatDate(date) + ' ' + '01:00:00';
  252. console.log('dateArray: ', dateArray);
  253. }
  254. if(timeType == 'DAY'){
  255. console.log('xiaoshi')
  256. dateArray= formatDate(date) + ' ' + '00:00:00' + ' - ' + formatDate(date) + ' ' + '23:59:59';
  257. console.log('dateArray: ', dateArray);
  258. }
  259. }
  260. // $('#timeType').first().change(function(){
  261. // handleChange()
  262. // })
  263. // $(document).on('change','#timeType',function(){
  264. // console.log('55556666')
  265. // handleChange()
  266. // })
  267. $('#timeType').on('change',function(){
  268. console.log('change: ', change);
  269. handleChange()
  270. });
  271. function formatDate (date) {
  272. var y = date.getFullYear();
  273. var m = date.getMonth() + 1;
  274. m = m < 10 ? '0' + m : m;
  275. var d = date.getDate();
  276. d = d < 10 ? ('0' + d) : d;
  277. return y + '-' + m + '-' + d;
  278. };
  279. var treeCity;
  280. function initTreeCity(tree) {
  281. $.ajax({
  282. type: "POST",
  283. // url: '/api/json/citys.json',
  284. url: '/api/initTreeCitys',
  285. success: function (r) {
  286. if (r?.success) {
  287. treeCity = tree.render({
  288. elem: '#allArea',
  289. showCheckbox: true,
  290. accordion: true,
  291. id: 'Id1',
  292. data: r?.data
  293. });
  294. return
  295. }
  296. alert(r?.message ?? '发生错误了');
  297. }
  298. });
  299. }
  300. var treeIn;
  301. // 渲染指标模板
  302. function initTreeIndicatorTemplate(tree) {
  303. $.ajax({
  304. type: "POST",
  305. url: '/api/initTreeIndicatorTemplate',
  306. success: function (r) {
  307. if (r?.success) {
  308. treeIn = tree.render({
  309. elem: '#indicatorTemplate',
  310. showCheckbox: true,
  311. accordion: true,
  312. id: 'Id3',
  313. // edit: ['update'],
  314. data: r?.data,
  315. // customOperate: true,
  316. // operate:function(obj){
  317. // console.log('obj: ', obj);
  318. // $('.layui-tree-editInput').remove();
  319. // if(obj.type == "update"){
  320. // // addTemplate()
  321. // }
  322. // },
  323. oncheck: function(obj){
  324. // console.log(obj);
  325. if(obj.checked) {
  326. // console.log('tree.getChecked("Id4"): ', tree.getChecked('Id4'));
  327. tree.getChecked('Id4').length = 0
  328. tree.setChecked('Id4', [])
  329. tree.reload('Id4', {
  330. //新的参数
  331. });
  332. // console.log(' ----++++ ', tree.getChecked('Id4'));
  333. }
  334. }
  335. });
  336. return
  337. }
  338. alert(r?.message ?? '发生错误了');
  339. }
  340. });
  341. }
  342. // 全部指标
  343. function initAllIndicator(tree) {
  344. $.ajax({
  345. type: "POST",
  346. url: '/api/allIndicator',
  347. success: function (r) {
  348. if (r?.success) {
  349. treeIn = tree.render({
  350. elem: '#allMetrics',
  351. showCheckbox: true,
  352. accordion: true,
  353. id: 'Id4',
  354. data: r?.data,
  355. oncheck: function(obj){
  356. // console.log(obj);
  357. if(obj.checked) {
  358. // console.log('tree.getChecked("Id3"): ', tree.getChecked('Id3'));
  359. tree.getChecked('Id3').length = 0
  360. tree.setChecked('Id3', [])
  361. tree.reload('Id3', {
  362. //新的参数
  363. });
  364. // console.log(' ---- ', tree.getChecked('Id3'));
  365. }
  366. }
  367. });
  368. return
  369. }
  370. alert(r?.message ?? '发生错误了');
  371. }
  372. });
  373. }
  374. function initTreeIndicator(tree) {
  375. $.ajax({
  376. type: "POST",
  377. url: '/api/initTreeIndicator',
  378. success: function (r) {
  379. if (r?.success) {
  380. treeIn = tree.render({
  381. elem: '#allIndicator',
  382. showCheckbox: true,
  383. accordion: true,
  384. id: 'Id2',
  385. data: r?.data,
  386. });
  387. return
  388. }
  389. alert(r?.message ?? '发生错误了');
  390. }
  391. });
  392. }
  393. function renderTable(condition, searchType, table, citys, quxians, indicators, timeType, startTime, endTime) {
  394. var tishi = layer.load(1, {
  395. shadeClose: false,
  396. title: '加载中..',
  397. shade: [0.5,'#000'] //0.1透明度的白色背景
  398. });
  399. // setTimeout(()=>{
  400. // layer.close(tishi);
  401. // },5000)
  402. const dataJson = JSON.stringify({
  403. "condition": condition,
  404. "searchType": searchType,
  405. "citys": [...citys],
  406. "quxians": [...quxians],
  407. "indicators": [...indicators],
  408. "timeType": timeType,
  409. "startTime": startTime,
  410. "endTime": endTime
  411. })
  412. $.ajax({
  413. type: "POST",
  414. contentType: "application/json;charset=UTF-8",
  415. url: '/api/renderTable',
  416. data: dataJson,
  417. success: function (r) {
  418. layer.close(tishi);
  419. if (r?.success) {
  420. dataA = r?.data?.datas
  421. table.render({
  422. elem: '#demo',
  423. height: 480,
  424. // url: 'https://www.layui.com/demo/table/user/' , //数据接口
  425. page: true, //开启分页
  426. toolbar: true,
  427. defaultToolbar: [{
  428. title: '提示' //标题
  429. ,
  430. layEvent: 'export' //事件名,用于 toolbar 事件中使用
  431. ,
  432. icon: 'layui-icon-export' //图标类名
  433. }],
  434. limit: 50,
  435. limits: [50, 200, 500],
  436. cols: [
  437. r?.data?.cols ?? []
  438. ],
  439. data: r?.data?.datas ?? []
  440. });
  441. return
  442. }
  443. alert(r?.message ?? '发生错误了');
  444. },
  445. error: function(err){
  446. layer.close(tishi);
  447. }
  448. });
  449. }
  450. function search() {
  451. if ($('#time1').val() === 0) {
  452. alert('填选择时间')
  453. return;
  454. }
  455. if (tree.getChecked('Id3').length === 0 && tree.getChecked('Id4').length === 0) {
  456. alert('请选择指标')
  457. return;
  458. }
  459. let condition = $('#condition').val();
  460. let searchType = $('#searchType').find('input:checked').val()
  461. if (searchType === 'ECI' && $('#condition').val().length === 0) {
  462. alert('请填写eci')
  463. return;
  464. }
  465. if (searchType === 'AREA' && tree.getChecked('Id1').length === 0) {
  466. alert('请选择地市')
  467. return;
  468. }
  469. let checkData1 = tree?.getChecked('Id1')?.[0]?.children;
  470. let quxians = new Set()
  471. let citys = new Set()
  472. if (checkData1) {
  473. checkData1.forEach(eee => {
  474. citys.add(eee.title)
  475. eee?.children?.forEach(ee => {
  476. quxians.add(ee.title)
  477. })
  478. });
  479. }
  480. // console.log('0000000', tree.getChecked('Id4')[0]);
  481. let checkData2 ;
  482. console.log('3333 ', tree.getChecked('Id3')[0]?.children);
  483. console.log('4444 ', tree.getChecked('Id4')[0]?.children);
  484. if(tree.getChecked('Id3')[0]?.children){
  485. checkData2= tree.getChecked('Id3')[0].children ;
  486. }
  487. if(tree.getChecked('Id4')[0]?.children){
  488. checkData2= tree.getChecked('Id4')[0].children ;
  489. }
  490. const indicators = new Set();
  491. checkData2.forEach(eee => {
  492. eee.children.forEach(ee => {
  493. indicators.add(ee.id)
  494. })
  495. });
  496. let timeType = $('#timeType').val()
  497. let sdate = $('#time1').val()
  498. const [startTime, endTime] = sdate.split(' - ')
  499. renderTable(condition, searchType, table, citys, quxians, indicators, timeType, startTime, endTime)
  500. return false;
  501. }
  502. // 添加指标模板
  503. function addTemplate() {
  504. layer.open({
  505. type: 1,
  506. title:"添加指标模板",
  507. content: $("#add-template"),
  508. area: ['600px', '600px'],
  509. btn: ['确定'],
  510. shadeClose: true,
  511. yes: function(index, layero){
  512. const templateName = $('#templateName').val()
  513. if (!templateName || templateName.length <= 0) {
  514. alert('请输入模板名称!')
  515. return
  516. }
  517. const checkedData = tree?.getChecked('Id2')?.[0]?.children
  518. if (!checkedData || checkedData.length <= 0) {
  519. alert('请选择指标!')
  520. return
  521. }
  522. const indicators = new Set()
  523. checkedData.forEach(eee => {
  524. eee.children.forEach(ee => {
  525. indicators.add(ee.id)
  526. })
  527. });
  528. const dataJson = JSON.stringify({
  529. "templateName": templateName,
  530. "indicators": [...indicators],
  531. })
  532. $.ajax({
  533. type: "POST",
  534. contentType: "application/json;charset=UTF-8",
  535. url: '/api/addTemplate',
  536. data: dataJson,
  537. success: function (r) {
  538. if (r?.success) {
  539. initTreeIndicatorTemplate(tree)
  540. layer.msg('添加成功')
  541. layer.close(index)
  542. return
  543. }
  544. alert(r?.message ?? '发生错误了');
  545. }
  546. });
  547. },
  548. });
  549. }
  550. // 修改指标模板
  551. var templateId;
  552. function editTemplate() {
  553. console.log('xiugai')
  554. const checkedData = tree?.getChecked('Id3')?.[0]?.children
  555. console.log('checkedData: ', checkedData);
  556. if(!checkedData || checkedData.length <= 0){
  557. alert('请选择要修改的指标模板!')
  558. return
  559. }else if(checkedData.length > 1){
  560. alert('请选择一个要修改的指标模板!')
  561. return
  562. }else{
  563. layer.open({
  564. type: 1,
  565. title:"修改指标模板",
  566. content: $("#add-template"),
  567. area: ['600px', '600px'],
  568. btn: ['确定'],
  569. shadeClose: true,
  570. success: function(layero, index){
  571. console.log(layero, index);
  572. },
  573. yes: function(index, layero){
  574. const templateName = $('#templateName').val()
  575. if (!templateName || templateName.length <= 0) {
  576. alert('请输入模板名称!')
  577. return
  578. }
  579. const checkedData = tree?.getChecked('Id2')?.[0]?.children
  580. if (!checkedData || checkedData.length <= 0) {
  581. alert('请选择指标!')
  582. return
  583. }
  584. const indicators = new Set()
  585. checkedData.forEach(eee => {
  586. eee.children.forEach(ee => {
  587. indicators.add(ee.id)
  588. })
  589. });
  590. const dataJson = JSON.stringify({
  591. "id": templateId,
  592. "templateName": templateName,
  593. "indicators": [...indicators],
  594. })
  595. $.ajax({
  596. type: "POST",
  597. contentType: "application/json;charset=UTF-8",
  598. url: '/api/updateTemplate',
  599. data: dataJson,
  600. success: function (r) {
  601. if (r?.success) {
  602. initTreeIndicatorTemplate(tree)
  603. layer.msg('添加成功')
  604. layer.close(index)
  605. return
  606. }
  607. alert(r?.message ?? '发生错误了');
  608. }
  609. });
  610. },
  611. });
  612. }
  613. }
  614. // 删除指标模板
  615. function deleteTemplate() {
  616. const checkedData = tree?.getChecked('Id3')?.[0]?.children
  617. if (!checkedData || checkedData.length <= 0) {
  618. alert('请选择要删除的指标模板!')
  619. return
  620. }
  621. const ids = new Set()
  622. checkedData.forEach(t => {
  623. ids.add(t.id)
  624. });
  625. const dataJson = JSON.stringify({
  626. "ids": [...ids],
  627. })
  628. layer.confirm('确认删除?', {icon: 3, title:'删除模板'}, function(index){
  629. $.ajax({
  630. type: "POST",
  631. contentType: "application/json;charset=UTF-8",
  632. url: '/api/deleteTemplate',
  633. // async: false,
  634. data: dataJson,
  635. success: function (r) {
  636. if (r?.success) {
  637. initTreeIndicatorTemplate(tree)
  638. layer.msg('删除成功')
  639. layer.close(index)
  640. return
  641. }
  642. alert(r?.message ?? '发生错误了')
  643. }
  644. });
  645. });
  646. }
  647. // 获取登录用户信息
  648. // 退出登录
  649. function logOutFun() {
  650. $.ajax({
  651. type: "POST",
  652. // url: '/api/json/citys.json',
  653. url: '/api/logout',
  654. success: function (r) {
  655. window.sessionStorage.clear()
  656. layer.msg('退出登录成功');
  657. setTimeout(() => window.location.href = '/login', 1000)
  658. }
  659. });
  660. }
  661. //
  662. $(document).ready(function(){
  663. setTimeout(()=>{
  664. $(".layui-tree-txt").mouseenter(function(){
  665. // console.log('this',this)
  666. $(this).attr("title",$(this).text());
  667. // console.log('this.text(): ', $(this).text());
  668. });
  669. },1000)
  670. });
  671. window.onbeforeunload=function(e){
  672. if (window.sessionStorage.getItem('userName')) {
  673. logOutFun()
  674. }
  675. }
  676. // window.addEventListener('unload',logOutFun());
  677. </script>
  678. </body>
  679. </html>