徐景良 2024-08-19 10:52:02 +08:00
commit f46777ec49
79 changed files with 4828 additions and 1410 deletions

View File

@ -65,13 +65,13 @@
DTU和PLC完 DTU和PLC完
--> -->
<div class="online"> <div class="online">
<div class="title">案件线索统计</div> <div class="title">图斑线索统计</div>
<div class="online_con" id="container2"> <div class="online_con" id="container2">
</div> </div>
</div> </div>
<div class="industry"> <div class="industry">
<div class="title">案件分类统计</div> <div class="title">图斑分类统计</div>
<div class="industry_con" id="container3"></div> <div class="industry_con" id="container3"></div>
</div> </div>
</div> </div>
@ -138,7 +138,7 @@
<img class="centerimg" src="./images/newscase.png" /> <img class="centerimg" src="./images/newscase.png" />
<img class="centerimgActive" style="display: none;" <img class="centerimgActive" style="display: none;"
src="./images/newscase-active.png" /> src="./images/newscase-active.png" />
最新案件</span> 最新图斑</span>
</div> </div>
<!-- <div class="center_top_con_but" data-layerName="uavLayer" data-isActive="false"> <!-- <div class="center_top_con_but" data-layerName="uavLayer" data-isActive="false">
<span>无人机</span> <span>无人机</span>
@ -149,13 +149,13 @@
<img class="centerimg" src="./images/historycase.png" /> <img class="centerimg" src="./images/historycase.png" />
<img class="centerimgActive" style="display: none;" <img class="centerimgActive" style="display: none;"
src="./images/historycase-active.png" /> src="./images/historycase-active.png" />
历史案件</span> 历史图斑</span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="center_bot" style="position:relative;"> <div class="center_bot" style="position:relative;">
<div class="title">今日案件处理</div> <div class="title">今日图斑处理</div>
<div <div
style="position:absolute;left:0px;top:50px;height:25px;width:100%;overflow: hidden;overflow: auto;z-index:10;"> style="position:absolute;left:0px;top:50px;height:25px;width:100%;overflow: hidden;overflow: auto;z-index:10;">
<table class="panel-table" bordercolor="#0d48e0" border="1"> <table class="panel-table" bordercolor="#0d48e0" border="1">
@ -407,7 +407,7 @@
<!-- <div class="pop2" style="height: 650px;"> --> <!-- <div class="pop2" style="height: 650px;"> -->
<div class="pop2"> <div class="pop2">
<div class="pop-top"> <div class="pop-top">
案件详情 图斑详情
<span class="pop-close"></span> <span class="pop-close"></span>
</div> </div>
<!-- <div class="pop-content" style="height: 560px;"> --> <!-- <div class="pop-content" style="height: 560px;"> -->
@ -424,15 +424,15 @@
</thead> --> </thead> -->
<tbody style="line-height:40px;"> <tbody style="line-height:40px;">
<tr class="aaa" style="font-size: 16px;height:30px;" align="center"> <tr class="aaa" style="font-size: 16px;height:30px;" align="center">
<td style="font-size: 16px;height:30px;width:100px;">案件编号</td> <td style="font-size: 16px;height:30px;width:100px;">图斑编号</td>
<td class="caseinfoNo"></td> <td class="caseinfoNo"></td>
<td>图斑面积</td> <td>图斑面积</td>
<td class="caseinfoArea">&nbsp;</td> <td class="caseinfoArea">&nbsp;</td>
</tr> </tr>
<tr class="aaa" style="font-size: 16px;" align="center"> <tr class="aaa" style="font-size: 16px;" align="center">
<td>案件类型</td> <td>图斑类型</td>
<td class="caseinfoType">&nbsp;</td> <td class="caseinfoType">&nbsp;</td>
<td>案件描述</td> <td>图斑描述</td>
<td class="caseinfoDesc">&nbsp;</td> <td class="caseinfoDesc">&nbsp;</td>
</tr> </tr>
<tr class="aaa" style="font-size: 16px;" align="center"> <tr class="aaa" style="font-size: 16px;" align="center">
@ -442,7 +442,7 @@
<td class="caseinfoAddress">&nbsp;</td> <td class="caseinfoAddress">&nbsp;</td>
</tr> </tr>
<tr class="aaa" style="font-size: 16px;" align="center"> <tr class="aaa" style="font-size: 16px;" align="center">
<td>案件图片</td> <td>图斑图片</td>
<td colspan="3" class="caseinfoImages" style="text-align: left;"> <td colspan="3" class="caseinfoImages" style="text-align: left;">
</td> </td>
</tr> </tr>
@ -466,22 +466,22 @@
<!--弹出框--> <!--弹出框-->
<div class="pop3"> <div class="pop3">
<div class="pop-top"> <div class="pop-top">
案件处理信息 图斑处理信息
<span class="pop-close"></span> <span class="pop-close"></span>
</div> </div>
<div class="pop-content"> <div class="pop-content">
<table class="panel-table case-detail" bordercolor="#deefff" border="1"> <table class="panel-table case-detail" bordercolor="#deefff" border="1">
<tbody style="line-height:40px;"> <tbody style="line-height:40px;">
<tr class="aaa" style="font-size: 16px;height:30px;" align="center"> <tr class="aaa" style="font-size: 16px;height:30px;" align="center">
<td style="font-size: 16px;height:30px;width:100px;">案件编号</td> <td style="font-size: 16px;height:30px;width:100px;">图斑编号</td>
<td class="caseinfoNo"></td> <td class="caseinfoNo"></td>
<td>处理时间</td> <td>处理时间</td>
<td class="dealTime">&nbsp;</td> <td class="dealTime">&nbsp;</td>
</tr> </tr>
<tr class="aaa" style="font-size: 16px;" align="center"> <tr class="aaa" style="font-size: 16px;" align="center">
<td>案件类型</td> <td>图斑类型</td>
<td class="caseinfoType">&nbsp;</td> <td class="caseinfoType">&nbsp;</td>
<td>案件描述</td> <td>图斑描述</td>
<td class="caseinfoDesc">&nbsp;</td> <td class="caseinfoDesc">&nbsp;</td>
</tr> </tr>
<tr class="aaa" style="font-size: 16px;" align="center"> <tr class="aaa" style="font-size: 16px;" align="center">
@ -495,11 +495,11 @@
<td colspan="3" class="dealResult">&nbsp;</td> <td colspan="3" class="dealResult">&nbsp;</td>
</tr> </tr>
<tr class="aaa" style="font-size: 16px;" align="center"> <tr class="aaa" style="font-size: 16px;" align="center">
<td>案件图片</td> <td>图斑图片</td>
<td colspan="3" class="caseinfoImages" style="text-align: left;"> <td colspan="3" class="caseinfoImages" style="text-align: left;">
</td> </td>
</tr> </tr>
<!-- 案件处理图片 --> <!-- 图斑处理图片 -->
<tr class="aaa" style="font-size: 16px;" align="center"> <tr class="aaa" style="font-size: 16px;" align="center">
<td>处理图片</td> <td>处理图片</td>
<td colspan="3" class="dealImages"> <td colspan="3" class="dealImages">

View File

