assetsear.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. <template>
  2. <view class="container">
  3. <label class="sel_event" @click="sel_show()">
  4. <view class="sel_point">
  5. <view class="sel_field" v-if="sel_item1 != ''">
  6. {{sel_item1 + "/" + sel_item2 + "/" + (sel_item3.name || sel_item3.label)}}
  7. </view>
  8. <view class="triangle" :style="tri_style">
  9. </view>
  10. </view>
  11. </label>
  12. <u-select v-model="show" value-name="id" label-name="name" mode="mutil-column-auto" :list="list"
  13. @confirm="confirm"></u-select>
  14. <view class="content">
  15. <view class="table_hed">
  16. <view class="table_cell_h">
  17. <span>名称</span>
  18. <span>编号</span>
  19. <span>类型</span>
  20. <span>关联项目数</span>
  21. </view>
  22. </view>
  23. <scroll-view :scroll-top="scrollTop" scroll-y="true" class="scroll-Y" @scrolltolower="lower">
  24. <view class="table_cell" v-for="( item, i) in tabArr" :key="item.id">
  25. <span>{{item.name}}</span>
  26. <span>{{item.number}}</span>
  27. <span>{{item.type == 1 ? '机柜' : '其他'}}</span>
  28. <span>{{item.checkItemTotal}}</span>
  29. </view>
  30. </scroll-view>
  31. </view>
  32. </view>
  33. </template>
  34. <script>
  35. import {
  36. building,
  37. floor,
  38. room,
  39. device
  40. } from '@/api/index.js'
  41. export default {
  42. data() {
  43. return {
  44. sel_item1: '', //选择列1值
  45. sel_item2: '', //选择列2值
  46. sel_item3: {}, //选择列3值
  47. tri_style: '', //小三角样式
  48. show: false, //选择框弹出
  49. tabArr: [], //设备列表
  50. list: [], //选择框列表
  51. scrollnum: 2 //页码(懒加载)
  52. }
  53. },
  54. onLoad() {
  55. this.getBuilding()
  56. },
  57. watch: {
  58. sel_item3: {
  59. deep: true,
  60. handler(newOption, oldOption) {
  61. if (newOption.value) {
  62. this.getTotleDevice(newOption.value);
  63. } else {
  64. this.getTotleDevice(newOption.id);
  65. }
  66. },
  67. },
  68. show(newOption, oldOption) {
  69. if (!newOption) {
  70. this.tri_style =
  71. 'margin-top: 10rpx;margin-bottom:0rpx;border-top-color:#808080;border-bottom-color:transparent;';
  72. }
  73. }
  74. },
  75. methods: {
  76. //选择框弹出
  77. sel_show() {
  78. this.show = !this.show;
  79. this.tri_style =
  80. 'margin-top: 0rpx;margin-bottom:10rpx;border-top-color:transparent;border-bottom-color: #808080;';
  81. },
  82. //获取楼栋
  83. async getBuilding() {
  84. let {
  85. data
  86. } = await building();
  87. this.list.length = 0;
  88. data.forEach(i => {
  89. this.list.push(i)
  90. });
  91. for (let i = 0, len = this.list.length; i < len; i++) {
  92. await this.getFloor(this.list[i].id, i)
  93. for (let j = 0, len = this.list[i].children.length; j < len; j++) {
  94. await this.getRoom(this.list[i].children[j].id, i, j)
  95. }
  96. }
  97. //选择框默认值
  98. this.$nextTick(function() {
  99. this.sel_item1 = this.list[0].name;
  100. this.sel_item2 = this.list[0].children[0].name;
  101. this.sel_item3 = this.list[0].children[0].children[0];
  102. })
  103. },
  104. //获取楼层
  105. async getFloor(buildingId, i) {
  106. let {
  107. data
  108. } = await floor(buildingId)
  109. this.list[i].children = [];
  110. data.forEach(ite => {
  111. this.list[i].children.push(ite)
  112. })
  113. },
  114. //获取房间
  115. async getRoom(roomId, i, j) {
  116. let {
  117. data
  118. } = await room(roomId)
  119. this.list[i].children[j].children = [];
  120. data.forEach(ite => {
  121. this.list[i].children[j].children.push(ite)
  122. })
  123. },
  124. //获取房间所有设备
  125. async getTotleDevice(roomId, page, size) {
  126. page || (page = 1)
  127. size || (size = 10)
  128. let {
  129. data
  130. } = await device({
  131. roomId,
  132. page,
  133. size
  134. })
  135. this.tabArr = data.list;
  136. },
  137. // 选择框确认(回调参数为包含多个元素的数组,每个元素分别反应每一列的选择情况)
  138. confirm(e) {
  139. this.sel_item1 = e[0].label;
  140. this.sel_item2 = e[1].label;
  141. this.sel_item3 = e[2]
  142. this.getTotleDevice(e[2].value);
  143. },
  144. //懒加载
  145. lower() {
  146. this.getTotleDevice(this.sel_item3, this.scrollnum, 10);
  147. this.scrollnum += 1;
  148. },
  149. }
  150. }
  151. </script>
  152. <style lang="scss">
  153. .container {
  154. display: flex;
  155. flex-direction: column;
  156. align-items: center;
  157. width: 100%;
  158. height: 100%;
  159. background-color: #FFFFFF;
  160. }
  161. .sel_point {
  162. display: flex;
  163. justify-content: flex-start;
  164. align-items: center;
  165. width: 690rpx;
  166. height: 30rpx;
  167. margin: 29rpx 0 38rpx 0;
  168. text-align: left;
  169. }
  170. .sel_field {
  171. margin-right: 30rpx;
  172. font-size: 28rpx;
  173. font-family: Microsoft YaHei-3970(82674968);
  174. font-weight: 400;
  175. color: #333333;
  176. text-indent: 10rpx;
  177. }
  178. .triangle {
  179. margin-top: 10rpx;
  180. display: inline-block;
  181. /* Base Style */
  182. border: solid 10rpx transparent;
  183. border-top-color: #808080;
  184. }
  185. .content {
  186. display: flex;
  187. flex-direction: column;
  188. justify-content: flex-start;
  189. align-items: center;
  190. width: 690rpx;
  191. height: 100%;
  192. background: #FFFFFF;
  193. box-shadow: 0px 0px 24px 0px rgba(6, 0, 1, 0.1);
  194. border-radius: 10px 10px 0px 0px;
  195. overflow: hidden;
  196. .table_hed {
  197. width: 690rpx;
  198. height: 70rpx;
  199. background: #EBF8FF;
  200. }
  201. .table_cell,
  202. .table_cell_h {
  203. display: flex;
  204. justify-content: space-around;
  205. align-items: center;
  206. width: 630rpx;
  207. height: 70rpx;
  208. margin: 0 auto;
  209. border-bottom: solid 1rpx #E6E6E6;
  210. span {
  211. width: 140rpx;
  212. font-size: 28rpx;
  213. font-family: Microsoft YaHei-3970(82674968);
  214. font-weight: 400;
  215. color: #333333;
  216. text-align: center;
  217. }
  218. }
  219. .table_cell span {
  220. max-width: 140rpx;
  221. overflow: hidden;
  222. white-space: nowrap;
  223. text-overflow: ellipsis;
  224. }
  225. .table_cell_h {
  226. border-bottom: none;
  227. }
  228. .scroll-Y {
  229. height: calc( 100vh - 180rpx );
  230. width: 690rpx;
  231. }
  232. }
  233. </style>