Health6.vue 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. <template>
  2. <div class="health-6">
  3. <div class="header-info mg-b-16">
  4. <div class="selections">
  5. <div class="item" @click="tabSelect('1')" :class="{ active: type === '1' }">
  6. <i class="svg-icon svg-icon-sm">
  7. <svg-icon :svgid="'svg-wind-site'" />
  8. </i>
  9. <span>风场</span>
  10. </div>
  11. <div class="item" @click="tabSelect('2')" :class="{ active: type === '2' }">
  12. <i class="svg-icon svg-icon-sm">
  13. <svg-icon :svgid="'svg-h-project'" />
  14. </i>
  15. <span>项目</span>
  16. </div>
  17. </div>
  18. <div class="state">
  19. <div class="state-item green">
  20. <div class="dot "></div>
  21. <div class="text">良好数量:</div>
  22. <div class="value">999</div>
  23. </div>
  24. <div class="state-item purple">
  25. <div class="dot "></div>
  26. <div class="text">正常数量:</div>
  27. <div class="value">999</div>
  28. </div>
  29. <div class="state-item yellow">
  30. <div class="dot "></div>
  31. <div class="text">注意数量:</div>
  32. <div class="value">999</div>
  33. </div>
  34. <div class="state-item orange">
  35. <div class="dot "></div>
  36. <div class="text">严重数量:</div>
  37. <div class="value">999</div>
  38. </div>
  39. </div>
  40. </div>
  41. <row :type="'flex'" class="mg-b-16">
  42. <Col :span="8">
  43. <panel :title="'健康走势图'" :showLine="false">
  44. <dual-pie-chart :height="'250px'" />
  45. </panel>
  46. </Col>
  47. <Col :span="16">
  48. <panel :title="'矩阵'" :showLine="false">
  49. <div class="matrix">
  50. <div class="item green">1号</div>
  51. <div class="item purple">2号</div>
  52. <div class="item orange">3号</div>
  53. <div class="item" v-for="index of 150" :key="index">{{ index + 3 }}号</div>
  54. <div class="blank" v-for="index of 30" :key="index"></div>
  55. </div>
  56. </panel>
  57. </Col>
  58. </row>
  59. <div class="mg-b-16">
  60. <panel :title="'健康走势图'" :showLine="false">
  61. <bar-line-chart :lineData="[]" :height="'250px'" />
  62. </panel>
  63. </div>
  64. <div class="mg-b-16">
  65. <panel :title="'健康走势图'" :showLine="false">
  66. <normal-line-chart :height="'250px'" />
  67. </panel>
  68. </div>
  69. </div>
  70. </template>
  71. <script>
  72. import BarLineChart from "../../components/chart/combination/bar-line-chart.vue";
  73. import NormalLineChart from "../../components/chart/line/normal-line-chart.vue";
  74. import DualPieChart from "../../components/chart/pie/dual-pie-chart.vue";
  75. import Col from "../../components/coms/grid/col.vue";
  76. import Row from "../../components/coms/grid/row.vue";
  77. import SvgIcon from "../../components/coms/icon/svg-icon.vue";
  78. import Panel from "../../components/coms/panel/panel.vue";
  79. export default {
  80. setup() {},
  81. components: { SvgIcon, Panel, NormalLineChart, BarLineChart, Row, Col, DualPieChart },
  82. data() {
  83. return {
  84. type: '1',
  85. };
  86. },
  87. methods: {
  88. tabSelect(type) {
  89. this.type = type;
  90. },
  91. },
  92. };
  93. </script>
  94. <style lang="less">
  95. .health-6 {
  96. .header-info {
  97. display: flex;
  98. .selections {
  99. display: flex;
  100. flex: 0 0 200px;
  101. .item {
  102. flex: 0 0 80px;
  103. text-align: center;
  104. line-height: 33px;
  105. margin-right: 8px;
  106. color: @font-color;
  107. font-size: @fontsize-s;
  108. background: fade(@gray, 20);
  109. border: 1px solid fade(@gray, 20);
  110. display: flex;
  111. justify-content: center;
  112. align-items: center;
  113. i {
  114. margin-right: 8px;
  115. svg use {
  116. fill: @gray;
  117. }
  118. }
  119. &:hover,
  120. &.active {
  121. background: fade(@green, 20);
  122. border: 1px solid @green;
  123. color: @green;
  124. cursor: pointer;
  125. i svg use {
  126. fill: @green;
  127. }
  128. }
  129. }
  130. }
  131. .state {
  132. display: flex;
  133. .state-item {
  134. display: flex;
  135. height: 32px;
  136. align-items: center;
  137. .dot {
  138. width: 8px;
  139. height: 8px;
  140. margin-right: 8px;
  141. }
  142. .text {
  143. margin-left: 8px;
  144. }
  145. .value {
  146. height: 32px;
  147. line-height: 32px;
  148. background: fade(@gray, 20);
  149. padding: 0 16px;
  150. }
  151. &.green {
  152. .dot {
  153. background: @green;
  154. }
  155. }
  156. &.purple {
  157. .dot {
  158. background: @purple;
  159. }
  160. }
  161. &.yellow {
  162. .dot {
  163. background: @yellow;
  164. }
  165. }
  166. &.orange {
  167. .dot {
  168. background: @orange;
  169. }
  170. }
  171. & + .state-item {
  172. margin-left: 16px;
  173. }
  174. }
  175. }
  176. }
  177. .matrix {
  178. display: flex;
  179. flex-wrap: wrap;
  180. .item {
  181. flex: 1 0 calc(100% / 20 - 4px);
  182. line-height: 26px;
  183. background: fade(@gray, 20);
  184. color: @gray-l;
  185. font-size: 12px;
  186. margin-bottom: 4px;
  187. text-align: center;
  188. border: 1px solid transparent;
  189. & + .item {
  190. margin-left: 4px;
  191. }
  192. &:nth-child(20n + 1) {
  193. margin-left: 0px;
  194. }
  195. &.green {
  196. color: @green;
  197. background: fade(@green, 20);
  198. border-color: @green;
  199. }
  200. &.purple {
  201. color: @purple;
  202. background: fade(@purple, 20);
  203. border-color: @purple;
  204. }
  205. &.orange {
  206. color: @orange;
  207. background: fade(@orange, 20);
  208. border-color: @orange;
  209. }
  210. }
  211. .blank {
  212. flex: 1 0 calc(100% / 20 - 4px);
  213. margin-left: 4px;
  214. }
  215. }
  216. }
  217. </style>