Browse Source

代码提交

cxs 5 months ago
parent
commit
a833355033

+ 34 - 2
src/layouts/components/Header/components/InfoDialog.vue

@@ -1,6 +1,28 @@
 <template>
-  <el-dialog v-model="dialogVisible" title="个人信息" width="500px" draggable>
-    <span>This is userInfo</span>
+  <el-dialog v-model="dialogVisible" title="个人信息" width="700px" draggable>
+    <el-form ref="formRef" :model="userForm"  label-width="120px">
+      <el-form-item label="用户账号:" prop="account">
+       {{userForm.account}}
+      </el-form-item>
+      <el-form-item label="角色:" prop="role">
+        {{userForm.role}}
+      </el-form-item>
+      <el-form-item label="关联台站:" prop="stations">
+        {{userForm.stations}}
+      </el-form-item>
+      <el-form-item label="用户姓名:" prop="name">
+        {{userForm.name}}
+      </el-form-item>
+      <el-form-item label="职务:" prop="post">
+        {{userForm.post}}
+      </el-form-item>
+      <el-form-item label="所属单位:" prop="affiliation">
+       {{userForm.affiliation}}
+      </el-form-item>
+      <el-form-item label="联系电话:" prop="phone">
+        {{userForm.phone}}
+      </el-form-item>
+    </el-form>
     <template #footer>
       <span class="dialog-footer">
         <el-button @click="dialogVisible = false">取消</el-button>
@@ -13,6 +35,16 @@
 <script setup lang="ts">
 import { ref } from "vue";
 
+const userForm = ref<any>({
+  account: "Admin",
+  role: "观测员",
+  stations:"便携站",
+  name: "王武",
+  post: "装备保障人员",
+  affiliation: "某个气象局",
+  phone: "18088888888"
+});
+
 const dialogVisible = ref(false);
 const openDialog = () => {
   dialogVisible.value = true;

+ 1 - 2
src/styles/common.scss

@@ -246,10 +246,9 @@
 
   .disposition-title{
     font-size: 15px;
-    font-weight: 600;
     color: var(--el-menu-active-color);
     margin-top: 10px;
-    margin-bottom: 20px;
+    margin-bottom: 10px;
   }
 
   .disposition-bottom{

+ 9 - 1
src/styles/element.scss

@@ -276,7 +276,6 @@
     color: var(--el-color-primary);
     background-color: var(--el-color-primary-light-9);;
     border-radius: 10px;
-    font-weight: 600;
   }
 
  .is-left {
@@ -345,6 +344,7 @@
   }
 }
 
+
 /* tree border */
 .tree-border {
   margin-top: 5px;
@@ -354,3 +354,11 @@
   width: 100%;
 }
 
+.el-radio__input.is-checked+.el-radio__label {
+  color: var(--el-text-color-regular);
+}
+
+.el-checkbox__input.is-checked+.el-checkbox__label {
+  color: var(--el-text-color-regular);
+}
+

+ 255 - 0
src/views/system/stations/components/newspapers.vue

