index.vue 24 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012
  1. <template>
  2. <view>
  3. <view class="textbox">
  4. <view class="inputs">
  5. <u-search placeholder="请输入设备名称/编号" v-model="device_id" placeholder-color="#909696" :show-action="false"
  6. search-icon-color="#909696" @input="searchinput">
  7. </u-search>
  8. </view>
  9. <view class="tab">
  10. <view class="tab-content">
  11. <view class="tab-box tab-box-top">
  12. <view v-for="(item,index) in menuList" :key="index" @click="change(index,item)"
  13. v-if="isShow(item)"
  14. :class="['tab-item',current==index?'active':'']">
  15. <image class="img-icon" :src="item.app_menu_icon" mode=""></image>
  16. <view class="text">{{ getSlice(item.purview_name) }}</view>
  17. </view>
  18. </view>
  19. <u-empty v-if="!menuList.length && !loading" :image-size="100" text="暂无设备权限,请联系工作人员添加"></u-empty>
  20. </view>
  21. </view>
  22. <view class="listbox" v-if="menuList.length">
  23. <view class="second-tab">
  24. <view class="tab-box">
  25. <view
  26. v-for="(item,index) in list"
  27. :key="index"
  28. @click="changeDevice(item,index)"
  29. v-show="!item.url"
  30. :class="['tab-item',currents == index?'active':'']"
  31. >
  32. <text>{{item.purview_name}}</text>
  33. </view>
  34. </view>
  35. </view>
  36. <view class="third-tab">
  37. <view
  38. class="third-tab-item"
  39. @click="changeStatus('')"
  40. :class="{'active-tab' : device_status == ''}"
  41. >总计{{ counts }}</view>
  42. <view
  43. class="third-tab-item"
  44. @click="changeStatus('1')"
  45. :class="{'active-tab' : device_status == '1'}"
  46. >在线{{ online_counts }}</view>
  47. <view
  48. class="third-tab-item"
  49. @click="changeStatus('0')"
  50. :class="{'active-tab' : device_status == '0'}"
  51. >离线{{ offline_counts }}</view>
  52. </view>
  53. <scroll-view
  54. :scroll-top="0"
  55. :scroll-y="true"
  56. class="list scroll-Y"
  57. @scrolltoupper="upper"
  58. @scrolltolower="lower"
  59. @scroll="scroll"
  60. >
  61. <view class="list_item" v-for="(item, index) in eqlistdata" :key="index" @click="historys(item)">
  62. <view class="list_item_top">
  63. <p class="p1">
  64. <span class="title">{{ (item.name || '--' )}}</span>
  65. <span class="sub-title" @click.stop="modification(item)">信息修改</span>
  66. </p>
  67. <p class="online-status"
  68. v-if="item.status == 1 || item.is_online" >
  69. <image
  70. :src="$imageURL+'/bigdata_app/newImg/home/online1.png'"
  71. mode=""
  72. ></image>
  73. <text class="status-text-online">在线</text>
  74. </p>
  75. <p
  76. v-else
  77. class="online-status"
  78. >
  79. <image
  80. :src="$imageURL+'/bigdata_app/newImg/home/offline.png'"
  81. mode=""
  82. ></image>
  83. <text class="status-text-offline">离线</text>
  84. </p>
  85. </view>
  86. <view class="list_item_text">
  87. <p v-if="item.imei">
  88. <span class="label">IMEI</span>{{ (item.dui || item.imei) }}
  89. </p>
  90. <p>
  91. <span class="label">设备ID</span>{{ item.only_for_show || item.id || item.device_id }}
  92. </p>
  93. <p>
  94. <span class="label">上报时间</span>{{ (item.report || item.uptime) | timeFormat() }}
  95. </p>
  96. <p style="display:flex;align-items: center;">
  97. <span class="label">设备位置</span>
  98. <span class="nav-label">{{ (item.address|| '无') }}</span>
  99. </p>
  100. </view>
  101. </view>
  102. </scroll-view>
  103. </view>
  104. </view>
  105. <view class="loading" v-if="loadingtf">
  106. <image src="../../static/images/ajax-loader.gif" mode="" class="img"></image>
  107. </view>
  108. <view class="top" v-if="isTop" @click="top">
  109. <image
  110. :src="
  111. $imageURL+'/bigdata_app' +
  112. '/image/6209a98f0cb3b5086f2ca36152c9269.png'
  113. " mode=""></image>
  114. </view>
  115. </view>
  116. </template>
  117. <script>
  118. import {
  119. Debounce,
  120. Throttle
  121. } from '../../util/anitthro.js';
  122. export default {
  123. data() {
  124. return {
  125. list: [],
  126. pur_id: '',
  127. loading: false,
  128. currentPur_id:'',
  129. device_status: '',
  130. counts:0,
  131. online_counts:0,
  132. offline_counts:0,
  133. current: 0,
  134. currents: 0,
  135. total: 0,
  136. refreshData:'',
  137. page: 1,
  138. size: 10,
  139. eqlistdata: [],
  140. isTop: false,
  141. device_model: '',
  142. infoalter: false, // 权限设置,
  143. type_id: 0, //设备类型,
  144. imgpath: [],
  145. loadingtf: false,
  146. width: 0, //顶部搜索栏宽度
  147. device_id: '', //搜索设备ID
  148. menuList: []
  149. };
  150. },
  151. methods: {
  152. isShow(item){
  153. return item.pur_id != 422
  154. },
  155. getSlice(name){
  156. return name.slice(0,4)
  157. },
  158. modification(item) {
  159. uni.navigateTo({
  160. url:
  161. './seabox/modification?data=' +
  162. JSON.stringify(item) +
  163. '&id=' +
  164. this.type_id,
  165. });
  166. },
  167. changeStatus(status){
  168. this.device_status = status;
  169. Debounce(() => {
  170. this.page = 1;
  171. this.eqlist();
  172. }, 500)();
  173. },
  174. async getUserlogin() {
  175. this.list = [];
  176. this.loading = true;
  177. const res = await this.$myRequest({
  178. url: '/api/api_gateway?method=user.login.user_login_info',
  179. method: 'POST',
  180. data: {
  181. is_app: 1,
  182. },
  183. });
  184. this.loading = false;
  185. res.forEach(item=>{
  186. item.icon = '/bigdata_app/newImg/home/sqjd.png'
  187. })
  188. const menulist = res || [];
  189. const menuItem = menulist.find(item => item.purview_name == '智慧物联')
  190. this.menuList = menuItem.children || [];
  191. if(!this.pur_id){
  192. this.list = this.menuList[0].children || []
  193. this.pur_id = this.menuList[0].pur_id || '';
  194. this.current = 0;
  195. }else{
  196. this.list = this.menuList.find(item => item.pur_id == this.pur_id)?.children || []
  197. this.pur_id = this.menuList.find(item => item.pur_id == this.pur_id)?.pur_id || '';
  198. this.current = this.menuList.findIndex(item => item.pur_id == this.pur_id);
  199. }
  200. if(this.list.length > 1){
  201. if(this.list[0].purview_name != '全部'){
  202. this.list.unshift({
  203. device_type_id: '',
  204. purview_name: '全部'
  205. })
  206. }
  207. }
  208. this.type_id = this.list[0].device_type_id;
  209. this.initPage();
  210. },
  211. async eqlist(tf) {
  212. this.counts = 0;
  213. this.online_counts = 0;
  214. this.offline_counts = 0;
  215. this.loadingtf = true;
  216. let data = {
  217. device_type_id: this.type_id,
  218. page_num: this.page,
  219. page_size: this.size,
  220. pur_id: this.pur_id,
  221. device_status: this.device_status,
  222. device_id: this.device_id,
  223. device_model: this.device_model
  224. }
  225. const res = await this.$myRequest({
  226. url: '/api/api_gateway?method=device.app_device.app_device_list',
  227. data: data,
  228. });
  229. this.loadingtf = false;
  230. const status = res?.status || {};
  231. this.online_counts = status.online || 0;
  232. this.offline_counts = status.offline || 0;
  233. this.counts = (status.online || 0) + (status.offline || 0);
  234. this.total = res.total || 0;
  235. if (tf) {
  236. this.eqlistdata = this.eqlistdata.concat(res.data);
  237. } else {
  238. this.eqlistdata = res.data;
  239. }
  240. },
  241. change(index,itemData) {
  242. this.list = this.menuList[index].children || []
  243. const list = [];
  244. this.list.forEach(item=>{
  245. if(item.url){
  246. list.push(item)
  247. }
  248. })
  249. if(list.length > 1){
  250. if(this.list[0].purview_name != '全部'){
  251. this.list.unshift({
  252. device_type_id: '',
  253. purview_name: '全部'
  254. })
  255. }
  256. }
  257. this.current = index;
  258. const item = this.list[0];
  259. this.pur_id = itemData.pur_id || '';
  260. this.changeDevice(item,0);
  261. },
  262. changeDevice(item,index){
  263. this.currents = index;
  264. this.currentPur_id = item.pur_id || '';
  265. const name = item.menu;
  266. if (name === 'cbd4') {
  267. this.device_model = 11;
  268. } else if(name === 'cbd1'){
  269. this.device_model = 12;
  270. } else if(name === 'cbd3'){
  271. this.device_model = '';
  272. } else if(name === 'cbd5'){
  273. this.device_model = 13;
  274. } else if(name === 'cbd6'){
  275. this.device_model = 14;
  276. }else if(name === 'gkcbd1'){
  277. this.device_model = 15;
  278. } else {
  279. this.device_model = item.device_model || '';
  280. }
  281. this.page = 1;
  282. this.eqlistdata = [];
  283. this.type_id = item.device_type_id;
  284. Debounce(() => {
  285. this.eqlist();
  286. }, 500)();
  287. },
  288. top() {
  289. uni.pageScrollTo({
  290. scrollTop: 0,
  291. duration: 500,
  292. });
  293. },
  294. initPage(){
  295. this.eqlistdata = [];
  296. this.currents = 0;
  297. this.page = 1;
  298. Debounce(() => {
  299. this.eqlist();
  300. }, 500)();
  301. this.width = 0;
  302. },
  303. historys(item) {
  304. const type_id = item.type_id;
  305. item.pur_id = this.pur_id;
  306. console.log(type_id,'type_idtype_idtype_id')
  307. switch (type_id) {
  308. // 水肥新设备
  309. case 22:
  310. var obj = {};
  311. obj.d_id = item.d_id;
  312. obj.device_id = item.id;
  313. obj.is_online = item.status;
  314. obj.lat = item.lat;
  315. obj.lng = item.lng;
  316. obj.equip_name = item.name;
  317. obj.uptime = item.uptime;
  318. uni.navigateTo({
  319. url: '../waterandfernew/details?shebei=' + JSON.stringify(obj),
  320. });
  321. break;
  322. // 病虫害可视监测
  323. case 14:
  324. item.addtime = item.uptime;
  325. uni.navigateTo({
  326. url: '../cb/sy/detail?detail=' + JSON.stringify(item),
  327. });
  328. break;
  329. case 2:
  330. item.addtime = item.uptime;
  331. uni.navigateTo({
  332. url: '../prevention/equipmentdetails?shebei=' + JSON.stringify(item),
  333. });
  334. break;
  335. case 38:
  336. var obj = {};
  337. obj.d_id = item.d_id;
  338. obj.equip_id = item.id;
  339. obj.is_online = item.status;
  340. obj.lat = item.lat;
  341. obj.lng = item.lng;
  342. obj.equip_name = item.name;
  343. obj.uptime = item.uptime;
  344. uni.navigateTo({
  345. url: '../environment/equipment-new?shebei=' + JSON.stringify(obj),
  346. });
  347. break;
  348. case 5:
  349. var obj = {};
  350. obj.d_id = item.d_id;
  351. obj.equip_id = item.id;
  352. obj.is_online = item.status;
  353. obj.lat = item.lat;
  354. obj.lng = item.lng;
  355. obj.equip_name = item.name;
  356. obj.uptime = item.uptime;
  357. uni.navigateTo({
  358. url: '../environment/equipment?shebei=' + JSON.stringify(obj),
  359. });
  360. break;
  361. case 6:
  362. uni.navigateTo({
  363. url: '/pages/webview?device_id=' +
  364. item.id +
  365. '&accessToken=' +
  366. this.accessToken,
  367. });
  368. break;
  369. case 44:
  370. uni.navigateTo({
  371. url:
  372. '/pages/webviewdgp?device_id=' +
  373. item.id +
  374. '&accessToken=' +
  375. uni.getStorageSync('session_key') +
  376. '&type=dgp',
  377. });
  378. break;
  379. case 3:
  380. item.addtime = item.uptime;
  381. item.type = item.type_id;
  382. uni.navigateTo({
  383. url: '../cbd/detail?info=' + JSON.stringify(item),
  384. });
  385. break;
  386. case 28:
  387. item.addtime = item.uptime;
  388. item.type = item.type_id;
  389. uni.navigateTo({
  390. url: '../cb/smallPest/smallPest?info=' + JSON.stringify(item),
  391. });
  392. break;
  393. case 4:
  394. item.addtime = item.uptime;
  395. item.type = item.type_id;
  396. uni.navigateTo({
  397. url: '../cb/equip-detail/equip-detail?info=' + JSON.stringify(item),
  398. });
  399. break;
  400. case 32:
  401. case 33:
  402. case 34:
  403. case 35:
  404. item.addtime = item.uptime;
  405. item.type = item.type_id;
  406. uni.navigateTo({
  407. url: '../cb/equip-detail/equip-detail-new?info=' +
  408. JSON.stringify(item),
  409. });
  410. break;
  411. case 7:
  412. item.addtime = item.uptime;
  413. item.type = item.type_id;
  414. if(item.pur_id == 458){
  415. uni.navigateTo({
  416. url: '../bzy/detail?info=' + JSON.stringify(item),
  417. });
  418. }else{
  419. uni.navigateTo({
  420. url: '../cb/equip-detail/equip-detail?info=' + JSON.stringify(item),
  421. });
  422. }
  423. break;
  424. case 8:
  425. uni.navigateTo({
  426. url: '../cb/thxydetail/thxydetail?imei=' + item.id,
  427. });
  428. break;
  429. case 29:
  430. uni.navigateTo({
  431. url: `../cb/nlNewXy/nlNewXy?imei=${item.id}&showId=${item.d_id}`,
  432. });
  433. break;
  434. case 24:
  435. uni.navigateTo({
  436. url: '../cb/zjxydetail/thxydetail?imei=' + item.id,
  437. });
  438. break;
  439. case 12:
  440. item.addtime = item.uptime;
  441. uni.navigateTo({
  442. url: '../cb/xctdetail/xctdetail?info=' + JSON.stringify(item),
  443. });
  444. break;
  445. case 13:
  446. var obj = {};
  447. obj.d_id = item.d_id;
  448. obj.device_id = item.id;
  449. obj.is_online = item.status;
  450. obj.lat = item.lat;
  451. obj.lng = item.lng;
  452. obj.equip_name = item.name;
  453. obj.uptime = item.uptime;
  454. uni.navigateTo({
  455. url: '../waterandfer/datails?shebei=' + JSON.stringify(obj),
  456. });
  457. break;
  458. case 15:
  459. var obj = {};
  460. obj.d_id = item.d_id;
  461. obj.device_id = item.id;
  462. obj.is_online = item.status;
  463. obj.lat = item.lat;
  464. obj.lng = item.lng;
  465. obj.equip_name = item.name;
  466. obj.uptime = item.uptime;
  467. obj.address = item.address || '无';
  468. uni.navigateTo({
  469. url: '../environment/gsequipment?shebei=' + JSON.stringify(obj),
  470. });
  471. break;
  472. case 17:
  473. break;
  474. case 18:
  475. var obj = {};
  476. obj.device_id = item.id;
  477. obj.is_online = item.status;
  478. uni.navigateTo({
  479. url: '../cb/shuifeiL/shuifeiL?detail=' + JSON.stringify(obj),
  480. });
  481. break;
  482. case 43:
  483. uni.navigateTo({
  484. url: "/pages/fmSys/details?info=" + JSON.stringify(item)
  485. })
  486. break;
  487. // case 44:
  488. // uni.navigateTo({
  489. // url: "/pages/webviewdgp/webview?device_id=" + item.id + "&accessToken=" + this.accessToken || uni
  490. // .getStorageSync('session_key') +
  491. // '&type=dgp'
  492. // })
  493. // break;
  494. case 11:
  495. var obj = {};
  496. obj.d_id = item.d_id;
  497. obj.device_id = item.id;
  498. obj.is_online = item.status;
  499. obj.lat = item.lat;
  500. obj.lng = item.lng;
  501. obj.equip_name = item.name;
  502. obj.uptime = item.uptime;
  503. obj.location = item.address;
  504. obj.type = 11;
  505. uni.navigateTo({
  506. url: '../disease/cmb?shebei=' + JSON.stringify(obj),
  507. });
  508. break;
  509. case 19:
  510. var obj = {};
  511. obj.d_id = item.d_id;
  512. obj.device_id = item.id;
  513. obj.is_online = item.status;
  514. obj.lat = item.lat;
  515. obj.lng = item.lng;
  516. obj.equip_name = item.name;
  517. obj.uptime = item.uptime;
  518. obj.location = item.address;
  519. obj.type = 19;
  520. uni.navigateTo({
  521. url: '../disease/cmb?shebei=' + JSON.stringify(obj),
  522. });
  523. break;
  524. case 20:
  525. var obj = {};
  526. obj.d_id = item.d_id;
  527. obj.device_id = item.id;
  528. obj.is_online = item.status;
  529. obj.lat = item.lat;
  530. obj.lng = item.lng;
  531. obj.equip_name = item.name;
  532. obj.uptime = item.uptime;
  533. obj.location = item.address;
  534. obj.type = 20;
  535. uni.navigateTo({
  536. url: '../disease/cmb?shebei=' + JSON.stringify(obj),
  537. });
  538. break;
  539. case 21:
  540. var obj = {};
  541. obj.d_id = item.d_id;
  542. obj.device_id = item.id;
  543. obj.is_online = item.status;
  544. obj.lat = item.lat;
  545. obj.lng = item.lng;
  546. obj.equip_name = item.name;
  547. obj.uptime = item.uptime;
  548. obj.location = item.address;
  549. obj.type = 21;
  550. uni.navigateTo({
  551. url: '../disease/cmb?shebei=' + JSON.stringify(obj),
  552. });
  553. break;
  554. case 26:
  555. var obj = {};
  556. obj.d_id = item.d_id;
  557. obj.device_id = item.id;
  558. obj.is_online = item.status;
  559. obj.lat = item.lat;
  560. obj.lng = item.lng;
  561. obj.equip_name = item.name;
  562. obj.uptime = item.uptime;
  563. obj.location = item.address;
  564. obj.type = 26;
  565. uni.navigateTo({
  566. url: '../disease/cmb?shebei=' + JSON.stringify(obj),
  567. });
  568. break;
  569. case 27:
  570. var obj = {};
  571. obj.d_id = item.d_id;
  572. obj.device_id = item.id;
  573. obj.is_online = item.status;
  574. obj.lat = item.lat;
  575. obj.lng = item.lng;
  576. obj.equip_name = item.name;
  577. obj.uptime = item.uptime;
  578. obj.location = item.address;
  579. obj.type = 26;
  580. uni.navigateTo({
  581. url: '../disease/mls/mls?shebei=' + JSON.stringify(obj),
  582. });
  583. break;
  584. case 25:
  585. item.addtime = item.uptime;
  586. uni.navigateTo({
  587. url: '../cb/xylps/detail/detail?detail=' + JSON.stringify(item),
  588. });
  589. break;
  590. case 40:
  591. item.addtime = item.uptime;
  592. uni.navigateTo({
  593. url: `../cb/shuifeizs/shuifeizs?devBid=${item.d_id}&devName=${item.name}&devStatus=${item.status}`,
  594. });
  595. break;
  596. case 42:
  597. item.addtime = item.uptime;
  598. uni.navigateTo({
  599. url: `../cb/wenshizs/wenshizs?devBid=${item.d_id}&devName=${item.name}&devStatus=${item.status}`,
  600. });
  601. break;
  602. case 45:
  603. item.addtime = item.uptime;
  604. uni.navigateTo({
  605. url: `../cb/shuifeizsFirst/shuifeizs?devBid=${item.d_id}&devName=${item.name}&devStatus=${item.status}`,
  606. });
  607. break;
  608. case 46:
  609. uni.navigateTo({
  610. url: `../deviceDetails/weatherStation/index?devBid=${item.id}&devName=${item.name}&devStatus=${item.status}&address=${item.address}&uptime=${item.uptime}&d_id=${item.d_id}&deviceType=46`,
  611. });
  612. break;
  613. case 47:
  614. uni.navigateTo({
  615. url: `../cb/zhamenFirst/zhamenzs?devBid=${item.d_id}&devName=${item.name}&devStatus=${item.status}`,
  616. });
  617. break;
  618. default:
  619. item.addtime = item.uptime;
  620. item.type = this.type_id;
  621. uni.navigateTo({
  622. url: '../cb/xy2.0/particulars?info=' + JSON.stringify(item),
  623. });
  624. break;
  625. }
  626. },
  627. searchinput() {
  628. Debounce(() => {
  629. this.eqlistdata = [];
  630. this.page = 1;
  631. this.eqlist();
  632. }, 1000)();
  633. },
  634. scrollTop(e) {},
  635. upper() {},
  636. lower() {
  637. if(this.eqlistdata.length >= this.total){
  638. return;
  639. }
  640. Debounce(() => {
  641. this.page++;
  642. this.eqlist(true);
  643. }, 500)();
  644. },
  645. scroll() {},
  646. },
  647. watch:{
  648. pur_id(){
  649. setTimeout(() => {
  650. this.getUserlogin();
  651. }, 100);
  652. },
  653. },
  654. onLoad() {
  655. const that = this;
  656. uni.$on('purId', (purId) => {
  657. that.pur_id = purId;
  658. });
  659. uni.$on('refreshData', (refreshData) => {
  660. this.eqlist();
  661. });
  662. this.getUserlogin();
  663. },
  664. onShow() {
  665. // 监听刷新数据事件
  666. const refreshData = uni.getStorageSync('refreshData');
  667. if(!this.refreshData){
  668. this.refreshData = refreshData;
  669. // 如果发生改变,刷新数据
  670. if(refreshData){
  671. Debounce(() => {
  672. this.getUserlogin();
  673. }, 500)();
  674. }
  675. }else if(this.refreshData != refreshData){
  676. this.refreshData = refreshData;
  677. Debounce(() => {
  678. this.getUserlogin();
  679. }, 500)();
  680. }
  681. },
  682. onTabItemTap(e) {
  683. },
  684. onReachBottom() {
  685. if(this.eqlistdata.length >= this.total){
  686. return;
  687. }
  688. Debounce(() => {
  689. this.page++;
  690. this.eqlist(true);
  691. }, 500)();
  692. },
  693. onPageScroll(e) {
  694. //nvue暂不支持滚动监听,可用bindingx代替
  695. if (e.scrollTop > 200) {
  696. //距离大于200时显示
  697. this.isTop = true;
  698. } else {
  699. //距离小于200时隐藏
  700. this.isTop = false;
  701. }
  702. },
  703. };
  704. </script>
  705. <style lang="scss">
  706. page {
  707. background: linear-gradient(180deg, #ffffff00 0%, #F5F6FA 23.64%, #F5F6FA 100%), linear-gradient(102deg, #BFEADD 6.77%, #B8F1E7 40.15%, #B9EEF5 84.02%);
  708. }
  709. /deep/.uni-icons {
  710. font-size: 40rpx !important;
  711. }
  712. input{
  713. background: transparent !important;
  714. }
  715. .textbox {
  716. width: 100%;
  717. height: calc(100vh - 82rpx);
  718. padding-top: 82rpx;
  719. box-sizing: border-box;
  720. }
  721. .inputs {
  722. width: calc(100% - 72rpx);
  723. margin-left: 36rpx;
  724. /deep/.u-content {
  725. background-color: #fff !important;
  726. }
  727. /deep/.uni-input-wrapper {
  728. background-color: #fff !important;
  729. }
  730. }
  731. .utabs_box {
  732. width: 100%;
  733. position: fixed;
  734. top: 88px;
  735. background-color: #ffffff;
  736. z-index: 100;
  737. .utabs {
  738. width: 95%;
  739. margin: 0 auto;
  740. }
  741. }
  742. .loading {
  743. position: fixed;
  744. top: 440px;
  745. width: 95%;
  746. left: 2.5%;
  747. text-align: center;
  748. .img {
  749. width: 300rpx;
  750. height: 40rpx;
  751. }
  752. }
  753. .active-tab{
  754. border-radius: 8rpx;
  755. background: linear-gradient(0deg, #0bbc580f 0%, #0bbc580f 100%), #00000005;
  756. }
  757. .tab-box {
  758. font-size: 30rpx;
  759. box-sizing: border-box;
  760. width: 100%;
  761. height: 100%;
  762. overflow-y: hidden;
  763. overflow-x: auto;
  764. white-space: nowrap;
  765. // 去掉滚动条
  766. -ms-overflow-style: none;
  767. scrollbar-width: none;
  768. .tab-item {
  769. cursor: pointer;
  770. position: relative;
  771. text-align: center;
  772. display: inline-block;
  773. padding: 16rpx 24rpx;
  774. box-sizing: border-box;
  775. span {
  776. display: inline-block;
  777. }
  778. }
  779. }
  780. .tab-box-top{
  781. .tab-item {
  782. width: 140rpx;
  783. text-align: center;
  784. }
  785. }
  786. .tab {
  787. // background-color: #0BBC58;
  788. margin-top: 42rpx;
  789. margin-bottom: 38rpx;
  790. padding: 0 32rpx;
  791. .img-icon {
  792. width: 80rpx;
  793. height: 80rpx;
  794. margin-bottom: 12rpx;
  795. }
  796. .text {
  797. color: #303133;
  798. font-size: 24rpx;
  799. }
  800. .tab-content {
  801. width: 100%;
  802. height: 162rpx;
  803. }
  804. .tab-item.active {
  805. border-radius: 24rpx;
  806. background: linear-gradient(0deg, #0bbc580f 0%, #0bbc580f 100%), #00000005;
  807. }
  808. }
  809. .second-tab {
  810. height: 80rpx;
  811. .tab-item{
  812. font-size: 28rpx;
  813. color: #999999;
  814. }
  815. .tab-item.active {
  816. color: #303133;
  817. font-weight: 700;
  818. }
  819. .tab-item.active::after {
  820. content: '';
  821. position: absolute;
  822. bottom: 0;
  823. left: 50%;
  824. transform: translateX(-50%);
  825. width: 18px; /* 比文字略宽 */
  826. height: 18px;
  827. border: 3px solid #0BBC58;
  828. border-radius: 50%;
  829. border-color: transparent; /* 隐藏其他部分 */
  830. border-bottom-color: #0BBC58; /* 组合成45度角 */
  831. // transform: rotate(0deg); /* 调整角度 */
  832. }
  833. }
  834. .third-tab {
  835. margin: 8rpx 0;
  836. height: 64rpx;
  837. line-height: 64rpx;
  838. display: flex;
  839. justify-content: space-between;
  840. .third-tab-item {
  841. flex: 1;
  842. text-align: center;
  843. }
  844. }
  845. .list {
  846. width: 100%;
  847. background-color: #F5F6FA;
  848. // margin-bottom: 100rpx;
  849. overflow-y: auto;
  850. padding: 0 32rpx;
  851. box-sizing: border-box;
  852. .list_item {
  853. width: 100%;
  854. margin: 0 auto 24rpx;
  855. padding: 32rpx;
  856. box-sizing: border-box;
  857. position: relative;
  858. background-color: #ffffff;
  859. border-radius: 16rpx;
  860. position: relative;
  861. .list_item_top {
  862. .p1 {
  863. width: 86%;
  864. font-size: 28rpx;
  865. overflow: hidden;
  866. display: flex;
  867. align-items: center;
  868. .title{
  869. max-width: 75%;
  870. color: #333333;
  871. font-size: 28rpx;
  872. font-weight: 700;
  873. margin-right: 8rpx;
  874. overflow: hidden;
  875. text-overflow: ellipsis;
  876. white-space: nowrap;
  877. }
  878. .sub-title{
  879. border-radius: 32rpx;
  880. border:2rpx solid #0bbc58;
  881. padding: 4rpx 12rpx;
  882. font-size: 22rpx;
  883. font-weight: 400;
  884. overflow: hidden;
  885. text-overflow: ellipsis;
  886. white-space: nowrap;
  887. color:#0bbc58;
  888. margin-left: 20rpx;
  889. }
  890. }
  891. }
  892. .online-status{
  893. font-size: 28rpx;
  894. position: absolute;
  895. top:0rpx;
  896. text-align: center;
  897. right: 8rpx;
  898. top: 2rpx;
  899. width: 76px;
  900. height: 28px;
  901. // line-height: 28px;
  902. // border-radius: 0px 0px 0px 26px;
  903. // border: 1px solid #ffffff;
  904. image{
  905. width: 140rpx;
  906. height: 56rpx;
  907. }
  908. .status-text-online{
  909. color: #0BBC58;
  910. position: absolute;
  911. top: 0rpx;
  912. right: 0rpx;
  913. width: 120rpx;
  914. height: 56rpx;
  915. line-height: 56rpx;
  916. font-size: 26rpx;
  917. }
  918. .status-text-offline{
  919. color: #FB4E52;
  920. position: absolute;
  921. top: 0rpx;
  922. right: 0rpx;
  923. width: 120rpx;
  924. height: 56rpx;
  925. line-height: 56rpx;
  926. font-size: 26rpx;
  927. }
  928. }
  929. // .p2 {
  930. // color: #0BBC58;
  931. // background: #0bbc581a;
  932. // }
  933. // .p_out {
  934. // color: #FB4E52;
  935. // background: #fb4e521a;
  936. // }
  937. .list_item_text {
  938. margin-top: 20rpx;
  939. p {
  940. font-size: 24rpx;
  941. color: #303133;
  942. margin-top: 10rpx;
  943. word-break: break-all;
  944. }
  945. .label{
  946. color: #999999;
  947. text-align: left;
  948. margin-right: 32rpx;
  949. font-size: 24rpx;
  950. min-width: 90rpx;
  951. display: inline-block;
  952. }
  953. .nav-label{
  954. //超出隐藏
  955. display: inline-block;
  956. width: 70%;
  957. overflow: hidden;
  958. text-overflow: ellipsis;
  959. white-space: nowrap;
  960. }
  961. }
  962. .list_item_btn {
  963. width: 126rpx;
  964. color: #42b983;
  965. height: 40rpx;
  966. text-align: center;
  967. border: 1rpx solid #42b983;
  968. border-radius: 25rpx;
  969. font-size: 24rpx;
  970. line-height: 35rpx;
  971. position: absolute;
  972. bottom: 15rpx;
  973. right: 20rpx;
  974. }
  975. }
  976. }
  977. .top {
  978. position: fixed;
  979. right: 30px;
  980. bottom: 100px;
  981. z-index: 100;
  982. image {
  983. width: 100rpx;
  984. height: 100rpx;
  985. }
  986. }
  987. </style>