341 lines
12 KiB
Vue
341 lines
12 KiB
Vue
<template>
|
|
<div class="app-container">
|
|
<div class="level-title">
|
|
<h1>{{ this.$parent.DOOR_ID == '' ? "新增" : "修改" }}</h1>
|
|
</div>
|
|
<div>
|
|
<el-form v-loading="dialogFormVisible" ref="form" :model="form" :rules="rules" label-width="150px">
|
|
<el-row>
|
|
<el-col :span="12">
|
|
<el-form-item label="所属分公司:" prop="CORPINFO_ID">
|
|
<el-select v-model="form.CORPINFO_ID" filterable placeholder="请选择" style="width: 205px">
|
|
<el-option
|
|
v-for="item in corpList"
|
|
:key="item.CORPINFO_ID"
|
|
:label="item.CORP_NAME"
|
|
:value="item.CORPINFO_ID"/>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row>
|
|
<el-col :span="12">
|
|
<el-form-item label="口门名称:" prop="DOOR_NAME">
|
|
<el-input v-model="form.DOOR_NAME" placeholder="请输入内容"/>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row>
|
|
<el-col :span="12">
|
|
<el-form-item label="口门类型:" prop="DOOR_TYPE">
|
|
<el-select v-model="form.DOOR_TYPE" style="width: 100%;">
|
|
<el-option v-for="item in typeList" :key="item.VALUE" :label="item.NAME" :value="item.VALUE" />
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row>
|
|
<el-col :span="12">
|
|
<el-form-item label="状态:" prop="STATUS">
|
|
<el-select v-model="form.STATUS" style="width: 100%;">
|
|
<el-option v-for="item in statusList" :key="item.VALUE" :label="item.NAME" :value="item.VALUE" />
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row>
|
|
<el-col :span="12">
|
|
<el-form-item label="经纬度:" class="is-required">
|
|
<el-input v-model="form.LONGITUDEANDLATITUDE" style="width:206px" placeholder="请选择" disabled/>
|
|
<el-button style="margin-left: 10px" type="primary" @click="handleMap">点击定位</el-button>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
</el-form>
|
|
</div>
|
|
<div class="ui-foot">
|
|
<el-button type="success" @click="confirm">保 存</el-button>
|
|
<el-button plain type="info" @click="goBack">返 回</el-button>
|
|
</div>
|
|
|
|
<el-dialog :visible.sync="dialogFormMap" title="定位" width="1050px" class="dy-dialog">
|
|
<div id="cesiumContainer" />
|
|
<div slot="footer" class="dialog-footer">
|
|
<span>经度:</span>
|
|
<el-input v-model="form.LONGITUDE" style="width: 200px" placeholder="请输入内容" disabled />
|
|
<span>纬度:</span>
|
|
<el-input v-model="form.LATITUDE" style="width: 200px" placeholder="请输入内容" disabled />
|
|
<el-button @click="dialogFormMap = false">取 消</el-button>
|
|
<el-button type="primary" @click="setPosition">确 定</el-button>
|
|
</div>
|
|
</el-dialog>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
|
|
import { requestFN } from '@/utils/request'
|
|
import SelectTree from '@/components/SelectTree'
|
|
import waves from '@/directive/waves'
|
|
import TiandiMap from '../../../../../components/TianMap/TiandiMap'
|
|
|
|
let viewer = null
|
|
const Cesium = window.Cesium
|
|
Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJkOWQ0MGYwMy0yODUwLTQ1YzktOGM4OC02MTMwY2UyZjNlMzQiLCJpZCI6MTY0NTUwLCJpYXQiOjE2OTM4OTU1Mjd9.1cC0sSzyj79LZv0ILNCcl0Mabw6hl8TNngFNFr7H8f4'
|
|
var subdomains = ['0', '1', '2', '3', '4', '5', '6', '7']
|
|
var tiandituTk = 'e8a16137fd226a62a23cc7ba5c9c78ce'
|
|
const img_h = require('../../../../../assets/images/map/h.png')
|
|
export default {
|
|
|
|
components: { Pagination, SelectTree, TiandiMap },
|
|
directives: { waves },
|
|
data() {
|
|
return {
|
|
dialogFormMap: false,
|
|
dialogFormVisible: false,
|
|
dialogTableVisible: false,
|
|
PERSON_CHARGE: '',
|
|
DEPARTMENT_ID_OLD: '',
|
|
form: {
|
|
CORPINFO_ID: '',
|
|
DOOR_NAME: '',
|
|
DOOR_TYPE: '',
|
|
STATUS: '',
|
|
LONGITUDE: '',
|
|
LATITUDE: '',
|
|
LONGITUDEANDLATITUDE: ''
|
|
},
|
|
corpList: [],
|
|
riskForm: {},
|
|
KEYWORDS: '',
|
|
rules: {
|
|
CORPINFO_ID: [{ required: true, message: '所属分公司不能为空', trigger: 'blur' }],
|
|
DOOR_NAME: [{ required: true, message: '口门名称不能为空', trigger: 'blur' }],
|
|
DOOR_TYPE: [{ required: true, message: '口门类型不能为空', trigger: 'blur' }],
|
|
STATUS: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
|
|
},
|
|
formLabelWidth: '120px',
|
|
fullscreenLoading: false,
|
|
total: 0,
|
|
listQuery: {
|
|
page: 1,
|
|
limit: 20
|
|
},
|
|
multipleSelection: [],
|
|
accidentList: [],
|
|
typeList: [
|
|
{ NAME: '人行口门', VALUE: 0 },
|
|
{ NAME: '车行口门', VALUE: 1 }
|
|
],
|
|
statusList: [
|
|
{ NAME: '正常', VALUE: 0 },
|
|
{ NAME: '停用', VALUE: 1 },
|
|
{ NAME: '暂时关闭', VALUE: 2 }
|
|
]
|
|
}
|
|
},
|
|
watch: {
|
|
},
|
|
async created() {
|
|
viewer = null
|
|
this.DOOR_ID = this.$parent.DOOR_ID
|
|
this.form.DOOR_NAME = this.$parent.DOOR_NAME
|
|
this.form.DOOR_TYPE = this.$parent.DOOR_TYPE
|
|
this.form.STATUS = this.$parent.STATUS
|
|
this.getCorpList()
|
|
if (this.DOOR_ID) {
|
|
this.getDataByID()
|
|
}
|
|
},
|
|
methods: {
|
|
setPosition() {
|
|
this.form.LONGITUDEANDLATITUDE = this.form.LATITUDE + '--' + this.form.LONGITUDE
|
|
this.dialogFormMap = false
|
|
},
|
|
/**
|
|
* 初始化天地图对象
|
|
*/
|
|
/* initTDT() {
|
|
return new Promise((resolve, reject) => {
|
|
if (window.T) {
|
|
console.log('天地图初始化成功...')
|
|
resolve(window.T)
|
|
reject('error')
|
|
}
|
|
}).then(T => {
|
|
window.T = T
|
|
})
|
|
},*/
|
|
/**
|
|
* 初始化地图
|
|
* @param {*} lng 经度
|
|
* @param {*} lat 纬度
|
|
* @param {*} zoom 缩放比例(1~18)
|
|
*/
|
|
initMap(lng, lat, zoom) {
|
|
viewer = new Cesium.Viewer('cesiumContainer', {
|
|
// terrainProvider: Cesium.createWorldTerrain()
|
|
animation: false, // 动画
|
|
homeButton: true, // home键
|
|
geocoder: true, // 地址编码
|
|
baseLayerPicker: false, // 图层选择控件
|
|
timeline: false, // 时间轴
|
|
fullscreenButton: true, // 全屏显示
|
|
infoBox: true, // 点击要素之后浮窗
|
|
sceneModePicker: true, // 投影方式 三维/二维
|
|
navigationInstructionsInitiallyVisible: false, // 导航指令
|
|
navigationHelpButton: false, // 帮助信息
|
|
selectionIndicator: false, // 选择
|
|
imageryProvider: new Cesium.WebMapTileServiceImageryProvider({
|
|
// 影像底图
|
|
url: 'http://t{s}.tianditu.com/img_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=' + tiandituTk,
|
|
subdomains: subdomains,
|
|
layer: 'tdtImgLayer',
|
|
style: 'default',
|
|
format: 'image/jpeg',
|
|
tileMatrixSetID: 'GoogleMapsCompatible', // 使用谷歌的瓦片切片方式
|
|
show: true
|
|
})
|
|
})
|
|
viewer._cesiumWidget._creditContainer.style.display = 'none' // 隐藏cesium ion
|
|
Cesium.ExperimentalFeatures.enableModelExperimental = true
|
|
var tile3d = new Cesium.Cesium3DTileset({
|
|
url: config.mapJsonUrl
|
|
})
|
|
viewer.scene.primitives.add(tile3d)
|
|
|
|
this.toCenter(lng, lat, zoom)
|
|
this.leftDownAction()
|
|
},
|
|
toCenter(LONGITUDE, LATITUDE, height) {
|
|
if (!LONGITUDE && !LATITUDE) {
|
|
viewer.camera.flyTo({
|
|
destination: Cesium.Cartesian3.fromDegrees(119.58, 39.94, height)
|
|
})
|
|
viewer.entities.removeAll()
|
|
} else {
|
|
viewer.camera.flyTo({
|
|
destination: Cesium.Cartesian3.fromDegrees(LONGITUDE, LATITUDE, height)
|
|
})
|
|
viewer.entities.removeAll()
|
|
this.form.LONGITUDE = LONGITUDE
|
|
this.form.LATITUDE = LATITUDE
|
|
this.addPoint([LONGITUDE, LATITUDE], 'init')
|
|
}
|
|
},
|
|
leftDownAction() {
|
|
// 去掉entity的点击事件 start
|
|
viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK)
|
|
viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK)
|
|
// 去掉entity的点击事件 end
|
|
|
|
const handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas)
|
|
handler.setInputAction(event => {
|
|
viewer.entities.removeAll()
|
|
const clickPosition = viewer.scene.camera.pickEllipsoid(event.position) // 转经纬度(弧度)坐标
|
|
const radiansPos = Cesium.Cartographic.fromCartesian(clickPosition) // 转角度
|
|
this.form.LONGITUDE = Cesium.Math.toDegrees(radiansPos.longitude)
|
|
this.form.LATITUDE = Cesium.Math.toDegrees(radiansPos.latitude)
|
|
this.addPoint(clickPosition, 'click')
|
|
}, Cesium.ScreenSpaceEventType.LEFT_CLICK)
|
|
},
|
|
addPoint(position, type) {
|
|
viewer.entities.add({ position: type === 'init' ? Cesium.Cartesian3.fromDegrees(...position) : position, billboard: {
|
|
image: img_h,
|
|
height: 25,
|
|
width: 23,
|
|
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
|
|
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
|
|
heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
|
|
disableDepthTestDistance: Number.POSITIVE_INFINITY
|
|
}})
|
|
},
|
|
handleMap() {
|
|
this.dialogFormMap = true
|
|
this.$nextTick(() => {
|
|
if (!viewer) this.initMap(this.form.LONGITUDE, this.form.LATITUDE, 5000)
|
|
else this.toCenter(this.form.LONGITUDE, this.form.LATITUDE, 5000)
|
|
/* else this.initCenter(this.form.LONGITUDE, this.form.LATITUDE, 16)*/
|
|
})
|
|
},
|
|
confirm() {
|
|
this.$refs.form.validate(valid => {
|
|
if (valid) {
|
|
if (this.$parent.DOOR_ID == '') {
|
|
this.handleAdd()
|
|
} else {
|
|
if (valid) {
|
|
this.listLoading = true
|
|
requestFN(
|
|
'/mkmjDoor/edit',
|
|
this.form
|
|
).then((data) => {
|
|
this.goBack()
|
|
this.listLoading = false
|
|
this.dialogFormEdit = false
|
|
}).catch((e) => {
|
|
this.listLoading = false
|
|
})
|
|
}
|
|
}
|
|
}
|
|
})
|
|
},
|
|
handleAdd() {
|
|
requestFN(
|
|
'/mkmjDoor/add',
|
|
this.form
|
|
).then((data) => {
|
|
if (data.msg === '保存成功') {
|
|
this.$message.success(data.msg)
|
|
this.goBack()
|
|
} else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((e) => {
|
|
})
|
|
},
|
|
getDataByID() {
|
|
this.listLoading = true
|
|
this.dialogFormVisible = true
|
|
requestFN(
|
|
'/mkmjDoor/goEdit',
|
|
{ DOOR_ID: this.DOOR_ID }
|
|
).then((data) => {
|
|
this.form = data.pd
|
|
this.form.LONGITUDEANDLATITUDE = this.form.LATITUDE + '--' + this.form.LONGITUDE
|
|
this.dialogFormVisible = false
|
|
}).catch((e) => {
|
|
this.dialogFormVisible = false
|
|
this.listLoading = false
|
|
})
|
|
},
|
|
getCorpList() {
|
|
requestFN(
|
|
'/corpinfo/getSelectByCorpInfo',
|
|
{
|
|
}
|
|
).then((data) => {
|
|
this.corpList = JSON.parse(data.corpInfoJson)
|
|
}).catch((e) => {
|
|
})
|
|
},
|
|
// 返回列表
|
|
goBack() {
|
|
this.$parent.activeName = 'List'
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
#cesiumContainer{
|
|
width: 1000px;
|
|
height: 500px;
|
|
margin: auto;
|
|
}
|
|
.cesium-viewer-toolbar, .cesium-viewer-fullscreenContainer, .cesium-infoBox-visible {
|
|
display: none !important;
|
|
}
|
|
</style>
|