|
@@ -85,27 +85,27 @@
|
|
|
</template>
|
|
|
</div>
|
|
|
<div v-if="qyParams.qyInfo.tab === '1'" class="qy-main-content-1">
|
|
|
- <div>企业名称:{{qyParams.qyInfo[qyParams.qyInfo.tab].name}}</div>
|
|
|
- <div>企业法人:{{qyParams.qyInfo[qyParams.qyInfo.tab].people}}</div>
|
|
|
- <div>统一社会信用代码:{{qyParams.qyInfo[qyParams.qyInfo.tab].number}}</div>
|
|
|
- <div>经营地址:{{qyParams.qyInfo[qyParams.qyInfo.tab].address}}</div>
|
|
|
+ <div>企业名称:{{qyParams.qyInfo[qyParams.qyInfo.tab].name}}</div>
|
|
|
+ <div>企业法人:{{qyParams.qyInfo[qyParams.qyInfo.tab].people}}</div>
|
|
|
+ <div>统一社会信用代码:{{qyParams.qyInfo[qyParams.qyInfo.tab].number}}</div>
|
|
|
+ <div>经营地址:{{qyParams.qyInfo[qyParams.qyInfo.tab].address}}</div>
|
|
|
</div>
|
|
|
<div v-else-if="qyParams.qyInfo.tab === '5'" class="qy-main-content-5">
|
|
|
<div class="qy-main-content-5-radius">
|
|
|
周边范围:
|
|
|
- <div class="radius-min __hover" @click="qyParams.qyInfo[qyParams.qyInfo.tab].radius > 1 ? (qyParams.qyInfo[qyParams.qyInfo.tab].radius--) : undefined">-</div>
|
|
|
+ <div class="radius-min __hover" @click="qyParams.qyInfo[qyParams.qyInfo.tab].radius > 1 ? (qyParams.qyInfo[qyParams.qyInfo.tab].radius--, handleRangeInput(qyParams.qyInfo[qyParams.qyInfo.tab].radius)) : undefined">-</div>
|
|
|
<CusFormColumn
|
|
|
link="number"
|
|
|
label=""
|
|
|
- :min="1"
|
|
|
- :max="60"
|
|
|
:clearable="false"
|
|
|
v-model:param="qyParams.qyInfo[qyParams.qyInfo.tab].radius"
|
|
|
+ @input="handleRangeInput"
|
|
|
@blur="handleRangeBlur"/>
|
|
|
- <div class="radius-max __hover" @click="qyParams.qyInfo[qyParams.qyInfo.tab].radius < 60 ? (qyParams.qyInfo[qyParams.qyInfo.tab].radius++) : undefined">+</div>
|
|
|
+ <div class="radius-max __hover" @click="qyParams.qyInfo[qyParams.qyInfo.tab].radius < 60 ? (qyParams.qyInfo[qyParams.qyInfo.tab].radius++, handleRangeInput(qyParams.qyInfo[qyParams.qyInfo.tab].radius)) : undefined">+</div>
|
|
|
km
|
|
|
- <div class="submit __hover" @click="onRadiusSubmit">确定</div>
|
|
|
+ <div class="submit __hover" :style="`cursor: ${qyParams.qyInfo[qyParams.qyInfo.tab].radiusTips ? 'not-allowed' : ''};`" @click="onRadiusSubmit">确定</div>
|
|
|
<div class="reset __hover" @click="onRadiusReset">重置</div>
|
|
|
+ <div class="tips" v-if="qyParams.qyInfo[qyParams.qyInfo.tab].radiusTips"><SvgIcon name="tips" size="16" color="#FFB878"/>请输入1~60的正整数!</div>
|
|
|
</div>
|
|
|
<div class="qy-main-content-5-table" :style="`height: ${25 + (qyParams.qyInfo[qyParams.qyInfo.tab].tableData.length > 5 ? 5 * 25 : qyParams.qyInfo[qyParams.qyInfo.tab].tableData.length * 25)}px;`" v-loading="qyParams.qyInfo[qyParams.qyInfo.tab].loading" element-loading-background="rgba(0, 0, 0, 0.3)">
|
|
|
<el-auto-resizer>
|
|
@@ -114,7 +114,7 @@
|
|
|
:width="width"
|
|
|
:height="height"
|
|
|
:data="qyParams.qyInfo[qyParams.qyInfo.tab].tableData"
|
|
|
- :center="qyParams.qyInfo['5'].center"
|
|
|
+ :center="qyParams.qyInfo.coordinates"
|
|
|
/>
|
|
|
<!-- <el-table-v2-->
|
|
|
<!-- class="__gis-overlay_table-v2"-->
|
|
@@ -148,9 +148,9 @@
|
|
|
</div>
|
|
|
<div class="sb-item">
|
|
|
<div class="sb-item-label">状态:</div>
|
|
|
- <div class="sb-item-value">{{qyParams.sbInfo?.online === '0' ? '在线' : '离线'}}</div>
|
|
|
+ <div class="sb-item-value">{{qyParams.sbInfo?.online == '1' ? '在线' : '离线'}}</div>
|
|
|
</div>
|
|
|
- <div class="play-button __hover" @click="showVideo = true">视频调阅</div>
|
|
|
+ <div class="play-button __hover" @click="onPlay">视频调阅</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<GisDefaultDom ref="ref_gisDefault"/>
|
|
@@ -242,10 +242,7 @@ export default defineComponent({
|
|
|
analysisCircle: <any>null,
|
|
|
tempSbFeature: <any>null,
|
|
|
sbOverlay: <any>null,
|
|
|
- sbInfo: <any>{
|
|
|
- name: '505县道新安村路口1-枪机-0110580',
|
|
|
- code: '46044123124125125',
|
|
|
- },
|
|
|
+ sbInfo: <any>{},
|
|
|
},
|
|
|
videoLayout: {
|
|
|
width: 640,
|
|
@@ -282,9 +279,7 @@ export default defineComponent({
|
|
|
if (f.get('featureType') === 'qy') { // 企业
|
|
|
// 恢复上一个要素的样式
|
|
|
if (f.getId() !== state.qyParams.tempFeature?.getId()) {
|
|
|
- state.qyParams.tempFeature?.get('resetStyle')?.()
|
|
|
- state.qyParams.analysisSource?.clear()
|
|
|
- // 新的要素
|
|
|
+ onCloseQy()
|
|
|
if (f.get('isAnalysis')) {
|
|
|
f.setStyle(f.get('analysisActiveStyle'))
|
|
|
} else {
|
|
@@ -294,8 +289,14 @@ export default defineComponent({
|
|
|
store.dispatch('gis/LOAD_ACTIVE_QY_ID', f.getId())
|
|
|
// 备份新的要素
|
|
|
state.qyParams.tempFeature = f
|
|
|
+ state.qyParams.overlay.setPosition(f.getGeometry().getCoordinates())
|
|
|
+ } else {
|
|
|
+ if (state.qyParams.overlay.getPosition() === undefined) {
|
|
|
+ state.qyParams.overlay.setPosition(f.getGeometry().getCoordinates())
|
|
|
+ } else {
|
|
|
+ state.qyParams.overlay.setPosition(undefined)
|
|
|
+ }
|
|
|
}
|
|
|
- state.qyParams.overlay.setPosition(f.getGeometry().getCoordinates())
|
|
|
} else if (f.get('featureType') === 'sb') { // 设备
|
|
|
// 恢复上一个要素的样式
|
|
|
if (f.getId() !== state.qyParams.tempSbFeature?.getId()) {
|
|
@@ -418,7 +419,8 @@ export default defineComponent({
|
|
|
radius: 10,
|
|
|
center: feat.getGeometry().getCoordinates(),
|
|
|
tableData: [],
|
|
|
- loading: false
|
|
|
+ loading: false,
|
|
|
+ radiusTips: false
|
|
|
},
|
|
|
}
|
|
|
feat.set('info', obj)
|
|
@@ -495,6 +497,10 @@ export default defineComponent({
|
|
|
state.qyParams.qyInfo = {}
|
|
|
state.qyParams.analysisSource?.clear()
|
|
|
store.dispatch('gis/LOAD_ACTIVE_QY_ID', null)
|
|
|
+ state.qyParams.sbOverlay?.setPosition(undefined)
|
|
|
+ state.qyParams.tempSbFeature?.get('resetStyle')()
|
|
|
+ state.qyParams.tempSbFeature = null
|
|
|
+ state.qyParams.sbInfo = {}
|
|
|
}
|
|
|
const onCloseSb = () => {
|
|
|
state.qyParams.sbOverlay?.setPosition(undefined)
|
|
@@ -502,29 +508,24 @@ export default defineComponent({
|
|
|
state.qyParams.tempSbFeature = null
|
|
|
}
|
|
|
const handleRangeBlur = () => {
|
|
|
- if (!state.qyParams.qyInfo['5'].radius) {
|
|
|
- state.qyParams.qyInfo['5'].radius = 10
|
|
|
- }
|
|
|
+ // if (!state.qyParams.qyInfo['5'].radius) {
|
|
|
+ // state.qyParams.qyInfo['5'].radius = 10
|
|
|
+ // }
|
|
|
// setCircle()
|
|
|
}
|
|
|
- const setCircle = () => {
|
|
|
- const transformProjection = (arr, EPSG, EPSG2) => {
|
|
|
- try {
|
|
|
- if (EPSG2 && EPSG) {
|
|
|
- if (arr && arr.length === 4) {
|
|
|
- return proj.transformExtent(arr, EPSG, EPSG2);
|
|
|
- } else {
|
|
|
- return proj.transform(arr, EPSG, EPSG2);
|
|
|
- }
|
|
|
- }
|
|
|
- return undefined;
|
|
|
- } catch (e) {
|
|
|
- console.error(e);
|
|
|
+ const handleRangeInput = (v) => {
|
|
|
+ const nV = Number(v)
|
|
|
+ if (!isNaN(Number(nV))) {
|
|
|
+ if (nV < 1 || nV > 60) {
|
|
|
+ state.qyParams.qyInfo['5'].radiusTips = true
|
|
|
+ } else {
|
|
|
+ state.qyParams.qyInfo['5'].radiusTips = false
|
|
|
}
|
|
|
}
|
|
|
- // @ts-ignore
|
|
|
- state.qyParams.analysisCircle.getGeometry().setRadius(transformProjection([state.qyParams.qyInfo['5'].radius * 1000, 0], 'EPSG:3857', 'EPSG:4326')[0] - transformProjection([0, 0], 'EPSG:3857', 'EPSG:4326')[0],'XY')
|
|
|
- state.qyParams.analysisCircle.getGeometry().setCenter(state.qyParams.qyInfo.coordinates)
|
|
|
+ }
|
|
|
+ const setCircle = () => {
|
|
|
+ const circle = turf.circle(state.qyParams.qyInfo.coordinates, state.qyParams.qyInfo['5'].radius, {steps: 1024, units: 'kilometers'})
|
|
|
+ state.qyParams.analysisCircle.setGeometry(new geom.Polygon(circle.geometry.coordinates))
|
|
|
}
|
|
|
const onRadiusSubmit = () => {
|
|
|
if (!state.qyParams.analysisLayer) {
|
|
@@ -545,79 +546,80 @@ export default defineComponent({
|
|
|
})
|
|
|
]
|
|
|
});
|
|
|
- state.qyParams.analysisCircle = new ol.Feature({
|
|
|
- geometry: new geom.Circle(state.qyParams.qyInfo.coordinates, 0),
|
|
|
- })
|
|
|
+ state.qyParams.analysisCircle = new ol.Feature()
|
|
|
state.qyParams.analysisSource.addFeature(state.qyParams.analysisCircle)
|
|
|
setCircle()
|
|
|
state.map.addLayer(state.qyParams.analysisLayer)
|
|
|
}
|
|
|
- state.qyParams.analysisSource.clear()
|
|
|
- state.qyParams.analysisSource.addFeature(state.qyParams.analysisCircle)
|
|
|
- setCircle()
|
|
|
- state.qyParams.qyInfo['5'].tableData = []
|
|
|
- state.qyParams.qyInfo['5'].loading = true
|
|
|
- that.$api.deviceQuery({
|
|
|
- lon: state.qyParams.qyInfo.coordinates[0],
|
|
|
- lat: state.qyParams.qyInfo.coordinates[1],
|
|
|
- radius: state.qyParams.qyInfo['5'].radius
|
|
|
- }).then((res: any) => {
|
|
|
- // console.log(res)
|
|
|
- // for (let i = 0; i < 500; i++) {
|
|
|
- // state.qyParams.qyInfo['5'].tableData.push({
|
|
|
- // name: '505县道新安村路口1-枪机-0110580_' + i,
|
|
|
- // code: '46044123124125125',
|
|
|
- // status: i % 3 === 0 ? '1' : '0',
|
|
|
- // typeName: '公安类',
|
|
|
- // type: i % 3 === 0 ? 'galsb' : (i % 3 === 1 ? 'shlsb' : 'mylsb'),
|
|
|
- // wkt: `POINT(${that.$util.randomNum(108.738329, 110.912130, 6)} ${that.$util.randomNum(18.154784, 20, 6)})`
|
|
|
- // })
|
|
|
- // }
|
|
|
- if (res.resp_code === 0 && res.datas?.length > 0) {
|
|
|
- console.log(res.datas?.length)
|
|
|
- const features: any = []
|
|
|
- res.datas?.forEach(v => {
|
|
|
- try {
|
|
|
- const feat: any = new format.WKT().readFeature(`POINT(${v.longitude} ${v.latitude})`)
|
|
|
- let type = ''
|
|
|
- if (v.type === '公安类') {
|
|
|
- type = 'galsb'
|
|
|
- } else if (v.type === '社会类') {
|
|
|
- type = 'shlsb'
|
|
|
- } else if (v.type === '民用类') {
|
|
|
- type = 'mylsb'
|
|
|
- }
|
|
|
- feat.set('defaultStyle', SbStyle.sbStyle(type))
|
|
|
- feat.set('activeStyle', [...CommonStyle.activeStyle(), ...SbStyle.sbStyle(type)])
|
|
|
- feat.set('analysisStyle', [...CommonStyle.analysisStyle(), ...SbStyle.sbStyle(type)])
|
|
|
- feat.set('analysisActiveStyle', [...CommonStyle.activeStyle(), ...CommonStyle.analysisStyle(), ...SbStyle.sbStyle(type)])
|
|
|
- feat.set('isAnalysis', true)
|
|
|
- feat.set('resetStyle', () => {
|
|
|
- if (feat.get('isAnalysis')) {
|
|
|
- feat.setStyle(feat.get('analysisStyle'))
|
|
|
- } else {
|
|
|
- feat.setStyle(feat.get('defaultStyle'))
|
|
|
- }
|
|
|
- })
|
|
|
- feat.setStyle(feat.get('analysisStyle'))
|
|
|
- feat.set('featureType', 'sb')
|
|
|
- feat.set('info', v)
|
|
|
- feat.setId(v.deviceid)
|
|
|
- features.push(feat)
|
|
|
- state.qyParams.qyInfo['5'].tableData.push(v)
|
|
|
- } catch (e) {
|
|
|
- console.error('异常设备', v)
|
|
|
- }
|
|
|
- })
|
|
|
- state.qyParams.analysisSource.addFeatures(features)
|
|
|
- }
|
|
|
- state.qyParams.qyInfo['5'].loading = false
|
|
|
- }).catch(() => {
|
|
|
+ if (!state.qyParams.qyInfo['5'].radiusTips) {
|
|
|
+ state.qyParams.analysisSource.clear()
|
|
|
+ state.qyParams.analysisSource.addFeature(state.qyParams.analysisCircle)
|
|
|
+ setCircle()
|
|
|
+ state.qyParams.qyInfo['5'].tableData = []
|
|
|
state.qyParams.qyInfo['5'].loading = true
|
|
|
- })
|
|
|
+ that.$api.deviceQuery({
|
|
|
+ lon: state.qyParams.qyInfo.coordinates[0],
|
|
|
+ lat: state.qyParams.qyInfo.coordinates[1],
|
|
|
+ radius: state.qyParams.qyInfo['5'].radius
|
|
|
+ }).then((res: any) => {
|
|
|
+ // console.log(res)
|
|
|
+ // for (let i = 0; i < 500; i++) {
|
|
|
+ // state.qyParams.qyInfo['5'].tableData.push({
|
|
|
+ // name: '505县道新安村路口1-枪机-0110580_' + i,
|
|
|
+ // code: '46044123124125125',
|
|
|
+ // status: i % 3 === 0 ? '1' : '0',
|
|
|
+ // typeName: '公安类',
|
|
|
+ // type: i % 3 === 0 ? 'galsb' : (i % 3 === 1 ? 'shlsb' : 'mylsb'),
|
|
|
+ // wkt: `POINT(${that.$util.randomNum(108.738329, 110.912130, 6)} ${that.$util.randomNum(18.154784, 20, 6)})`
|
|
|
+ // })
|
|
|
+ // }
|
|
|
+ if (res.resp_code === 0 && res.datas?.length > 0) {
|
|
|
+ console.log(res.datas?.length)
|
|
|
+ const features: any = []
|
|
|
+ res.datas?.forEach(v => {
|
|
|
+ try {
|
|
|
+ const feat: any = new format.WKT().readFeature(`POINT(${v.longitude} ${v.latitude})`)
|
|
|
+ let type = ''
|
|
|
+ if (v.type === '公安类') {
|
|
|
+ type = 'galsb'
|
|
|
+ } else if (v.type === '社会类') {
|
|
|
+ type = 'shlsb'
|
|
|
+ } else if (v.type === '民用类') {
|
|
|
+ type = 'mylsb'
|
|
|
+ }
|
|
|
+ feat.set('defaultStyle', SbStyle.sbStyle(type))
|
|
|
+ feat.set('activeStyle', [...CommonStyle.activeStyle(), ...SbStyle.sbStyle(type)])
|
|
|
+ feat.set('analysisStyle', [...CommonStyle.analysisStyle(), ...SbStyle.sbStyle(type)])
|
|
|
+ feat.set('analysisActiveStyle', [...CommonStyle.activeStyle(), ...CommonStyle.analysisStyle(), ...SbStyle.sbStyle(type)])
|
|
|
+ feat.set('isAnalysis', true)
|
|
|
+ feat.set('resetStyle', () => {
|
|
|
+ if (feat.get('isAnalysis')) {
|
|
|
+ feat.setStyle(feat.get('analysisStyle'))
|
|
|
+ } else {
|
|
|
+ feat.setStyle(feat.get('defaultStyle'))
|
|
|
+ }
|
|
|
+ })
|
|
|
+ feat.setStyle(feat.get('analysisStyle'))
|
|
|
+ feat.set('featureType', 'sb')
|
|
|
+ feat.set('info', v)
|
|
|
+ feat.setId(v.deviceid)
|
|
|
+ features.push(feat)
|
|
|
+ state.qyParams.qyInfo['5'].tableData.push(v)
|
|
|
+ } catch (e) {
|
|
|
+ console.error('异常设备', v)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ state.qyParams.analysisSource.addFeatures(features)
|
|
|
+ }
|
|
|
+ state.qyParams.qyInfo['5'].loading = false
|
|
|
+ }).catch(() => {
|
|
|
+ state.qyParams.qyInfo['5'].loading = true
|
|
|
+ })
|
|
|
+ }
|
|
|
}
|
|
|
const onRadiusReset = () => {
|
|
|
state.qyParams.qyInfo['5'].radius = 10
|
|
|
+ state.qyParams.qyInfo['5'].radiusTips = false
|
|
|
onRadiusSubmit()
|
|
|
}
|
|
|
const mockSB1 = () => {
|
|
@@ -742,6 +744,7 @@ export default defineComponent({
|
|
|
onCloseQy,
|
|
|
onCloseSb,
|
|
|
handleRangeBlur,
|
|
|
+ handleRangeInput,
|
|
|
setCircle,
|
|
|
onRadiusSubmit,
|
|
|
onRadiusReset,
|
|
@@ -1127,6 +1130,15 @@ export default defineComponent({
|
|
|
color: #8FFFFF;
|
|
|
margin-left: 8px;
|
|
|
}
|
|
|
+ .tips {
|
|
|
+ margin-left: auto;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ color: #FFB878;
|
|
|
+ .svg-icon {
|
|
|
+ margin-right: 2px;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
.qy-main-content-5-table {
|
|
|
margin-top: 10px;
|