Merge branch 'main' of http://123.132.248.154:10000/HC_YFZX/CaiYuanYiTiHua
commit
f320438374
|
|
@ -27,6 +27,8 @@ enum Api {
|
|||
LoadDroneCaseInfoTaskByUser = '/api/DroneCaseInfoTask/LoadDroneCaseInfoTaskByUser',
|
||||
// 判读-预览最后一次数据
|
||||
LoadCaseImportInfoLast = '/api/DroneCaseInfoTask/LoadCaseImportInfoLast',
|
||||
// 判读-导出shp文件
|
||||
ExportapprovalCaseInfoShapefile = 'ExportapprovalCaseInfoShapefile'
|
||||
}
|
||||
|
||||
const typeObj = {
|
||||
|
|
@ -34,8 +36,8 @@ const typeObj = {
|
|||
'非法采矿': '/api/DroneCaseInfoMinerals/',
|
||||
'卫片下发': '/api/DroneCaseInfoSatellite/',
|
||||
'耕地非粮化': '/api/DroneCaseInfoFLH/',
|
||||
'重点问题I类': '/api/DroneCaseInfoZdwt1/',
|
||||
'重点问题II类': '/api/DroneCaseInfoZdwt2/',
|
||||
'重点问题Ⅰ类': '/api/DroneCaseInfoZdwt1/',
|
||||
'重点问题Ⅱ类': '/api/DroneCaseInfoZdwt2/',
|
||||
'巡察审计': '/api/DroneCaseInfoXcsj/',
|
||||
'生态保护红线监管': '/api/DroneCaseInfoSTHX/',
|
||||
'生态修复': '/api/DroneCaseInfoSTXF/',
|
||||
|
|
@ -45,8 +47,8 @@ const infoShpData = {
|
|||
'非法采矿': 'UpdateCaseInfoShpDataMinerals',
|
||||
'卫片下发': 'UpdateCaseInfoShpDataWPXF',
|
||||
'耕地非粮化': '',
|
||||
'重点问题I类': 'UpdateCaseInfoShpDataZDWT1',
|
||||
'重点问题II类': 'UpdateCaseInfoShpDataZDWT2',
|
||||
'重点问题Ⅰ类': 'UpdateCaseInfoShpDataZDWT1',
|
||||
'重点问题Ⅱ类': 'UpdateCaseInfoShpDataZDWT2',
|
||||
'巡察审计': '',
|
||||
}
|
||||
const closeCaseApi = {
|
||||
|
|
@ -54,8 +56,8 @@ const closeCaseApi = {
|
|||
'非法采矿': 'CloseMineralCaseInfo',
|
||||
'卫片下发': 'CloseCaseInfoSatellite',
|
||||
'耕地非粮化': 'CloseCaseInfoFLH',
|
||||
'重点问题I类': 'CloseCaseInfoZdwt1',
|
||||
'重点问题II类': 'CloseCaseInfoZdwt2',
|
||||
'重点问题Ⅰ类': 'CloseCaseInfoZdwt1',
|
||||
'重点问题Ⅱ类': 'CloseCaseInfoZdwt2',
|
||||
'巡察审计': 'CloseCaseInfoXCSJ',
|
||||
'生态保护红线监管': 'CloseSTHXCaseInfo',
|
||||
'生态修复': 'CloseSTXFCaseInfo',
|
||||
|
|
@ -135,4 +137,15 @@ export function LoadCaseImportInfoLast(params: { subjectname: string, page?: num
|
|||
url: Api.LoadCaseImportInfoLast,
|
||||
params
|
||||
})
|
||||
}
|
||||
export function ExportapprovalCaseInfoShapefile(type, params?){
|
||||
let url = typeObj[type] + Api.ExportapprovalCaseInfoShapefile
|
||||
if(params){
|
||||
url = url + `?nowStatus=${params.nowStatus}`
|
||||
}
|
||||
return defHttp.post({
|
||||
url,
|
||||
params,
|
||||
responseType: 'blob',
|
||||
})
|
||||
}
|
||||
|
|
@ -3,19 +3,19 @@ enum Api {
|
|||
// 非粮化 接收办理 和图斑调整
|
||||
LoadCaiKuangTaskList = '/api/DroneCaseInfoFLH/LoadFLHTaskList',
|
||||
// 添加收藏
|
||||
AddCaiKuangTaskFavorite = '/api/DroneCaseInfoFLH/LoadFLHTaskList',
|
||||
AddCaiKuangTaskFavorite = '/api/DroneCaseInfoFLH/AddFLHTaskFavorite',
|
||||
// 取消收藏
|
||||
DeleteCaiKuangTaskCase = '/api/DroneCaseInfoFLH/DeleteFLHTaskCase',
|
||||
// 非粮化 图斑列表
|
||||
LoadCaseInfoWpxfTuBanList = '/api/DroneCaseInfoFLH/LoadCaseInfoTuBanList',
|
||||
LoadCaseInfoWpxfTuBanList = '/api/DroneCaseInfoFLH/LoadCaseInfoTuBanListV1',
|
||||
// 非粮化 填报审核第一层
|
||||
LoadReportCaseCount = '/api/DroneCaseInfoFLH/LoadTaskCount',
|
||||
LoadReportCaseCount = '/api/DroneCaseInfoFLH/LoadTaskCountV1',
|
||||
// 非粮化 填报审核第二层
|
||||
LoadTaskDetailList = '/api/DroneCaseInfoFLH/LoadTaskDetailList',
|
||||
LoadTaskDetailList = '/api/DroneCaseInfoFLH/LoadTaskDetailListV1',
|
||||
// 非粮化 整改审核第一层
|
||||
LoadReformCaseCount = '/api/DroneCaseInfoFLH/LoadTaskCount',
|
||||
LoadReformCaseCount = '/api/DroneCaseInfoFLH/LoadTaskCountV1',
|
||||
// 非粮化 整改审核第二层
|
||||
LoadTaskIllegalDetailList = '/api/DroneCaseInfoFLH/LoadTaskIllegalDetailList',
|
||||
LoadTaskIllegalDetailList = '/api/DroneCaseInfoFLH/LoadTaskIllegalDetailListV1',
|
||||
// 图斑详情
|
||||
GetCaseInfoById = '/api/DroneCaseInfoFLH/GetCaseInfoById',
|
||||
// 非粮化 图斑调整 更新图斑行政区划
|
||||
|
|
|
|||
|
|
@ -440,9 +440,9 @@ export function LoadCaseInfoById(params: { id: string }) {
|
|||
params,
|
||||
});
|
||||
}
|
||||
export function UpdateCaseInfo(data) {
|
||||
export function UpdateCaseInfo(data,shppath='') {
|
||||
return defHttp.post({
|
||||
url: Api.UpdateCaseInfo,
|
||||
url: `${Api.UpdateCaseInfo}?shppath=${shppath}`,
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,6 +59,8 @@ enum Api {
|
|||
MainCloseCaseInfo = '/api/DroneCaseInfoMinerals/CloseMineralCaseInfo',
|
||||
// 判读-导入数据
|
||||
MainUpdateCaseInfoShpData = '/api/DroneCaseInfoTask/ImportMineralShpData',
|
||||
// 判读-导出SHP
|
||||
MainExportapprovalCaseInfoShapefile = '/api/DroneCaseInfoMinerals/ExportApprovalCaseInfoShapefile'
|
||||
}
|
||||
|
||||
export function LoadCaiKuangTaskList(params) {
|
||||
|
|
@ -161,4 +163,15 @@ export function MainUpdateCaseInfoShpData(params: {zipFilePath: string, srid: st
|
|||
url: `${Api.MainUpdateCaseInfoShpData}?zipFilePath=${params.zipFilePath}&srid=${params.srid}&subjectname=${params.subjectname}`,
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
}
|
||||
export function MainExportapprovalCaseInfoShapefile(params?){
|
||||
let url: string = Api.MainExportapprovalCaseInfoShapefile
|
||||
if(params){
|
||||
url = url + `?nowStatus=${params.nowStatus}`
|
||||
}
|
||||
return defHttp.post({
|
||||
url,
|
||||
params,
|
||||
responseType: 'blob',
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,6 +64,100 @@
|
|||
}
|
||||
|
||||
const initMap = () => {
|
||||
let mapDataSources: any =
|
||||
networkType.value == 'LAN'
|
||||
? {
|
||||
'raster-tiles': {
|
||||
type: 'raster',
|
||||
tiles: [
|
||||
`http://t0.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=${MapboxConfig.TDT_TOKEN}`,
|
||||
],
|
||||
tileSize: 256,
|
||||
minzoom: 1,
|
||||
maxzoom: 17,
|
||||
},
|
||||
'raster-tiles-font': {
|
||||
type: 'raster',
|
||||
tiles: [
|
||||
`https://t0.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=${MapboxConfig.TDT_TOKEN}`,
|
||||
],
|
||||
tileSize: 256,
|
||||
},
|
||||
yaogan: {
|
||||
type: 'raster',
|
||||
tiles: [VITE_GLOB_YAOGANYINGXIANG_SERVER],
|
||||
tileSize: 256,
|
||||
minzoom: 16,
|
||||
maxzoom: 24,
|
||||
},
|
||||
yingxiang: {
|
||||
type: 'raster',
|
||||
tiles: [VITE_GLOB_YINGXIANG_SERVER],
|
||||
tileSize: 256,
|
||||
minzoom: 16,
|
||||
maxzoom: 24,
|
||||
},
|
||||
}
|
||||
: {
|
||||
'raster-tiles': {
|
||||
type: 'raster',
|
||||
tiles: [
|
||||
`http://t0.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=${MapboxConfig.TDT_TOKEN}`,
|
||||
],
|
||||
tileSize: 256,
|
||||
minzoom: 1,
|
||||
maxzoom: 17,
|
||||
},
|
||||
'raster-tiles-font': {
|
||||
type: 'raster',
|
||||
tiles: [
|
||||
`https://t0.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=${MapboxConfig.TDT_TOKEN}`,
|
||||
],
|
||||
tileSize: 256,
|
||||
},
|
||||
};
|
||||
|
||||
let mapDataLayers: any =
|
||||
networkType.value == 'LAN'
|
||||
? [
|
||||
{
|
||||
id: 'tdt-vec-tiles',
|
||||
type: 'raster',
|
||||
source: 'raster-tiles-font',
|
||||
},
|
||||
{
|
||||
id: 'tdt-img-tiles',
|
||||
type: 'raster',
|
||||
source: 'raster-tiles',
|
||||
},
|
||||
{
|
||||
id: 'yaogan',
|
||||
type: 'raster',
|
||||
source: 'yaogan',
|
||||
minzoom: 9,
|
||||
maxzoom: 15,
|
||||
},
|
||||
{
|
||||
id: 'yingxiang',
|
||||
type: 'raster',
|
||||
source: 'yingxiang',
|
||||
minzoom: 13,
|
||||
maxzoom: 24,
|
||||
},
|
||||
]
|
||||
: [
|
||||
{
|
||||
id: 'tdt-vec-tiles',
|
||||
type: 'raster',
|
||||
source: 'raster-tiles-font',
|
||||
},
|
||||
{
|
||||
id: 'tdt-img-tiles',
|
||||
type: 'raster',
|
||||
source: 'raster-tiles',
|
||||
},
|
||||
];
|
||||
|
||||
return new mapboxgl.Map({
|
||||
container: mapId,
|
||||
language: 'zh-cmn',
|
||||
|
|
@ -71,72 +165,8 @@
|
|||
style: {
|
||||
glyphs: 'mapbox://fonts/mapbox/{fontstack}/{range}.pbf',
|
||||
version: 8,
|
||||
sources: {
|
||||
'raster-tiles': {
|
||||
type: 'raster',
|
||||
tiles: [
|
||||
`http://t0.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=${MapboxConfig.TDT_TOKEN}`,
|
||||
],
|
||||
tileSize: 256,
|
||||
minzoom: 1,
|
||||
maxzoom: 17,
|
||||
},
|
||||
'raster-tiles-font': {
|
||||
type: 'raster',
|
||||
tiles: [
|
||||
`https://t0.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=${MapboxConfig.TDT_TOKEN}`,
|
||||
],
|
||||
tileSize: 256,
|
||||
},
|
||||
yaogan: {
|
||||
type: 'raster',
|
||||
tiles: [VITE_GLOB_YAOGANYINGXIANG_SERVER],
|
||||
tileSize: 256,
|
||||
minzoom: 16,
|
||||
maxzoom: 24,
|
||||
},
|
||||
yingxiang: {
|
||||
type: 'raster',
|
||||
tiles: [VITE_GLOB_YINGXIANG_SERVER],
|
||||
tileSize: 256,
|
||||
minzoom: 16,
|
||||
maxzoom: 24,
|
||||
},
|
||||
},
|
||||
layers: [
|
||||
{
|
||||
id: 'tdt-vec-tiles',
|
||||
type: 'raster',
|
||||
source: 'raster-tiles-font',
|
||||
maxZoom: 32,
|
||||
},
|
||||
{
|
||||
id: 'tdt-img-tiles',
|
||||
type: 'raster',
|
||||
source: 'raster-tiles',
|
||||
maxZoom: 32,
|
||||
},
|
||||
{
|
||||
id: 'yaogan',
|
||||
type: 'raster',
|
||||
source: 'yaogan',
|
||||
layout: {
|
||||
visibility: networkType.value == 'LAN' ? 'visible' : 'none',
|
||||
},
|
||||
minzoom: 9,
|
||||
maxzoom: 15,
|
||||
},
|
||||
{
|
||||
id: 'yingxiang',
|
||||
type: 'raster',
|
||||
source: 'yingxiang',
|
||||
layout: {
|
||||
visibility: networkType.value == 'LAN' ? 'visible' : 'none',
|
||||
},
|
||||
minzoom: 13,
|
||||
maxzoom: 24,
|
||||
},
|
||||
],
|
||||
sources: mapDataSources,
|
||||
layers: mapDataLayers,
|
||||
},
|
||||
maxZoom: 22,
|
||||
minZoom: 8,
|
||||
|
|
|
|||
|
|
@ -353,11 +353,8 @@
|
|||
// 添加新的源和图层
|
||||
map.addSource('radar', {
|
||||
type: 'image',
|
||||
url: url,
|
||||
url: dataURL,
|
||||
coordinates: fourpoint,
|
||||
paint: {
|
||||
'raster-opacity': 1,
|
||||
},
|
||||
});
|
||||
map.addLayer({
|
||||
id: 'radar-layer',
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ import { IconPicker } from '@/components/Icon';
|
|||
import { CountdownInput } from '@/components/CountDown';
|
||||
import { BasicTitle } from '@/components/Basic';
|
||||
import { CropperAvatar } from '@/components/Cropper';
|
||||
import CustomSelect from './components/CustomSelect.vue';
|
||||
|
||||
const componentMap = new Map<ComponentType | string, Component>();
|
||||
|
||||
|
|
@ -49,7 +50,7 @@ componentMap.set('ImageUpload', ImageUpload);
|
|||
componentMap.set("VideoUpload",VideoUpload);
|
||||
componentMap.set("FileUpload",FileUpload);
|
||||
componentMap.set("Location",Location);
|
||||
componentMap.set('Select', Select);
|
||||
componentMap.set('Select', CustomSelect);
|
||||
componentMap.set('ApiSelect', ApiSelect);
|
||||
componentMap.set('ApiTree', ApiTree);
|
||||
componentMap.set('TreeSelect', TreeSelect);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,50 @@
|
|||
<script setup>
|
||||
import { Select } from 'ant-design-vue'
|
||||
import { computed } from 'vue'
|
||||
|
||||
const props = defineProps({
|
||||
value: [String, Array],
|
||||
mode: String,
|
||||
separator: {
|
||||
type: String,
|
||||
default: ','
|
||||
}
|
||||
})
|
||||
|
||||
const emit = defineEmits(['update:value', 'change'])
|
||||
|
||||
// 处理值的双向转换
|
||||
const internalValue = computed({
|
||||
get() {
|
||||
if (['multiple', 'tags'].includes(props.mode)) {
|
||||
if (typeof props.value === 'string') {
|
||||
return props.value ? props.value.split(props.separator) : []
|
||||
}
|
||||
return props.value || []
|
||||
}
|
||||
return props.value
|
||||
},
|
||||
set(newVal) {
|
||||
if (['multiple', 'tags'].includes(props.mode)) {
|
||||
const strValue = Array.isArray(newVal)
|
||||
? newVal.join(props.separator)
|
||||
: ''
|
||||
emit('update:value', strValue)
|
||||
emit('change', strValue)
|
||||
} else {
|
||||
emit('update:value', newVal)
|
||||
emit('change', newVal)
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<Select
|
||||
v-model:value="internalValue"
|
||||
:mode="mode"
|
||||
v-bind="$attrs"
|
||||
>
|
||||
<slot></slot>
|
||||
</Select>
|
||||
</template>
|
||||
|
|
@ -28,6 +28,7 @@
|
|||
:formData="props.formData"
|
||||
v-if="childItem"
|
||||
:callModal="props.callModal"
|
||||
@changeRadioVal="radioVal"
|
||||
/>
|
||||
</template>
|
||||
</template>
|
||||
|
|
@ -77,10 +78,6 @@
|
|||
if (props.callModal) {
|
||||
tableData.ifShow = true;
|
||||
}
|
||||
watch(() => childItem.value,(newValue) => {
|
||||
console.log('卡片组中的嵌套卡片组Item数据进行变化', newValue)
|
||||
},{immediate:true, deep:true})
|
||||
|
||||
const [
|
||||
registerForm,
|
||||
{ getFieldsValue, setFieldsValue, updateSchema, resetFields, validate, clearValidate },
|
||||
|
|
@ -189,7 +186,6 @@ watch(() => childItem.value,(newValue) => {
|
|||
...childElement,
|
||||
show: index == 0 ? true : false,
|
||||
index: element.value,
|
||||
requiredString: childElement.itemProps.required,
|
||||
});
|
||||
if (childElement.component == 'CardGroup') {
|
||||
childGourp.value.push({
|
||||
|
|
@ -292,6 +288,13 @@ watch(() => childItem.value,(newValue) => {
|
|||
});
|
||||
return data;
|
||||
}
|
||||
function radioVal() {
|
||||
clearValidate();
|
||||
//切换卡片组选项时,卡片组的值赋值给form,优化卡片组必填验证不通过
|
||||
setFieldsValue({
|
||||
...subTableDataStore.getGroupData,
|
||||
});
|
||||
}
|
||||
defineExpose({
|
||||
verify,
|
||||
changeForm,
|
||||
|
|
|
|||
|
|
@ -91,11 +91,6 @@
|
|||
const { proxy } = getCurrentInstance();
|
||||
const emit = defineEmits(['getFormSuccess']);
|
||||
const subTableDataStore = subTableStore();
|
||||
const tabsFormRef0 = ref();
|
||||
const tabsFormRef1 = ref();
|
||||
const tabsFormRef2 = ref();
|
||||
const tabsFormRef3 = ref();
|
||||
const tabsFormRef4 = ref();
|
||||
const formRef = ref();
|
||||
const activeTabsKey = ref();
|
||||
let formColumns: FormSchema[] = [];
|
||||
|
|
@ -269,10 +264,26 @@
|
|||
// 卡片组布局
|
||||
if (element.component === 'CardGroup') {
|
||||
element.slot = 'CardGroup';
|
||||
if (cardGroupData.value.length !== index) {
|
||||
// if (cardGroupData.value.length !== index) {
|
||||
// cardGroupData.value.push(null);
|
||||
// }
|
||||
while(cardGroupData.value.length !== index){
|
||||
cardGroupData.value.push(null);
|
||||
}
|
||||
cardGroupData.value.push(element);
|
||||
let copyElement = {...element}
|
||||
copyElement.componentProps.options.forEach(option => {
|
||||
option.children.forEach(item => {
|
||||
item['requiredString'] = item.itemProps.required? true: false
|
||||
if(item.component == "CardGroup"){
|
||||
item.componentProps.options.forEach(deepOption => {
|
||||
deepOption.children.forEach(deepItem => {
|
||||
deepItem['requiredString'] = deepItem.itemProps.required? true: false
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
cardGroupData.value.push(copyElement);
|
||||
// cardGroupData.value.push({
|
||||
// ...element,
|
||||
// });
|
||||
|
|
@ -320,6 +331,7 @@
|
|||
}
|
||||
}, 10);
|
||||
}
|
||||
console.log(111111111111,cardGroupData.value)
|
||||
}
|
||||
function tabsChange(e) {
|
||||
tabsKey.value = e;
|
||||
|
|
|
|||
|
|
@ -228,5 +228,5 @@ export const isChuliOptions = [
|
|||
export const keyIssusesIPatchSourceOptions = await asyncGetOptions('zd1tbly');
|
||||
export const keyIssusesIIPatchSourceOptions = await asyncGetOptions('zd2tbly');
|
||||
export const inspectionAuditPatchSourceOptions = await asyncGetOptions('xcsjtbly');
|
||||
export const degrainingPatchSourceOptions = await asyncGetOptions('gdflhtbly');
|
||||
export const degrainingPatchSourceOptions = await asyncGetOptions('gdflhbly');
|
||||
export const redLinePatchSourceOptions = await asyncGetOptions('redlinetbly');
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
<template>
|
||||
<PageWrapper dense contentFullHeight fixedHeight contentClass="flex">
|
||||
<BasicTable class="w-4/4 xl:w-5/5" @register="registerTable">
|
||||
<template #toolbar>
|
||||
<a-button type="primary" @click="downloadSHP" v-if="false">SHP导出</a-button>
|
||||
</template>
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if="column.key === 'action'">
|
||||
<TableAction
|
||||
|
|
@ -27,7 +30,7 @@ import { BasicTable, useTable, TableAction } from '@/components/Table';
|
|||
import { PageWrapper } from '@/components/Page';
|
||||
import InfoModal from '@/components/Audit/InfoModal/index.vue'
|
||||
import { columns, searchFormSchemaFunction } from '@/views/demo/audit/util';
|
||||
import { LoadCaseInfoLists, GetCaseInfo } from '@/api/audit/index';
|
||||
import { LoadCaseInfoLists, GetCaseInfo, ExportapprovalCaseInfoShapefile } from '@/api/audit/index';
|
||||
import { useRouter } from 'vue-router';
|
||||
|
||||
const router = useRouter()
|
||||
|
|
@ -82,4 +85,19 @@ const handleOk = () => {
|
|||
const closeModal = () => {
|
||||
openModal.value = false
|
||||
}
|
||||
const downloadSHP = () => {
|
||||
let params = {
|
||||
nowStatus: '已审核'
|
||||
}
|
||||
ExportapprovalCaseInfoShapefile(type,params).then(res => {
|
||||
const elink = document.createElement('a');
|
||||
elink.download = '已审核矢量数据' + new Date().getTime() + '.zip';
|
||||
elink.style.display = 'none';
|
||||
elink.href = URL.createObjectURL(res);
|
||||
document.body.appendChild(elink);
|
||||
elink.click();
|
||||
URL.revokeObjectURL(elink.href);
|
||||
document.body.removeChild(elink);
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
>
|
||||
<a-button type="primary">导入</a-button>
|
||||
</a-upload>
|
||||
<a-button type="primary" @click="downloadSHP" v-if="['违法用地','非法采矿'].includes(type)">SHP导出</a-button>
|
||||
</template>
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if="column.key === 'action'">
|
||||
|
|
@ -61,7 +62,15 @@ import { create, saveDraft, GetDraft } from '@/api/sys/WFProcess';
|
|||
import { message, Modal, Input } from 'ant-design-vue';
|
||||
import { SaveReSubmitInfo } from '@/api/demo/resubmit';
|
||||
import { uploadFile } from '@/api/formrender/index';
|
||||
import { LoadCaseInfoLists, GetCaseInfo, CloseCaseInfo, ImportCaseInfoShpData, UpdateCaseNoBySubject, LoadCaseImportInfoLast } from '@/api/audit/index';
|
||||
import {
|
||||
LoadCaseInfoLists,
|
||||
GetCaseInfo,
|
||||
CloseCaseInfo,
|
||||
ImportCaseInfoShpData,
|
||||
UpdateCaseNoBySubject,
|
||||
LoadCaseImportInfoLast,
|
||||
ExportapprovalCaseInfoShapefile,
|
||||
} from '@/api/audit/index';
|
||||
import { useRouter } from 'vue-router';
|
||||
|
||||
const router = useRouter()
|
||||
|
|
@ -259,6 +268,18 @@ const preview = () => {
|
|||
openImportModal.value = true
|
||||
})
|
||||
}
|
||||
const downloadSHP = () => {
|
||||
ExportapprovalCaseInfoShapefile(type).then(res => {
|
||||
const elink = document.createElement('a');
|
||||
elink.download = '待审核矢量数据' + new Date().getTime() + '.zip';
|
||||
elink.style.display = 'none';
|
||||
elink.href = URL.createObjectURL(res);
|
||||
document.body.appendChild(elink);
|
||||
elink.click();
|
||||
URL.revokeObjectURL(elink.href);
|
||||
document.body.removeChild(elink);
|
||||
})
|
||||
}
|
||||
|
||||
</script>
|
||||
<style lang="scss">
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ export const typenameKey = {
|
|||
'非法采矿': 'kctubanleixing',
|
||||
'卫片下发': 'kctubanleixing',
|
||||
'耕地非粮化': 'gdflhtblx',
|
||||
'重点问题I类': 'zd1tblx',
|
||||
'重点问题II类': 'zd2tblx',
|
||||
'重点问题Ⅰ类': 'zd1tblx',
|
||||
'重点问题Ⅱ类': 'zd2tblx',
|
||||
'巡察审计': 'xcsjtblx',
|
||||
'生态保护红线监管': 'stbhhxjgtblx',
|
||||
'生态修复': 'stxftblx',
|
||||
|
|
@ -20,8 +20,8 @@ export const SubjectKeyObj = {
|
|||
'非法采矿': 'Subject_FFCK', //非法采矿
|
||||
'卫片下发': 'Subject_WPCK', //非法采矿(卫片)
|
||||
'耕地非粮化': 'Subject_GDFLH', //耕地非粮化
|
||||
'重点问题I类': 'Subject_ZDWT1', //重点问题I类
|
||||
'重点问题II类': 'Subject_ZDWT2', //重点问题II类
|
||||
'重点问题Ⅰ类': 'Subject_ZDWT1', //重点问题Ⅰ类
|
||||
'重点问题Ⅱ类': 'Subject_ZDWT2', //重点问题Ⅱ类
|
||||
'生态保护红线监管': 'Subject_STHX', //生态保护红线监管
|
||||
'生态修复': 'Subject_STXF', //生态修复
|
||||
}
|
||||
|
|
@ -31,8 +31,8 @@ export const codeObj = {
|
|||
'非法采矿': '100001',
|
||||
'卫片下发': '0000003',
|
||||
'耕地非粮化': '0000004',
|
||||
'重点问题I类': '0000005',
|
||||
'重点问题II类': '0000006',
|
||||
'重点问题Ⅰ类': '0000005',
|
||||
'重点问题Ⅱ类': '0000006',
|
||||
'生态保护红线监管': '0000007',
|
||||
'生态修复': '0000008',
|
||||
}
|
||||
|
|
|
|||
|
|
@ -166,25 +166,22 @@
|
|||
<div class="info-data-label">下发</div>
|
||||
<div class="info-data-data">{{ item.totaltask }}</div>
|
||||
</div>
|
||||
<!-- <div style="width: 1px;margin-right:27px;margin-left:31px;background-color:#EDEDED;height: 15px;"></div> -->
|
||||
<div class="info-data-item">
|
||||
<div class="info-data-label">接收</div>
|
||||
<div class="info-data-data">{{ item.receivetask }}</div>
|
||||
</div>
|
||||
<div class="info-data-item">
|
||||
<!-- <div class="info-data-item">
|
||||
<div class="info-data-label">非农化</div>
|
||||
<div class="info-data-data">{{ item.nonfoodcase }}</div>
|
||||
</div>
|
||||
<!-- <div style="width: 1px;margin-right:15px;margin-left:30px;background-color:#EDEDED;height: 15px;"></div> -->
|
||||
<div class="info-data-item">
|
||||
<div class="info-data-label">举证合法</div>
|
||||
<div class="info-data-data">{{ item.legalcase }}</div>
|
||||
</div>
|
||||
<!-- <div style="width: 1px;margin-right:18px;margin-left:17px;background-color:#EDEDED;height: 15px;"></div> -->
|
||||
<div class="info-data-item">
|
||||
<div class="info-data-label">举证其他</div>
|
||||
<div class="info-data-data">{{ item.ilegalcase }}</div>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="no-data">
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
:options="props.batchOptions"
|
||||
/>
|
||||
</div>
|
||||
<div class="screen-item" style="margin-right:13px;">
|
||||
<!-- <div class="screen-item" style="margin-right:13px;">
|
||||
<div class="screen-item-label">举证</div>
|
||||
<a-select
|
||||
allowClear
|
||||
|
|
@ -36,10 +36,9 @@
|
|||
v-model:value="params.is_build_name"
|
||||
:options="markTypeOptions"
|
||||
/>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="screen-item" style="margin-right:10px;">
|
||||
<!-- <div class="screen-item-label">图斑号</div> -->
|
||||
<a-input style="width:270px;" allowClear v-model:value="params.geomid" class="item-input" placeholder="请输入图斑编号"/>
|
||||
<a-input style="width:455px;" allowClear v-model:value="params.geomid" class="item-input" placeholder="请输入图斑编号"/>
|
||||
</div>
|
||||
<div class="screen-item" style="display: flex; justify-content: end;margin-bottom: 0px;">
|
||||
<a-button type="primary" class="item-button" :icon="h(SearchOutlined)" @click="query">查询</a-button>
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@
|
|||
<a-tab-pane
|
||||
key="2"
|
||||
v-if="!['建设用地', '推堆土'].includes(props.showInfoData.typename)"
|
||||
tab="线索填报"
|
||||
tab="图斑填报"
|
||||
force-render
|
||||
>
|
||||
<a-descriptions
|
||||
|
|
@ -110,22 +110,16 @@
|
|||
'word-break': 'break-all',
|
||||
}"
|
||||
>
|
||||
<a-descriptions-item label="判定结果">{{
|
||||
getLabel('is_illegal', props.showInfoData.is_illegal)
|
||||
<a-descriptions-item label="发生时间">{{
|
||||
props.showInfoData.fashengshijian
|
||||
}}</a-descriptions-item>
|
||||
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="项目名称">{{
|
||||
props.showInfoData.xiangmumc
|
||||
<a-descriptions-item label="图斑类型">{{
|
||||
getLabel('tianbaoleixing', props.showInfoData.tianbaoleixing)
|
||||
}}</a-descriptions-item>
|
||||
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="项目主体">{{
|
||||
props.showInfoData.xiangmuzhuti
|
||||
<a-descriptions-item label="现场情况">{{
|
||||
props.showInfoData.pandingyijushuoming
|
||||
}}</a-descriptions-item>
|
||||
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="实际用途">{{
|
||||
props.showInfoData.actual_use_to
|
||||
}}</a-descriptions-item>
|
||||
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="违法类型">{{
|
||||
getLabel('weifaleixing', props.showInfoData.weifaleixing)
|
||||
}}</a-descriptions-item>
|
||||
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="附件">
|
||||
<a-descriptions-item label="附件">
|
||||
<a-image-preview-group :preview="{ getContainer }">
|
||||
<template v-for="(item, itemIndex) in fujianList" :key="itemIndex">
|
||||
<a-image
|
||||
|
|
@ -146,54 +140,6 @@
|
|||
</template>
|
||||
</a-image-preview-group>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item v-if="props.showInfoData.is_illegal == 0" label="附件">
|
||||
<a-image-preview-group :preview="{ getContainer }">
|
||||
<template v-for="(item, itemIndex) in hefafujianList" :key="itemIndex">
|
||||
<a-image
|
||||
v-if="showImage(item)"
|
||||
style="width: 100px; height: 100px"
|
||||
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
|
||||
:preview="{ getContainer }"
|
||||
></a-image>
|
||||
<div v-else>
|
||||
<Icon
|
||||
v-if="item"
|
||||
:style="`font-size: 30px; cursor: pointer;`"
|
||||
icon="ion:document-attach-outline"
|
||||
@click="hanlderPreViewFile(item)"
|
||||
/>
|
||||
{{ item }}
|
||||
</div>
|
||||
</template>
|
||||
</a-image-preview-group>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item v-if="props.showInfoData.is_illegal == 2" label="实际用途">{{
|
||||
getLabel('qita_use_to', props.showInfoData.qita_use_to)
|
||||
}}</a-descriptions-item>
|
||||
<a-descriptions-item v-if="props.showInfoData.is_illegal == 2" label="附件">
|
||||
<a-image-preview-group :preview="{ getContainer }">
|
||||
<template v-for="(item, itemIndex) in qitafujianList" :key="itemIndex">
|
||||
<a-image
|
||||
v-if="showImage(item)"
|
||||
style="width: 100px; height: 100px"
|
||||
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
|
||||
:preview="{ getContainer }"
|
||||
></a-image>
|
||||
<div v-else>
|
||||
<Icon
|
||||
v-if="item"
|
||||
:style="`font-size: 30px; cursor: pointer;`"
|
||||
icon="ion:document-attach-outline"
|
||||
@click="hanlderPreViewFile(item)"
|
||||
/>
|
||||
{{ item }}
|
||||
</div>
|
||||
</template>
|
||||
</a-image-preview-group>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="判定依据说明">{{
|
||||
props.showInfoData.pandingyijushuoming
|
||||
}}</a-descriptions-item>
|
||||
<a-descriptions-item label="照片">
|
||||
<div class="image-div">
|
||||
<a-image-preview-group
|
||||
|
|
@ -227,124 +173,8 @@
|
|||
</a-tab-pane>
|
||||
<a-tab-pane
|
||||
key="3"
|
||||
tab="整改情况"
|
||||
v-if="
|
||||
props.showInfoData.is_illegal == 1 &&
|
||||
props.showInfoData.weifaleixing == 1 &&
|
||||
!['建设用地', '推堆土'].includes(props.showInfoData.typename)
|
||||
"
|
||||
>
|
||||
<a-descriptions
|
||||
:column="2"
|
||||
bordered
|
||||
:contentStyle="{
|
||||
'text-align': 'center',
|
||||
'min-width': '250px',
|
||||
'word-break': 'break-all',
|
||||
}"
|
||||
>
|
||||
<a-descriptions-item label="整改措施">{{
|
||||
getLabel('measure_name', props.showInfoData.measure_name)
|
||||
}}</a-descriptions-item>
|
||||
<a-descriptions-item v-if="props.showInfoData.measure_name == 0" label="附件">
|
||||
<a-image-preview-group :preview="{ getContainer }">
|
||||
<template v-for="(item, itemIndex) in yanshoubiaoList" :key="itemIndex">
|
||||
<a-image
|
||||
v-if="showImage(item)"
|
||||
style="width: 100px; height: 100px"
|
||||
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
|
||||
:preview="{ getContainer }"
|
||||
></a-image>
|
||||
<div v-else>
|
||||
<Icon
|
||||
v-if="item"
|
||||
:style="`font-size: 30px; cursor: pointer;`"
|
||||
icon="ion:document-attach-outline"
|
||||
@click="hanlderPreViewFile(item)"
|
||||
/>
|
||||
{{ item }}
|
||||
</div>
|
||||
</template>
|
||||
</a-image-preview-group>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item v-if="props.showInfoData.measure_name == 0" label="照片">
|
||||
<div class="image-div">
|
||||
<a-image-preview-group
|
||||
:preview="{
|
||||
getContainer: getContainer,
|
||||
}"
|
||||
>
|
||||
<template
|
||||
v-for="(imageItem, imageIndex) in chaichufugenghoupicList"
|
||||
:key="imageIndex"
|
||||
>
|
||||
<a-image
|
||||
v-if="imageItem"
|
||||
width="100px"
|
||||
height="100px"
|
||||
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${imageItem}`"
|
||||
:preview="{
|
||||
getContainer,
|
||||
}"
|
||||
></a-image>
|
||||
</template>
|
||||
</a-image-preview-group>
|
||||
</div>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item v-if="props.showInfoData.measure_name == 1" label="附件">
|
||||
<a-image-preview-group :preview="{ getContainer }">
|
||||
<template v-for="(item, itemIndex) in zhenggaifujianList" :key="itemIndex">
|
||||
<a-image
|
||||
v-if="showImage(item)"
|
||||
style="width: 100px; height: 100px"
|
||||
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
|
||||
:preview="{ getContainer }"
|
||||
></a-image>
|
||||
<div v-else>
|
||||
<Icon
|
||||
v-if="item"
|
||||
:style="`font-size: 30px; cursor: pointer;`"
|
||||
icon="ion:document-attach-outline"
|
||||
@click="hanlderPreViewFile(item)"
|
||||
/>
|
||||
{{ item }}
|
||||
</div>
|
||||
</template>
|
||||
</a-image-preview-group>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item v-if="props.showInfoData.measure_name == 1" label="照片">
|
||||
<div class="image-div">
|
||||
<a-image-preview-group
|
||||
:preview="{
|
||||
getContainer: getContainer,
|
||||
}"
|
||||
>
|
||||
<template v-for="(imageItem, imageIndex) in bubanzhaopianList" :key="imageIndex">
|
||||
<a-image
|
||||
v-if="imageItem"
|
||||
width="100px"
|
||||
height="100px"
|
||||
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${imageItem}`"
|
||||
:preview="{
|
||||
getContainer,
|
||||
}"
|
||||
></a-image>
|
||||
</template>
|
||||
</a-image-preview-group>
|
||||
</div>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="办理人">{{
|
||||
props.showInfoData.transactor_name
|
||||
}}</a-descriptions-item>
|
||||
<a-descriptions-item label="办理时间">{{
|
||||
props.showInfoData.transact_time
|
||||
}}</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
</a-tab-pane>
|
||||
<a-tab-pane
|
||||
key="4"
|
||||
v-if="!['建设用地', '推堆土'].includes(props.showInfoData.typename)"
|
||||
tab="审核"
|
||||
tab="填报审核"
|
||||
>
|
||||
<a-divider>区县审核</a-divider>
|
||||
<a-descriptions
|
||||
|
|
@ -391,7 +221,128 @@
|
|||
<a-descriptions-item label="审核时间">{{
|
||||
props.showInfoData.hexiaotime?.split('.')[0]
|
||||
}}</a-descriptions-item>
|
||||
<a-descriptions-item v-if="props.showInfoData.weifaleixing == 0" label="无人机复飞照片">
|
||||
</a-descriptions>
|
||||
</a-tab-pane>
|
||||
<a-tab-pane
|
||||
key="4"
|
||||
v-if="!['建设用地', '推堆土'].includes(props.showInfoData.typename)"
|
||||
tab="图斑整改"
|
||||
>
|
||||
<a-descriptions
|
||||
:column="2"
|
||||
bordered
|
||||
:contentStyle="{
|
||||
'text-align': 'center',
|
||||
'min-width': '250px',
|
||||
'word-break': 'break-all',
|
||||
}"
|
||||
>
|
||||
<a-descriptions-item label="整改措施">{{
|
||||
getLabel('measure_name', props.showInfoData.measure_name)
|
||||
}}</a-descriptions-item>
|
||||
<a-descriptions-item v-if="props.showInfoData.measure_name == 0" label="整改后照片">
|
||||
<div class="image-div">
|
||||
<a-image-preview-group
|
||||
:preview="{
|
||||
getContainer: getContainer,
|
||||
onVisibleChange: handlerImageChange,
|
||||
}"
|
||||
>
|
||||
<template v-for="(imageItem, imageIndex) in chaichufugenghoupicList" :key="imageIndex">
|
||||
<a-image
|
||||
v-if="imageItem"
|
||||
@click="handlerPreviewImage(imageIndex, imageItem)"
|
||||
width="100px"
|
||||
height="100px"
|
||||
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${imageItem}`"
|
||||
:preview="{
|
||||
getContainer,
|
||||
}"
|
||||
></a-image>
|
||||
</template>
|
||||
</a-image-preview-group>
|
||||
</div>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item v-if="props.showInfoData.measure_name == 1" label="整改后附件">
|
||||
<a-image-preview-group :preview="{ getContainer }">
|
||||
<template v-for="(item, itemIndex) in zhenggaifujianList" :key="itemIndex">
|
||||
<a-image
|
||||
v-if="showImage(item)"
|
||||
style="width: 100px; height: 100px"
|
||||
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
|
||||
:preview="{ getContainer }"
|
||||
></a-image>
|
||||
<div v-else>
|
||||
<Icon
|
||||
v-if="item"
|
||||
:style="`font-size: 30px; cursor: pointer;`"
|
||||
icon="ion:document-attach-outline"
|
||||
@click="hanlderPreViewFile(item)"
|
||||
/>
|
||||
{{ item }}
|
||||
</div>
|
||||
</template>
|
||||
</a-image-preview-group>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="办理人">{{
|
||||
props.showInfoData.transactor_name
|
||||
}}</a-descriptions-item>
|
||||
<a-descriptions-item label="办理时间">{{
|
||||
props.showInfoData.transact_time
|
||||
}}</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
</a-tab-pane>
|
||||
<a-tab-pane
|
||||
key="5"
|
||||
v-if="!['建设用地', '推堆土'].includes(props.showInfoData.typename)"
|
||||
tab="整改审核"
|
||||
>
|
||||
<a-divider>区县审核</a-divider>
|
||||
<a-descriptions
|
||||
:column="2"
|
||||
bordered
|
||||
:contentStyle="{
|
||||
'text-align': 'center',
|
||||
'min-width': '250px',
|
||||
'word-break': 'break-all',
|
||||
}"
|
||||
>
|
||||
<a-descriptions-item label="审核结果">{{
|
||||
props.showInfoData.zg_xjshenhejieguo
|
||||
}}</a-descriptions-item>
|
||||
<a-descriptions-item label="审核意见">{{
|
||||
props.showInfoData.zg_xianjiyijian
|
||||
}}</a-descriptions-item>
|
||||
<a-descriptions-item label="审核人">{{
|
||||
props.showInfoData.zg_xianjiren
|
||||
}}</a-descriptions-item>
|
||||
<a-descriptions-item label="审核时间">{{
|
||||
props.showInfoData.zg_xjshenheshijian
|
||||
}}</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
<a-divider>市局审核</a-divider>
|
||||
<a-descriptions
|
||||
:column="2"
|
||||
bordered
|
||||
:contentStyle="{
|
||||
'text-align': 'center',
|
||||
'min-width': '250px',
|
||||
'word-break': 'break-all',
|
||||
}"
|
||||
>
|
||||
<a-descriptions-item label="审核结果">{{
|
||||
props.showInfoData.zg_sjshenhejieguo
|
||||
}}</a-descriptions-item>
|
||||
<a-descriptions-item label="审核意见">{{
|
||||
props.showInfoData.zg_shijiyijian
|
||||
}}</a-descriptions-item>
|
||||
<a-descriptions-item label="审核人">{{
|
||||
props.showInfoData.zg_shijiren
|
||||
}}</a-descriptions-item>
|
||||
<a-descriptions-item label="审核时间">{{
|
||||
props.showInfoData.zg_sjshenheshijian?.split('.')[0]
|
||||
}}</a-descriptions-item>
|
||||
<!-- <a-descriptions-item v-if="props.showInfoData.weifaleixing == 0" label="无人机复飞照片">
|
||||
<div class="image-div">
|
||||
<a-image-preview-group
|
||||
:preview="{
|
||||
|
|
@ -411,7 +362,7 @@
|
|||
</template>
|
||||
</a-image-preview-group>
|
||||
</div>
|
||||
</a-descriptions-item>
|
||||
</a-descriptions-item> -->
|
||||
</a-descriptions>
|
||||
</a-tab-pane>
|
||||
</a-tabs>
|
||||
|
|
@ -447,11 +398,11 @@
|
|||
import { getAppEnvConfig } from '@/utils/env';
|
||||
import {
|
||||
mapTypeOptions,
|
||||
measureOptions,
|
||||
illegalTypeList,
|
||||
resultOptions,
|
||||
qitaUseTOOptions,
|
||||
} from '@/utils/global';
|
||||
import { tubanleixingOptions, measureOptions } from './util'
|
||||
|
||||
const { createMessage } = useMessage();
|
||||
const { VITE_GLOB_INFO_IMAGE_URL } = getAppEnvConfig();
|
||||
|
|
@ -589,6 +540,9 @@
|
|||
case 'qita_use_to':
|
||||
result = qitaUseTOOptions;
|
||||
break;
|
||||
case 'tianbaoleixing':
|
||||
result = tubanleixingOptions;
|
||||
break;
|
||||
}
|
||||
result.forEach((item) => {
|
||||
if (item.value == value) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
import { asyncGetOptions } from '@/utils/global'
|
||||
|
||||
export const tubanleixingOptions = await asyncGetOptions('gdflhtianbaolx');
|
||||
|
||||
export const measureOptions = [
|
||||
{ label: '恢复耕种条件', value: 0 },
|
||||
{ label: '办理相关手续', value: 1 },
|
||||
];
|
||||
|
|
@ -291,6 +291,7 @@
|
|||
sortType: infoScreenData.value.sort,
|
||||
order: infoScreenData.value.order,
|
||||
type: infoScreenData.value.type,
|
||||
receive:1,
|
||||
};
|
||||
Object.keys(params).forEach((key) => {
|
||||
if (params[key] !== '' && params[key] !== null) {
|
||||
|
|
|
|||
|
|
@ -179,62 +179,19 @@
|
|||
<div class="info-data-label">下发</div>
|
||||
<div class="info-data-data">{{ item.totaltask }}</div>
|
||||
</div>
|
||||
<!-- <div
|
||||
style="
|
||||
width: 1px;
|
||||
margin-right: 15px;
|
||||
margin-left: 15px;
|
||||
background-color: #ededed;
|
||||
height: 15px;
|
||||
"
|
||||
></div> -->
|
||||
<div class="info-data-item">
|
||||
<div class="info-data-label">接收</div>
|
||||
<div class="info-data-data">{{ item.receivetask }}</div>
|
||||
</div>
|
||||
<!-- <div
|
||||
style="
|
||||
width: 1px;
|
||||
margin-right: 15px;
|
||||
margin-left: 15px;
|
||||
background-color: #ededed;
|
||||
height: 15px;
|
||||
"
|
||||
></div> -->
|
||||
<!-- <div class="info-data-item">
|
||||
<div class="info-data-label">非粮化</div>
|
||||
<div class="info-data-data">{{ item.nonfoodcase }}</div>
|
||||
</div> -->
|
||||
<!-- <div
|
||||
style="
|
||||
width: 1px;
|
||||
margin-right: 15px;
|
||||
margin-left: 15px;
|
||||
background-color: #ededed;
|
||||
height: 15px;
|
||||
"
|
||||
></div> -->
|
||||
<div class="info-data-item">
|
||||
<div class="info-data-label">拆除复耕</div>
|
||||
<div class="info-data-data">{{ item.rehabilitationcase }}</div>
|
||||
</div>
|
||||
<!-- <div
|
||||
style="
|
||||
width: 1px;
|
||||
margin-right: 15px;
|
||||
margin-left: 15px;
|
||||
background-color: #ededed;
|
||||
height: 15px;
|
||||
"
|
||||
></div> -->
|
||||
<div class="info-data-item">
|
||||
<div class="info-data-label">补办手续</div>
|
||||
<div class="info-data-data">{{ item.makeupcase }}</div>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
<!-- <div class="data-div">
|
||||
<spam style="color: #086dec">{{ item.count }}</spam>
|
||||
</div> -->
|
||||
</div>
|
||||
<div v-else class="no-data">
|
||||
<a-empty :image="simpleImage" />
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
:options="props.batchOptions"
|
||||
/>
|
||||
</div>
|
||||
<div class="screen-item" style="margin-right:13px;">
|
||||
<!-- <div class="screen-item" style="margin-right:13px;">
|
||||
<div class="screen-item-label">举证</div>
|
||||
<a-select
|
||||
allowClear
|
||||
|
|
@ -36,10 +36,9 @@
|
|||
v-model:value="params.is_build_name"
|
||||
:options="markTypeOptions"
|
||||
/>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="screen-item" style="margin-right:10px;">
|
||||
<!-- <div class="screen-item-label">图斑号</div> -->
|
||||
<a-input style="width:270px;" allowClear v-model:value="params.geomid" class="item-input" placeholder="请输入图斑编号"/>
|
||||
<a-input style="width:455px;" allowClear v-model:value="params.geomid" class="item-input" placeholder="请输入图斑编号"/>
|
||||
</div>
|
||||
<div class="screen-item" style="display: flex; justify-content: end;margin-bottom: 0px;">
|
||||
<a-button type="primary" class="item-button" :icon="h(SearchOutlined)" @click="query">查询</a-button>
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@
|
|||
import { BasicTable, useTable, TableAction } from '@/components/Table';
|
||||
import { LoadCaseInfoWpxfTuBanList } from '@/api/degraining/index.ts';
|
||||
import { PermissionBtn } from '@/components/PermissionBtn/index';
|
||||
import { columns, searchFormSchema } from './patchsummary.data';
|
||||
import { columns, searchFormSchema, nowStatusOptions } from './patchsummary.data';
|
||||
import { getAppEnvConfig } from '@/utils/env';
|
||||
import axios from 'axios';
|
||||
import ShowInfoModal from '@/views/demo/degraining/curbspotcity/MapList/ShowInfoModal/index.vue';
|
||||
|
|
@ -108,7 +108,6 @@
|
|||
import { dataProcessingCount } from '@/views/demo/tiankongdi/util';
|
||||
import { BasicForm, useForm } from '@/components/Form';
|
||||
import { PageWrapper } from '@/components/Page';
|
||||
import { nowStatusOptions } from '@/utils/global';
|
||||
import { message } from 'ant-design-vue';
|
||||
|
||||
const { VITE_GLOB_API_URL } = getAppEnvConfig();
|
||||
|
|
@ -187,10 +186,10 @@
|
|||
let url = '';
|
||||
let fileName = '';
|
||||
if (exportType == 'excel') {
|
||||
url = VITE_GLOB_API_URL + '/api/DroneCaseInfoFLH/ExportCaseInfoTuBanList';
|
||||
url = VITE_GLOB_API_URL + '/api/DroneCaseInfoFLH/ExportCaseInfoTuBanListV1';
|
||||
fileName = '图斑汇总统计报表' + new Date().getTime() + '.xls';
|
||||
} else if (exportType == 'shp') {
|
||||
url = VITE_GLOB_API_URL + '/api/DroneCaseInfoFLH/ExportCaseInfoShapefile';
|
||||
url = VITE_GLOB_API_URL + '/api/DroneCaseInfoFLH/ExportCaseInfoShapefileV1';
|
||||
fileName = '图斑汇总矢量数据' + new Date().getTime() + '.zip';
|
||||
}
|
||||
axios({
|
||||
|
|
|
|||
|
|
@ -5,9 +5,11 @@ import {
|
|||
patchSourceOptions,
|
||||
yearOptions,
|
||||
markTypeOptions,
|
||||
nowStatusOptions,
|
||||
mapTypeOptions,
|
||||
} from '@/utils/global';
|
||||
import { asyncGetOptions } from '@/utils/global'
|
||||
|
||||
export const nowStatusOptions = await asyncGetOptions('gdflhdqzt');
|
||||
|
||||
export const columns: BasicColumn[] = [
|
||||
{
|
||||
|
|
@ -61,30 +63,21 @@ export const columns: BasicColumn[] = [
|
|||
dataIndex: 'handlestatusname',
|
||||
width: 80,
|
||||
},
|
||||
{
|
||||
title: '判定结果',
|
||||
dataIndex: 'isillegal',
|
||||
width: 80,
|
||||
},
|
||||
{
|
||||
title: '下发时间',
|
||||
dataIndex: 'identificationtime',
|
||||
},
|
||||
{
|
||||
title: '项目名称',
|
||||
dataIndex: 'xiangmumc',
|
||||
title: '发生时间',
|
||||
dataIndex: 'fashengshijian',
|
||||
},
|
||||
{
|
||||
title: '项目主体',
|
||||
dataIndex: 'xiangmuzhuti',
|
||||
title: '填报类型',
|
||||
dataIndex: 'tianbaoleixingname',
|
||||
},
|
||||
{
|
||||
title: '实际用途',
|
||||
dataIndex: 'actualuseto',
|
||||
},
|
||||
{
|
||||
title: '违法类型',
|
||||
dataIndex: 'weifaleixing',
|
||||
title: '现场情况',
|
||||
dataIndex: 'pandingyijushuoming',
|
||||
},
|
||||
{
|
||||
title: '整改措施',
|
||||
|
|
@ -110,7 +103,7 @@ export const searchFormSchema: FormSchema[] = [
|
|||
componentProps: ({ formModel }) => {
|
||||
return {
|
||||
api: getLoad,
|
||||
params: { code: 'gdflhtbly' },
|
||||
params: { code: 'gdflhbly' },
|
||||
// 接口参数
|
||||
resultField: 'result',
|
||||
labelField: 'itemName',
|
||||
|
|
@ -118,15 +111,6 @@ export const searchFormSchema: FormSchema[] = [
|
|||
};
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'picihao',
|
||||
label: '批次',
|
||||
component: 'Select',
|
||||
colProps: { span: 4 },
|
||||
componentProps: {
|
||||
options: [],
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'typename',
|
||||
label: '图斑类型',
|
||||
|
|
@ -135,7 +119,7 @@ export const searchFormSchema: FormSchema[] = [
|
|||
componentProps: ({ formModel }) => {
|
||||
return {
|
||||
api: getLoad,
|
||||
params: { code: 'gdflhtblx' },
|
||||
params: { code: 'gdflhblx' },
|
||||
// 接口参数
|
||||
resultField: 'result',
|
||||
labelField: 'itemName',
|
||||
|
|
@ -144,12 +128,19 @@ export const searchFormSchema: FormSchema[] = [
|
|||
},
|
||||
},
|
||||
{
|
||||
field: 'isBuildName',
|
||||
label: '标注类型',
|
||||
component: 'Select',
|
||||
field: 'tianbaoleixing',
|
||||
label: '填报类型',
|
||||
component: 'ApiSelect',
|
||||
colProps: { span: 4 },
|
||||
componentProps: {
|
||||
options: markTypeOptions,
|
||||
componentProps: ({ formModel }) => {
|
||||
return {
|
||||
api: getLoad,
|
||||
params: { code: 'gdflhtianbaolx' },
|
||||
// 接口参数
|
||||
resultField: 'result',
|
||||
labelField: 'itemName',
|
||||
valueField: 'itemValue',
|
||||
};
|
||||
},
|
||||
},
|
||||
{
|
||||
|
|
@ -191,44 +182,34 @@ export const searchFormSchema: FormSchema[] = [
|
|||
{
|
||||
field: 'nowStatus',
|
||||
label: '当前状态',
|
||||
component: 'Select',
|
||||
componentProps: {
|
||||
options: nowStatusOptions,
|
||||
},
|
||||
// component: 'ApiSelect',
|
||||
// componentProps: ({ formModel }) => {
|
||||
// return {
|
||||
// api: getLoad,
|
||||
// params: { code: 'gdflhdqzt' },
|
||||
// // 接口参数
|
||||
// resultField: 'result',
|
||||
// labelField: 'itemName',
|
||||
// valueField: 'itemValue',
|
||||
// };
|
||||
// },
|
||||
colProps: { span: 4 },
|
||||
slot: 'dangqianzhuangtai',
|
||||
},
|
||||
{
|
||||
field: 'isIllegal',
|
||||
label: '判定结果',
|
||||
component: 'Select',
|
||||
colProps: { span: 4 },
|
||||
componentProps: {
|
||||
options: mapTypeOptions,
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'weifaleixing',
|
||||
label: '违法类型',
|
||||
component: 'Select',
|
||||
colProps: { span: 4 },
|
||||
componentProps: {
|
||||
options: [
|
||||
{ label: '非农化违法用地', value: '0' },
|
||||
{ label: '非粮化违法用地', value: '1' },
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'measureName',
|
||||
label: '整改措施',
|
||||
component: 'Select',
|
||||
component: 'ApiSelect',
|
||||
colProps: { span: 4 },
|
||||
componentProps: {
|
||||
options: [
|
||||
{ label: '拆除复耕', value: '0' },
|
||||
{ label: '补办手续', value: '1' },
|
||||
],
|
||||
componentProps: ({ formModel }) => {
|
||||
return {
|
||||
api: getLoad,
|
||||
params: { code: 'gdflhzgcs' },
|
||||
// 接口参数
|
||||
resultField: 'result',
|
||||
labelField: 'itemName',
|
||||
valueField: 'itemValue',
|
||||
};
|
||||
},
|
||||
},
|
||||
|
||||
|
|
@ -251,12 +232,6 @@ export const searchFormSchema: FormSchema[] = [
|
|||
colProps: { span: 4 },
|
||||
slot: 'jibennongtianmianji',
|
||||
},
|
||||
{
|
||||
field: 'originalcaseno',
|
||||
label: '标识号',
|
||||
component: 'Input',
|
||||
colProps: { span: 3 },
|
||||
},
|
||||
{
|
||||
field: '[startTime, endTime]',
|
||||
label: '下发时间',
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
<template>
|
||||
<PageWrapper dense contentFullHeight fixedHeight contentClass="flex">
|
||||
<BasicTable class="w-4/4 xl:w-5/5" @register="registerTable">
|
||||
<template #toolbar>
|
||||
<a-button type="primary" @click="downloadSHP">SHP导出</a-button>
|
||||
</template>
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if="column.key === 'action'">
|
||||
<TableAction
|
||||
|
|
@ -27,7 +30,7 @@ import { BasicTable, useTable, TableAction } from '@/components/Table';
|
|||
import { PageWrapper } from '@/components/Page';
|
||||
import InfoModal from '../mainaudit/InfoModal/index.vue'
|
||||
import { columns, searchFormSchema } from './util';
|
||||
import { MainLoadCaseInfoLists, MainGetCaseInfo } from '@/api/illegalmining/index';
|
||||
import { MainLoadCaseInfoLists, MainGetCaseInfo, MainExportapprovalCaseInfoShapefile } from '@/api/illegalmining/index';
|
||||
|
||||
const infoData = ref({})
|
||||
const openModal = ref(false)
|
||||
|
|
@ -78,4 +81,19 @@ const handleOk = () => {
|
|||
const closeModal = () => {
|
||||
openModal.value = false
|
||||
}
|
||||
const downloadSHP = () => {
|
||||
let params = {
|
||||
nowStatus: '已审核'
|
||||
}
|
||||
MainExportapprovalCaseInfoShapefile(params).then(res => {
|
||||
const elink = document.createElement('a');
|
||||
elink.download = '已审核矢量数据' + new Date().getTime() + '.zip';
|
||||
elink.style.display = 'none';
|
||||
elink.href = URL.createObjectURL(res);
|
||||
document.body.appendChild(elink);
|
||||
elink.click();
|
||||
URL.revokeObjectURL(elink.href);
|
||||
document.body.removeChild(elink);
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
>
|
||||
<a-button type="primary">导入</a-button>
|
||||
</a-upload>
|
||||
<a-button type="primary" @click="downloadSHP">SHP导出</a-button>
|
||||
</template>
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if="column.key === 'action'">
|
||||
|
|
@ -60,7 +61,7 @@ import { create, saveDraft, GetDraft } from '@/api/sys/WFProcess';
|
|||
import { message, Modal, Input } from 'ant-design-vue';
|
||||
import { SaveReSubmitInfo } from '@/api/demo/resubmit';
|
||||
import { uploadFile } from '@/api/formrender/index';
|
||||
import { MainLoadCaseInfoLists, MainGetCaseInfo, MainCloseCaseInfo, MainUpdateCaseInfoShpData } from '@/api/illegalmining/index';
|
||||
import { MainLoadCaseInfoLists, MainGetCaseInfo, MainCloseCaseInfo, MainUpdateCaseInfoShpData, MainExportapprovalCaseInfoShapefile } from '@/api/illegalmining/index';
|
||||
import ImportDataModal from '@/components/Audit/ImportDataModal/index.vue'
|
||||
import { UpdateCaseNoBySubject, LoadCaseImportInfoLast } from '@/api/audit/index';
|
||||
|
||||
|
|
@ -250,6 +251,18 @@ const preview = () => {
|
|||
openImportModal.value = true
|
||||
})
|
||||
}
|
||||
const downloadSHP = () => {
|
||||
MainExportapprovalCaseInfoShapefile().then(res => {
|
||||
const elink = document.createElement('a');
|
||||
elink.download = '待审核矢量数据' + new Date().getTime() + '.zip';
|
||||
elink.style.display = 'none';
|
||||
elink.href = URL.createObjectURL(res);
|
||||
document.body.appendChild(elink);
|
||||
elink.click();
|
||||
URL.revokeObjectURL(elink.href);
|
||||
document.body.removeChild(elink);
|
||||
})
|
||||
}
|
||||
|
||||
</script>
|
||||
<style lang="scss">
|
||||
|
|
|
|||
|
|
@ -384,7 +384,7 @@
|
|||
async function getCaseImgList() {
|
||||
imageList.value = await getLoadCaseImgList({
|
||||
caseid: props.showInfoData.id,
|
||||
category: '重点问题I类',
|
||||
category: '重点问题Ⅰ类',
|
||||
});
|
||||
MapboxComponent.value.handlerLoadPictureAzimuth(imageList.value);
|
||||
|
||||
|
|
|
|||
|
|
@ -368,7 +368,7 @@
|
|||
async function getCaseImgList() {
|
||||
imageList.value = await getLoadCaseImgList({
|
||||
caseid: props.showInfoData.id,
|
||||
category: '重点问题II类',
|
||||
category: '重点问题Ⅱ类',
|
||||
});
|
||||
MapboxComponent.value.handlerLoadPictureAzimuth(imageList.value);
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
allowClear
|
||||
style="width: 142px"
|
||||
v-model:value="props.patchSource"
|
||||
:options="patchSourceOptions"
|
||||
:options="tubanlaiyuanOptions"
|
||||
@change="
|
||||
(value) => {
|
||||
emits('auditProgressScreenChange', value, 'patchSource');
|
||||
|
|
@ -144,7 +144,7 @@
|
|||
<div class="progress-div">
|
||||
<div class="progress-label reviewed-color" style="width: 70px">待审核</div>
|
||||
<div class="progress-data" style="width: 40px">
|
||||
<span style="color: #ec7908">{{ item.verifytask }}</span>
|
||||
<span style="color: #ec7908">{{ item.verifytask1 }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -247,7 +247,7 @@
|
|||
import { getDetail } from '@/api/sys/WFSchemeInfo';
|
||||
import { flowStore } from '@/store/modules/flow';
|
||||
import { Audit } from '@/views/demo/workflow/task/process/page';
|
||||
import { dataProcessing } from '@/views/demo/tiankongdi/util'
|
||||
import { dataProcessing, tubanlaiyuanOptions } from '@/views/demo/tiankongdi/util'
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
allowClear
|
||||
style="width:130px;"
|
||||
v-model:value="params.tubanlaiyuan"
|
||||
:options="patchSourceOptions"
|
||||
:options="tubanlaiyuanOptions"
|
||||
/>
|
||||
</div>
|
||||
<div class="screen-item" style="margin-bottom:15px;">
|
||||
|
|
@ -217,7 +217,7 @@
|
|||
import { useUserStore } from '@/store/modules/user.ts'
|
||||
import { SearchOutlined, RollbackOutlined } from '@ant-design/icons-vue';
|
||||
import { patchSourceOptions, auditMapStatusOptions } from '@/utils/global'
|
||||
import { dataProcessing } from '@/views/demo/tiankongdi/util.ts'
|
||||
import { dataProcessing, tubanlaiyuanOptions } from '@/views/demo/tiankongdi/util.ts'
|
||||
import {showDrawBack, drawBackSpan} from '@/views/demo/util'
|
||||
|
||||
const userStore = useUserStore()
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import { BasicColumn, FormSchema } from '@/components/Table';
|
||||
import { getChildrenTree } from '@/api/demo/system';
|
||||
import { getLoad } from '@/api/sys/sysDataItemDetail';
|
||||
import {
|
||||
patchSourceOptions,
|
||||
yearOptions,
|
||||
|
|
@ -104,10 +105,17 @@ export const searchFormSchema: FormSchema[] = [
|
|||
{
|
||||
field: 'tubanlaiyuan',
|
||||
label: '图斑来源',
|
||||
component: 'Select',
|
||||
component: 'ApiSelect',
|
||||
colProps: { span: 4 },
|
||||
componentProps: {
|
||||
options: patchSourceOptions,
|
||||
componentProps: ({ formModel }) => {
|
||||
return {
|
||||
api: getLoad,
|
||||
params: { code: 'wfydtbly' },
|
||||
// 接口参数
|
||||
resultField: 'result',
|
||||
labelField: 'itemName',
|
||||
valueField: 'itemValue',
|
||||
};
|
||||
},
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -122,13 +122,14 @@
|
|||
|
||||
proj4.defs(
|
||||
'EPSG:4548',
|
||||
'+proj=tmerc +lat_0=37.56666666666666 +lon_0=126.93333333333333 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +towgs84=-119.819,-78.445,-112.283,0,0,0,0 +units=m +no_defs',
|
||||
'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs',
|
||||
);
|
||||
|
||||
// 影像管理-----------------------------------------------------------------------------------------------
|
||||
const [registerTable, { reload, getSelectRows }] = useTable({
|
||||
title: '影像管理',
|
||||
api: GeoTiffManagerLoadPage,
|
||||
// dataSource: data,
|
||||
columns: columns,
|
||||
useSearchForm: true,
|
||||
formConfig: {
|
||||
|
|
@ -285,6 +286,13 @@
|
|||
numValue = 1,
|
||||
) {
|
||||
if (bbox) {
|
||||
// 检查bbox是否是ESG:4326,不是的话转换成
|
||||
let bboxSplit = bbox.split(',');
|
||||
const result1 = isProjectedCoordinates(parseFloat(bboxSplit[0]), parseFloat(bboxSplit[1]));
|
||||
if (result1) {
|
||||
const result2 = isProjectedCoordinates(parseFloat(bboxSplit[2]), parseFloat(bboxSplit[3]));
|
||||
bbox = result1.concat(result2).toString();
|
||||
}
|
||||
GeoTiffManagerUpdateLayerGroupThumb({
|
||||
layerGroups: layerNames,
|
||||
bbox: bbox,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<div style="padding: 20px;">
|
||||
<a-descriptions bordered>
|
||||
<a-descriptions :column="3" bordered>
|
||||
<a-descriptions-item label="图斑编号">{{case_no}}</a-descriptions-item>
|
||||
<a-descriptions-item label="图斑描述">{{case_description}}</a-descriptions-item>
|
||||
<a-descriptions-item label="区县">{{countyname}}</a-descriptions-item>
|
||||
|
|
@ -17,17 +17,48 @@
|
|||
<a-descriptions-item label="生态保护红线面积">{{shengtaibaohuhongxian_area}}</a-descriptions-item>
|
||||
<a-descriptions-item label="国土空间规划面积">{{guotukongjianguihua_area}}</a-descriptions-item>
|
||||
<a-descriptions-item label="无人机编号">{{drone_no}}</a-descriptions-item>
|
||||
<a-descriptions-item label="备注" :span="2">{{remark}}</a-descriptions-item>
|
||||
<a-descriptions-item label="图片" :span="4">
|
||||
<div class="image-div">
|
||||
<a-image-preview-group>
|
||||
<template v-for="(imageItem, imageIndex) in casepicList" :key="imageIndex">
|
||||
<a-image
|
||||
v-if="imageItem"
|
||||
width="100px"
|
||||
height="100px"
|
||||
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${imageItem}`"
|
||||
></a-image>
|
||||
</template>
|
||||
</a-image-preview-group>
|
||||
</div>
|
||||
</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {defineProps} from "vue"
|
||||
import {defineProps, computed} from "vue"
|
||||
import { getAppEnvConfig } from '@/utils/env';
|
||||
const props = defineProps(['info'])
|
||||
const { VITE_GLOB_INFO_IMAGE_URL } = getAppEnvConfig();
|
||||
const { id, case_no, case_description, countyid,
|
||||
countyname, streetid, streetname,communityid, communityname, address, drone_no, lng, lat,
|
||||
area, nongyongdi_area, gengdi_area, yongjiujibennongtian_area, zhongdianquyu_area, shengtaibaohuhongxian_area,
|
||||
guotukongjianguihua_area } = props.info
|
||||
guotukongjianguihua_area, remark, casepic } = props.info
|
||||
|
||||
const casepicList = computed(() => {
|
||||
return casepic ? casepic.split(',') : [];
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
<style lang="scss" scoped>
|
||||
.image-div {
|
||||
min-width: 340px;
|
||||
max-height: 220px;
|
||||
overflow: auto;
|
||||
}
|
||||
:deep(.ant-image) {
|
||||
margin-right: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<div class="row">
|
||||
<div class="item" style="flex: 1;">
|
||||
<div class="label">图斑编号:</div>
|
||||
<div class="item-input"><a-input v-model:value="props.infoResult.case_no"/></div>
|
||||
<div class="item-input"><a-input v-model:value="props.infoResult.case_no" disabled/></div>
|
||||
</div>
|
||||
<div class="item" style="flex: 1;">
|
||||
<div class="label">图斑描述:</div>
|
||||
|
|
@ -96,22 +96,83 @@
|
|||
<div class="label">无人机编号:</div>
|
||||
<div class="item-input"><a-input v-model:value="props.infoResult.drone_no"/></div>
|
||||
</div>
|
||||
<div class="item" style="width: 33.3%;">
|
||||
<div class="label">备注:</div>
|
||||
<div class="item-input"><a-input v-model:value="props.infoResult.remark"/></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="item" style="width: 100%;">
|
||||
<div class="label">图片:</div>
|
||||
<div style="flex:9;display:flex;">
|
||||
<a-image-preview-group>
|
||||
<div class="video-item" v-for="(item, index) in fileList" :key="index" style="display: inline-block;position:relative;">
|
||||
<div class="video-delete-btn" @click="handlerDelete(index)">
|
||||
<CloseOutlined />
|
||||
</div>
|
||||
<a-image :src="item.url" style="width:100px;height:100px;" />
|
||||
</div>
|
||||
</a-image-preview-group>
|
||||
<Upload
|
||||
list-type="picture-card"
|
||||
:showUploadList="false"
|
||||
:custom-request="customRequest"
|
||||
@change="handleChange"
|
||||
>
|
||||
<div>
|
||||
<plus-outlined />
|
||||
<div style="margin-top: 8px">Upload</div>
|
||||
</div>
|
||||
</Upload>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="item" style="width: 100%;">
|
||||
<div class="label">上传SHP:</div>
|
||||
<div style="flex:9;display:flex;">
|
||||
<a-upload
|
||||
v-model:file-list="shpList"
|
||||
accept=".zip"
|
||||
:maxCount="1"
|
||||
:custom-request="shpCustomRequest"
|
||||
>
|
||||
<a-button>
|
||||
<upload-outlined></upload-outlined>
|
||||
上传SHP
|
||||
</a-button>
|
||||
<template #itemRender="{ file, actions }">
|
||||
<a-space>
|
||||
<span>{{ file.name }}</span>
|
||||
</a-space>
|
||||
</template>
|
||||
</a-upload>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { defineProps, onMounted, ref } from "vue"
|
||||
import { defineProps, onMounted, ref, watch, defineEmits } from "vue"
|
||||
import { getChildrenTree } from '@/api/demo/system'
|
||||
const props = defineProps(['infoData','infoResult'])
|
||||
import { getAppEnvConfig } from '@/utils/env';
|
||||
import axios from "axios";
|
||||
import { Upload } from 'ant-design-vue';
|
||||
import { PlusOutlined, CloseOutlined, ExclamationCircleOutlined, UploadOutlined } from '@ant-design/icons-vue';
|
||||
import { uploadFile } from '@/api/formrender/index';
|
||||
const props = defineProps(['infoData','infoResult','shppath'])
|
||||
const emits = defineEmits(['update:shppath'])
|
||||
const countyOptions = ref([])
|
||||
const streetOptions = ref([])
|
||||
const communityOptions = ref([])
|
||||
const fileList = ref<any>([])
|
||||
const shpList = ref([])
|
||||
onMounted(() => {
|
||||
const { id, case_no, case_description, countyid,
|
||||
countyname, streetid, streetname,communityid, communityname, address, drone_no, lng, lat,
|
||||
area, nongyongdi_area, gengdi_area, yongjiujibennongtian_area, zhongdianquyu_area, shengtaibaohuhongxian_area,
|
||||
guotukongjianguihua_area} = props.infoData
|
||||
guotukongjianguihua_area, remark, casepic} = props.infoData
|
||||
getChildrenTree({parentId:371300}).then(res =>{
|
||||
countyOptions.value = res.map(item => {
|
||||
return {
|
||||
|
|
@ -160,7 +221,56 @@ onMounted(() => {
|
|||
props.infoResult.zhongdianquyu_area = zhongdianquyu_area
|
||||
props.infoResult.shengtaibaohuhongxian_area = shengtaibaohuhongxian_area
|
||||
props.infoResult.guotukongjianguihua_area = guotukongjianguihua_area
|
||||
props.infoResult.remark = remark
|
||||
props.infoResult.casepic = casepic
|
||||
|
||||
const { VITE_GLOB_INFO_IMAGE_URL } = getAppEnvConfig();
|
||||
props.infoData.casepic && props.infoData.casepic.split(',').forEach(item => {
|
||||
fileList.value.push({
|
||||
uid: '-1',
|
||||
name: item,
|
||||
status: 'done',
|
||||
url: VITE_GLOB_INFO_IMAGE_URL + '/' + item,
|
||||
})
|
||||
})
|
||||
})
|
||||
watch(() => fileList.value.length, (val) => {
|
||||
props.infoResult.casepic = fileList.value.map(item => item.name).join(',')
|
||||
})
|
||||
const handleChange = (info) => {
|
||||
if (info.file.status !== 'uploading') {
|
||||
}
|
||||
if (info.file.status === 'done') {
|
||||
} else if (info.file.status === 'error') {
|
||||
}
|
||||
};
|
||||
const customRequest = (file) => {
|
||||
console.log('handleCustomRequest',file)
|
||||
const { VITE_GLOB_INFO_IMAGE_URL } = getAppEnvConfig();
|
||||
const formData = new FormData()
|
||||
formData.append('files', file.file)
|
||||
axios({
|
||||
method: 'post',
|
||||
url: `${VITE_GLOB_INFO_IMAGE_URL}/api/Platform/Upload`,
|
||||
params: { project: 'DroneEnforcement'},
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-type': 'multipart/form-data',
|
||||
},
|
||||
}).then(res => {
|
||||
let data = res.data.result
|
||||
console.log(res)
|
||||
fileList.value?.push({
|
||||
uid: '-1',
|
||||
name: data[0].filePath,
|
||||
status: 'done',
|
||||
url: VITE_GLOB_INFO_IMAGE_URL + '/' + data[0].filePath,
|
||||
});
|
||||
})
|
||||
}
|
||||
const handlerDelete = (index) => {
|
||||
fileList.value.splice(index, 1);
|
||||
}
|
||||
const changeCounty = (val) => {
|
||||
props.infoResult.countyname = countyOptions.value.find(item => item.value == val)?.label
|
||||
props.infoResult.streetid = ''
|
||||
|
|
@ -193,6 +303,13 @@ const changeStreet = (val) => {
|
|||
const changeCommunity = (val) => {
|
||||
props.infoResult.communityname = communityOptions.value.find(item => item.value == val)?.label
|
||||
}
|
||||
const shpCustomRequest = (file) => {
|
||||
const formData = new FormData()
|
||||
formData.append('files', file.file)
|
||||
uploadFile(formData).then(res => {
|
||||
emits('update:shppath',res[0].filePath)
|
||||
})
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.content{
|
||||
|
|
@ -214,4 +331,21 @@ const changeCommunity = (val) => {
|
|||
}
|
||||
}
|
||||
}
|
||||
:deep(.ant-image){
|
||||
margin-right: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.video-delete-btn {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
right: 10px;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
border-bottom-left-radius: 80%;
|
||||
background: rgb(0 0 0 / 20%);
|
||||
color: #fff;
|
||||
line-height: 30px;
|
||||
text-align: center;
|
||||
z-index: 999;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
:destroyOnClose="true"
|
||||
@ok="submit"
|
||||
@cancel="closeInfoModal">
|
||||
<InfoModal :infoData="infoData" :infoResult="infoResult"/>
|
||||
<InfoModal :infoData="infoData" :infoResult="infoResult" v-model:shppath="shppath"/>
|
||||
</a-modal>
|
||||
<a-modal
|
||||
width="50%"
|
||||
|
|
@ -59,6 +59,7 @@ const historyModal = ref(false)
|
|||
const historyCaseId = ref()
|
||||
const infoData = ref({})
|
||||
const infoResult = ref({})
|
||||
const shppath = ref()
|
||||
const [registerTable, { setTableData, reload, clearSelectedRowKeys, setPagination, setLoading }] =
|
||||
useTable({
|
||||
title: '图斑汇总',
|
||||
|
|
@ -98,8 +99,7 @@ const getHistoryList = (record) => {
|
|||
|
||||
}
|
||||
const submit = () => {
|
||||
console.log('submit',infoResult.value)
|
||||
UpdateCaseInfo(infoResult.value).then(res => {
|
||||
UpdateCaseInfo(infoResult.value,shppath.value).then(res => {
|
||||
console.log(res)
|
||||
message.success('修改成功')
|
||||
closeInfoModal()
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
allowClear
|
||||
style="width: 142px"
|
||||
v-model:value="props.patchSource"
|
||||
:options="patchSourceOptions"
|
||||
:options="tubanlaiyuanOptions"
|
||||
@change="
|
||||
(value) => {
|
||||
emits('auditProgressScreenChange', value, 'patchSource');
|
||||
|
|
@ -198,7 +198,7 @@
|
|||
import { getDetail } from '@/api/sys/WFSchemeInfo';
|
||||
import { flowStore } from '@/store/modules/flow';
|
||||
import { Audit } from '@/views/demo/workflow/task/process/page';
|
||||
import { dataProcessing } from '@/views/demo/tiankongdi/util'
|
||||
import { dataProcessing, tubanlaiyuanOptions } from '@/views/demo/tiankongdi/util'
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
|
||||
const props = defineProps([
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
allowClear
|
||||
style="width:130px;"
|
||||
v-model:value="params.tubanlaiyuan"
|
||||
:options="patchSourceOptions"
|
||||
:options="tubanlaiyuanOptions"
|
||||
/>
|
||||
</div>
|
||||
<div class="screen-item" style="margin-bottom:15px;">
|
||||
|
|
@ -216,7 +216,7 @@
|
|||
import { useUserStore } from '@/store/modules/user.ts'
|
||||
import { SearchOutlined, RollbackOutlined } from '@ant-design/icons-vue';
|
||||
import { patchSourceOptions, auditMapStatusOptions } from '@/utils/global'
|
||||
import { dataProcessing } from '@/views/demo/tiankongdi/util.ts'
|
||||
import { dataProcessing, tubanlaiyuanOptions } from '@/views/demo/tiankongdi/util.ts'
|
||||
import {showDrawBack, drawBackSpan} from '@/views/demo/util'
|
||||
|
||||
const userStore = useUserStore()
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
allowClear
|
||||
style="width: 130px"
|
||||
v-model:value="infoScreenData.tubanlaiyuan"
|
||||
:options="patchSourceOptions"
|
||||
:options="tubanlaiyuanOptions"
|
||||
@change="(value) => mapListScreenChange(value, 'tubanlaiyuan')"
|
||||
/>
|
||||
</div>
|
||||
|
|
@ -336,7 +336,7 @@ import {recoverCase} from '@/api/tiankongdi'
|
|||
import { flowStore } from '@/store/modules/flow';
|
||||
import { getDetail } from '@/api/sys/WFSchemeInfo';
|
||||
import { Audit } from '@/views/demo/workflow/task/process/page';
|
||||
import { dataProcessing } from '@/views/demo/tiankongdi/util.ts'
|
||||
import { dataProcessing, tubanlaiyuanOptions } from '@/views/demo/tiankongdi/util.ts'
|
||||
import { getChildrenTree } from '@/api/demo/system';
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
allowClear
|
||||
style="width:120px;"
|
||||
v-model:value="props.infoScreenData.patchSource"
|
||||
:options="patchSourceOptions"
|
||||
:options="tubanlaiyuanOptions"
|
||||
@change="(value) => emits('mapListScreenChange',value,'patchSource')"
|
||||
/>
|
||||
</div>
|
||||
|
|
@ -309,7 +309,7 @@ import ShowInfoModal from './ShowInfoModal/index.vue'
|
|||
import { flowStore } from '@/store/modules/flow';
|
||||
import { getDetail } from '@/api/sys/WFSchemeInfo';
|
||||
import { Audit } from '@/views/demo/workflow/task/process/page';
|
||||
import { dataProcessing } from '@/views/demo/tiankongdi/util.ts'
|
||||
import { dataProcessing, tubanlaiyuanOptions } from '@/views/demo/tiankongdi/util.ts'
|
||||
import {showDrawBack, drawBackSpan} from '@/views/demo/util'
|
||||
const userStore = useUserStore()
|
||||
const flowWfDataStore = flowStore();
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
import { asyncGetOptions } from '@/utils/global'
|
||||
export const dataProcessing = (value) => {
|
||||
if (!value) {
|
||||
return '0亩';
|
||||
|
|
@ -27,3 +28,4 @@ export const dataProcessingCount = (value) => {
|
|||
return Number(resultString).toFixed(2);
|
||||
}
|
||||
};
|
||||
export const tubanlaiyuanOptions = await asyncGetOptions('wfydtbly');
|
||||
|
|
|
|||
|
|
@ -50,8 +50,8 @@ export const SubjectKeyList = {
|
|||
'违法用地(卫片)': 'Subject_WPWF',
|
||||
'0000003': 'Subject_WPCK', //非法采矿(卫片)
|
||||
'0000004': 'Subject_GDFLH', //耕地非粮化
|
||||
'0000005': 'Subject_ZDWT1', //重点问题I类
|
||||
'0000006': 'Subject_ZDWT2', //重点问题II类
|
||||
'0000005': 'Subject_ZDWT1', //重点问题Ⅰ类
|
||||
'0000006': 'Subject_ZDWT2', //重点问题Ⅱ类
|
||||
'0000007': 'Subject_STBHHXJG', //生态保护红线监管
|
||||
'0000008': 'Subject_STXF', //生态修复
|
||||
}
|
||||
|
|
@ -165,6 +165,7 @@
|
|||
<a-form-item
|
||||
label=""
|
||||
:class="btnVisble ? 'l-task-btns' : 'l-task-btns btn-hidden'"
|
||||
v-if="formVisble"
|
||||
>
|
||||
<a-button
|
||||
v-for="(btn, index) in designerData.taskBtns"
|
||||
|
|
|
|||
Loading…
Reference in New Issue