77681 пре 1 недеља
родитељ
комит
8ff1620ea4

+ 3 - 0
gw-ui/.env.development

@@ -12,3 +12,6 @@ VITE_SERVICE_BASE_TITLE = '/gw-api'
 
 # 后端接口基础路径
 VITE_SERVER_URL = 'http://127.0.0.1:8080/'
+
+# 天地图 API Key(请替换为你的正式 Key)
+VITE_TIANDITU_KEY = '2d46608fc30b02c5855c5dc662e7d33a'

+ 3 - 0
gw-ui/.env.production

@@ -15,3 +15,6 @@ VITE_SERVER_URL = 'http://39.98.38.2:18055/gw-api'
 
 # 是否在打包时开启压缩,支持 gzip 和 brotli
 VITE_BUILD_COMPRESS = gzip
+
+# 天地图 API Key(请替换为你的正式 Key)
+VITE_TIANDITU_KEY = '2d46608fc30b02c5855c5dc662e7d33a'

+ 1 - 0
gw-ui/package.json

@@ -32,6 +32,7 @@
     "js-beautify": "1.15.4",
     "js-cookie": "3.0.5",
     "jsencrypt": "3.3.2",
+    "leaflet": "^1.9.4",
     "nprogress": "0.2.0",
     "pinia": "3.0.4",
     "vue": "3.5.26",

+ 3 - 0
gw-ui/src/main.js

@@ -43,6 +43,8 @@ import ImageUpload from "@/components/ImageUpload"
 import ImagePreview from "@/components/ImagePreview"
 // 字典标签组件
 import DictTag from '@/components/DictTag'
+// 天地图选点组件
+import TiandituMapPicker from '@/components/TiandituMapPicker'
 
 const app = createApp(App)
 
@@ -65,6 +67,7 @@ app.component('ImageUpload', ImageUpload)
 app.component('ImagePreview', ImagePreview)
 app.component('RightToolbar', RightToolbar)
 app.component('Editor', Editor)
+app.component('TiandituMapPicker', TiandituMapPicker)
 
 app.use(router)
 app.use(store)

+ 18 - 2
gw-ui/src/views/slaj/eng/attengres/index.vue

@@ -22,6 +22,8 @@
       <el-table-column label="工程名称" prop="engName" align="center" :show-overflow-tooltip="true" v-if="columns.engName.visible" />
       <el-table-column label="水库代码" prop="resCode" align="center" v-if="columns.resCode.visible" />
       <el-table-column label="水库位置" prop="resLoc" align="center" v-if="columns.resLoc.visible" />
+      <el-table-column label="中心经度(°)" prop="cenLong" align="center" v-if="columns.cenLong.visible" />
+      <el-table-column label="中心纬度(°)" prop="cenLat" align="center" v-if="columns.cenLat.visible" />
       <el-table-column label="工程等级" align="center" v-if="columns.engGrad.visible"><template #default="scope"><dict-tag :options="slaj_eng_grad_res" :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_res" :value="scope.row.engScal" /></template></el-table-column>
       <el-table-column label="坝型(材质)" align="center" v-if="columns.damTypeMat.visible"><template #default="scope"><dict-tag :options="slaj_dam_type_mat" :value="scope.row.damTypeMat" /></template></el-table-column>
@@ -52,6 +54,7 @@
         <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="resLoc"><el-input v-model="form.resLoc" 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="24"><el-form-item label="点位坐标"><TiandituMapPicker v-model="mapCoords" :height="300" /></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>
