Compare commits

...

2 Commits

Author SHA1 Message Date
徐景良 8d6afe004d Merge branch 'main' of http://123.132.248.154:10000/HC_YFZX/CaiYuanYiTiHua 2024-06-11 08:29:59 +08:00
徐景良 0d1e6ab056 merge 2024-06-11 08:29:53 +08:00
7 changed files with 300 additions and 50 deletions

View File

@ -1,5 +1,5 @@
import { defHttp } from '@/utils/http/axios';
import { AddLayerParams,GetLayerListParams,LoginResultModel, GetUserInfoModel } from './model/layerModel';
import { AddLayerParams,GetLayerListParams,AddGeomParams,GetGeomParams,LoginResultModel, GetUserInfoModel } from './model/layerModel';
import { ErrorMessageMode } from '#/axios';
@ -11,6 +11,8 @@ enum Api {
GetLayerInfo = "/api/ShpLayerSource/Get",
UpdateLyaer = "/api/ShpLayerSource/UpdateLayer",
GetLayerList = "/api/ShpLayerSource/LoadPage",
AddGeom = "/api/ShpLayerSource/SaveShapeData",
GetGeom = "/api/ShpLayerSource/GetShapeData",
GetPermCode = '/getPermCode',
TestRetry = '/testRetry',
Login = '/api/Check/Login',
@ -68,8 +70,8 @@ export function getLayerInfo(params){
export function updateLayer(params: AddLayerParams) {
return defHttp.post(
{
url: Api.UpdateLyaer,
params,
url: Api.UpdateLyaer,
params,
}
);
}
@ -81,4 +83,22 @@ export function getLayerList(params:GetLayerListParams) {
params:params
},
);
}
export function addGeom(params:AddGeomParams) {
return defHttp.post(
{
url: Api.AddGeom,
params,
}
)
}
export function getGeom(params:GetGeomParams) {
return defHttp.get(
{
url: Api.GetGeom,
params,
}
)
}

View File

