Lin Qilong 1 week ago
parent
commit
a57cfcbfb2

+ 186 - 3
gw-ui/src/components/CoordPicker/index.vue

@@ -1,9 +1,58 @@
 <template>
+  <!--
+    经纬度坐标选择器 CoordPicker
+    ==============================
+    功能:提供"点击获取经纬度"按钮,点击后弹出天地图选点弹窗,
+          包含实时鼠标位置、已选坐标、地址信息展示。
+          用户确定后将选中的经纬度值通过 v-model 回传。
+
+    使用方式:
+      <CoordPicker v-model="coords" />
+      其中 coords 为 [lng, lat] 格式的数组,如 [116.397428, 39.908692]
+
+    适用场景:
+      - 工程填报页面中,配合 lat/lng 输入框使用
+      - 输入框正常绑定表单字段(如 form.cenLong / form.cenLat)
+      - CoordPicker 通过 computed 属性与输入框共享 [lng, lat] 数据
+  -->
   <div class="coord-picker-btn">
-    <el-button icon="MapLocation" type="text" @click="openPicker">点击获取经纬度</el-button>
+    <!-- 触发按钮:点击打开天地图选点弹窗 -->
+    <el-button icon="MapLocation" type="text" @click="openPicker">
+      点击获取经纬度
+    </el-button>
 
+    <!--
+      选点弹窗
+      - destroy-on-close: 关闭时销毁地图实例,避免内存泄漏
+      - append-to-body: 挂载到 body,避免被父级 overflow 裁剪
+    -->
     <el-dialog v-model="visible" title="选取经纬度" width="700px" append-to-body @closed="onClosed">
-      <TiandituMapPicker v-model="coords" :height="400"/>
+      <!--
+        天地图选点组件
+        - v-model="coords": 弹窗内部临时坐标
+        - @mousemove: 地图鼠标移动时更新当前鼠标位置
+      -->
+      <TiandituMapPicker v-model="coords" :height="400" @mousemove="onMouseMove"/>
+
+      <!-- 状态栏:鼠标位置 / 已选坐标 / 地址 -->
+      <div class="coord-status-bar">
+        <div class="status-row">
+          <span>当前鼠标位置: {{ mouseLngText }}°E, {{ mouseLatText }}°N</span>
+          <span v-if="hasPicked" class="picked-info">
+            已选择: {{ pickedLngText }}°E, {{ pickedLatText }}°N
+          </span>
+          <span v-else class="pick-tip">点击地图选择位置</span>
+        </div>
+        <div v-if="hasPicked && pickedAddress" class="address-row">
+          <span class="address-label">地址:</span>
+          <span class="address-text">{{ pickedAddress }}</span>
+        </div>
+        <div v-else-if="hasPicked && loadingAddress" class="address-row">
+          <span class="address-label">地址:</span>
+          <span class="address-loading">正在获取地址信息...</span>
+        </div>
+      </div>
+
       <template #footer>
         <el-button type="primary" @click="confirm">确 定</el-button>
         <el-button @click="visible = false">取 消</el-button>
@@ -13,30 +62,164 @@
 </template>
 
 <script setup>
+/**
+ * CoordPicker — 经纬度坐标选择器
+ *
+ * @description
+ * 以按钮 + 弹窗的形式提供天地图地图选点功能。
+ * 弹窗内包含地图、鼠标位置跟踪、已选坐标和地址信息的实时展示。
+ * 组件本身不渲染经纬度输入框,输入框由父组件以普通 el-input 实现。
+ */
 import TiandituMapPicker from '@/components/TiandituMapPicker'
 
+const TK = import.meta.env.VITE_TIANDITU_KEY || '2d46608fc30b02c5855c5dc662e7d33a'
+
+// ==================== Props ====================
+
 const props = defineProps({
+  /** 当前坐标值,格式 [经度, 纬度],null 表示未选取 */
   modelValue: { type: Array, default: null }
 })
 
+// ==================== Emits ====================
+
 const emit = defineEmits(['update:modelValue'])
 
+// ==================== 响应式状态 ====================
+
 const visible = ref(false)
+
+/** 弹窗内部临时坐标,与外部 modelValue 隔离 */
 const coords = ref(null)
 
+/** 鼠标在地图上的当前位置 */
+const mouseLng = ref(null)
+const mouseLat = ref(null)
+
+/** 选中点位的地址描述(逆地理编码结果) */
+const pickedAddress = ref('')
+const loadingAddress = ref(false)
+
+// ==================== 计算属性 ====================
+
+const hasPicked = computed(() => coords.value && coords.value[0] != null && coords.value[1] != null)
+
+const mouseLngText = computed(() => mouseLng.value !== null ? mouseLng.value.toFixed(6) : '---.------')
+const mouseLatText = computed(() => mouseLat.value !== null ? mouseLat.value.toFixed(6) : '--.------')
+
+const pickedLngText = computed(() => hasPicked.value ? coords.value[0].toFixed(6) : '')
+const pickedLatText = computed(() => hasPicked.value ? coords.value[1].toFixed(6) : '')
+
+// ==================== 方法 ====================
+
+/** 打开选点弹窗,以当前 modelValue 初始化地图 */
 function openPicker() {
   coords.value = props.modelValue ? [...props.modelValue] : null
+  mouseLng.value = null
+  mouseLat.value = null
+  pickedAddress.value = ''
   visible.value = true
 }
 
+/** 确定选点,将临时坐标同步到外部 modelValue */
 function confirm() {
-  if (coords.value && coords.value[0] != null && coords.value[1] != null) {
+  if (hasPicked.value) {
     emit('update:modelValue', [...coords.value])
   }
   visible.value = false
 }
 
+/** 弹窗关闭清理 */
 function onClosed() {
   coords.value = null
+  mouseLng.value = null
+  mouseLat.value = null
+  pickedAddress.value = ''
+}
+
+/** 地图鼠标移动回调 */
+function onMouseMove({ lng, lat }) {
+  mouseLng.value = lng
+  mouseLat.value = lat
 }
+
+/**
+ * 逆地理编码:经纬度 → 地址描述
+ * 当地图上选中坐标变化时(coords 更新),自动查询地址
+ */
+async function fetchAddress(lng, lat) {
+  loadingAddress.value = true
+  pickedAddress.value = ''
+  try {
+    const resp = await fetch(
+      `https://api.tianditu.gov.cn/geocoder?postStr={'lon':${lng},'lat':${lat},'ver':1}&type=geocode&tk=${TK}`
+    )
+    const data = await resp.json()
+    if (data.status === '0' && data.result) {
+      pickedAddress.value = data.result.formatted_address || ''
+    }
+  } catch (e) {
+    console.warn('逆地理编码失败:', e)
+  }
+  loadingAddress.value = false
+}
+
+/** 监听 coords 变化,触发地址查询 */
+watch(() => coords.value, (val) => {
+  if (val && val[0] != null && val[1] != null) {
+    fetchAddress(val[0], val[1])
+  }
+}, { deep: true })
 </script>
+
+<style lang="scss" scoped>
+.coord-status-bar {
+  margin-top: -1px;
+  background: rgba(20, 45, 100, 0.88);
+  padding: 10px 15px;
+  border: 1px solid rgba(50, 120, 220, 0.3);
+  border-top: none;
+  font-size: 13px;
+  color: #c0d8f0;
+  font-family: monospace;
+
+  .status-row {
+    display: flex;
+    align-items: center;
+
+    .picked-info {
+      margin-left: 20px;
+      color: #67c23a;
+    }
+
+    .pick-tip {
+      margin-left: 20px;
+      color: #909399;
+    }
+  }
+
+  .address-row {
+    margin-top: 6px;
+    display: flex;
+    align-items: center;
+
+    .address-label {
+      color: rgba(160, 200, 240, 0.6);
+      margin-right: 8px;
+      white-space: nowrap;
+    }
+
+    .address-text {
+      color: #a0d8ff;
+      flex: 1;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      white-space: nowrap;
+    }
+
+    .address-loading {
+      color: rgba(160, 200, 240, 0.5);
+    }
+  }
+}
+</style>

+ 37 - 1
gw-ui/src/components/TiandituMapPicker/index.vue

@@ -59,7 +59,7 @@ const props = defineProps({
   }
 })
 
-const emit = defineEmits(['update:modelValue', 'select'])
+const emit = defineEmits(['update:modelValue', 'select', 'mousemove'])
 
 const TK = import.meta.env.VITE_TIANDITU_KEY || '2d46608fc30b02c5855c5dc662e7d33a'
 const mapContainer = ref(null)
