MaXueLi 2 өдөр өмнө
parent
commit
a2cf24158c

+ 14 - 14
ruoyi-ui/src/components/FolderTree.vue

@@ -10,21 +10,21 @@
       @node-click="handleNodeClick"
       :current-node-key="currentNodeKey"
     >
-    <template #default="{ node, data }">
-      <div class="custom-tree-node">
-        <div class="node-content">
-          <span class="node-icon">
-            <el-icon v-if="data.type === 'folder'">
-              <FolderOpened v-if="node.expanded" />
-              <Folder v-else />
-            </el-icon>
-            <el-icon v-else><Document /></el-icon>
-          </span>
-          <span class="node-label">{{ node.label }}</span>
+      <template #default="{ node, data }">
+        <div class="custom-tree-node">
+          <div class="node-content">
+            <span class="node-icon">
+              <el-icon v-if="data.type === 'folder'">
+                <!-- <FolderOpened v-if="node.expanded" /> -->
+                <Folder/>
+              </el-icon>
+              <el-icon v-else><Document /></el-icon>
+            </span>
+            <span class="node-label">{{ node.label }}</span>
+          </div>
         </div>
-      </div>
-    </template>
-  </el-tree>
+      </template>
+    </el-tree>
   </div>
 </template>
 

+ 30 - 28
ruoyi-ui/src/layoutEx/index.vue

@@ -39,31 +39,33 @@
     <div class="yjContent">
       <div class="contentLeft" :class="{ 'collapsed': !leftItem}" v-if="menuLeftValue != '首页'">
         <div class="leftMenu">
-          <el-menu
-            :default-active="activeMenu"
-            background-color="rgb(74, 147, 245)"
-            text-color="#fff"
-            :unique-opened="true"
-            :collapse="isCollapse"
-            :router="true"
-          >
-            <div class="leftTitle">
-              <template v-if="leftItem">{{ menuLeftValue }}
-                <img
-                  src="/src/assets/images/left.png"
-                  alt=""
-                  class="imgLeft"
-                  @click="imgLeftFn"/>
-              </template>
-              <template v-else>
-                <img
-                  src="/src/assets/images/right.png"
-                  alt=""
-                  @click="imgLeftFn"/>
-              </template>
-            </div>
-            <sidebar :menuItem="menuItem"/>
-          </el-menu>
+          <el-scrollbar :height="menuHeight">
+            <el-menu
+              :default-active="activeMenu"
+              background-color="rgb(74, 147, 245)"
+              text-color="#fff"
+              :unique-opened="true"
+              :collapse="isCollapse"
+              :router="true"
+            >
+              <div class="leftTitle">
+                <template v-if="leftItem">{{ menuLeftValue }}
+                  <img
+                    src="/src/assets/images/left.png"
+                    alt=""
+                    class="imgLeft"
+                    @click="imgLeftFn"/>
+                </template>
+                <template v-else>
+                  <img
+                    src="/src/assets/images/right.png"
+                    alt=""
+                    @click="imgLeftFn"/>
+                </template>
+              </div>
+              <sidebar :menuItem="menuItem"/>
+            </el-menu>
+          </el-scrollbar>
         </div>
       </div>
       <div class="contentRight" :class="{ 'collapsed': !leftItem }">
@@ -88,12 +90,11 @@ const isCollapse = ref(false);
 const menuLeftValue = ref(useRoute().meta.title);
 const menuList = staticMenuData[0].children;
 const menuItem = ref(null);
