StnmDialog.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. <template>
  2. <div class="stnm-diglog" v-drag v-if="props.showStnmDialog">
  3. <div class="stnm-dialog-title">
  4. <span>{{dialogTitle}}</span>
  5. <img src="@/assets/yujing/img/close.png" @click="closeDialog"/>
  6. </div>
  7. <el-form ref="stnmDialogFormRef" :model="dialogForm" :inline="true" style="margin-left: 10px;">
  8. <el-form-item label="时间范围:"
  9. v-if="dialogType == 'stnm'"
  10. >
  11. <el-date-picker
  12. v-model="dialogForm.daterange"
  13. value-format="YYYY-MM-DD"
  14. type="daterange"
  15. range-separator="至"
  16. start-placeholder="开始时间"
  17. end-placeholder="结束时间"
  18. clearable
  19. size="small"
  20. />
  21. </el-form-item>
  22. <el-form-item label="监测日期:"
  23. v-if="dialogType == 'river'"
  24. >
  25. <el-date-picker
  26. v-model="dialogForm.tm"
  27. value-format="YYYY-MM-DD"
  28. type="date"
  29. placeholder="请输入监测日期"
  30. clearable
  31. size="small"
  32. />
  33. </el-form-item>
  34. <el-form-item label="监测指标:"
  35. v-if="dialogType == 'river'"
  36. >
  37. <el-select-v2
  38. v-model="dialogForm.region"
  39. placeholder="请选择监测指标"
  40. :options="regionOptions"
  41. style="width: 150px;"
  42. size="small"
  43. />
  44. </el-form-item>
  45. <el-form-item label="编码:"
  46. v-if="dialogType == 'river'"
  47. >
  48. <el-input v-model="dialogForm.stcd" placeholder="请输入编码" size="small"/>
  49. </el-form-item>
  50. <el-form-item>
  51. <el-button type="primary" size="small" @click="handleSearch">查询</el-button>
  52. <el-button type="primary" size="small" @click="handelExport">导出</el-button>
  53. </el-form-item>
  54. </el-form>
  55. <div id="elementChart"></div>
  56. <div class="stnm-dialog-table">
  57. <el-table
  58. :data="stnmDialogData"
  59. border
  60. stripe
  61. style="width: 100%"
  62. :height="heightAll"
  63. :header-cell-style="{
  64. background: '#d2eafa !important',
  65. fontSize: '12px'
  66. }"
  67. >
  68. <el-table-column type="index" width="60" fixed="left" align="center"/>
  69. <el-table-column prop="tm" label="监测日期" width="120" align="center"/>
  70. <el-table-column prop="tm" label="溶解氧(mg/L)" width="120" align="center"/>
  71. <el-table-column prop="tm" label="高锰酸盐指数(mg/L)" width="160" align="center"/>
  72. <el-table-column prop="tm" label="氨氮(mg/L)" width="120" align="center"/>
  73. <el-table-column prop="tm" label="总磷(mg/L)" width="120" align="center"/>
  74. <el-table-column prop="tm" label="总氮(mg/L)" width="120" align="center"/>
  75. <el-table-column prop="tm" label="二甲基异莰醇(mg/L)" width="160" align="center"/>
  76. <el-table-column prop="tm" label="氯化物(mg/L)" width="120" align="center"/>
  77. <el-table-column prop="tm" label="锑(μg/L)" width="120" align="center"/>
  78. <el-table-column prop="tm" label="二氯甲炕(mg/L)" width="120" align="center"/>
  79. <el-table-column prop="tm" label="蓝藻密度(mg/L)" width="120" align="center"/>
  80. <el-table-column prop="tm" label="绿藻密度(mg/L)" width="120" align="center"/>
  81. <el-table-column prop="tm" label="叶绿素a(mg/L)" width="120" align="center"/>
  82. <el-table-column prop="tm" label="总有机碳(mg/L)" width="120" align="center"/>
  83. <el-table-column prop="tm" label="水温(mg/L)" width="120" align="center"/>
  84. </el-table>
  85. <el-pagination
  86. v-model:current-page="pagination.currentPage"
  87. v-model:page-size="pagination.pageSize"
  88. :size="pagination.size"
  89. :total="pagination.totalCount"
  90. :disabled=false
  91. background
  92. layout="total, prev, pager, next, jumper"
  93. @size-change="handleSizeChange"
  94. @current-change="handleCurrentChange"
  95. />
  96. </div>
  97. </div>
  98. </template>
  99. <script setup>
  100. import * as echarts from "echarts";
  101. const emit = defineEmits(['close-dialog']);
  102. const props = defineProps({
  103. showStnmDialog:{type: Boolean},
  104. stnmData:{type:Object},
  105. closeDialog:{type:Function}
  106. });
  107. const dialogVisible = ref(false);
  108. const dialogTitle = ref("");
  109. const dialogType = ref("");
  110. const dialogForm = ref({
  111. daterange: [],
  112. tm: "",
  113. region: "t",
  114. stcd:""
  115. })
  116. const regionOptions = [
  117. {label:"高锰酸盐指数(mg/L)",value:'codmn'},
  118. {label:"总磷(mg/L)",value:'tp'},
  119. {label:"总氮(mg/L)",value:'tn'},
  120. {label:"氨氮(mg/L)",value:'nh4'},
  121. {label:"溶解氧(mg/L)",value:'cod'},
  122. {label:"锑(μg/L)",value:'t'},
  123. {label:"二氯甲炕(mg/L)",value:'cas'},
  124. {label:"蓝藻数量(万个/L)",value:'algaeDensity'},
  125. {label:"电导率(μS/cm)",value:'ec'},
  126. {label:"二甲基异莰醇(mg/L)",value:'methy'},
  127. {label:"氯化物(mg/L)",value:'na'},
  128. ];
  129. const elementChart = ref(null);
  130. const heightAll = 30.8 + 'vh';
  131. const stnmDialogData = ref([]);
  132. const pagination = ref({
  133. currentPage: 1,
  134. pageSize: 10,
  135. totalCount: 0,
  136. });
  137. onMounted(() => {
  138. });
  139. watch(() => props.showStnmDialog, (newVal) => {
  140. if (newVal) {
  141. dialogVisible.value = newVal;
  142. nextTick(() => {
  143. initZheChart();
  144. });
  145. }
  146. });
  147. watch(() => props.stnmData, (newVal) => {
  148. if (newVal) {
  149. dialogTitle.value = newVal.type == 'stnm'
  150. ? `${newVal.stnm}监测数据信息`
  151. : `${newVal.river}各测站沿程监测数据信息`;
  152. dialogType.value = newVal.type;
  153. }
  154. });
  155. // 查询
  156. const handleSearch = () => {};
  157. // 导出
  158. const handelExport = () => {};
  159. // 元素折线图
  160. const initZheChart = () => {
  161. const option = {
  162. tooltip: {
  163. trigger: 'axis'
  164. },
  165. legend: {
  166. data: ['Email', 'Union Ads', 'Video Ads', 'Direct', 'Search Engine']
  167. },
  168. grid: {
  169. left: '3%',
  170. right: '4%',
  171. bottom: '3%',
  172. containLabel: true
  173. },
  174. toolbox: {
  175. feature: {
  176. saveAsImage: {}
  177. }
  178. },
  179. xAxis: {
  180. type: 'category',
  181. boundaryGap: false,
  182. data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
  183. },
  184. yAxis: {
  185. type: 'value'
  186. },
  187. series: [
  188. {
  189. name: 'Email',
  190. type: 'line',
  191. stack: 'Total',
  192. data: [120, 132, 101, 134, 90, 230, 210]
  193. },
  194. {
  195. name: 'Union Ads',
  196. type: 'line',
  197. stack: 'Total',
  198. data: [220, 182, 191, 234, 290, 330, 310]
  199. },
  200. {
  201. name: 'Video Ads',
  202. type: 'line',
  203. stack: 'Total',
  204. data: [150, 232, 201, 154, 190, 330, 410]
  205. },
  206. {
  207. name: 'Direct',
  208. type: 'line',
  209. stack: 'Total',
  210. data: [320, 332, 301, 334, 390, 330, 320]
  211. },
  212. {
  213. name: 'Search Engine',
  214. type: 'line',
  215. stack: 'Total',
  216. data: [820, 932, 901, 934, 1290, 1330, 1320]
  217. }
  218. ]
  219. };
  220. elementChart.value = echarts.init(document.getElementById('elementChart'));
  221. elementChart.value.setOption(option);
  222. };
  223. const handleSizeChange = (val) => {
  224. pagination.value.pageSize = val;
  225. }
  226. const handleCurrentChange = (val) => {
  227. pagination.value.currentPage = val;
  228. }
  229. const closeDialog = () => {
  230. dialogVisible.value = false;
  231. emit('close-dialog', dialogVisible.value);
  232. }
  233. </script>
  234. <style scoped lang="scss">
  235. .stnm-diglog{
  236. z-index: 999;
  237. position: absolute;
  238. top: 10%;
  239. left: 10%;
  240. height: 80%;
  241. width: 80%;
  242. background: #fff;
  243. border-radius: 5px;
  244. box-shadow: 0 0 8px #909399;/* x 偏移量 | y 偏移量 | 阴影模糊半径 | 阴影颜色 */
  245. .stnm-dialog-title{
  246. width: 100%;
  247. height: 32px;
  248. background: url("@/assets/images/lefttitle-bg.png");
  249. background-size: 100% 100%;
  250. border-radius: 5px 5px 0 0;
  251. position: relative;
  252. span{
  253. color: #fff;
  254. font-size: 14px;
  255. line-height: 32px;
  256. margin-left: 20px;
  257. }
  258. img{
  259. height: 18px;
  260. width: 18px;
  261. position: absolute;
  262. top: 7px;
  263. right: 10px;
  264. cursor: pointer;
  265. }
  266. }
  267. .shuizhiform-top-left{
  268. width: 100%;
  269. display: flex;
  270. }
  271. }
  272. #elementChart{
  273. width: 100%;
  274. height: 40%;
  275. }
  276. .stnm-dialog-table{
  277. width: 98%;
  278. margin: 0 auto;
  279. }
  280. </style>