@@ -75,6 +75,13 @@ const hasValue = computed(() => props.modelValue !== null && props.modelValue !=
 const currentLng = ref(null)
 const currentLat = ref(null)
 
+/** 鼠标当前位置 */
+const mouseLng = ref(null)
+const mouseLat = ref(null)
+
+/** 选中位置的地址信息 */
+const pickedAddress = ref('')
+
 const lngText = computed(() => {
   if (currentLng.value !== null) return Number(currentLng.value).toFixed(6)
   return ''
@@ -99,6 +106,7 @@ function parseModelValue(val) {
 function emitValue(lng, lat) {
   emit('update:modelValue', [lng, lat])
   emit('select', { lng, lat })
+  reverseGeocode(lng, lat)
 }
 
 function initMap() {
@@ -121,6 +129,7 @@ function initMap() {
 
   if (!props.readonly) {
     map.on('click', onMapClick)
+    map.on('mousemove', onMapMouseMove)
   }
 
   const parsed = parseModelValue(props.modelValue)
@@ -166,6 +175,14 @@ function onMapClick(e) {
   if (props.readonly) return
   placeMarker(e.latlng.lng, e.latlng.lat)
   emitValue(e.latlng.lng, e.latlng.lat)
+  reverseGeocode(e.latlng.lng, e.latlng.lat)
+}
+
+/** 鼠标移动时更新当前位置并通知外部 */
+function onMapMouseMove(e) {
+  mouseLng.value = e.latlng.lng
+  mouseLat.value = e.latlng.lat
+  emit('mousemove', { lng: e.latlng.lng, lat: e.latlng.lat })
 }
 
 // 地理编码:地名/地址 -> 经纬度(最适合“搜索地点,回车定位”场景)
@@ -187,6 +204,22 @@ async function geocode(keyword) {
   return null
 }
 
+/** 逆地理编码:经纬度 → 地址描述 */
+async function reverseGeocode(lng, lat) {
+  pickedAddress.value = ''
+  try {
+    const resp = await fetch(
+      `https://api.tianditu.gov.cn/geocoder?postStr={'lon':${lng},'lat':${lat},'ver':1}&type=geocode&tk=${TK}`
+    )
+    const data = await resp.json()
+    if (data.status === '0' && data.result) {
+      pickedAddress.value = data.result.formatted_address || ''
+    }
+  } catch (e) {
+    console.warn('逆地理编码失败:', e)
+  }
+}
+
 async function handleSearch() {
   if (!searchText.value || props.readonly) return
   try {
@@ -268,9 +301,11 @@ watch(() => props.readonly, (val) => {
   if (!map) return
   if (val) {
     map.off('click', onMapClick)
+    map.off('mousemove', onMapMouseMove)
     if (marker) marker.dragging?.disable()
   } else {
     map.on('click', onMapClick)
+    map.on('mousemove', onMapMouseMove)
     if (marker) marker.dragging?.enable()
   }
 })
@@ -282,6 +317,7 @@ onMounted(() => {
 onUnmounted(() => {
   if (map) {
     map.off('click', onMapClick)
+    map.off('mousemove', onMapMouseMove)
     map.remove()
     map = null
   }

+ 193 - 114
gw-ui/src/views/slaj/eng/attenghyst/index.vue

@@ -1,43 +1,60 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px" class="search-form">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px"
+      class="search-form">
       <div class="search-form-left">
-        <el-form-item label="工程名称" prop="engName"><el-input v-model="queryParams.engName" placeholder="请输入" clearable @keyup.enter="handleQuery" /></el-form-item>
-        <el-form-item label="电站代码" prop="hystCode"><el-input v-model="queryParams.hystCode" placeholder="请输入" clearable /></el-form-item>
+        <el-form-item label="工程名称" prop="engName"><el-input v-model="queryParams.engName" placeholder="请输入" clearable
+            @keyup.enter="handleQuery" /></el-form-item>
+        <el-form-item label="电站代码" prop="hystCode"><el-input v-model="queryParams.hystCode" placeholder="请输入"
+            clearable /></el-form-item>
         <el-form-item>
           &nbsp;&nbsp;
-          <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button><el-button icon="Refresh" @click="resetQuery">重置</el-button>
+          <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button><el-button icon="Refresh"
+            @click="resetQuery">重置</el-button>
         </el-form-item>
       </div>
       <div class="search-form-right">
         <el-button type="primary" plain icon="Plus" @click="handleAdd">新增</el-button>
-<!--        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate(null)">修改</el-button>-->
+        <!--        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate(null)">修改</el-button>-->
         <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete(null)">删除</el-button>
-<!--        <el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>-->
+        <!--        <el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>-->
         <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" />
       </div>
     </el-form>
     <el-table v-loading="loading" :data="dataList" height="calc(100% - 100px)" @selection-change="handleSelect">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="工程名称" prop="engName" align="center" :show-overflow-tooltip="true" v-if="columns.engName.visible" />
+      <el-table-column label="工程名称" prop="engName" align="center" :show-overflow-tooltip="true"
+        v-if="columns.engName.visible" />
       <el-table-column label="电站代码" prop="hystCode" align="center" v-if="columns.hystCode.visible" />
       <el-table-column label="电站位置" prop="hystSite" align="center" v-if="columns.hystSite.visible" />
-      <el-table-column label="电站类型" align="center" v-if="columns.hystType.visible"><template #default="scope"><dict-tag :options="slaj_hyst_type" :value="scope.row.hystType" /></template></el-table-column>
-      <el-table-column label="是否为农村水电站" width="130" align="center" v-if="columns.ifRhyst.visible"><template #default="scope"><dict-tag :options="slaj_if_rhyst" :value="scope.row.ifRhyst" /></template></el-table-column>
-      <el-table-column label="是否具有水库调节能力" width="160" align="center" v-if="columns.ifRsPow.visible"><template #default="scope"><dict-tag :options="slaj_if_rs_pow" :value="scope.row.ifRsPow" /></template></el-table-column>
+      <el-table-column label="电站类型" align="center" v-if="columns.hystType.visible"><template #default="scope"><dict-tag
+            :options="slaj_hyst_type" :value="scope.row.hystType" /></template></el-table-column>
+      <el-table-column label="是否为农村水电站" width="130" align="center" v-if="columns.ifRhyst.visible"><template
+          #default="scope"><dict-tag :options="slaj_if_rhyst" :value="scope.row.ifRhyst" /></template></el-table-column>
+      <el-table-column label="是否具有水库调节能力" width="160" align="center" v-if="columns.ifRsPow.visible"><template
+          #default="scope"><dict-tag :options="slaj_if_rs_pow"
+            :value="scope.row.ifRsPow" /></template></el-table-column>
       <el-table-column label="水库名称" prop="resName" align="center" v-if="columns.resName.visible" />
       <el-table-column label="水库代码" prop="resCode" align="center" v-if="columns.resCode.visible" />
       <el-table-column label="装机容量(kW)" width="110" prop="insCap" align="center" v-if="columns.insCap.visible" />
       <el-table-column label="总库容" prop="totCap" align="center" v-if="columns.totCap.visible" />
       <el-table-column label="大坝注册代码" width="120" prop="damRegCode" align="center" v-if="columns.damRegCode.visible" />
-      <el-table-column label="大坝安全鉴定类别" width="130" align="center" v-if="columns.damIdenCate.visible"><template #default="scope"><dict-tag :options="slaj_dam_iden_cate" :value="scope.row.damIdenCate" /></template></el-table-column>
-      <el-table-column label="大坝安全鉴定单位" width="130" prop="damIdenOrg" align="center" v-if="columns.damIdenOrg.visible" />
-      <el-table-column label="大坝安全鉴定时间" width="130" prop="damIdenDate" align="center" v-if="columns.damIdenDate.visible" />
+      <el-table-column label="大坝安全鉴定类别" width="130" align="center" v-if="columns.damIdenCate.visible"><template
+          #default="scope"><dict-tag :options="slaj_dam_iden_cate"
+            :value="scope.row.damIdenCate" /></template></el-table-column>
+      <el-table-column label="大坝安全鉴定单位" width="130" prop="damIdenOrg" align="center"
+        v-if="columns.damIdenOrg.visible" />
+      <el-table-column label="大坝安全鉴定时间" width="130" prop="damIdenDate" align="center"
+        v-if="columns.damIdenDate.visible" />
       <el-table-column label="坝高(m)" prop="damHig" align="center" v-if="columns.damHig.visible" />
-      <el-table-column label="工程等级" align="center" v-if="columns.engGrad.visible"><template #default="scope"><dict-tag :options="slaj_eng_grad_hyst" :value="scope.row.engGrad" /></template></el-table-column>
-      <el-table-column label="工程规模" align="center" v-if="columns.engScal.visible"><template #default="scope"><dict-tag :options="slaj_eng_scal_hyst" :value="scope.row.engScal" /></template></el-table-column>
-      <el-table-column label="工程状态" align="center" v-if="columns.engStat.visible"><template #default="scope"><dict-tag :options="slaj_eng_stat" :value="scope.row.engStat" /></template></el-table-column>
-      <el-table-column label="备注" prop="note" align="center" :show-overflow-tooltip="true" v-if="columns.note.visible" />
+      <el-table-column label="工程等级" align="center" v-if="columns.engGrad.visible"><template #default="scope"><dict-tag
+            :options="slaj_eng_grad_hyst" :value="scope.row.engGrad" /></template></el-table-column>
+      <el-table-column label="工程规模" align="center" v-if="columns.engScal.visible"><template #default="scope"><dict-tag
+            :options="slaj_eng_scal_hyst" :value="scope.row.engScal" /></template></el-table-column>
+      <el-table-column label="工程状态" align="center" v-if="columns.engStat.visible"><template #default="scope"><dict-tag
+            :options="slaj_eng_stat" :value="scope.row.engStat" /></template></el-table-column>
+      <el-table-column label="备注" prop="note" align="center" :show-overflow-tooltip="true"
+        v-if="columns.note.visible" />
       <el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width" fixed="right">
         <template #default="scope">
           <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)">修改</el-button>
@@ -45,111 +62,155 @@
         </template>
       </el-table-column>
     </el-table>
-    <pagination v-show="total>0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
     <el-dialog :title="title" v-model="open" width="750px" append-to-body class="eng-edit-dialog">
       <el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
         <el-tabs v-model="activeTab">
-        <el-tab-pane label="基本信息" name="basic">
-        <el-row>
-          <el-col :span="12"><el-form-item label="工程名称" prop="engName"><el-input v-model="form.engName" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="电站代码" prop="hystCode"><el-input v-model="form.hystCode" placeholder="请输入" /></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="电站位置" prop="hystSite"><el-input v-model="form.hystSite" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="重要程度" prop="impoGrad"><el-select v-model="form.impoGrad" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_impo_grad" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="8"><el-form-item label="中心经度(°)" prop="cenLong">
-                <el-input v-model="form.cenLong" placeholder="请输入经度"/>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8"><el-form-item label="中心纬度(°)" prop="cenLat">
-                <el-input v-model="form.cenLat" placeholder="请输入纬度"/>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8"><CoordPicker style="margin-left: 10px;" v-model="mapCoords"/></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="批复投资(万元)" prop="apprBudg"><el-input v-model="form.apprBudg" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="工程状态" prop="engStat"><el-select v-model="form.engStat" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_stat" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="启停状态" prop="stat"><el-select v-model="form.stat" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_stat" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="是否除险加固" prop="ifReinForce"><el-select v-model="form.ifReinForce" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_if_rein_force" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        </el-tab-pane>
-        <el-tab-pane label="电站参数" name="hyst">
-        <el-row>
-          <el-col :span="12"><el-form-item label="电站类型" prop="hystType"><el-select v-model="form.hystType" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_hyst_type" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="是否为农村水电站" prop="ifRhyst"><el-select v-model="form.ifRhyst" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_if_rhyst" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="是否具有水库调节能力" prop="ifRsPow"><el-select v-model="form.ifRsPow" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_if_rs_pow" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="装机容量(kW)" prop="insCap"><el-input v-model="form.insCap" placeholder="请输入" /></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="水库名称" prop="resName"><el-input v-model="form.resName" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="水库代码" prop="resCode"><el-input v-model="form.resCode" placeholder="请输入" /></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="总库容" prop="totCap"><el-input v-model="form.totCap" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="坝高(m)" prop="damHig"><el-input v-model="form.damHig" placeholder="请输入" /></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="大坝注册代码" prop="damRegCode"><el-input v-model="form.damRegCode" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="大坝安全鉴定类别" prop="damIdenCate"><el-select v-model="form.damIdenCate" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_dam_iden_cate" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="大坝安全鉴定单位" prop="damIdenOrg"><el-input v-model="form.damIdenOrg" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="大坝安全鉴定时间" prop="damIdenDate"><el-date-picker v-model="form.damIdenDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择" style="width:100%" /></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="工程等级" prop="engGrad"><el-select v-model="form.engGrad" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_grad_hyst" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="工程规模" prop="engScal"><el-select v-model="form.engScal" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_scal_hyst" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        </el-tab-pane>
-        <el-tab-pane label="时间信息" name="time">
-        <el-row>
-          <el-col :span="12"><el-form-item label="开工日期" prop="startDate"><el-date-picker v-model="form.startDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择" style="width:100%" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="完工日期" prop="compDate"><el-date-picker v-model="form.compDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择" style="width:100%" /></el-form-item></el-col>
-        </el-row>
-        <el-form-item label="备注" prop="note"><el-input v-model="form.note" type="textarea" :rows="2" placeholder="请输入" /></el-form-item>
-        </el-tab-pane>
+          <el-tab-pane label="基本信息" name="basic">
+            <el-row>
+              <el-col :span="12"><el-form-item label="工程名称" prop="engName"><el-input v-model="form.engName"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="电站代码" prop="hystCode"><el-input v-model="form.hystCode"
+                    placeholder="请输入" /></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="电站位置" prop="hystSite"><el-input v-model="form.hystSite"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="重要程度" prop="impoGrad"><el-select v-model="form.impoGrad"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_impo_grad" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="8"><el-form-item label="经度(°)" prop="cenLong">
+                  <el-input v-model="form.cenLong" placeholder="请输入经度" />
+                </el-form-item>
+              </el-col>
+              <el-col :span="8"><el-form-item label="纬度(°)" prop="cenLat">
+                  <el-input v-model="form.cenLat" placeholder="请输入纬度" />
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <CoordPicker style="margin-left: 10px;" v-model="mapCoords" />
+              </el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="批复投资(万元)" prop="apprBudg"><el-input v-model="form.apprBudg"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="工程状态" prop="engStat"><el-select v-model="form.engStat"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_stat" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="启停状态" prop="stat"><el-select v-model="form.stat" placeholder="请选择"
+                    style="width:100%"><el-option v-for="d in slaj_stat" :key="d.value" :label="d.label"
+                      :value="d.value" /></el-select></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="是否除险加固" prop="ifReinForce"><el-select v-model="form.ifReinForce"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_if_rein_force" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+          </el-tab-pane>
+          <el-tab-pane label="电站参数" name="hyst">
+            <el-row>
+              <el-col :span="12"><el-form-item label="电站类型" prop="hystType"><el-select v-model="form.hystType"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_hyst_type" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="是否为农村水电站" prop="ifRhyst"><el-select v-model="form.ifRhyst"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_if_rhyst" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="是否具有水库调节能力" prop="ifRsPow"><el-select v-model="form.ifRsPow"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_if_rs_pow" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="装机容量(kW)" prop="insCap"><el-input v-model="form.insCap"
+                    placeholder="请输入" /></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="水库名称" prop="resName"><el-input v-model="form.resName"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="水库代码" prop="resCode"><el-input v-model="form.resCode"
+                    placeholder="请输入" /></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="总库容" prop="totCap"><el-input v-model="form.totCap"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="坝高(m)" prop="damHig"><el-input v-model="form.damHig"
+                    placeholder="请输入" /></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="大坝注册代码" prop="damRegCode"><el-input v-model="form.damRegCode"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="大坝安全鉴定类别" prop="damIdenCate"><el-select v-model="form.damIdenCate"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_dam_iden_cate" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="大坝安全鉴定单位" prop="damIdenOrg"><el-input v-model="form.damIdenOrg"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="大坝安全鉴定时间" prop="damIdenDate"><el-date-picker
+                    v-model="form.damIdenDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择"
+                    style="width:100%" /></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="工程等级" prop="engGrad"><el-select v-model="form.engGrad"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_grad_hyst" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="工程规模" prop="engScal"><el-select v-model="form.engScal"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_scal_hyst" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+          </el-tab-pane>
+          <el-tab-pane label="时间信息" name="time">
+            <el-row>
+              <el-col :span="12"><el-form-item label="开工日期" prop="startDate"><el-date-picker v-model="form.startDate"
+                    type="date" value-format="YYYY-MM-DD" placeholder="请选择"
+                    style="width:100%" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="完工日期" prop="compDate"><el-date-picker v-model="form.compDate"
+                    type="date" value-format="YYYY-MM-DD" placeholder="请选择"
+                    style="width:100%" /></el-form-item></el-col>
+            </el-row>
+            <el-form-item label="备注" prop="note"><el-input v-model="form.note" type="textarea" :rows="2"
+                placeholder="请输入" /></el-form-item>
+          </el-tab-pane>
         </el-tabs>
       </el-form>
-      <template #footer><el-button type="primary" @click="submit">确 定</el-button><el-button @click="open=false">取 消</el-button></template>
+      <template #footer><el-button type="primary" @click="submit">确 定</el-button><el-button @click="open = false">取
+          消</el-button></template>
     </el-dialog>
   </div>
 </template>
 <script setup>
 import { listAttEngHyst, getAttEngHyst, addAttEngHyst, updateAttEngHyst, delAttEngHyst } from "@/api/slaj/eng"
-const{proxy}=getCurrentInstance()
-const { slaj_hyst_type, slaj_if_rhyst, slaj_if_rs_pow, slaj_dam_iden_cate, slaj_eng_grad_hyst, slaj_eng_scal_hyst, slaj_impo_grad, slaj_eng_stat, slaj_stat, slaj_if_rein_force } = proxy.useDict("slaj_hyst_type","slaj_if_rhyst","slaj_if_rs_pow","slaj_dam_iden_cate","slaj_eng_grad_hyst","slaj_eng_scal_hyst","slaj_impo_grad","slaj_eng_stat","slaj_stat","slaj_if_rein_force")
-const dataList=ref([]),open=ref(false),loading=ref(true),showSearch=ref(true),ids=ref([]),single=ref(true),multiple=ref(true),total=ref(0),title=ref("")
-const columns=ref({engName:{label:'工程名称',visible:true},hystCode:{label:'电站代码',visible:true},hystSite:{label:'电站位置',visible:true},hystType:{label:'电站类型',visible:true},ifRhyst:{label:'是否为农村水电站',visible:true},ifRsPow:{label:'是否具有水库调节能力',visible:true},resName:{label:'水库名称',visible:true},resCode:{label:'水库代码',visible:true},insCap:{label:'装机容量(kW)',visible:true},totCap:{label:'总库容',visible:true},damRegCode:{label:'大坝注册代码',visible:true},damIdenCate:{label:'大坝安全鉴定类别',visible:true},damIdenOrg:{label:'大坝安全鉴定单位',visible:true},damIdenDate:{label:'大坝安全鉴定时间',visible:true},damHig:{label:'坝高(m)',visible:true},engGrad:{label:'工程等级',visible:true},engScal:{label:'工程规模',visible:true},engStat:{label:'工程状态',visible:true},note:{label:'备注',visible:false}})
-const HYST_NUM_FIELDS = ['cenLong','cenLat','apprBudg','insCap','totCap','damHig']
+const { proxy } = getCurrentInstance()
+const { slaj_hyst_type, slaj_if_rhyst, slaj_if_rs_pow, slaj_dam_iden_cate, slaj_eng_grad_hyst, slaj_eng_scal_hyst, slaj_impo_grad, slaj_eng_stat, slaj_stat, slaj_if_rein_force } = proxy.useDict("slaj_hyst_type", "slaj_if_rhyst", "slaj_if_rs_pow", "slaj_dam_iden_cate", "slaj_eng_grad_hyst", "slaj_eng_scal_hyst", "slaj_impo_grad", "slaj_eng_stat", "slaj_stat", "slaj_if_rein_force")
+const dataList = ref([]), open = ref(false), loading = ref(true), showSearch = ref(true), ids = ref([]), single = ref(true), multiple = ref(true), total = ref(0), title = ref("")
+const columns = ref({ engName: { label: '工程名称', visible: true }, hystCode: { label: '电站代码', visible: true }, hystSite: { label: '电站位置', visible: true }, hystType: { label: '电站类型', visible: true }, ifRhyst: { label: '是否为农村水电站', visible: true }, ifRsPow: { label: '是否具有水库调节能力', visible: true }, resName: { label: '水库名称', visible: true }, resCode: { label: '水库代码', visible: true }, insCap: { label: '装机容量(kW)', visible: true }, totCap: { label: '总库容', visible: true }, damRegCode: { label: '大坝注册代码', visible: true }, damIdenCate: { label: '大坝安全鉴定类别', visible: true }, damIdenOrg: { label: '大坝安全鉴定单位', visible: true }, damIdenDate: { label: '大坝安全鉴定时间', visible: true }, damHig: { label: '坝高(m)', visible: true }, engGrad: { label: '工程等级', visible: true }, engScal: { label: '工程规模', visible: true }, engStat: { label: '工程状态', visible: true }, note: { label: '备注', visible: false } })
+const HYST_NUM_FIELDS = ['cenLong', 'cenLat', 'apprBudg', 'insCap', 'totCap', 'damHig']
 function buildRules(numericFields, codeField, codeLabel) {
   const r = {
-    engName: [{required: true, message: '工程名称不能为空', trigger: 'blur'}],
-    [codeField]: [{required: true, message: codeLabel + '不能为空', trigger: 'blur'}]
+    engName: [{ required: true, message: '工程名称不能为空', trigger: 'blur' }],
+    [codeField]: [{ required: true, message: codeLabel + '不能为空', trigger: 'blur' }]
   }
   numericFields.forEach(f => {
-    r[f] = [{validator: (rule, value, cb) => {
-      if (value === '' || value === null || value === undefined) return cb()
-      if (isNaN(Number(value))) cb(new Error('请输入数值'))
-      else cb()
-    }, trigger: 'blur'}]
+    r[f] = [{
+      validator: (rule, value, cb) => {
+        if (value === '' || value === null || value === undefined) return cb()
+        if (isNaN(Number(value))) cb(new Error('请输入数值'))
+        else cb()
+      }, trigger: 'blur'
+    }]
   })
   return r
 }
-const data=reactive({form:{},queryParams:{pageNum:1,pageSize:10,engName:null,hystCode:null},rules: buildRules(HYST_NUM_FIELDS, 'hystCode', '电站代码')})
-const{form,queryParams,rules}=toRefs(data)
+const data = reactive({ form: {}, queryParams: { pageNum: 1, pageSize: 10, engName: null, hystCode: null }, rules: buildRules(HYST_NUM_FIELDS, 'hystCode', '电站代码') })
+const { form, queryParams, rules } = toRefs(data)
 
 const activeTab = ref('basic')
 
 const mapCoords = computed({
   get() {
-    const {cenLong, cenLat} = form.value
+    const { cenLong, cenLat } = form.value
     if (cenLong != null && cenLat != null) return [Number(cenLong), Number(cenLat)]
     return null
   },
@@ -163,21 +224,39 @@ const mapCoords = computed({
     }
   }
 })
-function getList(){loading.value=true;listAttEngHyst(queryParams.value).then(r=>{dataList.value=r.rows;total.value=r.total;loading.value=false})}
-function handleQuery(){queryParams.value.pageNum=1;getList()}
-function resetQuery(){proxy.resetForm("queryRef");handleQuery()}
-function handleSelect(s){ids.value=s.map(i=>i.guid);single.value=s.length!==1;multiple.value=!s.length}
-const HYST_FIELDS=['engName','hystCode','hystSite','cenLong','cenLat','impoGrad','apprBudg','engStat','stat','ifReinForce','hystType','ifRhyst','ifRsPow','insCap','resName','resCode','totCap','damHig','damRegCode','damIdenCate','damIdenOrg','damIdenDate','engGrad','engScal','startDate','compDate','note']
-function reset(){const f={};HYST_FIELDS.forEach(k=>f[k]=null);f.stat="1";f.engGuid=null;f.guid=null;form.value=f;proxy.resetForm("formRef")}
-function handleAdd(){reset();activeTab.value='basic';open.value=true;title.value="添加水电站工程"}
-function handleUpdate(row){reset();activeTab.value='basic';const g=row?row.guid:ids.value[0];getAttEngHyst(g).then(r=>{form.value=r.data;open.value=true;title.value="修改水电站工程"})}
-function submit(){proxy.$refs.formRef.validate(v=>{if(v){const fn=form.value.guid?updateAttEngHyst:addAttEngHyst;fn(form.value).then(()=>{proxy.$modal.msgSuccess("成功");open.value=false;getList()})}})}
-function handleDelete(row){const g=row?row.guid:ids.value.join(",");proxy.$modal.confirm('确认删除?').then(()=>delAttEngHyst(g)).then(()=>{getList();proxy.$modal.msgSuccess("删除成功")})}
-function handleExport(){proxy.download(`/eng/attr/hyst/export`,{...queryParams.value},`水电站工程_${Date.now()}.xlsx`)}
+function getList() { loading.value = true; listAttEngHyst(queryParams.value).then(r => { dataList.value = r.rows; total.value = r.total; loading.value = false }) }
+function handleQuery() { queryParams.value.pageNum = 1; getList() }
+function resetQuery() { proxy.resetForm("queryRef"); handleQuery() }
+function handleSelect(s) { ids.value = s.map(i => i.guid); single.value = s.length !== 1; multiple.value = !s.length }
+const HYST_FIELDS = ['engName', 'hystCode', 'hystSite', 'cenLong', 'cenLat', 'impoGrad', 'apprBudg', 'engStat', 'stat', 'ifReinForce', 'hystType', 'ifRhyst', 'ifRsPow', 'insCap', 'resName', 'resCode', 'totCap', 'damHig', 'damRegCode', 'damIdenCate', 'damIdenOrg', 'damIdenDate', 'engGrad', 'engScal', 'startDate', 'compDate', 'note']
+function reset() { const f = {}; HYST_FIELDS.forEach(k => f[k] = null); f.stat = "1"; f.engGuid = null; f.guid = null; form.value = f; proxy.resetForm("formRef") }
+function handleAdd() { reset(); activeTab.value = 'basic'; open.value = true; title.value = "添加水电站工程" }
+function handleUpdate(row) { reset(); activeTab.value = 'basic'; const g = row ? row.guid : ids.value[0]; getAttEngHyst(g).then(r => { form.value = r.data; open.value = true; title.value = "修改水电站工程" }) }
+function submit() { proxy.$refs.formRef.validate(v => { if (v) { const fn = form.value.guid ? updateAttEngHyst : addAttEngHyst; fn(form.value).then(() => { proxy.$modal.msgSuccess("成功"); open.value = false; getList() }) } }) }
+function handleDelete(row) { const g = row ? row.guid : ids.value.join(","); proxy.$modal.confirm('确认删除?').then(() => delAttEngHyst(g)).then(() => { getList(); proxy.$modal.msgSuccess("删除成功") }) }
+function handleExport() { proxy.download(`/eng/attr/hyst/export`, { ...queryParams.value }, `水电站工程_${Date.now()}.xlsx`) }
 getList()
 </script>
 <style scoped>
-.search-form { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; }
-.search-form-left { display: flex; align-items: center; flex-wrap: wrap; flex: 1; }
-.search-form-right { display: flex; align-items: center; gap: 6px; white-space: nowrap; flex-shrink: 0; }
+.search-form {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  flex-wrap: wrap;
+}
+
+.search-form-left {
+  display: flex;
+  align-items: center;
+  flex-wrap: wrap;
+  flex: 1;
+}
+
+.search-form-right {
+  display: flex;
+  align-items: center;
+  gap: 6px;
+  white-space: nowrap;
+  flex-shrink: 0;
+}
 </style>

+ 106 - 101
gw-ui/src/views/slaj/eng/attengirr/index.vue

@@ -1,13 +1,13 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px"
-             class="search-form">
+      class="search-form">
       <div class="search-form-left">
         <el-form-item label="工程名称" prop="engName">
-          <el-input v-model="queryParams.engName" placeholder="请输入" clearable @keyup.enter="handleQuery"/>
+          <el-input v-model="queryParams.engName" placeholder="请输入" clearable @keyup.enter="handleQuery" />
         </el-form-item>
         <el-form-item label="灌区代码" prop="irrCode">
-          <el-input v-model="queryParams.irrCode" placeholder="请输入" clearable/>
+          <el-input v-model="queryParams.irrCode" placeholder="请输入" clearable />
         </el-form-item>
         <el-form-item>
           &nbsp;&nbsp;
@@ -20,45 +20,54 @@
         <!--        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate(null)">修改</el-button>-->
         <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete(null)">删除</el-button>
         <!--        <el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>-->
-        <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns"/>
+        <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" />
       </div>
     </el-form>
     <el-table v-loading="loading" :data="dataList" @selection-change="handleSelect" height="calc(100% - 100px)">
-      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="工程名称" prop="engName" align="center" :show-overflow-tooltip="true"
-                       v-if="columns.engName.visible"/>
-      <el-table-column label="灌区代码" prop="irrCode" align="center" v-if="columns.irrCode.visible"/>
-      <el-table-column label="灌区位置" prop="irrLoc" align="center" v-if="columns.irrLoc.visible"/>
+        v-if="columns.engName.visible" />
+      <el-table-column label="灌区代码" prop="irrCode" align="center" v-if="columns.irrCode.visible" />
+      <el-table-column label="灌区位置" prop="irrLoc" align="center" v-if="columns.irrLoc.visible" />
       <el-table-column label="工程规模" align="center" v-if="columns.engScal.visible">
         <template #default="scope">
-          <dict-tag :options="slaj_eng_scal_irr" :value="scope.row.engScal"/>
+          <dict-tag :options="slaj_eng_scal_irr" :value="scope.row.engScal" />
         </template>
       </el-table-column>
-      <el-table-column label="总灌溉面积(亩)" width="120" prop="totIrrArea" align="center" v-if="columns.totIrrArea.visible"/>
-      <el-table-column label="有效灌溉面积(亩)" width="130" prop="effIrrArea" align="center" v-if="columns.effIrrArea.visible"/>
-      <el-table-column label="设计灌溉面积(亩)" width="130" prop="desIrrArea" align="center" v-if="columns.desIrrArea.visible"/>
+      <el-table-column label="总灌溉面积(亩)" width="120" prop="totIrrArea" align="center"
+        v-if="columns.totIrrArea.visible" />
+      <el-table-column label="有效灌溉面积(亩)" width="130" prop="effIrrArea" align="center"
+        v-if="columns.effIrrArea.visible" />
+      <el-table-column label="设计灌溉面积(亩)" width="130" prop="desIrrArea" align="center"
+        v-if="columns.desIrrArea.visible" />
       <el-table-column label="渠道最高级别" width="120" align="center" v-if="columns.chanHignLeve.visible">
         <template #default="scope">
-          <dict-tag :options="slaj_chan_lev" :value="scope.row.chanHignLeve"/>
+          <dict-tag :options="slaj_chan_lev" :value="scope.row.chanHignLeve" />
         </template>
       </el-table-column>
-      <el-table-column label="渠道数量(条)" width="110" prop="chanNum" align="center" v-if="columns.chanNum.visible"/>
-      <el-table-column label="渠道总长度(m)" width="120" prop="chanLenTot" align="center" v-if="columns.chanLenTot.visible"/>
-      <el-table-column label="渠道设计流量(m3/s)" width="150" prop="chanDesFlow" align="center" v-if="columns.chanDesFlow.visible"/>
-      <el-table-column label="水闸数量(座)" width="110" prop="chsyGateNum" align="center" v-if="columns.chsyGateNum.visible"/>
-      <el-table-column label="渡槽数量(座)" width="110" prop="chsyAquNum" align="center" v-if="columns.chsyAquNum.visible"/>
-      <el-table-column label="跌水数量(座)" width="110" prop="chsyDropNum" align="center" v-if="columns.chsyDropNum.visible"/>
+      <el-table-column label="渠道数量(条)" width="110" prop="chanNum" align="center" v-if="columns.chanNum.visible" />
+      <el-table-column label="渠道总长度(m)" width="120" prop="chanLenTot" align="center"
+        v-if="columns.chanLenTot.visible" />
+      <el-table-column label="渠道设计流量(m3/s)" width="150" prop="chanDesFlow" align="center"
+        v-if="columns.chanDesFlow.visible" />
+      <el-table-column label="水闸数量(座)" width="110" prop="chsyGateNum" align="center"
+        v-if="columns.chsyGateNum.visible" />
+      <el-table-column label="渡槽数量(座)" width="110" prop="chsyAquNum" align="center" v-if="columns.chsyAquNum.visible" />
+      <el-table-column label="跌水数量(座)" width="110" prop="chsyDropNum" align="center"
+        v-if="columns.chsyDropNum.visible" />
       <el-table-column label="倒虹吸数量(座)" width="120" prop="chsyInvSiphNum" align="center"
-                       v-if="columns.chsyInvSiphNum.visible"/>
-      <el-table-column label="隧洞数量(座)" width="110" prop="chsyTunNum" align="center" v-if="columns.chsyTunNum.visible"/>
-      <el-table-column label="涵洞数量(座)" width="110" prop="chsyCulNum" align="center" v-if="columns.chsyCulNum.visible"/>
-      <el-table-column label="农桥数量(座)" width="110" prop="chsyFarmBriNum" align="center" v-if="columns.chsyFarmBriNum.visible"/>
-      <el-table-column label="量水设施数量(座)" width="130" prop="chsyMeaNum" align="center" v-if="columns.chsyMeaNum.visible"/>
+        v-if="columns.chsyInvSiphNum.visible" />
+      <el-table-column label="隧洞数量(座)" width="110" prop="chsyTunNum" align="center" v-if="columns.chsyTunNum.visible" />
+      <el-table-column label="涵洞数量(座)" width="110" prop="chsyCulNum" align="center" v-if="columns.chsyCulNum.visible" />
+      <el-table-column label="农桥数量(座)" width="110" prop="chsyFarmBriNum" align="center"
+        v-if="columns.chsyFarmBriNum.visible" />
+      <el-table-column label="量水设施数量(座)" width="130" prop="chsyMeaNum" align="center"
+        v-if="columns.chsyMeaNum.visible" />
       <el-table-column label="渠系排水泵站数量(座)" width="150" prop="chsyDitPustStNum" align="center"
-                       v-if="columns.chsyDitPustStNum.visible"/>
+        v-if="columns.chsyDitPustStNum.visible" />
       <el-table-column label="工程状态" align="center" v-if="columns.engStat.visible">
         <template #default="scope">
-          <dict-tag :options="slaj_eng_stat" :value="scope.row.engStat"/>
+          <dict-tag :options="slaj_eng_stat" :value="scope.row.engStat" />
         </template>
       </el-table-column>
       <el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width" fixed="right">
@@ -68,67 +77,63 @@
         </template>
       </el-table-column>
     </el-table>
-    <pagination v-show="total>0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
-                @pagination="getList"/>
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
     <el-dialog :title="title" v-model="open" width="750px" append-to-body class="eng-edit-dialog">
-      <el-form ref="formRef" :model="form" :rules="rules" label-width="140px">
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
         <el-tabs v-model="activeTab">
           <el-tab-pane label="基本信息" name="basic">
             <el-row>
               <el-col :span="12">
                 <el-form-item label="工程名称" prop="engName">
-                  <el-input v-model="form.engName" placeholder="请输入"/>
+                  <el-input v-model="form.engName" placeholder="请输入" />
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="灌区代码" prop="irrCode">
-                  <el-input v-model="form.irrCode" placeholder="请输入"/>
+                  <el-input v-model="form.irrCode" placeholder="请输入" />
                 </el-form-item>
               </el-col>
             </el-row>
             <el-row>
               <el-col :span="12">
                 <el-form-item label="灌区位置" prop="irrLoc">
-                  <el-input v-model="form.irrLoc" placeholder="请输入"/>
+                  <el-input v-model="form.irrLoc" placeholder="请输入" />
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="重要程度" prop="impoGrad">
                   <el-select v-model="form.impoGrad" placeholder="请选择" style="width:100%">
-                    <el-option v-for="d in slaj_impo_grad" :key="d.value" :label="d.label" :value="d.value"/>
+                    <el-option v-for="d in slaj_impo_grad" :key="d.value" :label="d.label" :value="d.value" />
                   </el-select>
                 </el-form-item>
               </el-col>
             </el-row>
             <el-row>
-              <el-col :span="12">
-                <el-form-item label="中心经度(°)" prop="cenLong">
-                  <el-input v-model="form.cenLong" placeholder="请输入经度"/>
+              <el-col :span="8">
+                <el-form-item label="经度(°)" prop="cenLong">
+                  <el-input v-model="form.cenLong" placeholder="请输入经度" />
                 </el-form-item>
               </el-col>
-              <el-col :span="12">
-                <el-form-item label="中心纬度(°)" prop="cenLat">
-                  <el-input v-model="form.cenLat" placeholder="请输入纬度"/>
+              <el-col :span="8">
+                <el-form-item label="纬度(°)" prop="cenLat">
+                  <el-input v-model="form.cenLat" placeholder="请输入纬度" />
                 </el-form-item>
               </el-col>
-            </el-row>
-            <el-row>
-              <el-col :span="24">
-                <el-form-item label="点位坐标">
-                  <CoordPicker v-model="mapCoords"/>
-                </el-form-item>
+              <el-col :span="8">
+                <CoordPicker style="margin-left: 10px;" v-model="mapCoords" />
               </el-col>
             </el-row>
             <el-row>
               <el-col :span="12">
                 <el-form-item label="批复投资(万元)" prop="apprBudg">
-                  <el-input v-model="form.apprBudg" placeholder="请输入"/>
+                  <el-input v-model="form.apprBudg" placeholder="请输入" />
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="工程状态" prop="engStat">
                   <el-select v-model="form.engStat" placeholder="请选择" style="width:100%">
-                    <el-option v-for="d in slaj_eng_stat" :key="d.value" :label="d.label" :value="d.value"/>
+                    <el-option v-for="d in slaj_eng_stat" :key="d.value" :label="d.label" :value="d.value" />
                   </el-select>
                 </el-form-item>
               </el-col>
@@ -137,14 +142,14 @@
               <el-col :span="12">
                 <el-form-item label="启停状态" prop="stat">
                   <el-select v-model="form.stat" placeholder="请选择" style="width:100%">
-                    <el-option v-for="d in slaj_stat" :key="d.value" :label="d.label" :value="d.value"/>
+                    <el-option v-for="d in slaj_stat" :key="d.value" :label="d.label" :value="d.value" />
                   </el-select>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="是否除险加固" prop="ifReinForce">
                   <el-select v-model="form.ifReinForce" placeholder="请选择" style="width:100%">
-                    <el-option v-for="d in slaj_if_rein_force" :key="d.value" :label="d.label" :value="d.value"/>
+                    <el-option v-for="d in slaj_if_rein_force" :key="d.value" :label="d.label" :value="d.value" />
                   </el-select>
                 </el-form-item>
               </el-col>
@@ -155,25 +160,25 @@
               <el-col :span="12">
                 <el-form-item label="工程规模" prop="engScal">
                   <el-select v-model="form.engScal" placeholder="请选择" style="width:100%">
-                    <el-option v-for="d in slaj_eng_scal_irr" :key="d.value" :label="d.label" :value="d.value"/>
+                    <el-option v-for="d in slaj_eng_scal_irr" :key="d.value" :label="d.label" :value="d.value" />
                   </el-select>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="总灌溉面积(亩)" prop="totIrrArea">
-                  <el-input v-model="form.totIrrArea" placeholder="请输入"/>
+                  <el-input v-model="form.totIrrArea" placeholder="请输入" />
                 </el-form-item>
               </el-col>
             </el-row>
             <el-row>
               <el-col :span="12">
                 <el-form-item label="有效灌溉面积(亩)" prop="effIrrArea">
-                  <el-input v-model="form.effIrrArea" placeholder="请输入"/>
+                  <el-input v-model="form.effIrrArea" placeholder="请输入" />
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="设计灌溉面积(亩)" prop="desIrrArea">
-                  <el-input v-model="form.desIrrArea" placeholder="请输入"/>
+                  <el-input v-model="form.desIrrArea" placeholder="请输入" />
                 </el-form-item>
               </el-col>
             </el-row>
@@ -183,25 +188,25 @@
               <el-col :span="12">
                 <el-form-item label="渠道最高级别" prop="chanHignLeve">
                   <el-select v-model="form.chanHignLeve" placeholder="请选择" style="width:100%">
-                    <el-option v-for="d in slaj_chan_lev" :key="d.value" :label="d.label" :value="d.value"/>
+                    <el-option v-for="d in slaj_chan_lev" :key="d.value" :label="d.label" :value="d.value" />
                   </el-select>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="渠道数量(条)" prop="chanNum">
-                  <el-input v-model="form.chanNum" placeholder="请输入"/>
+                  <el-input v-model="form.chanNum" placeholder="请输入" />
                 </el-form-item>
               </el-col>
             </el-row>
             <el-row>
               <el-col :span="12">
                 <el-form-item label="渠道总长度(m)" prop="chanLenTot">
-                  <el-input v-model="form.chanLenTot" placeholder="请输入"/>
+                  <el-input v-model="form.chanLenTot" placeholder="请输入" />
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="渠道设计流量(m3/s)" prop="chanDesFlow">
-                  <el-input v-model="form.chanDesFlow" placeholder="请输入"/>
+                  <el-input v-model="form.chanDesFlow" placeholder="请输入" />
                 </el-form-item>
               </el-col>
             </el-row>
@@ -210,55 +215,55 @@
             <el-row>
               <el-col :span="12">
                 <el-form-item label="水闸数量(座)" prop="chsyGateNum">
-                  <el-input v-model="form.chsyGateNum" placeholder="请输入"/>
+                  <el-input v-model="form.chsyGateNum" placeholder="请输入" />
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="渡槽数量(座)" prop="chsyAquNum">
-                  <el-input v-model="form.chsyAquNum" placeholder="请输入"/>
+                  <el-input v-model="form.chsyAquNum" placeholder="请输入" />
                 </el-form-item>
               </el-col>
             </el-row>
             <el-row>
               <el-col :span="12">
                 <el-form-item label="跌水数量(座)" prop="chsyDropNum">
-                  <el-input v-model="form.chsyDropNum" placeholder="请输入"/>
+                  <el-input v-model="form.chsyDropNum" placeholder="请输入" />
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="倒虹吸数量(座)" prop="chsyInvSiphNum">
-                  <el-input v-model="form.chsyInvSiphNum" placeholder="请输入"/>
+                  <el-input v-model="form.chsyInvSiphNum" placeholder="请输入" />
                 </el-form-item>
               </el-col>
             </el-row>
             <el-row>
               <el-col :span="12">
                 <el-form-item label="隧洞数量(座)" prop="chsyTunNum">
-                  <el-input v-model="form.chsyTunNum" placeholder="请输入"/>
+                  <el-input v-model="form.chsyTunNum" placeholder="请输入" />
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="涵洞数量(座)" prop="chsyCulNum">
-                  <el-input v-model="form.chsyCulNum" placeholder="请输入"/>
+                  <el-input v-model="form.chsyCulNum" placeholder="请输入" />
                 </el-form-item>
               </el-col>
             </el-row>
             <el-row>
               <el-col :span="12">
                 <el-form-item label="农桥数量(座)" prop="chsyFarmBriNum">
-                  <el-input v-model="form.chsyFarmBriNum" placeholder="请输入"/>
+                  <el-input v-model="form.chsyFarmBriNum" placeholder="请输入" />
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="量水设施数量(座)" prop="chsyMeaNum">
-                  <el-input v-model="form.chsyMeaNum" placeholder="请输入"/>
+                  <el-input v-model="form.chsyMeaNum" placeholder="请输入" />
                 </el-form-item>
               </el-col>
             </el-row>
             <el-row>
               <el-col :span="12">
                 <el-form-item label="渠系排水泵站数量(座)" prop="chsyDitPustStNum">
-                  <el-input v-model="form.chsyDitPustStNum" placeholder="请输入"/>
+                  <el-input v-model="form.chsyDitPustStNum" placeholder="请输入" />
                 </el-form-item>
               </el-col>
             </el-row>
@@ -268,33 +273,33 @@
               <el-col :span="12">
                 <el-form-item label="开工日期" prop="startDate">
                   <el-date-picker v-model="form.startDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择"
-                                  style="width:100%"/>
+                    style="width:100%" />
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="完工日期" prop="compDate">
                   <el-date-picker v-model="form.compDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择"
-                                  style="width:100%"/>
+                    style="width:100%" />
                 </el-form-item>
               </el-col>
             </el-row>
             <el-form-item label="备注" prop="note">
-              <el-input v-model="form.note" type="textarea" :rows="2" placeholder="请输入"/>
+              <el-input v-model="form.note" type="textarea" :rows="2" placeholder="请输入" />
             </el-form-item>
           </el-tab-pane>
         </el-tabs>
       </el-form>
       <template #footer>
         <el-button type="primary" @click="submit">确 定</el-button>
-        <el-button @click="open=false">取 消</el-button>
+        <el-button @click="open = false">取 消</el-button>
       </template>
     </el-dialog>
   </div>
 </template>
 <script setup>
-import {addAttEngIrr, delAttEngIrr, getAttEngIrr, listAttEngIrr, updateAttEngIrr} from "@/api/slaj/eng"
+import { addAttEngIrr, delAttEngIrr, getAttEngIrr, listAttEngIrr, updateAttEngIrr } from "@/api/slaj/eng"
 
-const {proxy} = getCurrentInstance()
+const { proxy } = getCurrentInstance()
 const {
   slaj_impo_grad,
   slaj_eng_stat,
@@ -304,37 +309,37 @@ const {
   slaj_chan_lev
 } = proxy.useDict("slaj_impo_grad", "slaj_eng_stat", "slaj_stat", "slaj_if_rein_force", "slaj_eng_scal_irr", "slaj_chan_lev")
 const dataList = ref([]), open = ref(false), loading = ref(true), showSearch = ref(true), ids = ref([]),
-    single = ref(true), multiple = ref(true), total = ref(0), title = ref("")
+  single = ref(true), multiple = ref(true), total = ref(0), title = ref("")
 const columns = ref({
-  engName: {label: '工程名称', visible: true},
-  irrCode: {label: '灌区代码', visible: true},
-  irrLoc: {label: '灌区位置', visible: true},
-  engScal: {label: '工程规模', visible: true},
-  totIrrArea: {label: '总灌溉面积(亩)', visible: true},
-  effIrrArea: {label: '有效灌溉面积(亩)', visible: true},
-  desIrrArea: {label: '设计灌溉面积(亩)', visible: true},
-  chanHignLeve: {label: '渠道最高级别', visible: true},
-  chanNum: {label: '渠道数量(条)', visible: true},
-  chanLenTot: {label: '渠道总长度(m)', visible: true},
-  chanDesFlow: {label: '渠道设计流量(m3/s)', visible: true},
-  chsyGateNum: {label: '水闸数量(座)', visible: true},
-  chsyAquNum: {label: '渡槽数量(座)', visible: true},
-  chsyDropNum: {label: '跌水数量(座)', visible: true},
-  chsyInvSiphNum: {label: '倒虹吸数量(座)', visible: true},
-  chsyTunNum: {label: '隧洞数量(座)', visible: true},
-  chsyCulNum: {label: '涵洞数量(座)', visible: true},
-  chsyFarmBriNum: {label: '农桥数量(座)', visible: true},
-  chsyMeaNum: {label: '量水设施数量(座)', visible: true},
-  chsyDitPustStNum: {label: '渠系排水泵站数量(座)', visible: true},
-  engStat: {label: '工程状态', visible: true},
-  note: {label: '备注', visible: false}
+  engName: { label: '工程名称', visible: true },
+  irrCode: { label: '灌区代码', visible: true },
+  irrLoc: { label: '灌区位置', visible: true },
+  engScal: { label: '工程规模', visible: true },
+  totIrrArea: { label: '总灌溉面积(亩)', visible: true },
+  effIrrArea: { label: '有效灌溉面积(亩)', visible: true },
+  desIrrArea: { label: '设计灌溉面积(亩)', visible: true },
+  chanHignLeve: { label: '渠道最高级别', visible: true },
+  chanNum: { label: '渠道数量(条)', visible: true },
+  chanLenTot: { label: '渠道总长度(m)', visible: true },
+  chanDesFlow: { label: '渠道设计流量(m3/s)', visible: true },
+  chsyGateNum: { label: '水闸数量(座)', visible: true },
+  chsyAquNum: { label: '渡槽数量(座)', visible: true },
+  chsyDropNum: { label: '跌水数量(座)', visible: true },
+  chsyInvSiphNum: { label: '倒虹吸数量(座)', visible: true },
+  chsyTunNum: { label: '隧洞数量(座)', visible: true },
+  chsyCulNum: { label: '涵洞数量(座)', visible: true },
+  chsyFarmBriNum: { label: '农桥数量(座)', visible: true },
+  chsyMeaNum: { label: '量水设施数量(座)', visible: true },
+  chsyDitPustStNum: { label: '渠系排水泵站数量(座)', visible: true },
+  engStat: { label: '工程状态', visible: true },
+  note: { label: '备注', visible: false }
 })
 const IRR_NUM_FIELDS = ['cenLong', 'cenLat', 'apprBudg', 'totIrrArea', 'effIrrArea', 'desIrrArea', 'chanNum', 'chanLenTot', 'chanDesFlow', 'chsyGateNum', 'chsyAquNum', 'chsyDropNum', 'chsyInvSiphNum', 'chsyTunNum', 'chsyCulNum', 'chsyFarmBriNum', 'chsyMeaNum', 'chsyDitPustStNum']
 
 function buildRules(numericFields, codeField, codeLabel) {
   const r = {
-    engName: [{required: true, message: '工程名称不能为空', trigger: 'blur'}],
-    [codeField]: [{required: true, message: codeLabel + '不能为空', trigger: 'blur'}]
+    engName: [{ required: true, message: '工程名称不能为空', trigger: 'blur' }],
+    [codeField]: [{ required: true, message: codeLabel + '不能为空', trigger: 'blur' }]
   }
   numericFields.forEach(f => {
     r[f] = [{
@@ -350,16 +355,16 @@ function buildRules(numericFields, codeField, codeLabel) {
 
 const data = reactive({
   form: {},
-  queryParams: {pageNum: 1, pageSize: 10, engName: null, irrCode: null},
+  queryParams: { pageNum: 1, pageSize: 10, engName: null, irrCode: null },
   rules: buildRules(IRR_NUM_FIELDS, 'irrCode', '灌区代码')
 })
-const {form, queryParams, rules} = toRefs(data)
+const { form, queryParams, rules } = toRefs(data)
 
 const activeTab = ref('basic')
 
 const mapCoords = computed({
   get() {
-    const {cenLong, cenLat} = form.value
+    const { cenLong, cenLat } = form.value
     if (cenLong != null && cenLat != null) return [Number(cenLong), Number(cenLat)]
     return null
   },
@@ -451,7 +456,7 @@ function handleDelete(row) {
 }
 
 function handleExport() {
-  proxy.download(`/eng/attr/irr/export`, {...queryParams.value}, `灌区工程_${Date.now()}.xlsx`)
+  proxy.download(`/eng/attr/irr/export`, { ...queryParams.value }, `灌区工程_${Date.now()}.xlsx`)
 }
 
 getList()

+ 139 - 90
gw-ui/src/views/slaj/eng/attengothe/index.vue

@@ -1,19 +1,23 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px" class="search-form">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px"
+      class="search-form">
       <div class="search-form-left">
-        <el-form-item label="工程名称" prop="engName"><el-input v-model="queryParams.engName" placeholder="请输入" clearable @keyup.enter="handleQuery" /></el-form-item>
-        <el-form-item label="工程代码" prop="objCode"><el-input v-model="queryParams.objCode" placeholder="请输入" clearable /></el-form-item>
+        <el-form-item label="工程名称" prop="engName"><el-input v-model="queryParams.engName" placeholder="请输入" clearable
+            @keyup.enter="handleQuery" /></el-form-item>
+        <el-form-item label="工程代码" prop="objCode"><el-input v-model="queryParams.objCode" placeholder="请输入"
+            clearable /></el-form-item>
         <el-form-item>
           &nbsp;&nbsp;
-          <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button><el-button icon="Refresh" @click="resetQuery">重置</el-button>
+          <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button><el-button icon="Refresh"
+            @click="resetQuery">重置</el-button>
         </el-form-item>
       </div>
       <div class="search-form-right">
         <el-button type="primary" plain icon="Plus" @click="handleAdd">新增</el-button>
-<!--        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate(null)">修改</el-button>-->
+        <!--        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate(null)">修改</el-button>-->
         <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete(null)">删除</el-button>
-<!--        <el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>-->
+        <!--        <el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>-->
         <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" />
       </div>
     </el-form>
@@ -36,97 +40,124 @@
         </template>
       </el-table-column>
     </el-table>
-    <pagination v-show="total>0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
     <el-dialog :title="title" v-model="open" width="750px" append-to-body class="eng-edit-dialog">
-      <el-form ref="formRef" :model="form" :rules="rules" label-width="140px">
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
         <el-tabs v-model="activeTab">
-        <el-tab-pane label="基本信息" name="basic">
-        <el-row>
-          <el-col :span="12"><el-form-item label="工程名称" prop="engName"><el-input v-model="form.engName" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="工程代码" prop="objCode"><el-input v-model="form.objCode" placeholder="请输入" /></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="工程位置" prop="engLoc"><el-input v-model="form.engLoc" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="重要程度" prop="impoGrad"><el-select v-model="form.impoGrad" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_impo_grad" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="中心经度(°)" prop="cenLong">
-                <el-input v-model="form.cenLong" placeholder="请输入经度"/>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12"><el-form-item label="中心纬度(°)" prop="cenLat">
-                <el-input v-model="form.cenLat" placeholder="请输入纬度"/>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="24"><el-form-item label="点位坐标"><CoordPicker v-model="mapCoords"/></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="批复投资(万元)" prop="apprBudg"><el-input v-model="form.apprBudg" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="工程状态" prop="engStat"><el-select v-model="form.engStat" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_stat" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="启停状态" prop="stat"><el-select v-model="form.stat" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_stat" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="是否除险加固" prop="ifReinForce"><el-select v-model="form.ifReinForce" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_if_rein_force" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        </el-tab-pane>
-        <el-tab-pane label="工程参数" name="othe">
-        <el-row>
-          <el-col :span="12"><el-form-item label="自定义1" prop="custom1"><el-input v-model="form.custom1" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="自定义2" prop="custom2"><el-input v-model="form.custom2" placeholder="请输入" /></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="自定义3" prop="custom3"><el-input v-model="form.custom3" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="自定义4" prop="custom4"><el-input v-model="form.custom4" placeholder="请输入" /></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="自定义5" prop="custom5"><el-input v-model="form.custom5" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="自定义6" prop="custom6"><el-input v-model="form.custom6" placeholder="请输入" /></el-form-item></el-col>
-        </el-row>
-        </el-tab-pane>
-        <el-tab-pane label="时间信息" name="time">
-        <el-row>
-          <el-col :span="12"><el-form-item label="开工日期" prop="startDate"><el-date-picker v-model="form.startDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择" style="width:100%" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="完工日期" prop="compDate"><el-date-picker v-model="form.compDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择" style="width:100%" /></el-form-item></el-col>
-        </el-row>
-        <el-form-item label="备注" prop="note"><el-input v-model="form.note" type="textarea" :rows="2" placeholder="请输入" /></el-form-item>
-        </el-tab-pane>
+          <el-tab-pane label="基本信息" name="basic">
+            <el-row>
+              <el-col :span="12"><el-form-item label="工程名称" prop="engName"><el-input v-model="form.engName"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="工程代码" prop="objCode"><el-input v-model="form.objCode"
+                    placeholder="请输入" /></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="工程位置" prop="engLoc"><el-input v-model="form.engLoc"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="重要程度" prop="impoGrad"><el-select v-model="form.impoGrad"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_impo_grad" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="9"><el-form-item label="中心经度(°)" prop="cenLong">
+                  <el-input v-model="form.cenLong" placeholder="请输入经度" />
+                </el-form-item>
+              </el-col>
+              <el-col :span="9"><el-form-item label="中心纬度(°)" prop="cenLat">
+                  <el-input v-model="form.cenLat" placeholder="请输入纬度" />
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <CoordPicker style="margin-left: 10px;" v-model="mapCoords" />
+              </el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="批复投资(万元)" prop="apprBudg"><el-input v-model="form.apprBudg"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="工程状态" prop="engStat"><el-select v-model="form.engStat"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_stat" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="启停状态" prop="stat"><el-select v-model="form.stat" placeholder="请选择"
+                    style="width:100%"><el-option v-for="d in slaj_stat" :key="d.value" :label="d.label"
+                      :value="d.value" /></el-select></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="是否除险加固" prop="ifReinForce"><el-select v-model="form.ifReinForce"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_if_rein_force" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+          </el-tab-pane>
+          <el-tab-pane label="工程参数" name="othe">
+            <el-row>
+              <el-col :span="12"><el-form-item label="自定义1" prop="custom1"><el-input v-model="form.custom1"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="自定义2" prop="custom2"><el-input v-model="form.custom2"
+                    placeholder="请输入" /></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="自定义3" prop="custom3"><el-input v-model="form.custom3"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="自定义4" prop="custom4"><el-input v-model="form.custom4"
+                    placeholder="请输入" /></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="自定义5" prop="custom5"><el-input v-model="form.custom5"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="自定义6" prop="custom6"><el-input v-model="form.custom6"
+                    placeholder="请输入" /></el-form-item></el-col>
+            </el-row>
+          </el-tab-pane>
+          <el-tab-pane label="时间信息" name="time">
+            <el-row>
+              <el-col :span="12"><el-form-item label="开工日期" prop="startDate"><el-date-picker v-model="form.startDate"
+                    type="date" value-format="YYYY-MM-DD" placeholder="请选择"
+                    style="width:100%" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="完工日期" prop="compDate"><el-date-picker v-model="form.compDate"
+                    type="date" value-format="YYYY-MM-DD" placeholder="请选择"
+                    style="width:100%" /></el-form-item></el-col>
+            </el-row>
+            <el-form-item label="备注" prop="note"><el-input v-model="form.note" type="textarea" :rows="2"
+                placeholder="请输入" /></el-form-item>
+          </el-tab-pane>
         </el-tabs>
       </el-form>
-      <template #footer><el-button type="primary" @click="submit">确 定</el-button><el-button @click="open=false">取 消</el-button></template>
+      <template #footer><el-button type="primary" @click="submit">确 定</el-button><el-button @click="open = false">取
+          消</el-button></template>
     </el-dialog>
   </div>
 </template>
 <script setup>
 import { listAttEngOthe, getAttEngOthe, addAttEngOthe, updateAttEngOthe, delAttEngOthe } from "@/api/slaj/eng"
-const{proxy}=getCurrentInstance()
-const { slaj_impo_grad, slaj_eng_stat, slaj_stat, slaj_if_rein_force } = proxy.useDict("slaj_impo_grad","slaj_eng_stat","slaj_stat","slaj_if_rein_force")
-const dataList=ref([]),open=ref(false),loading=ref(true),showSearch=ref(true),ids=ref([]),single=ref(true),multiple=ref(true),total=ref(0),title=ref("")
-const columns=ref({engName:{label:'工程名称',visible:true},objCode:{label:'工程代码',visible:true},engLoc:{label:'工程位置',visible:true},custom1:{label:'自定义1',visible:true},custom2:{label:'自定义2',visible:true},custom3:{label:'自定义3',visible:true},custom4:{label:'自定义4',visible:true},custom5:{label:'自定义5',visible:true},custom6:{label:'自定义6',visible:true},engStat:{label:'工程状态',visible:true},note:{label:'备注',visible:false}})
-const OTHE_NUM_FIELDS = ['cenLong','cenLat','apprBudg']
+const { proxy } = getCurrentInstance()
+const { slaj_impo_grad, slaj_eng_stat, slaj_stat, slaj_if_rein_force } = proxy.useDict("slaj_impo_grad", "slaj_eng_stat", "slaj_stat", "slaj_if_rein_force")
+const dataList = ref([]), open = ref(false), loading = ref(true), showSearch = ref(true), ids = ref([]), single = ref(true), multiple = ref(true), total = ref(0), title = ref("")
+const columns = ref({ engName: { label: '工程名称', visible: true }, objCode: { label: '工程代码', visible: true }, engLoc: { label: '工程位置', visible: true }, custom1: { label: '自定义1', visible: true }, custom2: { label: '自定义2', visible: true }, custom3: { label: '自定义3', visible: true }, custom4: { label: '自定义4', visible: true }, custom5: { label: '自定义5', visible: true }, custom6: { label: '自定义6', visible: true }, engStat: { label: '工程状态', visible: true }, note: { label: '备注', visible: false } })
+const OTHE_NUM_FIELDS = ['cenLong', 'cenLat', 'apprBudg']
 function buildRules(numericFields, codeField, codeLabel) {
   const r = {
-    engName: [{required: true, message: '工程名称不能为空', trigger: 'blur'}],
-    [codeField]: [{required: true, message: codeLabel + '不能为空', trigger: 'blur'}]
+    engName: [{ required: true, message: '工程名称不能为空', trigger: 'blur' }],
+    [codeField]: [{ required: true, message: codeLabel + '不能为空', trigger: 'blur' }]
   }
   numericFields.forEach(f => {
-    r[f] = [{validator: (rule, value, cb) => {
-      if (value === '' || value === null || value === undefined) return cb()
-      if (isNaN(Number(value))) cb(new Error('请输入数值'))
-      else cb()
-    }, trigger: 'blur'}]
+    r[f] = [{
+      validator: (rule, value, cb) => {
+        if (value === '' || value === null || value === undefined) return cb()
+        if (isNaN(Number(value))) cb(new Error('请输入数值'))
+        else cb()
+      }, trigger: 'blur'
+    }]
   })
   return r
 }
-const data=reactive({form:{},queryParams:{pageNum:1,pageSize:10,engName:null,objCode:null},rules: buildRules(OTHE_NUM_FIELDS, 'objCode', '工程代码')})
-const{form,queryParams,rules}=toRefs(data)
+const data = reactive({ form: {}, queryParams: { pageNum: 1, pageSize: 10, engName: null, objCode: null }, rules: buildRules(OTHE_NUM_FIELDS, 'objCode', '工程代码') })
+const { form, queryParams, rules } = toRefs(data)
 
 const activeTab = ref('basic')
 
 const mapCoords = computed({
   get() {
-    const {cenLong, cenLat} = form.value
+    const { cenLong, cenLat } = form.value
     if (cenLong != null && cenLat != null) return [Number(cenLong), Number(cenLat)]
     return null
   },
@@ -140,21 +171,39 @@ const mapCoords = computed({
     }
   }
 })
-function getList(){loading.value=true;listAttEngOthe(queryParams.value).then(r=>{dataList.value=r.rows;total.value=r.total;loading.value=false})}
-function handleQuery(){queryParams.value.pageNum=1;getList()}
-function resetQuery(){proxy.resetForm("queryRef");handleQuery()}
-function handleSelect(s){ids.value=s.map(i=>i.guid);single.value=s.length!==1;multiple.value=!s.length}
-const OTHE_FIELDS=['engName','objCode','engLoc','cenLong','cenLat','impoGrad','apprBudg','engStat','stat','ifReinForce','custom1','custom2','custom3','custom4','custom5','custom6','startDate','compDate','note']
-function reset(){const f={};OTHE_FIELDS.forEach(k=>f[k]=null);f.stat="1";f.engGuid=null;f.guid=null;form.value=f;proxy.resetForm("formRef")}
-function handleAdd(){reset();activeTab.value='basic';open.value=true;title.value="添加其他工程"}
-function handleUpdate(row){reset();activeTab.value='basic';const g=row?row.guid:ids.value[0];getAttEngOthe(g).then(r=>{form.value=r.data;open.value=true;title.value="修改其他工程"})}
-function submit(){proxy.$refs.formRef.validate(v=>{if(v){const fn=form.value.guid?updateAttEngOthe:addAttEngOthe;fn(form.value).then(()=>{proxy.$modal.msgSuccess("成功");open.value=false;getList()})}})}
-function handleDelete(row){const g=row?row.guid:ids.value.join(",");proxy.$modal.confirm('确认删除?').then(()=>delAttEngOthe(g)).then(()=>{getList();proxy.$modal.msgSuccess("删除成功")})}
-function handleExport(){proxy.download(`/eng/attr/othe/export`,{...queryParams.value},`其他工程_${Date.now()}.xlsx`)}
+function getList() { loading.value = true; listAttEngOthe(queryParams.value).then(r => { dataList.value = r.rows; total.value = r.total; loading.value = false }) }
+function handleQuery() { queryParams.value.pageNum = 1; getList() }
+function resetQuery() { proxy.resetForm("queryRef"); handleQuery() }
+function handleSelect(s) { ids.value = s.map(i => i.guid); single.value = s.length !== 1; multiple.value = !s.length }
+const OTHE_FIELDS = ['engName', 'objCode', 'engLoc', 'cenLong', 'cenLat', 'impoGrad', 'apprBudg', 'engStat', 'stat', 'ifReinForce', 'custom1', 'custom2', 'custom3', 'custom4', 'custom5', 'custom6', 'startDate', 'compDate', 'note']
+function reset() { const f = {}; OTHE_FIELDS.forEach(k => f[k] = null); f.stat = "1"; f.engGuid = null; f.guid = null; form.value = f; proxy.resetForm("formRef") }
+function handleAdd() { reset(); activeTab.value = 'basic'; open.value = true; title.value = "添加其他工程" }
+function handleUpdate(row) { reset(); activeTab.value = 'basic'; const g = row ? row.guid : ids.value[0]; getAttEngOthe(g).then(r => { form.value = r.data; open.value = true; title.value = "修改其他工程" }) }
+function submit() { proxy.$refs.formRef.validate(v => { if (v) { const fn = form.value.guid ? updateAttEngOthe : addAttEngOthe; fn(form.value).then(() => { proxy.$modal.msgSuccess("成功"); open.value = false; getList() }) } }) }
+function handleDelete(row) { const g = row ? row.guid : ids.value.join(","); proxy.$modal.confirm('确认删除?').then(() => delAttEngOthe(g)).then(() => { getList(); proxy.$modal.msgSuccess("删除成功") }) }
+function handleExport() { proxy.download(`/eng/attr/othe/export`, { ...queryParams.value }, `其他工程_${Date.now()}.xlsx`) }
 getList()
 </script>
 <style scoped>
-.search-form { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; }
-.search-form-left { display: flex; align-items: center; flex-wrap: wrap; flex: 1; }
-.search-form-right { display: flex; align-items: center; gap: 6px; white-space: nowrap; flex-shrink: 0; }
+.search-form {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  flex-wrap: wrap;
+}
+
+.search-form-left {
+  display: flex;
+  align-items: center;
+  flex-wrap: wrap;
+  flex: 1;
+}
+
+.search-form-right {
+  display: flex;
+  align-items: center;
+  gap: 6px;
+  white-space: nowrap;
+  flex-shrink: 0;
+}
 </style>

+ 158 - 99
gw-ui/src/views/slaj/eng/attengpust/index.vue

@@ -1,36 +1,45 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px" class="search-form">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px"
+      class="search-form">
       <div class="search-form-left">
-        <el-form-item label="工程名称" prop="engName"><el-input v-model="queryParams.engName" placeholder="请输入" clearable @keyup.enter="handleQuery" /></el-form-item>
-        <el-form-item label="泵站代码" prop="pustCode"><el-input v-model="queryParams.pustCode" placeholder="请输入" clearable /></el-form-item>
+        <el-form-item label="工程名称" prop="engName"><el-input v-model="queryParams.engName" placeholder="请输入" clearable
+            @keyup.enter="handleQuery" /></el-form-item>
+        <el-form-item label="泵站代码" prop="pustCode"><el-input v-model="queryParams.pustCode" placeholder="请输入"
+            clearable /></el-form-item>
         <el-form-item>
           &nbsp;&nbsp;
-          <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button><el-button icon="Refresh" @click="resetQuery">重置</el-button>
+          <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button><el-button icon="Refresh"
+            @click="resetQuery">重置</el-button>
         </el-form-item>
       </div>
       <div class="search-form-right">
         <el-button type="primary" plain icon="Plus" @click="handleAdd">新增</el-button>
-<!--        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate(null)">修改</el-button>-->
+        <!--        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate(null)">修改</el-button>-->
         <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete(null)">删除</el-button>
-<!--        <el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>-->
+        <!--        <el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>-->
         <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" />
       </div>
     </el-form>
     <el-table v-loading="loading" :data="dataList" height="calc(100% - 100px)" @selection-change="handleSelect">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="工程名称" prop="engName" align="center" :show-overflow-tooltip="true" v-if="columns.engName.visible" />
+      <el-table-column label="工程名称" prop="engName" align="center" :show-overflow-tooltip="true"
+        v-if="columns.engName.visible" />
       <el-table-column label="泵站代码" prop="pustCode" align="center" v-if="columns.pustCode.visible" />
       <el-table-column label="泵站位置" prop="pustLoc" align="center" v-if="columns.pustLoc.visible" />
-      <el-table-column label="泵站类型" align="center" v-if="columns.pustType.visible"><template #default="scope"><dict-tag :options="slaj_pust_type" :value="scope.row.pustType" /></template></el-table-column>
+      <el-table-column label="泵站类型" align="center" v-if="columns.pustType.visible"><template #default="scope"><dict-tag
+            :options="slaj_pust_type" :value="scope.row.pustType" /></template></el-table-column>
       <el-table-column label="设计扬程(m)" width="120" prop="desHead" align="center" v-if="columns.desHead.visible" />
       <el-table-column label="装机流量(m3/s)" width="130" prop="insFlow" align="center" v-if="columns.insFlow.visible" />
       <el-table-column label="设计流量(m3/s)" width="130" prop="desFlow" align="center" v-if="columns.desFlow.visible" />
       <el-table-column label="装机台数(台)" prop="pustNum" align="center" v-if="columns.pustNum.visible" />
       <el-table-column label="装机功率(kW)" prop="insPow" align="center" v-if="columns.insPow.visible" />
-      <el-table-column label="工程等级" align="center" v-if="columns.engGrad.visible"><template #default="scope"><dict-tag :options="slaj_eng_grad_pust" :value="scope.row.engGrad" /></template></el-table-column>
-      <el-table-column label="工程规模" align="center" v-if="columns.engScal.visible"><template #default="scope"><dict-tag :options="slaj_eng_scal_pust" :value="scope.row.engScal" /></template></el-table-column>
-      <el-table-column label="备注" prop="note" align="center" :show-overflow-tooltip="true" v-if="columns.note.visible" />
+      <el-table-column label="工程等级" align="center" v-if="columns.engGrad.visible"><template #default="scope"><dict-tag
+            :options="slaj_eng_grad_pust" :value="scope.row.engGrad" /></template></el-table-column>
+      <el-table-column label="工程规模" align="center" v-if="columns.engScal.visible"><template #default="scope"><dict-tag
+            :options="slaj_eng_scal_pust" :value="scope.row.engScal" /></template></el-table-column>
+      <el-table-column label="备注" prop="note" align="center" :show-overflow-tooltip="true"
+        v-if="columns.note.visible" />
       <el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width" fixed="right">
         <template #default="scope">
           <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)">修改</el-button>
@@ -38,101 +47,133 @@
         </template>
       </el-table-column>
     </el-table>
-    <pagination v-show="total>0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
     <el-dialog :title="title" v-model="open" width="750px" append-to-body class="eng-edit-dialog">
-      <el-form ref="formRef" :model="form" :rules="rules" label-width="140px">
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
         <el-tabs v-model="activeTab">
-        <el-tab-pane label="基本信息" name="basic">
-        <el-row>
-          <el-col :span="12"><el-form-item label="工程名称" prop="engName"><el-input v-model="form.engName" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="泵站代码" prop="pustCode"><el-input v-model="form.pustCode" placeholder="请输入" /></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="泵站位置" prop="pustLoc"><el-input v-model="form.pustLoc" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="重要程度" prop="impoGrad"><el-select v-model="form.impoGrad" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_impo_grad" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="中心经度(°)" prop="cenLong">
-                <el-input v-model="form.cenLong" placeholder="请输入经度"/>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12"><el-form-item label="中心纬度(°)" prop="cenLat">
-                <el-input v-model="form.cenLat" placeholder="请输入纬度"/>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="24"><el-form-item label="点位坐标"><CoordPicker v-model="mapCoords"/></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="批复投资(万元)" prop="apprBudg"><el-input v-model="form.apprBudg" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="工程状态" prop="engStat"><el-select v-model="form.engStat" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_stat" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="启停状态" prop="stat"><el-select v-model="form.stat" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_stat" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="是否除险加固" prop="ifReinForce"><el-select v-model="form.ifReinForce" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_if_rein_force" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        </el-tab-pane>
-        <el-tab-pane label="泵站参数" name="pust">
-        <el-row>
-          <el-col :span="12"><el-form-item label="泵站类型" prop="pustType"><el-select v-model="form.pustType" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_pust_type" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="设计扬程(m)" prop="desHead"><el-input v-model="form.desHead" placeholder="请输入" /></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="装机流量(m3/s)" prop="insFlow"><el-input v-model="form.insFlow" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="设计流量(m3/s)" prop="desFlow"><el-input v-model="form.desFlow" placeholder="请输入" /></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="装机台数(台)" prop="pustNum"><el-input v-model="form.pustNum" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="装机功率(kW)" prop="insPow"><el-input v-model="form.insPow" placeholder="请输入" /></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="工程等级" prop="engGrad"><el-select v-model="form.engGrad" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_grad_pust" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="工程规模" prop="engScal"><el-select v-model="form.engScal" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_scal_pust" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        </el-tab-pane>
-        <el-tab-pane label="时间信息" name="time">
-        <el-row>
-          <el-col :span="12"><el-form-item label="开工日期" prop="startDate"><el-date-picker v-model="form.startDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择" style="width:100%" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="完工日期" prop="compDate"><el-date-picker v-model="form.compDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择" style="width:100%" /></el-form-item></el-col>
-        </el-row>
-        <el-form-item label="备注" prop="note"><el-input v-model="form.note" type="textarea" :rows="2" placeholder="请输入" /></el-form-item>
-        </el-tab-pane>
+          <el-tab-pane label="基本信息" name="basic">
+            <el-row>
+              <el-col :span="12"><el-form-item label="工程名称" prop="engName"><el-input v-model="form.engName"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="泵站代码" prop="pustCode"><el-input v-model="form.pustCode"
+                    placeholder="请输入" /></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="泵站位置" prop="pustLoc"><el-input v-model="form.pustLoc"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="重要程度" prop="impoGrad"><el-select v-model="form.impoGrad"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_impo_grad" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="8"><el-form-item label="经度(°)" prop="cenLong">
+                  <el-input v-model="form.cenLong" placeholder="请输入经度" />
+                </el-form-item>
+              </el-col>
+              <el-col :span="8"><el-form-item label="纬度(°)" prop="cenLat">
+                  <el-input v-model="form.cenLat" placeholder="请输入纬度" />
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <CoordPicker style="margin-left: 10px;" v-model="mapCoords" />
+              </el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="批复投资(万元)" prop="apprBudg"><el-input v-model="form.apprBudg"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="工程状态" prop="engStat"><el-select v-model="form.engStat"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_stat" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="启停状态" prop="stat"><el-select v-model="form.stat" placeholder="请选择"
+                    style="width:100%"><el-option v-for="d in slaj_stat" :key="d.value" :label="d.label"
+                      :value="d.value" /></el-select></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="是否除险加固" prop="ifReinForce"><el-select v-model="form.ifReinForce"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_if_rein_force" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+          </el-tab-pane>
+          <el-tab-pane label="泵站参数" name="pust">
+            <el-row>
+              <el-col :span="12"><el-form-item label="泵站类型" prop="pustType"><el-select v-model="form.pustType"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_pust_type" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="设计扬程(m)" prop="desHead"><el-input v-model="form.desHead"
+                    placeholder="请输入" /></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="装机流量(m3/s)" prop="insFlow"><el-input v-model="form.insFlow"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="设计流量(m3/s)" prop="desFlow"><el-input v-model="form.desFlow"
+                    placeholder="请输入" /></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="装机台数(台)" prop="pustNum"><el-input v-model="form.pustNum"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="装机功率(kW)" prop="insPow"><el-input v-model="form.insPow"
+                    placeholder="请输入" /></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="工程等级" prop="engGrad"><el-select v-model="form.engGrad"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_grad_pust" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="工程规模" prop="engScal"><el-select v-model="form.engScal"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_scal_pust" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+          </el-tab-pane>
+          <el-tab-pane label="时间信息" name="time">
+            <el-row>
+              <el-col :span="12"><el-form-item label="开工日期" prop="startDate"><el-date-picker v-model="form.startDate"
+                    type="date" value-format="YYYY-MM-DD" placeholder="请选择"
+                    style="width:100%" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="完工日期" prop="compDate"><el-date-picker v-model="form.compDate"
+                    type="date" value-format="YYYY-MM-DD" placeholder="请选择"
+                    style="width:100%" /></el-form-item></el-col>
+            </el-row>
+            <el-form-item label="备注" prop="note"><el-input v-model="form.note" type="textarea" :rows="2"
+                placeholder="请输入" /></el-form-item>
+          </el-tab-pane>
         </el-tabs>
       </el-form>
-      <template #footer><el-button type="primary" @click="submit">确 定</el-button><el-button @click="open=false">取 消</el-button></template>
+      <template #footer><el-button type="primary" @click="submit">确 定</el-button><el-button @click="open = false">取
+          消</el-button></template>
     </el-dialog>
   </div>
 </template>
 <script setup>
 import { listAttEngPust, getAttEngPust, addAttEngPust, updateAttEngPust, delAttEngPust } from "@/api/slaj/eng"
-const{proxy}=getCurrentInstance()
-const { slaj_pust_type, slaj_eng_grad_pust, slaj_eng_scal_pust, slaj_impo_grad, slaj_eng_stat, slaj_stat, slaj_if_rein_force } = proxy.useDict("slaj_pust_type","slaj_eng_grad_pust","slaj_eng_scal_pust","slaj_impo_grad","slaj_eng_stat","slaj_stat","slaj_if_rein_force")
-const dataList=ref([]),open=ref(false),loading=ref(true),showSearch=ref(true),ids=ref([]),single=ref(true),multiple=ref(true),total=ref(0),title=ref("")
-const columns=ref({engName:{label:'工程名称',visible:true},pustCode:{label:'泵站代码',visible:true},pustLoc:{label:'泵站位置',visible:true},pustType:{label:'泵站类型',visible:true},desHead:{label:'设计扬程(m)',visible:true},insFlow:{label:'装机流量(m3/s)',visible:true},desFlow:{label:'设计流量(m3/s)',visible:true},pustNum:{label:'装机台数(台)',visible:true},insPow:{label:'装机功率(kW)',visible:true},engGrad:{label:'工程等级',visible:true},engScal:{label:'工程规模',visible:true},engStat:{label:'工程状态',visible:true},note:{label:'备注',visible:false}})
-const PUST_NUM_FIELDS = ['cenLong','cenLat','apprBudg','desHead','insFlow','desFlow','pustNum','insPow']
+const { proxy } = getCurrentInstance()
+const { slaj_pust_type, slaj_eng_grad_pust, slaj_eng_scal_pust, slaj_impo_grad, slaj_eng_stat, slaj_stat, slaj_if_rein_force } = proxy.useDict("slaj_pust_type", "slaj_eng_grad_pust", "slaj_eng_scal_pust", "slaj_impo_grad", "slaj_eng_stat", "slaj_stat", "slaj_if_rein_force")
+const dataList = ref([]), open = ref(false), loading = ref(true), showSearch = ref(true), ids = ref([]), single = ref(true), multiple = ref(true), total = ref(0), title = ref("")
+const columns = ref({ engName: { label: '工程名称', visible: true }, pustCode: { label: '泵站代码', visible: true }, pustLoc: { label: '泵站位置', visible: true }, pustType: { label: '泵站类型', visible: true }, desHead: { label: '设计扬程(m)', visible: true }, insFlow: { label: '装机流量(m3/s)', visible: true }, desFlow: { label: '设计流量(m3/s)', visible: true }, pustNum: { label: '装机台数(台)', visible: true }, insPow: { label: '装机功率(kW)', visible: true }, engGrad: { label: '工程等级', visible: true }, engScal: { label: '工程规模', visible: true }, engStat: { label: '工程状态', visible: true }, note: { label: '备注', visible: false } })
+const PUST_NUM_FIELDS = ['cenLong', 'cenLat', 'apprBudg', 'desHead', 'insFlow', 'desFlow', 'pustNum', 'insPow']
 function buildRules(numericFields, codeField, codeLabel) {
   const r = {
-    engName: [{required: true, message: '工程名称不能为空', trigger: 'blur'}],
-    [codeField]: [{required: true, message: codeLabel + '不能为空', trigger: 'blur'}]
+    engName: [{ required: true, message: '工程名称不能为空', trigger: 'blur' }],
+    [codeField]: [{ required: true, message: codeLabel + '不能为空', trigger: 'blur' }]
   }
   numericFields.forEach(f => {
-    r[f] = [{validator: (rule, value, cb) => {
-      if (value === '' || value === null || value === undefined) return cb()
-      if (isNaN(Number(value))) cb(new Error('请输入数值'))
-      else cb()
-    }, trigger: 'blur'}]
+    r[f] = [{
+      validator: (rule, value, cb) => {
+        if (value === '' || value === null || value === undefined) return cb()
+        if (isNaN(Number(value))) cb(new Error('请输入数值'))
+        else cb()
+      }, trigger: 'blur'
+    }]
   })
   return r
 }
-const data=reactive({form:{},queryParams:{pageNum:1,pageSize:10,engName:null,pustCode:null},rules: buildRules(PUST_NUM_FIELDS, 'pustCode', '泵站代码')})
-const{form,queryParams,rules}=toRefs(data)
+const data = reactive({ form: {}, queryParams: { pageNum: 1, pageSize: 10, engName: null, pustCode: null }, rules: buildRules(PUST_NUM_FIELDS, 'pustCode', '泵站代码') })
+const { form, queryParams, rules } = toRefs(data)
 
 const activeTab = ref('basic')
 
 const mapCoords = computed({
   get() {
-    const {cenLong, cenLat} = form.value
+    const { cenLong, cenLat } = form.value
     if (cenLong != null && cenLat != null) return [Number(cenLong), Number(cenLat)]
     return null
   },
@@ -146,21 +187,39 @@ const mapCoords = computed({
     }
   }
 })
-function getList(){loading.value=true;listAttEngPust(queryParams.value).then(r=>{dataList.value=r.rows;total.value=r.total;loading.value=false})}
-function handleQuery(){queryParams.value.pageNum=1;getList()}
-function resetQuery(){proxy.resetForm("queryRef");handleQuery()}
-function handleSelect(s){ids.value=s.map(i=>i.guid);single.value=s.length!==1;multiple.value=!s.length}
-const PUST_FIELDS=['engName','pustCode','pustLoc','cenLong','cenLat','impoGrad','apprBudg','engStat','stat','ifReinForce','pustType','desHead','insFlow','desFlow','pustNum','insPow','engGrad','engScal','startDate','compDate','note']
-function reset(){const f={};PUST_FIELDS.forEach(k=>f[k]=null);f.stat="1";f.engGuid=null;f.guid=null;form.value=f;proxy.resetForm("formRef")}
-function handleAdd(){reset();activeTab.value='basic';open.value=true;title.value="添加泵站工程"}
-function handleUpdate(row){reset();activeTab.value='basic';const g=row?row.guid:ids.value[0];getAttEngPust(g).then(r=>{form.value=r.data;open.value=true;title.value="修改泵站工程"})}
-function submit(){proxy.$refs.formRef.validate(v=>{if(v){const fn=form.value.guid?updateAttEngPust:addAttEngPust;fn(form.value).then(()=>{proxy.$modal.msgSuccess("成功");open.value=false;getList()})}})}
-function handleDelete(row){const g=row?row.guid:ids.value.join(",");proxy.$modal.confirm('确认删除?').then(()=>delAttEngPust(g)).then(()=>{getList();proxy.$modal.msgSuccess("删除成功")})}
-function handleExport(){proxy.download(`/eng/attr/pust/export`,{...queryParams.value},`泵站工程_${Date.now()}.xlsx`)}
+function getList() { loading.value = true; listAttEngPust(queryParams.value).then(r => { dataList.value = r.rows; total.value = r.total; loading.value = false }) }
+function handleQuery() { queryParams.value.pageNum = 1; getList() }
+function resetQuery() { proxy.resetForm("queryRef"); handleQuery() }
+function handleSelect(s) { ids.value = s.map(i => i.guid); single.value = s.length !== 1; multiple.value = !s.length }
+const PUST_FIELDS = ['engName', 'pustCode', 'pustLoc', 'cenLong', 'cenLat', 'impoGrad', 'apprBudg', 'engStat', 'stat', 'ifReinForce', 'pustType', 'desHead', 'insFlow', 'desFlow', 'pustNum', 'insPow', 'engGrad', 'engScal', 'startDate', 'compDate', 'note']
+function reset() { const f = {}; PUST_FIELDS.forEach(k => f[k] = null); f.stat = "1"; f.engGuid = null; f.guid = null; form.value = f; proxy.resetForm("formRef") }
+function handleAdd() { reset(); activeTab.value = 'basic'; open.value = true; title.value = "添加泵站工程" }
+function handleUpdate(row) { reset(); activeTab.value = 'basic'; const g = row ? row.guid : ids.value[0]; getAttEngPust(g).then(r => { form.value = r.data; open.value = true; title.value = "修改泵站工程" }) }
+function submit() { proxy.$refs.formRef.validate(v => { if (v) { const fn = form.value.guid ? updateAttEngPust : addAttEngPust; fn(form.value).then(() => { proxy.$modal.msgSuccess("成功"); open.value = false; getList() }) } }) }
+function handleDelete(row) { const g = row ? row.guid : ids.value.join(","); proxy.$modal.confirm('确认删除?').then(() => delAttEngPust(g)).then(() => { getList(); proxy.$modal.msgSuccess("删除成功") }) }
+function handleExport() { proxy.download(`/eng/attr/pust/export`, { ...queryParams.value }, `泵站工程_${Date.now()}.xlsx`) }
 getList()
 </script>
 <style scoped>
-.search-form { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; }
-.search-form-left { display: flex; align-items: center; flex-wrap: wrap; flex: 1; }
-.search-form-right { display: flex; align-items: center; gap: 6px; white-space: nowrap; flex-shrink: 0; }
+.search-form {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  flex-wrap: wrap;
+}
+
+.search-form-left {
+  display: flex;
+  align-items: center;
+  flex-wrap: wrap;
+  flex: 1;
+}
+
+.search-form-right {
+  display: flex;
+  align-items: center;
+  gap: 6px;
+  white-space: nowrap;
+  flex-shrink: 0;
+}
 </style>

+ 150 - 96
gw-ui/src/views/slaj/eng/attengsd/index.vue

@@ -1,25 +1,30 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px" class="search-form">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px"
+      class="search-form">
       <div class="search-form-left">
-        <el-form-item label="工程名称" prop="engName"><el-input v-model="queryParams.engName" placeholder="请输入" clearable @keyup.enter="handleQuery" /></el-form-item>
-        <el-form-item label="淤地坝代码" prop="sdCode"><el-input v-model="queryParams.sdCode" placeholder="请输入" clearable /></el-form-item>
+        <el-form-item label="工程名称" prop="engName"><el-input v-model="queryParams.engName" placeholder="请输入" clearable
+            @keyup.enter="handleQuery" /></el-form-item>
+        <el-form-item label="淤地坝代码" prop="sdCode"><el-input v-model="queryParams.sdCode" placeholder="请输入"
+            clearable /></el-form-item>
         <el-form-item>
           &nbsp;&nbsp;
-          <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button><el-button icon="Refresh" @click="resetQuery">重置</el-button>
+          <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button><el-button icon="Refresh"
+            @click="resetQuery">重置</el-button>
         </el-form-item>
       </div>
       <div class="search-form-right">
         <el-button type="primary" plain icon="Plus" @click="handleAdd">新增</el-button>
-<!--        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate(null)">修改</el-button>-->
+        <!--        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate(null)">修改</el-button>-->
         <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete(null)">删除</el-button>
-<!--        <el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>-->
+        <!--        <el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>-->
         <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" />
       </div>
     </el-form>
     <el-table v-loading="loading" :data="dataList" @selection-change="handleSelect" height="calc(100% - 100px)">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="工程名称" prop="engName" align="center" :show-overflow-tooltip="true" v-if="columns.engName.visible" />
+      <el-table-column label="工程名称" prop="engName" align="center" :show-overflow-tooltip="true"
+        v-if="columns.engName.visible" />
       <el-table-column label="淤地坝代码" prop="sdCode" align="center" v-if="columns.sdCode.visible" />
       <el-table-column label="淤地坝位置" prop="sdLoc" align="center" v-if="columns.sdLoc.visible" />
       <el-table-column label="控制面积(km2)" prop="conArea" align="center" v-if="columns.conArea.visible" />
@@ -27,9 +32,11 @@
       <el-table-column label="淤积库容(104m3)" width="130" prop="warpCap" align="center" v-if="columns.warpCap.visible" />
       <el-table-column label="坝长(m)" prop="sdSizeLen" align="center" v-if="columns.sdSizeLen.visible" />
       <el-table-column label="坝高(m)" prop="sdSizeHig" align="center" v-if="columns.sdSizeHig.visible" />
-      <el-table-column label="工程规模" align="center" v-if="columns.engScal.visible"><template #default="scope"><dict-tag :options="slaj_eng_scal_sd" :value="scope.row.engScal" /></template></el-table-column>
+      <el-table-column label="工程规模" align="center" v-if="columns.engScal.visible"><template #default="scope"><dict-tag
+            :options="slaj_eng_scal_sd" :value="scope.row.engScal" /></template></el-table-column>
       <el-table-column label="设计防洪标准(年)" width="130" prop="desFlSta" align="center" v-if="columns.desFlSta.visible" />
-      <el-table-column label="备注" prop="note" align="center" :show-overflow-tooltip="true" v-if="columns.note.visible" />
+      <el-table-column label="备注" prop="note" align="center" :show-overflow-tooltip="true"
+        v-if="columns.note.visible" />
       <el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width" fixed="right">
         <template #default="scope">
           <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)">修改</el-button>
@@ -37,100 +44,129 @@
         </template>
       </el-table-column>
     </el-table>
-    <pagination v-show="total>0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
     <el-dialog :title="title" v-model="open" width="750px" append-to-body class="eng-edit-dialog">
-      <el-form ref="formRef" :model="form" :rules="rules" label-width="140px">
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
         <el-tabs v-model="activeTab">
-        <el-tab-pane label="基本信息" name="basic">
-        <el-row>
-          <el-col :span="12"><el-form-item label="工程名称" prop="engName"><el-input v-model="form.engName" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="淤地坝代码" prop="sdCode"><el-input v-model="form.sdCode" placeholder="请输入" /></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="淤地坝位置" prop="sdLoc"><el-input v-model="form.sdLoc" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="重要程度" prop="impoGrad"><el-select v-model="form.impoGrad" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_impo_grad" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="中心经度(°)" prop="cenLong">
-                <el-input v-model="form.cenLong" placeholder="请输入经度"/>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12"><el-form-item label="中心纬度(°)" prop="cenLat">
-                <el-input v-model="form.cenLat" placeholder="请输入纬度"/>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="24"><el-form-item label="点位坐标"><CoordPicker v-model="mapCoords"/></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="批复投资(万元)" prop="apprBudg"><el-input v-model="form.apprBudg" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="工程状态" prop="engStat"><el-select v-model="form.engStat" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_stat" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="启停状态" prop="stat"><el-select v-model="form.stat" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_stat" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="是否除险加固" prop="ifReinForce"><el-select v-model="form.ifReinForce" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_if_rein_force" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        </el-tab-pane>
-        <el-tab-pane label="淤地坝参数" name="sd">
-        <el-row>
-          <el-col :span="12"><el-form-item label="控制面积(km2)" prop="conArea"><el-input v-model="form.conArea" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="总库容(104m3)" prop="totCap"><el-input v-model="form.totCap" placeholder="请输入" /></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="淤积库容(104m3)" prop="warpCap"><el-input v-model="form.warpCap" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="坝长(m)" prop="sdSizeLen"><el-input v-model="form.sdSizeLen" placeholder="请输入" /></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="坝高(m)" prop="sdSizeHig"><el-input v-model="form.sdSizeHig" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="工程规模" prop="engScal"><el-select v-model="form.engScal" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_scal_sd" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="设计防洪标准(年)" prop="desFlSta"><el-input v-model="form.desFlSta" placeholder="请输入" /></el-form-item></el-col>
-        </el-row>
-        </el-tab-pane>
-        <el-tab-pane label="时间信息" name="time">
-        <el-row>
-          <el-col :span="12"><el-form-item label="开工日期" prop="startDate"><el-date-picker v-model="form.startDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择" style="width:100%" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="完工日期" prop="compDate"><el-date-picker v-model="form.compDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择" style="width:100%" /></el-form-item></el-col>
-        </el-row>
-        <el-form-item label="备注" prop="note"><el-input v-model="form.note" type="textarea" :rows="2" placeholder="请输入" /></el-form-item>
-        </el-tab-pane>
+          <el-tab-pane label="基本信息" name="basic">
+            <el-row>
+              <el-col :span="12"><el-form-item label="工程名称" prop="engName"><el-input v-model="form.engName"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="淤地坝代码" prop="sdCode"><el-input v-model="form.sdCode"
+                    placeholder="请输入" /></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="淤地坝位置" prop="sdLoc"><el-input v-model="form.sdLoc"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="重要程度" prop="impoGrad"><el-select v-model="form.impoGrad"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_impo_grad" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="8"><el-form-item label="中心经度(°)" prop="cenLong">
+                  <el-input v-model="form.cenLong" placeholder="请输入经度" />
+                </el-form-item>
+              </el-col>
+              <el-col :span="8"><el-form-item label="中心纬度(°)" prop="cenLat">
+                  <el-input v-model="form.cenLat" placeholder="请输入纬度" />
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <CoordPicker style="margin-left: 10px;" v-model="mapCoords" />
+              </el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="批复投资(万元)" prop="apprBudg"><el-input v-model="form.apprBudg"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="工程状态" prop="engStat"><el-select v-model="form.engStat"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_stat" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="启停状态" prop="stat"><el-select v-model="form.stat" placeholder="请选择"
+                    style="width:100%"><el-option v-for="d in slaj_stat" :key="d.value" :label="d.label"
+                      :value="d.value" /></el-select></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="是否除险加固" prop="ifReinForce"><el-select v-model="form.ifReinForce"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_if_rein_force" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+          </el-tab-pane>
+          <el-tab-pane label="淤地坝参数" name="sd">
+            <el-row>
+              <el-col :span="12"><el-form-item label="控制面积(km2)" prop="conArea"><el-input v-model="form.conArea"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="总库容(104m3)" prop="totCap"><el-input v-model="form.totCap"
+                    placeholder="请输入" /></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="淤积库容(104m3)" prop="warpCap"><el-input v-model="form.warpCap"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="坝长(m)" prop="sdSizeLen"><el-input v-model="form.sdSizeLen"
+                    placeholder="请输入" /></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="坝高(m)" prop="sdSizeHig"><el-input v-model="form.sdSizeHig"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="工程规模" prop="engScal"><el-select v-model="form.engScal"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_scal_sd" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="设计防洪标准(年)" prop="desFlSta"><el-input v-model="form.desFlSta"
+                    placeholder="请输入" /></el-form-item></el-col>
+            </el-row>
+          </el-tab-pane>
+          <el-tab-pane label="时间信息" name="time">
+            <el-row>
+              <el-col :span="12"><el-form-item label="开工日期" prop="startDate"><el-date-picker v-model="form.startDate"
+                    type="date" value-format="YYYY-MM-DD" placeholder="请选择"
+                    style="width:100%" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="完工日期" prop="compDate"><el-date-picker v-model="form.compDate"
+                    type="date" value-format="YYYY-MM-DD" placeholder="请选择"
+                    style="width:100%" /></el-form-item></el-col>
+            </el-row>
+            <el-form-item label="备注" prop="note"><el-input v-model="form.note" type="textarea" :rows="2"
+                placeholder="请输入" /></el-form-item>
+          </el-tab-pane>
         </el-tabs>
       </el-form>
-      <template #footer><el-button type="primary" @click="submit">确 定</el-button><el-button @click="open=false">取 消</el-button></template>
+      <template #footer><el-button type="primary" @click="submit">确 定</el-button><el-button @click="open = false">取
+          消</el-button></template>
     </el-dialog>
   </div>
 </template>
 <script setup>
 import { listAttEngSd, getAttEngSd, addAttEngSd, updateAttEngSd, delAttEngSd } from "@/api/slaj/eng"
-const{proxy}=getCurrentInstance()
-const { slaj_impo_grad, slaj_eng_stat, slaj_stat, slaj_if_rein_force, slaj_eng_scal_sd } = proxy.useDict("slaj_impo_grad","slaj_eng_stat","slaj_stat","slaj_if_rein_force","slaj_eng_scal_sd")
-const dataList=ref([]),open=ref(false),loading=ref(true),showSearch=ref(true),ids=ref([]),single=ref(true),multiple=ref(true),total=ref(0),title=ref("")
-const columns=ref({engName:{label:'工程名称',visible:true},sdCode:{label:'淤地坝代码',visible:true},sdLoc:{label:'淤地坝位置',visible:true},conArea:{label:'控制面积(km2)',visible:true},totCap:{label:'总库容(104m3)',visible:true},warpCap:{label:'淤积库容(104m3)',visible:true},sdSizeLen:{label:'坝长(m)',visible:true},sdSizeHig:{label:'坝高(m)',visible:true},engScal:{label:'工程规模',visible:true},desFlSta:{label:'设计防洪标准(年)',visible:true},engStat:{label:'工程状态',visible:true},note:{label:'备注',visible:false}})
-const SD_NUM_FIELDS = ['cenLong','cenLat','apprBudg','conArea','totCap','warpCap','sdSizeLen','sdSizeHig','desFlSta']
+const { proxy } = getCurrentInstance()
+const { slaj_impo_grad, slaj_eng_stat, slaj_stat, slaj_if_rein_force, slaj_eng_scal_sd } = proxy.useDict("slaj_impo_grad", "slaj_eng_stat", "slaj_stat", "slaj_if_rein_force", "slaj_eng_scal_sd")
+const dataList = ref([]), open = ref(false), loading = ref(true), showSearch = ref(true), ids = ref([]), single = ref(true), multiple = ref(true), total = ref(0), title = ref("")
+const columns = ref({ engName: { label: '工程名称', visible: true }, sdCode: { label: '淤地坝代码', visible: true }, sdLoc: { label: '淤地坝位置', visible: true }, conArea: { label: '控制面积(km2)', visible: true }, totCap: { label: '总库容(104m3)', visible: true }, warpCap: { label: '淤积库容(104m3)', visible: true }, sdSizeLen: { label: '坝长(m)', visible: true }, sdSizeHig: { label: '坝高(m)', visible: true }, engScal: { label: '工程规模', visible: true }, desFlSta: { label: '设计防洪标准(年)', visible: true }, engStat: { label: '工程状态', visible: true }, note: { label: '备注', visible: false } })
+const SD_NUM_FIELDS = ['cenLong', 'cenLat', 'apprBudg', 'conArea', 'totCap', 'warpCap', 'sdSizeLen', 'sdSizeHig', 'desFlSta']
 function buildRules(numericFields, codeField, codeLabel) {
   const r = {
-    engName: [{required: true, message: '工程名称不能为空', trigger: 'blur'}],
-    [codeField]: [{required: true, message: codeLabel + '不能为空', trigger: 'blur'}]
+    engName: [{ required: true, message: '工程名称不能为空', trigger: 'blur' }],
+    [codeField]: [{ required: true, message: codeLabel + '不能为空', trigger: 'blur' }]
   }
   numericFields.forEach(f => {
-    r[f] = [{validator: (rule, value, cb) => {
-      if (value === '' || value === null || value === undefined) return cb()
-      if (isNaN(Number(value))) cb(new Error('请输入数值'))
-      else cb()
-    }, trigger: 'blur'}]
+    r[f] = [{
+      validator: (rule, value, cb) => {
+        if (value === '' || value === null || value === undefined) return cb()
+        if (isNaN(Number(value))) cb(new Error('请输入数值'))
+        else cb()
+      }, trigger: 'blur'
+    }]
   })
   return r
 }
-const data=reactive({form:{},queryParams:{pageNum:1,pageSize:10,engName:null,sdCode:null},rules: buildRules(SD_NUM_FIELDS, 'sdCode', '淤地坝代码')})
-const{form,queryParams,rules}=toRefs(data)
+const data = reactive({ form: {}, queryParams: { pageNum: 1, pageSize: 10, engName: null, sdCode: null }, rules: buildRules(SD_NUM_FIELDS, 'sdCode', '淤地坝代码') })
+const { form, queryParams, rules } = toRefs(data)
 
 const activeTab = ref('basic')
 
 const mapCoords = computed({
   get() {
-    const {cenLong, cenLat} = form.value
+    const { cenLong, cenLat } = form.value
     if (cenLong != null && cenLat != null) return [Number(cenLong), Number(cenLat)]
     return null
   },
@@ -144,21 +180,39 @@ const mapCoords = computed({
     }
   }
 })
-function getList(){loading.value=true;listAttEngSd(queryParams.value).then(r=>{dataList.value=r.rows;total.value=r.total;loading.value=false})}
-function handleQuery(){queryParams.value.pageNum=1;getList()}
-function resetQuery(){proxy.resetForm("queryRef");handleQuery()}
-function handleSelect(s){ids.value=s.map(i=>i.guid);single.value=s.length!==1;multiple.value=!s.length}
-const SD_FIELDS=['engName','sdCode','sdLoc','cenLong','cenLat','impoGrad','apprBudg','engStat','stat','ifReinForce','conArea','totCap','warpCap','sdSizeLen','sdSizeHig','engScal','desFlSta','startDate','compDate','note']
-function reset(){const f={};SD_FIELDS.forEach(k=>f[k]=null);f.stat="1";f.engGuid=null;f.guid=null;form.value=f;proxy.resetForm("formRef")}
-function handleAdd(){reset();activeTab.value='basic';open.value=true;title.value="添加淤地坝工程"}
-function handleUpdate(row){reset();activeTab.value='basic';const g=row?row.guid:ids.value[0];getAttEngSd(g).then(r=>{form.value=r.data;open.value=true;title.value="修改淤地坝工程"})}
-function submit(){proxy.$refs.formRef.validate(v=>{if(v){const fn=form.value.guid?updateAttEngSd:addAttEngSd;fn(form.value).then(()=>{proxy.$modal.msgSuccess("成功");open.value=false;getList()})}})}
-function handleDelete(row){const g=row?row.guid:ids.value.join(",");proxy.$modal.confirm('确认删除?').then(()=>delAttEngSd(g)).then(()=>{getList();proxy.$modal.msgSuccess("删除成功")})}
-function handleExport(){proxy.download(`/eng/attr/sd/export`,{...queryParams.value},`淤地坝工程_${Date.now()}.xlsx`)}
+function getList() { loading.value = true; listAttEngSd(queryParams.value).then(r => { dataList.value = r.rows; total.value = r.total; loading.value = false }) }
+function handleQuery() { queryParams.value.pageNum = 1; getList() }
+function resetQuery() { proxy.resetForm("queryRef"); handleQuery() }
+function handleSelect(s) { ids.value = s.map(i => i.guid); single.value = s.length !== 1; multiple.value = !s.length }
+const SD_FIELDS = ['engName', 'sdCode', 'sdLoc', 'cenLong', 'cenLat', 'impoGrad', 'apprBudg', 'engStat', 'stat', 'ifReinForce', 'conArea', 'totCap', 'warpCap', 'sdSizeLen', 'sdSizeHig', 'engScal', 'desFlSta', 'startDate', 'compDate', 'note']
+function reset() { const f = {}; SD_FIELDS.forEach(k => f[k] = null); f.stat = "1"; f.engGuid = null; f.guid = null; form.value = f; proxy.resetForm("formRef") }
+function handleAdd() { reset(); activeTab.value = 'basic'; open.value = true; title.value = "添加淤地坝工程" }
+function handleUpdate(row) { reset(); activeTab.value = 'basic'; const g = row ? row.guid : ids.value[0]; getAttEngSd(g).then(r => { form.value = r.data; open.value = true; title.value = "修改淤地坝工程" }) }
+function submit() { proxy.$refs.formRef.validate(v => { if (v) { const fn = form.value.guid ? updateAttEngSd : addAttEngSd; fn(form.value).then(() => { proxy.$modal.msgSuccess("成功"); open.value = false; getList() }) } }) }
+function handleDelete(row) { const g = row ? row.guid : ids.value.join(","); proxy.$modal.confirm('确认删除?').then(() => delAttEngSd(g)).then(() => { getList(); proxy.$modal.msgSuccess("删除成功") }) }
+function handleExport() { proxy.download(`/eng/attr/sd/export`, { ...queryParams.value }, `淤地坝工程_${Date.now()}.xlsx`) }
 getList()
 </script>
 <style scoped>
-.search-form { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; }
-.search-form-left { display: flex; align-items: center; flex-wrap: wrap; flex: 1; }
-.search-form-right { display: flex; align-items: center; gap: 6px; white-space: nowrap; flex-shrink: 0; }
+.search-form {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  flex-wrap: wrap;
+}
+
+.search-form-left {
+  display: flex;
+  align-items: center;
+  flex-wrap: wrap;
+  flex: 1;
+}
+
+.search-form-right {
+  display: flex;
+  align-items: center;
+  gap: 6px;
+  white-space: nowrap;
+  flex-shrink: 0;
+}
 </style>

+ 80 - 85
gw-ui/src/views/slaj/eng/attengwadi/index.vue

@@ -1,13 +1,13 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px"
-             class="search-form">
+      class="search-form">
       <div class="search-form-left">
         <el-form-item label="工程名称" prop="engName">
-          <el-input v-model="queryParams.engName" placeholder="请输入" clearable @keyup.enter="handleQuery"/>
+          <el-input v-model="queryParams.engName" placeholder="请输入" clearable @keyup.enter="handleQuery" />
         </el-form-item>
         <el-form-item label="引调水代码" prop="wadiCode">
-          <el-input v-model="queryParams.wadiCode" placeholder="请输入" clearable/>
+          <el-input v-model="queryParams.wadiCode" placeholder="请输入" clearable />
         </el-form-item>
         <el-form-item>
           &nbsp;&nbsp;
@@ -20,35 +20,38 @@
         <!--        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate(null)">修改</el-button>-->
         <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete(null)">删除</el-button>
         <!--        <el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>-->
-        <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns"/>
+        <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" />
       </div>
     </el-form>
     <el-table v-loading="loading" :data="dataList" @selection-change="handleSelect" height="calc(100% - 100px)">
-      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="工程名称" prop="engName" align="center" :show-overflow-tooltip="true"
-                       v-if="columns.engName.visible"/>
-      <el-table-column label="引调水代码" width="120" prop="wadiCode" align="center" v-if="columns.wadiCode.visible"/>
-      <el-table-column label="起点位置" prop="startLoc" align="center" v-if="columns.startLoc.visible"/>
-      <el-table-column label="终点位置" prop="endLoc" align="center" v-if="columns.endLoc.visible"/>
-      <el-table-column label="起点经度(°)" width="110" prop="startLong" align="center" v-if="columns.startLong.visible"/>
-      <el-table-column label="起点纬度(°)" width="110" prop="startLat" align="center" v-if="columns.startLat.visible"/>
-      <el-table-column label="终点经度(°)" width="110" prop="endLong" align="center" v-if="columns.endLong.visible"/>
-      <el-table-column label="终点纬度(°)" width="110" prop="endLat" align="center" v-if="columns.endLat.visible"/>
+        v-if="columns.engName.visible" />
+      <el-table-column label="引调水代码" width="120" prop="wadiCode" align="center" v-if="columns.wadiCode.visible" />
+      <el-table-column label="起点位置" prop="startLoc" align="center" v-if="columns.startLoc.visible" />
+      <el-table-column label="终点位置" prop="endLoc" align="center" v-if="columns.endLoc.visible" />
+      <el-table-column label="起点经度(°)" width="110" prop="startLong" align="center" v-if="columns.startLong.visible" />
+      <el-table-column label="起点纬度(°)" width="110" prop="startLat" align="center" v-if="columns.startLat.visible" />
+      <el-table-column label="终点经度(°)" width="110" prop="endLong" align="center" v-if="columns.endLong.visible" />
+      <el-table-column label="终点纬度(°)" width="110" prop="endLat" align="center" v-if="columns.endLat.visible" />
       <el-table-column label="工程等级" align="center" v-if="columns.engGrad.visible">
         <template #default="scope">
-          <dict-tag :options="slaj_eng_grad_wadi" :value="scope.row.engGrad"/>
+          <dict-tag :options="slaj_eng_grad_wadi" :value="scope.row.engGrad" />
         </template>
       </el-table-column>
       <el-table-column label="工程规模" align="center" v-if="columns.engScal.visible">
         <template #default="scope">
-          <dict-tag :options="slaj_eng_scal_wadi" :value="scope.row.engScal"/>
+          <dict-tag :options="slaj_eng_scal_wadi" :value="scope.row.engScal" />
         </template>
       </el-table-column>
-      <el-table-column label="线路总长度(km)" width="120" prop="lineTotLen" align="center" v-if="columns.lineTotLen.visible"/>
-      <el-table-column label="设计提水扬程(104m3)" width="160" prop="desPumpDis" align="center" v-if="columns.desPumpDis.visible"/>
-      <el-table-column label="设计提水流量(m3/s)" width="150" prop="desPumpVol" align="center" v-if="columns.desPumpVol.visible"/>
+      <el-table-column label="线路总长度(km)" width="120" prop="lineTotLen" align="center"
+        v-if="columns.lineTotLen.visible" />
+      <el-table-column label="设计提水扬程(104m3)" width="160" prop="desPumpDis" align="center"
+        v-if="columns.desPumpDis.visible" />
+      <el-table-column label="设计提水流量(m3/s)" width="150" prop="desPumpVol" align="center"
+        v-if="columns.desPumpVol.visible" />
       <el-table-column label="备注" prop="note" align="center" :show-overflow-tooltip="true"
-                       v-if="columns.note.visible"/>
+        v-if="columns.note.visible" />
       <el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width" fixed="right">
         <template #default="scope">
           <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)">修改</el-button>
@@ -56,85 +59,77 @@
         </template>
       </el-table-column>
     </el-table>
-    <pagination v-show="total>0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
-                @pagination="getList"/>
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
     <el-dialog :title="title" v-model="open" width="750px" append-to-body class="eng-edit-dialog">
-      <el-form ref="formRef" :model="form" :rules="rules" label-width="140px">
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
         <el-tabs v-model="activeTab">
           <el-tab-pane label="基本信息" name="basic">
             <el-row>
               <el-col :span="12">
                 <el-form-item label="工程名称" prop="engName">
-                  <el-input v-model="form.engName" placeholder="请输入"/>
+                  <el-input v-model="form.engName" placeholder="请输入" />
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="引调水代码" prop="wadiCode">
-                  <el-input v-model="form.wadiCode" placeholder="请输入"/>
+                  <el-input v-model="form.wadiCode" placeholder="请输入" />
                 </el-form-item>
               </el-col>
             </el-row>
             <el-row>
               <el-col :span="12">
                 <el-form-item label="起点位置" prop="startLoc">
-                  <el-input v-model="form.startLoc" placeholder="请输入"/>
+                  <el-input v-model="form.startLoc" placeholder="请输入" />
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="终点位置" prop="endLoc">
-                  <el-input v-model="form.endLoc" placeholder="请输入"/>
+                  <el-input v-model="form.endLoc" placeholder="请输入" />
                 </el-form-item>
               </el-col>
             </el-row>
             <el-row>
-              <el-col :span="12">
+              <el-col :span="9">
                 <el-form-item label="起点经度(°)" prop="startLong">
-                  <el-input v-model="form.startLong" placeholder="请输入经度"/>
+                  <el-input v-model="form.startLong" placeholder="请输入经度" />
                 </el-form-item>
               </el-col>
-              <el-col :span="12">
+              <el-col :span="9">
                 <el-form-item label="起点纬度(°)" prop="startLat">
-                  <el-input v-model="form.startLat" placeholder="请输入纬度"/>
+                  <el-input v-model="form.startLat" placeholder="请输入纬度" />
                 </el-form-item>
               </el-col>
-            </el-row>
-            <el-row>
-              <el-col :span="24">
-                <el-form-item label="起点坐标">
-                  <CoordPicker v-model="startCoords"/>
-                </el-form-item>
+              <el-col :span="6">
+                <CoordPicker style="margin-left: 10px;" v-model="startCoords" />
               </el-col>
             </el-row>
             <el-row>
-              <el-col :span="12">
+              <el-col :span="9">
                 <el-form-item label="终点经度(°)" prop="endLong">
-                  <el-input v-model="form.endLong" placeholder="请输入经度"/>
+                  <el-input v-model="form.endLong" placeholder="请输入经度" />
                 </el-form-item>
               </el-col>
-              <el-col :span="12">
+              <el-col :span="9">
                 <el-form-item label="终点纬度(°)" prop="endLat">
-                  <el-input v-model="form.endLat" placeholder="请输入纬度"/>
+                  <el-input v-model="form.endLat" placeholder="请输入纬度" />
                 </el-form-item>
               </el-col>
-            </el-row>
-            <el-row>
-              <el-col :span="24">
-                <el-form-item label="终点坐标">
-                  <CoordPicker v-model="endCoords"/>
-                </el-form-item>
+              <el-col :span="6">
+                <CoordPicker style="margin-left: 10px;" v-model="endCoords" />
               </el-col>
             </el-row>
             <el-row>
               <el-col :span="12">
                 <el-form-item label="重要程度" prop="impoGrad">
                   <el-select v-model="form.impoGrad" placeholder="请选择" style="width:100%">
-                    <el-option v-for="d in slaj_impo_grad" :key="d.value" :label="d.label" :value="d.value"/>
+                    <el-option v-for="d in slaj_impo_grad" :key="d.value" :label="d.label" :value="d.value" />
                   </el-select>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="批复投资(万元)" prop="apprBudg">
-                  <el-input v-model="form.apprBudg" placeholder="请输入"/>
+                  <el-input v-model="form.apprBudg" placeholder="请输入" />
                 </el-form-item>
               </el-col>
             </el-row>
@@ -142,14 +137,14 @@
               <el-col :span="12">
                 <el-form-item label="工程状态" prop="engStat">
                   <el-select v-model="form.engStat" placeholder="请选择" style="width:100%">
-                    <el-option v-for="d in slaj_eng_stat" :key="d.value" :label="d.label" :value="d.value"/>
+                    <el-option v-for="d in slaj_eng_stat" :key="d.value" :label="d.label" :value="d.value" />
                   </el-select>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="启停状态" prop="stat">
                   <el-select v-model="form.stat" placeholder="请选择" style="width:100%">
-                    <el-option v-for="d in slaj_stat" :key="d.value" :label="d.label" :value="d.value"/>
+                    <el-option v-for="d in slaj_stat" :key="d.value" :label="d.label" :value="d.value" />
                   </el-select>
                 </el-form-item>
               </el-col>
@@ -158,7 +153,7 @@
               <el-col :span="12">
                 <el-form-item label="是否除险加固" prop="ifReinForce">
                   <el-select v-model="form.ifReinForce" placeholder="请选择" style="width:100%">
-                    <el-option v-for="d in slaj_if_rein_force" :key="d.value" :label="d.label" :value="d.value"/>
+                    <el-option v-for="d in slaj_if_rein_force" :key="d.value" :label="d.label" :value="d.value" />
                   </el-select>
                 </el-form-item>
               </el-col>
@@ -169,14 +164,14 @@
               <el-col :span="12">
                 <el-form-item label="工程等级" prop="engGrad">
                   <el-select v-model="form.engGrad" placeholder="请选择" style="width:100%">
-                    <el-option v-for="d in slaj_eng_grad_wadi" :key="d.value" :label="d.label" :value="d.value"/>
+                    <el-option v-for="d in slaj_eng_grad_wadi" :key="d.value" :label="d.label" :value="d.value" />
                   </el-select>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="工程规模" prop="engScal">
                   <el-select v-model="form.engScal" placeholder="请选择" style="width:100%">
-                    <el-option v-for="d in slaj_eng_scal_wadi" :key="d.value" :label="d.label" :value="d.value"/>
+                    <el-option v-for="d in slaj_eng_scal_wadi" :key="d.value" :label="d.label" :value="d.value" />
                   </el-select>
                 </el-form-item>
               </el-col>
@@ -184,19 +179,19 @@
             <el-row>
               <el-col :span="12">
                 <el-form-item label="线路总长度(km)" prop="lineTotLen">
-                  <el-input v-model="form.lineTotLen" placeholder="请输入"/>
+                  <el-input v-model="form.lineTotLen" placeholder="请输入" />
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="设计提水扬程(104m3)" prop="desPumpDis">
-                  <el-input v-model="form.desPumpDis" placeholder="请输入"/>
+                  <el-input v-model="form.desPumpDis" placeholder="请输入" />
                 </el-form-item>
               </el-col>
             </el-row>
             <el-row>
               <el-col :span="12">
                 <el-form-item label="设计提水流量(m3/s)" prop="desPumpVol">
-                  <el-input v-model="form.desPumpVol" placeholder="请输入"/>
+                  <el-input v-model="form.desPumpVol" placeholder="请输入" />
                 </el-form-item>
               </el-col>
             </el-row>
@@ -206,33 +201,33 @@
               <el-col :span="12">
                 <el-form-item label="开工日期" prop="startDate">
                   <el-date-picker v-model="form.startDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择"
-                                  style="width:100%"/>
+                    style="width:100%" />
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="完工日期" prop="compDate">
                   <el-date-picker v-model="form.compDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择"
-                                  style="width:100%"/>
+                    style="width:100%" />
                 </el-form-item>
               </el-col>
             </el-row>
             <el-form-item label="备注" prop="note">
-              <el-input v-model="form.note" type="textarea" :rows="2" placeholder="请输入"/>
+              <el-input v-model="form.note" type="textarea" :rows="2" placeholder="请输入" />
             </el-form-item>
           </el-tab-pane>
         </el-tabs>
       </el-form>
       <template #footer>
         <el-button type="primary" @click="submit">确 定</el-button>
-        <el-button @click="open=false">取 消</el-button>
+        <el-button @click="open = false">取 消</el-button>
       </template>
     </el-dialog>
   </div>
 </template>
 <script setup>
-import {addAttEngWadi, delAttEngWadi, getAttEngWadi, listAttEngWadi, updateAttEngWadi} from "@/api/slaj/eng"
+import { addAttEngWadi, delAttEngWadi, getAttEngWadi, listAttEngWadi, updateAttEngWadi } from "@/api/slaj/eng"
 
-const {proxy} = getCurrentInstance()
+const { proxy } = getCurrentInstance()
 const {
   slaj_impo_grad,
   slaj_eng_stat,
@@ -242,30 +237,30 @@ const {
   slaj_eng_scal_wadi
 } = proxy.useDict("slaj_impo_grad", "slaj_eng_stat", "slaj_stat", "slaj_if_rein_force", "slaj_eng_grad_wadi", "slaj_eng_scal_wadi")
 const dataList = ref([]), open = ref(false), loading = ref(true), showSearch = ref(true), ids = ref([]),
-    single = ref(true), multiple = ref(true), total = ref(0), title = ref("")
+  single = ref(true), multiple = ref(true), total = ref(0), title = ref("")
 const columns = ref({
-  engName: {label: '工程名称', visible: true},
-  wadiCode: {label: '引调水代码', visible: true},
-  startLoc: {label: '起点位置', visible: true},
-  endLoc: {label: '终点位置', visible: true},
-  startLong: {label: '起点经度(°)', visible: true},
-  startLat: {label: '起点纬度(°)', visible: true},
-  endLong: {label: '终点经度(°)', visible: true},
-  endLat: {label: '终点纬度(°)', visible: true},
-  engGrad: {label: '工程等级', visible: true},
-  engScal: {label: '工程规模', visible: true},
-  lineTotLen: {label: '线路总长度(km)', visible: true},
-  desPumpDis: {label: '设计提水扬程(104m3)', visible: true},
-  desPumpVol: {label: '设计提水流量(m3/s)', visible: true},
-  engStat: {label: '工程状态', visible: true},
-  note: {label: '备注', visible: false}
+  engName: { label: '工程名称', visible: true },
+  wadiCode: { label: '引调水代码', visible: true },
+  startLoc: { label: '起点位置', visible: true },
+  endLoc: { label: '终点位置', visible: true },
+  startLong: { label: '起点经度(°)', visible: true },
+  startLat: { label: '起点纬度(°)', visible: true },
+  endLong: { label: '终点经度(°)', visible: true },
+  endLat: { label: '终点纬度(°)', visible: true },
+  engGrad: { label: '工程等级', visible: true },
+  engScal: { label: '工程规模', visible: true },
+  lineTotLen: { label: '线路总长度(km)', visible: true },
+  desPumpDis: { label: '设计提水扬程(104m3)', visible: true },
+  desPumpVol: { label: '设计提水流量(m3/s)', visible: true },
+  engStat: { label: '工程状态', visible: true },
+  note: { label: '备注', visible: false }
 })
 const WADI_NUM_FIELDS = ['startLong', 'startLat', 'endLong', 'endLat', 'apprBudg', 'lineTotLen', 'desPumpDis', 'desPumpVol']
 
 function buildRules(numericFields, codeField, codeLabel) {
   const r = {
-    engName: [{required: true, message: '工程名称不能为空', trigger: 'blur'}],
-    [codeField]: [{required: true, message: codeLabel + '不能为空', trigger: 'blur'}]
+    engName: [{ required: true, message: '工程名称不能为空', trigger: 'blur' }],
+    [codeField]: [{ required: true, message: codeLabel + '不能为空', trigger: 'blur' }]
   }
   numericFields.forEach(f => {
     r[f] = [{
@@ -281,16 +276,16 @@ function buildRules(numericFields, codeField, codeLabel) {
 
 const data = reactive({
   form: {},
-  queryParams: {pageNum: 1, pageSize: 10, engName: null, wadiCode: null},
+  queryParams: { pageNum: 1, pageSize: 10, engName: null, wadiCode: null },
   rules: buildRules(WADI_NUM_FIELDS, 'wadiCode', '引调水代码')
 })
-const {form, queryParams, rules} = toRefs(data)
+const { form, queryParams, rules } = toRefs(data)
 
 const activeTab = ref('basic')
 
 const startCoords = computed({
   get() {
-    const {startLong, startLat} = form.value
+    const { startLong, startLat } = form.value
     if (startLong != null && startLat != null) return [Number(startLong), Number(startLat)]
     return null
   },
@@ -306,7 +301,7 @@ const startCoords = computed({
 })
 const endCoords = computed({
   get() {
-    const {endLong, endLat} = form.value
+    const { endLong, endLat } = form.value
     if (endLong != null && endLat != null) return [Number(endLong), Number(endLat)]
     return null
   },
@@ -398,7 +393,7 @@ function handleDelete(row) {
 }
 
 function handleExport() {
-  proxy.download(`/eng/attr/wadi/export`, {...queryParams.value}, `引调水工程_${Date.now()}.xlsx`)
+  proxy.download(`/eng/attr/wadi/export`, { ...queryParams.value }, `引调水工程_${Date.now()}.xlsx`)
 }
 
 getList()

+ 160 - 99
gw-ui/src/views/slaj/eng/attengwaga/index.vue

@@ -1,35 +1,45 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px" class="search-form">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px"
+      class="search-form">
       <div class="search-form-left">
-        <el-form-item label="工程名称" prop="engName"><el-input v-model="queryParams.engName" placeholder="请输入" clearable @keyup.enter="handleQuery" /></el-form-item>
-        <el-form-item label="水闸代码" prop="wagaCode"><el-input v-model="queryParams.wagaCode" placeholder="请输入" clearable /></el-form-item>
+        <el-form-item label="工程名称" prop="engName"><el-input v-model="queryParams.engName" placeholder="请输入" clearable
+            @keyup.enter="handleQuery" /></el-form-item>
+        <el-form-item label="水闸代码" prop="wagaCode"><el-input v-model="queryParams.wagaCode" placeholder="请输入"
+            clearable /></el-form-item>
         <el-form-item>
           &nbsp;&nbsp;
-          <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button><el-button icon="Refresh" @click="resetQuery">重置</el-button>
+          <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button><el-button icon="Refresh"
+            @click="resetQuery">重置</el-button>
         </el-form-item>
       </div>
       <div class="search-form-right">
         <el-button type="primary" plain icon="Plus" @click="handleAdd">新增</el-button>
-<!--        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate(null)">修改</el-button>-->
+        <!--        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate(null)">修改</el-button>-->
         <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete(null)">删除</el-button>
-<!--        <el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>-->
+        <!--        <el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>-->
         <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" />
       </div>
     </el-form>
     <el-table v-loading="loading" :data="dataList" @selection-change="handleSelect" height="calc(100% - 100px)">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="工程名称" prop="engName" align="center" :show-overflow-tooltip="true" v-if="columns.engName.visible" />
+      <el-table-column label="工程名称" prop="engName" align="center" :show-overflow-tooltip="true"
+        v-if="columns.engName.visible" />
       <el-table-column label="水闸代码" prop="wagaCode" align="center" v-if="columns.wagaCode.visible" />
       <el-table-column label="水闸位置" prop="wagaLoc" align="center" v-if="columns.wagaLoc.visible" />
-      <el-table-column label="水闸类型" align="center" v-if="columns.wagaType.visible"><template #default="scope"><dict-tag :options="slaj_waga_type" :value="scope.row.wagaType" /></template></el-table-column>
+      <el-table-column label="水闸类型" align="center" v-if="columns.wagaType.visible"><template #default="scope"><dict-tag
+            :options="slaj_waga_type" :value="scope.row.wagaType" /></template></el-table-column>
       <el-table-column label="闸孔数量(孔)" prop="gaorNum" align="center" v-if="columns.gaorNum.visible" />
-      <el-table-column label="工程等级" align="center" v-if="columns.engGrad.visible"><template #default="scope"><dict-tag :options="slaj_eng_grad_waga" :value="scope.row.engGrad" /></template></el-table-column>
-      <el-table-column label="工程规模" align="center" v-if="columns.engScal.visible"><template #default="scope"><dict-tag :options="slaj_eng_scal_waga" :value="scope.row.engScal" /></template></el-table-column>
+      <el-table-column label="工程等级" align="center" v-if="columns.engGrad.visible"><template #default="scope"><dict-tag
+            :options="slaj_eng_grad_waga" :value="scope.row.engGrad" /></template></el-table-column>
+      <el-table-column label="工程规模" align="center" v-if="columns.engScal.visible"><template #default="scope"><dict-tag
+            :options="slaj_eng_scal_waga" :value="scope.row.engScal" /></template></el-table-column>
       <el-table-column label="过闸流量(m3/s)" prop="lockDisc" align="center" v-if="columns.lockDisc.visible" />
-      <el-table-column label="消能方式" align="center" v-if="columns.enerDiss.visible"><template #default="scope"><dict-tag :options="slaj_ener_diss" :value="scope.row.enerDiss" /></template></el-table-column>
+      <el-table-column label="消能方式" align="center" v-if="columns.enerDiss.visible"><template #default="scope"><dict-tag
+            :options="slaj_ener_diss" :value="scope.row.enerDiss" /></template></el-table-column>
       <el-table-column label="设计防洪标准(年)" prop="desFlSta" align="center" v-if="columns.desFlSta.visible" />
-      <el-table-column label="备注" prop="note" align="center" :show-overflow-tooltip="true" v-if="columns.note.visible" />
+      <el-table-column label="备注" prop="note" align="center" :show-overflow-tooltip="true"
+        v-if="columns.note.visible" />
       <el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width" fixed="right">
         <template #default="scope">
           <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)">修改</el-button>
@@ -37,100 +47,133 @@
         </template>
       </el-table-column>
     </el-table>
-    <pagination v-show="total>0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
     <el-dialog :title="title" v-model="open" width="750px" append-to-body class="eng-edit-dialog">
-      <el-form ref="formRef" :model="form" :rules="rules" label-width="140px">
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
         <el-tabs v-model="activeTab">
-        <el-tab-pane label="基本信息" name="basic">
-        <el-row>
-          <el-col :span="12"><el-form-item label="工程名称" prop="engName"><el-input v-model="form.engName" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="水闸代码" prop="wagaCode"><el-input v-model="form.wagaCode" placeholder="请输入" /></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="水闸位置" prop="wagaLoc"><el-input v-model="form.wagaLoc" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="重要程度" prop="impoGrad"><el-select v-model="form.impoGrad" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_impo_grad" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="中心经度(°)" prop="cenLong">
-                <el-input v-model="form.cenLong" placeholder="请输入经度"/>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12"><el-form-item label="中心纬度(°)" prop="cenLat">
-                <el-input v-model="form.cenLat" placeholder="请输入纬度"/>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="24"><el-form-item label="点位坐标"><CoordPicker v-model="mapCoords"/></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="批复投资(万元)" prop="apprBudg"><el-input v-model="form.apprBudg" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="工程状态" prop="engStat"><el-select v-model="form.engStat" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_stat" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="启停状态" prop="stat"><el-select v-model="form.stat" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_stat" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="是否除险加固" prop="ifReinForce"><el-select v-model="form.ifReinForce" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_if_rein_force" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        </el-tab-pane>
-        <el-tab-pane label="水闸参数" name="waga">
-        <el-row>
-          <el-col :span="12"><el-form-item label="水闸类型" prop="wagaType"><el-select v-model="form.wagaType" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_waga_type" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="闸孔数量(孔)" prop="gaorNum"><el-input v-model="form.gaorNum" placeholder="请输入" /></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="工程等级" prop="engGrad"><el-select v-model="form.engGrad" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_grad_waga" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="工程规模" prop="engScal"><el-select v-model="form.engScal" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_scal_waga" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="过闸流量(m3/s)" prop="lockDisc"><el-input v-model="form.lockDisc" placeholder="请输入" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="消能方式" prop="enerDiss"><el-select v-model="form.enerDiss" placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_ener_diss" :key="d.value" :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="设计防洪标准(年)" prop="desFlSta"><el-input v-model="form.desFlSta" placeholder="请输入" /></el-form-item></el-col>
-        </el-row>
-        </el-tab-pane>
-        <el-tab-pane label="时间信息" name="time">
-        <el-row>
-          <el-col :span="12"><el-form-item label="开工日期" prop="startDate"><el-date-picker v-model="form.startDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择" style="width:100%" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="完工日期" prop="compDate"><el-date-picker v-model="form.compDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择" style="width:100%" /></el-form-item></el-col>
-        </el-row>
-        <el-form-item label="备注" prop="note"><el-input v-model="form.note" type="textarea" :rows="2" placeholder="请输入" /></el-form-item>
-        </el-tab-pane>
+          <el-tab-pane label="基本信息" name="basic">
+            <el-row>
+              <el-col :span="12"><el-form-item label="工程名称" prop="engName"><el-input v-model="form.engName"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="水闸代码" prop="wagaCode"><el-input v-model="form.wagaCode"
+                    placeholder="请输入" /></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="水闸位置" prop="wagaLoc"><el-input v-model="form.wagaLoc"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="重要程度" prop="impoGrad"><el-select v-model="form.impoGrad"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_impo_grad" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="9">
+                <el-form-item label="中心经度(°)" prop="cenLong">
+                  <el-input v-model="form.cenLong" placeholder="请输入经度" />
+                </el-form-item>
+              </el-col>
+              <el-col :span="9"><el-form-item label="中心纬度(°)" prop="cenLat">
+                  <el-input v-model="form.cenLat" placeholder="请输入纬度" />
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <CoordPicker style="margin-left: 10px;" v-model="mapCoords" />
+              </el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="批复投资(万元)" prop="apprBudg"><el-input v-model="form.apprBudg"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="工程状态" prop="engStat"><el-select v-model="form.engStat"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_stat" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="启停状态" prop="stat"><el-select v-model="form.stat" placeholder="请选择"
+                    style="width:100%"><el-option v-for="d in slaj_stat" :key="d.value" :label="d.label"
+                      :value="d.value" /></el-select></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="是否除险加固" prop="ifReinForce"><el-select v-model="form.ifReinForce"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_if_rein_force" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+          </el-tab-pane>
+          <el-tab-pane label="水闸参数" name="waga">
+            <el-row>
+              <el-col :span="12"><el-form-item label="水闸类型" prop="wagaType"><el-select v-model="form.wagaType"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_waga_type" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="闸孔数量(孔)" prop="gaorNum"><el-input v-model="form.gaorNum"
+                    placeholder="请输入" /></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="工程等级" prop="engGrad"><el-select v-model="form.engGrad"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_grad_waga" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="工程规模" prop="engScal"><el-select v-model="form.engScal"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_eng_scal_waga" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="过闸流量(m3/s)" prop="lockDisc"><el-input v-model="form.lockDisc"
+                    placeholder="请输入" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="消能方式" prop="enerDiss"><el-select v-model="form.enerDiss"
+                    placeholder="请选择" style="width:100%"><el-option v-for="d in slaj_ener_diss" :key="d.value"
+                      :label="d.label" :value="d.value" /></el-select></el-form-item></el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12"><el-form-item label="设计防洪标准(年)" prop="desFlSta"><el-input v-model="form.desFlSta"
+                    placeholder="请输入" /></el-form-item></el-col>
+            </el-row>
+          </el-tab-pane>
+          <el-tab-pane label="时间信息" name="time">
+            <el-row>
+              <el-col :span="12"><el-form-item label="开工日期" prop="startDate"><el-date-picker v-model="form.startDate"
+                    type="date" value-format="YYYY-MM-DD" placeholder="请选择"
+                    style="width:100%" /></el-form-item></el-col>
+              <el-col :span="12"><el-form-item label="完工日期" prop="compDate"><el-date-picker v-model="form.compDate"
+                    type="date" value-format="YYYY-MM-DD" placeholder="请选择"
+                    style="width:100%" /></el-form-item></el-col>
+            </el-row>
+            <el-form-item label="备注" prop="note"><el-input v-model="form.note" type="textarea" :rows="2"
+                placeholder="请输入" /></el-form-item>
+          </el-tab-pane>
         </el-tabs>
       </el-form>
-      <template #footer><el-button type="primary" @click="submit">确 定</el-button><el-button @click="open=false">取 消</el-button></template>
+      <template #footer><el-button type="primary" @click="submit">确 定</el-button><el-button @click="open = false">取
+          消</el-button></template>
     </el-dialog>
   </div>
 </template>
 <script setup>
 import { listAttEngWaga, getAttEngWaga, addAttEngWaga, updateAttEngWaga, delAttEngWaga } from "@/api/slaj/eng"
-const{proxy}=getCurrentInstance()
-const { slaj_waga_type, slaj_eng_grad_waga, slaj_eng_scal_waga, slaj_ener_diss, slaj_impo_grad, slaj_eng_stat, slaj_stat, slaj_if_rein_force } = proxy.useDict("slaj_waga_type","slaj_eng_grad_waga","slaj_eng_scal_waga","slaj_ener_diss","slaj_impo_grad","slaj_eng_stat","slaj_stat","slaj_if_rein_force")
-const dataList=ref([]),open=ref(false),loading=ref(true),showSearch=ref(true),ids=ref([]),single=ref(true),multiple=ref(true),total=ref(0),title=ref("")
-const columns=ref({engName:{label:'工程名称',visible:true},wagaCode:{label:'水闸代码',visible:true},wagaLoc:{label:'水闸位置',visible:true},wagaType:{label:'水闸类型',visible:true},gaorNum:{label:'闸孔数量(孔)',visible:true},engGrad:{label:'工程等级',visible:true},engScal:{label:'工程规模',visible:true},lockDisc:{label:'过闸流量(m3/s)',visible:true},enerDiss:{label:'消能方式',visible:true},desFlSta:{label:'设计防洪标准(年)',visible:true},engStat:{label:'工程状态',visible:true},note:{label:'备注',visible:false}})
-const WAGA_NUM_FIELDS = ['cenLong','cenLat','apprBudg','gaorNum','lockDisc','desFlSta']
+const { proxy } = getCurrentInstance()
+const { slaj_waga_type, slaj_eng_grad_waga, slaj_eng_scal_waga, slaj_ener_diss, slaj_impo_grad, slaj_eng_stat, slaj_stat, slaj_if_rein_force } = proxy.useDict("slaj_waga_type", "slaj_eng_grad_waga", "slaj_eng_scal_waga", "slaj_ener_diss", "slaj_impo_grad", "slaj_eng_stat", "slaj_stat", "slaj_if_rein_force")
+const dataList = ref([]), open = ref(false), loading = ref(true), showSearch = ref(true), ids = ref([]), single = ref(true), multiple = ref(true), total = ref(0), title = ref("")
+const columns = ref({ engName: { label: '工程名称', visible: true }, wagaCode: { label: '水闸代码', visible: true }, wagaLoc: { label: '水闸位置', visible: true }, wagaType: { label: '水闸类型', visible: true }, gaorNum: { label: '闸孔数量(孔)', visible: true }, engGrad: { label: '工程等级', visible: true }, engScal: { label: '工程规模', visible: true }, lockDisc: { label: '过闸流量(m3/s)', visible: true }, enerDiss: { label: '消能方式', visible: true }, desFlSta: { label: '设计防洪标准(年)', visible: true }, engStat: { label: '工程状态', visible: true }, note: { label: '备注', visible: false } })
+const WAGA_NUM_FIELDS = ['cenLong', 'cenLat', 'apprBudg', 'gaorNum', 'lockDisc', 'desFlSta']
 function buildRules(numericFields, codeField, codeLabel) {
   const r = {
-    engName: [{required: true, message: '工程名称不能为空', trigger: 'blur'}],
-    [codeField]: [{required: true, message: codeLabel + '不能为空', trigger: 'blur'}]
+    engName: [{ required: true, message: '工程名称不能为空', trigger: 'blur' }],
+    [codeField]: [{ required: true, message: codeLabel + '不能为空', trigger: 'blur' }]
   }
   numericFields.forEach(f => {
-    r[f] = [{validator: (rule, value, cb) => {
-      if (value === '' || value === null || value === undefined) return cb()
-      if (isNaN(Number(value))) cb(new Error('请输入数值'))
-      else cb()
-    }, trigger: 'blur'}]
+    r[f] = [{
+      validator: (rule, value, cb) => {
+        if (value === '' || value === null || value === undefined) return cb()
+        if (isNaN(Number(value))) cb(new Error('请输入数值'))
+        else cb()
+      }, trigger: 'blur'
+    }]
   })
   return r
 }
-const data=reactive({form:{},queryParams:{pageNum:1,pageSize:10,engName:null,wagaCode:null},rules: buildRules(WAGA_NUM_FIELDS, 'wagaCode', '水闸代码')})
-const{form,queryParams,rules}=toRefs(data)
+const data = reactive({ form: {}, queryParams: { pageNum: 1, pageSize: 10, engName: null, wagaCode: null }, rules: buildRules(WAGA_NUM_FIELDS, 'wagaCode', '水闸代码') })
+const { form, queryParams, rules } = toRefs(data)
 
 const activeTab = ref('basic')
 
 const mapCoords = computed({
   get() {
-    const {cenLong, cenLat} = form.value
+    const { cenLong, cenLat } = form.value
     if (cenLong != null && cenLat != null) return [Number(cenLong), Number(cenLat)]
     return null
   },
@@ -144,21 +187,39 @@ const mapCoords = computed({
     }
   }
 })
-function getList(){loading.value=true;listAttEngWaga(queryParams.value).then(r=>{dataList.value=r.rows;total.value=r.total;loading.value=false})}
-function handleQuery(){queryParams.value.pageNum=1;getList()}
-function resetQuery(){proxy.resetForm("queryRef");handleQuery()}
-function handleSelect(s){ids.value=s.map(i=>i.guid);single.value=s.length!==1;multiple.value=!s.length}
-const WAGA_FIELDS=['engName','wagaCode','wagaLoc','cenLong','cenLat','impoGrad','apprBudg','engStat','stat','ifReinForce','wagaType','gaorNum','engGrad','engScal','lockDisc','enerDiss','desFlSta','startDate','compDate','note']
-function reset(){const f={};WAGA_FIELDS.forEach(k=>f[k]=null);f.stat="1";f.engGuid=null;f.guid=null;form.value=f;proxy.resetForm("formRef")}
-function handleAdd(){reset();activeTab.value='basic';open.value=true;title.value="添加水闸工程"}
-function handleUpdate(row){reset();activeTab.value='basic';const g=row?row.guid:ids.value[0];getAttEngWaga(g).then(r=>{form.value=r.data;open.value=true;title.value="修改水闸工程"})}
-function submit(){proxy.$refs.formRef.validate(v=>{if(v){const fn=form.value.guid?updateAttEngWaga:addAttEngWaga;fn(form.value).then(()=>{proxy.$modal.msgSuccess("成功");open.value=false;getList()})}})}
-function handleDelete(row){const g=row?row.guid:ids.value.join(",");proxy.$modal.confirm('确认删除?').then(()=>delAttEngWaga(g)).then(()=>{getList();proxy.$modal.msgSuccess("删除成功")})}
-function handleExport(){proxy.download(`/eng/attr/waga/export`,{...queryParams.value},`水闸工程_${Date.now()}.xlsx`)}
+function getList() { loading.value = true; listAttEngWaga(queryParams.value).then(r => { dataList.value = r.rows; total.value = r.total; loading.value = false }) }
+function handleQuery() { queryParams.value.pageNum = 1; getList() }
+function resetQuery() { proxy.resetForm("queryRef"); handleQuery() }
+function handleSelect(s) { ids.value = s.map(i => i.guid); single.value = s.length !== 1; multiple.value = !s.length }
+const WAGA_FIELDS = ['engName', 'wagaCode', 'wagaLoc', 'cenLong', 'cenLat', 'impoGrad', 'apprBudg', 'engStat', 'stat', 'ifReinForce', 'wagaType', 'gaorNum', 'engGrad', 'engScal', 'lockDisc', 'enerDiss', 'desFlSta', 'startDate', 'compDate', 'note']
+function reset() { const f = {}; WAGA_FIELDS.forEach(k => f[k] = null); f.stat = "1"; f.engGuid = null; f.guid = null; form.value = f; proxy.resetForm("formRef") }
+function handleAdd() { reset(); activeTab.value = 'basic'; open.value = true; title.value = "添加水闸工程" }
+function handleUpdate(row) { reset(); activeTab.value = 'basic'; const g = row ? row.guid : ids.value[0]; getAttEngWaga(g).then(r => { form.value = r.data; open.value = true; title.value = "修改水闸工程" }) }
+function submit() { proxy.$refs.formRef.validate(v => { if (v) { const fn = form.value.guid ? updateAttEngWaga : addAttEngWaga; fn(form.value).then(() => { proxy.$modal.msgSuccess("成功"); open.value = false; getList() }) } }) }
+function handleDelete(row) { const g = row ? row.guid : ids.value.join(","); proxy.$modal.confirm('确认删除?').then(() => delAttEngWaga(g)).then(() => { getList(); proxy.$modal.msgSuccess("删除成功") }) }
+function handleExport() { proxy.download(`/eng/attr/waga/export`, { ...queryParams.value }, `水闸工程_${Date.now()}.xlsx`) }
 getList()
 </script>
 <style scoped>
-.search-form { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; }
-.search-form-left { display: flex; align-items: center; flex-wrap: wrap; flex: 1; }
-.search-form-right { display: flex; align-items: center; gap: 6px; white-space: nowrap; flex-shrink: 0; }
+.search-form {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  flex-wrap: wrap;
+}
+
+.search-form-left {
+  display: flex;
+  align-items: center;
+  flex-wrap: wrap;
+  flex: 1;
+}
+
+.search-form-right {
+  display: flex;
+  align-items: center;
+  gap: 6px;
+  white-space: nowrap;
+  flex-shrink: 0;
+}
 </style>