@@ -0,0 +1,255 @@
+<template>
+  <el-form :inline="true" :model="formInline" ref="formRef" :rules="rules" class="form-inline" label-position="top">
+    <div style="display: flex;flex-direction: column;">
+      <div style="flex-grow: 1;height: 66vh;overflow-y: auto;overflow-x: hidden">
+        <div class="disposition-title">报告类型</div>
+        <el-radio-group v-model="radio" style="width: 100%;" text-color="#000000">
+        <el-row :gutter="20" style="width: 100%;">
+          <el-col :span="4">
+            <el-radio :value="1">整点编报</el-radio>
+          </el-col>
+          <el-col :span="4">
+            <el-radio  :value="2">半点编报</el-radio>
+          </el-col>
+          <el-col :span="4">
+            <el-radio  :value="3">临时编报</el-radio>
+          </el-col>
+        </el-row>
+        </el-radio-group>
+        <div class="disposition-title">报告类型</div>
+        <el-radio-group v-model="radio" style="width: 100%">
+        <el-row :gutter="20"  style="width: 100%;">
+          <el-col :span="4">
+            <el-radio v-model="radio" :value="1">军队报文格式</el-radio>
+          </el-col>
+          <el-col :span="4">
+            <el-radio v-model="radio" :value="2">空军报文格式</el-radio>
+          </el-col>
+        </el-row>
+        </el-radio-group>
+        <div class="disposition-title">第一段(基本项目段)</div>
+        <el-checkbox-group v-model="checkList" style="width: 100%">
+          <el-row :gutter="20"  style="width: 100%;">
+            <el-col :span="4">
+              <el-checkbox label="是否固定台站" value="是否固定台站" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="最小能见度" value="最小能见度" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="本站气压" value="本站气压" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="海平面气压" value="海平面气压" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="时降水量" value="时降水量" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="日降水量" value="日降水量" />
+            </el-col>
+          </el-row>
+        </el-checkbox-group>
+        <div class="disposition-title">第二段(航空航天段)</div>
+        <el-checkbox-group v-model="checkList" style="width: 100%">
+          <el-row :gutter="20"  style="width: 100%;">
+            <el-col :span="4">
+              <el-checkbox label="垂直能见度" value="垂直能见度" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="跑道视程" value="跑道视程" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="场面、零点、高度表" value="场面、零点、高度表" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="静电场" value="静电场" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="雷电" value="雷电" />
+            </el-col>
+          </el-row>
+        </el-checkbox-group>
+        <div class="disposition-title">第三段(重要危险段)</div>
+        <el-checkbox-group v-model="checkList" style="width: 100%">
+          <el-row :gutter="20"  style="width: 100%;">
+            <el-col :span="4">
+              <el-checkbox label="瞬时最大风速" value="瞬时最大风速" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="积雨云方向去向" value="积雨云方向去向" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="冰雹最大直径" value="冰雹最大直径" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="云敝山所在方向" value="云敝山所在方向" />
+            </el-col>
+          </el-row>
+        </el-checkbox-group>
+        <el-checkbox-group v-model="checkList" style="width: 100%">
+          <el-row :gutter="20"  style="width: 100%;">
+            <el-col :span="4">
+              <el-checkbox label="低云方向去向" value="低云方向去向" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="最大静电场强度" value="最大静电场强度" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="雷暴方向去向" value="雷暴方向去向" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="龙卷方向去向" value="龙卷方向去向" />
+            </el-col>
+          </el-row>
+        </el-checkbox-group>
+        <div class="disposition-title">第四段(海洋水文段)</div>
+        <el-checkbox-group v-model="checkList" style="width: 100%">
+          <el-row :gutter="20"  style="width: 100%;">
+            <el-col :span="4">
+              <el-checkbox label="航向和航速" value="航向和航速" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="表层海水温度" value="表层海水温度" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="表层海水盐度" value="表层海水盐度" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="海况和波周期" value="海况和波周期" />
+            </el-col>
+          </el-row>
+        </el-checkbox-group>
+        <el-checkbox-group v-model="checkList" style="width: 100%">
+          <el-row :gutter="20"  style="width: 100%;">
+            <el-col :span="4">
+              <el-checkbox label="波级和波高" value="波级和波高" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="风浪和涌波" value="风浪和涌波" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="降水PH值" value="降水PH值" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="气溶胶" value="气溶胶" />
+            </el-col>
+          </el-row>
+        </el-checkbox-group>
+        <div class="disposition-title">第五段(非基本项)</div>
+        <el-checkbox-group v-model="checkList" style="width: 100%">
+          <el-row :gutter="20"  style="width: 100%;">
+            <el-col :span="4">
+              <el-checkbox label="地表溫度" value="地表溫度" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="地表和积雪" value="地表和积雪" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="蒸发量组" value="蒸发量组" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="日照时数" value="日照时数" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="电线结冰最大重量" value="电线结冰最大重量" />
+            </el-col>
+          </el-row>
+        </el-checkbox-group>
+        <div class="disposition-title">第六段(日极值段)</div>
+        <el-checkbox-group v-model="checkList" style="width: 100%">
+          <el-row :gutter="20"  style="width: 100%;">
+            <el-col :span="4">
+              <el-checkbox label="最高温度" value="最高温度" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="最低温度" value="最低温度" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="地表最高温度" value="地表最高温度" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="地表最低温度" value="地表最低温度" />
+            </el-col>
+          </el-row>
+        </el-checkbox-group>
+        <el-checkbox-group v-model="checkList" style="width: 100%">
+          <el-row :gutter="20"  style="width: 100%;">
+            <el-col :span="4">
+              <el-checkbox label="最高潮高" value="最高潮高" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="最高潮时" value="最高潮时" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="最低潮高" value="最低潮高" />
+            </el-col>
+            <el-col :span="4">
+              <el-checkbox label="最低潮时" value="最低潮时" />
+            </el-col>
+          </el-row>
+        </el-checkbox-group>
+        <div class="disposition-title">第七段(编报要素选择)</div>
+       <el-row :gutter="20"  style="width: 100%;">
+        <el-col :span="4">
+          <el-form-item label="编报要素选择1" prop="element" style="width: 200px">
+            <el-select v-model="formInline.element">
+              <el-option label="漏点温度" value="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+         <el-col :span="4">
+           <el-form-item label="编报要素选择2" prop="element2" style="width: 200px">
+             <el-select v-model="formInline.element2">
+               <el-option label="场面气压" value="1"></el-option>
+             </el-select>
+           </el-form-item>
+         </el-col>
+         <el-col :span="4">
+           <el-form-item label="编报要素降水时段选择" prop="time" style="width: 200px">
+             <el-select v-model="formInline.time">
+               <el-option label="三小时" value="1"></el-option>
+             </el-select>
+           </el-form-item>
+         </el-col>
+       </el-row>
+      </div>
+      <div class="disposition-bottom">
+        <el-button > 取消 </el-button>
+        <el-button type="primary" plain> 上一步 </el-button>
+        <el-button type="primary"> 完成 </el-button>
+      </div>
+    </div>
+  </el-form>
+</template>
+
+<script setup lang="tsx">
+import {reactive, ref} from "vue";
+const formRef = ref<any>();
+const formInline = ref<any>({
+  element:'',
+  element2:'',
+  time:''
+})
+const radio = ref(1)
+const checkList = ref([])
+const rules = ref<any>(
+  {
+  }
+);
+
+/** 提交按钮 */
+const submitForm = () => {
+  formRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+
+    }
+  });
+}
+
+
+</script>
+
+<style scoped>
+
+</style>

