manageWorkbench.vue 9.4 KB

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