Compare commits

...

4 Commits

@ -29,13 +29,13 @@
"management-system"
],
"dependencies": {
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
"@babel/plugin-proposal-optional-chaining": "^7.18.9",
"@fullcalendar/core": "^6.1.4",
"@fullcalendar/daygrid": "^6.1.4",
"@fullcalendar/interaction": "^6.1.4",
"@fullcalendar/timegrid": "^6.1.4",
"@fullcalendar/vue": "^6.1.4",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
"@babel/plugin-proposal-optional-chaining": "^7.18.9",
"@tinymce/tinymce-vue": "^3.2.0",
"axios": "0.18.1",
"clipboard": "2.0.4",

@ -1,3 +1,11 @@
<!--
* @Author: jevononlie 728254585@qq.com
* @Date: 2024-05-17 17:34:18
* @LastEditors: jevononlie 728254585@qq.com
* @LastEditTime: 2024-05-21 11:02:18
* @FilePath: /jnpf-web/public/index.html
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<!DOCTYPE html>
<html>
@ -9,6 +17,9 @@
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= webpackConfig.name %></title>
<script src="<%= BASE_URL %>cdn/echarts/echarts.min.js"></script>
<!-- 先在vue的index.html里面引入腾讯地图包 -->
<script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=U24BZ-7UECT-ZSNXI-L3GJD-GZD3E-3YFF6&libraries=drawing"></script>
<script src="https://mapapi.qq.com/web/mapComponents/geoLocation/v/geolocation.min.js"></script>
<!-- <script type="text/javascript" src="//api.map.baidu.com/api?v=2.0&ak=nYAafE0e8IXpGM0ykV3BO2k7CVRHI79Y"></script> -->
</head>

@ -1,8 +1,8 @@
/*
* @Author: 王文杰
* @Date: 2024-02-02 14:19:40
* @LastEditors: 王文杰
* @LastEditTime: 2024-02-29 14:40:37
* @LastEditors: jevononlie 728254585@qq.com
* @LastEditTime: 2024-05-21 09:35:25
* @FilePath: /jnpf-web/src/utils/apiUrl.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
@ -10,5 +10,5 @@ module.exports = {
// 开发环境接口配置
// APIURl: 'http://127.0.0.1:30000'
// 测试环境接口配置
APIURl: 'http://222.71.165.187:30000'
APIURl: 'http://192.168.0.23:30000'
}

@ -0,0 +1,257 @@
<template>
<el-dialog title="电子围栏" :close-on-click-modal="false" :visible="true" top="10vh" width="90%" append-to-body
modal-append-to-body :before-close="handleClose" class="my-dialog">
<div class="cont">
<div class="tips">
<p>1绘制鼠标左键点击及移动即可绘制图形; &nbsp;&nbsp; 2结束绘制鼠标左键双击即可结束绘制折线多边形会自动闭合圆形矩形椭圆单击即可结束;&nbsp;&nbsp;
3中断绘制过程中按下esc键可中断该过程</p>
</div>
<div id="mapFencecontainer" class="mapBox">
<div class="mapBtn">
<!-- <el-button size="small" type="danger" @click="delpolygon()"></el-button> -->
<el-button size="small" type="danger" @click="clearOverlays()"></el-button>
<el-button size="small" type="primary" @click="sendLngLat"></el-button>
<!-- <el-button size="small" type="primary" @click="sendMsg"></el-button> -->
</div>
</div>
<!-- <p>给地图绑定了点击事件当点击地图时会在点击位置显示Marker</p> -->
</div>
</el-dialog>
</template>
<script>
let map, marker, polygon, drawingManager, lngLat; //
const markersArray = []; let overlaysArray = []; // ,
let path4 = [];//
//
let arr = [{ 'lat': 34.80506482194067, 'lng': 113.59760284423828 },
{ 'lat': 34.780394716350614, 'lng': 113.59365463256836 },
{ 'lat': 34.760794345237514, 'lng': 113.58541488647461 },
{ 'lat': 34.7330074293797, 'lng': 113.58455657958984 },
{ 'lat': 34.70281206762318, 'lng': 113.61854553222656 },
{ 'lat': 34.70027176815597, 'lng': 113.62884521484375 },
{ 'lat': 34.6987193245323, 'lng': 113.63296508789062 },
{ 'lat': 34.69914272113635, 'lng': 113.63880157470703 },
{ 'lat': 34.699001589175694, 'lng': 113.64498138427734 },
{ 'lat': 34.698578191849535, 'lng': 113.68309020996094 },
{ 'lat': 34.73907339121123, 'lng': 113.68206024169922 },
{ 'lat': 34.738932327388824, 'lng': 113.6920166015625 },
{ 'lat': 34.76319176276739, 'lng': 113.69218826293945 },
{ 'lat': 34.763050740134055, 'lng': 113.70386123657227 },
{ 'lat': 34.7864571976711, 'lng': 113.70214462280273 },
{ 'lat': 34.786739162702524, 'lng': 113.68206024169922 },
{ 'lat': 34.809997957307736, 'lng': 113.68223190307617 },
{ 'lat': 34.81098454894641, 'lng': 113.64789962768555 },
{ 'lat': 34.81366238099493, 'lng': 113.62936019897461 }]; //
export default {
props: ['position'],
data() {
return {
longitude: '',
latitude: '',
lngLatData: [] //
};
},
mounted() {
this.$nextTick(() => {
this.init();
})
},
methods: {
handleClose() {
this.$emit('areaVisibleChange', false);
},
// ()
sendMsg() {
// func: this.msg:
this.$emit('areaVisibleChange', false);
},
// ()
sendLngLat() {
if (lngLat == undefined) {
lngLat = path4;
}
console.log('确认', lngLat)
},
//
init() {
const lat = this.position.lat
const lng = this.position.lng
map = new qq.maps.Map(document.getElementById('mapFencecontainer'), {
center: new qq.maps.LatLng(lat, lng), //
zoom: 13
});
//
this.addMarker(new qq.maps.LatLng(lat, lng)); //
this.markerOnly();
//
// 便
// path4 = [];
arr.forEach(item => {
path4.push(new qq.maps.LatLng(item.lat, item.lng));
});
console.log(path4);
this.showpolygon(path4);
//
this.addpolygon();
},
//
markerOnly() {
qq.maps.event.addListener(map, 'click', function (event) {
this.addMarker(event.latLng);
qq.maps.event.addListener(map, 'click', function (event) {
this.deleteOverlays(); //
marker = new qq.maps.Marker({
position: event.latLng,
map: map
});
});
var gps = event.latLng.getLat() + ',' + event.latLng.getLng(); // 便
});
},
//
addMarker(location) {
this.deleteOverlays();
var marker = new qq.maps.Marker({
position: location,
map: map
});
markersArray.push(marker);
},
//
deleteOverlays() {
if (markersArray) {
// for (i in markersArray) {
for (var i = 0; i < markersArray.length; i++) {
markersArray[i].setMap(null);
}
markersArray.length = 0;
}
if (marker !== undefined) {
marker.setMap(null);
}
},
/**
* 多边形绘制
*/
//
addpolygon() {
drawingManager = new qq.maps.drawing.DrawingManager({
drawingMode: qq.maps.drawing.OverlayType.POLYGON, //
drawingControl: true,
drawingControlOptions: {
position: qq.maps.ControlPosition.TOP_CENTER,
// drawingModes: [
// qq.maps.drawing.OverlayType.POLYGON
// ]
//
drawingModes: [
qq.maps.drawing.OverlayType.MARKER,
qq.maps.drawing.OverlayType.CIRCLE,
qq.maps.drawing.OverlayType.POLYGON,
qq.maps.drawing.OverlayType.POLYLINE,
qq.maps.drawing.OverlayType.RECTANGLE
]
},
markerOptions: {
visible: false
},
//
polygonOptions: {
editable: true,
strokeColor: new qq.maps.Color(202, 67, 58, 0.8),
fillColor: new qq.maps.Color(202, 67, 58, 0.1),
clickable: false
},
//
circleOptions: {
fillColor: new qq.maps.Color(255, 208, 70, 0.3),
strokeColor: new qq.maps.Color(88, 88, 88, 1),
strokeWeight: 3,
clickable: false
}
});
drawingManager.setMap(map);
qq.maps.event.addListener(drawingManager, 'overlaycomplete', function (event) {
// clearOverlays(overlaysArray)
lngLat = [];
overlaysArray.push(event.overlay);
for (const item of event.overlay.getPath().elems) {
const lng = item.getLng();
const lat = item.getLat();
lngLat.push({
lat: lat,
lng: lng
});
}
console.log('overlaycomplete',lngLat); //
});
},
//
showpolygon(path3) {
polygon = new qq.maps.Polygon({
map: map,
editable: true,
strokeColor: new qq.maps.Color(202, 67, 58, 0.8),
fillColor: new qq.maps.Color(202, 67, 58, 0.1)
});
polygon.setPath(path3);
},
//
delpolygon() {
const a = [];
polygon.setPath(a);
},
//
clearOverlays() {
arr = []; //
path4 = [];
polygon.setPath(path4);
if (overlaysArray) { // ifvuefor in if0
// for (i in overlaysArray) {
for (var i = 0; i < overlaysArray.length; i++) {
overlaysArray[i].setMap(null);
}
}
overlaysArray = []; //
lngLat = [];
console.log(drawingManager);
this.init();
}
}
};
</script>
<style scoped lang="scss">
>>>.el-dialog__body {
padding: 0 20px 30px;
}
.cont {
height: 680px;
position: relative;
.tips {
margin: 20px 0;
p {
line-height: 16px;
}
}
}
.mapBox {
width: 100%;
height: 90%;
position: absolute;
.mapBtn {
position: absolute;
bottom: 20px;
right: 20px;
z-index: 999;
}
}
</style>