+ 503 - 0
src/views/system/stations/components/strategySafeguard.vue

@@ -0,0 +1,503 @@
+<template>
+  <el-form :inline="true" :model="formInline" ref="formRef"  class="form-inline" label-position="top">
+    <div style="display: flex;flex-direction: column;">
+      <div style="flex-grow: 1;height: 66vh;overflow-y: auto;overflow-x: hidden">
+        <el-row :gutter="20">
+          <el-col :span="20">
+            <el-radio-group v-model="radio1">
+              <el-radio-button  label="日常策略" value="日常策略" plain/>
+              <el-radio-button  label="任务策略" value="任务策略" plain/>
+            </el-radio-group>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20" v-if="radio1==='任务策略'">
+          <el-col :span="24">
+            <el-button type="primary" plain style="margin-top: 15px;" @click="handleUpdateTask">新增</el-button>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20" v-if="radio1==='日常策略'">
+          <el-col :span="24">
+            <div class="table-box" style="margin-top: 10px;height: 58vh" >
+              <!-- 表格主体 -->
+              <el-table stripe ref="tableRef" :border="true" :data="processTableData"  size="small">
+                <template v-for="item in columns" :key="item">
+                  <el-table-column v-bind="item" :align="item.align ?? 'left'" :reserve-selection="item.type == 'selection'" :show-overflow-tooltip="true">
+                    <template v-if="item.prop === 'operation'">
+                      <el-tooltip
+                        class="box-item"
+                        effect="dark"
+                        content="编辑"
+                        placement="top"
+                      >
+                        <el-button type="primary" link @click="handleUpdate">
+                          <el-icon >
+                            <Edit />
+                          </el-icon>
+                        </el-button>
+                      </el-tooltip>
+                    </template>
+                  </el-table-column>
+                </template>
+
+                <!-- 无数据 -->
+                <template #empty>
+                  <div class="table-empty">
+                    <slot name="empty">
+                      <img src="@/assets/images/notData.png" alt="notData" />
+                      <div>暂无数据</div>
+                    </slot>
+                  </div>
+                </template>
+              </el-table>
+            </div>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20" v-if="radio1==='任务策略'">
+          <el-col :span="24">
+            <div class="table-box" style="margin-top: 10px;height: 53vh" >
+              <!-- 表格主体 -->
+              <el-table stripe ref="tableRef" :border="true" :data="processTableData2"  size="small">
+                <template v-for="item in columns2" :key="item">
+                  <el-table-column v-bind="item" :align="item.align ?? 'left'" :reserve-selection="item.type == 'selection'" :show-overflow-tooltip="true">
+                  </el-table-column>
+                </template>
+
+                <!-- 无数据 -->
+                <template #empty>
+                  <div class="table-empty">
+                    <slot name="empty">
+                      <img src="@/assets/images/notData.png" alt="notData" />
+                      <div>暂无数据</div>
+                    </slot>
+                  </div>
+                </template>
+              </el-table>
+            </div>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="disposition-bottom">
+        <el-button > 取消 </el-button>
+        <el-button type="primary" plain> 上一步 </el-button>
+        <el-button type="primary"> 下一步 </el-button>
+      </div>
+    </div>
+  </el-form>
+
+  <!-- 日常策略 添加或修改对话框 -->
+  <el-dialog :title="dialog.title" v-model="dialog.visible" width="700px" append-to-body class="tactics">
+    <el-form ref="formRef" :model="dailyForm" :rules="rules" >
+      <div class="disposition-title">警告设置</div>
+      <el-form-item label="触发条件:" prop="relationship"  style="display: flex;align-items: center">
+        <el-radio-group v-model="dailyForm.relationship">
+          <el-radio value="1" size="large">条件并且</el-radio>
+          <el-radio value="2" size="large">条件或者</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="触发周期:" prop="cycle"  style="display: flex;align-items: center">
+        <div class="flex-center">
+          <el-input v-model="dailyForm.cycle" style="width: 150px" />
+          <div style="margin-left: 10px">分钟</div>
+        </div>
+      </el-form-item>
+      <el-button type="primary" plain style="margin-top: 10px">新增</el-button>
+      <div class="table-box" style="margin-top: 10px;height: 160px">
+        <el-table stripe ref="tableRef" :border="true" :data="processTableData3"  size="small" >
+          <template v-for="item in columns3" :key="item">
+            <el-table-column v-bind="item" :align="item.align ?? 'left'" :reserve-selection="item.type == 'selection'" :show-overflow-tooltip="true">
+              <template v-if="item.prop === 'operation'">
+                <el-tooltip
+                  class="box-item"
+                  effect="dark"
+                  content="删除"
+                  placement="top"
+                >
+                  <el-button type="primary" link >
+                    <el-icon >
+                      <Delete />
+                    </el-icon>
+                  </el-button>
+                </el-tooltip>
+              </template>
+            </el-table-column>
+          </template>
+
+          <!-- 无数据 -->
+          <template #empty>
+            <div class="table-empty">
+              <slot name="empty">
+                <img src="@/assets/images/notData.png" alt="notData" />
+                <div>暂无数据</div>
+              </slot>
+            </div>
+          </template>
+        </el-table>
+      </div>
+
+      <div class="disposition-title">消警设置</div>
+      <el-form-item label="解除条件:" prop="relationship"  style="display: flex;align-items: center">
+        <el-radio-group v-model="dailyForm.relationship">
+          <el-radio value="1" size="large">条件并且</el-radio>
+          <el-radio value="2" size="large">条件或者</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="解除周期:" prop="cycle"  style="display: flex;align-items: center">
+        <div class="flex-center">
+          <el-input v-model="dailyForm.cycle" style="width: 150px" />
+          <div style="margin-left: 10px">分钟</div>
+        </div>
+      </el-form-item>
+      <el-button type="primary" plain style="margin-top: 10px">新增</el-button>
+      <div class="table-box" style="margin-top: 10px;height: 160px">
+        <el-table stripe ref="tableRef" :border="true" :data="processTableData4"  size="small" >
+          <template v-for="item in columns4" :key="item">
+            <el-table-column v-bind="item" :align="item.align ?? 'left'" :reserve-selection="item.type == 'selection'" :show-overflow-tooltip="true">
+              <template v-if="item.prop === 'operation'">
+                <el-tooltip
+                  class="box-item"
+                  effect="dark"
+                  content="删除"
+                  placement="top"
+                >
+                  <el-button type="primary" link >
+                    <el-icon >
+                      <Delete />
+                    </el-icon>
+                  </el-button>
+                </el-tooltip>
+              </template>
+            </el-table-column>
+          </template>
+
+          <!-- 无数据 -->
+          <template #empty>
+            <div class="table-empty">
+              <slot name="empty">
+                <img src="@/assets/images/notData.png" alt="notData" />
+                <div>暂无数据</div>
+              </slot>
+            </div>
+          </template>
+        </el-table>
+      </div>
+    </el-form>
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button @click="cancel">取 消</el-button>
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+      </div>
+    </template>
+  </el-dialog>
+
+  <!-- 任务策略 添加或修改对话框 -->
+  <el-dialog :title="dialogTask.title" v-model="dialogTask.visible" width="800px" append-to-body class="tactics">
+    <el-form ref="formRef" :model="taskForm" :rules="rules" style="overflow: auto;height: 70vh;overflow-x: hidden;">
+      <el-row :gutter="20">
+        <el-col :span="12">
+          <el-form-item label="任务名称:" prop="name"  style="display: flex;align-items: center">
+            <el-input v-model="taskForm.name" style="width: 240px" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="20" style="margin-top: 10px">
+        <el-col :span="12">
+          <el-form-item label="开始时间:" prop="startTime"  style="display: flex;align-items: center">
+            <el-date-picker
+              style="width: 240px"
+              v-model="taskForm.startTime"
+              type="date"
+              placeholder="请选择"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="结束时间:" prop="endTime"  style="display: flex;align-items: center">
+            <el-date-picker
+              style="width: 240px"
+              v-model="taskForm.endTime"
+              type="date"
+              placeholder="请选择"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-form-item style="display: flex;align-items: center; margin-top: 10px">
+        <el-radio-group v-model="taskForm.type">
+          <el-radio-button  label="能见度" value="能见度" plain/>
+          <el-radio-button  label="风速" value="风速" plain/>
+          <el-radio-button  label="大气电场" value="大气电场" plain/>
+          <el-radio-button  label="云量" value="云量" plain/>
+          <el-radio-button  label="云高" value="云高" plain/>
+          <el-radio-button  label="温度" value="温度" plain/>
+          <el-radio-button  label="湿度" value="湿度" plain/>
+          <el-radio-button  label="小时雨量" value="小时雨量" plain/>
+          <el-radio-button  label="累年平均值" value="累年平均值" plain/>
+        </el-radio-group>
+      </el-form-item>
+      <div class="disposition-title">警告设置</div>
+      <el-form-item label="触发关系:" prop="relationship"  style="display: flex;align-items: center">
+        <el-radio-group v-model="dailyForm.relationship">
+          <el-radio value="1" size="large">条件并且</el-radio>
+          <el-radio value="2" size="large">条件或者</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="告警方式:" prop="manner"  style="display: flex;align-items: center">
+        <el-radio-group v-model="dailyForm.manner">
+          <el-radio value="1" size="large">字幕提示</el-radio>
+          <el-radio value="2" size="large">声音提示</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-button type="primary" plain style="margin-top: 10px">新增</el-button>
+      <div class="table-box" style="margin-top: 10px;height: 160px">
+        <el-table stripe ref="tableRef" :border="true" :data="processTableData3"  size="small" >
+          <template v-for="item in columns3" :key="item">
+            <el-table-column v-bind="item" :align="item.align ?? 'left'" :reserve-selection="item.type == 'selection'" :show-overflow-tooltip="true">
+              <template v-if="item.prop === 'operation'">
+                <el-tooltip
+                  class="box-item"
+                  effect="dark"
+                  content="删除"
+                  placement="top"
+                >
+                  <el-button type="primary" link >
+                    <el-icon >
+                      <Delete />
+                    </el-icon>
+                  </el-button>
+                </el-tooltip>
+              </template>
+            </el-table-column>
+          </template>
+
+          <!-- 无数据 -->
+          <template #empty>
+            <div class="table-empty">
+              <slot name="empty">
+                <img src="@/assets/images/notData.png" alt="notData" />
+                <div>暂无数据</div>
+              </slot>
+            </div>
+          </template>
+        </el-table>
+      </div>
+
+      <div class="disposition-title">消警设置</div>
+      <el-form-item label="触发关系:" prop="relationship"  style="display: flex;align-items: center">
+        <el-radio-group v-model="dailyForm.relationship">
+          <el-radio value="1" size="large">条件并且</el-radio>
+          <el-radio value="2" size="large">条件或者</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-button type="primary" plain style="margin-top: 10px">新增</el-button>
+      <div class="table-box" style="margin-top: 10px;height: 160px">
+        <el-table stripe ref="tableRef" :border="true" :data="processTableData4"  size="small" >
+          <template v-for="item in columns4" :key="item">
+            <el-table-column v-bind="item" :align="item.align ?? 'left'" :reserve-selection="item.type == 'selection'" :show-overflow-tooltip="true">
+              <template v-if="item.prop === 'operation'">
+                <el-tooltip
+                  class="box-item"
+                  effect="dark"
+                  content="删除"
+                  placement="top"
+                >
+                  <el-button type="primary" link >
+                    <el-icon >
+                      <Delete />
+                    </el-icon>
+                  </el-button>
+                </el-tooltip>
+              </template>
+            </el-table-column>
+          </template>
+
+          <!-- 无数据 -->
+          <template #empty>
+            <div class="table-empty">
+              <slot name="empty">
+                <img src="@/assets/images/notData.png" alt="notData" />
+                <div>暂无数据</div>
+              </slot>
+            </div>
+          </template>
+        </el-table>
+      </div>
+    </el-form>
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button @click="cancel">取 消</el-button>
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+      </div>
+    </template>
+  </el-dialog>
+</template>
+
+<script setup lang="tsx">
+import {reactive, ref} from "vue";
+import {ColumnProps} from "@/components/ProTable/interface";
+
+const rules = ref<any>(
+  {
+    name: [{ required: true, message: "任务名称不能为空", trigger: "blur" }],
+    startTime: [{ required: true, message: "开始时间不能为空", trigger: "blur" }],
+    endTime: [{ required: true, message: "结束时间不能为空", trigger: "blur" }],
+  }
+);
+const dialog = reactive<any>({
+  visible: false,
+  title: '',
+  isMode: true
+});
+
+const dialogTask = reactive<any>({
+  visible: false,
+  title: '',
+  isMode: true
+});
+
+const dailyForm = ref<any>({
+  relationship: "1",
+  cycle:"",
+  manner:""
+});
+
+const taskForm = ref<any>({
+  relationship: "1",
+  cycle:"",
+  manner:"",
+  name:"",
+  startTime:"",
+  endTime:"",
+  type:""
+});
+
+
+/** 修改按钮操作 */
+const handleUpdateTask = async (row?: any) => {
+  reset();
+  dialogTask.visible = true;
+  dialogTask.title = "策略管理";
+  dialogTask.isMode = false;
+}
+
+
+
+/** 修改按钮操作 */
+const handleUpdate = async (row?: any) => {
+  reset();
+  dialog.visible = true;
+  dialog.title = "策略管理";
+  dialog.isMode = false;
+}
+
+
+/** 取消按钮 */
+const cancel = () => {
+  reset();
+  dialog.visible = false;
+}
+/** 表单重置 */
+const reset = () => {
+  dailyForm.value = { ...dailyForm };
+  formRef.value?.resetFields();
+}
+
+
+
+
+
+const formRef = ref<any>();
+const formInline = ref<any>({
+
+})
+
+/** 提交按钮 */
+const submitForm = () => {
+  formRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+
+    }
+  });
+}
+
+const radio1 = ref('日常策略')
+
+const processTableData = ref([
+  {
+    a: "能见度",
+    d: "1",
+    e: "告警时间",
+    f: "字幕告警",
+  }
+]);
+
+// 表格配置项
+const columns = reactive<ColumnProps[]>([
+  { prop: "a", label: "策略名称"},
+  { prop: "b", label: "告警条件"},
+  { prop: "c", label: "消警条件" },
+  { prop: "d", label: "告警时间" },
+  { prop: "e", label: "消警时间" },
+  { prop: "f", label: "告警方式" },
+  { prop: "operation", label: "操作", width:150,align: 'center' }
+]);
+
+const processTableData2 = ref([
+
+]);
+
+// 表格配置项
+const columns2 = reactive<ColumnProps[]>([
+  { prop: "a", label: "任务名称"},
+  { prop: "b", label: "开始时间"},
+  { prop: "c", label: "结束时间" },
+  { prop: "d", label: "能见度" },
+  { prop: "e", label: "风速" },
+  { prop: "f", label: "大气电场" },
+  { prop: "g", label: "云量" },
+  { prop: "h", label: "云高" },
+  { prop: "i", label: "气温" },
+  { prop: "j", label: "湿度" },
+  { prop: "k", label: "降水" },
+  { prop: "l", label: "启停" }
+]);
+
+
+const processTableData3 = ref([
+
+]);
+
+// 表格配置项
+const columns3 = reactive<ColumnProps[]>([
+  { prop: "a", label: "告警要素"},
+  { prop: "b", label: "告警条件"},
+  { prop: "c", label: "告警阈值" },
+  { prop: "operation", label: "操作", width:100,align: 'center' }
+]);
+
+const processTableData4 = ref([
+
+]);
+
+// 表格配置项
+const columns4 = reactive<ColumnProps[]>([
+  { prop: "a", label: "消警要素"},
+  { prop: "b", label: "消警条件"},
+  { prop: "c", label: "消警阈值" },
+  { prop: "operation", label: "操作", width:100,align: 'center' }
+]);
+</script>
+
+<style scoped>
+.table-box{
+  height: 100%;
+}
+
+.flex-center{
+  display: flex;
+  align-items: center
+}
+
+.tactics .el-form-item--default {
+  margin-bottom: 0px;
+}
+</style>

