manageWorkbench.vue 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. <!-- 管理端工作台 -->
  2. <template>
  3. <view class="manage-workbench" :style="{paddingTop:navHeight+'rpx'}">
  4. <nav-bar :title="title"></nav-bar>
  5. <img class="top-big-img" :src="homepageBanner">
  6. <top-warn></top-warn>
  7. <homeConfigurationSlot v-for="(item,index) in homeConfigData" :key="index" :homeConfig="item"></homeConfigurationSlot>
  8. <!--安全报警-->
  9. <view class="for-title-p" @click="goSecurityAlertList" v-if="alarmList[0]">
  10. <img class="left-img" src="@/images/basicsModules/icon_aqbj.png">
  11. <view class="name-view">安全报警</view>
  12. <view class="num-view">{{alarmList.length}}</view>
  13. <view class="null-view"></view>
  14. <img class="right-img" src="@/images/basicsModules/icon_04.png">
  15. </view>
  16. <view class="for-max-box" v-if="alarmList[0]">
  17. <view class="for-box" v-for="(item,index) in alarmList" :key="index">
  18. <view class="title-box">
  19. <view :style="'border:1rpx solid '+item.subDiyVo.fiedColor+';background:#fff;color:'+item.subDiyVo.fiedColor+';'">
  20. {{ item.subDiyVo.levelName }}
  21. </view>
  22. <view>{{ item.subDiyVo.name }}</view>
  23. </view>
  24. <view class="address-box"><span>{{ item.subDiyVo.typeName }}</span>{{ item.subDiyVo.deptName }}</view>
  25. <view class="address-box-two">
  26. <img src="@/images/basicsModules/icon_14.png">
  27. <view>{{ item.subDiyVo.subAddrrStr }}</view>
  28. </view>
  29. <view class="for-img-box">
  30. <view class="for-img-min-box" v-for="(minItem,index) in item.sensorSet" :key="index">
  31. <img src="@/images/basicsModules/icon_15.png">
  32. <view>{{ minItem }}</view>
  33. </view>
  34. </view>
  35. <view class="button-view" @click="laboratoryInfo(item)">查看详情</view>
  36. </view>
  37. </view>
  38. <!--我的实验室-->
  39. <view class="for-title-p">
  40. <img class="left-img" src="@/images/basicsModules/icon_sy_wdsys.png">
  41. <view class="name-view">我的实验室</view>
  42. </view>
  43. <view class="for-max-box">
  44. <img class="null-img" v-if="!dataList[0]" src="@/images/basicsModules/null-data-1.png">
  45. <view class="for-box" v-for="(item,index) in dataList" :key="index" @click="tableButton('subDetail',item)">
  46. <view class="title-box">
  47. <view :style="'border:1rpx solid '+item.levelColor+';background:#fff;color:'+item.levelColor+';'">
  48. {{ item.levelName }}
  49. </view>
  50. <view>{{ item.subName}}</view>
  51. <img src="@/images/basicsModules/icon_04.png">
  52. </view>
  53. <view class="address-box"><span>{{ item.typeName }}</span>{{ item.deptName }}</view>
  54. <view class="address-box-two">
  55. <img src="@/images/basicsModules/icon_14.png">
  56. <view>{{ item.buildName}} {{ item.floorName}} {{ item.subName}} {{ item.roomName}}</view>
  57. </view>
  58. </view>
  59. </view>
  60. <tab-bar></tab-bar>
  61. </view>
  62. </template>
  63. <script>
  64. import {getSafeWarnList, laboratoryAppletSubList,
  65. systemAppletLayoutSelect,laboratoryAppletGetSubDetailInfo
  66. } from '@/api/basicsModules/index.js'
  67. import {getHomeConfig} from '@/utils/homeConfig'
  68. // #ifdef MP-WEIXIN
  69. import {tabBar} from '@/component/tabBar.vue'
  70. import {topWarn} from '@/component/topWarn.vue'
  71. import {navBar} from '@/component/navbar.vue'
  72. import {homeConfigurationSlot} from '@/component/homeConfigurationSlot'
  73. // #endif
  74. export default {
  75. name: 'manageWorkbench',
  76. // #ifdef MP-WEIXIN
  77. components: {
  78. tabBar,
  79. topWarn,
  80. navBar,
  81. homeConfigurationSlot,
  82. },
  83. // #endif
  84. // #ifdef H5
  85. components: {
  86. "tabBar": () => import('@/component/tabBar.vue'),
  87. "topWarn": () => import('@/component/topWarn.vue'),
  88. "navBar": () => import('@/component/navbar.vue'),
  89. "homeConfigurationSlot": () => import('@/component/homeConfigurationSlot.vue'),
  90. },
  91. // #endif
  92. data() {
  93. return {
  94. homeConfigData: [],
  95. navHeight: uni.getStorageSync('navHeight'),
  96. title: '实验室安全智能监测与控制系统',
  97. //banner图片
  98. homepageBanner: uni.getStorageSync('homepageBanner'),
  99. subject_classData: [],
  100. securityAlertNum: "",
  101. //安全报警
  102. alarmList: [{
  103. subDiyVo:{
  104. levelName:'三大法师的',
  105. name:'111111',
  106. typeName:'sdfasfasd',
  107. subAddrrStr:'111111111111'
  108. },
  109. sensorSet:[
  110. 'voc监测数值异常'
  111. ]
  112. }],
  113. //实验室数据
  114. dataList: [],
  115. fanList: [],//控制记录触发方式
  116. // 查询参数
  117. queryParams: {
  118. page: 1,
  119. pageSize: 20,
  120. },
  121. safeWarnQueryParams:{
  122. page: 1,
  123. pageSize: 20,
  124. count: 0,
  125. groupStatus: 1,
  126. }
  127. }
  128. },
  129. created() {
  130. },
  131. mounted() {
  132. this.systemAppletLayoutSelect();
  133. this.laboratoryAppletSubList();
  134. //this.getSafeWarnList();
  135. },
  136. methods: {
  137. //获取菜单配置
  138. async systemAppletLayoutSelect() {
  139. const {data} = await systemAppletLayoutSelect({module: 'home'})
  140. if (data.code == 200) {
  141. let list = JSON.parse(JSON.stringify(data.data))
  142. for (let i = 0; i < list.length; i++) {
  143. list[i].layout = JSON.parse(list[i].layout);
  144. }
  145. this.$set(this, 'homeConfigData', getHomeConfig(list));
  146. }
  147. },
  148. //获取实验室列表
  149. async laboratoryAppletSubList() {
  150. let self = this;
  151. const {data} = await laboratoryAppletSubList(this.queryParams);
  152. if (data.code == 200) {
  153. this.$set(this,'dataList',data.data.records);
  154. }
  155. },
  156. //获取报警信息列表
  157. async getSafeWarnList() {
  158. const {data} = await getSafeWarnList(this.safeWarnQueryParams);
  159. if (data.code == 200) {
  160. this.alarmList = data.rows;
  161. if (data.rows[0]) {
  162. this.securityAlertNum = data.rows[0].todayHappenCount;
  163. } else {
  164. this.securityAlertNum = 0;
  165. }
  166. }
  167. },
  168. tableButton(type,row){
  169. let self = this;
  170. if(type == 'subDetail'){
  171. //实验室详情
  172. this.laboratoryAppletGetSubDetailInfo(row.infoId)
  173. }
  174. },
  175. //获取实验室详情
  176. async laboratoryAppletGetSubDetailInfo(infoId) {
  177. const {data} = await laboratoryAppletGetSubDetailInfo({infoId:infoId});
  178. if (data.code == 200) {
  179. uni.navigateTo({
  180. url: '/pages_manage/laboratory/infoPage?infoData='+encodeURIComponent(JSON.stringify(data.data))
  181. });
  182. }
  183. },
  184. },
  185. beforeDestroy() {
  186. }
  187. }
  188. </script>
  189. <style lang="stylus" scoped>
  190. .manage-workbench {
  191. height: 100%;
  192. width: 100%;
  193. overflow-y: scroll;
  194. box-sizing: border-box;
  195. .top-big-img {
  196. height: 342 rpx;
  197. width: 750 rpx;
  198. }
  199. /*安全报警和我的实验室头部*/
  200. .for-title-p{
  201. border-top-left-radius 20rpx
  202. border-top-right-radius 20rpx
  203. background #fff
  204. padding-left:25rpx;
  205. display flex
  206. margin:0 20rpx;
  207. border-bottom:1rpx solid #e0e0e0;
  208. .left-img{
  209. height:34rpx;
  210. width:34rpx;
  211. margin:22rpx 10rpx 0 0;
  212. }
  213. .name-view{
  214. line-height:77rpx;
  215. font-size:30rpx;
  216. color:#333;
  217. }
  218. .num-view{
  219. width:28rpx;
  220. height:28rpx;
  221. font-size:20rpx;
  222. background:#EE3A3A;
  223. border-radius:50%;
  224. text-align :center;
  225. line-height:24rpx;
  226. color:#fff;
  227. margin:26rpx 0 0 10rpx;
  228. }
  229. .null-view{
  230. flex:1;
  231. }
  232. .right-img{
  233. height:20rpx;
  234. width:10rpx;
  235. margin:28rpx 19rpx 0 0;
  236. }
  237. }
  238. /*我的实验室*/
  239. .for-max-box{
  240. margin:0 20rpx 120rpx;
  241. background: #fff
  242. overflow: hidden
  243. border-bottom-left-radius 20rpx
  244. border-bottom-right-radius 20rpx
  245. .null-img{
  246. display block
  247. width:276rpx;
  248. height:321rpx;
  249. margin:40rpx auto;
  250. }
  251. .for-box:nth-child(1){
  252. border-top:none;
  253. }
  254. .for-box{
  255. border-top:4rpx solid #dedede;
  256. overflow hidden
  257. background #ffffff
  258. margin-bottom:20rpx;
  259. .title-box{
  260. margin:20rpx 20rpx 0;
  261. display flex
  262. view:nth-child(1){
  263. height:40rpx;
  264. line-height:40rpx;
  265. font-size:20rpx;
  266. border-radius:10rpx;
  267. padding:0 20rpx;
  268. color:#fff;
  269. margin-right:20rpx;
  270. }
  271. view:nth-child(2){
  272. line-height:42rpx;
  273. font-size:30rpx;
  274. color:#333;
  275. max-width:600rpx;
  276. flex:1;
  277. }
  278. img{
  279. width:12rpx;
  280. height:20rpx;
  281. margin-top:11rpx;
  282. }
  283. .colorA{
  284. background:#aa2315;
  285. }
  286. .colorB{
  287. background:#ff9b09;
  288. }
  289. .colorC{
  290. background:#3ea3e9;
  291. }
  292. .colorD{
  293. background:#3ea34c;
  294. }
  295. }
  296. .address-box{
  297. margin:20rpx 20rpx;
  298. font-size:26rpx;
  299. color:#999999;
  300. span{
  301. margin-right:60rpx;
  302. }
  303. }
  304. .address-box-two{
  305. display flex
  306. margin:0 20rpx 20rpx 20rpx;
  307. img{
  308. width:28rpx;
  309. height:30rpx;
  310. margin-right:18rpx;
  311. }
  312. view{
  313. line-height:30rpx;
  314. font-size:24rpx;
  315. color:#999999;
  316. }
  317. }
  318. /*安全报警*/
  319. .for-img-box{
  320. border-top:1rpx solid #e0e0e0;
  321. margin:0 20rpx;
  322. .for-img-min-box{
  323. display flex
  324. img{
  325. width:30rpx;
  326. height:27rpx;
  327. margin-top:24rpx;
  328. margin-right:10rpx;
  329. }
  330. view{
  331. line-height:74rpx;
  332. text-align center
  333. font-size:28rpx;
  334. color:#EE3A3A;
  335. }
  336. }
  337. }
  338. .button-view{
  339. margin:0 20rpx;
  340. border-top:1rpx dashed #e0e0e0;
  341. line-height:90rpx;
  342. text-align :center;
  343. font-size:26rpx;
  344. color:#333;
  345. }
  346. }
  347. }
  348. }
  349. </style>