修改字体

This commit is contained in:
yiqiuyang
2025-10-24 09:01:00 +08:00
parent 278176a0fb
commit 2f6de52604

View File

@ -2,11 +2,16 @@
<div id="page"> <div id="page">
<div class="header"> <div class="header">
<div class="images flex a-c" v-for="item in imagesList" :key="item.id"> <div class="images flex a-c" v-for="item in imagesList" :key="item.id">
<img :src="item.src" @click="drawRectangle" /> <el-tooltip effect="dark" content="绘制矩形区域">
<img :src="item.src" @click="drawRectangle" />
</el-tooltip>
<el-button class="form-btn" type="primary" size="mini" @click="analyzeAverageSlope">确定</el-button> <el-button class="form-btn" type="primary" size="mini" @click="analyzeAverageSlope">确定</el-button>
<el-button class="form-btn right" type="primary" size="mini" :disabled="showExport" @click="clickExport"> <div class="right">
导出 <el-button class="form-btn" type="primary" size="mini" :disabled="showExport" @click="clickExport">
</el-button> 导出
</el-button>
<el-button class="form-btn" type="primary" size="mini" @click="handleExportJosn"> json编辑 </el-button>
</div>
</div> </div>
</div> </div>
@ -17,11 +22,10 @@
<div class="control-panel"> <div class="control-panel">
<div class="title">范围</div> <div class="title">范围</div>
<el-form-item label="左上角:"> <el-form-item label="左上角:">
<el-input v-model="form.leftTop" @blur="updateArea" placeholder="请输入经纬度,以 ',' 隔开'"></el-input> <el-input v-model="form.leftTop" @blur="updateArea" placeholder="经纬度,以 ',' 隔开'"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="右下角:"> <el-form-item label="右下角:">
<el-input v-model="form.rightBottom" @blur="updateArea" placeholder="请输入经纬度,以 ',' 隔开'"> <el-input v-model="form.rightBottom" @blur="updateArea" placeholder="经纬度,以 ',' 隔开'"> </el-input>
</el-input>
</el-form-item> </el-form-item>
<input type="file" ref="fileInput" @change="handleFileUpload" style="display: none" /> <input type="file" ref="fileInput" @change="handleFileUpload" style="display: none" />
<div class="importJson flex j-c a-c" @click="triggerFileUpload">导入json文件</div> <div class="importJson flex j-c a-c" @click="triggerFileUpload">导入json文件</div>
@ -46,17 +50,17 @@
<!-- 条件 --> <!-- 条件 -->
<div class="control-panel"> <div class="control-panel">
<div class="title">条件</div> <div class="title">网格条件</div>
<el-form-item label=""> <el-form-item label="列(个)">
<el-input v-model="form.xLength"></el-input> <el-input v-model="form.xLength"></el-input>
</el-form-item> </el-form-item>
<el-form-item label=""> <el-form-item label="行(个)">
<el-input v-model="form.yLength"></el-input> <el-input v-model="form.yLength"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="最大坡度:"> <el-form-item label="最大坡度(°)">
<el-input v-model="form.maxSlope"></el-input> <el-input v-model="form.maxSlope"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="居民地最小距离:"> <el-form-item label="居民地距离(米)">
<el-input v-model="form.minPeopleDis"></el-input> <el-input v-model="form.minPeopleDis"></el-input>
</el-form-item> </el-form-item>
</div> </div>
@ -292,6 +296,20 @@
<el-button type="primary" size="mini" @click="exportJSON">导出</el-button> <el-button type="primary" size="mini" @click="exportJSON">导出</el-button>
</div> </div>
</el-dialog> </el-dialog>
<!-- 右侧json编辑 -->
<el-dialog :visible.sync="dialogJsonVisible" title="json编辑" width="600px">
<div v-loading="jsonLoading">
<div style="margin-bottom: 10px">
<el-button type="primary" size="mini" @click="handleJson">选择</el-button>
</div>
<el-input type="textarea" resize="none" :rows="18" v-model="jsonInfo.json" size="mini"></el-input>
</div>
<div slot="footer" class="dialog-footer">
<el-button size="mini" @click="closeJson">取消</el-button>
<el-button type="primary" size="mini" @click="confirmJson">保存</el-button>
</div>
</el-dialog>
</div> </div>
</div> </div>
</template> </template>
@ -361,6 +379,13 @@ export default {
tableHeight: 280, tableHeight: 280,
showExport: true, showExport: true,
dialogJsonVisible: false,
jsonInfo: {
json: '',
path: '',
},
jsonLoading: false,
} }
}, },
created() { created() {
@ -478,7 +503,7 @@ export default {
window.viewer.addLayer(window.shortestPathLayer) window.viewer.addLayer(window.shortestPathLayer)
// 添加地图点击事件监听,用于结束绘制 // 添加地图点击事件监听,用于结束绘制
window.viewer.on(mars3d.EventType.dblClick, (event) => { window.viewer.on(mars3d.EventType.dblClick, (event) => {
// 如果正在绘制,点击地图可以结束绘制除了绘制点 // 如果正在绘制,点击地图可以结束绘制(除了绘制点)
window.graphicLayer.stopDraw() window.graphicLayer.stopDraw()
this.form.leftTop = '' this.form.leftTop = ''
this.form.rightBottom = '' this.form.rightBottom = ''
@ -613,7 +638,7 @@ export default {
}) })
}, },
// 算矩形到 geoJSONLayer 的最小距离(米),判断是否在其内部 // 算矩形到 geoJSONLayer 的最小距离(米),判断是否在其内部
calcMinDistance(rectPositions, geoJSONLayer) { calcMinDistance(rectPositions, geoJSONLayer) {
if (!geoJSONLayer || !rectPositions?.length) return Infinity if (!geoJSONLayer || !rectPositions?.length) return Infinity
@ -652,13 +677,13 @@ export default {
}) })
}) })
console.log('矩形 → polygonP 边界最短距离(米)', inside, minDist) console.log('矩形 → polygonP 边界最短距离(米)', inside, minDist)
// 5. 面内直接返回 -1 // 5. 面内直接返回 -1
return inside ? -1 : minDist return inside ? -1 : minDist
}, },
// 判断矩形与 mars3d GeoJSON 图层是否相交不转 GeoJSON // 判断矩形与 mars3d GeoJSON 图层是否相交(不转 GeoJSON)
getIntersectId(position, layer) { getIntersectId(position, layer) {
console.log('position===>', position, layer) console.log('position===>', position, layer)
if (!position || !layer || !layer.graphics) return null if (!position || !layer || !layer.graphics) return null
@ -788,7 +813,7 @@ export default {
}, },
label: { label: {
text: '分析区域', text: '分析区域',
font: '16px sans-serif', font: '16px 等线',
color: '#ffffff', color: '#ffffff',
outline: true, outline: true,
outlineColor: '#000000', outlineColor: '#000000',
@ -823,7 +848,7 @@ export default {
// 更新多边形位置 // 更新多边形位置
this.polygon.positions = cartesianPositions this.polygon.positions = cartesianPositions
// 触发更新根据mars3d的具体API可能需要调用其他方法 // 触发更新(根据mars3d的具体API可能需要调用其他方法)
if (this.polygon.update) { if (this.polygon.update) {
this.polygon.update() this.polygon.update()
} }
@ -965,7 +990,7 @@ export default {
drawLabelAndRec() { drawLabelAndRec() {
this.analyzing = false this.analyzing = false
/* 1. 计算总分保持原逻辑 */ /* 1. 计算总分(保持原逻辑) */
const list = this.calcTotalScore(this.validBlocks) const list = this.calcTotalScore(this.validBlocks)
const len = list.length const len = list.length
if (!len) { if (!len) {
@ -1028,7 +1053,7 @@ export default {
style: { style: {
text: String(b.totalScore), text: String(b.totalScore),
font_size: 24, font_size: 24,
font_family: '楷体', font_family: '等线',
color: '#000000', color: '#000000',
outline: false, outline: false,
horizontalOrigin: Cesium.HorizontalOrigin.CENTER, horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
@ -1269,6 +1294,78 @@ export default {
} }
}, },
// json编辑
handleExportJosn() {
this.dialogJsonVisible = true
},
decodeEscapedJson(str) {
// 去掉字符串首尾的空白字符
str = str.trim()
// 直接解析 JSON 字符串
try {
return JSON.parse(str)
} catch (e) {
console.error('Error parsing JSON:', e)
return null
}
},
handleJson() {
this.jsonLoading = true
fetch('./config.ini')
.then((response) => response.text())
.then((text) => {
const parsedData = iniParser.parse(text)
axios
.post(`http://${parsedData.http.address}:${parsedData.http.port}/api/json/select`, {
headers: {
'Content-Type': 'application/json',
},
timeout: 10 * 60 * 1000,
})
.then((response) => {
this.jsonInfo = {
path: response.data.path,
json: JSON.stringify(response.data.json, null, 2),
}
this.jsonLoading = false
})
.catch((error) => {
this.jsonLoading = false
})
})
},
confirmJson() {
fetch('./config.ini')
.then((response) => response.text())
.then((text) => {
const parsedData = iniParser.parse(text)
axios
.post(
`http://${parsedData.http.address}:${parsedData.http.port}/api/json/save?path=${this.jsonInfo.path}`,
JSON.stringify(JSON.parse(this.jsonInfo.json)),
{
headers: {
'Content-Type': 'application/json',
},
}
)
.then((response) => {
this.$message.success('保存成功')
this.closeJson()
})
.catch((error) => {})
})
},
closeJson() {
this.jsonInfo.path = ''
this.jsonInfo.json = ''
this.dialogJsonVisible = false
},
// 新增 // 新增
handleAdd(type) { handleAdd(type) {
let tabIndex = this.tabList.findIndex((item) => item.id === this.activeName) let tabIndex = this.tabList.findIndex((item) => item.id === this.activeName)
@ -1343,6 +1440,9 @@ export default {
&:active { &:active {
background-color: #176363; background-color: #176363;
} }
&:focus {
background-color: #176363;
}
} }
::v-deep .el-form-item--mini.el-form-item, ::v-deep .el-form-item--mini.el-form-item,
@ -1375,9 +1475,12 @@ export default {
transform: translateY(-50%); transform: translateY(-50%);
cursor: pointer; cursor: pointer;
margin-left: 32px; margin-left: 32px;
img {
margin-right: 10px;
}
} }
.form-btn { .form-btn {
margin-left: 30px; margin-left: 20px;
} }
.btn { .btn {
position: absolute; position: absolute;
@ -1445,7 +1548,6 @@ export default {
} }
.table-title { .table-title {
font-size: 16px; font-size: 16px;
font-family: 'Pingfang';
font-weight: bold; font-weight: bold;
letter-spacing: 0.1em; letter-spacing: 0.1em;
margin-bottom: 10px; margin-bottom: 10px;