功能修改

This commit is contained in:
lSun 2025-11-07 11:11:53 +08:00
parent 9400e5e138
commit 7517040d8f
6 changed files with 1646 additions and 1584 deletions

View File

@ -23,6 +23,15 @@ export function openView(data) {
data,
})
}
export function openViewAll(data) {
return request({
url: '/model/openViews',
method: 'post',
data,
})
}
// 删除层级
export function delModelApi(data) {
return request({

View File

@ -50,3 +50,10 @@ export function getProjectSelectListApi() {
method: 'get',
})
}
//项目类型
export function getProTypeListApi() {
return request({
url: '/project/proTypeSelect',
method: 'get',
})
}

View File

@ -12,21 +12,21 @@
<div class="right-menu">
<template v-if="device !== 'mobile'">
<search id="header-search" class="right-menu-item" />
<!-- <search id="header-search" class="right-menu-item" />-->
<el-tooltip content="源码地址" effect="dark" placement="bottom">
<ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />
</el-tooltip>
<!-- <el-tooltip content="源码地址" effect="dark" placement="bottom">-->
<!-- <ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />-->
<!-- </el-tooltip>-->
<el-tooltip content="文档地址" effect="dark" placement="bottom">
<ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />
</el-tooltip>
<!-- <el-tooltip content="文档地址" effect="dark" placement="bottom">-->
<!-- <ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />-->
<!-- </el-tooltip>-->
<screenfull id="screenfull" class="right-menu-item hover-effect" />
<!-- <screenfull id="screenfull" class="right-menu-item hover-effect" />-->
<el-tooltip content="布局大小" effect="dark" placement="bottom">
<size-select id="size-select" class="right-menu-item hover-effect" />
</el-tooltip>
<!-- <el-tooltip content="布局大小" effect="dark" placement="bottom">-->
<!-- <size-select id="size-select" class="right-menu-item hover-effect" />-->
<!-- </el-tooltip>-->
</template>
<el-dropdown class="avatar-container right-menu-item hover-effect" trigger="hover">
@ -45,7 +45,7 @@
</el-dropdown>
<div class="right-menu-item hover-effect setting" @click="setLayout" v-if="setting">
<svg-icon icon-class="more-up" />
<!-- <svg-icon icon-class="more-up" />-->
</div>
</div>
</div>

View File

@ -3,11 +3,13 @@
<transition name="sidebarLogoFade">
<router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
<img v-if="logo" :src="logo" class="sidebar-logo" />
<h1 v-else class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1>
<h1 v-else class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }"> 水运AR应用平台 </h1>
</router-link>
<router-link v-else key="expand" class="sidebar-logo-link" to="/">
<img v-if="logo" :src="logo" class="sidebar-logo" />
<h1 class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1>
<h1 class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }"> 水运AR应用平台 </h1>
</router-link>
</transition>
</div>
@ -58,7 +60,7 @@ export default {
height: 50px;
line-height: 50px;
background: #2b2f3a;
text-align: center;
//text-align: center;
overflow: hidden;
& .sidebar-logo-link {

View File

@ -15,17 +15,17 @@
@change="handleProjectChange"
v-model="queryParams.projectId"
>
<el-option :key="item.id" :value="item.id" :label="item.name" v-for="item in projectSelectList" />
<el-option :key="item.id" :value="item.id" :label="item.name" v-for="item in projectSelectList"/>
</el-select>
</el-form-item>
<el-form-item label="所属单位" prop="unit">
<!-- <el-form-item label="所属单位" prop="unit">
<el-input
clearable
placeholder="请输入所属单位"
v-model="queryParams.unit"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-form-item>-->
<el-form-item label="负责人" prop="chargePerson">
<el-input
clearable
@ -53,15 +53,15 @@
</el-row>
<el-table border row-key="id" v-loading="loading" :data="modelList" default-expand-all>
<el-table-column label="序号" align="center" type="index" />
<el-table-column label="序号" align="center" type="index"/>
<el-table-column label="分类名称" align="center">
<template slot-scope="{ row }">
<span>{{ row.nodeName }}</span>
<el-tag style="margin-left: 10px" size="mini" type="primary">节点{{ row.nodelevel }}</el-tag>
</template>
</el-table-column>
<el-table-column label="所属项目" align="center" prop="proName" />
<el-table-column label="层级名称" align="center" prop="levelName" />
<el-table-column label="所属项目" align="center" prop="proName"/>
<el-table-column label="层级名称" align="center" prop="levelName"/>
<el-table-column label="操作" align="center" width="180">
<template slot-scope="{ row }">
<el-button
@ -90,9 +90,9 @@
icon="el-icon-edit"
@click="handleEdit(row)"
v-if="row.level != 1"
>
>
修改
</el-button> -->
</el-button> -->
<el-button
size="mini"
@ -114,12 +114,12 @@
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getModelList"
/> -->
/> -->
<el-dialog :title="title" :visible.sync="open" width="550px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-form-item label="项目名称" prop="proName">
<el-input v-model="form.proName" placeholder="请输入项目名称" />
<el-input v-model="form.proName" placeholder="请输入项目名称"/>
</el-form-item>
<el-form-item label="层级配置" prop="level">
<el-select v-model="form.level" placeholder="请选择层级配置" style="width: 100%">
@ -132,7 +132,7 @@
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入备注" />
<el-input v-model="form.remark" type="textarea" placeholder="请输入备注"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@ -152,7 +152,7 @@
</el-dialog>
<!-- 添加或修改岗位对话框 -->
<el-dialog width="40%" append-to-body :title="addOrEditFormTitle" :visible.sync="addOrEditFormVisible">
<AddOrEditForm ref="addOrEditComponentRef" @closeAddOrEditFormDialog="closeAddOrEditFormDialog" />
<AddOrEditForm ref="addOrEditComponentRef" @closeAddOrEditFormDialog="closeAddOrEditFormDialog"/>
</el-dialog>
<el-dialog
title="模型预览"
@ -163,7 +163,7 @@
>
<!-- <dxf-viewer :entities="dxfPreviewUrl"></dxf-viewer> -->
<div id="map-container"> </div>
<div id="map-container"></div>
</el-dialog>
</div>
</template>
@ -176,7 +176,7 @@ import UseRecordTable from './useRecordTable.vue'
import DxfViewer from './DxfViewer.vue'
// API
import { getModelListApi, delModelApi, openView } from '@/api/basic/model'
import {getModelListApi, delModelApi, openView, openViewAll} from '@/api/basic/model'
import {
listProject,
getProject,
@ -185,7 +185,7 @@ import {
updateProject,
getProjectSelectListApi,
} from '@/api/basic/project'
import { getLevelListApi } from '@/api/basic/level-manage.js'
import {getLevelListApi} from '@/api/basic/level-manage.js'
export default {
name: 'DeviceManage',
@ -212,8 +212,8 @@ export default {
level: undefined,
},
rules: {
proName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }],
level: [{ required: true, message: '请选择层级配置', trigger: 'change' }],
proName: [{required: true, message: '项目名称不能为空', trigger: 'blur'}],
level: [{required: true, message: '请选择层级配置', trigger: 'change'}],
},
levelList: [], //
@ -271,6 +271,7 @@ export default {
map: null,
modelPreviewVisible: false,
modelPreviewInfoList: [],
projectIdAll: '',
}
},
created() {
@ -299,10 +300,10 @@ export default {
//
handleViewModel(row) {
/* const modelUrl = row.modelUrl
if (!modelUrl || !modelUrl.endsWith('.dxf')) {
if (!modelUrl || !modelUrl.endsWith('.dxf')) {
this.$modal.msgWarning('模型地址无效或不是DXF文件')
return
} */
} */
/* 新需求 重新做 上面建议不要删除 有需要直接可以查看 */
// openView({ id: row.id })
// .then((response) => {
@ -313,7 +314,7 @@ export default {
// // console.error(':', error)
// })
openView({ id: row.id })
openView({id: row.id})
.then((res) => {
this.modelPreviewInfoList = res.data
this.modelPreviewVisible = true
@ -347,13 +348,13 @@ export default {
//
handleAddChild(row) {
const { id, nodeName, nodelevel, nodeCount, projectId } = row
const {id, nodeName, nodelevel, nodeCount, projectId} = row
this.addOrEditFormTitle = '新增'
this.editForm = null
this.addOrEditFormVisible = true
const editForm = { deviceName: nodeName, id, level: nodelevel * 1 + 1, nodeCount, projectId }
const editForm = {deviceName: nodeName, id, level: nodelevel * 1 + 1, nodeCount, projectId}
this.$nextTick(() => {
this.$refs.addOrEditComponentRef.setFormData(editForm)
})
@ -375,7 +376,7 @@ export default {
async getModelList() {
this.loading = true
const { rows: res } = await getModelListApi(this.queryParams)
const {rows: res} = await getModelListApi(this.queryParams)
console.log(res, '模型列表')
this.loading = false
this.modelList = this.onBuildTree(res)
@ -460,12 +461,12 @@ export default {
// (AddOrEditForm使)
handleEdit(row) {
const { id, proName, level, nodeCount } = row
const {id, proName, level, nodeCount} = row
this.addOrEditFormTitle = '编辑'
this.editForm = null
this.addOrEditFormVisible = true
const editForm = { deviceName: proName, id, level, nodeCount }
const editForm = {deviceName: proName, id, level, nodeCount}
this.$nextTick(() => {
// addOrEditComponentRef
if (this.$refs.addOrEditComponentRef) {
@ -506,7 +507,7 @@ export default {
// res = await delModelApi({ id: row.id }) // 使 delModelApi
// }
const res = await delModelApi({ id })
const res = await delModelApi({id})
if (res.code === 200) {
this.$modal.msgSuccess('删除成功')
this.getModelList()
@ -590,13 +591,14 @@ export default {
//
async getProjectSelectList() {
const { data: res } = await getProjectSelectListApi()
const {data: res} = await getProjectSelectListApi()
console.log(res, '下拉选的所有数据')
this.projectSelectList = res
if (res.length > 0) {
this.queryParams.projectId = res[0].id
this.projectIdAll = res[0].id
this.getModelList()
}
},
@ -654,10 +656,22 @@ export default {
//
handleModelPreview() {
openViewAll({projectId: this.projectIdAll})
.then((res) => {
this.modelPreviewInfoList = res.data
this.modelPreviewVisible = true
//
console.log('res', res.data)
this.initMap()
})
.catch((err) => {
console.error('获取模型详情失败:', err)
})
// this.modelPreviewVisible = true
//
// //
// this.initMap()
},
//
@ -795,7 +809,7 @@ export default {
const polyline = new BMapGL.Polyline(
[new BMapGL.Point(start[0], start[1]), new BMapGL.Point(end[0], end[1])],
{ strokeColor: 'red', strokeWeight: 2, strokeOpacity: 0.8 },
{strokeColor: 'red', strokeWeight: 2, strokeOpacity: 0.8},
)
this.map.addOverlay(polyline)
} else if (item.entityType === 'CIRCLE') {
@ -832,7 +846,7 @@ export default {
let overlay = null
if (path.length === 1) {
// 1.
const { point, angle } = path[0]
const {point, angle} = path[0]
//
const arrowIcon = new BMapGL.Icon(
@ -864,7 +878,7 @@ export default {
icon: new BMapGL.Icon(
'//api.map.baidu.com/img/markers.png',
new BMapGL.Size(20, 34),
{ anchor: new BMapGL.Size(10, 34) },
{anchor: new BMapGL.Size(10, 34)},
),
rotation: endAngle,
})

View File

@ -40,10 +40,11 @@
size="mini"
@click="handleAdd"
v-hasPermi="['basic:project:add']"
>新增</el-button
>新增
</el-button
>
</el-col>
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<el-button
type="warning"
plain
@ -51,18 +52,20 @@
size="mini"
@click="handleExport"
v-hasPermi="['basic:project:export']"
>导出</el-button
>导出
</el-button
>
</el-col>
</el-col>-->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="proList" border>
<el-table-column label="序号" align="center" type="index" />
<el-table-column label="项目名称" align="center" prop="proName" />
<el-table-column label="层级配置" align="center" prop="level" />
<el-table-column label="负责人" align="center" prop="chargePerson" />
<el-table-column label="备注" align="center" prop="remark" width="180" />
<el-table-column label="序号" align="center" type="index"/>
<el-table-column label="项目名称" align="center" prop="proName"/>
<el-table-column label="层级配置" align="center" prop="level"/>
<el-table-column label="项目类型" align="center" prop="proType"/>
<el-table-column label="负责人" align="center" prop="chargePerson"/>
<el-table-column label="备注" align="center" prop="remark" width="180"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
@ -71,7 +74,8 @@
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['basic:project:edit']"
>编辑</el-button
>编辑
</el-button
>
<el-button
size="mini"
@ -79,7 +83,8 @@
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['basic:project:remove']"
>删除</el-button
>删除
</el-button
>
</template>
</el-table-column>
@ -97,7 +102,7 @@
<el-dialog :title="title" :visible.sync="open" width="40%" append-to-body>
<el-form ref="form" :model="form" :rules="addOrEditRules" label-width="auto">
<el-form-item label="项目名称" prop="proName">
<el-input v-model="form.proName" placeholder="请输入项目名称" />
<el-input v-model="form.proName" placeholder="请输入项目名称"/>
</el-form-item>
<el-form-item label="层级配置" prop="level">
<el-select v-model="form.level" placeholder="请选择层级配置" style="width: 100%">
@ -110,14 +115,26 @@
</el-select>
</el-form-item>
<el-form-item label="项目类型" prop="proType">
<el-select v-model="form.proType" placeholder="请选择项目类型" style="width: 100%">
<el-option
:key="item.id"
:value="item.id"
:label="item.name"
v-for="item in proTypeList"
/>
</el-select>
</el-form-item>
<el-form-item label="负责人" prop="chargePerson">
<el-input v-model="form.chargePerson" placeholder="请输入负责人" />
<el-input v-model="form.chargePerson" placeholder="请输入负责人"/>
</el-form-item>
<el-form-item label="项目所在地" prop="location">
<div style="display: flex; align-items: center">
<el-input v-model="form.location" placeholder="请输入项目所在地" />
<el-button type="primary" @click="handleMapAdd" style="margin-left: 10px"> 选择地址 </el-button>
<el-input v-model="form.location" placeholder="请输入项目所在地"/>
<el-button type="primary" @click="handleMapAdd" style="margin-left: 10px"> 选择地址</el-button>
</div>
</el-form-item>
@ -129,17 +146,17 @@
<el-row :gutter="10">
<el-col :span="12">
<el-form-item label="经度" prop="longitude">
<el-input disabled v-model="form.longitude" />
<el-input disabled v-model="form.longitude"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="longitude" label="纬度">
<el-input disabled v-model="form.latitude" />
<el-input disabled v-model="form.latitude"/>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入备注" />
<el-input v-model="form.remark" type="textarea" placeholder="请输入备注"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@ -159,10 +176,10 @@
width="80%"
>
<div style="display: flex; align-items: center; margin-bottom: 14px">
<el-input v-model="searchAddress" placeholder="请输入地址" />
<el-input v-model="searchAddress" placeholder="请输入地址"/>
<el-button type="primary" @click="handleSearch" style="margin-left: 6px">搜索</el-button>
</div>
<div id="map-container" style="height: 70vh; background-color: #bfc"> </div>
<div id="map-container" style="height: 70vh; background-color: #bfc"></div>
<div style="text-align: right; margin-top: 10px">
<el-button type="primary" size="small" @click="findLocation">确定</el-button>
@ -233,9 +250,9 @@
</template>
<script>
import { listProject, getProject, delProject, addProject, updateProject } from '@/api/basic/project'
import { getLevelListApi } from '@/api/basic/level-manage.js'
import { BaiduMap, BmNavigation, BmView, BmGeolocation, BmCityList, BmLocalSearch } from 'vue-baidu-map'
import {listProject, getProject, delProject, addProject, updateProject,getProTypeListApi} from '@/api/basic/project'
import {getLevelListApi} from '@/api/basic/level-manage.js'
import {BaiduMap, BmNavigation, BmView, BmGeolocation, BmCityList, BmLocalSearch} from 'vue-baidu-map'
export default {
name: 'Post',
@ -244,7 +261,7 @@ export default {
return {
location2: '',
keyword: '',
center: { lng: 111.752912, lat: 40.832246 },
center: {lng: 111.752912, lat: 40.832246},
zoom: 12,
mapVisible: false,
iconUrl: 'http://api0.map.bdimg.com/images/marker_red_sprite.png',
@ -278,6 +295,7 @@ export default {
form: {
proName: '', //
level: '', //
proType:'', //
chargePerson: '', //
location: '', //
longitude: '', //
@ -286,15 +304,17 @@ export default {
},
//
addOrEditRules: {
proName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }],
level: [{ required: true, message: '请选择层级配置', trigger: 'change' }],
chargePerson: [{ required: true, message: '请输入负责人', trigger: 'blur' }],
location: [{ required: true, message: '请选择项目所在地', trigger: 'blur' }],
longitude: [{ required: true, message: '请选择项目所在地', trigger: 'blur' }],
latitude: [{ required: true, message: '请选择项目所在地', trigger: 'blur' }],
proName: [{required: true, message: '项目名称不能为空', trigger: 'blur'}],
level: [{required: true, message: '请选择层级配置', trigger: 'change'}],
proType: [{required: true, message: '请选择项目类型', trigger: 'change'}],
chargePerson: [{required: true, message: '请输入负责人', trigger: 'blur'}],
location: [{required: true, message: '请选择项目所在地', trigger: 'blur'}],
longitude: [{required: true, message: '请选择项目所在地', trigger: 'blur'}],
latitude: [{required: true, message: '请选择项目所在地', trigger: 'blur'}],
},
levelList: [],
proTypeList: [],
searchAddress: '',
marker: null,
@ -303,6 +323,7 @@ export default {
created() {
this.getList()
this.getLevelList()
this.getProTypeList()
},
methods: {
async getLevelList() {
@ -312,6 +333,13 @@ export default {
})
this.levelList = res.rows
},
async getProTypeList() {
const res = await getProTypeListApi()
this.proTypeList = res.data
},
/** 查询岗位列表 */
getList() {
this.loading = true
@ -331,6 +359,7 @@ export default {
this.form = {
proName: '', //
level: '', //
proType: '', //
chargePerson: '', //
location: '', //
longitude: '', //
@ -438,17 +467,17 @@ export default {
},
/** 地图选点 */
handler({ BMap, map }) {
handler({BMap, map}) {
let _this = this // vue使thisvue
let geolocation = new BMap.Geolocation()
geolocation.getCurrentPosition(
function (r) {
console.log(r)
_this.center = { lng: r.longitude, lat: r.latitude } // center
_this.autoLocationPoint = { lng: r.longitude, lat: r.latitude } //
_this.center = {lng: r.longitude, lat: r.latitude} // center
_this.autoLocationPoint = {lng: r.longitude, lat: r.latitude} //
_this.initLocation = true
},
{ enableHighAccuracy: true },
{enableHighAccuracy: true},
)
window.map = map
},
@ -458,9 +487,9 @@ export default {
let Icon_0 = new BMap.Icon(
'http://api0.map.bdimg.com/images/marker_red_sprite.png',
new BMap.Size(64, 64),
{ anchor: new BMap.Size(18, 32), imageSize: new BMap.Size(36, 25) },
{anchor: new BMap.Size(18, 32), imageSize: new BMap.Size(36, 25)},
)
let myMarker = new BMap.Marker(new BMap.Point(e.point.lng, e.point.lat), { icon: Icon_0 })
let myMarker = new BMap.Marker(new BMap.Point(e.point.lng, e.point.lat), {icon: Icon_0})
map.addOverlay(myMarker)
//
let point = new BMap.Point(e.point.lng, e.point.lat)
@ -479,9 +508,9 @@ export default {
let Icon_0 = new BMap.Icon(
'http://api0.map.bdimg.com/images/marker_red_sprite.png',
new BMap.Size(64, 64),
{ anchor: new BMap.Size(18, 32), imageSize: new BMap.Size(36, 36) },
{anchor: new BMap.Size(18, 32), imageSize: new BMap.Size(36, 36)},
)
let myMarker = new BMap.Marker(new BMap.Point(point.point.lng, point.point.lat), { icon: Icon_0 })
let myMarker = new BMap.Marker(new BMap.Point(point.point.lng, point.point.lat), {icon: Icon_0})
map.addOverlay(myMarker)
this.form.longitude = point.point.lng
this.form.latitude = point.point.lat
@ -506,7 +535,8 @@ export default {
this.getList()
this.$modal.msgSuccess('删除成功')
})
.catch(() => {})
.catch(() => {
})
},
/** 导出按钮操作 */
handleExport() {