@@ -90,15 +93,28 @@ import { listAttEngRes, getAttEngRes, addAttEngRes, updateAttEngRes, delAttEngRe
 const{proxy}=getCurrentInstance()
 const { slaj_eng_grad_res, slaj_eng_scal_res, slaj_dam_type_mat, slaj_dam_type_str, slaj_main_fl_type, slaj_impo_grad, slaj_eng_stat, slaj_stat, slaj_if_rein_force } = proxy.useDict("slaj_eng_grad_res","slaj_eng_scal_res","slaj_dam_type_mat","slaj_dam_type_str","slaj_main_fl_type","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},resCode:{label:'水库代码',visible:true},resLoc:{label:'水库位置',visible:true},engGrad:{label:'工程等级',visible:true},engScal:{label:'工程规模',visible:true},damTypeMat:{label:'坝型(材质)',visible:true},damTypeStr:{label:'坝型(结构)',visible:true},damSizeHig:{label:'坝高(m)',visible:true},damSizeLen:{label:'坝长(m)',visible:true},damCreElv:{label:'坝顶高程(m)',visible:true},desFlStand:{label:'设计防洪标准(年)',visible:true},flLowLimLev:{label:'汛限水位',visible:true},flLowLimLevStart:{label:'汛限开始时间',visible:true},flLowLimLevEnd:{label:'汛限结束时间',visible:true},desFlStag:{label:'设计洪水位',visible:true},mainFlType:{label:'主要来水类型',visible:true},deadLev:{label:'死水位(m)',visible:true},totCap:{label:'总库容(万m3)',visible:true},deadCap:{label:'死库容(万m3)',visible:true},flcoCap:{label:'防洪库容(万m3)',visible:true},engStat:{label:'工程状态',visible:true},note:{label:'备注',visible:false}})
+const columns=ref({engName:{label:'工程名称',visible:true},resCode:{label:'水库代码',visible:true},resLoc:{label:'水库位置',visible:true},cenLong:{label:'中心经度(°)',visible:false},cenLat:{label:'中心纬度(°)',visible:false},engGrad:{label:'工程等级',visible:true},engScal:{label:'工程规模',visible:true},damTypeMat:{label:'坝型(材质)',visible:true},damTypeStr:{label:'坝型(结构)',visible:true},damSizeHig:{label:'坝高(m)',visible:true},damSizeLen:{label:'坝长(m)',visible:true},damCreElv:{label:'坝顶高程(m)',visible:true},desFlStand:{label:'设计防洪标准(年)',visible:true},flLowLimLev:{label:'汛限水位',visible:true},flLowLimLevStart:{label:'汛限开始时间',visible:true},flLowLimLevEnd:{label:'汛限结束时间',visible:true},desFlStag:{label:'设计洪水位',visible:true},mainFlType:{label:'主要来水类型',visible:true},deadLev:{label:'死水位(m)',visible:true},totCap:{label:'总库容(万m3)',visible:true},deadCap:{label:'死库容(万m3)',visible:true},flcoCap:{label:'防洪库容(万m3)',visible:true},engStat:{label:'工程状态',visible:true},note:{label:'备注',visible:false}})
 const data=reactive({form:{},queryParams:{pageNum:1,pageSize:10,engName:null,resCode:null},rules:{}})
 const{form,queryParams,rules}=toRefs(data)
 function getList(){loading.value=true;listAttEngRes(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 RES_FIELDS=['engName','resCode','resLoc','impoGrad','apprBudg','engStat','stat','ifReinForce','engGrad','engScal','damTypeMat','damTypeStr','damSizeHig','damSizeLen','damCreElv','desFlStand','flLowLimLev','mainFlType','desFlStag','deadLev','totCap','deadCap','flcoCap','flLowLimLevStart','flLowLimLevEnd','startDate','compDate','note']
+const RES_FIELDS=['engName','resCode','resLoc','cenLong','cenLat','impoGrad','apprBudg','engStat','stat','ifReinForce','engGrad','engScal','damTypeMat','damTypeStr','damSizeHig','damSizeLen','damCreElv','desFlStand','flLowLimLev','mainFlType','desFlStag','deadLev','totCap','deadCap','flcoCap','flLowLimLevStart','flLowLimLevEnd','startDate','compDate','note']
 function reset(){const f={};RES_FIELDS.forEach(k=>f[k]=null);f.engGuid=null;f.guid=null;form.value=f;proxy.resetForm("formRef")}
+const mapCoords = computed({
+  get() {
+    const { cenLong, cenLat } = form.value
+    if (cenLong != null && cenLat != null) return [Number(cenLong), Number(cenLat)]
+    return null
+  },
+  set(val) {
+    if (val) {
+      form.value.cenLong = val[0]
+      form.value.cenLat = val[1]
+    }
+  }
+})
 function handleAdd(){reset();open.value=true;title.value="添加水库工程"}
 function handleUpdate(row){reset();const g=row?row.guid:ids.value[0];getAttEngRes(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?updateAttEngRes:addAttEngRes;fn(form.value).then(()=>{proxy.$modal.msgSuccess("成功");open.value=false;getList()})}})}