+ 291 - 0
src/views/system/stations/components/threshold.vue

@@ -0,0 +1,291 @@
+<template>
+  <el-form :inline="true" :model="formInline" ref="formRef"  class="form-inline" label-position="top">
+    <div style="display: flex;flex-direction: column;">
+      <div style="flex-grow: 1;height: 66vh;overflow-y: auto;overflow-x: hidden">
+        <el-row :gutter="20">
+          <el-col :span="20">
+            <el-radio-group v-model="radio1">
+              <el-radio-button  label="云底高设置" value="云底高设置" plain/>
+              <el-radio-button  label="温湿压设置" value="温湿压设置" plain/>
+              <el-radio-button  label="累年平均值" value="累年平均值" plain/>
+            </el-radio-group>
+          </el-col>
+        </el-row>
+        <el-row :gutter="31" v-if="radio1==='云底高设置'">
+          <el-col :span="8">
+            <div class="table-box" style="margin-top: 20px;height: 57vh" >
+              <!-- 表格主体 -->
+              <el-table stripe ref="tableRef" :border="true" :data="processTableData"  size="small">
+                <template v-for="item in columns" :key="item">
+                  <el-table-column v-bind="item" :align="item.align ?? 'left'" :reserve-selection="item.type == 'selection'" :show-overflow-tooltip="true">
+                  </el-table-column>
+                </template>
+
+                <!-- 无数据 -->
+                <template #empty>
+                  <div class="table-empty">
+                    <slot name="empty">
+                      <img src="@/assets/images/notData.png" alt="notData" />
+                      <div>暂无数据</div>
+                    </slot>
+                  </div>
+                </template>
+              </el-table>
+            </div>
+          </el-col>
+          <el-col :span="8">
+            <div class="table-box" style="margin-top: 20px;height: 57vh" >
+              <!-- 表格主体 -->
+              <el-table stripe ref="tableRef" :border="true" :data="processTableData2"  size="small">
+                <template v-for="item in columns2" :key="item">
+                  <el-table-column v-bind="item" :align="item.align ?? 'left'" :reserve-selection="item.type == 'selection'" :show-overflow-tooltip="true">
+                  </el-table-column>
+                </template>
+
+                <!-- 无数据 -->
+                <template #empty>
+                  <div class="table-empty">
+                    <slot name="empty">
+                      <img src="@/assets/images/notData.png" alt="notData" />
+                      <div>暂无数据</div>
+                    </slot>
+                  </div>
+                </template>
+              </el-table>
+            </div>
+          </el-col>
+          <el-col :span="8">
+            <div class="table-box" style="margin-top: 20px;height: 57vh" >
+              <!-- 表格主体 -->
+              <el-table stripe ref="tableRef" :border="true" :data="processTableData3"  size="small">
+                <template v-for="item in columns3" :key="item">
+                  <el-table-column v-bind="item" :align="item.align ?? 'left'" :reserve-selection="item.type == 'selection'" :show-overflow-tooltip="true">
+                  </el-table-column>
+                </template>
+
+                <!-- 无数据 -->
+                <template #empty>
+                  <div class="table-empty">
+                    <slot name="empty">
+                      <img src="@/assets/images/notData.png" alt="notData" />
+                      <div>暂无数据</div>
+                    </slot>
+                  </div>
+                </template>
+              </el-table>
+            </div>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20" v-if="radio1==='温湿压设置'">
+          <el-col :span="24">
+            <el-button type="primary" plain style="margin-top: 15px;">导出历史值</el-button>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20" v-if="radio1==='温湿压设置'">
+          <el-col :span="24">
+            <div class="table-box" style="margin-top: 10px;height: 53vh" >
+              <!-- 表格主体 -->
+              <el-table stripe ref="tableRef" :border="true" :data="processTableData4"  size="small">
+                <template v-for="item in columns4" :key="item">
+                  <el-table-column v-bind="item" :align="item.align ?? 'left'" :reserve-selection="item.type == 'selection'" :show-overflow-tooltip="true">
+                  </el-table-column>
+                </template>
+
+                <!-- 无数据 -->
+                <template #empty>
+                  <div class="table-empty">
+                    <slot name="empty">
+                      <img src="@/assets/images/notData.png" alt="notData" />
+                      <div>暂无数据</div>
+                    </slot>
+                  </div>
+                </template>
+              </el-table>
+            </div>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20" v-if="radio1==='累年平均值'">
+          <el-col :span="24">
+            <div class="table-box" style="margin-top: 10px;height: 57vh" >
+              <!-- 表格主体 -->
+              <el-table stripe ref="tableRef" :border="true" :data="processTableData5"  size="small">
+                <template v-for="item in columns5" :key="item">
+                  <el-table-column v-bind="item" :align="item.align ?? 'left'" :reserve-selection="item.type == 'selection'" :show-overflow-tooltip="true">
+                  </el-table-column>
+                </template>
+
+                <!-- 无数据 -->
+                <template #empty>
+                  <div class="table-empty">
+                    <slot name="empty">
+                      <img src="@/assets/images/notData.png" alt="notData" />
+                      <div>暂无数据</div>
+                    </slot>
+                  </div>
+                </template>
+              </el-table>
+            </div>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="disposition-bottom">
+        <el-button > 取消 </el-button>
+        <el-button type="primary" plain> 上一步 </el-button>
+        <el-button type="primary"> 下一步 </el-button>
+      </div>
+    </div>
+  </el-form>
+</template>
+
+<script setup lang="tsx">
+import {reactive, ref} from "vue";
+import {ColumnProps} from "@/components/ProTable/interface";
+const formRef = ref<any>();
+const formInline = ref<any>({
+
+})
+
+/** 提交按钮 */
+const submitForm = () => {
+  formRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+
+    }
+  });
+}
+
+const radio1 = ref('云底高设置')
+
+const processTableData = ref([
+  {
+    a: "Cihl",
+    b: "4500",
+    c: "11000",
+  }
+]);
+
+// 表格配置项
+const columns = reactive<ColumnProps[]>([
+  { prop: "a", label: "要素"},
+  { prop: "b", label: "低值"},
+  { prop: "c", label: "高值" },
+]);
+
+const processTableData2 = ref([
+  {
+    a: "Astra",
+    b: "2500",
+    c: "4500",
+  },
+  {
+    a: "Astra",
+    b: "2500",
+    c: "4500",
+  },{
+    a: "Astra",
+    b: "2500",
+    c: "4500",
+  },{
+    a: "Astra",
+    b: "2500",
+    c: "4500",
+  }
+]);
+
+// 表格配置项
+const columns2 = reactive<ColumnProps[]>([
+  { prop: "a", label: "要素"},
+  { prop: "b", label: "低值"},
+  { prop: "c", label: "高值" },
+]);
+
+const processTableData3 = ref([
+  {
+    a: "Cuhum",
+    b: "600",
+    c: "2000",
+  }
+]);
+
+// 表格配置项
+const columns3 = reactive<ColumnProps[]>([
+  { prop: "a", label: "要素"},
+  { prop: "b", label: "低值"},
+  { prop: "c", label: "高值" },
+]);
+
+
+const processTableData4 = ref([
+  {
+    a: "1月",
+    b: "-10",
+    c: "40",
+  }
+]);
+
+// 表格配置项
+const columns4 = reactive<ColumnProps[]>([
+  { prop: "a", label: "月份"},
+  { prop: "b", label: "最低气温(℃)"},
+  { prop: "c", label: "最高气温(℃)" },
+  { prop: "d", label: "最小相对混度(%)" },
+  { prop: "e", label: "最大相对混度(%)" },
+  { prop: "f", label: "本站最小气压(hpa)" },
+  { prop: "g", label: "本站最大气压(hpa)" },
+]);
+
+const processTableData5 = ref([
+  {
+    a: "1月"
+  },
+  {
+    a: "2月"
+  },
+  {
+    a: "3月"
+  },
+  {
+    a: "4月"
+  },
+  {
+    a: "5月"
+  },
+  {
+    a: "6月"
+  },
+  {
+    a: "7月"
+  },
+  {
+    a: "8月"
+  },
+  {
+    a: "9月"
+  },
+  {
+    a: "10月"
+  },
+  {
+    a: "11月"
+  },
+  {
+    a: "12月"
+  },
+
+]);
+
+// 表格配置项
+const columns5 = reactive<ColumnProps[]>([
+  { prop: "a", label: "月份"},
+  { prop: "b", label: "温度平均值(℃)"},
+  { prop: "c", label: "湿度平均值(RH%)" },
+  { prop: "d", label: "气压平均值(hpa)" },
+]);
+
+</script>
+
+<style scoped>
+.table-box{
+  height: 100%;
+}
+</style>