@ -17,6 +17,22 @@ export interface GetLayerListParams {
limit:number;
key:string;
}
export interface AddGeomParams {
tableName:string;
guidFieldName:string;
geometryFieldName:string;
data:Array<string>
}
export interface GetGeomParams {
TableName:string;
FieldName:string;
FieldValue:Array<string>,
page:number,
limit:number,
key:string
}
export interface RoleInfo {
roleName: string;

View File

@ -256,13 +256,14 @@
</a-tab-pane>
</a-tabs>
</div>
</a-modal>
</template>
<script setup lang="ts">
import { defineEmits, defineProps, ref, h, reactive, onUnmounted, toRaw } from 'vue';
import DataObject from '@/views/demo/onlineform/formdesign/form/DataObject.vue'
import {
CloseCircleOutlined,
PlusOutlined,
@ -274,6 +275,7 @@
import { message } from 'ant-design-vue';
import type { UploadChangeParam } from 'ant-design-vue';
import type { UploadProps } from 'ant-design-vue';
import { useModal } from '@/components/Modal';
// import { uploadShp } from '@/api/sys/analysis.ts'
import axios from 'axios';
import { v4 as uuidv4 } from 'uuid';
@ -288,7 +290,8 @@
"tablename":"monitor0527"
},
])
const columns = reactive([
{
title: '数据表名称',
@ -301,6 +304,8 @@
}
])
const activeKey = ref(1)
const current = ref(0);
const fileList = ref<UploadProps['fileList']>([]);
@ -345,6 +350,9 @@ const beforeUpload:UploadProps['beforeUpload'] = (file) => {
return false;
};
function handleBackRows(ModuleId) {
}
const handlerUploadFile = ()=>{
let url = "http://192.168.10.102:9500/api/Files/Upload"
@ -360,7 +368,7 @@ const handlerUploadFile = ()=>{
axios.post(url,formData,{headers: {'Content-Type': 'multipart/form-data;charset=UTF-8','X-Token':"95a1a7a8"}}).then(res => {
alert(res.data.result[0].filePath);
handlerCreateLayer(res.data.result[0].filePath)
})
}

View File

@ -182,6 +182,7 @@
window.handlerCopyFeature = handlerCopyFeature;
//
map.addControl(new MeasureControl({
horizontal : true, //default false
btnBgColor : '#ffffff', //default '#ffffff'
@ -191,14 +192,13 @@
onStart:()=>{},
onStop:()=>{},
measurePointOptions:{
},
measureLineStringOptions:{
},
measurePolygonOptions:{
}
}),"top-left")
});
});
//
@ -236,7 +236,8 @@
//
geojson.geojson.features.push(feature);
}
// handlerDrawComplete();
//
handlerDrawComplete();
};
//
@ -539,26 +540,55 @@
};
const handlerCancleDraw = () => {
map.removeControl(drawTool);
drawTool = null;
drawing.value = false;
// drawTool.set(geojson.geojson)
//
if(map.getSource("detailsSource")){
map.getSource("detailsSource").setData({
type: 'FeatureCollection',
features: [],
})
}
};
const handlerDraw = (features = null, bool = false) => {
/**
*
* 查看图斑
*
* 添加图斑
*
* 编辑图斑
*
* status 操作类型
*
* features 空间数据
*
* [
* {id:"8448048304dofhaofh0af0q4",geom:""}
* ]
* */
const handlerDraw = (status:string,features = null, bool = false) => {
let geo = {
type: 'FeatureCollection',
features: [],
};
//
if(map.getSource("detailsSource")){
map.getSource("detailsSource").setData({
type: 'FeatureCollection',
features: [],
})
}
if (features == null) {
bool = true;
} else {
if (features.length > 0) {
for (let i = 0; i < features.length; i++) {
try {
console.log("featuresssss",features[i]?.mapgeom);
let featureTemp = WktToGeojson(features[i]?.mapgeom);
let feature = {
id: generateUUID(),
@ -568,22 +598,80 @@
};
geo.features.push(feature);
//
//
if(i == 0){
let lngLat = getGeometryCenter(feature);
handlerLocation(lngLat);
}
} catch (e) {
console.log('WKT解析错误请检查WKT数据格式是否有误');
createMessage.error("WKT数据格式解析错误请检查WKT数据格式是否有误");
}
}
}
}
handlerInitDrawTool(geo, bool);
switch(status){
case "Add":
handlerInitDrawTool(geo, bool);
break;
case "Edit":
handlerInitDrawTool(geo, bool);
break;
case "Details":
handlerDetails(geo);
break;
default:
createMessage.error("请传入操作类型!");
}
};
//
const handlerDetails = (geojson) => {
if(map.getSource("detailsSource")){
map.getSource("detailsSource").setData(geojson);
}else{
map.addSource("detailsSource",{
type:"geojson",
data:geojson
})
map.addLayer(
{
"id": "detailsLayer",
"type": "fill",
"source": "detailsSource",
'layout':{
},
'paint': {
//
'fill-color': '#3badc9',
//
"fill-opacity": 0.4,
}
}
)
map.addLayer(
{
"id": "detailsLayerLine",
"type": "line",
"source": "detailsSource",
'layout':{
},
'paint': {
'line-color': '#3badc9',
'line-width': 2
}
}
)
}
}
//
defineExpose({
handlerDraw,
handlerLocation,

View File

@ -44,6 +44,7 @@
import { FormSchema } from '@/components/Table';
import { create, saveDraft } from '@/api/sys/WFProcess';
import { saveFormsData } from '@/api/formrender/index';
import { addGeom } from '@/api/sys/layerManagement';
import { useMessage } from '@/hooks/web/useMessage';
import { useUserStore } from '@/store/modules/user';
import FormItem from './FormItem/index.vue';
@ -55,6 +56,7 @@
'showFormModalData',
'mapgemoList',
'formData',
"geometryForm",
'MapboxComponent',
'mapSetData',
'haveMap',
@ -228,9 +230,17 @@
}
});
//
async function ModalSureClick() {
// id
// addGeom(props.geometryForm).then(res=>{
// console.log("addGeom",res)
// })
try {
const values = await validate();
let query = values;
@ -272,6 +282,7 @@
});
}
params.data = JSON.stringify(query);
const data = await saveFormsData(params);
if (data) {
emits('success');
@ -322,6 +333,18 @@
const delListItem = (column, record) => {
subTableList.value = subTableList.value.filter((item) => item.key != record.key);
};
// geom
const handlerSaveGeom = (geomForm) => {
try{
addGeom(geomForm).then(res=>{
console.log("geom-res",res);
})
}catch{
}
}
</script>
<style lang="scss" scoped>

View File

@ -29,11 +29,13 @@
</div>
</template>
</BasicTable>
<ShowFormModal
v-if="openShowFormModal"
:showFormModalData="showFormModalData"
:mapgemoList="mapgemoList"
:formData="formData"
:geometryForm="geometryForm"
:MapboxComponent="MapboxComponent"
:mapSetData="mapSetData"
:haveMap="haveMap"
@ -88,6 +90,7 @@
getFormData,
} from '@/api/formrender/index';
import { getOutKeyList } from '@/api/formdesign/index';
import { getGeom } from '@/api/sys/layerManagement'
import { PageWrapper } from '@/components/Page';
import { cloneDeep } from 'lodash-es';
import { IFormConfig } from '../../form-design/typings/v-form-component';
@ -141,6 +144,7 @@
const infoUseMainTableData = ref({});
//
const layers = reactive();
const geometryForm = ref({})
//
const location = reactive([118.556717, 35.80391]);
@ -432,7 +436,7 @@
showFormModalData.value = toProps;
openShowFormModal.value = true;
mapgemoList.value = [];
mapSetData.value.isAllowAddPolygon && MapboxComponent.value.handlerDraw();
mapSetData.value.isAllowAddPolygon && MapboxComponent.value.handlerDraw(status);
} else {
openModal(true, toProps);
}
@ -447,7 +451,6 @@
if (rows.length == 0) {
return createMessage.warn('请选择一条数据进行编辑');
}
console.log('rowsrows', rows);
btnList.value.forEach((element) => {
if (element.prop === 'Edit' && element.isWFlow) {
@ -473,12 +476,7 @@
if (haveMap.value) {
showFormModalData.value = toProps;
openShowFormModal.value = true;
console.log('mapgemoList', mapgemoList);
console.log('mapSetData', mapSetData);
MapboxComponent.value.handlerDraw(
mapgemoList.value,
mapSetData.value.isAllowEditPolygon,
);
MapboxComponent.value.handlerDraw(status,mapgemoList.value,mapSetData.value?.isAllowEditPolygon,);
} else {
openModal(true, toProps);
}
@ -529,7 +527,22 @@
if (haveMap.value) {
showFormModalData.value = toProps;
openShowFormModal.value = true;
MapboxComponent.value.handlerDraw(mapgemoList.value, false);
// ids
let getGeomPrams = {
TableName:"",
FieldName:"",
FieldValue:[],
}
// getGeom(getGeomPrams).then(res=>{
// if(res.code == 200){
// }
// })
MapboxComponent.value.handlerDraw(status,mapgemoList.value, false);
} else {
openModal(true, toProps);
}
@ -554,6 +567,7 @@
let params = {
code: paramsCode,
};
getFormsDesignData(params).then((res: Recordable) => {
let columnObj = JSON.parse(res.entity.scheme);
let formObj = JSON.parse(res.formScheme.scheme);
@ -602,8 +616,17 @@
width: 50,
layerFields: {},
};
// geom
geometryForm.value = {
tablename:"drone_shp_data",
guidFieldName:"relid",
geometryFieldName:"geom",
data:[],
}
console.log("geometryForm",geometryForm);
}
console.log('columnObj', columnObj);
paramsId.value = res.formScheme.id;
btnList.value = columnObj.table.btns;
if (columnObj.table.columns) {
@ -707,7 +730,6 @@
};
getFormData(params)
.then((res) => {
console.log('res111', res);
let childTableName = designData.value.db.find((item) => item.type === 'chlid').name;
let mainTableName = designData.value.db.find((item) => item.type === 'main').name;
let subTableData = res[childTableName].map((item) => {
@ -730,7 +752,10 @@
res[mainTableName].forEach((item) => {
infoUseMainTableData.value = { ...infoUseMainTableData.value, ...item };
});
mapgemoList.value = formData.value;
console.log("formData333",formData);
})
.catch((err) => {
console.log('err', err);
@ -746,6 +771,12 @@
}
});
mapgemoList.value = [...geom];
// geom
mapgemoList.value?.forEach((item,index)=>{
geometryForm.value?.data.push(item.value);
})
};
const mapOnLoad = (map) => {
// const test_url =
@ -767,6 +798,33 @@
const setSelectedSubTableDataId = (value) => {
selectedSubTableDataId.value = value;
};
//
const handlerDealGeomtry = (status:string,features=null,) => {
// Add
if(status == "Add"){
let geoms:string[] = [];
mapgemoList.value?.forEach((item,index)=>{
console.log("mapgeoms",item);
})
let addForm = {
"tableName": "drone_shp_data",
"guidFieldName": "id",
"geometryFieldName": "geom",
"data": []
}
}
// Edit
if(status == "Edit"){
}
// Delete
if(status == "Delete"){
}
}
</script>
<style lang="less">
.full-modal {

View File

@ -81,8 +81,13 @@
<a-card title="底图设置" class="card-item" >
<a-table :default-selected-row-keys="[1,2]" :row-selection="baseLayerSelection" :dataSource="baseLayers" :columns="columns" :pagination="false" />
<!-- <a-checkbox v-for="(item,index) in baseLayers" :key="index" @change="handlerBaseLayerChange(item)" v-model:checked="item.show" >{{item.name}}</a-checkbox> -->
<a-table :row-selection="rowSelection" :dataSource="baseLayers" :columns="baselayercolumns" :pagination="false" >
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'checked'">
<a-switch v-model:checked="record.checked" checked-children="" un-checked-children="" />
</template>
</template>
</a-table>
</a-card>
<a-card title="图层设置" class="card-item" >
@ -150,8 +155,6 @@
<Switch v-model:checked="mapConfig.isEnablePostionJump" />
</FormItem>
</a-card>
</Form>
</div>
@ -170,7 +173,7 @@
</PageWrapper>
</template>
<script lang="ts" setup>
import { ref, inject, watch, onMounted,reactive } from 'vue';
import { ref, inject, watch, onMounted,reactive,computed,unref } from 'vue';
import { Form, FormItem, Switch,TableProps } from 'ant-design-vue';
import { PageWrapper } from '@/components/Page';
import { ShpLayerSourceLoadPage, GetTableAndViewColumnList } from '@/api/demo/formScheme';
@ -189,6 +192,13 @@
// minZoom:3,
// maxZoom:18
// },
interface BaseLayerDataType {
key: string | number;
name: string;
checked:boolean;
layer:Object;
}
// baseLayers:[
// {
// name: '',
@ -233,7 +243,6 @@
{
key:1,
name: '天地图注记图层',
show:false,
checked:false,
layer:{
id: "tiandituzhuji",
@ -252,7 +261,6 @@
},{
key:2,
name: '高清影像图层',
show:false,
checked:false,
layer:{
id: "gaoqingyingxiang",
@ -271,20 +279,8 @@
}
}
])
const selectedBaseLayers = ref([1, 2]); //
const baseLayerSelection: TableProps['rowSelection'] = {
selectedBaseLayers,
onChange: (selectedRowKeys: string[], selectedRows:[]) => {
console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
mapConfig.value.baseLayers = selectedRows;
console.log("baseLayers",mapConfig.value.baseLayers);
},
getCheckboxProps: (record) => ({
disabled: record.name === 'Disabled User', // Column configuration not to be checked
name: record.name,
}),
};
const columns = reactive([
{
@ -304,17 +300,58 @@
},
])
const baselayercolumns = reactive([
{
title: '图层名称',
dataIndex: 'name',
key: 'name',
},
{
title: '默认',
dataIndex: 'checked',
key: 'checked',
}
])
// config
const config: any = inject('formConfig');
const mapConfig = ref(config.table.maps);
console.log("mapConfig2",mapConfig.value);
watch(
() => config.table.maps,
() => {
mapConfig.value = config.table.maps;
//
mapConfig.value?.baseLayers?.forEach((item,index)=>{
selectedRowKeys.value.push(item.key)
})
},
);
const selectedBaseLyaers:BaseLayerDataType[] = [];
const selectedRowKeys = ref<BaseLayerDataType['key'][]>([]);
mapConfig.value?.baseLayers?.forEach((item,index)=>{
selectedBaseLyaers.push(item);
selectedRowKeys.value.push(item.key)
})
const onSelectChange = (changableRowKeys:number[],changeRows:BaseLayerDataType[]) => {
selectedRowKeys.value = changableRowKeys;
mapConfig.value.baseLayers = changeRows;
};
const rowSelection = computed(() => {
return {
selectedRowKeys: unref(selectedRowKeys),
onChange: onSelectChange,
hideDefaultSelections: false,
};
});
const openModal = ref(false);
const insertShpModal = ref(true);