index.vue 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <template>
  2. <div class="hum-page-container">
  3. <div class="hum-page-title">水位时间</div>
  4. <div class="hum-page-section hum-page-section-search">
  5. <div class="hum-page-search">
  6. <el-form :model="queryParams" size="large" ref="queryForm" label-position="top">
  7. <el-row :gutter="30">
  8. <el-col :span="6">
  9. <el-form-item label="选择站点">
  10. <SiteSelector @change="id => queryParams.siteId = id" />
  11. </el-form-item>
  12. </el-col>
  13. <el-col :span="6">
  14. <el-form-item label="选择类型">
  15. <el-select :value="queryParams.type" placeholder="请选择类型" @change="typeChangeHandler">
  16. <el-option
  17. v-for="item in typeOptions"
  18. :key="item.value"
  19. :label="item.label"
  20. :value="item.value">
  21. </el-option>
  22. </el-select>
  23. </el-form-item>
  24. </el-col>
  25. <el-col :span="12">
  26. <el-form-item label="选择日期">
  27. <el-date-picker
  28. v-model="dateRange"
  29. @change="dateRangeChangeHandler"
  30. value-format="yyyy-MM-dd hh:mm:ss"
  31. type="daterange"
  32. range-separator="-"
  33. start-placeholder="开始日期"
  34. end-placeholder="结束日期"
  35. :clearable="false"
  36. />
  37. </el-form-item>
  38. </el-col>
  39. <el-col :span="6">
  40. <el-form-item class="hum-page-search-action">
  41. <el-button type="primary" @click="handleQuery">查询</el-button>
  42. <el-button @click="resetQuery">重置</el-button>
  43. </el-form-item>
  44. </el-col>
  45. </el-row>
  46. </el-form>
  47. </div>
  48. </div>
  49. <div class="hum-page-title" style="margin-top: 30px">
  50. <span>数据图</span>
  51. <div class="data-actions">
  52. <el-radio-group v-model="mode" size="mini" class="data-actions-radio">
  53. <el-radio-button label="chart">图标</el-radio-button>
  54. <el-radio-button label="table">表格</el-radio-button>
  55. </el-radio-group>
  56. <el-button type="primary" size="mini" @click="handleExport">导出</el-button>
  57. </div>
  58. </div>
  59. <div class="hum-page-section">
  60. <Chart ref="chart" v-if="mode === 'chart'" :queryParams="queryParams" />
  61. <Table ref="table" v-if="mode === 'table'" :queryParams="queryParams" />
  62. </div>
  63. </div>
  64. </template>
  65. <script>
  66. import { parseTime } from '@/utils/ruoyi'
  67. import SiteSelector from '@/components/SiteSelector';
  68. import Chart from './chart'
  69. import Table from './table'
  70. const initDateRangeByType = (type) => {
  71. const start = new Date();
  72. const end = new Date();
  73. switch (type) {
  74. case 1:
  75. start.setDate(start.getDate() - 1);
  76. return [parseTime(start), parseTime(end)];
  77. case 2:
  78. start.setDate(start.getDate() - 2);
  79. return [parseTime(start), parseTime(end)];
  80. case 3:
  81. start.setDate(start.getDate() - 3);
  82. return [parseTime(start), parseTime(end)];
  83. case 4:
  84. start.setDate(start.getDate() - 4);
  85. return [parseTime(start), parseTime(end)];
  86. case 5:
  87. start.setMonth(start.getMonth() - 1);
  88. return [parseTime(start), parseTime(end)];
  89. case 6:
  90. start.setMonth(start.getMonth() - 3);
  91. return [parseTime(start), parseTime(end)];
  92. case 7:
  93. start.setFullYear(start.getFullYear() - 1);
  94. return [parseTime(start), parseTime(end)];
  95. }
  96. }
  97. export default {
  98. components: {
  99. SiteSelector,
  100. Chart,
  101. Table,
  102. },
  103. data() {
  104. const dateRange = initDateRangeByType(1);
  105. return {
  106. dateRange: dateRange,
  107. queryParams: {
  108. siteId: 0,
  109. type: 1,
  110. startTime: dateRange[0],
  111. endTime: dateRange[1],
  112. },
  113. mode: 'chart',
  114. loading: true,
  115. typeOptions: [
  116. { value: 1, label: '5分钟' },
  117. { value: 2, label: '10分钟' },
  118. { value: 3, label: '30分钟' },
  119. { value: 4, label: '小时' },
  120. { value: 5, label: '天' },
  121. { value: 6, label: '周' },
  122. { value: 7, label: '月' },
  123. ]
  124. }
  125. },
  126. methods: {
  127. handleQuery() {
  128. if (this.mode === 'chart') {
  129. this.$refs.chart.setOptions()
  130. } else {
  131. this.$refs.table.getList()
  132. }
  133. },
  134. resetQuery() {
  135. const dateRange = initDateRangeByType(1);
  136. this.dateRange = dateRange
  137. this.queryParams.type = 1
  138. this.queryParams.startTime = dateRange[0]
  139. this.queryParams.endTime = dateRange[1]
  140. },
  141. dateRangeChangeHandler(dateRange) {
  142. this.queryParams.startTime = dateRange[0];
  143. this.queryParams.endTime = dateRange[1];
  144. },
  145. typeChangeHandler(type) {
  146. const dateRange = initDateRangeByType(type);
  147. this.dateRange = dateRange;
  148. this.queryParams.type = type;
  149. this.queryParams.startTime = dateRange[0];
  150. this.queryParams.endTime = dateRange[1];
  151. },
  152. handleExport() {
  153. window.open(`${process.env.VUE_APP_BASE_API}/achievement/downWaterLevel?siteId=${this.queryParams.siteId}&type=${this.queryParams.type}&startTime=${this.queryParams.startTime}&endTime=${this.queryParams.endTime}`, '_blank')
  154. }
  155. }
  156. }
  157. </script>
  158. <style scoped>
  159. .hum-page-section-search {
  160. padding-bottom: 0;
  161. }
  162. .hum-page-search {
  163. border-bottom: 0;
  164. }
  165. .data-actions {
  166. display: flex;
  167. align-items: center;
  168. }
  169. .data-actions-radio {
  170. margin-right: 20px;
  171. }
  172. .data-actions-radio /deep/ .el-radio-button__orig-radio:checked + .el-radio-button__inner {
  173. color: #06A3B5;
  174. background: #FFFFFF;
  175. border: 1px solid #DCDFE6;
  176. box-shadow: none;
  177. }
  178. </style>