+ 126 - 0
src/views/system/stations/components/verificationCertificate.vue

@@ -0,0 +1,126 @@
+<template>
+<div class="table-box">
+  <div style="display: flex;flex-direction: column;">
+    <div style="flex-grow: 1;height: 66vh;overflow-y: auto;overflow-x: hidden">
+      <!-- 表格主体 -->
+      <el-table stripe ref="tableRef" :border="true" :data="processTableData"  size="small">
+        <el-table-column align="left" label="序号" width="80px" :show-overflow-tooltip="true">
+          <template #default="scope">
+            {{ scope.$index + 1 }}
+          </template>
+        </el-table-column>
+        <template v-for="item in columns" :key="item">
+          <el-table-column v-bind="item" :align="item.align ?? 'left'" :reserve-selection="item.type == 'selection'">
+            <template #default="scope">
+              <template v-if="item.prop === 'c'">
+                <el-date-picker
+                  class="no-border"
+                  v-model="scope.row.c"
+                  type="date"
+                  placeholder="请选择日期"
+                />
+              </template>
+              <template v-if="item.prop === 'd'">
+                <div style="min-height: 20px" @dblclick="editCell(scope.row, 'd')">
+                  <el-input v-if="isEditing(scope.row, 'd')" ref="inputRef" v-model="scope.row.d" @blur="saveEdit(scope.row, 'd')" />
+                  <span v-else>{{ scope.row.d }}</span>
+                </div>
+              </template>
+              <template v-if="item.prop === 'operation'">
+                <el-tooltip
+                  class="box-item"
+                  effect="dark"
+                  content="编辑"
+                  placement="top"
+                >
+                  <el-button type="primary" link @click="handleUpdate">
+                    <el-icon >
+                      <Edit />
+                    </el-icon>
+                  </el-button>
+                </el-tooltip>
+              </template>
+            </template>
+          </el-table-column>
+        </template>
+
+        <!-- 无数据 -->
+        <template #empty>
+          <div class="table-empty">
+            <slot name="empty">
+              <img src="@/assets/images/notData.png" alt="notData" />
+              <div>暂无数据</div>
+            </slot>
+          </div>
+        </template>
+      </el-table>
+    </div>
+    <div class="disposition-bottom">
+      <el-button > 取消 </el-button>
+      <el-button type="primary" plain> 上一步 </el-button>
+      <el-button type="primary"> 下一步 </el-button>
+    </div>
+  </div>
+</div>
+</template>
+
+<script setup lang="tsx">
+import {reactive, ref} from "vue";
+import {ColumnProps} from "@/components/ProTable/interface";
+
+const processTableData = ref([
+  {
+    a: "超声风传感器",
+    b: "",
+    c: "",
+    d: "11111111111111111",
+    e: ""
+  },
+  {
+    a: "超声风传感器",
+    b: "",
+    c: "",
+    d: "11111111111111111",
+    e: ""
+  }
+]);
+
+// 表格配置项
+const columns = reactive<ColumnProps[]>([
+  { prop: "a", label: "检定项目" },
+  { prop: "b", label: "传感器序列号" },
+  { prop: "c", label: "检定日期" },
+  { prop: "d", label: "检定周期(月)" },
+  { prop: "e", label: "下一次检定日期" },
+  { prop: "operation", label: "操作", width:150,align: 'center' }
+]);
+
+const editingRow = ref<any | null>(null);
+const editingField = ref<string | null>(null);
+const editCell = (row: any, field: string) => {
+  editingRow.value = row;
+  editingField.value = field;
+};
+
+const isEditing = (row: any, field: string) => {
+  return editingRow.value === row && editingField.value === field;
+};
+
+const saveEdit = (row: any, field: string) => {
+  editingRow.value = null;
+  editingField.value = null;
+};
+</script>
+
+<style scoped>
+.table-box{
+  height: 100%;
+}
+
+::v-deep .no-border .el-input__wrapper  {
+  box-shadow: 0 0 0 0px!important;
+  background-color: #00000000;
+}
+
+
+</style>