@ -1,12 +1,8 @@
<template>
<transition name="el-zoom-in-center">
<div class="JNPF-preview-main">
<div class="JNPF-common-page-header">
<el-page-header @back="goBack"
:content="!dataForm.id ? '新建':'编辑'"/>
<el-page-header @back="goBack" :content="!dataForm.id ? '新建' : '编辑'" />
<div class="options">
<el-dropdown class="dropdown" placement="bottom">
<el-button style="width:70px">
@ -21,78 +17,76 @@
{{ '下一条' }}
</el-dropdown-item>
</template>
<el-dropdown-item type="primary" @click.native="dataFormSubmit(2)"
:loading="continueBtnLoading" :disabled='btnLoading'>
<el-dropdown-item type="primary" @click.native="dataFormSubmit(2)" :loading="continueBtnLoading"
:disabled='btnLoading'>
{{ !dataForm.id ? '确定并新增' : '确定并继续' }}</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<el-button type="primary" @click="dataFormSubmit()" :loading="btnLoading" :disabled='continueBtnLoading'> </el-button>
<el-button type="primary" @click="dataFormSubmit()" :loading="btnLoading" :disabled='continueBtnLoading'>
</el-button>
<el-button @click="goBack"> </el-button>
</div>
</div>
<el-row :gutter="15" class=" main" :style="{ margin: '0 auto', width: '100%' }">
<el-form ref="formRef" :model="dataForm" :rules="dataRule" size="small" label-width="100px" label-position="right" >
<el-form ref="formRef" :model="dataForm" :rules="dataRule" size="small" label-width="100px"
label-position="right">
<template v-if="!loading">
<!-- 具体表单 -->
<el-col :span="24">
<jnpf-form-tip-item
label="区域名称" tipLabel="围栏区域名称" prop="areaName" >
<JnpfInput v-model="dataForm.areaName" @change="changeData('areaName',-1)"
placeholder="电子围栏名称" clearable :style='{"width":"100%"}'>
<jnpf-form-tip-item label="区域名称" tipLabel="围栏区域名称" prop="areaName">
<JnpfInput v-model="dataForm.areaName" @change="changeData('areaName', -1)" placeholder="电子围栏名称"
clearable :style='{ "width": "100%" }'>
</JnpfInput>
</jnpf-form-tip-item>
</el-col>
<el-col :span="24">
<jnpf-form-tip-item
label="区域类型" tipLabel="请选择围栏类型" prop="areaType" >
<JnpfSelect v-model="dataForm.areaType" @change="changeData('areaType',-1)"
placeholder="请选择围栏类型" clearable :style='{"width":"100%"}' :options="areaTypeOptions" :props="areaTypeProps" >
<jnpf-form-tip-item label="区域类型" tipLabel="请选择围栏类型" prop="areaType">
<JnpfSelect v-model="dataForm.areaType" @change="changeData('areaType', -1)" placeholder="请选择围栏类型"
clearable :style='{ "width": "100%" }' :options="areaTypeOptions" :props="areaTypeProps">
</JnpfSelect>
</jnpf-form-tip-item>
</el-col>
<el-col :span="24">
<jnpf-form-tip-item
label="是否启用" prop="status" >
<JnpfRadio v-model="dataForm.status" @change="changeData('status',-1)"
optionType="default" direction="horizontal" size="small" :options="statusOptions" :props="statusProps" >
<jnpf-form-tip-item label="是否启用" prop="status">
<JnpfRadio v-model="dataForm.status" @change="changeData('status', -1)" optionType="default"
direction="horizontal" size="small" :options="statusOptions" :props="statusProps">
</JnpfRadio>
</jnpf-form-tip-item>
</el-col>
<el-col :span="24">
<jnpf-form-tip-item
label="站点编号" tipLabel="绑定站点编码" prop="stationCode" >
<JnpfPopupSelect v-model="dataForm.stationCode" @change="changeData('stationCode',-1)"
:rowIndex="null" :formData="dataForm" :templateJson="interfaceRes.stationCode" placeholder="请选择为那个站点绘制区域" hasPage propsValue="station_code" popupWidth="800px" popupTitle="选择数据" popupType="dialog" relationField='station_name' field='stationCode' interfaceId="520259300875047493" :pageSize="20" :columnOptions="stationCodecolumnOptions" clearable :style='{"width":"100%"}'>
<jnpf-form-tip-item label="站点编号" tipLabel="绑定站点编码" prop="stationCode">
<JnpfPopupSelect v-model="dataForm.stationCode" @change="changeData('stationCode', -1)" :rowIndex="null"
:formData="dataForm" :templateJson="interfaceRes.stationCode" placeholder="请选择为那个站点绘制区域" hasPage
propsValue="station_code" popupWidth="800px" popupTitle="选择数据" popupType="dialog"
relationField='station_name' field='stationCode' interfaceId="520259300875047493" :pageSize="20"
:columnOptions="stationCodecolumnOptions" clearable :style='{ "width": "100%" }'>
</JnpfPopupSelect>
</jnpf-form-tip-item>
</el-col>
<el-col :span="24">
<jnpf-form-tip-item
label="地图信息" tipLabel="在地图上绘制电子围栏" prop="areaMapInfo" >
<JnpfInput v-model="dataForm.areaMapInfo" @change="changeData('areaMapInfo',-1)"
placeholder="绘制电子围栏区域" disabled :maxlength="65539" clearable prefix-icon='el-icon-map-location' :style='{"width":"100%"}' show-password >
<jnpf-form-tip-item label="电子围栏" tipLabel="在地图上绘制电子围栏" prop="areaMapInfo">
<JnpfInput v-model="dataForm.areaMapInfo" @focus="handLeArea" placeholder="绘制电子围栏区域" :maxlength="65539"
clearable prefix-icon='el-icon-map-location' :style='{ "width": "100%" }' show-password>
</JnpfInput>
</jnpf-form-tip-item>
</el-col>
<el-col :span="24">
<jnpf-form-tip-item
label="区域描述" tipLabel="请输入区域描述" prop="areaDesc" >
<jnpf-form-tip-item label="区域描述" tipLabel="请输入区域描述" prop="areaDesc">
<JnpfTextarea v-model="dataForm.areaDesc" @change="changeData('areaDesc', -1)"
placeholder="请输入不超过两百字的区域描述" :style='{"width":"100%"}' true type="textarea" :autosize='{"minRows":4,"maxRows":4}' >
placeholder="请输入不超过两百字的区域描述" :style='{ "width": "100%" }' true type="textarea"
:autosize='{ "minRows": 4, "maxRows": 4 }'>
</JnpfTextarea>
</jnpf-form-tip-item>
</el-col>
<el-col :span="24">
<jnpf-form-tip-item
label="修改用户" prop="lastModifyUserId" >
<jnpf-form-tip-item label="修改用户" prop="lastModifyUserId">
<JnpfInput v-model="dataForm.lastModifyUserId" @change="changeData('lastModifyUserId', -1)"
placeholder="系统自动生成" readonly :style='{ "width": "100%" }'>
</JnpfInput>
</jnpf-form-tip-item>
</el-col>
<el-col :span="24">
<jnpf-form-tip-item
label="修改时间" prop="lastModifyTime" >
<jnpf-form-tip-item label="修改时间" prop="lastModifyTime">
<JnpfInput v-model="dataForm.lastModifyTime" @change="changeData('lastModifyTime', -1)"
placeholder="系统自动生成" readonly :style='{ "width": "100%" }'>
</JnpfInput>
@ -101,8 +95,11 @@
<!-- 表单结束 -->
</template>
</el-form>
<SelectDialog v-if="selectDialogVisible" :config="currTableConf" :formData="dataForm"
ref="selectDialog" @select="addForSelect" @close="selectDialogVisible=false"/>
<area-dialog :position="position" v-if="areaVisible" @areaVisibleChange="handleAreaVisibleChange"
ref="JNPFForm" />
<!-- <SelectDialog v-if="selectDialogVisible" :config="currTableConf" :formData="dataForm"
ref="selectDialog" @select="addForSelect" @close="selectDialogVisible=false"/> -->
</el-row>
</div>
</transition>
@ -110,6 +107,7 @@
<script>
import areaDialog from './areaDialog'
import request from '@/utils/request'
import { mapGetters } from "vuex";
import { getDataInterfaceRes } from '@/api/systemData/dataInterface'
@ -119,10 +117,14 @@
import { getDateDay, getLaterData, getBeforeData, getBeforeTime, getLaterTime } from '@/components/Generator/utils/index.js'
import { thousandsFormat } from "@/components/Generator/utils/index"
export default {
components: { },
components: {
areaDialog
},
props: [],
data() {
return {
areaVisible: false,
position: {},
dataFormSubmitType: 0,
continueBtnLoading: false,
index: 0,
@ -218,6 +220,7 @@
lastModifyUserId: [],
lastModifyTime: [],
},
}
},
computed: {
@ -231,6 +234,30 @@
},
mounted() { },
methods: {
//
showPosition(position){
console.log(position)
this.position = position
this.areaVisible = true
},
//
errorPosition() {
console.log('定位失败');
//
this.getPosition();
},
// Keyreferer
getPosition() {
const referer = '易回收后台';
const geolocation = new window.qq.maps.Geolocation('U24BZ-7UECT-ZSNXI-L3GJD-GZD3E-3YFF6', referer);
geolocation.getLocation(this.showPosition, this.errorPosition);
},
handLeArea() {
this.getPosition()
},
handleAreaVisibleChange(areaVisible) {
this.areaVisible = areaVisible
},
prev() {
this.index--
if (this.index === 0) {

Loading…
Cancel
Save