parkingInfo.vue 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. <template>
  2. <view>
  3. <u-navbar
  4. :title="title"
  5. title-color="#fff"
  6. :is-back="true"
  7. :custom-back="customBack"
  8. :border-bottom="false"
  9. back-icon-color="#CCE8FF"
  10. :background="{background: 'linear-gradient(99deg, #7A4398 0%, #5A5DB9 100%)' }"></u-navbar>
  11. <!-- <u-tabs :list="tabList" :is-scroll="false" height="108" bar-width="100" :current="tabCurrent" @change="tabChange"></u-tabs> -->
  12. <!-- <u-gap height="20" bg-color="#F6F6F6"></u-gap> -->
  13. <view class="base-info">
  14. <view class="park-num u-flex">
  15. 停车情况:
  16. <text v-if="parkNum.total&&parkNum.remaeNum">已停{{parkNum.total-parkNum.remaeNum}}个;</text>
  17. <text v-if="parkNum.remaeNum">空余{{parkNum.remaeNum}}个</text>
  18. </view>
  19. <view class="u-flex u-row-between">
  20. <text @click="goDeviceList" style="color: #0082FF;">
  21. 出入口信息
  22. <u-icon name="arrow-right" color="#0082FF" size="32" style="vertical-align: middle;"></u-icon>
  23. </text>
  24. <!-- <text>异常上报</text> -->
  25. </view>
  26. </view>
  27. <mescroll-uni ref="mescrollRef01" @init="mescrollInit" :top="config.platform=='h5'?250:350" :down="downOption" @down="downCallback" :up="upOption" @up="upCallback" @emptyclick="emptyClick">
  28. <view class="device-list u-flex u-flex-wrap u-row-start" v-if="dataList.length>1">
  29. <view class="device-list-item u-m-b-24" v-for="item in dataList" :key="item.id"
  30. @click="goDetails(item.id)">
  31. <view class="top u-text-center">
  32. <view class="space-name">
  33. <text>{{item.vehicleNo}}</text>
  34. <image v-if="item.vehicleNoStatus" class="arrearage-img" src="../../static/img/arrearage.png" mode="heightFix"></image>
  35. </view>
  36. <view class="signal">
  37. <text>{{item.roadwayName}}</text>
  38. </view>
  39. </view>
  40. <view class="carImg-wrap">
  41. <image class="carImg" :src="item.inImage||'../../static/img/default-car.png'" mode="scaleToFill"></image>
  42. </view>
  43. <view class="time">入场:{{item.inTime}}</view>
  44. <view class="time">时长:{{item.parkingTime}}</view>
  45. </view>
  46. </view>
  47. <view v-else class="empty">
  48. <image src="../../static/img/empty.png" mode="widthFix"></image>
  49. <view class="text">该停车场还没有车辆!</view>
  50. </view>
  51. </mescroll-uni>
  52. </view>
  53. </template>
  54. <script>
  55. import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
  56. export default{
  57. mixins: [MescrollMixin], // 使用mixin (在main.js注册全局组件)
  58. components:{
  59. },
  60. data(){
  61. return{
  62. roadName:'',
  63. roadNo:'',
  64. title:"停车场",
  65. downOption:{
  66. auto:false // 不自动加载 (mixin已处理第一个tab触发downCallback)
  67. },
  68. upOption:{
  69. page: {
  70. size: 10 // 每页数据的数量
  71. },
  72. auto:true,
  73. // use:false,
  74. noMoreSize: 4, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
  75. empty:{
  76. tip: '~ 暂无数据 ~', // 提示
  77. // btnText: '去看看'
  78. }
  79. },
  80. dataList:[],
  81. parkNum:{
  82. remaeNum:null,
  83. total:null
  84. },
  85. }
  86. },
  87. onLoad(page){
  88. console.log('page',page);
  89. if(page.roadName){
  90. this.roadName = page.roadName;
  91. this.title = page.roadName;
  92. }
  93. if(page.roadNo){
  94. this.roadNo = page.roadNo
  95. }
  96. if(page.deviceType){
  97. this.deviceType = page.deviceType
  98. }
  99. },
  100. onShow(){
  101. this.selectParkNum();
  102. },
  103. methods:{
  104. customBack(){
  105. this.$u.route({
  106. url: '/pages/deviceList/deviceList',
  107. type:'redirect',
  108. params:{
  109. param:this.deviceType
  110. }
  111. })
  112. // uni.reLaunch({
  113. // url: '/pages/deviceList/deviceList'
  114. // });
  115. },
  116. openPage(path,id) {
  117. this.$u.route({
  118. url: path,
  119. params:{
  120. id:id
  121. }
  122. })
  123. },
  124. goDetails(id){
  125. this.$u.route({
  126. url: 'pages/deviceList/deviceListType3/deviceInfo',
  127. params:{
  128. id:id,
  129. roadNo:this.roadNo,
  130. roadName:this.roadName,
  131. deviceType:this.deviceType,
  132. }
  133. })
  134. },
  135. goDeviceList(){
  136. this.$u.route({
  137. url: 'pages/deviceList/deviceListType3/deviceListType3',
  138. params:{
  139. roadNo:this.roadNo,
  140. roadName:this.roadName,
  141. deviceType:this.deviceType,
  142. }
  143. })
  144. },
  145. /*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
  146. upCallback(page) {
  147. // console.log('page',page);
  148. let params ={
  149. roadNo:this.roadNo,
  150. deviceType:this.deviceType,//设备类型: 1-地磁 2-车位锁
  151. breakStatus:this.breakStatus,//设备状态:低电量 (3200_b )、 低信号( -100_s)、有故障(0)
  152. pageNum:page.num,
  153. pageSize:page.size
  154. };
  155. this.$u.api.selectParkVehicleList(params).then(curPageData=>{
  156. // console.log('word',word);
  157. console.log('curPageData',curPageData);
  158. //联网成功的回调,隐藏下拉刷新和上拉加载的状态;
  159. this.mescroll.endSuccess(curPageData.data.total);
  160. this.mescroll.endBySize(curPageData.data.rows.length, curPageData.data.total);
  161. //设置列表数据
  162. if(page.num == 1) this.dataList = []; //如果是第一页需手动制空列表
  163. this.dataList=this.dataList.concat(curPageData.data.rows); //追加新数据
  164. console.log('this.dataList',this.dataList);
  165. }).catch(()=>{
  166. console.log('catch');
  167. //联网失败, 结束加载
  168. this.mescroll.endErr();
  169. })
  170. },
  171. //点击空布局按钮的回调
  172. emptyClick(){
  173. uni.showToast({
  174. title:'点击了按钮,具体逻辑自行实现'
  175. })
  176. },
  177. refresh(){
  178. this.mescroll.resetUpScroll( );
  179. },
  180. selectParkNum(){
  181. this.$u.api.selectParkNum({roadNo:this.roadNo}).then(res=>{
  182. console.log('selectParkNum',res);
  183. this.parkNum = res.data;
  184. }).catch(()=>{
  185. console.log('catch');
  186. //联网失败, 结束加载
  187. this.mescroll.endErr();
  188. })
  189. }
  190. }
  191. }
  192. </script>
  193. <style>
  194. page{background: #F3F3F3;}
  195. </style>
  196. <style lang="scss" scoped>
  197. .device-list{
  198. margin: 24rpx 0;
  199. .device-list-item{
  200. background-color: #fff;
  201. width: 45%;
  202. margin: 0 0 24rpx 3.3%;
  203. padding: 24rpx 15rpx;
  204. border-radius: 13rpx;
  205. .top{
  206. margin-bottom: 20rpx;
  207. .space-name{
  208. color: #212121;
  209. font-size: 30rpx;
  210. line-height: 42rpx;
  211. .arrearage-img{
  212. width: 35rpx;
  213. height: 35rpx;
  214. vertical-align: middle;
  215. margin-left: 8rpx;
  216. }
  217. }
  218. .signal{
  219. font-size: 26rpx;
  220. color: #5B5B5B;
  221. .img{
  222. display: inline-block;
  223. height: 26rpx;
  224. margin-left: 7rpx;
  225. }
  226. }
  227. .low{color: #f00;}
  228. }
  229. .vehicleNo{
  230. height: 42rpx;
  231. font-size: 30rpx;
  232. font-weight: 400;
  233. color: #212121;
  234. line-height: 42rpx;
  235. text-align: center;
  236. }
  237. .carImg-wrap{
  238. height: 229rpx;
  239. width: 100%;
  240. border-radius: 15rpx;
  241. overflow: hidden;
  242. margin: 16rpx auto 18rpx;
  243. text-align: center;
  244. .carImg{
  245. width: 100%;
  246. height: 100%;
  247. // display: block;
  248. }
  249. }
  250. .parkingTime{
  251. height: 37rpx;
  252. font-size: 26rpx;
  253. font-weight: 400;
  254. color: #5B5B5B;
  255. line-height: 37rpx;
  256. margin-bottom: 15rpx;
  257. text-align: center;
  258. }
  259. .time{
  260. text-align: center;
  261. color: #6a6a6a;
  262. font-size: 14rpx;
  263. margin-top: 8rpx;
  264. }
  265. }
  266. }
  267. .base-info{
  268. background-color: #fff;
  269. padding: 30rpx;
  270. .park-num{
  271. text{color: #767676;margin-left: 8rpx;}
  272. padding-bottom: 20rpx;
  273. }
  274. }
  275. .empty{
  276. padding-top: 20vh;
  277. text-align: center;
  278. image{
  279. width: 344rpx;
  280. }
  281. .text{
  282. margin-top: 60rpx;
  283. font-weight: 400;
  284. font-size: 40rpx;
  285. }
  286. }
  287. </style>