left.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  1. <template>
  2. <BasePanelLeft>
  3. <div class="hydrologic-container">
  4. <BaseMain title="水文监测点总览">
  5. <template v-slot:headerR>
  6. <el-radio-group v-model="dateVal" size="mini" class="dateRadio">
  7. <el-radio-button label="1">近7日</el-radio-button>
  8. <el-radio-button label="2">近30日</el-radio-button>
  9. <el-radio-button label="3">近3个月</el-radio-button>
  10. </el-radio-group>
  11. </template>
  12. <template v-slot:mainArea>
  13. <div class="main-container">
  14. <div class="sector-info">
  15. <div class="img">
  16. <img src="@/assets/image/hydrologic/sectorBg.png" />
  17. <div class="val">
  18. <span>0.0</span>
  19. <span>2</span>
  20. </div>
  21. </div>
  22. <div class="info">
  23. <div class="row">
  24. <div class="col">在线率:</div>
  25. <div class="col bg"><span>2个</span><span>100%</span></div>
  26. </div>
  27. <div class="row">
  28. <div class="col">设备总数:</div>
  29. <div class="col">2个</div>
  30. </div>
  31. <div class="row">
  32. <div class="col">离线数:</div>
  33. <div class="col">2个</div>
  34. </div>
  35. </div>
  36. </div>
  37. <div class="progress-content">
  38. <div class="progress-item" v-for="item in progressList" :key="item.id">
  39. <div class="progress-item-text">
  40. <span>{{ item.name }}</span>
  41. <span
  42. >{{ item.value }}<span class="green"> / {{ item.total }}</span></span
  43. >
  44. </div>
  45. <el-progress size="large" :percentage="item.percentage" color="#4183D3" :show-text="false" define-back-color="#213F61" :stroke-width="10"></el-progress>
  46. </div>
  47. </div>
  48. </div>
  49. </template>
  50. </BaseMain>
  51. <BaseMain title="水文监测点信息">
  52. <template v-slot:mainArea>
  53. <div class="sw-container">
  54. <ScrollPanel>
  55. <ul>
  56. <li class="li-item" v-for="(item, index) in [...swList, ...swList]" :key="index">
  57. <div class="item">
  58. <div class="titile">
  59. <div>{{ item.title }}</div>
  60. <div class="btn"></div>
  61. </div>
  62. <div class="content">
  63. <img :src="item.url" />
  64. <div class="info">
  65. <div>监测指标:{{ item.indicator }}</div>
  66. <div>监测点位置:{{ item.address }}</div>
  67. <div>
  68. 在线状态:<span class="green">{{ item.status }}</span>
  69. </div>
  70. </div>
  71. </div>
  72. </div>
  73. </li>
  74. </ul>
  75. </ScrollPanel>
  76. </div>
  77. </template>
  78. </BaseMain>
  79. <BaseMain title="今日气象监测">
  80. <template v-slot:mainArea>
  81. <div class="qx-container">
  82. <div class="qx-content">
  83. <div class="qx-item" v-for="(item, index) in qxList" :key="index">
  84. <img :src="item.img" alt="" class="img1" />
  85. <img src="@/assets/image/hydrologic/lj.png" alt="" class="img2" />
  86. <div class="txt-val">
  87. <div class="txt" :style="{ backgroundColor: item.bgColor, borderColor: item.borderColor }">{{ item.txt }}</div>
  88. <div class="val">{{ item.val }}</div>
  89. </div>
  90. </div>
  91. </div>
  92. </div>
  93. </template>
  94. </BaseMain>
  95. </div>
  96. </BasePanelLeft>
  97. </template>
  98. <script>
  99. import BasePanelLeft from '@/components/base-panel/base-panel-left'
  100. import BaseMain from '@/components/base-main/base-main.vue'
  101. import imgUrl from '@/assets/image/hydrologic/imgT.png'
  102. import ScrollPanel from '@/components/scroll-panel/index.vue'
  103. import iconUrl1 from '@/assets/image/hydrologic/icon5.png'
  104. import iconUrl2 from '@/assets/image/hydrologic/icon6.png'
  105. import iconUrl3 from '@/assets/image/hydrologic/icon4.png'
  106. import iconUrl4 from '@/assets/image/hydrologic/icon1.png'
  107. import iconUrl5 from '@/assets/image/hydrologic/icon3.png'
  108. import iconUrl6 from '@/assets/image/hydrologic/icon2.png'
  109. import {getAirNow} from '@/api/largeScreenApi'
  110. export default {
  111. data() {
  112. return {
  113. dateVal: 1,
  114. progressList: [
  115. { id: 1, name: '降雨', value: 2, total: 2, percentage: 50, color: '#4183D3' },
  116. { id: 2, name: '水位', value: 2, total: 2, percentage: 50, color: '#FCD294' },
  117. { id: 3, name: '流量', value: 2, total: 2, percentage: 50, color: '#4183D3' },
  118. { id: 4, name: '流速', value: 2, total: 2, percentage: 50, color: '#4183D3' }
  119. ],
  120. swList: [
  121. {
  122. id: 1,
  123. title: '水文监测点详情',
  124. indicator: '降雨、水位、流量、流速',
  125. address: '兴平市合家庄东沿河堤路100米',
  126. status: '在线',
  127. url: imgUrl
  128. },
  129. {
  130. id: 2,
  131. title: '水文监测点详情',
  132. indicator: '降雨、水位、流量、流速',
  133. address: '兴平市合家庄东沿河堤路100米',
  134. status: '在线',
  135. url: imgUrl
  136. }
  137. ],
  138. qxList: [
  139. {
  140. img: iconUrl1,
  141. bgColor: '#FF6B6B4C',
  142. borderColor: '#FF6B6B',
  143. txt: '高温',
  144. val: '36℃'
  145. },
  146. {
  147. img: iconUrl2,
  148. bgColor: '#3E92FF4C',
  149. borderColor: '#3E92FF',
  150. txt: '低温',
  151. val: '20℃'
  152. },
  153. {
  154. img: iconUrl3,
  155. bgColor: '##FBC5754C',
  156. borderColor: '#FBC575',
  157. txt: 'PM值',
  158. val: '10μm'
  159. },
  160. {
  161. img: iconUrl4,
  162. bgColor: '#34F5F74C',
  163. borderColor: '#34F5F7',
  164. txt: '风级',
  165. val: '5级'
  166. },
  167. {
  168. img: iconUrl5,
  169. bgColor: '#3883E34C',
  170. borderColor: '#3883E3',
  171. txt: '日出',
  172. val: '05:00'
  173. },
  174. {
  175. img: iconUrl6,
  176. bgColor: '#FBC5754C',
  177. borderColor: '#FBC575',
  178. txt: '日落',
  179. val: '19:00'
  180. }
  181. ]
  182. }
  183. },
  184. components: {
  185. BasePanelLeft,
  186. BaseMain,
  187. ScrollPanel
  188. },
  189. mounted(){
  190. this.getAirInfo()
  191. },
  192. methods:{
  193. getAirInfo(){
  194. getAirNow({adcode:'610481'}).then((res)=>{
  195. console.info(res)
  196. })
  197. }
  198. }
  199. }
  200. </script>
  201. <style lang="scss" scoped>
  202. .hydrologic-container {
  203. position: absolute;
  204. top: px-to-rem(30);
  205. z-index: 1;
  206. left: px-to-rem(-4);
  207. .dateRadio {
  208. :deep(.el-radio-button__inner) {
  209. background: transparent;
  210. color: #4f9fff;
  211. border-color: #4f9fff;
  212. font-size: px-to-rem(14);
  213. font-weight: 400;
  214. padding: px-to-rem(5);
  215. }
  216. :deep(.el-radio-button__orig-radio:checked + .el-radio-button__inner) {
  217. background-color: rgba(79, 159, 255, 0.8);
  218. font-weight: 400;
  219. color: #f2f6ff;
  220. }
  221. }
  222. .main-container {
  223. padding: px-to-rem(22) px-to-rem(14);
  224. .sector-info {
  225. display: flex;
  226. justify-content: space-between;
  227. img {
  228. width: px-to-rem(133);
  229. height: px-to-rem(74);
  230. }
  231. .img {
  232. .val {
  233. display: flex;
  234. justify-content: space-between;
  235. font-weight: 500;
  236. font-size: px-to-rem(14);
  237. color: #ffffff;
  238. margin-top: px-to-rem(-8);
  239. }
  240. }
  241. .info {
  242. width: calc(100% - px-to-rem(143));
  243. font-weight: 500;
  244. font-size: px-to-rem(14);
  245. color: #ffffff;
  246. .row {
  247. display: flex;
  248. justify-content: space-between;
  249. align-items: center;
  250. margin-bottom: px-to-rem(9);
  251. .col span {
  252. font-weight: bold;
  253. font-size: px-to-rem(16);
  254. color: #0dc985;
  255. &:first-child {
  256. margin-right: px-to-rem(19);
  257. }
  258. }
  259. .bg {
  260. background: url('@/assets/image/hydrologic/bg.png') no-repeat 0 0 / 100% 100%;
  261. width: px-to-rem(121);
  262. text-align: center;
  263. }
  264. }
  265. }
  266. }
  267. .progress-content {
  268. display: flex;
  269. justify-content: space-between;
  270. margin-top: px-to-rem(10);
  271. flex-wrap: wrap;
  272. .progress-item {
  273. display: flex;
  274. flex-direction: column;
  275. margin-bottom: px-to-rem(10);
  276. flex-basis: calc(50% - px-to-rem(14));
  277. .progress-item-text {
  278. display: flex;
  279. justify-content: space-between;
  280. margin-bottom: px-to-rem(4);
  281. span {
  282. font-size: px-to-rem(16);
  283. color: #fff;
  284. }
  285. .green {
  286. color: #0dc985;
  287. }
  288. }
  289. }
  290. }
  291. }
  292. .sw-container {
  293. padding: px-to-rem(10);
  294. height: px-to-rem(250);
  295. .li-item {
  296. .item {
  297. background: rgba(79, 159, 255, 0.2);
  298. border-radius: px-to-rem(4);
  299. border: px-to-rem(1) solid #4f9fff;
  300. padding: px-to-rem(6);
  301. margin-bottom: px-to-rem(6);
  302. .titile {
  303. display: flex;
  304. justify-content: space-between;
  305. font-weight: bold;
  306. font-size: px-to-rem(16);
  307. color: #ffffff;
  308. margin-bottom: px-to-rem(10);
  309. .btn {
  310. width: px-to-rem(10);
  311. height: px-to-rem(10);
  312. border-color: #407ed5;
  313. border-style: solid;
  314. border-width: 0px 2px 2px 0px;
  315. transform: rotate(-45deg);
  316. }
  317. }
  318. .content {
  319. display: flex;
  320. gap: px-to-rem(9);
  321. justify-content: space-between;
  322. img {
  323. width: px-to-rem(100);
  324. height: px-to-rem(100);
  325. }
  326. .info {
  327. font-weight: 400;
  328. font-size: px-to-rem(14);
  329. color: #ffffff;
  330. vertical-align: middle;
  331. }
  332. .green {
  333. color: #0dc985;
  334. }
  335. .green::before {
  336. content: '•';
  337. margin-right: px-to-rem(8);
  338. color: #0dc985;
  339. }
  340. }
  341. }
  342. }
  343. }
  344. .qx-container {
  345. padding: px-to-rem(23) px-to-rem(21);
  346. .qx-content {
  347. display: flex;
  348. flex-wrap: wrap;
  349. justify-content: space-between;
  350. gap: px-to-rem(32);
  351. .qx-item {
  352. display: flex;
  353. justify-content: space-around;
  354. flex-basis: calc(50% - px-to-rem(30));
  355. align-items: center;
  356. .img1 {
  357. width: px-to-rem(54);
  358. height: px-to-rem(46);
  359. }
  360. .img2 {
  361. width: px-to-rem(6);
  362. height: px-to-rem(27);
  363. }
  364. .txt-val {
  365. font-weight: 400;
  366. font-size: px-to-rem(14);
  367. color: #ffffff;
  368. display: flex;
  369. flex-direction: column;
  370. justify-content: space-between;
  371. gap: px-to-rem(6);
  372. .txt {
  373. border: px-to-rem(1) solid;
  374. border-radius: px-to-rem(4);
  375. padding: px-to-rem(1) px-to-rem(8);
  376. }
  377. }
  378. }
  379. }
  380. }
  381. }
  382. </style>