+ 8 - 4
src/views/system/stations/index.vue

@@ -85,19 +85,19 @@
           <ParametersBasic></ParametersBasic>
         </el-tab-pane>
         <el-tab-pane label="观测要素">
-          观测要素
+          <VerificationCertificate></VerificationCertificate>
         </el-tab-pane>
         <el-tab-pane label="仪器检定证">
           仪器检定证
         </el-tab-pane>
         <el-tab-pane label="阈值设置">
-          阈值设置
+          <Threshold></Threshold>
         </el-tab-pane>
         <el-tab-pane label="保障策略设置">
-          保障策略设置
+          <StrategySafeguard></StrategySafeguard>
         </el-tab-pane>
         <el-tab-pane label="编报项目设置">
-          编报项目设置
+          <Newspapers></Newspapers>
         </el-tab-pane>
       </el-tabs>
     </el-dialog>
@@ -106,7 +106,11 @@
 
 <script setup lang="ts" name="useProTable">
 import Pagination from "@/components/ProTable/components/Pagination.vue";
+import VerificationCertificate from "./components/verificationCertificate.vue";
+import Threshold from "./components/threshold.vue";
+import Newspapers from "./components/newspapers.vue";
 import ParametersBasic from "./components/parametersBasic.vue";
+import StrategySafeguard from "./components/strategySafeguard.vue";
 import { ref, reactive } from "vue";
 import { ColumnProps } from "@/components/ProTable/interface";
 import { ElMessageBox } from 'element-plus'