-const route = useRoute()
+const route = useRoute();
+const menuHeight = 90 + 'vh';
 
 const activeMenu = computed(() => {
   const { meta, path } = route;
-  console.log('route',route);
-  
   if (meta.activeMenu) {
     return meta.activeMenu
   }
@@ -226,6 +227,7 @@ function imgLeftFn() {
       .leftMenu {
         width: 100%;
         height: 100%;
+        background: #4a93f5
       }
       .leftTitle {
         width: 100%;

+ 16 - 4
ruoyi-ui/src/router/index.js

@@ -79,7 +79,7 @@ export const constantRoutes = [
         path: '/yujing/shouye',
         component: () => import('@/views/shouye/index'),
         name: 'shouye',
-        meta: { title: '首页'}
+        meta: { title: '首页'},
       },
       {
         path: '',
@@ -186,7 +186,7 @@ export const constantRoutes = [
       },
       {
         path: '',
-        name: 'zhiban',
+        name: 'water',
         meta: { title: '水功能区'},
         children:[
           {
@@ -216,11 +216,23 @@ export const constantRoutes = [
             ]
           },
           {
-            path: '/yujing/tongjifenxi',
+            path: '',
             meta: { title: '统计分析', icon: 'Setting'},
+            children:[
+              {
+                path: '/shuizhiyinzi',
+                component: () => import('@/views/water/tongjifenxi/shuizhiyinzi.vue'),
+                meta: { title: '水质因子分析', icon: 'Setting'},
+              },
+              {
+                path: '/shuizhibianhua',
+                component: () => import('@/views/water/tongjifenxi/shuizhibianhua.vue'),
+                meta: { title: '水质变化趋势', icon: 'Setting'},
+              },
+            ]
           },
           {
-            path: '//yujingshuigongneng',
+            path: '/yujing/shuigongneng',
             component: () => import('@/views/water/shuigongneng.vue'),
             meta: { title: '水功能区', icon: 'Setting'},
           },

+ 13 - 1
ruoyi-ui/src/router/staticMenuData.js

@@ -146,8 +146,20 @@ export const staticMenuData = [
             ]
           },
           {
-            path: '/yujing/tongjifenxi',
+            path: '',
             meta: { title: '统计分析', icon: 'Setting'},
+            children:[
+              {
+                path: '/shuizhiyinzi',
+                component: () => import('@/views/water/tongjifenxi/shuizhiyinzi.vue'),
+                meta: { title: '水质因子分析', icon: 'Setting'},
+              },
+              {
+                path: '/shuizhibianhua',
+                component: () => import('@/views/water/tongjifenxi/shuizhibianhua.vue'),
+                meta: { title: '水质变化趋势', icon: 'Setting'},
+              },
+            ]
           },
           {
             path: '/yujing/shuigongneng',

+ 196 - 0
ruoyi-ui/src/views/water/dontaipingjia.vue

@@ -0,0 +1,196 @@
+<template>
+  <div class="dtpj-index">
+  <el-form ref="dtpjFormRef" :model="dtpjForm" :inline="true" size="small" class="dtpj-form">
+    <el-form-item label="时间选择:">
+      <el-select v-model="dtpjForm.timeType" placeholder="请选择..." style="width: 60px;">
+        <el-option 
+          v-for="(item) in timeTypeList"
+          :key="item.value"
+          :label="item.label" 
+          :value="item.value" 
+        />
+      </el-select>
+    </el-form-item>
+    <el-form-item label="月份:" v-if="dtpjForm.timeType == 'month'">
+      <el-date-picker
+        v-model="dtpjForm.monthrange"
+        value-format="YYYY-DD"
+        type="monthrange"
+        range-separator="至"
+        start-placeholder="开始日期"
+        end-placeholder="结束日期"
+      />
+    </el-form-item>
+    <el-form-item label="年份:" v-if="dtpjForm.timeType == 'year'">
+      <el-col :span="10">
+        <el-date-picker
+          v-model="dtpjForm.startYear"
+          value-format="YYYY"
+          type="year"
+          placeholder="开始时间"
+          style="width: 90px"
+        />
+      </el-col>
+      <el-col class="text-center" :span="1" style="margin: 0 0.5rem">-</el-col>
+      <el-col :span="10">
+        <el-date-picker
+          v-model="dtpjForm.endYear"
+          value-format="YYYY"
+          type="year"
+          placeholder="结束时间"
+          style="width: 90px"
+        />
+      </el-col>
+    </el-form-item>
+    <el-form-item label="流域:" style="width: 10%;">
+      <el-select v-model="dtpjForm.liuyu" placeholder="请选择...">
+        <el-option 
+          v-for="(item) in liuYuList"
+          :key="item.value"
+          :label="item.label" 
+          :value="item.value" 
+        />
+      </el-select>
+    </el-form-item>
+    <el-form-item label="省份:" style="width: 10%;">
+      <el-select v-model="dtpjForm.province" placeholder="请选择...">
+        <el-option 
+          v-for="(item) in provinceList"
+          :key="item.value"
+          :label="item.label" 
+          :value="item.value" 
+        />
+      </el-select>
+    </el-form-item>
+    <el-form-item label="水功能区:" style="width: 10%;">
+      <el-select v-model="dtpjForm.waterFunc" placeholder="请选择...">
+        <el-option 
+          v-for="(item) in waterFuncList"
+          :key="item.value"
+          :label="item.label" 
+          :value="item.value" 
+        />
+      </el-select>
+    </el-form-item>
+    <el-form-item label="评价方法:" style="width: 10%;">
+      <el-select v-model="dtpjForm.evaluation" placeholder="请选择...">
+        <el-option 
+          v-for="(item) in evaluationList"
+          :key="item.value"
+          :label="item.label" 
+          :value="item.value" 
+        />
+      </el-select>
+    </el-form-item>
+    <el-form-item label="关键字:" style="width: 8%;">
+      <el-input v-model="dtpjForm.keyword" placeholder="关键字"/>
+    </el-form-item>
+    </el-form>
+    <div class="dtpj-content">
+      <div class="content-btns">
+        <el-button type="primary" size="small" @click="handleRefresh">刷新</el-button>
+        <el-button type="primary" size="small" @click="handleSearch">查询</el-button>
+        <el-button type="primary" size="small" @click="handleReset">重置</el-button>
+        <el-button type="primary" size="small" @click="handleAutoEva">自动评价</el-button>
+      </div>
+      <el-table 
+        :data="dtpjData" 
+        border 
+        stripe
+        style="width: 100%;" 
+        :height="heightAll" 
+        :header-cell-style="{
+          background: '#d2eafa !important',
+          fontSize: '12px'
+        }"
+      >
+        <el-table-column type="index" width="50"/>
+        <el-table-column prop="tm" label="名称" width="220"/>
+        <el-table-column prop="tm" label="所属流域" align="center" width="120"/>
+        <el-table-column prop="tm" label="起始断面" width="120"/>
+        <el-table-column prop="tm" label="终止断面" width="120"/>
+        <el-table-column prop="tm" label="水质目标" align="center" width="120"/>
+        <el-table-column prop="tm" label="评价时段" align="center" width="120"/>
+        <el-table-column prop="tm" label="评价日期" align="center" width="120"/>
+        <el-table-column prop="tm" label="评价结果" align="center" width="120"/>
+        <el-table-column prop="tm" label="达标情况" align="center" width="120"/>
+        <el-table-column prop="tm" label="超标项目及倍数"/>
+      </el-table>
+      <el-pagination
+        v-model:current-page="pagination.currentPage"
+        v-model:page-size="pagination.pageSize"
+        :size="pagination.size"
+        :total="pagination.totalCount"
+        :disabled=false
+        background
+        layout="total, prev, pager, next, jumper"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script setup>
+const dtpjForm = ref({
+  timeType:"month",
+  monthrange:[],
+  startYear:"",
+  endYear:"",
+  liuyu:"",
+  province:"",
+  evaluation:"",
+  keyword:""
+});
+const timeTypeList =[
+  {label:"月",value:"month"},
+  {label:"年",value:"year"},
+];
+const liuYuList = ref([]);
+const provinceList = ref([]);
+const waterFuncList = ref([]);
+const evaluationList = ref([]);
+const heightAll = 82 + 'vh';
+const dtpjData = ref([]);
+const pagination = ref({
+  currentPage: 1,
+  pageSize: 10,
+  totalCount: 0,
+});
+
+const handleRefresh = () => {};
+const handleSearch = () => {};
+const handleReset = () => {};
+const handleAutoEva = () => {};
+
+const handleSizeChange = (val) => {
+  pagination.value.pageSize = val;
+}
+const handleCurrentChange = (val) => {
+  pagination.value.currentPage = val;
+}
+</script>
+
+<style scoped lang="scss">
+.dtpj-index{
+  width: 99%;
+  height: 100%;
+  margin: auto;
+  .dtpj-form{
+    width: 100%;
+    padding: 5px 0;
+    .el-form-item{
+        margin-bottom: 0 !important;
+    }
+  }
+  .dtpj-content{
+    width: 100%;
+    border: 1px solid #DCDFE6;
+    .content-btns{
+      width: 99%;
+      margin: 5px auto;
+      position: relative;
+    }
+  }
+}
+</style>

+ 1 - 45
ruoyi-ui/src/views/water/index.vue

@@ -75,7 +75,7 @@
           @current-change="handleCurrentChange"
         />
       </div>
-     </div>
+    </div>
     <!-- 图例 -->
     <div class="jiance-tuli">
       <div class="tuli-title">图例</div>
@@ -161,50 +161,6 @@ const handleCurrentChange = (val) => {};
     height: 100%;
     width: 100%;
   }
-  .map-tools{
-    position: absolute;
-    top: 8%;
-    left: 1%;
-    width: 30px;
-    height: 80px;
-    display: flex;
-    flex-direction: column;
-    .map-tool-item{
-      width: 100%;
-      height: 30px;
-      background: rgba(255,255,255,0.9);
-      border-radius: 3px;
-      margin: 5px 0;
-      display:flex;
-      flex-direction: column;
-      justify-content: center;
-      align-items: center;
-      cursor: pointer;
-      img{
-        width: 18px;
-        height: 18px;
-      }
-    }
-    .map-tool-itemActive{
-      width: 100%;
-      height: 30px;
-      background: rgba(74, 147, 245,0.9);
-      border-radius: 3px;
-      margin: 5px 0;
-      display:flex;
-      flex-direction: column;
-      justify-content: center;
-      align-items: center;
-      cursor: pointer;
-      img{
-        width: 18px;
-        height: 18px;
-      }
-    }
-    .map-tool-item:hover{
-      background: rgba(74, 147, 245,0.9);
-    }
-  }
   .jiance-tuli{
     width: 180px;
     height: 180px;

+ 139 - 0
ruoyi-ui/src/views/water/shuigongneng.vue

@@ -0,0 +1,139 @@
+<template>
+  <div class="sgnq-index">
+    <!-- 右边栏 -->
+    <div class="sgnq-rightbox">
+      <el-form :model="form" label-width="auto" label-position="right" size="small" class="sgnq-form">
+				<div class="rightbox-title">
+					查询类型
+				</div>
+				<div class="rightbox-form-item">
+					<el-form-item>
+						<el-radio-group v-model="form.typeRadio">
+							<el-radio 
+								v-for="item in typeRadioList"
+								:key="item.value"
+								:value="item.value" 
+								style="width: 100%;"
+							>
+								{{ item.label }}
+							</el-radio>
+						</el-radio-group>
+					</el-form-item>
+				</div>
+				<div ></div>
+				<div class="rightbox-title">
+					展示类型
+				</div>
+				<div class="rightbox-form-item">
+					<el-form-item>
+						<el-radio-group v-model="form.tableChart">
+							<el-radio value="chart">图表</el-radio>
+							<el-radio value="table">表格</el-radio>
+						</el-radio-group>
+					</el-form-item>
+				</div>
+				<div class="rightbox-title">
+					查询条件
+				</div>
+				<div class="rightbox-form-item">
+					<el-form-item label="水功能区:" style="margin-top: 10px;">
+						<el-select v-model="form.water" placeholder="请选择...">
+							<el-option 
+								v-for="(item) in waterList"
+								:key="item.value"
+								:label="item.label" 
+								:value="item.value" 
+							/>
+						</el-select>
+					</el-form-item>
+					<el-form-item label="开始年月:">
+						<el-date-picker
+							v-model="form.startYear"
+          		value-format="YYYY"
+							type="year"
+							placeholder="请选择..."
+							style="width: 100%"
+						/>
+					</el-form-item>
+					<el-form-item label="结束年月:" style="margin-top: 5px;">
+						<el-date-picker
+							v-model="form.endYear"
+          		value-format="YYYY"
+							type="year"
+							placeholder="请选择..."
+							style="width: 100%"
+						/>
+					</el-form-item>
+				</div>
+        <div style="position: absolute;bottom: 1%;left: 30%;">
+          <el-button type="primary" @click="handleSearch">查询</el-button>
+          <el-button type="primary" @click="handleReset">重置</el-button>
+        </div>
+      </el-form>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import {ElMessage} from 'element-plus';
+
+const typeRadioList = [
+	{label:"水质类别过程线",value:1},
+	{label:"同期对比过程线",value:2},
+	{label:"水质评价数据表",value:3},
+	{label:"水质达标率比较图",value:4},
+	{label:"水质达标分析统计表",value:5},
+];
+const waterList = ref([]);
+const form = ref({
+	typeRadio:1,
+	tableChart:"chart",
+  water: '',
+	startYear:"",
+	endYear:""
+});
+
+onMounted(() => {
+});
+const handleSearch = () => {};
+const handleReset = () => {};
+const handleSizeChange = (val) => {};
+const handleCurrentChange = (val) => {};
+</script>
+
+<style scoped lang="scss">
+.sgnq-index{
+  height: 100%;
+  width: 100%;
+  position: relative;
+  .sgnq-rightbox{
+    height: 100%;
+    width: 16.25rem;
+    background-color: #d2eafa;
+    border-radius: 0.3125rem;
+    position: absolute;
+    top: 0;
+    right: 0;
+    .sgnq-form{
+      width: 94%;
+      margin: 2% auto;
+			.rightbox-title{
+				width: 100%;
+				font-size: 1rem;
+				font-family: 'ALIMAMASHUHEITI';
+				color: #4a93f5;
+				line-height: 1.875rem;
+				text-align: center;
+			}
+			.rightbox-form-item{
+				width: 100%;
+				border: 1px solid #4a93f5;
+				border-radius: 0.3125rem;
+			}
+      .el-form-item{
+				margin: 0.3125rem 0.625rem;
+      }
+    }
+  }
+}
+</style>

+ 3 - 0
ruoyi-ui/src/views/water/tongjifenxi/shuizhibianhua.vue

@@ -0,0 +1,3 @@
+<template>
+  <div>水质变化</div>
+</template>

+ 137 - 0
ruoyi-ui/src/views/water/tongjifenxi/shuizhiyinzi.vue

@@ -0,0 +1,137 @@
+<template>
+  <div class="szyz-index">
+  <el-form ref="szyzFormRef" :model="szyzForm" :inline="true" size="small" class="szyz-form">
+    <el-form-item label="时间选择:">
+      <el-select v-model="szyzForm.timeType" placeholder="请选择..." style="width: 120px;">
+        <el-option 
+          v-for="(item) in timeTypeList"
+          :key="item.value"
+          :label="item.label" 
+          :value="item.value" 
+        />
+      </el-select>
+    </el-form-item>
+    <el-form-item label="年份:">
+      <el-col :span="10">
+        <el-date-picker
+          v-model="szyzForm.startYear"
+          type="year"
+          placeholder="开始时间"
+          style="width: 90px"
+        />
+      </el-col>
+      <el-col class="text-center" :span="1" style="margin: 0 0.5rem">-</el-col>
+      <el-col :span="10">
+        <el-date-picker
+          v-model="szyzForm.endYear"
+          type="year"
+          placeholder="结束时间"
+          style="width: 90px"
+        />
+      </el-col>
+    </el-form-item>
+    <el-form-item label="监测指标:">
+      <el-select v-model="szyzForm.element" placeholder="请选择..." style="width: 150px;">
+        <el-option 
+          v-for="(item) in elementList"
+          :key="item.value"
+          :label="item.label" 
+          :value="item.value" 
+        />
+      </el-select>
+    </el-form-item>
+    <el-form-item label="水功能区名称:">
+      <el-input v-model="szyzForm.waterName" placeholder="请输入水功能区名称"/>
+    </el-form-item>
+      <el-form-item>
+        <el-button type="primary" size="small" @click="handleSettings">设置</el-button>
+        <el-button type="primary" size="small" @click="handleSearch">查询</el-button>
+      </el-form-item>
+    </el-form>
+    <div class="szyz-content">
+      <el-table 
+        :data="szyzData" 
+        border 
+        stripe
+        style="width: 100%;" 
+        :height="heightAll" 
+        :header-cell-style="{
+          background: '#d2eafa !important',
+          fontSize: '12px'
+        }"
+      >
+        <el-table-column type="selection" width="55"/>
+        <el-table-column type="index" width="50"/>
+        <el-table-column prop="tm" label="测站名称" align="center"/>
+        <el-table-column prop="tm" label="水功能区" align="center"/>
+        <el-table-column prop="tm" label="水系" align="center"/>
+        <el-table-column prop="tm" label="河流或湖泊" align="center"/>
+        <el-table-column prop="tm" label="分析时间" align="center"/>
+        <el-table-column prop="tm" label="监测次数" align="center"/>
+        <el-table-column prop="tm" label="超标次数" align="center"/>
+        <el-table-column prop="tm" label="超标率(%)" align="center"/>
+        <el-table-column prop="tm" label="最大值与超标倍数" align="center"/>
+        <el-table-column prop="tm" label="最大值出现时间" align="center"/>
+      </el-table>
+      <el-pagination
+        v-model:current-page="pagination.currentPage"
+        v-model:page-size="pagination.pageSize"
+        :size="pagination.size"
+        :total="pagination.totalCount"
+        :disabled=false
+        background
+        layout="total, prev, pager, next, jumper"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script setup>
+const szyzForm = ref({
+  timeType:"",
+  startYear:"",
+  endYear:"",
+  element:"",
+  waterName:""
+});
+const timeTypeList = ref([]);
+const elementList = ref([]);
+const heightAll = 85.3 + 'vh';
+const szyzData = ref([]);
+const pagination = ref({
+  currentPage: 1,
+  pageSize: 10,
+  totalCount: 0,
+});
+
+const handleSearch = () => {};
+const handleSettings = () => {};
+
+const handleSizeChange = (val) => {
+  pagination.value.pageSize = val;
+}
+const handleCurrentChange = (val) => {
+  pagination.value.currentPage = val;
+}
+</script>
+
+<style scoped lang="scss">
+.szyz-index{
+  width: 99%;
+  height: 100%;
+  margin: auto;
+  .szyz-form{
+    width: 100%;
+    padding: 5px 0;
+    .el-form-item{
+        margin-bottom: 0 !important;
+    }
+  }
+  .szyz-content{
+    width: 100%;
+    border: 1px solid #DCDFE6;
+  }
+}
+</style>

+ 148 - 0
ruoyi-ui/src/views/water/xinxichaxun/jiancexinxi.vue

@@ -0,0 +1,148 @@
+<template>
+  <div class="jcxx-index">
+  <el-form ref="jcxxFormRef" :model="jcxxForm" :inline="true" size="small" class="jcxx-form">
+    <el-form-item label="流域:">
+      <el-select v-model="jcxxForm.liuyu" placeholder="请选择..." style="width: 150px;">
+        <el-option 
+          v-for="(item) in liuYuList"
+          :key="item.value"
+          :label="item.label" 
+          :value="item.value" 
+        />
+      </el-select>
+    </el-form-item>
+    <el-form-item label="省份:">
+      <el-select v-model="jcxxForm.province" placeholder="请选择..." style="width: 150px;">
+        <el-option 
+          v-for="(item) in provinceList"
+          :key="item.value"
+          :label="item.label" 
+          :value="item.value" 
+        />
+      </el-select>
+    </el-form-item>
+    <el-form-item label="水功能区:">
+      <el-select v-model="jcxxForm.waterFunc" placeholder="请选择..." style="width: 150px;">
+        <el-option 
+          v-for="(item) in waterFuncList"
+          :key="item.value"
+          :label="item.label" 
+          :value="item.value" 
+        />
+      </el-select>
+    </el-form-item>
+    <el-form-item label="是否达标:">
+      <el-select v-model="jcxxForm.status" placeholder="请选择..." style="width: 150px;">
+        <el-option 
+          v-for="(item) in statuList"
+          :key="item.value"
+          :label="item.label" 
+          :value="item.value" 
+        />
+      </el-select>
+    </el-form-item>
+    <el-form-item label="关键字:">
+      <el-input v-model="jcxxForm.keyword" placeholder="请输入关键字"/>
+    </el-form-item>
+      <el-form-item>
+        <el-button type="primary" size="small" @click="handleSearch">查询</el-button>
+        <el-button type="primary" size="small" @click="handleReset">重置</el-button>
+        <el-button type="primary" size="small" @click="handleExport">导出</el-button>
+      </el-form-item>
+    </el-form>
+    <div class="jcxx-content">
+      <el-table 
+        :data="jcxxData" 
+        border 
+        stripe
+        style="width: 100%;" 
+        :height="heightAll" 
+        :header-cell-style="{
+          background: '#d2eafa !important',
+          fontSize: '12px'
+        }"
+      >
+        <el-table-column type="index" width="50"/>
+        <el-table-column prop="tm" label="测站名称" align="center" width="120"/>
+        <el-table-column prop="tm" label="所属水功能区"/>
+        <el-table-column prop="tm" label="测站所在地"/>
+        <el-table-column prop="tm" label="最新评价日期" align="center" width="120"/>
+        <el-table-column prop="tm" label="最新评价" align="center" width="120"/>
+        <el-table-column prop="tm" label="达标情况" align="center" width="120"/>
+        <el-table-column label="监测数据" align="center" width="120">
+          <template #default="scope">
+            <el-button type="primary" icon="View" text  @click="handleStnmInfor(scope.row)"/>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-pagination
+        v-model:current-page="pagination.currentPage"
+        v-model:page-size="pagination.pageSize"
+        :size="pagination.size"
+        :total="pagination.totalCount"
+        :disabled=false
+        background
+        layout="total, prev, pager, next, jumper"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script setup>
+const jcxxForm = ref({
+  liuyu:"",
+  province:"",
+  waterFunc:"",
+  status:"",
+  keyword:""
+});
+const liuYuList = ref([]);
+const provinceList = ref([]);
+const waterFuncList = ref([]);
+const statuList = [
+  {label:"已达标",value:"已达标"},
+  {label:"未达标",value:"未达标"},
+];
+const heightAll = 85.3 + 'vh';
+const jcxxData = ref([]);
+const pagination = ref({
+  currentPage: 1,
+  pageSize: 10,
+  totalCount: 0,
+});
+
+const handleSearch = () => {};
+const handleReset = () => {};
+const handleExport = () => {};
+
+// 表格按钮
+const handleStnmInfor = (row) => {};
+
+const handleSizeChange = (val) => {
+  pagination.value.pageSize = val;
+}
+const handleCurrentChange = (val) => {
+  pagination.value.currentPage = val;
+}
+</script>
+
+<style scoped lang="scss">
+.jcxx-index{
+  width: 99%;
+  height: 100%;
+  margin: auto;
+  .jcxx-form{
+    width: 100%;
+    padding: 5px 0;
+    .el-form-item{
+        margin-bottom: 0 !important;
+    }
+  }
+  .jcxx-content{
+    width: 100%;
+    border: 1px solid #DCDFE6;
+  }
+}
+</style>

+ 164 - 0
ruoyi-ui/src/views/water/xinxichaxun/shuxingxinxi.vue

@@ -0,0 +1,164 @@
+<template>
+  <div class="shuxing-index">
+  <el-form ref="shuXingFormRef" :model="shuXingForm" :inline="true" size="small" class="shuxing-form">
+    <el-form-item label="流域:">
+      <el-select v-model="shuXingForm.liuyu" placeholder="请选择..." style="width: 150px;">
+        <el-option 
+          v-for="(item) in liuYuList"
+          :key="item.value"
+          :label="item.label" 
+          :value="item.value" 
+        />
+      </el-select>
+    </el-form-item>
+    <el-form-item label="省份:">
+      <el-select v-model="shuXingForm.province" placeholder="请选择..." style="width: 150px;">
+        <el-option 
+          v-for="(item) in provinceList"
+          :key="item.value"
+          :label="item.label" 
+          :value="item.value" 
+        />
+      </el-select>
+    </el-form-item>
+    <el-form-item label="水功能区:">
+      <el-select v-model="shuXingForm.waterFunc" placeholder="请选择..." style="width: 150px;">
+        <el-option 
+          v-for="(item) in waterFuncList"
+          :key="item.value"
+          :label="item.label" 
+          :value="item.value" 
+        />
+      </el-select>
+    </el-form-item>
+    <el-form-item label="是否达标:">
+      <el-select v-model="shuXingForm.status" placeholder="请选择..." style="width: 150px;">
+        <el-option 
+          v-for="(item) in statuList"
+          :key="item.value"
+          :label="item.label" 
+          :value="item.value" 
+        />
+      </el-select>
+    </el-form-item>
+    <el-form-item label="关键字:">
+      <el-input v-model="shuXingForm.keyword" placeholder="请输入关键字"/>
+    </el-form-item>
+      <el-form-item>
+        <el-button type="primary" size="small" @click="handleSearch">查询</el-button>
+        <el-button type="primary" size="small" @click="handleReset">重置</el-button>
+        <el-button type="primary" size="small" @click="handleExport">导出</el-button>
+      </el-form-item>
+    </el-form>
+    <div class="shuxing-content">
+      <el-table 
+        :data="shuXingData" 
+        border 
+        stripe
+        style="width: 100%;" 
+        :height="heightAll" 
+        :header-cell-style="{
+          background: '#d2eafa !important',
+          fontSize: '12px'
+        }"
+      >
+        <el-table-column type="index" width="50"/>
+        <el-table-column prop="tm" label="所属省(市)" width="60" align="center"/>
+        <el-table-column prop="tm" label="水功能区名称" width="220"/>
+        <el-table-column prop="tm" label="河流、湖泊、水库" align="center"/>
+        <el-table-column prop="tm" label="监测断面(点)"/>
+        <el-table-column prop="tm" label="河长、面积、库容"/>
+        <el-table-column prop="tm" label="水质目标" align="center"/>
+        <el-table-column label="双指标评价法" align="center">
+          <el-table-column prop="tm" label="水质类别" align="center"/>
+          <el-table-column prop="tm" label="达标情况" align="center"/>
+        </el-table-column>
+        <el-table-column label="全指标评价法" align="center">
+          <el-table-column prop="tm" label="水质类别" align="center"/>
+          <el-table-column prop="tm" label="达标情况" align="center"/>
+          <el-table-column prop="tm" label="超标项目及超标倍数" align="center"/>
+        </el-table-column>
+        <el-table-column prop="tm" label="水质类别(TP、TN不参评)" align="center"/>
+        <el-table-column label="历史评价" align="center">
+          <template #default="scope">
+            <el-button type="primary" icon="View" text  @click="handleHistory(scope.row)"/>
+          </template>
+        </el-table-column>
+        <el-table-column label="相关测站" align="center">
+          <template #default="scope">
+            <el-button type="primary" icon="View" text  @click="handleStnmInfor(scope.row)"/>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-pagination
+        v-model:current-page="pagination.currentPage"
+        v-model:page-size="pagination.pageSize"
+        :size="pagination.size"
+        :total="pagination.totalCount"
+        :disabled=false
+        background
+        layout="total, prev, pager, next, jumper"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script setup>
+const shuXingForm = ref({
+  liuyu:"",
+  province:"",
+  waterFunc:"",
+  status:"",
+  keyword:""
+});
+const liuYuList = ref([]);
+const provinceList = ref([]);
+const waterFuncList = ref([]);
+const statuList = [
+  {label:"已达标",value:"已达标"},
+  {label:"未达标",value:"未达标"},
+];
+const heightAll = 85.3 + 'vh';
+const shuXingData = ref([]);
+const pagination = ref({
+  currentPage: 1,
+  pageSize: 10,
+  totalCount: 0,
+});
+
+const handleSearch = () => {};
+const handleReset = () => {};
+const handleExport = () => {};
+
+// 表格按钮
+const handleHistory = (row) => {};
+const handleStnmInfor = (row) => {};
+
+const handleSizeChange = (val) => {
+  pagination.value.pageSize = val;
+}
+const handleCurrentChange = (val) => {
+  pagination.value.currentPage = val;
+}
+</script>
+
+<style scoped lang="scss">
+.shuxing-index{
+  width: 99%;
+  height: 100%;
+  margin: auto;
+  .shuxing-form{
+    width: 100%;
+    padding: 5px 0;
+    .el-form-item{
+        margin-bottom: 0 !important;
+    }
+  }
+  .shuxing-content{
+    width: 100%;
+    border: 1px solid #DCDFE6;
+  }
+}
+</style>

+ 255 - 0
ruoyi-ui/src/views/water/xinxichaxun/tongjixinxi.vue

@@ -0,0 +1,255 @@
+<template>
+  <div class="tjxx-index">
+    <el-form ref="tjxxFormRef" :model="tjxxForm" :inline="true" size="small" class="tjxx-form">
+      <el-form-item>
+        <el-radio-group v-model="tjxxForm.resource">
+          <el-radio
+          v-for="(item) in resourceList"
+          :key="item.value"
+          :value="item.value" 
+          >
+          {{ item.label }}
+        </el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="年月:">
+        <el-date-picker
+          v-model="tjxxForm.month"
+          value-format="YYYY-MM"
+          type="month"
+          placeholder="请选择..."
+          style="width: 150px;"
+        />
+      </el-form-item>
+      <el-form-item label="流域:">
+        <el-select v-model="tjxxForm.liuyu" placeholder="请选择..." style="width: 150px;">
+          <el-option 
+            v-for="(item) in liuYuList"
+            :key="item.value"
+            :label="item.label" 
+            :value="item.value" 
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="省份:">
+        <el-select v-model="tjxxForm.province" placeholder="请选择..." style="width: 150px;">
+          <el-option 
+            v-for="(item) in provinceList"
+            :key="item.value"
+            :label="item.label" 
+            :value="item.value" 
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="水功能区:">
+        <el-select v-model="tjxxForm.waterFunc" placeholder="请选择..." style="width: 150px;">
+          <el-option 
+            v-for="(item) in waterFuncList"
+            :key="item.value"
+            :label="item.label" 
+            :value="item.value" 
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="评价方法:">
+        <el-select v-model="tjxxForm.evaluation" placeholder="请选择..." style="width: 150px;">
+          <el-option 
+            v-for="(item) in evaluationList"
+            :key="item.value"
+            :label="item.label" 
+            :value="item.value" 
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" size="small" @click="handleSearch">查询</el-button>
+        <el-button type="primary" size="small" @click="handleReset">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <div class="tjxx-content">
+      <div id="shuiZhiChart"></div>
+      <el-table 
+        :data="tjxxData" 
+        border 
+        stripe
+        style="width: 100%;" 
+        :height="heightAll" 
+        :header-cell-style="{
+          background: '#d2eafa !important',
+          fontSize: '12px'
+        }"
+      >
+        <el-table-column type="index" width="50"/>
+        <el-table-column prop="tm" label="水功能区类别" align="center"/>
+        <el-table-column label="一级水功能区" align="center">
+          <el-table-column prop="tm" label="评价个数(个)" align="center"/>
+          <el-table-column prop="tm" label="达标个数(个)" align="center"/>
+          <el-table-column prop="tm" label="达标率(%)" align="center"/>
+        </el-table-column>
+        <el-table-column label="河流" align="center">
+          <el-table-column prop="tm" label="评价河长(km)" align="center"/>
+          <el-table-column prop="tm" label="达标河长(km)" align="center"/>
+          <el-table-column prop="tm" label="达标率(%)" align="center"/>
+        </el-table-column>
+        <el-table-column label="湖泊" align="center">
+          <el-table-column prop="tm" label="评价面积(km²)" align="center"/>
+          <el-table-column prop="tm" label="达标面积(km²)" align="center"/>
+          <el-table-column prop="tm" label="达标率(%)" align="center"/>
+        </el-table-column>
+        <el-table-column label="水库" align="center">
+          <el-table-column prop="tm" label="评价库容(亿m³)" align="center"/>
+          <el-table-column prop="tm" label="达标库容(亿m³)" align="center"/>
+          <el-table-column prop="tm" label="达标率(%)" align="center"/>
+        </el-table-column>
+      </el-table>
+      <el-pagination
+        v-model:current-page="pagination.currentPage"
+        v-model:page-size="pagination.pageSize"
+        :size="pagination.size"
+        :total="pagination.totalCount"
+        :disabled=false
+        background
+        layout="total, prev, pager, next, jumper"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script setup>
+import * as echarts  from "echarts";
+
+const tjxxForm = ref({
+  resource:1,
+  month:"",
+  liuyu:"",
+  province:"",
+  waterFunc:"",
+  evaluation:""
+});
+const resourceList = [
+  {label:"达标统计",value:1},
+  {label:"告警统计",value:2},
+];
+const liuYuList = ref([]);
+const provinceList = ref([]);
+const waterFuncList = ref([]);
+const evaluationList = ref([]);
+const heightAll = 43.4 + 'vh';
+const tjxxData = ref([]);
+const pagination = ref({
+  currentPage: 1,
+  pageSize: 10,
+  totalCount: 0,
+});
+const shuiZhiChart = ref(null);
+
+onMounted(() => {
+  initChart();
+})
+
+const handleSearch = () => {};
+const handleReset = () => {};
+
+const initChart = () => {
+  const option = { 
+    title: {
+    text: '太湖流域一级水功能区水质达标分析统计表',
+    subtext: '2025-11',
+    left: 'center'
+  },
+    tooltip: {
+      trigger: 'axis'
+    },
+    // legend: { 
+    //     x:'center',      //可设定图例在左、右、居中
+    //     y:'bottom',     //可设定图例在上、下、居中
+    //   data: ['Email', 'Union Ads', 'Video Ads', 'Direct', 'Search Engine']
+    // },
+    grid: {
+      left: '3%',
+      right: '4%',
+      bottom: '8%',
+      containLabel: true
+    },
+    toolbox: {
+      feature: {
+        saveAsImage: {}
+      }
+    },
+    xAxis: {
+      type: 'category',
+      boundaryGap: false,
+      data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+    },
+    yAxis: {
+      type: 'value'
+    },
+    series: [
+      {
+        name: 'Email',
+        type: 'line',
+        stack: 'Total',
+        data: [120, 132, 101, 134, 90, 230, 210]
+      },
+      {
+        name: 'Union Ads',
+        type: 'line',
+        stack: 'Total',
+        data: [220, 182, 191, 234, 290, 330, 310]
+      },
+      {
+        name: 'Video Ads',
+        type: 'line',
+        stack: 'Total',
+        data: [150, 232, 201, 154, 190, 330, 410]
+      },
+      {
+        name: 'Direct',
+        type: 'line',
+        stack: 'Total',
+        data: [320, 332, 301, 334, 390, 330, 320]
+      },
+      {
+        name: 'Search Engine',
+        type: 'line',
+        stack: 'Total',
+        data: [820, 932, 901, 934, 1290, 1330, 1320]
+      }
+    ]
+  };
+  shuiZhiChart.value = echarts.init(document.getElementById('shuiZhiChart'));
+  shuiZhiChart.value.setOption(option);
+};
+
+const handleSizeChange = (val) => {
+  pagination.value.pageSize = val;
+}
+const handleCurrentChange = (val) => {
+  pagination.value.currentPage = val;
+}
+</script>
+
+<style scoped lang="scss">
+.tjxx-index{
+  width: 99%;
+  height: 100%;
+  margin: auto;
+  .tjxx-form{
+    width: 100%;
+    padding: 5px 0;
+    .el-form-item{
+        margin-bottom: 0 !important;
+    }
+  }
+  .tjxx-content{
+    width: 100%;
+    border: 1px solid #DCDFE6;
+    #shuiZhiChart{
+      width: 100%;
+      height: 42vh;
+    }
+  }
+}
+</style>

+ 3 - 15
ruoyi-ui/src/views/zhiban/youjian/taihushuizhi.vue

@@ -59,21 +59,9 @@
         <el-table-column prop="tm" label="备注"/>
         <el-table-column label="操作" align="center" width="220">
           <template #default="scope">
-            <el-button size="small" @click="handleTableEdit(scope.row)">
-              <el-icon>
-                <Edit />
-              </el-icon>
-            </el-button>
-            <el-button size="small" @click="handleDownload(scope.row)">
-              <el-icon>
-                <Download />
-              </el-icon>
-            </el-button>
-            <el-button size="small" @click="handleView(scope.row)">
-              <el-icon>
-                <View />
-              </el-icon>
-            </el-button>
+            <el-button type="primary" icon="Edit" text @click="handleTableEdit(scope.row)"/>
+            <el-button type="primary" icon="Download" text @click="handleDownload(scope.row)"/>
+            <el-button type="primary" icon="View" text  @click="handleView(scope.row)"/>
           </template>
         </el-table-column>
       </el-table>

+ 0 - 5
ruoyi-ui/src/views/zhiban/youjian/youxiang.vue

@@ -71,11 +71,6 @@ const handleAdd = () => {};
 const handleEdit = () => {};
 const handelDel = () => {};
 
-// 表格按钮
-const handleTableEdit = (row) => {};
-const handleDownload = (row) => {};
-const handleView = (row) => {};
-
 const handleSizeChange = (val) => {
   pagination.value.pageSize = val;
 }

+ 217 - 0
ruoyi-ui/src/views/zhiban/ziliaoguanli.vue

@@ -0,0 +1,217 @@
+<template>
+  <div class="zlgl-index">
+    <div class="zlgl-left">
+      <div class="left-input">
+        <el-input
+          v-model="wordType"
+          style="width: 100%;"
+          placeholder="请输入资料分类名称"
+          size="small"
+        >
+          <template #append>
+            <el-button icon="Search" size="small"/>
+          </template>
+        </el-input>
+      </div>
+      <tree :treeData="treeData" @sendNodeData="getNodeData"/>
+    </div>
+    <div class="zlgl-right">
+      <el-form ref="zlglFormRef" :model="zlglForm" :inline="true" size="small" class="zlgl-form">
+        <el-form-item label="日期:">
+          <el-date-picker
+            v-model="zlglForm.daterange"
+            type="daterange"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+          />
+        </el-form-item>
+        <el-form-item label="文件名称:">
+          <el-input v-model="zlglForm.wordName" placeholder="请输入文件名称"/>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" size="small" @click="handleSearch">查询</el-button>
+          <el-button type="primary" size="small" @click="handleReset">重置</el-button>
+        </el-form-item>
+      </el-form>
+      <div class="right-content">
+        <div class="content-btns">
+          <el-button type="primary" size="small" @click="handleRefresh">刷新</el-button>
+          <el-button type="primary" size="small" @click="handleAdd">新增</el-button>
+          <el-button type="primary" size="small" @click="handleAnalysis">解析</el-button>
+          <el-button type="primary" size="small" @click="getAlgaeInfor">获取蓝藻信息</el-button>
+        </div>
+        <el-table 
+        :data="zlglTableData" 
+        border 
+        stripe
+        style="width: 100%" 
+        :height="heightAll" 
+        :header-cell-style="{
+          background: '#d2eafa !important',
+          fontSize: '12px'
+        }"
+        >
+          <el-table-column type="selection" width="55"/>
+          <el-table-column type="index" width="50"/>
+          <el-table-column prop="tm" label="标题" align="center"/>
+          <el-table-column prop="tm" label="上传用户" align="center" width="180"/>
+          <el-table-column prop="tm" label="文件上传时间" align="center" width="180"/>
+          <el-table-column prop="tm" label="分类类别" align="center" width="180"/>
+          <el-table-column label="操作" align="center" width="300">
+            <template #default="scope">
+              <el-button type="primary" icon="Delete" text />
+              <el-button type="primary" icon="Edit" text />
+              <el-button type="primary" icon="View" text />
+              <el-button type="primary" icon="Tickets" text />
+              <el-button type="primary" icon="Download" text />
+            </template>
+          </el-table-column>
+        </el-table>
+        <el-pagination
+          v-model:current-page="pagination.currentPage"
+          v-model:page-size="pagination.pageSize"
+          :size="pagination.size"
+          :total="pagination.totalCount"
+          :disabled=false
+          background
+          layout="total, prev, pager, next, jumper"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import tree from "@/components/FolderTree.vue";
+import { onMounted } from "vue";
+
+const wordType = ref("");
+const treeData = ref([
+  {
+    id: '1',
+    label: '资料管理树',
+    type: 'folder',
+    children: [
+      {
+        id: '1-1',
+        label: '管理文件',
+        type: 'folder',
+        children: [
+          {
+              id: '1-1-1',
+              label: '水质值班手册',
+              type: 'file',
+          },
+          {
+              id: '1-1-2',
+              label: '调水计划',
+              type: 'file',
+          },
+        ]
+      },
+      {
+        id: '1-2',
+        label: '调令和监测方案',
+        type: 'folder',
+        children: [
+          {
+              id: '1-2-1',
+              label: '引江济太监测方案',
+              type: 'file',
+          },
+        ]
+      },
+    ]
+  },
+])
+const zlglForm = ref({
+  daterange:[],
+  wordName:"",
+});
+const heightAll = 82 + 'vh';
+const zlglTableData = ref([{tm:2025}])
+const pagination = ref({
+  currentPage: 1,
+  pageSize: 10,
+  totalCount: 0,
+});
+
+onMounted(() => {
+})
+
+const handleSearch = () => {};
+const handleReset = () => {};
+const handleRefresh = () => {};
+const handleAdd = () => {};
+const handleAnalysis = () => {};
+const getAlgaeInfor = () => {};
+
+
+// 获取树控件节点数据
+const getNodeData = (data,node) => {
+  console.log('getnnode',data,node);
+};
+
+const handleSizeChange = (val) => {
+  pagination.value.pageSize = val;
+}
+const handleCurrentChange = (val) => {
+  pagination.value.currentPage = val;
+}
+</script>
+
+<style lang="scss" scoped>
+.zlgl-index{
+  width: 99%;
+  height: 100%;
+  margin: auto;
+  display: flex;
+  justify-content: space-between;
+  .zlgl-left{
+    width: 15%;
+    height: 92vh;
+    border: 1px solid #DCDFE6;
+    .left-title{
+      width: 100%;
+      height: 30px;
+      background: linear-gradient(to right, #a8d2fa, #fff);
+      box-shadow: 0 5px 5px #b2d3f9;
+      font-size: 16px;
+      font-family: 'ALIMAMASHUHEITI';
+      color: #4a93f5;
+      line-height: 30px;
+      text-align: center;
+    }
+    .left-input{
+      width: 90%;
+      margin: 8px auto;
+      .input-demo{
+        .el-input-group__append{
+          background-color: #409eff !important;
+        }
+      }
+    }
+  }
+  .zlgl-right{
+    width:84%;
+    .zlgl-form{
+      width: 100%;
+      padding: 5px 0;
+      .el-form-item{
+          margin-bottom: 0 !important;
+      }
+    }
+    .right-content{
+      width: 100%;
+      border: 1px solid #DCDFE6;
+      .content-btns{
+        width: 99%;
+        margin: 5px auto;
+      }
+    }
+  }
+}
+</style>