equip_allot_item.html 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
  7. <link href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet">
  8. <link href="../css/reset.css" rel="stylesheet" />
  9. <link href="../css/mui.min.css" rel="stylesheet" />
  10. <link rel="stylesheet" href="../css/mescroll.min.css">
  11. <link href="../css/common.css" rel="stylesheet" />
  12. <style type="text/css">
  13. /*搜索浮动*/
  14. .searchBox {
  15. position: fixed;
  16. left: 0;
  17. right: 0;
  18. z-index: 222;
  19. padding: 0;
  20. }
  21. .searchBox:before{
  22. position: absolute;
  23. content: '';
  24. background: #21b2e7;
  25. width: 100%;
  26. height: 35%;
  27. }
  28. .searchControl{
  29. width: 91%;
  30. margin: 0 auto;
  31. }
  32. .mui-search{
  33. display: inline-block;
  34. width: 79%;
  35. }
  36. .searchBtn,.mui-search >input,.equipItem{
  37. box-shadow: 1px 2px 3px 1px #cccccc;
  38. }
  39. .searchBtn,.mui-search >input{
  40. background: #fff;
  41. }
  42. .searchBtn{
  43. border-color: #fff;
  44. width: 19%;
  45. }
  46. .equipTitle {
  47. color: #21b2e7;
  48. font-size: 14px;
  49. }
  50. .mui-table-view-cell p {
  51. color: #333;
  52. font-size: 16px;
  53. margin-top: 4px;
  54. }
  55. /*方块形复选框*/
  56. .mui-checkbox input[type=checkbox]:before {
  57. content: '\e413';
  58. }
  59. .mui-checkbox input[type=checkbox]:checked:before {
  60. content: '\e443';
  61. }
  62. .mui-checkbox input[type=checkbox]:before,
  63. .mui-radio input[type=radio]:before {
  64. font-size: 18px;
  65. }
  66. .mui-checkbox.mui-left input[type=checkbox],
  67. .mui-radio.mui-left input[type=radio] {
  68. left: 15px;
  69. }
  70. .mui-checkbox.mui-left label,
  71. .mui-radio.mui-left label {
  72. padding-left: 40px
  73. }
  74. .mui-checkbox {
  75. display: inline-block;
  76. }
  77. .mui-checkbox input[type=checkbox],
  78. .mui-radio input[type=radio] {
  79. top: 10px;
  80. width: 20px;
  81. height: 20px;
  82. }
  83. .mui-navigate-right:after,
  84. .mui-push-right:after {
  85. content: '\e581';
  86. }
  87. .secondary.active .mui-navigate-right:after,
  88. .secondary.active .mui-push-right:after {
  89. content: '\e580';
  90. }
  91. .mui-table-view-cell>a:not(.mui-btn) {
  92. padding: 0;
  93. margin: 0;
  94. }
  95. .secondary>.secondaryDetial {
  96. display: none;
  97. transition: height .35s ease;
  98. }
  99. .secondary.active>.secondaryDetial {
  100. display: block;
  101. }
  102. .mui-table-view-cell {
  103. padding: 0;
  104. }
  105. .secondaryDetial {
  106. padding: 5px 0 0 40px;
  107. background: #eee;
  108. }
  109. .secondaryDetial p {
  110. line-height: 25px;
  111. color: #333;
  112. }
  113. /*input*/
  114. .secondary input {
  115. position: absolute;
  116. display: inline-block;
  117. border: 0;
  118. outline: 0!important;
  119. background-color: transparent;
  120. -webkit-appearance: none;
  121. top: 10px;
  122. width: 20px;
  123. height: 20px;
  124. left: 14px;
  125. }
  126. .secondary input:before {
  127. font-size: 18px;
  128. content: '\e413';
  129. font-family: Muiicons;
  130. font-weight: 400;
  131. line-height: 1;
  132. text-decoration: none;
  133. color: #aaa;
  134. border-radius: 0;
  135. background: 0 0;
  136. -webkit-font-smoothing: antialiased;
  137. }
  138. .secondary input[type=checkbox]:checked:before {
  139. content: '\e443';
  140. color: #007aff;
  141. }
  142. .secondary span {
  143. line-height: 40px;
  144. padding-left: 40px;
  145. }
  146. /*list*/
  147. .mescroll{
  148. position: fixed;
  149. top: 87px;
  150. bottom: 0;
  151. height: auto; /*如设置bottom:50px,则需height:auto才能生效*/
  152. }
  153. </style>
  154. </head>
  155. <body>
  156. <header class="mui-bar mui-bar-nav">
  157. <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
  158. <h1 class="mui-title">分配设备</h1>
  159. <a class="headRightIcon fa fa-cloud-upload mui-pull-right" id="allotBtn">提交</a>
  160. </header>
  161. <div class="mui-content">
  162. <div class="searchBox">
  163. <div class="searchControl">
  164. <div class="mui-input-row mui-search">
  165. <input type="search" id="searchInp" class="mui-input-clear" placeholder="请输入设备ID">
  166. </div>
  167. <button id="searchBtn" class="searchBtn">搜索</button>
  168. </div>
  169. </div>
  170. <div id="scrollPlace" class="mescroll"> <!--id可以改,而"mescroll"的class不能删-->
  171. <ul class="mui-table-view" id="dataList">
  172. <!--<li class="mui-table-view-cell">
  173. <div class="mui-input-row mui-checkbox mui-left">
  174. <label>全选</label>
  175. <input name="checkbox1" id="checkall" type="checkbox">
  176. </div>
  177. </li>
  178. <li class="mui-table-view-cell secondary">
  179. <a class="mui-navigate-right" href="#">
  180. <input type="checkbox" name="checkbox1" checked="checked" class="check" value="3" />
  181. <span>设备imei:444444444444</span>
  182. </a>
  183. <div class="secondaryDetial">
  184. <p>设备名称:无</p>
  185. <p>设备类型:测报灯</p>
  186. <p>设备添加时间:2018/6-23</p>
  187. <p>设备用户:无</p>
  188. </div>
  189. </li>-->
  190. </ul>
  191. </div>
  192. <script src="../js/jquery-2.1.0.js"></script>
  193. <script src="../js/mui.min.js"></script>
  194. <script src="../js/mescroll.min.js" charset="utf-8"></script>
  195. <script src="../js/common.js"></script>
  196. <script type="text/javascript">
  197. var chknum = 0;
  198. var checklen;
  199. var userId;
  200. mui.init()
  201. mui.plusReady(function() {
  202. var self = plus.webview.currentWebview();
  203. console.log(self.userId);
  204. userId = self.userId;
  205. //创建MeScroll对象,内部已默认开启下拉刷新,自动执行up.callback,重置列表数据;
  206. var mescroll = new MeScroll("scrollPlace", {
  207. up: {
  208. callback: getListData, //上拉回调,此处可简写; 相当于 callback: function (page) { getListData(page); }
  209. isBounce: false, //此处禁止ios回弹,解析(务必认真阅读,特别是最后一点): http://www.mescroll.com/qa.html#q10
  210. clearEmptyId: "dataList", //1.下拉刷新时会自动先清空此列表,再加入数据; 2.无任何数据时会在此列表自动提示空
  211. toTop:{ //配置回到顶部按钮
  212. src : "../images/totop.png", //默认滚动到1000px显示,可配置offset修改
  213. offset : 700
  214. },
  215. empty: {
  216. //列表第一页无任何数据时,显示的空提示布局; 需配置warpId才显示
  217. warpId: "dataList", //父布局的id (1.3.5版本支持传入dom元素)
  218. icon: "../images/listNull.png", //图标,默认null,支持网络图
  219. tip: "暂无相关数据~" //提示
  220. },
  221. htmlNodata: '<p class="upwarp-nodata">-- 没有更多内容了 --</p>',
  222. noMoreSize: 5, //如果列表已无数据,可设置列表的总数量要大于5才显示无更多数据;
  223. lazyLoad: {
  224. use: true // 是否开启懒加载,默认false
  225. }
  226. }
  227. });
  228. /*联网加载列表数据 page = {num:1, size:10}; num:当前页 从1开始, size:每页数据条数 */
  229. function getListData(page){
  230. //联网加载数据
  231. getListDataFromNet(page.num, page.size, function(curPageData,totalSize){
  232. //联网成功的回调,隐藏下拉刷新和上拉加载的状态;
  233. //mescroll会根据传的参数,自动判断列表如果无任何数据,则提示空;列表无下一页数据,则提示无更多数据;
  234. //方法二(推荐): 后台接口有返回列表的总数据量 totalSize
  235. mescroll.endBySize(curPageData.length, totalSize); //必传参数(当前页的数据个数, 总数据量)
  236. //设置列表数据,因为配置了emptyClearId,第一页会清空dataList的数据,所以setListData应该写在最后;
  237. setListData(curPageData,page.num);
  238. }, function(){
  239. //联网失败的回调,隐藏下拉刷新和上拉加载的状态;
  240. mescroll.endErr();
  241. mui.toast('数据请求失败');
  242. });
  243. }
  244. /*设置列表数据*/
  245. function setListData(curPageData,pageNum){
  246. var html = '';
  247. var dat = curPageData;
  248. if(pageNum == 1) {
  249. $('.nullData').remove();
  250. $('#dataList').empty();
  251. html = '<li class="mui-table-view-cell"><div class="mui-input-row mui-checkbox mui-left">' +
  252. '<label>全选</label><input name="checkbox1" id="checkall" type="checkbox"></div></li>';
  253. }
  254. for(var i = 0; i < dat.length; i++) {
  255. var checked;
  256. if(dat[i].checked == 1) {
  257. checked = '<input type="checkbox" checked="checked" name="checkbox1"class="check" value="' + dat[i].equipid + '" />';
  258. } else {
  259. checked = '<input type="checkbox" name="checkbox1"class="check" value="' + dat[i].equipid + '" />';
  260. }
  261. var equiptype;
  262. if(dat[i].equiptype) {
  263. equiptype = '测报灯';
  264. } else {
  265. equiptype = '杀虫灯';
  266. }
  267. var equip_user;
  268. if(dat[i].equip_user == 'None' || dat[i].equip_user == '') {
  269. equip_user = '无'
  270. } else {
  271. equip_user = dat[i].equip_user;
  272. }
  273. html += '<li class="mui-table-view-cell secondary"><a class="mui-navigate-right" href="#">' +
  274. checked + '<span>设备ID:' + dat[i].equipid + '</span>' +
  275. '</a><div class="secondaryDetial"><p>设备名称:无</p><p>设备类型:' + equiptype + '</p>' +
  276. '<p>设备添加时间:' + dat[i].equip_add_time + '</p><p>设备用户:' + equip_user + '</p></div></li>';
  277. }
  278. $('#dataList').append(html);
  279. //选中回显
  280. checklen = mui('.check').length;
  281. //判断当前是否全选
  282. chknum = 0;
  283. var checkboxs = mui('.check');
  284. checkboxs.each(function() {
  285. var ele = this;
  286. if(ele.checked == true) {
  287. chknum++;
  288. }
  289. })
  290. console.log('chknum:' + chknum)
  291. if(chknum == checklen) {
  292. document.getElementById('checkall').checked = true;
  293. } else {
  294. document.getElementById('checkall').checked = false;
  295. }
  296. //全选
  297. document.getElementById('checkall').addEventListener('change', function(e) {
  298. var checkboxs = mui('.check');
  299. if(e.target.checked) {
  300. checkboxs.each(function() {
  301. var ele = this;
  302. ele.checked = true
  303. })
  304. chknum = mui('.check').length
  305. } else {
  306. checkboxs.each(function() {
  307. var ele = this;
  308. ele.checked = false
  309. })
  310. chknum = 0
  311. }
  312. console.log(chknum)
  313. })
  314. }
  315. /*联网加载列表数据*/
  316. function getListDataFromNet(pageNum,pageSize,successCallback,errorCallback) {
  317. $.ajax({
  318. type: 'POST',
  319. url: 'http://120.27.222.26/app_equip_allot_list',
  320. timeout : 10000, //超时时间设置,单位毫秒
  321. data:{
  322. 'page': pageNum,
  323. 'userid':userId,
  324. 'f_id': mui('#searchInp')[0].value
  325. },
  326. dataType: 'json',
  327. success: function(data){
  328. console.log(JSON.stringify(data.dat))
  329. successCallback(data.dat,data.nums);
  330. },
  331. error: function(){
  332. errorCallback();
  333. }
  334. });
  335. }
  336. //搜索操作
  337. $("#searchInp").on('keypress',function(e) {
  338. var keycode = e.keyCode;
  339. if(keycode=='13') {
  340. e.preventDefault();
  341. //请求搜索接口
  342. if(mui('#searchInp')[0].value) {
  343. getListData({num:1, size:10})
  344. } else {
  345. mui.toast("请输入设备ID");
  346. }
  347. }
  348. })
  349. document.getElementById('searchBtn').addEventListener('tap', function() {
  350. if(mui('#searchInp')[0].value) {
  351. getListData({num:1, size:10})
  352. } else {
  353. mui.toast("请输入设备ID");
  354. }
  355. })
  356. function pulldownRefresh() {
  357. mui('.mui-content').pullRefresh().refresh(true);
  358. startPage = 1;
  359. chknum = 0;
  360. mui('#dataList')[0].innerHTML = '';
  361. pullupRefresh();
  362. mui('.mui-content').pullRefresh().endPulldownToRefresh(false);
  363. }
  364. function pullupRefresh(isSearch) {
  365. console.log(startPage)
  366. console.log(userId)
  367. console.log(mui('#searchInp')[0].value)
  368. mui.ajax('http://120.27.222.26/app_equip_allot_list', {
  369. data: {
  370. 'page': startPage,
  371. 'userid':userId,
  372. 'f_id': mui('#searchInp')[0].value
  373. },
  374. dataType: 'json', //服务器返回json格式数据
  375. type: 'post', //HTTP请求类型
  376. timeout: 10000, //超时时间设置为10秒;
  377. success: function(data) {
  378. console.log(JSON.stringify(data.dat))
  379. if(data.nums) {
  380. var html = '';
  381. var dat = data.dat;
  382. totalPage = Math.ceil(data.nums / 10);
  383. if(startPage == 1) {
  384. $('.nullData').remove();
  385. $('#dataList').empty();
  386. html = '<li class="mui-table-view-cell"><div class="mui-input-row mui-checkbox mui-left">' +
  387. '<label>全选</label><input name="checkbox1" id="checkall" type="checkbox"></div></li>';
  388. }
  389. for(var i = 0; i < dat.length; i++) {
  390. var checked;
  391. if(dat[i].checked == 1) {
  392. checked = '<input type="checkbox" checked="checked" name="checkbox1"class="check" value="' + dat[i].equipid + '" />';
  393. } else {
  394. checked = '<input type="checkbox" name="checkbox1"class="check" value="' + dat[i].equipid + '" />';
  395. }
  396. var equiptype;
  397. if(dat[i].equiptype) {
  398. equiptype = '测报灯';
  399. } else {
  400. equiptype = '杀虫灯';
  401. }
  402. var equip_user;
  403. if(dat[i].equip_user) {
  404. equip_user = dat[i].equip_user;
  405. } else {
  406. equip_user = '无'
  407. }
  408. html += '<li class="mui-table-view-cell secondary"><a class="mui-navigate-right" href="#">' +
  409. checked + '<span>设备ID:' + dat[i].equipid + '</span>' +
  410. '</a><div class="secondaryDetial"><p>设备名称:无</p><p>设备类型:' + equiptype + '</p>' +
  411. '<p>设备添加时间:' + dat[i].equip_add_time + '</p><p>设备用户:' + equip_user + '</p></div></li>';
  412. }
  413. $('#dataList').append(html);
  414. //选中回显
  415. checklen = mui('.check').length;
  416. //判断当前是否全选
  417. chknum = 0;
  418. var checkboxs = mui('.check');
  419. checkboxs.each(function() {
  420. var ele = this;
  421. if(ele.checked == true) {
  422. chknum++;
  423. }
  424. })
  425. console.log('chknum:' + chknum)
  426. if(chknum == checklen) {
  427. document.getElementById('checkall').checked = true;
  428. } else {
  429. document.getElementById('checkall').checked = false;
  430. }
  431. //全选
  432. document.getElementById('checkall').addEventListener('change', function(e) {
  433. var checkboxs = mui('.check');
  434. if(e.target.checked) {
  435. checkboxs.each(function() {
  436. var ele = this;
  437. ele.checked = true
  438. })
  439. chknum = mui('.check').length
  440. } else {
  441. checkboxs.each(function() {
  442. var ele = this;
  443. ele.checked = false
  444. })
  445. chknum = 0
  446. }
  447. console.log(chknum)
  448. })
  449. if(totalPage == startPage) { //总页码等于当前页码,停止上拉下拉
  450. mui('.mui-content').pullRefresh().endPullupToRefresh(true);
  451. } else {
  452. startPage++;
  453. setTimeout(function() {
  454. mui('.mui-content').pullRefresh().endPullupToRefresh(false);
  455. }, 500); //重置下拉加载
  456. }
  457. } else {
  458. $('.nullData').remove();
  459. $('#dataList').empty();
  460. if(isSearch) {
  461. var nullHtml = '<div class="nullData"><img src="../images/searchNull.png" alt="" width="110" /></div>'
  462. } else {
  463. var nullHtml = '<div class="nullData"><img src="../images/listNull.png" alt="" width="110" /></div>'
  464. }
  465. $('.mui-content').append(nullHtml);
  466. setTimeout(function() {
  467. mui('.mui-content').pullRefresh().disablePullupToRefresh();
  468. }, 500); //重置下拉加载
  469. }
  470. },
  471. error: function(xhr, type, errorThrown) {
  472. $('#dataList').empty();
  473. mui('.mui-content')[0].appendChild(netStyle('../images/error.png'));
  474. mui.toast('数据请求失败');
  475. }
  476. });
  477. }
  478. //二级选项卡
  479. mui('#dataList').on('tap', '.secondary', function() {
  480. var classAttr = this.getAttribute("class").split(' ');
  481. if(classAttr.indexOf('active') == -1) {
  482. mui('.secondary').each(function() {
  483. this.classList.remove("active"); 
  484. })
  485. this.classList.add("active");
  486. } else {
  487. this.classList.remove("active"); 
  488. }
  489. })
  490. mui('#dataList').on('tap', '.secondary .secondaryDetial', function(event) {
  491. console.log(event)
  492. event.stopPropagation();
  493. })
  494. //单选
  495. mui('#dataList').on('tap', '.secondary input', function(event) {
  496. checklen = mui('.check').length;
  497. if(this.checked) {
  498. this.checked = false;
  499. chknum--;
  500. } else {
  501. this.checked = true;
  502. chknum++;
  503. }
  504. if(chknum == checklen) {
  505. document.getElementById('checkall').checked = true;
  506. } else {
  507. document.getElementById('checkall').checked = false;
  508. }
  509. event.stopPropagation();
  510. })
  511. //分配按钮
  512. document.getElementById('allotBtn').addEventListener('tap', function(){
  513. var topicidAll = []; //全部imei数组
  514. var checkboxs = mui('.check');
  515. checkboxs.each(function() {
  516. var ele = this;
  517. topicidAll.push(ele.getAttribute('value'))
  518. })
  519. var check_box_list = allotFun();
  520. console.log(topicid)
  521. console.log(topicidAll);
  522. if(topicidAll.length){
  523. mui.ajax('http://120.27.222.26/app_equip_allot_confirm', {
  524. data: {
  525. 'userid':userId,
  526. 'equip_ids':JSON.stringify(topicidAll),
  527. 'check_box_list': JSON.stringify(check_box_list),
  528. },
  529. dataType: 'json', //服务器返回json格式数据
  530. type: 'post', //HTTP请求类型
  531. timeout: 10000, //超时时间设置为10秒;
  532. beforeSend: function() {
  533. plus.nativeUI.showWaiting("分配中...");
  534. },
  535. complete: function() {
  536. plus.nativeUI.closeWaiting();
  537. },
  538. success: function(data) {
  539. if(data == 0){
  540. mui.toast('分配成功');
  541. }else{
  542. mui.toast('分配失败');
  543. }
  544. },
  545. error: function(xhr, type, errorThrown) {
  546. mui.toast('请求失败');
  547. }
  548. })
  549. }else{
  550. mui.toast('请至少选择一台设备');
  551. }
  552. })
  553. var topicid = []; //imei数组
  554. function allotFun() {
  555. topicid = []
  556. var checkboxs = mui('.check');
  557. checkboxs.each(function() {
  558. var ele = this;
  559. if(ele.checked == true) {
  560. topicid.push(ele.getAttribute('value'))
  561. }
  562. })
  563. return topicid;
  564. }
  565. })
  566. </script>
  567. </body>
  568. </html>