@ -240,7 +240,7 @@ function getCaseClassData() {
} }
}); });
} }
//今日案件处理 //今日图斑处理
$.ajax({ $.ajax({
type: "GET", type: "GET",
url: BASE_URL + "/api/DroneScreenDisplay/LoadDroneCaseDeal", url: BASE_URL + "/api/DroneScreenDisplay/LoadDroneCaseDeal",
@ -285,7 +285,7 @@ function getTodayCaseDeal() {
} }
// target2.on("click", ".click_pop2", function(){ // target2.on("click", ".click_pop2", function(){
// 今日案件处理详情 // 今日图斑处理详情
$(".click_pop2").click(function () { $(".click_pop2").click(function () {
$('.bgPop3,.pop3').show(); $('.bgPop3,.pop3').show();
var IMAGE_BASE_URL = " http://60.213.14.14:6070"; var IMAGE_BASE_URL = " http://60.213.14.14:6070";
@ -786,16 +786,16 @@ function updateData() {
// 获取最新上报 // 获取最新上报
getNewestReport(); getNewestReport();
//获取今日案件处理 //获取今日图斑处理
getTodayCaseDeal(); getTodayCaseDeal();
//线索办理图表数据更新 //线索办理图表数据更新
getDealingAndCompleteData(); getDealingAndCompleteData();
//案件线索统计表数据更新 //图斑线索统计表数据更新
getVillageData(); getVillageData();
//案件分类统计表数据更新 //图斑分类统计表数据更新
getCaseClassData(); getCaseClassData();
//本周图表数据更新 //本周图表数据更新
@ -840,8 +840,8 @@ var scn_data = {
factoryHeader: [ factoryHeader: [
{ "categories": "处理时间" }, { "categories": "处理时间" },
// {"categories":"上报时间"}, // {"categories":"上报时间"},
{ "categories": "案件类型" }, { "categories": "图斑类型" },
{ "categories": "案件描述" }, { "categories": "图斑描述" },
{ "categories": "乡镇" }, { "categories": "乡镇" },
{ "categories": "处理结果" } { "categories": "处理结果" }
], ],
@ -1057,7 +1057,7 @@ function loadCompleteCaseCountCharts(plc) {
}, },
xAxis: { xAxis: {
type: 'category', type: 'category',
data: ['案件总数', '已处理数'], data: ['图斑总数', '已处理数'],
axisLine: { axisLine: {
show: true, show: true,
lineStyle: { lineStyle: {
@ -1167,7 +1167,7 @@ function loadCompleteCaseCountCharts(plc) {
} }
loadCompleteCaseCountCharts(news_drow_dtu_num); loadCompleteCaseCountCharts(news_drow_dtu_num);
//加载乡镇案件线索统计表 //加载乡镇图斑线索统计表
var villageCharts = null; var villageCharts = null;
function loadVillageData(online) { function loadVillageData(online) {
let option = { let option = {
@ -1222,7 +1222,7 @@ function loadVillageData(online) {
}, },
series: [ series: [
{ {
name: '乡镇案件数量', name: '乡镇图斑数量',
type: 'pictorialBar', type: 'pictorialBar',
pictorialBar: '40%', pictorialBar: '40%',
// symbol: 'path://M0,10 L10,10 L5,0 L0,10 z', // symbol: 'path://M0,10 L10,10 L5,0 L0,10 z',
@ -1273,7 +1273,7 @@ function loadVillageData(online) {
} }
loadVillageData(news_online); loadVillageData(news_online);
//加载案件分类统计 //加载图斑分类统计
var caseClassCharts = null; var caseClassCharts = null;
function loadCaseClassCharts(industy) { function loadCaseClassCharts(industy) {
@ -1296,7 +1296,7 @@ function loadCaseClassCharts(industy) {
calculable: true, calculable: true,
series: [ series: [
{ {
name: '案件分类统计', name: '图斑分类统计',
type: 'pie', type: 'pie',
radius: ['35%', '55%'], radius: ['35%', '55%'],
center: ['50%', '40%'], center: ['50%', '40%'],

View File

@ -73,7 +73,7 @@ $(function () {
// flyTo: true // flyTo: true
// }, // },
// { // {
// name: "历史案件", // name: "历史图斑",
// type: "wms", // type: "wms",
// url: "http://175.27.168.120:8080/geoserver/feixian/wms", // url: "http://175.27.168.120:8080/geoserver/feixian/wms",
// layers: "tanyizhen:anjianjilu", // layers: "tanyizhen:anjianjilu",

View File

@ -468,7 +468,7 @@ function loadNewestReportPoint() {
var townshipName = document.createElement("div"); var townshipName = document.createElement("div");
townshipName.className = 'townshipName'; townshipName.className = 'townshipName';
var mytext = document.createTextNode("历史案件" + townships[t].historyCount); var mytext = document.createTextNode("历史图斑" + townships[t].historyCount);
townshipName.appendChild(mytext); townshipName.appendChild(mytext);
@ -490,7 +490,7 @@ function loadNewestReportPoint() {
var newestName = document.createElement("div"); var newestName = document.createElement("div");
newestName.className = 'newestName'; newestName.className = 'newestName';
var mytext = document.createTextNode("最新案件" + townships[t].newestCount); var mytext = document.createTextNode("最新图斑" + townships[t].newestCount);
newestName.appendChild(mytext); newestName.appendChild(mytext);
@ -811,7 +811,7 @@ map.on('load', function () {
'fill-opacity': 1, 'fill-opacity': 1,
} }
}); });
// 历史案件数量 // 历史图斑数量
map.addLayer({ map.addLayer({
id: `historyCaseLayer`, id: `historyCaseLayer`,
type: 'symbol', type: 'symbol',
@ -820,7 +820,7 @@ map.on('load', function () {
layout: { layout: {
'icon-image': '', 'icon-image': '',
visibility: 'none', visibility: 'none',
'text-field': '历史案件{count}',//此属性为需要显示的字段 'text-field': '历史图斑{count}',//此属性为需要显示的字段
'text-size': 12, 'text-size': 12,
'text-offset': [0, 1], 'text-offset': [0, 1],
'text-allow-overlap': false, // 是否允许文本重叠(可选,默认值为 false。 'text-allow-overlap': false, // 是否允许文本重叠(可选,默认值为 false。
@ -835,7 +835,7 @@ map.on('load', function () {
'text-translate-anchor': 'map', // 文本的平移锚点,即相对的参考物(可选,可选值为 map、viewport默认为 map 'text-translate-anchor': 'map', // 文本的平移锚点,即相对的参考物(可选,可选值为 map、viewport默认为 map
}, },
}) })
// 最新案件数量 // 最新图斑数量
map.addLayer({ map.addLayer({
id: `newCaseLayer`, id: `newCaseLayer`,
type: 'symbol', type: 'symbol',
@ -844,7 +844,7 @@ map.on('load', function () {
layout: { layout: {
'icon-image': '', 'icon-image': '',
visibility: 'none', visibility: 'none',
'text-field': '最新案件{newestCount}',//此属性为需要显示的字段 'text-field': '最新图斑{newestCount}',//此属性为需要显示的字段
'text-size': 12, 'text-size': 12,
'text-offset': [0, -1], 'text-offset': [0, -1],
'text-allow-overlap': false, // 是否允许文本重叠(可选,默认值为 false。 'text-allow-overlap': false, // 是否允许文本重叠(可选,默认值为 false。
@ -1066,7 +1066,7 @@ map.on('load', function () {
// "icon-image": "cat" // "icon-image": "cat"
// } // }
// }); // });
//历史案件 //历史图斑
function getPolygonCenter(pList) { //获取多边形中心点 function getPolygonCenter(pList) { //获取多边形中心点
var area = 0; var area = 0;
var x = 0; var x = 0;
@ -1176,7 +1176,7 @@ map.on('load', function () {
return item.name == e.features[0].properties.XZQMC; return item.name == e.features[0].properties.XZQMC;
}) })
var str = "乡镇名称:" + e.features[0].properties.XZQMC + "<br> &nbsp;<br>案件数量:" + townshipInfo[0].reportCount; var str = "乡镇名称:" + e.features[0].properties.XZQMC + "<br> &nbsp;<br>图斑数量:" + townshipInfo[0].reportCount;
popup.setLngLat([e.lngLat.lng, e.lngLat.lat]).setHTML("<p style='color:#333;font-weight:bold;'>" + str + "</p>").addTo(map); popup.setLngLat([e.lngLat.lng, e.lngLat.lat]).setHTML("<p style='color:#333;font-weight:bold;'>" + str + "</p>").addTo(map);
}); });
@ -1228,7 +1228,7 @@ map.on('load', function () {
let jrajs = townshipInfo[0].todayCount || '' let jrajs = townshipInfo[0].todayCount || ''
let lsajs = townshipInfo[0].historyCount || '' let lsajs = townshipInfo[0].historyCount || ''
var str = "区域名称:" + e.features[0].properties.name + "<br> &nbsp;<br>案件数量:" + townshipInfo[0].reportCount; var str = "区域名称:" + e.features[0].properties.name + "<br> &nbsp;<br>图斑数量:" + townshipInfo[0].reportCount;
popup.setLngLat([e.lngLat.lng, e.lngLat.lat]).setHTML("<p style='color:#333;font-weight:bold;'>" + str + "</p>").addTo(map); popup.setLngLat([e.lngLat.lng, e.lngLat.lat]).setHTML("<p style='color:#333;font-weight:bold;'>" + str + "</p>").addTo(map);
if (e.features.length > 0) { if (e.features.length > 0) {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 531 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 918 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 292 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -16,9 +16,9 @@ enum Api {
LoadReformCaseCount = '/api/DroneCaseInfoFLH/LoadTaskCount', LoadReformCaseCount = '/api/DroneCaseInfoFLH/LoadTaskCount',
// 非粮化 整改审核第二层 // 非粮化 整改审核第二层
LoadTaskIllegalDetailList = '/api/DroneCaseInfoFLH/LoadTaskIllegalDetailList', LoadTaskIllegalDetailList = '/api/DroneCaseInfoFLH/LoadTaskIllegalDetailList',
// 案件详情 // 图斑详情
GetCaseInfoById = '/api/DroneCaseInfoFLH/GetCaseInfoById', GetCaseInfoById = '/api/DroneCaseInfoFLH/GetCaseInfoById',
// 非粮化 图斑调整 更新案件行政区划 // 非粮化 图斑调整 更新图斑行政区划
UpdateDroneCaseInfo = '/api/DroneCaseInfoFLH/UpdateDroneCaseInfo', UpdateDroneCaseInfo = '/api/DroneCaseInfoFLH/UpdateDroneCaseInfo',
// 分割还原 // 分割还原
CaseRecover = '/api/DroneCaseInfoFLH/CaseRecover', CaseRecover = '/api/DroneCaseInfoFLH/CaseRecover',

View File

@ -14,9 +14,9 @@ enum Api {
// complete-导出 // complete-导出
Get_ExportCaseInfoList = '/api/DroneCaseinfo/ExportCaseInfoList', Get_ExportCaseInfoList = '/api/DroneCaseinfo/ExportCaseInfoList',
// 案件详情 // 图斑详情
Get_getCaseInfo = '/api/DroneCaseinfo/GetCaseInfo', Get_getCaseInfo = '/api/DroneCaseinfo/GetCaseInfo',
// 获取案件处理流程 // 获取图斑处理流程
Get_GetCaseFlowLog = '/api/DroneCaseinfo/GetCaseFlowLog', Get_GetCaseFlowLog = '/api/DroneCaseinfo/GetCaseFlowLog',
// 处理详情 // 处理详情
Get_GetDroneCaseDeal = '/api/DroneCaseinfo/GetDroneCaseDeal', Get_GetDroneCaseDeal = '/api/DroneCaseinfo/GetDroneCaseDeal',
@ -61,7 +61,7 @@ export function fun_ExportCaseInfoList(params) {
}); });
} }
// 案件详情 // 图斑详情
export function fun_getCaseInfo(params) { export function fun_getCaseInfo(params) {
return defHttp.get<responsesmodel>({ return defHttp.get<responsesmodel>({
url: Api.Get_getCaseInfo, url: Api.Get_getCaseInfo,
@ -77,7 +77,7 @@ export function fun_GetCaseFlowLog(params) {
}); });
} }
// 获取案件处理流程 // 获取图斑处理流程
export function fun_GetDroneCaseDeal(params) { export function fun_GetDroneCaseDeal(params) {
return defHttp.get<droneCaseDealModel>({ return defHttp.get<droneCaseDealModel>({
url: Api.Get_GetDroneCaseDeal, url: Api.Get_GetDroneCaseDeal,

View File

@ -80,17 +80,27 @@ enum Api {
CaseOffence = '/api/DroneCaseInfoSingle/CaseOffence', CaseOffence = '/api/DroneCaseInfoSingle/CaseOffence',
LoadCaseInfoListOffence = '/api/DroneCaseInfoSingle/LoadCaseInfoListOffence', LoadCaseInfoListOffence = '/api/DroneCaseInfoSingle/LoadCaseInfoListOffence',
DealIllegalCaseInfo = '/api/DroneCaseInfoSingle/dealIllegalCaseInfo', DealIllegalCaseInfo = '/api/DroneCaseInfoSingle/dealIllegalCaseInfo',
// 修改案件-获取案件列表 // 修改图斑-获取图斑列表
LoadCaseInfoListForUpdate = '/api/DroneCaseInfoSingle/LoadCaseInfoListForUpdate', LoadCaseInfoListForUpdate = '/api/DroneCaseInfoSingle/LoadCaseInfoListForUpdate',
// 修改案件-获取单个案件信息 // 修改图斑-获取单个图斑信息
LoadCaseInfoById = '/api/DroneCaseInfoSingle/LoadCaseInfoById', LoadCaseInfoById = '/api/DroneCaseInfoSingle/LoadCaseInfoById',
// 修改案件-修改案件信息 // 修改图斑-修改图斑信息
UpdateCaseInfo = '/api/DroneCaseInfoSingle/UpdateCaseInfo', UpdateCaseInfo = '/api/DroneCaseInfoSingle/UpdateCaseInfo',
// 修改案件-获取案件历史信息 // 修改图斑-获取图斑历史信息
LoadCaseHistoryInfoList = '/api/DroneCaseInfoSingle/LoadCaseHistoryInfoList', LoadCaseHistoryInfoList = '/api/DroneCaseInfoSingle/LoadCaseHistoryInfoList',
// geo服务增加
ShpGeoLayerAdd = '/api/ShpGeoLayer/Add',
// geo列表
ShpGeoLayerLoadPage = '/api/ShpGeoLayer/LoadPage',
// geo获取
ShpGeoLayerGet = '/api/ShpGeoLayer/Get',
// geo更新
ShpGeoLayerUpdateLayer = '/api/ShpGeoLayer/UpdateLayer',
// geo删除
ShpGeoLayerDelete = '/api/ShpGeoLayer/Delete',
// geo解析shp文件
ShpGeoLayerParseShpInfo = '/api/ShpGeoLayer/ParseShpInfo',
} }
export const getPositionsTree = (params?: AccountParams) => export const getPositionsTree = (params?: AccountParams) =>
defHttp.get<AccountListGetResultModel>({ url: Api.PositionsTree, params }); defHttp.get<AccountListGetResultModel>({ url: Api.PositionsTree, params });
@ -390,6 +400,22 @@ export function LoadCaseHistoryInfoList(params:{key: string}) {
}); });
} }
export const ShpGeoLayerAdd = (params) =>
defHttp.post({ url: Api.ShpGeoLayerAdd, params });
export const ShpGeoLayerLoadPage = (params) =>
defHttp.get({ url: Api.ShpGeoLayerLoadPage, params });
export const ShpGeoLayerGet = (params) =>
defHttp.get({ url: Api.ShpGeoLayerGet, params });
export const ShpGeoLayerUpdateLayer = (params) =>
defHttp.post({ url: Api.ShpGeoLayerUpdateLayer, params });
export const ShpGeoLayerDelete = (params) =>
defHttp.post({ url: Api.ShpGeoLayerDelete + '/' + params.id });
export const ShpGeoLayerParseShpInfo = (params) =>
defHttp.post({ url: Api.ShpGeoLayerParseShpInfo + "?srid=" + params.srid + "&tableName=" + params.tableName + "&zipFilePath=" + params.zipFilePath });

View File

@ -16,7 +16,7 @@ enum Api {
LoadReformCaseCount = '/api/DroneCaseInfoSatellite/LoadReformCaseCount', LoadReformCaseCount = '/api/DroneCaseInfoSatellite/LoadReformCaseCount',
// 非法采矿整改审核第二层 // 非法采矿整改审核第二层
LoadTaskIllegalDetailList = '/api/DroneCaseInfoSatellite/LoadTaskIllegalDetailList', LoadTaskIllegalDetailList = '/api/DroneCaseInfoSatellite/LoadTaskIllegalDetailList',
// 案件详情 // 图斑详情
GetCaseInfoById = '/api/DroneCaseInfoSatellite/GetCaseInfoById', GetCaseInfoById = '/api/DroneCaseInfoSatellite/GetCaseInfoById',
} }
export function LoadCaiKuangTaskList(params) { export function LoadCaiKuangTaskList(params) {

View File

@ -11,25 +11,25 @@ import {
} from './model/index'; } from './model/index';
enum Api { enum Api {
// 获取案件详情步骤条 // 获取图斑详情步骤条
GetCaseFlowLog = '/api/DroneCaseinfo/GetCaseFlowLog', GetCaseFlowLog = '/api/DroneCaseinfo/GetCaseFlowLog',
// 获取案件处理详情 // 获取图斑处理详情
GetDroneCaseDeal = '/api/DroneCaseinfo/GetDroneCaseDeal', GetDroneCaseDeal = '/api/DroneCaseinfo/GetDroneCaseDeal',
// 获取案件详情 // 获取图斑详情
GetCaseInfo = '/api/DroneCaseinfo/GetCaseInfo', GetCaseInfo = '/api/DroneCaseinfo/GetCaseInfo',
// 案件列表 // 图斑列表
// LoadCaseInfoList = '/api/DroneCaseinfo/LoadCaseInfoList', // LoadCaseInfoList = '/api/DroneCaseinfo/LoadCaseInfoList',
LoadCaseInfoList = '/api/DroneCaseInfoSingle/LoadCaseInfoList', LoadCaseInfoList = '/api/DroneCaseInfoSingle/LoadCaseInfoList',
// 导出案件 // 导出图斑
ExportCaseInfo = "/api/DroneCaseInfoSingle/DroneCaseInfoExport", ExportCaseInfo = "/api/DroneCaseInfoSingle/DroneCaseInfoExport",
// 案件统计列表 // 图斑统计列表
// 获取GeoJson图层 // 获取GeoJson图层
GetDroneGeoJson = '/api/DroneCaseinfo/GetDroneGeoJson', GetDroneGeoJson = '/api/DroneCaseinfo/GetDroneGeoJson',
// 上报案件(案件判读保存) // 上报图斑(图斑判读保存)
AddDroneCaseInfo = '/api/DroneCaseinfo/AddDroneCaseInfo', AddDroneCaseInfo = '/api/DroneCaseinfo/AddDroneCaseInfo',
// 案件判读 // 图斑判读
UpdateDroneCaseInfoIntact = '/api/DroneCaseinfo/UpdateDroneCaseInfoIntact', UpdateDroneCaseInfoIntact = '/api/DroneCaseinfo/UpdateDroneCaseInfoIntact',
// 关闭案件 // 关闭图斑
CloseDroneCaseInfo = '/api/DroneCaseinfo/CloseDroneCaseInfo', CloseDroneCaseInfo = '/api/DroneCaseinfo/CloseDroneCaseInfo',
// 上传图片任务列表 // 上传图片任务列表
PicListTask = '/api/DroneShpImageexif/ListTask', PicListTask = '/api/DroneShpImageexif/ListTask',

View File

@ -12,20 +12,20 @@ import {
enum Api { enum Api {
// 获取待办任务统计数据 // 获取待办任务统计数据
LoadTaskCount = '/api/DroneCaseInfoSingle/LoadTaskCount', LoadTaskCount = '/api/DroneCaseInfoSingle/LoadTaskCount',
// 获取案件信息统计数据 // 获取图斑信息统计数据
LoadDroneCaseInfoCount = '/api/DroneCaseInfoSingle/LoadDroneCaseInfoCount', LoadDroneCaseInfoCount = '/api/DroneCaseInfoSingle/LoadDroneCaseInfoCount',
// 分页获取案件信息列表 // 分页获取图斑信息列表
LoadDroneCaseInfoDetail = '/api/DroneCaseInfoSingle/LoadTasklList', LoadDroneCaseInfoDetail = '/api/DroneCaseInfoSingle/LoadTasklList',
// 分页获取任务信息列表 // 分页获取任务信息列表
LoadTaskDetailList = '/api/DroneCaseInfoSingle/LoadTaskDetailList', LoadTaskDetailList = '/api/DroneCaseInfoSingle/LoadTaskDetailList',
// 收藏案件 // 收藏图斑
AddCaseFavorite = '/api/DroneCaseInfoSingle/AddCaseFavorite', AddCaseFavorite = '/api/DroneCaseInfoSingle/AddCaseFavorite',
// 获取收藏案件列表 // 获取收藏图斑列表
FavoriteCaseList = '/api/DroneCaseinfo/FavoriteCaseList', FavoriteCaseList = '/api/DroneCaseinfo/FavoriteCaseList',
DeleteFavoriteCase = '/api/DroneCaseInfoSingle/DeleteFavoriteCase', DeleteFavoriteCase = '/api/DroneCaseInfoSingle/DeleteFavoriteCase',
// 获取案件详情 // 获取图斑详情
GetCaseInfoById = '/api/DroneCaseInfoSingle/GetCaseInfoById', GetCaseInfoById = '/api/DroneCaseInfoSingle/GetCaseInfoById',
// 更新案件行政区划 // 更新图斑行政区划
UpdateDroneCaseInfo = '/api/DroneCaseInfoSingle/UpdateDroneCaseInfo', UpdateDroneCaseInfo = '/api/DroneCaseInfoSingle/UpdateDroneCaseInfo',
// 督办流程 // 督办流程
Supervise = '/api/WFProcess/Supervise', Supervise = '/api/WFProcess/Supervise',
@ -47,7 +47,7 @@ enum Api {
GetPolygonCenter = '/api/DroneCaseInfoSingle/GetCenterPoints', GetPolygonCenter = '/api/DroneCaseInfoSingle/GetCenterPoints',
// 获取用户访问机构权限 // 获取用户访问机构权限
GetUserOrgs = '/api/Check/GetOrgs', GetUserOrgs = '/api/Check/GetOrgs',
// 大屏下发案件统计 // 大屏下发图斑统计
IssuedStatitical = "/api/DroneScreenDisplay/CaseOffenceXiaFa", IssuedStatitical = "/api/DroneScreenDisplay/CaseOffenceXiaFa",
// 大屏核实新增统计 // 大屏核实新增统计
VerifyStatitical = "/api/DroneScreenDisplay/CaseOffenceCheckAdd", VerifyStatitical = "/api/DroneScreenDisplay/CaseOffenceCheckAdd",

View File

@ -1,9 +1,9 @@
<template> <template>
<div class="my-form-viewer"> <div class="my-form-viewer">
<div v-show="tabsColumns.length > 1"> <div v-show="tabsColumns.length > 1">
<a-tabs style="width: 100%" @change="tabsChange"> <a-tabs v-model:activeKey="activeTabsKey" style="width: 100%" @change="tabsChange">
<a-tab-pane v-for="(colItem, index) in tabsColumns" :tab="colItem.label" :key="index"> <a-tab-pane v-for="(colItem, index) in tabsColumns" :tab="colItem.label" :key="index">
<BasicForm ref="tabsFormRef" @register="registerForm"> <BasicForm :ref="`tabsFormRef${index}`" @register="registerForm" :key="index">
<template #CardGroup> <template #CardGroup>
<CardGourp <CardGourp
v-if="cardGroupData.length > 0 && cardGroupData[index]" v-if="cardGroupData.length > 0 && cardGroupData[index]"
@ -91,8 +91,13 @@
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const emit = defineEmits(['getFormSuccess']); const emit = defineEmits(['getFormSuccess']);
const subTableDataStore = subTableStore(); const subTableDataStore = subTableStore();
const tabsFormRef = ref() const tabsFormRef0 = ref();
const formRef = ref() const tabsFormRef1 = ref();
const tabsFormRef2 = ref();
const tabsFormRef3 = ref();
const tabsFormRef4 = ref();
const formRef = ref();
const activeTabsKey = ref();
let formColumns: FormSchema[] = []; let formColumns: FormSchema[] = [];
const props = defineProps({ const props = defineProps({
formConfig: Object, formConfig: Object,
@ -211,7 +216,7 @@
tabElement.schemas.forEach((element) => { tabElement.schemas.forEach((element) => {
if (element.field == props.formRelationId) { if (element.field == props.formRelationId) {
keyValue.value = element.componentProps.fieldName; keyValue.value = element.componentProps.fieldName;
getFormDetail(); getFormDetail(scheme.formInfo.tabList);
disDetail = true; disDetail = true;
} }
if (element.component === 'InputGuid') { if (element.component === 'InputGuid') {
@ -341,11 +346,11 @@
} }
setTimeout(() => { setTimeout(() => {
setFieldsValue(FieldsValue.value); setFieldsValue(FieldsValue.value);
clearValidate() clearValidate();
}, 10); }, 10);
} }
async function getFormDetail() { async function getFormDetail(element) {
var instance = props.instanceInfo; var instance = props.instanceInfo;
const querys = { const querys = {
id: props.formVerison, id: props.formVerison,
@ -370,7 +375,21 @@
}); });
} }
cardGourpFormData.value = obj; cardGourpFormData.value = obj;
subTableDataStore.setGroupData(obj); let cardGroupKeys = [];
element.forEach((tabItem) => {
tabItem.schemas.forEach((elItem) => {
if (elItem.component == 'CardGroup' && elItem.field.indexOf('guid') == -1) {
cardGroupKeys = cardGroupGetKey(elItem, cardGroupKeys);
}
});
});
let setGroupDataObj = {};
Object.keys(obj).forEach((itemKey) => {
if (cardGroupKeys.includes(itemKey)) {
setGroupDataObj[itemKey] = obj[itemKey];
}
});
subTableDataStore.setGroupData(setGroupDataObj);
subTableDataStore.setToSetGroupData(); subTableDataStore.setToSetGroupData();
FieldsValue.value = obj; FieldsValue.value = obj;
setFieldsValue({ setFieldsValue({
@ -409,17 +428,29 @@
emit('getFormSuccess', data[mainTable][0]); emit('getFormSuccess', data[mainTable][0]);
} }
const groupRef = ref(); const groupRef = ref();
const cardGroupGetKey = (element, resultList) => {
resultList.push(element.field);
element.componentProps.options.forEach((groupItem) => {
groupItem.children.forEach((childItem) => {
resultList.push(childItem.field);
if (childItem.component == 'CardGroup' && childItem.field.indexOf('guid') == -1) {
resultList = cardGroupGetKey(childItem, resultList);
}
});
});
return resultList;
};
async function getForm() { async function getForm() {
try { try {
// //
if (groupRef.value) { if (groupRef.value) {
if (groupRef.value.length > 0) { if (groupRef.value.length > 0) {
groupRef.value.forEach(async (item) => { for (let index = 0; index < groupRef.value.length; index++) {
await item.changeForm(); await groupRef.value[index].changeForm();
if (!(item.verify())) { if (!(await groupRef.value[index].verify())) {
return false; return false;
} }
}) }
} else { } else {
await groupRef.value.changeForm(); await groupRef.value.changeForm();
if (!(await groupRef.value.verify())) { if (!(await groupRef.value.verify())) {
@ -428,26 +459,64 @@
} }
} }
console.log(subTableDataStore.getGroupData); console.log(subTableDataStore.getGroupData);
let resultObj = {} let resultObj = {};
if(tabsFormRef.value){ let values;
tabsFormRef.value.forEach((item,index) => { switch (activeTabsKey.value) {
console.log(item.getFieldsValue(),index) case 0:
let data = item.getFieldsValue() resultObj = tabsFormRef0.value[0].getFieldsValue();
Object.keys(data).forEach(key => { tabsFormRef0.value[0].setFieldsValue({
if(!resultObj[key]){ ...resultObj,
resultObj[key] = data[key] ...subTableDataStore.getGroupData,
} });
}) await tabsFormRef0.value[0].validate();
}) values = tabsFormRef0.value[0].getFieldsValue();
break;
case 1:
resultObj = tabsFormRef1.value[0].getFieldsValue();
tabsFormRef1.value[0].setFieldsValue({
...resultObj,
...subTableDataStore.getGroupData,
});
await tabsFormRef1.value[0].validate();
values = tabsFormRef1.value[0].getFieldsValue();
console.log('resultValue111', JSON.parse(JSON.stringify(values)));
break;
case 2:
resultObj = tabsFormRef2.value[0].getFieldsValue();
tabsFormRef2.value[0].setFieldsValue({
...resultObj,
...subTableDataStore.getGroupData,
});
await tabsFormRef2.value[0].validate();
values = tabsFormRef2.value[0].getFieldsValue();
break;
case 3:
resultObj = tabsFormRef3.value[0].getFieldsValue();
tabsFormRef3.value[0].setFieldsValue({
...resultObj,
...subTableDataStore.getGroupData,
});
await tabsFormRef3.value[0].validate();
values = tabsFormRef3.value[0].getFieldsValue();
break;
case 4:
resultObj = tabsFormRef4.value[0].getFieldsValue();
tabsFormRef4.value[0].setFieldsValue({
...resultObj,
...subTableDataStore.getGroupData,
});
await tabsFormRef4.value[0].validate();
values = tabsFormRef4.value[0].getFieldsValue();
break;
default:
resultObj = getFieldsValue();
setFieldsValue({
...resultObj,
...subTableDataStore.getGroupData,
});
values = await validate();
break;
} }
//form
setFieldsValue({
...resultObj,
...subTableDataStore.getGroupData,
});
//
let values = await validate();
for (const key in values) { for (const key in values) {
for (const fieKey in FieldsValue.value) { for (const fieKey in FieldsValue.value) {
if (key == fieKey) { if (key == fieKey) {
@ -507,8 +576,8 @@
if (props.formVerison) { if (props.formVerison) {
getFormHistory(); getFormHistory();
} }
tabsFormRef.value && tabsFormRef.value.clearValidate(); // tabsFormRef.value && tabsFormRef.value.clearValidate();
formRef.value && formRef.value.clearValidate(); // formRef.value && formRef.value.clearValidate();
}); });
function radioVal() { function radioVal() {
console.log('radioVal'); console.log('radioVal');

View File

@ -69,6 +69,10 @@ export const patchSourceOptions = [
label: '省级矿产卫片图斑', label: '省级矿产卫片图斑',
value: '省级矿产卫片图斑', value: '省级矿产卫片图斑',
}, },
{
label: '省级月度图斑',
value: '省级月度图斑',
},
]; ];
export const isOverdueOptions = [ export const isOverdueOptions = [
{ {

View File

@ -70,7 +70,7 @@
message.warning('请选择一条数据'); message.warning('请选择一条数据');
return; return;
} }
modalData.title = type === 'bindCaseTypes' ? '分配案件类型' : '分配角色'; modalData.title = type === 'bindCaseTypes' ? '分配图斑类型' : '分配角色';
modalData.topicId = row[0].topicId; modalData.topicId = row[0].topicId;
modalData.type = type; modalData.type = type;
openModal.value = true; openModal.value = true;

View File

@ -13,7 +13,7 @@ export const columns = [
dataIndex: 'topicName', dataIndex: 'topicName',
}, },
{ {
title: '案件类型', title: '图斑类型',
dataIndex: 'caseTypes', dataIndex: 'caseTypes',
}, },
{ {
@ -46,7 +46,7 @@ export const emptyTopicItem = {
}; };
export const caseTypesColumns = [ export const caseTypesColumns = [
{ {
title: '案件名称', title: '图斑名称',
dataIndex: 'itemName', dataIndex: 'itemName',
}, },
{ {

View File

@ -29,7 +29,7 @@
<BasicModal <BasicModal
v-bind="$attrs" v-bind="$attrs"
@register="registerModal" @register="registerModal"
title="案件详情" title="图斑详情"
:canFullscreen="false" :canFullscreen="false"
:defaultFullscreen="true" :defaultFullscreen="true"
:showCancelBtn="false" :showCancelBtn="false"
@ -72,7 +72,7 @@
dataIndex: 'communityname', dataIndex: 'communityname',
}, },
{ {
title: '案件描述', title: '图斑描述',
dataIndex: 'case_description', dataIndex: 'case_description',
}, },
{ {
@ -105,7 +105,7 @@
}, },
{ {
title: '下发时间', title: '下发时间',
dataIndex: 'createtime', dataIndex: 'synchronoustime',
}, },
{ {
title: '项目名称', title: '项目名称',

View File

@ -229,10 +229,10 @@ export const searchFormSchema: FormSchema[] = [
component: 'RangePicker', component: 'RangePicker',
colProps: { span: 8 }, colProps: { span: 8 },
componentProps: { componentProps: {
format: 'YYYY-MM', format: 'YYYY-MM-DD',
picker: 'month', // picker: 'month',
placeholder: ['开始日期', '结束日期'], placeholder: ['开始日期', '结束日期'],
defaultValue: [dayjs(dayjs(), 'YYYY-MM'), dayjs(dayjs(), 'YYYY-MM')] defaultValue: [dayjs(dayjs().add(-1, 'day'), 'YYYY-MM-DD'), dayjs(dayjs().add(-1, 'day'), 'YYYY-MM-DD')]
}, },
}, },
]; ];

View File

@ -190,7 +190,7 @@
<a-modal v-model:open="open_chuantou" title="导出文件类型" :footer="null"> <a-modal v-model:open="open_chuantou" title="导出文件类型" :footer="null">
<div> <div>
<a-button class="exportbutton" @click="handleExport('chuantou_execl')"> <a-button class="exportbutton" @click="handleExport('chuantou_execl')">
统计明细案件信息execl 统计明细图斑信息execl
</a-button> </a-button>
<a-button class="exportbutton" @click="handleExport('chuantou_shp')"> <a-button class="exportbutton" @click="handleExport('chuantou_shp')">
统计明细矢量数据shp 统计明细矢量数据shp
@ -279,9 +279,14 @@
}, },
beforeFetch: (data) => { beforeFetch: (data) => {
// //
//
var temp = { var temp = {
startTime: dayjs(data.startTime).startOf('month').format('YYYY-MM-DD'), startTime: data.startTime
endTime: dayjs(data.endTime).endOf('month').format('YYYY-MM-DD HH:mm:ss'), ? dayjs(data.startTime).startOf('day').format('YYYY-MM-DD')
: dayjs().startOf('day').add(-1, 'day').format('YYYY-MM-DD'),
endTime: data.endTime
? dayjs(data.endTime).endOf('day').format('YYYY-MM-DD HH:mm:ss')
: dayjs().endOf('day').add(-1, 'day').format('YYYY-MM-DD HH:mm:ss'),
}; };
return temp; return temp;
}, },
@ -310,8 +315,8 @@
const searchForm = reactive<searchListSchema>({ const searchForm = reactive<searchListSchema>({
AreaId: record.countyid, AreaId: record.countyid,
CaseType: CaseType, CaseType: CaseType,
startTime: dayjs(searchParams.value?.startTime).startOf('month').format('YYYY-MM-DD'), startTime: dayjs(searchParams.value?.startTime).startOf('day').format('YYYY-MM-DD'),
endTime: dayjs(searchParams.value?.endTime).endOf('month').format('YYYY-MM-DD HH:mm:ss'), endTime: dayjs(searchParams.value?.endTime).endOf('day').format('YYYY-MM-DD HH:mm:ss'),
page: 1, page: 1,
limit: 10, limit: 10,
}); });
@ -407,22 +412,22 @@
let params: any = {}; let params: any = {};
let afterTitle = ''; let afterTitle = '';
if ( if (
dayjs(searchParams.value?.startTime).startOf('month').format('YYYY-MM') === dayjs(searchParams.value?.startTime).startOf('day').format('YYYY-MM-DD') ===
dayjs(searchParams.value?.endTime).endOf('month').format('YYYY-MM') dayjs(searchParams.value?.endTime).endOf('day').format('YYYY-MM-DD')
) { ) {
afterTitle = dayjs(searchParams.value?.startTime).startOf('month').format('YYYY-MM'); afterTitle = dayjs(searchParams.value?.startTime).startOf('day').format('YYYY-MM-DD');
} else { } else {
afterTitle = afterTitle =
dayjs(searchParams.value?.startTime).startOf('month').format('YYYY-MM') + dayjs(searchParams.value?.startTime).startOf('day').format('YYYY-MM-DD') +
'至' + '至' +
dayjs(searchParams.value?.endTime).endOf('month').format('YYYY-MM'); dayjs(searchParams.value?.endTime).endOf('day').format('YYYY-MM-DD');
} }
switch (exportType) { switch (exportType) {
case 'chuantou_execl': case 'chuantou_execl':
// 穿-execl // 穿-execl
url = VITE_GLOB_API_URL + '/api/DroneCaseInfoSingle/ExprotCaseListByType'; url = VITE_GLOB_API_URL + '/api/DroneCaseInfoSingle/ExprotCaseListByType';
fileName = fileName =
'统计明细案件信息 ' + '统计明细图斑信息 ' +
tablist[activeKey.value].countyname + tablist[activeKey.value].countyname +
'-' + '-' +
tablist[activeKey.value].label + tablist[activeKey.value].label +
@ -431,7 +436,7 @@
'.xls'; '.xls';
break; break;
case 'chuantou_shp': case 'chuantou_shp':
// 穿-shp // 穿-shp
url = VITE_GLOB_API_URL + '/api/DroneCaseInfoSingle/ExportShapefile'; url = VITE_GLOB_API_URL + '/api/DroneCaseInfoSingle/ExportShapefile';
fileName = fileName =
'统计明细矢量数据 ' + '统计明细矢量数据 ' +
@ -468,8 +473,8 @@
} }
if (['mingxi_1', 'mingxi_2', 'mingxi_3'].includes(exportType)) { if (['mingxi_1', 'mingxi_2', 'mingxi_3'].includes(exportType)) {
params = { params = {
startTime: dayjs(searchParams.value?.startTime).startOf('month').format('YYYY-MM-DD'), startTime: dayjs(searchParams.value?.startTime).startOf('day').format('YYYY-MM-DD'),
endTime: dayjs(searchParams.value?.endTime).endOf('month').format('YYYY-MM-DD HH:mm:ss'), endTime: dayjs(searchParams.value?.endTime).endOf('day').format('YYYY-MM-DD HH:mm:ss'),
}; };
} }

View File

@ -29,7 +29,7 @@
<BasicModal <BasicModal
v-bind="$attrs" v-bind="$attrs"
@register="registerModal" @register="registerModal"
title="案件详情" title="图斑详情"
:canFullscreen="false" :canFullscreen="false"
:defaultFullscreen="true" :defaultFullscreen="true"
:showCancelBtn="false" :showCancelBtn="false"
@ -73,7 +73,7 @@
dataIndex: 'communityname', dataIndex: 'communityname',
}, },
{ {
title: '案件描述', title: '图斑描述',
dataIndex: 'case_description', dataIndex: 'case_description',
}, },
{ {
@ -97,7 +97,7 @@
dataIndex: 'is_illegal', dataIndex: 'is_illegal',
}, },
{ {
title: '案件状态', title: '图斑状态',
dataIndex: 'handle_status_name', dataIndex: 'handle_status_name',
}, },
{ {

View File

@ -190,7 +190,7 @@
<a-modal v-model:open="open_chuantou" title="导出文件类型" :footer="null"> <a-modal v-model:open="open_chuantou" title="导出文件类型" :footer="null">
<div> <div>
<a-button class="exportbutton" @click="handleExport('chuantou_execl')"> <a-button class="exportbutton" @click="handleExport('chuantou_execl')">
统计明细案件信息execl 统计明细图斑信息execl
</a-button> </a-button>
<a-button class="exportbutton" @click="handleExport('chuantou_shp')"> <a-button class="exportbutton" @click="handleExport('chuantou_shp')">
统计明细矢量数据shp 统计明细矢量数据shp
@ -421,10 +421,10 @@
} }
switch (exportType) { switch (exportType) {
case 'chuantou_execl': case 'chuantou_execl':
// 穿-execl // 穿-execl
url = VITE_GLOB_API_URL + '/api/DroneCaseInfoSingle/ExprotCaseListByType'; url = VITE_GLOB_API_URL + '/api/DroneCaseInfoSingle/ExprotCaseListByType';
fileName = fileName =
'统计明细案件信息 ' + '统计明细图斑信息 ' +
tablist[activeKey.value].countyname + tablist[activeKey.value].countyname +
'-' + '-' +
tablist[activeKey.value].label + tablist[activeKey.value].label +
@ -433,7 +433,7 @@
'.xls'; '.xls';
break; break;
case 'chuantou_shp': case 'chuantou_shp':
// 穿-shp // 穿-shp
url = VITE_GLOB_API_URL + '/api/DroneCaseInfoSingle/ExportShapefile'; url = VITE_GLOB_API_URL + '/api/DroneCaseInfoSingle/ExportShapefile';
fileName = fileName =
'统计明细矢量数据 ' + '统计明细矢量数据 ' +

View File

@ -13,10 +13,10 @@
:label-col="labelCol" :label-col="labelCol"
:wrapper-col="wrapperCol" :wrapper-col="wrapperCol"
> >
<a-form-item label="案件编号" name="case_no"> <a-form-item label="图斑编号" name="case_no">
<a-input v-model:value="formState.case_no" disabled /> <a-input v-model:value="formState.case_no" disabled />
</a-form-item> </a-form-item>
<a-form-item label="案件描述" name="case_description"> <a-form-item label="图斑描述" name="case_description">
<a-input v-model:value="formState.case_description" disabled /> <a-input v-model:value="formState.case_description" disabled />
</a-form-item> </a-form-item>
<a-form-item label="县区" name="countyid"> <a-form-item label="县区" name="countyid">
@ -61,10 +61,10 @@
:label-col="labelCol" :label-col="labelCol"
:wrapper-col="wrapperCol" :wrapper-col="wrapperCol"
> >
<a-form-item label="案件编号" name="case_no"> <a-form-item label="图斑编号" name="case_no">
<a-input v-model:value="formState.case_no" disabled /> <a-input v-model:value="formState.case_no" disabled />
</a-form-item> </a-form-item>
<a-form-item label="案件描述" name="case_description"> <a-form-item label="图斑描述" name="case_description">
<a-input v-model:value="formState.case_description" disabled /> <a-input v-model:value="formState.case_description" disabled />
</a-form-item> </a-form-item>
<a-form-item label="县区" name="countyid"> <a-form-item label="县区" name="countyid">

View File

@ -48,7 +48,7 @@
<a-descriptions-item label="备注">{{ remark }}</a-descriptions-item> <a-descriptions-item label="备注">{{ remark }}</a-descriptions-item>
<a-descriptions-item label="经度">{{ lng }}</a-descriptions-item> <a-descriptions-item label="经度">{{ lng }}</a-descriptions-item>
<a-descriptions-item label="纬度">{{ lat }}</a-descriptions-item> <a-descriptions-item label="纬度">{{ lat }}</a-descriptions-item>
<a-descriptions-item label="下发时间">{{ createtime }}</a-descriptions-item> <a-descriptions-item label="下发时间">{{ synchronoustime }}</a-descriptions-item>
<a-descriptions-item label="图斑照片"> <a-descriptions-item label="图斑照片">
<div class="image-div"> <div class="image-div">
<a-image-preview-group <a-image-preview-group
@ -476,6 +476,7 @@
hexiaotime, hexiaotime,
wrjffzhaopian, wrjffzhaopian,
xchczhaopian, xchczhaopian,
synchronoustime,
} = props.showInfoData; } = props.showInfoData;
const anjianzhaopianList = computed(() => { const anjianzhaopianList = computed(() => {
return anjianzhaopian ? anjianzhaopian.split(',') : []; return anjianzhaopian ? anjianzhaopian.split(',') : [];

View File

@ -87,11 +87,11 @@
<div :style="`${showSortMark('gengdi_area',2)? 'color: #086DEC;': ''}`">&#9660</div> <div :style="`${showSortMark('gengdi_area',2)? 'color: #086DEC;': ''}`">&#9660</div>
</div> </div>
</div> </div>
<div class="sift-item" @click="dataListSort('createtime')"> <div class="sift-item" @click="dataListSort('synchronoustime')">
<div class="sift-label">下发时间</div> <div class="sift-label">下发时间</div>
<div class="sift-icon"> <div class="sift-icon">
<div :style="`${showSortMark('createtime',1)? 'color: #086DEC;': ''}`">&#9650</div> <div :style="`${showSortMark('synchronoustime',1)? 'color: #086DEC;': ''}`">&#9650</div>
<div :style="`${showSortMark('createtime',2)? 'color: #086DEC;': ''}`">&#9660</div> <div :style="`${showSortMark('synchronoustime',2)? 'color: #086DEC;': ''}`">&#9660</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -36,7 +36,7 @@
<PermissionBtn @btn-event="onBtnClicked" /> <PermissionBtn @btn-event="onBtnClicked" />
</template> </template>
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="['area', 'gengdiarea'].includes(column.key)"> <template v-if="['area', 'gengdiarea','nongyongdiarea'].includes(column.key)">
{{ dataProcessingCount(record[column.key]) }} {{ dataProcessingCount(record[column.key]) }}
</template> </template>
<template v-if="column.key === 'action'"> <template v-if="column.key === 'action'">

View File

@ -40,6 +40,10 @@ export const columns: BasicColumn[] = [
title: '图斑面积', title: '图斑面积',
dataIndex: 'area', dataIndex: 'area',
}, },
{
title: '农用地面积',
dataIndex: 'nongyongdiarea',
},
{ {
title: '耕地面积', title: '耕地面积',
dataIndex: 'gengdiarea', dataIndex: 'gengdiarea',

View File

@ -48,7 +48,7 @@
<a-descriptions-item label="备注">{{ remark }}</a-descriptions-item> <a-descriptions-item label="备注">{{ remark }}</a-descriptions-item>
<a-descriptions-item label="经度">{{ lng }}</a-descriptions-item> <a-descriptions-item label="经度">{{ lng }}</a-descriptions-item>
<a-descriptions-item label="纬度">{{ lat }}</a-descriptions-item> <a-descriptions-item label="纬度">{{ lat }}</a-descriptions-item>
<a-descriptions-item label="下发时间">{{ createtime }}</a-descriptions-item> <a-descriptions-item label="下发时间">{{ synchronoustime }}</a-descriptions-item>
<a-descriptions-item label="图斑照片"> <a-descriptions-item label="图斑照片">
<div class="image-div"> <div class="image-div">
<template v-for="(imageItem, imageIndex) in casepicList" :key="imageIndex"> <template v-for="(imageItem, imageIndex) in casepicList" :key="imageIndex">
@ -452,6 +452,7 @@
hexiaotime, hexiaotime,
wrjffzhaopian, wrjffzhaopian,
xchczhaopian, xchczhaopian,
synchronoustime,
} = props.showInfoData; } = props.showInfoData;
const anjianzhaopianList = computed(() => { const anjianzhaopianList = computed(() => {
return anjianzhaopian ? anjianzhaopian.split(',') : []; return anjianzhaopian ? anjianzhaopian.split(',') : [];

View File

@ -87,11 +87,11 @@
<div :style="`${showSortMark('gengdi_area',2)? 'color: #086DEC;': ''}`">&#9660</div> <div :style="`${showSortMark('gengdi_area',2)? 'color: #086DEC;': ''}`">&#9660</div>
</div> </div>
</div> </div>
<div class="sift-item" @click="dataListSort('createtime')"> <div class="sift-item" @click="dataListSort('synchronoustime')">
<div class="sift-label">下发时间</div> <div class="sift-label">下发时间</div>
<div class="sift-icon"> <div class="sift-icon">
<div :style="`${showSortMark('createtime',1)? 'color: #086DEC;': ''}`">&#9650</div> <div :style="`${showSortMark('synchronoustime',1)? 'color: #086DEC;': ''}`">&#9650</div>
<div :style="`${showSortMark('createtime',2)? 'color: #086DEC;': ''}`">&#9660</div> <div :style="`${showSortMark('synchronoustime',2)? 'color: #086DEC;': ''}`">&#9660</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -36,7 +36,7 @@
<PermissionBtn @btn-event="onBtnClicked" /> <PermissionBtn @btn-event="onBtnClicked" />
</template> </template>
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="['area', 'gengdiarea'].includes(column.key)"> <template v-if="['area', 'gengdiarea','nongyongdiarea'].includes(column.key)">
{{ dataProcessingCount(record[column.key]) }} {{ dataProcessingCount(record[column.key]) }}
</template> </template>
<template v-if="column.key === 'action'"> <template v-if="column.key === 'action'">

View File

@ -40,6 +40,10 @@ export const columns: BasicColumn[] = [
title: '图斑面积', title: '图斑面积',
dataIndex: 'area', dataIndex: 'area',
}, },
{
title: '农用地面积',
dataIndex: 'nongyongdiarea',
},
{ {
title: '耕地面积', title: '耕地面积',
dataIndex: 'gengdiarea', dataIndex: 'gengdiarea',

View File

@ -14,7 +14,7 @@
<div class="case-view_content"> <div class="case-view_content">
<div class="file-box w-1/2 xl:w-1/2" v-if="caseHandleInfo"> <div class="file-box w-1/2 xl:w-1/2" v-if="caseHandleInfo">
<CollapseContainer <CollapseContainer
title="【案件下发信息】" title="【图斑下发信息】"
:canExpan="false" :canExpan="false"
v-if="current == 0 || current == 4" v-if="current == 0 || current == 4"
> >
@ -22,7 +22,7 @@
</CollapseContainer> </CollapseContainer>
<CollapseContainer <CollapseContainer
title="【案件核查信息】" title="【图斑核查信息】"
:canExpan="false" :canExpan="false"
v-if="current == 1 || current == 4" v-if="current == 1 || current == 4"
> >
@ -34,7 +34,7 @@
</CollapseContainer> </CollapseContainer>
<CollapseContainer <CollapseContainer
title="【案件办理信息-合法举证】" title="【图斑办理信息-合法举证】"
:canExpan="false" :canExpan="false"
v-if=" v-if="
(caseHandleInfo.is_illegal == '合法' && current == 2) || (caseHandleInfo.is_illegal == '合法' && current == 2) ||
@ -49,18 +49,18 @@
</CollapseContainer> </CollapseContainer>
<CollapseContainer <CollapseContainer
title="【案件办理信息-伪变化】" title="【图斑办理信息-伪变化】"
:canExpan="false" :canExpan="false"
v-if=" v-if="
(caseHandleInfo.is_illegal == '伪变化' && current == 2) || (caseHandleInfo.is_illegal == '伪变化' && current == 2) ||
(caseHandleInfo.is_illegal == '伪变化' && current == 4) (caseHandleInfo.is_illegal == '伪变化' && current == 4)
" "
> >
<div> 伪变化没有案件办理信息 </div> <div> 伪变化没有图斑办理信息 </div>
</CollapseContainer> </CollapseContainer>
<CollapseContainer <CollapseContainer
title="【案件办理信息-违法-拟拆除】" title="【图斑办理信息-违法-拟拆除】"
:canExpan="false" :canExpan="false"
v-if=" v-if="
(caseHandleInfo.is_illegal == '违法' && (caseHandleInfo.is_illegal == '违法' &&
@ -75,7 +75,7 @@
</CollapseContainer> </CollapseContainer>
<CollapseContainer <CollapseContainer
title="【案件办理信息-违法-查处】" title="【图斑办理信息-违法-查处】"
:canExpan="false" :canExpan="false"
v-if=" v-if="
(caseHandleInfo.is_illegal == '违法' && (caseHandleInfo.is_illegal == '违法' &&
@ -94,7 +94,7 @@
</CollapseContainer> </CollapseContainer>
<CollapseContainer <CollapseContainer
title="【案件办理信息-违法-拟完善手续】" title="【图斑办理信息-违法-拟完善手续】"
:canExpan="false" :canExpan="false"
v-if=" v-if="
(caseHandleInfo.is_illegal == '违法' && (caseHandleInfo.is_illegal == '违法' &&
@ -114,7 +114,7 @@
</CollapseContainer> </CollapseContainer>
<CollapseContainer <CollapseContainer
title="【案件审核信息】" title="【图斑审核信息】"
:canExpan="false" :canExpan="false"
v-if="current == 3 || current == 4" v-if="current == 3 || current == 4"
> >
@ -122,7 +122,7 @@
</CollapseContainer> </CollapseContainer>
<CollapseContainer <CollapseContainer
title="【案件退回描述】" title="【图斑退回描述】"
:canExpan="false" :canExpan="false"
v-if="detailData.is_drawback == 1" v-if="detailData.is_drawback == 1"
> >

View File

@ -50,7 +50,7 @@
{{ caseHandleInfo.info.is_forever_build == 1 ? '是' : '否' }} {{ caseHandleInfo.info.is_forever_build == 1 ? '是' : '否' }}
</a-descriptions-item> </a-descriptions-item>
<!-- 案件违法 - 拆除 --> <!-- 图斑违法 - 拆除 -->
<a-descriptions-item <a-descriptions-item
label="处理办法" label="处理办法"
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '拟拆除'" v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '拟拆除'"
@ -88,7 +88,7 @@
{{ caseHandleInfo.info.build_structure }} {{ caseHandleInfo.info.build_structure }}
</a-descriptions-item> </a-descriptions-item>
<!-- 案件违法 查处 --> <!-- 图斑违法 查处 -->
<a-descriptions-item <a-descriptions-item
label="处理办法" label="处理办法"
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '查处'" v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '查处'"
@ -126,7 +126,7 @@
{{ caseHandleInfo.info.illegal_type }} {{ caseHandleInfo.info.illegal_type }}
</a-descriptions-item> </a-descriptions-item>
<!-- 案件违法 完善手续 --> <!-- 图斑违法 完善手续 -->
<a-descriptions-item <a-descriptions-item
label="处理办法" label="处理办法"
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '拟完善手续'" v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '拟完善手续'"

View File

@ -1,13 +1,13 @@
<template> <template>
<a-descriptions bordered :column="2" size="small" :labelStyle="labelStyle"> <a-descriptions bordered :column="2" size="small" :labelStyle="labelStyle">
<a-descriptions-item label="案件编号">{{ caseDetail.case_no }}</a-descriptions-item> <a-descriptions-item label="图斑编号">{{ caseDetail.case_no }}</a-descriptions-item>
<a-descriptions-item label="上报人"> <a-descriptions-item label="上报人">
{{ caseDetail.identification_user }} {{ caseDetail.identification_user }}
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="上报时间"> <a-descriptions-item label="上报时间">
{{ caseDetail.identification_time }} {{ caseDetail.identification_time }}
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="案件状态"> <a-descriptions-item label="图斑状态">
<a-tag color="warning" v-if="caseDetail.handle_status_id == 0"> <a-tag color="warning" v-if="caseDetail.handle_status_id == 0">
{{ caseDetail.handle_status_name }} {{ caseDetail.handle_status_name }}
</a-tag> </a-tag>
@ -21,16 +21,16 @@
caseDetail.communityname caseDetail.communityname
}} }}
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="案件地址">{{ caseDetail.address }}</a-descriptions-item> <a-descriptions-item label="图斑地址">{{ caseDetail.address }}</a-descriptions-item>
<a-descriptions-item label="经纬度" <a-descriptions-item label="经纬度"
>{{ caseDetail.lng }} , {{ caseDetail.lat }}</a-descriptions-item >{{ caseDetail.lng }} , {{ caseDetail.lat }}</a-descriptions-item
> >
<a-descriptions-item label="案件地址">{{ caseDetail.area }}&nbsp;()</a-descriptions-item> <a-descriptions-item label="图斑地址">{{ caseDetail.area }}&nbsp;()</a-descriptions-item>
<a-descriptions-item label="案件类型">{{ caseDetail.typename }}</a-descriptions-item> <a-descriptions-item label="图斑类型">{{ caseDetail.typename }}</a-descriptions-item>
<a-descriptions-item label="案件备注">{{ caseDetail.remark }}</a-descriptions-item> <a-descriptions-item label="图斑备注">{{ caseDetail.remark }}</a-descriptions-item>
<a-descriptions-item label="案件描述">{{ caseDetail.case_description }}</a-descriptions-item> <a-descriptions-item label="图斑描述">{{ caseDetail.case_description }}</a-descriptions-item>
<a-descriptions-item label="案件图片"> <a-descriptions-item label="图斑图片">
<div> <div>
<ImagePreview :imageList="imgList" /> <ImagePreview :imageList="imgList" />
</div> </div>

View File

@ -159,7 +159,7 @@
}, },
}); });
} }
// //
function loadDroneMarker(lng, lat) { function loadDroneMarker(lng, lat) {
if (detailMap.value.getLayer('cat-on-building')) { if (detailMap.value.getLayer('cat-on-building')) {
detailMap.value.removeLayer('cat-on-building'); detailMap.value.removeLayer('cat-on-building');

View File

@ -1,18 +1,18 @@
// 案件详情首页 // 图斑详情首页
export { default as CaseView } from './caseview/index.vue'; export { default as CaseView } from './caseview/index.vue';
// 【案件下发信息】 // 【图斑下发信息】
export { default as Issue } from './caseview/src/issue.vue'; export { default as Issue } from './caseview/src/issue.vue';
// 【案件核查信息】 // 【图斑核查信息】
export { default as Inspect } from './caseview/src/inspect.vue'; export { default as Inspect } from './caseview/src/inspect.vue';
// 【案件审核信息】 // 【图斑审核信息】
export { default as Audit } from './caseview/src/audit.vue'; export { default as Audit } from './caseview/src/audit.vue';
// 【案件办理信息-违法-拟拆除】 // 【图斑办理信息-违法-拟拆除】
export { default as Dismantle } from './caseview/src/dismantle.vue'; export { default as Dismantle } from './caseview/src/dismantle.vue';
// 地图位置 // 地图位置
export { default as MapDetail } from './caseview/src/mapDetail.vue'; export { default as MapDetail } from './caseview/src/mapDetail.vue';
// 案件办理信息-合法举证 // 图斑办理信息-合法举证
export { default as Evidence } from './caseview/src/evidence.vue'; export { default as Evidence } from './caseview/src/evidence.vue';
// 【案件办理信息-违法-查处】 // 【图斑办理信息-违法-查处】
export { default as Investigate } from './caseview/src/investigate.vue'; export { default as Investigate } from './caseview/src/investigate.vue';
// 【案件办理信息-违法-拟完善手续】 // 【图斑办理信息-违法-拟完善手续】
export { default as Procedure } from './caseview/src/procedure.vue'; export { default as Procedure } from './caseview/src/procedure.vue';

View File

@ -20,7 +20,7 @@
<BasicModal <BasicModal
v-bind="$attrs" v-bind="$attrs"
@register="registerModal" @register="registerModal"
title="案件详情" title="图斑详情"
:canFullscreen="false" :canFullscreen="false"
:defaultFullscreen="true" :defaultFullscreen="true"
:showCancelBtn="false" :showCancelBtn="false"
@ -60,7 +60,7 @@
}); });
const [registerTable, { reload, getSelectRows, clearSelectedRowKeys }] = useTable({ const [registerTable, { reload, getSelectRows, clearSelectedRowKeys }] = useTable({
title: '案件列表', title: '图斑列表',
api: getCaseInfoList, api: getCaseInfoList,
// api:()=>1, // api:()=>1,
columns, columns,

View File

@ -7,11 +7,11 @@ import { useMessage } from '@/hooks/web/useMessage';
type CheckedType = boolean | string | number; type CheckedType = boolean | string | number;
export const columns: BasicColumn[] = [ export const columns: BasicColumn[] = [
{ {
title: '案件编号', title: '图斑编号',
dataIndex: 'caseNo', dataIndex: 'caseNo',
width: 200, width: 200,
},{ },{
title: '案件描述', title: '图斑描述',
dataIndex: 'caseDescription', dataIndex: 'caseDescription',
width: 200, width: 200,
},{ },{
@ -39,7 +39,7 @@ export const searchFormSchema: FormSchema[] = [
{ {
field: 'is_intact', field: 'is_intact',
component: 'Select', component: 'Select',
label: '案件状态', label: '图斑状态',
colProps: { colProps: {
span: 6, span: 6,
}, },

View File

@ -10,7 +10,7 @@
<BasicModal <BasicModal
v-bind="$attrs" v-bind="$attrs"
@register="registerModal" @register="registerModal"
title="案件详情" title="图斑详情"
:canFullscreen="false" :canFullscreen="false"
:defaultFullscreen="true" :defaultFullscreen="true"
:showCancelBtn="false" :showCancelBtn="false"
@ -35,7 +35,7 @@ const props = defineProps<{
}>() }>()
const caseId = ref(''); const caseId = ref('');
let columns = reactive({data:[],col:[{ let columns = reactive({data:[],col:[{
title: '案件编号', title: '图斑编号',
dataIndex: 'caseNo', dataIndex: 'caseNo',
}, },
{ {
@ -43,7 +43,7 @@ let columns = reactive({data:[],col:[{
dataIndex: 'communityName', dataIndex: 'communityName',
}, },
{ {
title: '案件描述', title: '图斑描述',
dataIndex: 'caseDescription', dataIndex: 'caseDescription',
},{ },{
title: '所属类型', title: '所属类型',
@ -61,7 +61,7 @@ let columns = reactive({data:[],col:[{
title: '审核时间', title: '审核时间',
dataIndex: 'verifyTime', dataIndex: 'verifyTime',
},{ },{
title: '案件状态', title: '图斑状态',
dataIndex: 'handleStatusName', dataIndex: 'handleStatusName',
}]}); }]});
let total = ref(0) let total = ref(0)

View File

@ -150,6 +150,7 @@
v-model:current="pageNumber" v-model:current="pageNumber"
v-model:pageSize="pageSizeNumber" v-model:pageSize="pageSizeNumber"
:total="total" :total="total"
:show-total="total => `共 ${total} 条数据`"
show-size-changer show-size-changer
show-quick-jumper show-quick-jumper
@change="changePagination" @change="changePagination"

View File

@ -585,7 +585,7 @@
} }
// //
function getOrgCaseList(column,record:Recordable){ function getOrgCaseList(column,record:Recordable){
if(currentOrgLevel.value == 'country'){ if(currentOrgLevel.value == 'country'){

View File

@ -36,7 +36,7 @@
<PermissionBtn @btn-event="onBtnClicked" /> <PermissionBtn @btn-event="onBtnClicked" />
</template> </template>
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="['area', 'gengdiarea'].includes(column.key)"> <template v-if="['area', 'gengdiarea','nongyongdiarea'].includes(column.key)">
{{ dataProcessingCount(record[column.key]) }} {{ dataProcessingCount(record[column.key]) }}
</template> </template>
<template v-if="column.key === 'action'"> <template v-if="column.key === 'action'">
@ -56,10 +56,10 @@
<a-modal v-model:open="open" title="导出文件类型" :footer="null"> <a-modal v-model:open="open" title="导出文件类型" :footer="null">
<div> <div>
<a-button class="exportbutton" @click="handleExport('excel')"> <a-button class="exportbutton" @click="handleExport('excel')">
图斑汇总统计报表execl 图斑列表统计报表execl
</a-button> </a-button>
<a-button class="exportbutton" @click="handleExport('shp')"> <a-button class="exportbutton" @click="handleExport('shp')">
图斑汇总矢量数据shp 图斑列表矢量数据shp
</a-button> </a-button>
</div> </div>
</a-modal> </a-modal>
@ -92,6 +92,7 @@
import { dataProcessingCount } from '@/views/demo/tiankongdi/util'; import { dataProcessingCount } from '@/views/demo/tiankongdi/util';
import { BasicForm, useForm } from '@/components/Form'; import { BasicForm, useForm } from '@/components/Form';
import { PageWrapper } from '@/components/Page'; import { PageWrapper } from '@/components/Page';
import dayjs from 'dayjs';
const { VITE_GLOB_API_URL } = getAppEnvConfig(); const { VITE_GLOB_API_URL } = getAppEnvConfig();
@ -136,7 +137,7 @@
}); });
const [registerTable, { setTableData, reload, clearSelectedRowKeys, setPagination, setLoading }] = const [registerTable, { setTableData, reload, clearSelectedRowKeys, setPagination, setLoading }] =
useTable({ useTable({
title: '图斑汇总', title: '图斑列表',
dataSource: tableData.value, dataSource: tableData.value,
columns, columns,
rowKey: 'id', rowKey: 'id',
@ -166,10 +167,10 @@
let fileName = ''; let fileName = '';
if (exportType == 'excel') { if (exportType == 'excel') {
url = VITE_GLOB_API_URL + '/api/DroneCaseInfoSingle/ExportCaseInfoTuBanList'; url = VITE_GLOB_API_URL + '/api/DroneCaseInfoSingle/ExportCaseInfoTuBanList';
fileName = '图斑汇总统计报表' + new Date().getTime() + '.xls'; fileName = '图斑列表统计报表' + new Date().getTime() + '.xls';
} else if (exportType == 'shp') { } else if (exportType == 'shp') {
url = VITE_GLOB_API_URL + '/api/DroneCaseInfoSingle/ExportCaseInfoShapefile'; url = VITE_GLOB_API_URL + '/api/DroneCaseInfoSingle/ExportCaseInfoShapefile';
fileName = '图斑汇总矢量数据' + new Date().getTime() + '.zip'; fileName = '图斑列表矢量数据' + new Date().getTime() + '.zip';
} }
axios({ axios({
method: 'post', method: 'post',
@ -224,6 +225,10 @@
getTableData(querys); getTableData(querys);
} }
function getTableData(querys) { function getTableData(querys) {
if (querys.startTime && querys.endTime) {
querys.startTime = dayjs(querys.startTime).format('YYYY-MM-DD');
querys.endTime = dayjs(querys.endTime).endOf('day').format('YYYY-MM-DD HH:mm:ss');
}
setLoading(true); setLoading(true);
loadCaseInfoTuBanList(querys).then((res) => { loadCaseInfoTuBanList(querys).then((res) => {
tableData.value = res.items; tableData.value = res.items;

View File

@ -34,12 +34,15 @@ export const columns: BasicColumn[] = [
{ {
title: '图斑类型', title: '图斑类型',
dataIndex: 'typename', dataIndex: 'typename',
width: 80,
}, },
{ {
title: '图斑面积', title: '图斑面积',
dataIndex: 'area', dataIndex: 'area',
}, },
{
title: '农用地面积',
dataIndex: 'nongyongdiarea',
},
{ {
title: '耕地面积', title: '耕地面积',
dataIndex: 'gengdiarea', dataIndex: 'gengdiarea',
@ -211,6 +214,18 @@ export const searchFormSchema: FormSchema[] = [
component: 'Input', component: 'Input',
colProps: { span: 4 }, colProps: { span: 4 },
}, },
{
field: 'weifaleixing',
label: '违法类型',
component: 'Select',
colProps: { span: 4 },
componentProps: {
options: [
{ label: '非农化违法用地', value: '0' },
{ label: '非粮化违法用地', value: '1' },
],
},
},
// 增加图斑面积、耕地面积、永农面积的筛选项; // 增加图斑面积、耕地面积、永农面积的筛选项;
{ {
field: 'tubanmianji', field: 'tubanmianji',
@ -230,4 +245,14 @@ export const searchFormSchema: FormSchema[] = [
colProps: { span: 4 }, colProps: { span: 4 },
slot: 'jibennongtianmianji', slot: 'jibennongtianmianji',
}, },
{
field: '[startTime, endTime]',
label: '下发时间',
component: 'RangePicker',
colProps: { span: 5 },
componentProps: {
format: 'YYYY-MM-DD',
placeholder: ['开始日期', '结束日期'],
},
},
]; ];

View File

@ -145,7 +145,7 @@ export const columnsDataPreview: BasicColumn[] = [
export const columns: BasicColumn[] = [ export const columns: BasicColumn[] = [
{ {
title: '案件编号', title: '图斑编号',
dataIndex: 'case_no', dataIndex: 'case_no',
width: 120, width: 120,
} }
@ -154,7 +154,7 @@ export const columns: BasicColumn[] = [
dataIndex: 'communityname', dataIndex: 'communityname',
width: 120, width: 120,
},{ },{
title: '案件描述', title: '图斑描述',
dataIndex: 'case_description', dataIndex: 'case_description',
width: 120, width: 120,
},{ },{
@ -179,7 +179,7 @@ export const columns: BasicColumn[] = [
dataIndex: 'verifytime', dataIndex: 'verifytime',
width: 120, width: 120,
},{ },{
title: '案件状态', title: '图斑状态',
dataIndex: 'handle_status_name', dataIndex: 'handle_status_name',
width: 120, width: 120,
} }

View File

@ -25,6 +25,13 @@
<a-form-item label="名称" name="name"> <a-form-item label="名称" name="name">
<a-input v-model:value="props.modalData.data.name" /> <a-input v-model:value="props.modalData.data.name" />
</a-form-item> </a-form-item>
<a-form-item label="云查询分类" name="overlay">
<a-select
v-model:value="props.modalData.data.overlay"
:options="props.showTree"
:fieldNames="{ label: 'itemName', value: 'itemValue' }"
/>
</a-form-item>
<a-form-item label="图层" name="layer"> <a-form-item label="图层" name="layer">
<a-select v-model:value="props.modalData.data.layer"> <a-select v-model:value="props.modalData.data.layer">
<a-select-option value="1">图层1</a-select-option> <a-select-option value="1">图层1</a-select-option>
@ -89,7 +96,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { defineProps, defineEmits, ref } from 'vue'; import { defineProps, defineEmits, ref } from 'vue';
const props = defineProps(['modalData', 'modalForm']); const props = defineProps(['modalData', 'showTree']);
const emit = defineEmits(['closeModal', 'submit']); const emit = defineEmits(['closeModal', 'submit']);
const formRef = ref(); const formRef = ref();
const treeRules = { const treeRules = {
@ -97,6 +104,7 @@
itemValue: [{ required: true, message: '类型不能为空', trigger: 'blur' }], itemValue: [{ required: true, message: '类型不能为空', trigger: 'blur' }],
}; };
const rightRules = { const rightRules = {
overlay: [{ required: true, message: '查询分类不能为空', trigger: 'blur' }],
layer: [{ required: true, message: '图层不能为空', trigger: 'blur' }], layer: [{ required: true, message: '图层不能为空', trigger: 'blur' }],
tableName: [{ required: true, message: '数据表不能为空', trigger: 'blur' }], tableName: [{ required: true, message: '数据表不能为空', trigger: 'blur' }],
overlayList: [{ required: true, message: '叠加图层不能为空', trigger: 'blur' }], overlayList: [{ required: true, message: '叠加图层不能为空', trigger: 'blur' }],

View File

@ -20,13 +20,13 @@
<div class="showTree"> <div class="showTree">
<BasicTree <BasicTree
ref="treeRef" ref="treeRef"
:treeData="showLTree" :treeData="showTree"
:loading="lLoading" :loading="lLoading"
:fieldNames="{ key: 'itemValue', title: 'itemName' }" :fieldNames="{ key: 'itemValue', title: 'itemName' }"
@select=" @select="
(selectedKeys, { node }) => { (selectedKeys, { node }) => {
getLeftSelectId(node.itemDetailId); getSelectId(node.itemDetailId);
changeTypeId(node.key); changeTypeId(node.itemValue);
} }
" "
/> />
@ -39,6 +39,9 @@
<PermissionBtn @btnEvent="buttonClick"></PermissionBtn> <PermissionBtn @btnEvent="buttonClick"></PermissionBtn>
</template> </template>
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="column.key == 'code'">
{{ getCode(record) }}
</template>
<template v-if="column.key == 'overlayList'"> <template v-if="column.key == 'overlayList'">
<div v-for="tag in record.overlayList" :key="tag"> <div v-for="tag in record.overlayList" :key="tag">
<a-tag>{{ tag }}</a-tag> <a-tag>{{ tag }}</a-tag>
@ -52,15 +55,22 @@
v-model:open="openModal" v-model:open="openModal"
:title="modalData.title" :title="modalData.title"
:afterClose="clearModal" :afterClose="clearModal"
:footer="null"
> >
<UseModal ref="modalForm" :modalData="modalData" @closeModal="closeModal" @submit="submit" /> <UseModal
ref="modalForm"
:modalData="modalData"
:showTree="showTree"
@closeModal="closeModal"
@submit="submit"
/>
</a-modal> </a-modal>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ExclamationCircleOutlined } from '@ant-design/icons-vue'; import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import UseModal from './Modal/index.vue'; import UseModal from './Modal/modal.vue';
import { BasicTree } from '@/components/Tree'; import { BasicTree } from '@/components/Tree';
import { BasicTable, useTable } from '@/components/Table'; import { BasicTable, useTable } from '@/components/Table';
import { PermissionBtn } from '@/components/PermissionBtn/index'; import { PermissionBtn } from '@/components/PermissionBtn/index';
@ -74,16 +84,22 @@
Update, Update,
Delete, Delete,
} from '@/api/sys/cloud'; } from '@/api/sys/cloud';
import { columns, emptyRightItem, emptyLeftItem, searchFormSchema } from './util'; import {
columns,
emptyRightItem,
emptyLeftItem,
searchFormSchema_1,
searchFormSchema_2,
} from './util';
import { Modal, message } from 'ant-design-vue'; import { Modal, message } from 'ant-design-vue';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { cloneDeep } from 'lodash-es'; import { cloneDeep, forEach } from 'lodash-es';
const modalForm = ref(); const modalForm = ref();
let lLoading = ref(false); let lLoading = ref(false);
let typeId = ref(''); let typeId = ref('');
let selectTreeId = ref(''); let selectTreeId = ref('');
let showLTree = ref([]); let showTree = ref([]);
let openModal = ref(false); let openModal = ref(false);
const modalData = reactive({ const modalData = reactive({
title: '', title: '',
@ -92,19 +108,36 @@
}); });
const treeRef = ref(); const treeRef = ref();
const firstRequestCode = ref(''); const firstRequestCode = ref('');
const searchFormSchema = ref(searchFormSchema_1);
watch(
() => typeId.value,
(newVal) => {
if (newVal == 'imgage_data') {
searchFormSchema.value = searchFormSchema_2;
} else {
searchFormSchema.value = searchFormSchema_1;
}
},
{
immediate: true,
},
);
const [registerTable, { reload, getSelectRows }] = useTable({ const [registerTable, { reload, getSelectRows }] = useTable({
// beforeFetch: (params) => { beforeFetch: (params) => {
// console.log(firstRequestCode.value, 'before'); if (firstRequestCode.value !== '') {
// if (firstRequestCode.value !== '') { params = { ...params, code: firstRequestCode.value };
// params = { ...params, code: firstRequestCode.value }; } else if (typeId.value !== '') {
// } else { params = { ...params, code: typeId.value };
// params = { ...params, code: typeId.value }; } else {
// } params = { ...params };
// return params; }
// }, return params;
},
api: LoadPage, api: LoadPage,
columns, columns,
title: '云查询管理',
formConfig: { formConfig: {
labelWidth: 120, labelWidth: 120,
schemas: searchFormSchema, schemas: searchFormSchema,
@ -125,16 +158,18 @@
return res; return res;
}, },
}); });
const getLeftTreeData = (isMounted) => {
const getTreeData = (isMounted) => {
lLoading.value = true; lLoading.value = true;
getLeftTree({ code: 'cloudQueryManagement' }) getLeftTree({ code: 'cloudQueryManagement' })
.then((res) => { .then((res) => {
showLTree.value = res; showTree.value = res;
lLoading.value = false; lLoading.value = false;
if (isMounted && res.length > 0) { if (isMounted && res.length > 0) {
firstRequestCode.value = res[0].key; firstRequestCode.value = res[0].itemValue;
typeId.value = res[0].key; selectTreeId.value = res[0].itemDetailId;
unref(treeRef).setSelectedKeys([res[0].key]); typeId.value = res[0].itemValue;
unref(treeRef).setSelectedKeys([res[0].itemValue]);
} }
reload(); reload();
}) })
@ -143,16 +178,27 @@
}); });
}; };
onMounted(() => { onMounted(() => {
getLeftTreeData(true); getTreeData(true);
}); });
const changeTypeId = (value) => {
typeId.value = value; const changeTypeId = (itemValue) => {
reload(); if (typeId.value != itemValue) {
typeId.value = itemValue;
reload();
} else {
typeId.value = '';
reload();
}
}; };
const getLeftSelectId = (value) => { const getSelectId = (itemDetailId) => {
selectTreeId.value = value; if (selectTreeId.value != itemDetailId) {
selectTreeId.value = itemDetailId;
} else {
selectTreeId.value = '';
}
}; };
//
const buttonClick = (diffType) => { const buttonClick = (diffType) => {
let check = false; let check = false;
switch (diffType) { switch (diffType) {
@ -175,7 +221,7 @@
onOk() { onOk() {
return delLeftItem({ id: selectTreeId.value }) return delLeftItem({ id: selectTreeId.value })
.then((res) => { .then((res) => {
getLeftTreeData(false); getTreeData(false);
typeId.value = ''; typeId.value = '';
reload(); reload();
}) })
@ -230,21 +276,23 @@
break; break;
} }
}; };
//
const submit = () => { const submit = () => {
let userName = localStorage.getItem('fireUserLoginName'); let userName = localStorage.getItem('fireUserLoginName');
switch (modalData.type) { switch (modalData.type) {
case 'treeAdd': case 'treeAdd':
addLeftItem({ addLeftItem({
...modalData.data, ...modalData.data,
itemCode: 'cloudQueryManagement',
createUserName: userName, createUserName: userName,
modifyUserName: userName, modifyUserName: userName,
createDate: dayjs().format('YYYY-MM-DD HH:mm:ss'), createDate: dayjs().format('YYYY-MM-DD HH:mm:ss'),
modifyDate: dayjs().format('YYYY-MM-DD HH:mm:ss'), modifyDate: dayjs().format('YYYY-MM-DD HH:mm:ss'),
enabledMark: 1, enabledMark: 1,
sortCode: showLTree.value.length, sortCode: showTree.value.length,
}) })
.then((res) => { .then((res) => {
getLeftTreeData(false); getTreeData(false);
openModal.value = false; openModal.value = false;
}) })
.catch((err) => { .catch((err) => {
@ -295,8 +343,17 @@
const clearModal = () => { const clearModal = () => {
modalForm.value = cloneDeep(emptyLeftItem); modalForm.value = cloneDeep(emptyLeftItem);
}; };
</script>
const getCode = (record) => {
let result = '';
showTree.value.forEach((item: any) => {
if (item.itemValue === record.code) {
result = item.itemName;
}
});
return result;
};
</script>
<style lang="scss" scoped> <style lang="scss" scoped>
.page-div { .page-div {
position: relative; position: relative;
@ -338,8 +395,7 @@
flex-direction: column; flex-direction: column;
} }
} }
</style>
<style lang="scss">
.categories-page { .categories-page {
.tree-div { .tree-div {
.h-full { .h-full {

View File

@ -1,3 +1,5 @@
import dayjs from 'dayjs';
export const columns = [ export const columns = [
{ {
title: 'ID', title: 'ID',
@ -9,6 +11,11 @@ export const columns = [
dataIndex: 'name', dataIndex: 'name',
width: 100, width: 100,
}, },
{
title: '云查询分类',
dataIndex: 'overlay',
width: 100,
},
{ {
title: '图层', title: '图层',
dataIndex: 'layer', dataIndex: 'layer',
@ -66,7 +73,8 @@ export const emptyRightItem = {
areaField:'', areaField:'',
isSum: false, isSum: false,
}; };
export const searchFormSchema = [
export const searchFormSchema_1 = [
{ {
field: 'key', field: 'key',
label: '关键字', label: '关键字',
@ -74,3 +82,23 @@ export const searchFormSchema = [
colProps: { span: 8 }, colProps: { span: 8 },
}, },
]; ];
export const searchFormSchema_2 = [
{
field: 'key',
label: '关键字',
component: 'Input',
colProps: { span: 8 },
},
{
field: '[startTime, endTime]',
helpMessage: '查询范围只包含时序影像大类',
label: '日期范围',
component: 'RangePicker',
colProps: { span: 8 },
componentProps: {
format: 'YYYY-MM-DD',
placeholder: ['开始日期', '结束日期'],
},
},
];

View File

@ -1,45 +0,0 @@
<template>
<div>
<BasicTable @register="registerTable">
<template #toolbar>
<a-button type="primary" @click="updateimage"></a-button>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'enabledMark'">
<a-tag v-if="record.enabledMark" color="success"></a-tag>
<a-tag v-else color="error">停用</a-tag>
</template>
</template>
</BasicTable>
</div>
</template>
<script lang="ts" setup>
// vben
import { useMessage } from '@/hooks/web/useMessage';
import { BasicTable, useTable } from '@/components/Table';
import { columns, searchFormSchema } from './util';
const { createMessage } = useMessage();
//
const [registerTable, { reload, getSelectRows }] = useTable({
// api: getRightTable,
columns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
showIndexColumn: false,
rowSelection: {
type: 'radio',
},
useSearchForm: true,
bordered: true,
showTableSetting: true,
handleSearchInfoFn(info) {
return info;
},
immediate: false,
});
</script>

View File

@ -1,207 +0,0 @@
<template>
<div class="flex-column">
<a-row style="overflow-y: hidden">
<a-col :span="12" style="padding: 20px; border: 1px silver solid; margin-left: 10px">
<a-form
ref="form"
v-modal:model="currentAppForm"
labelAlign="right"
label-width="80px"
:label-col="labelCol"
:wrapper-col="wrapperCol"
size="mini"
>
<a-form-item label="当前版本">
<span style="font-size: 15px; font-weight: bold; color: #000">
<a-input v-model:value="currentAppInfo.edition" :bordered="false" />
</span>
</a-form-item>
<a-form-item label="版本号">
<a-input-number v-model:value="currentAppForm.edition" />
</a-form-item>
<a-form-item label="项目名称">
<a-input
v-model:value="currentAppForm.project_name"
defaultValue="drone_enforcement"
disabled="true"
/>
</a-form-item>
<a-form-item label="上传">
<a-upload
v-model:file-list="fileList"
:name="imageBoundary_name"
:multiple="true"
:customRequest="handleCustomRequest"
:headers="headers"
:progress="progress"
:beforeUpload="beforeUpload"
>
<a-button :loading="imageBoundary_loading"> 点击上传 </a-button>
</a-upload>
{{ fileName }}
<DeleteOutlined v-if="fileName != ''" @click="deleteFileName" />
</a-form-item>
<a-form-item label="描述信息">
<a-textarea type="textarea" v-model:value="currentAppForm.description" :rows="4" />
</a-form-item>
<a-form-item label="是否必须更新" label-width="120px">
<a-radio-group v-model:value="currentAppForm.must_update" size="medium">
<a-radio :bordered="false" :value="1"></a-radio>
<a-radio :bordered="false" :value="0"></a-radio>
</a-radio-group>
</a-form-item>
<a-form-item :wrapper-col="{ offset: 10, span: 14 }">
<a-button type="primary" @click="onSubmit"></a-button>
</a-form-item>
</a-form>
</a-col>
</a-row>
</div>
</template>
<script lang="ts" setup>
// vue
import { ref, onMounted } from 'vue';
// vben
import { useMessage } from '@/hooks/web/useMessage';
import { DeleteOutlined, UploadOutlined } from '@ant-design/icons-vue';
import { message, Upload } from 'ant-design-vue';
import type { UploadProps } from 'ant-design-vue';
import { BasicTable, useTable } from '@/components/Table';
import { useGlobSetting } from '@/hooks/setting';
// api
import { fun_GetUpdateFiles, fun_AddAppFiles } from '@/api/demo/version';
import { fun_Load, fun_Upload } from '@/api/demo/files';
const { createMessage } = useMessage();
//
const labelCol = { span: 6 };
const wrapperCol = { span: 18 };
// shp
const currentAppForm = ref({
edition: '',
description: '',
filepath: '',
must_update: '',
project_name: '',
createuser: '',
createtime: '',
});
//
let fileList: any = ref([]);
const imageBoundary_loading = ref<boolean>(false);
const imageBoundary_name = ref<string>('');
//
const fileName = ref('');
let filePath = '';
//
const beforeUpload: UploadProps['beforeUpload'] = (file) => {
let extension = file.name.substring(file.name.lastIndexOf('.') + 1);
let size = file.size / 1024 / 1024;
const isApk = extension === 'apk';
const suitableSize = size < 100;
imageBoundary_name.value = file.name;
if (!isApk) {
createMessage.error('只能上传后缀是.apk的文件');
}
if (!suitableSize) {
createMessage.error('文件大小不得超过100M');
}
if (isApk && suitableSize) {
imageBoundary_loading.value = true;
}
return (isApk && suitableSize) || Upload.LIST_IGNORE;
};
//
const handleCustomRequest = (file, progress) => {
fileList.value = [];
fun_Upload(file, progress)
.then((res: any) => {
if (res.data.result.length > 0) {
fileName.value = res.data.result[0].fileName;
filePath = res.data.result[0].filePath;
imageBoundary_loading.value = false;
}
})
.catch((err) => {
imageBoundary_loading.value = false;
file.onError(err);
createMessage.error(err.message);
});
};
//
function deleteFileName() {
// shp-
fileName.value = '';
filePath = '';
fileList.value = [];
}
// shp-
function onSubmit() {
if (fileName.value == '' || filePath == '') {
createMessage.warn(`请选择上传文件!`);
return;
}
if (currentAppForm.value.edition == '') {
createMessage.warn(`请先填写版本号!`);
return;
}
if (currentAppForm.value.project_name != 'drone_enforcement') {
createMessage.warn(`请不要修改项目名称!`);
currentAppForm.value.project_name = 'drone_enforcement';
return;
}
fun_Load({ key: fileName.value }).then((res) => {
if (res.items.length > 0) {
currentAppForm.value.filepath = res.items[0].filePath;
fun_AddAppFiles(currentAppForm.value).then((res2) => {
if (res2) {
createMessage.success(`上传成功!`);
currentAppForm.value = {
createtime: '',
createuser: '',
edition: '',
description: '',
filepath: '',
must_update: '',
project_name: '',
};
fileList.value = [];
getAppInfo();
} else {
createMessage.warn(`接口错误!`);
}
});
} else {
createMessage.warn(`上传文件出现错误!`);
}
});
}
// shp-
let currentAppInfo = ref({});
//
async function getAppInfo() {
fun_GetUpdateFiles({ project: 'drone_enforcement' }).then(async (res) => {
if (res) {
currentAppForm.value.project_name = res.project_name;
currentAppForm.value.description = res.description;
currentAppInfo.value = res;
}
});
deleteFileName();
}
onMounted(() => {
//
getAppInfo();
});
</script>

View File

@ -1,178 +0,0 @@
<template>
<div class="flex-column">
<a-row style="overflow-y: hidden">
<a-col :span="12" style="padding: 20px; border: 1px silver solid; margin-left: 10px">
<a-form
ref="form"
v-model:model="currentAppForm"
labelAlign="right"
label-width="80px"
:label-col="labelCol"
:wrapper-col="wrapperCol"
size="mini"
>
<a-form-item label="当前版本">
<span style="font-size: 15px; font-weight: bold; color: #000">
<a-input :bordered="false" />
</span>
</a-form-item>
<a-form-item label="版本号">
<a-input-number v-model:value="currentAppForm.edition" />
</a-form-item>
<a-form-item label="项目名称">
<a-input v-model:value="currentAppForm.project_name" />
</a-form-item>
<a-form-item label="上传">
<a-upload
v-model:file-list="fileList"
:name="imageRelease_name"
:multiple="true"
:customRequest="handleCustomRequest"
:headers="headers"
:progress="progress"
:beforeUpload="beforeUpload"
>
<a-button :loading="imageRelease_loading"> 点击上传 </a-button>
</a-upload>
{{ fileName }}
<DeleteOutlined v-if="fileName != ''" @click="deleteFileName" />
</a-form-item>
<a-form-item label="描述信息">
<a-textarea type="textarea" v-model:value="currentAppForm.description" :rows="4" />
</a-form-item>
<a-form-item label="是否必须更新" label-width="120px">
<a-radio-group v-model:value="currentAppForm.must_update" size="medium">
<a-radio :bordered="false" :value="1"></a-radio>
<a-radio :bordered="false" :value="0"></a-radio>
</a-radio-group>
</a-form-item>
<a-form-item :wrapper-col="{ offset: 10, span: 14 }">
<a-button type="primary" @click="onFlyControlSubmit"></a-button>
</a-form-item>
</a-form>
</a-col>
</a-row>
</div>
</template>
<script lang="ts" setup>
// vue
import { ref, onMounted } from 'vue';
// vben
import { useMessage } from '@/hooks/web/useMessage';
import { DeleteOutlined, UploadOutlined } from '@ant-design/icons-vue';
import { message, Upload } from 'ant-design-vue';
import type { UploadProps } from 'ant-design-vue';
// api
import { fun_AddAppFiles } from '@/api/demo/version';
import { fun_Load, fun_Upload } from '@/api/demo/files';
const { createMessage } = useMessage();
//
const labelCol = { span: 6 };
const wrapperCol = { span: 18 };
//
let fileList: any = ref([]);
const imageRelease_loading = ref<boolean>(false);
const imageRelease_name = ref<string>('');
//
const fileName = ref('');
let filePath = '';
//
const currentAppForm = ref({
edition: '',
description: '',
filepath: '',
must_update: '',
project_name: '',
createuser: '',
createtime: '',
});
//
const handleCustomRequest = (file, progress) => {
fileList.value = [];
fun_Upload(file, progress)
.then((res: any) => {
if (res.data.result.length > 0) {
fileName.value = res.data.result[0].fileName;
filePath = res.data.result[0].filePath;
imageRelease_loading.value = false;
}
})
.catch((err) => {
imageRelease_loading.value = false;
file.onError(err);
createMessage.error(err.message);
});
};
//
const beforeUpload: UploadProps['beforeUpload'] = (file) => {
let extension = file.name.substring(file.name.lastIndexOf('.') + 1);
let size = file.size / 1024 / 1024;
const isApk = extension === 'apk';
const suitableSize = size < 100;
imageRelease_name.value = file.name;
if (!isApk) {
createMessage.error('只能上传后缀是.apk的文件');
}
if (!suitableSize) {
createMessage.error('文件大小不得超过100M');
}
if (isApk && suitableSize) {
imageRelease_loading.value = true;
}
return (isApk && suitableSize) || Upload.LIST_IGNORE;
};
//
function deleteFileName() {
// -
fileName.value = '';
filePath = '';
fileList.value = [];
}
// -
function onFlyControlSubmit() {
if (fileName.value == '' || filePath == '') {
createMessage.warn(`请选择上传文件!`);
return;
}
if (currentAppForm.value.edition == '') {
createMessage.warn(`请先填写版本号!`);
return;
}
if (currentAppForm.value.project_name == '') {
createMessage.warn(`请先填写项目名称!`);
return;
}
fun_Load({ key: fileName.value }).then((res) => {
if (res.items.length > 0) {
currentAppForm.value.filepath = res.items[0].filePath;
fun_AddAppFiles(currentAppForm.value).then((res2) => {
if (res2) {
createMessage.success(`上传成功!`);
currentAppForm.value = {
createtime: '',
createuser: '',
edition: '',
description: '',
filepath: '',
must_update: '',
project_name: '',
};
fileList.value = [];
} else {
createMessage.warn(`接口错误!`);
}
});
} else {
createMessage.warn(`上传文件出现错误!`);
}
});
}
</script>

View File

@ -1,34 +1,45 @@
<template> <template>
<div style="padding: 24px; overflow-y: hidden"> <div>
<a-tabs v-model:activeKey="activeKey"> <BasicTable @register="registerTable">
<a-tab-pane key="imageBoundary" tab="影像边界shp"> <template #toolbar>
<ImageBoundary /> <a-button type="primary" @click="updateimage"></a-button>
</a-tab-pane> </template>
<a-tab-pane key="imageRelease" tab="影像发布事件"> <template #bodyCell="{ column, record }">
<ImageRelease /> <template v-if="column.key === 'enabledMark'">
</a-tab-pane> <a-tag v-if="record.enabledMark" color="success"></a-tag>
<a-tab-pane key="history" tab="历史记录"> <a-tag v-else color="error">停用</a-tag>
<History /> </template>
</a-tab-pane> </template>
</a-tabs> </BasicTable>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
// vue
import { ref, onMounted } from 'vue';
// vben // vben
import { useMessage } from '@/hooks/web/useMessage'; import { useMessage } from '@/hooks/web/useMessage';
import { DeleteOutlined, UploadOutlined } from '@ant-design/icons-vue';
import { message, Upload } from 'ant-design-vue';
import type { UploadProps } from 'ant-design-vue';
import { BasicTable, useTable } from '@/components/Table'; import { BasicTable, useTable } from '@/components/Table';
import { useGlobSetting } from '@/hooks/setting'; import { columns, searchFormSchema } from './util';
//
import ImageBoundary from './imageBoundary.vue';
import ImageRelease from './imageRelease.vue';
import History from './history.vue';
// const { createMessage } = useMessage();
let activeKey = ref('imageBoundary');
//
const [registerTable, { reload, getSelectRows }] = useTable({
// api: getRightTable,
columns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
showIndexColumn: false,
rowSelection: {
type: 'radio',
},
useSearchForm: true,
bordered: true,
showTableSetting: true,
handleSearchInfoFn(info) {
return info;
},
immediate: false,
});
</script> </script>

View File

@ -10,7 +10,7 @@
<BasicModal <BasicModal
v-bind="$attrs" v-bind="$attrs"
@register="registerModal" @register="registerModal"
title="案件详情" title="图斑详情"
:canFullscreen="false" :canFullscreen="false"
:defaultFullscreen="true" :defaultFullscreen="true"
:showCancelBtn="false" :showCancelBtn="false"
@ -35,7 +35,7 @@ const props = defineProps<{
}>() }>()
const caseId = ref(''); const caseId = ref('');
let columns = reactive({data:[],col:[{ let columns = reactive({data:[],col:[{
title: '案件编号', title: '图斑编号',
dataIndex: 'caseNo', dataIndex: 'caseNo',
}, },
{ {
@ -43,7 +43,7 @@ let columns = reactive({data:[],col:[{
dataIndex: 'communityName', dataIndex: 'communityName',
}, },
{ {
title: '案件描述', title: '图斑描述',
dataIndex: 'caseDescription', dataIndex: 'caseDescription',
},{ },{
title: '所属类型', title: '所属类型',
@ -61,7 +61,7 @@ let columns = reactive({data:[],col:[{
title: '审核时间', title: '审核时间',
dataIndex: 'verifyTime', dataIndex: 'verifyTime',
},{ },{
title: '案件状态', title: '图斑状态',
dataIndex: 'handleStatusName', dataIndex: 'handleStatusName',
}]}); }]});
let total = ref(0) let total = ref(0)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,142 @@
<template>
<div>
<BasicTable @register="headersTable" :searchInfo="searchInfo">
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'refName'">
<a-input
v-model:value="record.refName"
@change="record.refName = record.refName.toLowerCase()"
/>
<p style="color: #ff0000; font-size: 12px" v-if="!regExp.test(record.refName)">
使用小写字母数字下划线的组合
</p>
</template>
<template v-if="column.key === 'initName'">
<a-input v-model:value="record.initName" />
</template>
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
label: '删除',
onClick: () => {
deleteRow(record);
},
},
]"
/>
</template>
</template>
</BasicTable>
</div>
</template>
<script lang="ts" setup>
import { ref, reactive, h, onMounted } from 'vue';
// vben
import { useMessage } from '@/hooks/web/useMessage';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { headersColumns, headersSearchFormSchema } from './clound.data';
import axios from 'axios';
import { cloneDeep } from 'lodash-es';
import { getAppEnvConfig } from '@/utils/env';
const { VITE_GLOB_API_URL } = getAppEnvConfig();
const { createMessage } = useMessage();
const props = defineProps(['headers']);
const headers = ref(props.headers);
//
const searchBeforeHeaders = ref();
const emit = defineEmits(['headersTableSubmit']);
//
let regExp = /^[a-z0-9_]+$/;
// 2
const searchParams = ref();
const [headersTable, { reload, getDataSource }] = useTable({
dataSource: headers,
columns: headersColumns,
formConfig: {
labelWidth: 120,
schemas: headersSearchFormSchema,
},
canResize: true,
useSearchForm: true,
showTableSetting: false,
pagination: true,
bordered: true,
showIndexColumn: true,
handleSearchInfoFn(info) {
if (info.name == undefined) {
//
reset();
} else {
reset();
//
searchBeforeHeaders.value = cloneDeep(headers.value);
searchParams.value = info;
headers.value = headers.value.filter((item) => item.name.includes(info.name));
}
return info;
},
});
//
function reset() {
if (searchBeforeHeaders.value) {
headers.value.forEach((item1) => {
searchBeforeHeaders.value.forEach((item2) => {
item2 = item1.name == item2.name ? item1 : item2;
});
});
headers.value = cloneDeep(searchBeforeHeaders.value);
}
searchBeforeHeaders.value = null;
}
//
const deleteRow = (record) => {
headers.value = headers.value.filter((item) => {
return item.name != record.name;
});
if (searchBeforeHeaders.value) {
searchBeforeHeaders.value = searchBeforeHeaders.value.filter((item) => {
return item.name != record.name;
});
}
};
//
const submit2 = () => {
reset();
let data = getDataSource();
let flag: Boolean = true;
data.forEach((item) => {
flag = regExp.test(item.refName);
});
if (flag) {
emit('headersTableSubmit', getDataSource());
} else {
createMessage.warn('提交的refName字段名中有不符合字段名命名规则的');
}
};
defineExpose({
submit2,
});
</script>
<style lang="less" scoped>
::v-deep .ant-table-container table {
line-height: 1.1 !important;
.ant-table-row {
td {
padding-top: 8px !important;
padding-bottom: 8px !important;
}
}
}
::v-deep .ant-table-body {
height: 410px !important;
}
</style>

View File

@ -0,0 +1,287 @@
<template>
<div class="current1">
<div class="upload-div w-1/2 xl:w-1/2 m-4 mr-0">
<a-upload-dragger
v-model:fileList="shpFileList"
name="shpFileName"
style="height: 274px; width: 300px"
class="upload-dragger"
:multiple="false"
:maxCount="1"
:before-upload="shpBeforeUpload"
:customRequest="shpCustomRequest"
accept=".zip,.xlsx"
>
<p class="ant-upload-drag-icon">
<PlusOutlined />
</p>
<div style="opacity: 0.7"> 文件上传 </div>
<div class="upload-span">
<div class="upload-span-content">
<div style="opacity: 0.7">将文件拖拽到这里或点击上传按钮</div>
<div style="color: #1e5eff">支持扩展名zipxlsxlsx</div>
<div style="opacity: 0.7"> zip中需要包含 .shp .shx .dbf 文件 </div>
<div style="opacity: 0.7"> .shp文件大小小于10MB </div>
</div>
</div>
</a-upload-dragger>
</div>
<div class="upload-form w-1/2 xl:w-1/2 m-4 mr-0">
<a-form
ref="formRef"
:model="uploadFrom"
:labelCol="{ width: '75px' }"
labelAlign="right"
:rules="uploadFormRules"
>
<a-form-item label="服务名称" name="serverName">
<a-input v-model:value="uploadFrom.serverName" placeholder="请输入服务名称" />
</a-form-item>
<a-form-item label="空间参考" name="spatialRef">
<a-select v-model:value="uploadFrom.spatialRef" placeholder="请选择空间参考">
<a-select-option value="EPSG:4326">EPSG:4326</a-select-option>
<a-select-option value="EPSG:3857">EPSG:3857</a-select-option>
<a-select-option value="EPSG:900913">EPSG:900913</a-select-option>
</a-select>
</a-form-item>
<a-form-item label="数据表名" name="dataTable">
<a-input v-model:value="uploadFrom.dataTable" placeholder="请输入表名" />
</a-form-item>
<a-form-item label="图层样式" name="appendPath">
<a-upload
v-model:fileList="tucengFileList"
name="tucengFileName"
list-type="picture-card"
class="upload-dragger"
:multiple="false"
:maxCount="1"
:show-upload-list="false"
:before-upload="tucengBeforeUpload"
:custom-request="tucengCustomRequest"
accept=".sld"
>
<div>
<PlusOutlined />
<div class="ant-upload-text">上传图层样式</div>
</div>
</a-upload>
<div style="position: relative; top: -50px" v-if="tucengFileName">
{{ tucengFileName }}
<DeleteOutlined @click="deleteTuceng" />
</div>
</a-form-item>
</a-form>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref, reactive, h } from 'vue';
// vben
import { PermissionBtn } from '@/components/PermissionBtn/index';
import { useMessage } from '@/hooks/web/useMessage';
import type { UploadProps } from 'ant-design-vue';
import { message, Upload } from 'ant-design-vue';
import { PlusOutlined, DeleteOutlined } from '@ant-design/icons-vue';
import {
getStatisticalList,
ShpGeoLayerAdd,
ShpGeoLayerLoadPage,
ShpGeoLayerGet,
ShpGeoLayerUpdateLayer,
ShpGeoLayerDelete,
ShpGeoLayerParseShpInfo,
} from '@/api/demo/system';
import { CheckTableExist } from '@/api/database/index';
import axios from 'axios';
import { cloneDeep } from 'lodash-es';
import { getAppEnvConfig } from '@/utils/env';
const { VITE_GLOB_API_URL } = getAppEnvConfig();
const { createMessage } = useMessage();
const formRef = ref();
const props = defineProps(['uploadForm']);
const uploadFrom = ref(props.uploadForm);
const emit = defineEmits(['uploadFormSubmit', 'isZipOrXls']);
const uploadFormRules = reactive({
serverName: [{ required: true, message: '请输入服务名称', trigger: 'blur' }],
spatialRef: [{ required: true, message: '请选择空间参考', trigger: 'blur' }],
// dataType: [{ required: true, message: '', trigger: 'blur' }],
appendPath: [{ required: true, message: '请上传图层样式', trigger: 'blur' }],
dataTable: [
{ required: true, message: '请输入数据表名', trigger: 'blur' },
{
validator: (rule, value, callback) => {
let reg = /^[a-z]\w{0,28}$/;
if (value !== '' && !reg.test(value)) {
callback(
new Error('小写字母开头可包含下划线但不能有汉字和大写字母不能超过30字符'),
);
}
callback();
},
trigger: 'blur',
},
{
validator: async (rule, value, callback) => {
try {
let query: any = { tableName: value };
const response = await CheckTableExist(query);
if (!response) {
callback(new Error('数据库已有此数据表名,请更换表名'));
}
} catch (error) {
callback(new Error('检查数据表名时发生错误'));
}
},
trigger: 'blur',
},
],
});
// 1-
const submit1 = () => {
formRef.value
.validate()
.then(() => {
let params = {
zipFilePath: uploadFrom.value.shpPath,
tableName: uploadFrom.value.dataTable,
srid: uploadFrom.value.spatialRef,
};
ShpGeoLayerParseShpInfo(params).then((res) => {
uploadFrom.value.dataType = res.dataType;
uploadFrom.value.headers = res.headers;
emit('uploadFormSubmit', uploadFrom.value);
});
})
.catch((error) => {
console.log(error);
});
};
// 1-shp
const shpFileList = ref<UploadProps['fileList']>([]);
const shpFileName = ref<string>('');
let isUpload = false;
// 1-shp
const shpBeforeUpload: UploadProps['beforeUpload'] = (file) => {
let extension = file.name.substring(file.name.lastIndexOf('.') + 1);
let size = file.size / 1024 / 1024;
const isZipOrXls = extension === 'zip' || extension === 'xls' || extension === 'xlsx';
const suitableSize = size < 30;
if (!isZipOrXls) {
createMessage.error('只能上传后缀是.zip .xls或者.xlsx的文件');
}
if (extension == 'zip') {
emit('isZipOrXls', 'shp');
} else if (['xls', 'xlsx'].includes(extension)) {
emit('isZipOrXls', 'excel');
}
if (!suitableSize) {
createMessage.error('文件大小不得超过30M');
}
isUpload = isZipOrXls && suitableSize;
return isUpload;
};
// 1-shp
const shpCustomRequest = (options) => {
if (isUpload) {
const formData = new FormData();
formData.append('files', options.file);
// Token localStorage
const token = localStorage.getItem('X-Token');
// Token
const headers = {
'X-Token': token,
};
axios
.post(VITE_GLOB_API_URL + '/api/Files/Upload', formData, { headers })
.then((response) => {
options.onSuccess(response.data, options.file);
shpFileName.value = response.data.result[0].fileName;
uploadFrom.value.shpPath = response.data.result[0].filePath;
})
.catch((error) => {
options.onError(error);
});
}
};
// 1-
const tucengFileList = ref<UploadProps['fileList']>([]);
const tucengFileName = ref<string>('');
// 1-
const tucengBeforeUpload: UploadProps['beforeUpload'] = (file) => {
let extension = file.name.substring(file.name.lastIndexOf('.') + 1);
let size = file.size / 1024 / 1024;
const isSld = extension === 'sld';
const suitableSize = size < 1;
if (!isSld) {
createMessage.error('只能上传后缀是.sld的文件');
}
if (!suitableSize) {
createMessage.error('文件大小不得超过1M');
}
return (isSld && suitableSize) || Upload.LIST_IGNORE;
};
// 1-
const tucengCustomRequest = (options) => {
const formData = new FormData();
formData.append('files', options.file);
// Token localStorage
const token = localStorage.getItem('X-Token');
// Token
const headers = {
'X-Token': token,
};
axios
.post(VITE_GLOB_API_URL + '/api/Files/Upload', formData, { headers })
.then((response) => {
options.onSuccess(response.data, options.file);
tucengFileName.value = response.data.result[0].fileName;
uploadFrom.value.appendPath = response.data.result[0].filePath;
})
.catch((error) => {
options.onError(error);
});
};
// 1-
const deleteTuceng = () => {
tucengFileName.value = '';
uploadFrom.value.appendPath = '';
};
//
const clearValidation = () => {
formRef.value.clearValidate();
shpFileName.value = '';
tucengFileName.value = '';
};
defineExpose({
submit1,
clearValidation,
});
</script>
<style lang="less" scoped>
.current1 {
display: flex;
}
.upload-div {
display: flex;
align-items: center;
justify-content: center;
position: relative;
top: -30px;
}
.upload-span {
margin: 30px;
}
.upload-form {
margin-left: 100px;
}
</style>

View File

@ -1,541 +1,309 @@
<template> <template>
<div> <div>
<a-row ::gutter="0"> <a-row ::gutter="0">
<a-col :span="12"> <a-col :span="24">
<BasicTable @register="registerTable" :searchInfo="searchInfo"> <BasicTable @register="registerTable" :searchInfo="searchInfo">
<template #toolbar> <template #toolbar>
<PermissionBtn @btn-event="onBtnClicked" /> <PermissionBtn @btn-event="onBtnClicked" />
</template> </template>
</BasicTable> </BasicTable>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="0">
<div class="map-outer"> <div class="map-outer">
<MapboxMap <!-- <MapboxMap
:geomsList="geomsList" :geomsList="geomsList"
:mapConfig="mapConfig" :mapConfig="mapConfig"
@handlerDrawComplete="handlerDrawComplete" @handlerDrawComplete="handlerDrawComplete"
@mapOnLoad="onMapboxLoad" @mapOnLoad="onMapboxLoad"
ref="MapboxComponent" ref="MapboxComponent"
/> /> -->
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
<div class="data-preview-container" v-if="showRecordList">
<a-tabs v-model:activeKey="activeKey" hide-add type="editable-card" @edit="onEdit" @change="handleTabChange">
<a-tab-pane v-for="(pane,index) in tablist" :key="index.toString()" :tab="pane.streetname+'-'+pane.label" :closable="pane.closable">
</a-tab-pane>
</a-tabs>
<RecordList :tablist="tablist" :currentListQuery="currentListQuery.listQuery"></RecordList>
<div class="data-preview-container-option">
<div @click="exportList()">
<CloudDownloadOutlined />
</div>
<div @click="handleCloseRecordList()">
<MinusOutlined />
</div>
<div @click="handleCloseAllRecordList()">
<CloseOutlined />
</div>
</div>
</div>
<a-modal <a-modal
v-model:open="addModalShow" v-model:open="modalShow"
:maskClosable="false"
:afterClose="closeAndCreate"
title="添加GeoServer服务" title="添加GeoServer服务"
width="800px" width="1000px"
style="top: 20px"
size="small" size="small"
> >
<div class="content"> <div class="content">
<div class="select-file-div"> <div>
<div class="upload-div"> <a-steps :current="current" size="small" label-placement="vertical" :items="items" />
<a-upload-dragger
style="height: 174px; width: 174px"
class="upload-dragger"
v-model:fileList="fileList"
name="file"
:multiple="false"
:maxCount="1"
:before-upload="beforeUpload"
accept=".zip,.xlsx"
>
<p class="ant-upload-drag-icon">
<inbox-outlined></inbox-outlined>
</p>
<div style="opacity: 0.7">
<a-button :icon="h(PlusOutlined)">文件上传</a-button>
</div>
</a-upload-dragger>
</div> </div>
<div class="upload-span"> <div class="current1" v-if="current == 0">
<div class="upload-span-content"> <UploadFrom
<div style="opacity: 0.7">将文件拖拽到这里或点击上传按钮</div> ref="uploadFormRef"
<div style="color: #1e5eff">支持扩展名zip,xlsx</div> :uploadForm="uploadFrom"
<div style="opacity: 0.7">zip中需要包含 .shp .shx .dbf 文件 .shp文件大小小于10MB</div> @isZipOrXls="isZipOrXls"
</div> @uploadFormSubmit="uploadFormSubmit"
/>
</div> </div>
<div class="upload-form"> <div class="current2" v-if="current == 1 && uploadFrom.dataSourceType == 'shp'">
<HeadersTable
<a-form ref="headersTableRef"
ref="formRef" :headers="uploadFrom.headers"
:model="uploadFrom" @headersTableSubmit="headersTableSubmit"
:label-col="{ style: { width: '75px' } }" />
labelAlign="right" </div>
:rules="uploadFormRules" <div
class="current3"
v-if="current == 2 || (current == 1 && uploadFrom.dataSourceType == 'excel')"
>
<a-result
status="success"
title="图层创建成功"
subTitle="图层创建成功,请在云查询图层列表查看"
> >
<a-form-item label="服务名称" name="serverName"> <template #extra>
<a-input v-model:value="uploadFrom.serverName" placeholder="请输入服务名称" /> <a-button type="primary" @click="handleClose"></a-button>
</a-form-item> <a-button @click="handleClose"></a-button>
</template>
<!-- 显示条件文件类型为Excel时 --> </a-result>
<a-form-item label="图斑数据" name="hasFeature" v-if="!isShp">
<a-select v-model:value="uploadFrom.hasFeature" placeholder="请选择是否具有图斑数据">
<a-select-option value="1"></a-select-option>
<a-select-option value="0"></a-select-option>
</a-select>
</a-form-item>
<!-- 显示条件文件类型为shp 或者 类型为Excel时有图斑数据 -->
<a-form-item label="空间参考" name="spaceType" v-if="isShp || (!isShp && uploadFrom.hasFeature == '1')">
<a-select v-model:value="uploadFrom.spaceType" placeholder="请选择空间参考">
<a-select-option value="EPSG:4326">EPSG:4326</a-select-option>
<a-select-option value="3857">EPSG:3857</a-select-option>
<a-select-option value="900913">EPSG:900913</a-select-option>
</a-select>
</a-form-item>
<!-- 显示条件文件类型为Excel有图斑时 -->
<a-form-item label="数据类型" name="spaceType" v-if="!isShp && uploadFrom.hasFeature == '1'">
<a-select v-model:value="uploadFrom.layerType" placeholder="请选择数据类型">
<a-select-option value="point"></a-select-option>
<a-select-option value="linestring">线</a-select-option>
<a-select-option value="polygon"></a-select-option>
</a-select>
</a-form-item>
<a-form-item label="数据表名" name="tableName">
<a-row :gutter="12">
<a-col :span="20">
<a-input v-model:value="uploadFrom.tableName" placeholder="请输入表名" />
</a-col>
<a-col :span="4">
<a-button type="" :icon="h(PlusOutlined)" @click="handlerGetExistsTableList()" />
</a-col>
</a-row>
</a-form-item>
</a-form>
<!-- <div class="upload-span-button">
<a-button type="primary" :icon="h(CloudUploadOutlined)" @click="submitShp"></a-button>
</div> -->
</div> </div>
</div> </div>
</div>
<template #footer> <template #footer>
<a-button type="default" >取消</a-button> <a-button
<a-button type="primary" >添加</a-button> type="default"
@click="handleClose"
v-if="
!(uploadFrom.dataSourceType == 'shp' && current == 3) ||
!(uploadFrom.dataSourceType == 'excel' && current == 2)
"
>
取消
</a-button>
<a-button
type="primary"
@click="nextStep"
v-if="
!(uploadFrom.dataSourceType == 'shp' && current == 3) ||
!(uploadFrom.dataSourceType == 'excel' && current == 2)
"
>
下一步
</a-button>
</template> </template>
</a-modal> </a-modal>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref,reactive,h } from 'vue'; import { ref, reactive, h } from 'vue';
// vben
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { getStatisticalList, deleteRole } from '@/api/demo/system';
// import {DataPreivew} from './RecordList.vue'
import { useMessage } from '@/hooks/web/useMessage';
import { useModal } from '@/components/Modal';
import { RecordList } from './page';
import { PermissionBtn } from '@/components/PermissionBtn/index'; import { PermissionBtn } from '@/components/PermissionBtn/index';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { columns, columnsDataPreview,searchFormSchema } from './statistical.data'; import { useMessage } from '@/hooks/web/useMessage';
import {MinusOutlined,CloseOutlined,CloudDownloadOutlined,PlusOutlined} from '@ant-design/icons-vue' //
import axios from 'axios'; import UploadFrom from './clound/uploadFrom.vue';
import print from "vue3-print-nb"; import HeadersTable from './clound/headersTable.vue';
import { getAppEnvConfig } from '@/utils/env';
import MapboxMap from '@/components/MapboxMaps/MapComponent.vue'; import MapboxMap from '@/components/MapboxMaps/MapComponent.vue';
import type { UploadProps } from 'ant-design-vue'; import {
indexColumns,
indexSearchFormSchema,
defaultData2,
items_shp,
items_excel,
} from './clound/clound.data';
import {
getStatisticalList,
ShpGeoLayerAdd,
ShpGeoLayerLoadPage,
ShpGeoLayerGet,
ShpGeoLayerUpdateLayer,
ShpGeoLayerDelete,
ShpGeoLayerParseShpInfo,
} from '@/api/demo/system';
const { VITE_GLOB_API_URL } = getAppEnvConfig(); import axios from 'axios';
import { cloneDeep } from 'lodash-es';
const addModalShow = ref<Boolean>(false);
const vPrint = print;
const printOpen = ref<boolean>(false);
const uploadFrom = ref({})
const uploadFormRules = reactive({
serverName: [{ required: true, message: '请输入服务名称', trigger: 'blur' }],
imageServerAddress: [{ required: true, message: '请输入服务地址', trigger: 'blur' }],
hasFeature: [{ required: true, message: '请选择是否有图斑数据', trigger: 'blur' }],
spaceType: [{ required: true, message: '请选择参考系', trigger: 'blur' }],
layerType: [{ required: true, message: '请选数据类型', trigger: 'blur' }],
tableName: [{ required: true, message: '请输入表名', trigger: 'blur' }],
});
const printObj = reactive({
id:"printMe",
popTitle: "",
beforeOpenCallback() {
},
openCallback() {
},
closeCallback() {
}
})
const beforeUpload:UploadProps['beforeUpload'] = (file) => {
// file.type === FILETYPE.ZIP ? isShp.value = true: isShp.value = false
fileList.value = [file];
return false;
};
const fileList = ref<UploadProps['fileList']>([]);
defineOptions({ name: 'RoleManagement' });
let activeKey = ref('0')
const { createConfirm, createMessage } = useMessage(); const { createConfirm, createMessage } = useMessage();
const [registerModal, { openModal: openRoleModal }] = useModal();
const [registerModulesModal, { openModal: openModulesModal }] = useModal();
const [registerAccountModal, { openModal: openAccountModal }] = useModal();
const searchInfo = reactive<Recordable>({
countyid:null
});
const currentOrgLevel = ref<string>("country") //
const showRecordList = ref<boolean>(false);
const panes = reactive<{ title: string; content: string; key: string; closable?: boolean}[]>([])
const searchParams = ref(); const searchParams = ref();
const [registerTable, { reload, getSelectRows, clearSelectedRowKeys, updateTableData}] = useTable({ const [registerTable, { reload, getSelectRows, clearSelectedRowKeys }] = useTable({
// title: '云查询图层',
title: 'GeoServer服务管理', api: ShpGeoLayerLoadPage,
// columns: indexColumns,
api: getStatisticalList,
// BasicColumn[]
columns,
rowKey: 'streetid',
formConfig: { formConfig: {
labelWidth: 120, labelWidth: 120,
schemas: searchFormSchema, schemas: indexSearchFormSchema,
}, },
// 使
useSearchForm: true, useSearchForm: true,
//
showTableSetting: true, showTableSetting: true,
// pagination: true,
pagination:true,
//
bordered: true, bordered: true,
//
showIndexColumn: true, showIndexColumn: true,
//
rowSelection: { rowSelection: {
type: 'radio', type: 'radio',
}, },
//
handleSearchInfoFn(info) { handleSearchInfoFn(info) {
searchParams.value = info; searchParams.value = info;
return info; return info;
}, },
}); });
const [registerPrintTable] = useTable({ //
// const current = ref(0);
title: '', const items = ref(items_shp);
//
api: getStatisticalList,
// BasicColumn[]
columns,
rowKey: 'id',
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
// 使
useSearchForm: false,
//
showTableSetting: false,
//
pagination:false,
//
bordered: true,
//
showIndexColumn: false,
//
rowSelection: false,
//
handleSearchInfoFn(info) {
searchParams.value = info;
return info;
},
});
// 1
const uploadFormRef = ref();
const uploadFromAdd = {
serverName: '',
spatialRef: '',
dataSourceType: '',
dataType: '',
dataTable: '',
shpPath: '',
appendPath: '',
headers: [] as any,
};
const uploadFrom = ref(uploadFromAdd);
//
function isZipOrXls(value) {
const [registerTableDataPreview,{ reloadDataPreview, getSelectRowsDataPreview, clearSelectedRowKeysDataPreview }] = useTable({ uploadFrom.value.dataSourceType = value;
// if (value === 'shp') {
title: '', items.value = items_shp;
// } else if (value === 'excel') {
api: getStatisticalList, items.value = items_excel;
// BasicColumn[] }
columnsDataPreview,
rowKey: 'id',
formConfig: {
labelWidth: 120,
// schemas: searchFormSchema,
},
// 使
useSearchForm: false,
//
showTableSetting: false,
//
bordered: true,
//
showIndexColumn: false,
//
rowSelection: false,
//
handleSearchInfoFn(info) {
return info;
},
});
function handleCloseRecordList(){
showRecordList.value = false;
}
function exportList(){
createMessage.success("接口待对接!")
} }
// 1
function uploadFormSubmit(value) {
uploadFrom.value = value;
if (uploadFrom.value.headers) {
uploadFrom.value.headers.forEach((item) => {
item.refName = item.refName != null ? item.refName.toLowerCase() : item.name.toLowerCase();
});
}
current.value = 1;
}
// 2
const headersTableRef = ref();
function headersTableSubmit(value) {
uploadFrom.value.headers = value;
if (isEdit) {
//
ShpGeoLayerUpdateLayer(uploadFrom.value)
.then((res) => {
console.log(res);
if (uploadFrom.value.dataSourceType == 'shp') {
current.value = 2;
} else if (uploadFrom.value.dataSourceType == 'excel') {
current.value = 1;
}
})
.catch((error) => {
console.log(error);
});
} else {
//
ShpGeoLayerAdd(uploadFrom.value)
.then((res) => {
console.log(res);
if (uploadFrom.value.dataSourceType == 'shp') {
current.value = 2;
} else if (uploadFrom.value.dataSourceType == 'excel') {
current.value = 1;
}
})
.catch((error) => {
console.log(error);
});
}
}
//
function nextStep() {
//
if (!isEdit && uploadFrom.value.dataSourceType == '') {
createMessage.warn('请先上传shp文件或者excel文件');
return;
}
if (current.value == 0 && uploadFrom.value.dataSourceType == 'shp') {
// uploadFormRef.value.submit1();
uploadFormSubmit(defaultData2);
} else if (current.value == 0 && uploadFrom.value.dataSourceType == 'excel') {
headersTableSubmit([]);
} else if (current.value == 1) {
headersTableRef.value.submit2();
}
}
//
let isEdit: Boolean = false;
function onBtnClicked(domId) {
switch (domId) {
case 'btnAdd':
handleCreate();
isEdit = false;
break;
case 'btnEdit':
handleEdit();
isEdit = true;
break;
case 'btnDelete':
handleDelete();
break;
default:
break;
}
}
//
const modalShow = ref<Boolean>(false);
function handleCreate() { function handleCreate() {
addModalShow.value = true; uploadFrom.value = cloneDeep(uploadFromAdd);
} modalShow.value = true;
function viewAccount(record: Recordable) { if (uploadFormRef.value) {
openAccountModal(true, { uploadFormRef.value.clearValidation();
record,
});
}
function onEdit(targetKey: string){
tablist.splice(parseInt(targetKey),1);
if(tablist.length==0){
showRecordList.value = false;
} }
if(parseInt(targetKey)>1){
activeKey.value = (parseInt(targetKey)-1).toString();
}else{
activeKey.value = '0';
}
currentListQuery.listQuery = tablist[activeKey.value].listQuery
} }
//
let currentListQuery = reactive({listQuery:{}}); function handleClose() {
current.value = 0;
function handleTabChange(e){ modalShow.value = false;
currentListQuery.listQuery = tablist[e].listQuery uploadFrom.value = cloneDeep(uploadFromAdd);
console.log(currentListQuery)
} }
//
function closeAndCreate() {
// function remvoeTab(){ current.value = 0;
uploadFrom.value = cloneDeep(uploadFromAdd);
// } if (uploadFormRef.value) {
uploadFormRef.value.clearValidation();
const tablist = reactive<{streetname:string;label:string;listQuery:searchListSchema}[]>([]) }
//
interface searchListSchema{
is_intact?:number;
streetid?:number;
countyid?:number;
identification_start_time?:string;
identification_end_time?:string;
page?:number;
limit?:number;
is_deal?:number;
is_not_deal_hour24?:number;
is_drawback?:number;
typeid?:number;
is_illegal?:number;
is_complete?:number;
handle_status_id?:number;
out_time_flag?:number;
}
// const searchForm = reactive<searchListSchema>({
// })
function handlePreViewData(column,record:Recordable){
const searchForm = reactive<searchListSchema>({
identification_start_time:searchParams.value?.identification_start_time,
identification_end_time:searchParams.value?.identification_end_time,
is_intact:1,
page:1,
limit:10,
})
if(currentOrgLevel.value == 'country'){
searchForm.countyid = record.streetid;
}else if(currentOrgLevel.value == 'street'){
searchForm.streetid = record.streetid;
}
console.log("searchForm",searchForm);
switch(column.dataIndex){
case 'allCount':
break;
case 'handleStatus':
searchForm.is_deal = 1;
break;
case 'notDealHour24':
searchForm.is_not_deal_hour24 = 1;
searchForm.is_drawback = 0;
break;
case 'notDealHour24':
searchForm.is_not_deal_hour24 = 1;
searchForm.is_drawback = 0;
break;
case 'typeFanxinCount':
searchForm.typeid = record.typeid
case 'typeJiagaiCount':
searchForm.typeid = record.typeid
case 'typeFanjianCount':
searchForm.typeid = record.typeid
case 'typeCunliangCount':
searchForm.typeid = record.typeid
case 'typeTuituCount':
searchForm.typeid = record.typeid
case 'illegal0Count':
searchForm.is_illegal = 0;
searchForm.is_deal = 1;
break;
case 'illegal1Count':
searchForm.is_illegal = 1;
searchForm.is_deal = 1;
break;
case 'illegal2Count':
searchForm.is_illegal = 2;
searchForm.is_deal = 1;
break;
case 'illegal1Count1':
searchForm.is_illegal = 1;
searchForm.is_deal = 1;
break;
case 'illegalHandle2Status':
searchForm.handle_status_id = 1;
searchForm.is_deal = 1;
break;
case 'illegalHandle01Status':
searchForm.is_illegal = 1;
searchForm.is_deal = 1;
searchForm.is_complete = 0;
break;
case 'notComplete3':
searchForm.is_illegal = 1;
searchForm.is_complete = 0;
searchForm.out_time_flag = 1;
break;
case 'notComplete7':
searchForm.is_illegal = 1;
searchForm.is_complete = 0;
searchForm.out_time_flag = 2;
break;
case 'notComplete30':
searchForm.is_illegal = 1;
searchForm.is_complete = 0;
searchForm.out_time_flag = 4;
break;
case 'notComplete30More':
searchForm.is_illegal = 1;
searchForm.is_complete = 0;
searchForm.out_time_flag = 5;
break;
}
let tabItem = {
streetname:record.streetname,
label:column.title,
listQuery:searchForm,
}
tablist.push(tabItem)
activeKey.value = tablist.length > 1 ? (tablist.length-1).toString() : '0';
showRecordList.value = true;
currentListQuery.listQuery = searchForm
}
//
function getOrgCaseList(column,record:Recordable){
if(currentOrgLevel.value == 'country'){
currentOrgLevel.value = 'street'
}else if(currentOrgLevel.value == 'street'){
currentOrgLevel.value = 'country'
}
searchInfo.countyid = record.streetid;
console.log("searchInfo",searchInfo);
reload();
console.log("searchInfo",searchInfo);
}
function handleCloseAllRecordList(){
for(let i=0;i<tablist.length;i++){
tablist.pop();
}
showRecordList.value = false;
} }
//
function handleEdit() { function handleEdit() {
let rows = getSelectRows(); let rows: any = getSelectRows();
if (rows.length == 0) { if (rows.length == 0) {
return createMessage.warn('请勾选一个角色进行编辑'); return createMessage.warn('请勾选一个图层进行编辑');
} }
const record = rows[0]; uploadFrom.value = rows[0];
openRoleModal(true, { isZipOrXls(uploadFrom.value.dataSourceType);
record, modalShow.value = true;
isUpdate: true, current.value = 0;
});
} }
//
async function handleDelete() { async function handleDelete() {
let rows = getSelectRows(); let rows = getSelectRows();
if (rows.length == 0) { if (rows.length == 0) {
return createMessage.warn('请勾选一个角色进行删除'); return createMessage.warn('请勾选一个图层进行删除');
} }
const query = [rows[0].id]; const query = { id: rows[0].id };
createConfirm({ createConfirm({
iconType: 'info', iconType: 'info',
title: '删除', title: '删除',
content: '确定要删除当前角色吗', content: '确定要删除当前图层吗?',
onOk: async () => { onOk: async () => {
const data = await deleteRole(query); const data = await ShpGeoLayerDelete(query);
if (data) { if (data) {
handleSuccess(); handleSuccess();
createMessage.success('删除成功'); createMessage.success('删除成功');
@ -545,135 +313,20 @@
}, },
}); });
} }
//
function handlePrint(){
printOpen.value = true;
}
//
function handleExport(){
let params = {...searchParams.value}
params.countyid = searchInfo?.countyid;
axios({
method:"post",
url:VITE_GLOB_API_URL+"/api/DroneCaseinfo/ExportCaseSynthesisCensusStreet",
params:params,
headers:{
"X-Token":localStorage.getItem("X-Token")
},
responseType:"blob"
}).then(res=>{
console.log("excel",res);
let fileName = "统计报表" + new Date().getTime() + ".xls";
const elink = document.createElement('a')
elink.download = fileName;
elink.style.display = 'none'
elink.href = URL.createObjectURL(res.data)
document.body.appendChild(elink)
elink.click()
URL.revokeObjectURL(elink.href)
document.body.removeChild(elink)
})
}
function handleExcelDownload(data) {
// Excel
const workbook = XLSX.read(data, { type: 'array' });
// workbook
const firstSheetName = workbook.SheetNames[0];
const worksheet = workbook.Sheets[firstSheetName];
const excelData = XLSX.utils.sheet_to_json(worksheet, { header: 1 });
console.log('Excel Data:', excelData);
// Excel
XLSX.writeFile(workbook, 'example.xlsx');
}
function handleSuccess() { function handleSuccess() {
clearSelectedRowKeys(); clearSelectedRowKeys();
reload(); reload();
reloadDataPreview();
}
function onBtnClicked(domId) {
switch (domId) {
case 'btnBack':
currentOrgLevel.value = 'street'
getOrgCaseList({},{streetid:null});
break;
case 'btnAdd':
handleCreate();
break;
case 'btnEdit':
handleEdit();
break;
case 'btnDelete':
handleDelete();
break;
case 'btnModules':
let rows = getSelectRows();
if (rows.length == 0) {
return createMessage.warn('请勾选一个角色进行编辑');
}
const record = rows[0];
openModulesModal(true, {
record,
});
break;
case 'btnPrint':
handlePrint();
break;
case 'btnExport':
handleExport();
break;
default:
break;
}
} }
</script> </script>
<style> <style lang="less" scoped>
.map-outer{ .content {
width:100%; padding: 20px;
height: calc( 100vh - 80px); }
}
.data-preview-container{
width:100%;
height: calc( 100% - 0px);
position:absolute;
padding:30px 10px;
top:0px;
left:0px;
background:#fff;
}
.data-preview-container-option{
width:120px;
height: 40px;
position:absolute;
top:30px;
right:0px;
}
.data-preview-container-option div{
width:40px;
height:40px;
line-height:40px;
float:left;
text-align: center;
cursor:pointer;
}
.content{ .current1 {
padding:20px; margin-top: 30px;
} display: flex;
width: 800px;
.upload-div{ }
}
.upload-span{
margin:30px auto;
}
</style> </style>

View File

@ -145,7 +145,7 @@ export const columnsDataPreview: BasicColumn[] = [
export const columns: BasicColumn[] = [ export const columns: BasicColumn[] = [
{ {
title: '案件编号', title: '图斑编号',
dataIndex: 'case_no', dataIndex: 'case_no',
width: 120, width: 120,
} }
@ -154,7 +154,7 @@ export const columns: BasicColumn[] = [
dataIndex: 'communityname', dataIndex: 'communityname',
width: 120, width: 120,
},{ },{
title: '案件描述', title: '图斑描述',
dataIndex: 'case_description', dataIndex: 'case_description',
width: 120, width: 120,
},{ },{
@ -179,7 +179,7 @@ export const columns: BasicColumn[] = [
dataIndex: 'verifytime', dataIndex: 'verifytime',
width: 120, width: 120,
},{ },{
title: '案件状态', title: '图斑状态',
dataIndex: 'handle_status_name', dataIndex: 'handle_status_name',
width: 120, width: 120,
} }

View File

@ -149,6 +149,7 @@
v-model:current="pageNumber" v-model:current="pageNumber"
v-model:pageSize="pageSizeNumber" v-model:pageSize="pageSizeNumber"
:total="total" :total="total"
:show-total="total => `共 ${total} 条数据`"
show-size-changer show-size-changer
show-quick-jumper show-quick-jumper
@change="changePagination" @change="changePagination"

View File

@ -13,10 +13,10 @@
:label-col="labelCol" :label-col="labelCol"
:wrapper-col="wrapperCol" :wrapper-col="wrapperCol"
> >
<a-form-item label="案件编号" name="case_no"> <a-form-item label="图斑编号" name="case_no">
<a-input v-model:value="formState.case_no" disabled /> <a-input v-model:value="formState.case_no" disabled />
</a-form-item> </a-form-item>
<a-form-item label="案件描述" name="case_description"> <a-form-item label="图斑描述" name="case_description">
<a-input v-model:value="formState.case_description" disabled /> <a-input v-model:value="formState.case_description" disabled />
</a-form-item> </a-form-item>
<a-form-item label="县区" name="countyid"> <a-form-item label="县区" name="countyid">
@ -36,14 +36,14 @@
@change="handleStreetChange" @change="handleStreetChange"
/> />
</a-form-item> </a-form-item>
<!-- <a-form-item label="村/社区" name="communityid"> <a-form-item label="村/社区" name="communityid">
<a-select <a-select
v-model:value="formState.communityid" v-model:value="formState.communityid"
:options="data.communityOptions" :options="data.communityOptions"
:field-names="{ label: 'name', value: 'id' }" :field-names="{ label: 'name', value: 'id' }"
@change="handleCommunityChange" @change="handleCommunityChange"
/> />
</a-form-item> --> </a-form-item>
</a-form> </a-form>
</a-modal> </a-modal>
@ -61,10 +61,10 @@
:label-col="labelCol" :label-col="labelCol"
:wrapper-col="wrapperCol" :wrapper-col="wrapperCol"
> >
<a-form-item label="案件编号" name="case_no"> <a-form-item label="图斑编号" name="case_no">
<a-input v-model:value="formState.case_no" disabled /> <a-input v-model:value="formState.case_no" disabled />
</a-form-item> </a-form-item>
<a-form-item label="案件描述" name="case_description"> <a-form-item label="图斑描述" name="case_description">
<a-input v-model:value="formState.case_description" disabled /> <a-input v-model:value="formState.case_description" disabled />
</a-form-item> </a-form-item>
<a-form-item label="县区" name="countyid"> <a-form-item label="县区" name="countyid">
@ -84,14 +84,14 @@
@change="handleStreetChange" @change="handleStreetChange"
/> />
</a-form-item> </a-form-item>
<!-- <a-form-item label="村/社区" name="communityid"> <a-form-item label="村/社区" name="communityid">
<a-select <a-select
v-model:value="formState.communityid" v-model:value="formState.communityid"
:options="data.communityOptions" :options="data.communityOptions"
:field-names="{ label: 'name', value: 'id' }" :field-names="{ label: 'name', value: 'id' }"
@change="handleCommunityChange" @change="handleCommunityChange"
/> />
</a-form-item> --> </a-form-item>
</a-form> </a-form>
</a-modal> </a-modal>
</div> </div>
@ -123,12 +123,12 @@
const rules = ref({ const rules = ref({
countyid: [{ required: true, message: '县区不能为空', trigger: 'blur' }], countyid: [{ required: true, message: '县区不能为空', trigger: 'blur' }],
streetid: [{ required: true, message: '乡镇不能为空', trigger: 'blur' }], streetid: [{ required: true, message: '乡镇不能为空', trigger: 'blur' }],
// communityid: [{ required: true, message: '/', trigger: 'blur' }], communityid: [{ required: true, message: '村/社区不能为空', trigger: 'blur' }],
}); });
const data = reactive({ const data = reactive({
countyOptions: [], countyOptions: [],
streetOptions: [], streetOptions: [],
// communityOptions: [], communityOptions: [],
}); });
watch( watch(
@ -157,19 +157,20 @@
data.streetOptions = res; data.streetOptions = res;
}); });
formState.value.streetid = ''; formState.value.streetid = '';
// formState.value.communityid = ''; formState.value.communityid = '';
} }
async function handleStreetChange(value, option) { async function handleStreetChange(value, option) {
formState.value.streetid = value; formState.value.streetid = value;
formState.value.streetname = option.name; formState.value.streetname = option.name;
// getOptions(value).then((res) => { getOptions(value).then((res) => {
// data.communityOptions = res; data.communityOptions = res;
// }); });
formState.value.communityid = '';
}
async function handleCommunityChange(value, option) {
formState.value.communityid = value;
formState.value.communityname = option.name;
} }
// async function handleCommunityChange(value, option) {
// formState.value.communityid = value;
// formState.value.communityname = option.name;
// }
async function getOptions(value) { async function getOptions(value) {
const data = await getChildrenTree({ const data = await getChildrenTree({
parentId: value, parentId: value,
@ -192,9 +193,9 @@
data.streetOptions = res; data.streetOptions = res;
}); });
// / // /
// getOptions(formState.value.streetid).then((res) => { getOptions(formState.value.streetid).then((res) => {
// data.communityOptions = res; data.communityOptions = res;
// }); });
} }
function handlerCloseModal() { function handlerCloseModal() {
@ -211,8 +212,8 @@
countyname: formState.value.countyname, countyname: formState.value.countyname,
streetid: formState.value.streetid, streetid: formState.value.streetid,
streetname: formState.value.streetname, streetname: formState.value.streetname,
// communityid: formState.value.communityid, communityid: formState.value.communityid,
// communityname: formState.value.communityname, communityname: formState.value.communityname,
}; };
console.log(querys); console.log(querys);
const data = await updateDroneCaseInfo(querys); const data = await updateDroneCaseInfo(querys);

View File

@ -220,6 +220,7 @@
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
v-model:current="pageNo" v-model:current="pageNo"
:total="total" :total="total"
:show-total="total => `共 ${total} 条数据`"
show-size-changer show-size-changer
show-quick-jumper show-quick-jumper
@change="changePage" @change="changePage"

View File

@ -49,7 +49,7 @@
<a-descriptions-item label="备注">{{ remark }}</a-descriptions-item> <a-descriptions-item label="备注">{{ remark }}</a-descriptions-item>
<a-descriptions-item label="经度">{{ lng }}</a-descriptions-item> <a-descriptions-item label="经度">{{ lng }}</a-descriptions-item>
<a-descriptions-item label="纬度">{{ lat }}</a-descriptions-item> <a-descriptions-item label="纬度">{{ lat }}</a-descriptions-item>
<a-descriptions-item label="下发时间">{{ createtime }}</a-descriptions-item> <a-descriptions-item label="下发时间">{{ synchronoustime }}</a-descriptions-item>
<a-descriptions-item label="图斑照片"> <a-descriptions-item label="图斑照片">
<div class="image-div"> <div class="image-div">
<a-image-preview-group <a-image-preview-group
@ -480,6 +480,7 @@
hexiaotime, hexiaotime,
wrjffzhaopian, wrjffzhaopian,
xchczhaopian, xchczhaopian,
synchronoustime,
} = props.showInfoData; } = props.showInfoData;
const imageList = ref([]) const imageList = ref([])

View File

@ -110,11 +110,11 @@
<div :style="`${showSortMark('gengdi_area',2)? 'color: #086DEC;': ''}`">&#9660</div> <div :style="`${showSortMark('gengdi_area',2)? 'color: #086DEC;': ''}`">&#9660</div>
</div> </div>
</div> </div>
<div class="sift-item" @click="dataListSort('createtime')"> <div class="sift-item" @click="dataListSort('synchronoustime')">
<div class="sift-label">下发时间</div> <div class="sift-label">下发时间</div>
<div class="sift-icon"> <div class="sift-icon">
<div :style="`${showSortMark('createtime',1)? 'color: #086DEC;': ''}`">&#9650</div> <div :style="`${showSortMark('synchronoustime',1)? 'color: #086DEC;': ''}`">&#9650</div>
<div :style="`${showSortMark('createtime',2)? 'color: #086DEC;': ''}`">&#9660</div> <div :style="`${showSortMark('synchronoustime',2)? 'color: #086DEC;': ''}`">&#9660</div>
</div> </div>
</div> </div>
</div> </div>
@ -232,6 +232,7 @@
v-model:pageSize="props.pageSize" v-model:pageSize="props.pageSize"
v-model:current="props.pageNo" v-model:current="props.pageNo"
:total="props.total" :total="props.total"
:show-total="total => `共 ${total} 条数据`"
show-size-changer show-size-changer
show-quick-jumper show-quick-jumper
@change="changePage" /> @change="changePage" />

View File

@ -440,7 +440,6 @@
footerStyle.value.width = mapConfig.value?.isShowMap ? '100%' : '60%'; footerStyle.value.width = mapConfig.value?.isShowMap ? '100%' : '60%';
if (mapConfig.value?.isShowMap) { if (mapConfig.value?.isShowMap) {
} }
} else { } else {
currentNode = auditNode; currentNode = auditNode;
@ -687,6 +686,15 @@
// return; // return;
// } // }
// //
if (btn.code == 'disagree') {
if (!formData.value.des) {
createMessage.warning('请填写驳回意见');
btnVisble.value = true;
return false;
}
} else {
btnVisble.value = false;
}
if (formVisble.value) { if (formVisble.value) {
var querys = { var querys = {
schemeId: designerData.formCurrentNode.formVerison, schemeId: designerData.formCurrentNode.formVerison,
@ -694,12 +702,15 @@
pkey: instanceInfo.pkey, pkey: instanceInfo.pkey,
pkeyValue: instanceInfo.pkeyValue, pkeyValue: instanceInfo.pkeyValue,
}; };
formBoxRef.value await formBoxRef.value
.getForm() .getForm()
.then(async (res) => { .then(async (res) => {
console.log(res); console.log(res);
if (!res) { if (!res) {
console.log('无语无语');
createMessage.error('请检查表单必填项'); createMessage.error('请检查表单必填项');
btnVisble.value = true;
return false;
} else { } else {
res[designerData.formCurrentNode.formRelationId] = instanceInfo.pkeyValue; res[designerData.formCurrentNode.formRelationId] = instanceInfo.pkeyValue;
for (var item in res) { for (var item in res) {
@ -710,13 +721,14 @@
} }
} }
} }
console.log('审核提交');
setTimeout(async () => { setTimeout(async () => {
querys.data = JSON.stringify(res); querys.data = JSON.stringify(res);
const formValue = await functionsaveForm(querys); const formValue = await functionsaveForm(querys);
if (formValue) { if (formValue) {
if(btn.code == 'zancun'){ if (btn.code == 'zancun') {
createMessage.success('暂存成功'); createMessage.success('暂存成功');
return return;
} }
handleSubmit(btn); handleSubmit(btn);
} }
@ -792,6 +804,7 @@
// } // }
} }
async function auditFun() { async function auditFun() {
btnVisble.value = false;
// //
if (designerData.currentBtn.isNextAuditor) { if (designerData.currentBtn.isNextAuditor) {
const res = await getLoadNextAuditors({ const res = await getLoadNextAuditors({
@ -830,6 +843,7 @@
closePage(); closePage();
return createMessage.success('成功'); return createMessage.success('成功');
} else { } else {
btnVisble.value = true;
return createMessage.error('失败'); return createMessage.error('失败');
} }
} }
@ -963,6 +977,7 @@
btnVisble.value = false; btnVisble.value = false;
return createMessage.success('成功'); return createMessage.success('成功');
} else { } else {
btnVisble.value = true;
return createMessage.error('失败'); return createMessage.error('失败');
} }
} }
@ -997,10 +1012,7 @@
getTaskInfo(); getTaskInfo();
}); });
function onFormContainerMouseOver(event) {}
function onFormContainerMouseOver(event){
}
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
::v-deep .ant-tabs-nav-wrap { ::v-deep .ant-tabs-nav-wrap {

View File

@ -6,21 +6,22 @@
src="/subject_lindidiaocha/top.png" src="/subject_lindidiaocha/top.png"
:style="{ :style="{
width: '100%', width: '100%',
height: `${114 * bi}px`, height: `${116 * bi}px`,
}" }"
/> />
<div <div
class="subject_top_title" class="subject_top_title"
:style="{ :style="{
position: 'relative', position: 'relative',
top: `${-124 * bi}px`, top: `${-116 * bi}px`,
}" }"
> >
<span <span
:style="{ :style="{
position: 'relative', position: 'relative',
fontSize: `${58 * bi}px`, fontSize: `${55 * bi}px`,
height: `${114 * bi}px`, top: `${-20 * bi}px`,
height: `${116 * bi}px`,
}" }"
> >
<img <img
@ -40,7 +41,7 @@
class="subject_top_currentTime" class="subject_top_currentTime"
:style="{ :style="{
left: `${87 * bi}px`, left: `${87 * bi}px`,
top: `${4 * bi}px`, top: `${0 * bi}px`,
height: `${40 * bi}px`, height: `${40 * bi}px`,
}" }"
> >
@ -55,13 +56,16 @@
<div <div
class="subject_top_adminAndLogout" class="subject_top_adminAndLogout"
:style="{ :style="{
right: `${87 * bi}px`, right: `${40 * bi}px`,
top: `${4 * bi}px`, top: `${0 * bi}px`,
height: `${40 * bi}px`, height: `${40 * bi}px`,
}" }"
> >
<span class="loginUser"> {{ loginUser }} {{ t('sys.subject.header_admin') }}</span> <span class="loginUser"> {{ loginUser }} {{ t('sys.subject.header_admin') }}</span>
&nbsp;&nbsp; &nbsp;&nbsp;
<img src="/subject_lindidiaocha/setting.png" @click="getHome(setting)" />
&nbsp;&nbsp;
<span class="line" @click="getHome(setting)"> {{ setting.title }} &nbsp;&nbsp;</span>
<span class="line"> | </span> <span class="line"> | </span>
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;
<img src="/subject_lindidiaocha/logout.png" @click="handleLoginOut()" /> <img src="/subject_lindidiaocha/logout.png" @click="handleLoginOut()" />
@ -101,7 +105,7 @@
marginBottom: `${10 * bi}px`, marginBottom: `${10 * bi}px`,
height: `${300 * bi}px`, height: `${300 * bi}px`,
width: `${210 * bi}px`, width: `${210 * bi}px`,
'background-image': `url(${item.isHover ? '/subject_lindidiaocha/btn_2.png' : '/subject_lindidiaocha/btn_1.png'})`, 'background-image': `url(${item.isHover ? '/subject_lindidiaocha/btn_2.webp' : '/subject_lindidiaocha/btn_1.webp'})`,
'background-size': `${100}%`, 'background-size': `${100}%`,
'background-repeat': 'no-repeat', 'background-repeat': 'no-repeat',
}" }"
@ -110,24 +114,32 @@
> >
<img <img
class="subject_box_btn_div_img" class="subject_box_btn_div_img"
src="/subject_lindidiaocha/line.png" :src="
item.isHover
? '/subject_lindidiaocha/line1_hover.webp'
: '/subject_lindidiaocha/line1.webp'
"
:style="{ :style="{
position: 'relative', position: 'relative',
display: 'block', display: 'block',
top: `${(200 - ((fotSize + 3) / 2) * getWrap(item.title)) * bi}px`, top: `${(200 - ((fotSize + 3) / 2) * getWrap(item.title)) * bi}px`,
left: `${45 * bi}px`, left: `${25 * bi}px`,
width: `${120 * bi}px`, width: `${160 * bi}px`,
height: `${7 * bi}px`, height: `${3 * bi}px`,
}" }"
/> />
<img <img
class="subject_box_btn_div_img" class="subject_box_btn_div_img"
src="/subject_lindidiaocha/line.png" :src="
item.isHover
? '/subject_lindidiaocha/line2_hover.webp'
: '/subject_lindidiaocha/line2.webp'
"
:style="{ :style="{
position: 'relative', position: 'relative',
top: `${(180 + ((fotSize + 3) / 2) * (getWrap(item.title) + 1)) * bi}px`, top: `${(180 + ((fotSize + 3) / 2) * (getWrap(item.title) + 1)) * bi}px`,
width: `${120 * bi}px`, width: `${160 * bi}px`,
height: `${7 * bi}px`, height: `${3 * bi}px`,
}" }"
/> />
<span <span
@ -140,41 +152,53 @@
height: `${(fotSize + 3) * spanWrap * bi}px`, height: `${(fotSize + 3) * spanWrap * bi}px`,
}" }"
/> />
<img
src="/subject_lindidiaocha/nochoose.webp"
:style="{
display: 'block',
position: 'relative',
top: `${(20 - fotSize * spanWrap) * bi}px`,
left: `${55 * bi}px`,
width: `${100 * bi}px`,
height: `${100 * bi}px`,
zIndex: 2,
}"
/>
<img <img
:src="getImageUrl(item.imgUrl)" :src="getImageUrl(item.imgUrl)"
:style="{ :style="{
display: 'block', display: 'block',
position: 'relative', position: 'relative',
top: `${20 - fotSize * spanWrap * bi}px`, top: `${(-55 - fotSize * spanWrap) * bi}px`,
left: `${50 * bi}px`, left: `${75 * bi}px`,
width: `${110 * bi}px`, width: `${60 * bi}px`,
height: `${110 * bi}px`, height: `${58 * bi}px`,
zIndex: 1, zIndex: 3,
}" }"
/> />
<img <img
v-show="item.isHover" v-show="item.isHover"
src="/subject_lindidiaocha/choose.png" src="/subject_lindidiaocha/choose.webp"
:style="{ :style="{
position: 'relative', position: 'relative',
top: `${(-80 - fotSize * spanWrap) * bi}px`, top: `${(-127 - fotSize * spanWrap) * bi}px`,
width: `${80 * bi}px`, width: `${70 * bi}px`,
height: `${90 * bi}px`, height: `${75 * bi}px`,
zIndex: 2, zIndex: 4,
}" }"
/> />
</div> </div>
</div> </div>
</div> </div>
<div class="subject_bottom"> <div class="subject_bottom">
<img src="/subject_lindidiaocha/bottom.png" /> <img src="/subject_lindidiaocha/bottom.webp" />
<span> <span>
{{ {{
VITE_GLOB_APP_MANAGEMENT_UNIT VITE_GLOB_APP_MANAGEMENT_UNIT
? VITE_GLOB_APP_MANAGEMENT_UNIT ? VITE_GLOB_APP_MANAGEMENT_UNIT
: t('sys.subject.bottom_copyright_lindidiaocha') : t('sys.subject.bottom_copyright_lindidiaocha')
}} }}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
{{ {{
VITE_GLOB_APP_TECHINICAL_SUPPORT VITE_GLOB_APP_TECHINICAL_SUPPORT
? VITE_GLOB_APP_TECHINICAL_SUPPORT ? VITE_GLOB_APP_TECHINICAL_SUPPORT
@ -209,14 +233,20 @@
const list: any = ref([]); const list: any = ref([]);
const userStore = useUserStore(); const userStore = useUserStore();
const spanWrap = ref(1); const spanWrap = ref(1);
const setting = ref({});
async function getData() { async function getData() {
const res: any = await getSpecialData(); const res: any = await getSpecialData();
// //
res?.forEach((item) => { res?.forEach((item, index) => {
res.isHover = false; if (item.title == '系统管理') {
if (Math.ceil(item.title.length / 6) > spanWrap.value) { setting.value = item;
spanWrap.value = Math.ceil(item.title.length / 6); res.splice(index, 1);
} else {
res.isHover = false;
if (Math.ceil(item.title.length / 6) > spanWrap.value) {
spanWrap.value = Math.ceil(item.title.length / 6);
}
} }
}); });
list.value = res; list.value = res;
@ -276,42 +306,7 @@
box[1] = 40; box[1] = 40;
box[2] = 700; box[2] = 700;
box[3] = 1840; box[3] = 1840;
box[4] = 10; box[4] = 20;
// if (list.value.length <= 7) {
// box[0] = 80;
// box[1] = 85;
// box[2] = 700;
// box[3] = 1750;
// box[4] = 12;
// }
// if (list.value.length == 8) {
// box[0] = 80;
// box[1] = 185;
// box[2] = 700;
// box[3] = 1550;
// box[4] = 50;
// }
// if (list.value.length == 9 || list.value.length == 10) {
// box[0] = 80;
// box[1] = 135;
// box[2] = 700;
// box[3] = 1650;
// box[4] = 50;
// }
// if (list.value.length == 11 || list.value.length == 12) {
// box[0] = 80;
// box[1] = 85;
// box[2] = 700;
// box[3] = 1750;
// box[4] = 30;
// }
// if (list.value.length == 13 || list.value.length == 14) {
// box[0] = 80;
// box[1] = 85;
// box[2] = 700;
// box[3] = 1750;
// box[4] = 12;
// }
return box; return box;
} }
const updateWindowSize = () => { const updateWindowSize = () => {
@ -352,7 +347,7 @@
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.subject { .subject {
background-image: url('/subject_lindidiaocha/bg.png'); background-image: url('/subject_lindidiaocha/bg.webp');
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center; background-position: center;
background-size: cover; background-size: cover;
@ -375,9 +370,7 @@
justify-content: center; justify-content: center;
width: 100%; width: 100%;
//
font-family: Alimama ShuHeiTi; font-family: Alimama ShuHeiTi;
// font-size: 58px;
color: #ffffff; color: #ffffff;
// text-shadow: 0px 2px 3px rgba(0, 0, 0, 0.25); // text-shadow: 0px 2px 3px rgba(0, 0, 0, 0.25);
background: linear-gradient(268deg, #f8fbff 0%, #ffffff 100%); background: linear-gradient(268deg, #f8fbff 0%, #ffffff 100%);
@ -450,7 +443,8 @@
.line { .line {
position: relative; position: relative;
top: -2px; top: 0px;
font-size: 18px;
color: #ffffff; color: #ffffff;
} }
} }
@ -460,14 +454,14 @@
position: absolute; position: absolute;
height: 93%; height: 93%;
bottom: 10px; bottom: 10px;
left: 0px; left: 10px;
} }
&_right { &_right {
position: absolute; position: absolute;
height: 93%; height: 93%;
bottom: 10px; bottom: 10px;
right: 0px; right: 10px;
} }
&_box { &_box {
@ -524,9 +518,13 @@
position: relative; position: relative;
// //
font-family: Microsoft YaHei; font-family: Alimama ShuHeiTi;
color: #ffffff !important; font-weight: bold;
background: linear-gradient(0deg, #6da7ff 0%, #e2ebff 100%); font-size: 23px;
color: #ffffff;
line-height: 15px;
// text-shadow: 0px 2px 6px rgba(10, 30, 52, 0.48);
background: linear-gradient(0deg, #5db1fc 0%, #e2ebff 100%);
-webkit-background-clip: text; -webkit-background-clip: text;
-webkit-text-fill-color: transparent; -webkit-text-fill-color: transparent;
background-clip: text; background-clip: text;
@ -541,13 +539,13 @@
span { span {
position: absolute; position: absolute;
bottom: 10px; bottom: 10px;
left: calc(50% - 645px / 2); left: calc(50% - 660px / 2);
width: 645px; width: 660px;
height: 18px; height: 18px;
font-family: PingFang SC; font-family: PingFang SC;
font-weight: 400; font-weight: 400;
font-size: 18px; font-size: 18px;
color: #074684; color: #ffffff;
} }
img { img {