Merge branch 'main' of http://123.132.248.154:10000/HC_YFZX/CaiYuanYiTiHua
|
|
@ -65,13 +65,13 @@
|
|||
DTU和PLC完
|
||||
-->
|
||||
<div class="online">
|
||||
<div class="title">案件线索统计</div>
|
||||
<div class="title">图斑线索统计</div>
|
||||
<div class="online_con" id="container2">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="industry">
|
||||
<div class="title">案件分类统计</div>
|
||||
<div class="title">图斑分类统计</div>
|
||||
<div class="industry_con" id="container3"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -138,7 +138,7 @@
|
|||
<img class="centerimg" src="./images/newscase.png" />
|
||||
<img class="centerimgActive" style="display: none;"
|
||||
src="./images/newscase-active.png" />
|
||||
最新案件</span>
|
||||
最新图斑</span>
|
||||
</div>
|
||||
<!-- <div class="center_top_con_but" data-layerName="uavLayer" data-isActive="false">
|
||||
<span>无人机</span>
|
||||
|
|
@ -149,13 +149,13 @@
|
|||
<img class="centerimg" src="./images/historycase.png" />
|
||||
<img class="centerimgActive" style="display: none;"
|
||||
src="./images/historycase-active.png" />
|
||||
历史案件</span>
|
||||
历史图斑</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="center_bot" style="position:relative;">
|
||||
<div class="title">今日案件处理</div>
|
||||
<div class="title">今日图斑处理</div>
|
||||
<div
|
||||
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">
|
||||
|
|
@ -407,7 +407,7 @@
|
|||
<!-- <div class="pop2" style="height: 650px;"> -->
|
||||
<div class="pop2">
|
||||
<div class="pop-top">
|
||||
案件详情
|
||||
图斑详情
|
||||
<span class="pop-close">X</span>
|
||||
</div>
|
||||
<!-- <div class="pop-content" style="height: 560px;"> -->
|
||||
|
|
@ -424,15 +424,15 @@
|
|||
</thead> -->
|
||||
<tbody style="line-height:40px;">
|
||||
<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>图斑面积</td>
|
||||
<td class="caseinfoArea"> </td>
|
||||
</tr>
|
||||
<tr class="aaa" style="font-size: 16px;" align="center">
|
||||
<td>案件类型</td>
|
||||
<td>图斑类型</td>
|
||||
<td class="caseinfoType"> </td>
|
||||
<td>案件描述</td>
|
||||
<td>图斑描述</td>
|
||||
<td class="caseinfoDesc"> </td>
|
||||
</tr>
|
||||
<tr class="aaa" style="font-size: 16px;" align="center">
|
||||
|
|
@ -442,7 +442,7 @@
|
|||
<td class="caseinfoAddress"> </td>
|
||||
</tr>
|
||||
<tr class="aaa" style="font-size: 16px;" align="center">
|
||||
<td>案件图片</td>
|
||||
<td>图斑图片</td>
|
||||
<td colspan="3" class="caseinfoImages" style="text-align: left;">
|
||||
</td>
|
||||
</tr>
|
||||
|
|
@ -466,22 +466,22 @@
|
|||
<!--弹出框-->
|
||||
<div class="pop3">
|
||||
<div class="pop-top">
|
||||
案件处理信息
|
||||
图斑处理信息
|
||||
<span class="pop-close">X</span>
|
||||
</div>
|
||||
<div class="pop-content">
|
||||
<table class="panel-table case-detail" bordercolor="#deefff" border="1">
|
||||
<tbody style="line-height:40px;">
|
||||
<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>处理时间</td>
|
||||
<td class="dealTime"> </td>
|
||||
</tr>
|
||||
<tr class="aaa" style="font-size: 16px;" align="center">
|
||||
<td>案件类型</td>
|
||||
<td>图斑类型</td>
|
||||
<td class="caseinfoType"> </td>
|
||||
<td>案件描述</td>
|
||||
<td>图斑描述</td>
|
||||
<td class="caseinfoDesc"> </td>
|
||||
</tr>
|
||||
<tr class="aaa" style="font-size: 16px;" align="center">
|
||||
|
|
@ -495,11 +495,11 @@
|
|||
<td colspan="3" class="dealResult"> </td>
|
||||
</tr>
|
||||
<tr class="aaa" style="font-size: 16px;" align="center">
|
||||
<td>案件图片</td>
|
||||
<td>图斑图片</td>
|
||||
<td colspan="3" class="caseinfoImages" style="text-align: left;">
|
||||
</td>
|
||||
</tr>
|
||||
<!-- 案件处理图片 -->
|
||||
<!-- 图斑处理图片 -->
|
||||
<tr class="aaa" style="font-size: 16px;" align="center">
|
||||
<td>处理图片</td>
|
||||
<td colspan="3" class="dealImages">
|
||||
|
|
|
|||
|
|
@ -240,7 +240,7 @@ function getCaseClassData() {
|
|||
}
|
||||
});
|
||||
}
|
||||
//今日案件处理
|
||||
//今日图斑处理
|
||||
$.ajax({
|
||||
type: "GET",
|
||||
url: BASE_URL + "/api/DroneScreenDisplay/LoadDroneCaseDeal",
|
||||
|
|
@ -285,7 +285,7 @@ function getTodayCaseDeal() {
|
|||
}
|
||||
|
||||
// target2.on("click", ".click_pop2", function(){
|
||||
// 今日案件处理详情
|
||||
// 今日图斑处理详情
|
||||
$(".click_pop2").click(function () {
|
||||
$('.bgPop3,.pop3').show();
|
||||
var IMAGE_BASE_URL = " http://60.213.14.14:6070";
|
||||
|
|
@ -786,16 +786,16 @@ function updateData() {
|
|||
// 获取最新上报
|
||||
getNewestReport();
|
||||
|
||||
//获取今日案件处理
|
||||
//获取今日图斑处理
|
||||
getTodayCaseDeal();
|
||||
|
||||
//线索办理图表数据更新
|
||||
getDealingAndCompleteData();
|
||||
|
||||
//案件线索统计表数据更新
|
||||
//图斑线索统计表数据更新
|
||||
getVillageData();
|
||||
|
||||
//案件分类统计表数据更新
|
||||
//图斑分类统计表数据更新
|
||||
getCaseClassData();
|
||||
|
||||
//本周图表数据更新
|
||||
|
|
@ -840,8 +840,8 @@ var scn_data = {
|
|||
factoryHeader: [
|
||||
{ "categories": "处理时间" },
|
||||
// {"categories":"上报时间"},
|
||||
{ "categories": "案件类型" },
|
||||
{ "categories": "案件描述" },
|
||||
{ "categories": "图斑类型" },
|
||||
{ "categories": "图斑描述" },
|
||||
{ "categories": "乡镇" },
|
||||
{ "categories": "处理结果" }
|
||||
],
|
||||
|
|
@ -1057,7 +1057,7 @@ function loadCompleteCaseCountCharts(plc) {
|
|||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: ['案件总数', '已处理数'],
|
||||
data: ['图斑总数', '已处理数'],
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
|
|
@ -1167,7 +1167,7 @@ function loadCompleteCaseCountCharts(plc) {
|
|||
}
|
||||
loadCompleteCaseCountCharts(news_drow_dtu_num);
|
||||
|
||||
//加载乡镇案件线索统计表
|
||||
//加载乡镇图斑线索统计表
|
||||
var villageCharts = null;
|
||||
function loadVillageData(online) {
|
||||
let option = {
|
||||
|
|
@ -1222,7 +1222,7 @@ function loadVillageData(online) {
|
|||
},
|
||||
series: [
|
||||
{
|
||||
name: '乡镇案件数量',
|
||||
name: '乡镇图斑数量',
|
||||
type: 'pictorialBar',
|
||||
pictorialBar: '40%',
|
||||
// symbol: 'path://M0,10 L10,10 L5,0 L0,10 z',
|
||||
|
|
@ -1273,7 +1273,7 @@ function loadVillageData(online) {
|
|||
}
|
||||
loadVillageData(news_online);
|
||||
|
||||
//加载案件分类统计
|
||||
//加载图斑分类统计
|
||||
var caseClassCharts = null;
|
||||
function loadCaseClassCharts(industy) {
|
||||
|
||||
|
|
@ -1296,7 +1296,7 @@ function loadCaseClassCharts(industy) {
|
|||
calculable: true,
|
||||
series: [
|
||||
{
|
||||
name: '案件分类统计',
|
||||
name: '图斑分类统计',
|
||||
type: 'pie',
|
||||
radius: ['35%', '55%'],
|
||||
center: ['50%', '40%'],
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ $(function () {
|
|||
// flyTo: true
|
||||
// },
|
||||
// {
|
||||
// name: "历史案件",
|
||||
// name: "历史图斑",
|
||||
// type: "wms",
|
||||
// url: "http://175.27.168.120:8080/geoserver/feixian/wms",
|
||||
// layers: "tanyizhen:anjianjilu",
|
||||
|
|
|
|||
|
|
@ -468,7 +468,7 @@ function loadNewestReportPoint() {
|
|||
|
||||
var townshipName = document.createElement("div");
|
||||
townshipName.className = 'townshipName';
|
||||
var mytext = document.createTextNode("历史案件:" + townships[t].historyCount);
|
||||
var mytext = document.createTextNode("历史图斑:" + townships[t].historyCount);
|
||||
townshipName.appendChild(mytext);
|
||||
|
||||
|
||||
|
|
@ -490,7 +490,7 @@ function loadNewestReportPoint() {
|
|||
|
||||
var newestName = document.createElement("div");
|
||||
newestName.className = 'newestName';
|
||||
var mytext = document.createTextNode("最新案件:" + townships[t].newestCount);
|
||||
var mytext = document.createTextNode("最新图斑:" + townships[t].newestCount);
|
||||
newestName.appendChild(mytext);
|
||||
|
||||
|
||||
|
|
@ -811,7 +811,7 @@ map.on('load', function () {
|
|||
'fill-opacity': 1,
|
||||
}
|
||||
});
|
||||
// 历史案件数量
|
||||
// 历史图斑数量
|
||||
map.addLayer({
|
||||
id: `historyCaseLayer`,
|
||||
type: 'symbol',
|
||||
|
|
@ -820,7 +820,7 @@ map.on('load', function () {
|
|||
layout: {
|
||||
'icon-image': '',
|
||||
visibility: 'none',
|
||||
'text-field': '历史案件:{count}',//此属性为需要显示的字段
|
||||
'text-field': '历史图斑:{count}',//此属性为需要显示的字段
|
||||
'text-size': 12,
|
||||
'text-offset': [0, 1],
|
||||
'text-allow-overlap': false, // 是否允许文本重叠(可选,默认值为 false。
|
||||
|
|
@ -835,7 +835,7 @@ map.on('load', function () {
|
|||
'text-translate-anchor': 'map', // 文本的平移锚点,即相对的参考物(可选,可选值为 map、viewport,默认为 map)
|
||||
},
|
||||
})
|
||||
// 最新案件数量
|
||||
// 最新图斑数量
|
||||
map.addLayer({
|
||||
id: `newCaseLayer`,
|
||||
type: 'symbol',
|
||||
|
|
@ -844,7 +844,7 @@ map.on('load', function () {
|
|||
layout: {
|
||||
'icon-image': '',
|
||||
visibility: 'none',
|
||||
'text-field': '最新案件:{newestCount}',//此属性为需要显示的字段
|
||||
'text-field': '最新图斑:{newestCount}',//此属性为需要显示的字段
|
||||
'text-size': 12,
|
||||
'text-offset': [0, -1],
|
||||
'text-allow-overlap': false, // 是否允许文本重叠(可选,默认值为 false。
|
||||
|
|
@ -1066,7 +1066,7 @@ map.on('load', function () {
|
|||
// "icon-image": "cat"
|
||||
// }
|
||||
// });
|
||||
//历史案件
|
||||
//历史图斑
|
||||
function getPolygonCenter(pList) { //获取多边形中心点
|
||||
var area = 0;
|
||||
var x = 0;
|
||||
|
|
@ -1176,7 +1176,7 @@ map.on('load', function () {
|
|||
return item.name == e.features[0].properties.XZQMC;
|
||||
})
|
||||
|
||||
var str = "乡镇名称:" + e.features[0].properties.XZQMC + "<br> <br>案件数量:" + townshipInfo[0].reportCount;
|
||||
var str = "乡镇名称:" + e.features[0].properties.XZQMC + "<br> <br>图斑数量:" + townshipInfo[0].reportCount;
|
||||
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 lsajs = townshipInfo[0].historyCount || ''
|
||||
var str = "区域名称:" + e.features[0].properties.name + "<br> <br>案件数量:" + townshipInfo[0].reportCount;
|
||||
var str = "区域名称:" + e.features[0].properties.name + "<br> <br>图斑数量:" + townshipInfo[0].reportCount;
|
||||
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) {
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 531 KiB |
|
After Width: | Height: | Size: 188 KiB |
|
Before Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 7.0 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 918 B |
|
Before Width: | Height: | Size: 292 B |
|
After Width: | Height: | Size: 88 B |
|
After Width: | Height: | Size: 84 B |
|
After Width: | Height: | Size: 86 B |
|
After Width: | Height: | Size: 82 B |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 30 KiB |
|
|
@ -16,9 +16,9 @@ enum Api {
|
|||
LoadReformCaseCount = '/api/DroneCaseInfoFLH/LoadTaskCount',
|
||||
// 非粮化 整改审核第二层
|
||||
LoadTaskIllegalDetailList = '/api/DroneCaseInfoFLH/LoadTaskIllegalDetailList',
|
||||
// 案件详情
|
||||
// 图斑详情
|
||||
GetCaseInfoById = '/api/DroneCaseInfoFLH/GetCaseInfoById',
|
||||
// 非粮化 图斑调整 更新案件行政区划
|
||||
// 非粮化 图斑调整 更新图斑行政区划
|
||||
UpdateDroneCaseInfo = '/api/DroneCaseInfoFLH/UpdateDroneCaseInfo',
|
||||
// 分割还原
|
||||
CaseRecover = '/api/DroneCaseInfoFLH/CaseRecover',
|
||||
|
|
|
|||
|
|
@ -14,9 +14,9 @@ enum Api {
|
|||
// complete-导出
|
||||
Get_ExportCaseInfoList = '/api/DroneCaseinfo/ExportCaseInfoList',
|
||||
|
||||
// 案件详情
|
||||
// 图斑详情
|
||||
Get_getCaseInfo = '/api/DroneCaseinfo/GetCaseInfo',
|
||||
// 获取案件处理流程
|
||||
// 获取图斑处理流程
|
||||
Get_GetCaseFlowLog = '/api/DroneCaseinfo/GetCaseFlowLog',
|
||||
// 处理详情
|
||||
Get_GetDroneCaseDeal = '/api/DroneCaseinfo/GetDroneCaseDeal',
|
||||
|
|
@ -61,7 +61,7 @@ export function fun_ExportCaseInfoList(params) {
|
|||
});
|
||||
}
|
||||
|
||||
// 案件详情
|
||||
// 图斑详情
|
||||
export function fun_getCaseInfo(params) {
|
||||
return defHttp.get<responsesmodel>({
|
||||
url: Api.Get_getCaseInfo,
|
||||
|
|
@ -77,7 +77,7 @@ export function fun_GetCaseFlowLog(params) {
|
|||
});
|
||||
}
|
||||
|
||||
// 获取案件处理流程
|
||||
// 获取图斑处理流程
|
||||
export function fun_GetDroneCaseDeal(params) {
|
||||
return defHttp.get<droneCaseDealModel>({
|
||||
url: Api.Get_GetDroneCaseDeal,
|
||||
|
|
|
|||
|
|
@ -80,17 +80,27 @@ enum Api {
|
|||
CaseOffence = '/api/DroneCaseInfoSingle/CaseOffence',
|
||||
LoadCaseInfoListOffence = '/api/DroneCaseInfoSingle/LoadCaseInfoListOffence',
|
||||
DealIllegalCaseInfo = '/api/DroneCaseInfoSingle/dealIllegalCaseInfo',
|
||||
// 修改案件-获取案件列表
|
||||
// 修改图斑-获取图斑列表
|
||||
LoadCaseInfoListForUpdate = '/api/DroneCaseInfoSingle/LoadCaseInfoListForUpdate',
|
||||
// 修改案件-获取单个案件信息
|
||||
// 修改图斑-获取单个图斑信息
|
||||
LoadCaseInfoById = '/api/DroneCaseInfoSingle/LoadCaseInfoById',
|
||||
// 修改案件-修改案件信息
|
||||
// 修改图斑-修改图斑信息
|
||||
UpdateCaseInfo = '/api/DroneCaseInfoSingle/UpdateCaseInfo',
|
||||
// 修改案件-获取案件历史信息
|
||||
// 修改图斑-获取图斑历史信息
|
||||
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) =>
|
||||
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 });
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ enum Api {
|
|||
LoadReformCaseCount = '/api/DroneCaseInfoSatellite/LoadReformCaseCount',
|
||||
// 非法采矿整改审核第二层
|
||||
LoadTaskIllegalDetailList = '/api/DroneCaseInfoSatellite/LoadTaskIllegalDetailList',
|
||||
// 案件详情
|
||||
// 图斑详情
|
||||
GetCaseInfoById = '/api/DroneCaseInfoSatellite/GetCaseInfoById',
|
||||
}
|
||||
export function LoadCaiKuangTaskList(params) {
|
||||
|
|
|
|||
|
|
@ -11,25 +11,25 @@ import {
|
|||
} from './model/index';
|
||||
|
||||
enum Api {
|
||||
// 获取案件详情步骤条
|
||||
// 获取图斑详情步骤条
|
||||
GetCaseFlowLog = '/api/DroneCaseinfo/GetCaseFlowLog',
|
||||
// 获取案件处理详情
|
||||
// 获取图斑处理详情
|
||||
GetDroneCaseDeal = '/api/DroneCaseinfo/GetDroneCaseDeal',
|
||||
// 获取案件详情
|
||||
// 获取图斑详情
|
||||
GetCaseInfo = '/api/DroneCaseinfo/GetCaseInfo',
|
||||
// 案件列表
|
||||
// 图斑列表
|
||||
// LoadCaseInfoList = '/api/DroneCaseinfo/LoadCaseInfoList',
|
||||
LoadCaseInfoList = '/api/DroneCaseInfoSingle/LoadCaseInfoList',
|
||||
// 导出案件
|
||||
// 导出图斑
|
||||
ExportCaseInfo = "/api/DroneCaseInfoSingle/DroneCaseInfoExport",
|
||||
// 案件统计列表
|
||||
// 图斑统计列表
|
||||
// 获取GeoJson图层
|
||||
GetDroneGeoJson = '/api/DroneCaseinfo/GetDroneGeoJson',
|
||||
// 上报案件(案件判读保存)
|
||||
// 上报图斑(图斑判读保存)
|
||||
AddDroneCaseInfo = '/api/DroneCaseinfo/AddDroneCaseInfo',
|
||||
// 案件判读
|
||||
// 图斑判读
|
||||
UpdateDroneCaseInfoIntact = '/api/DroneCaseinfo/UpdateDroneCaseInfoIntact',
|
||||
// 关闭案件
|
||||
// 关闭图斑
|
||||
CloseDroneCaseInfo = '/api/DroneCaseinfo/CloseDroneCaseInfo',
|
||||
// 上传图片任务列表
|
||||
PicListTask = '/api/DroneShpImageexif/ListTask',
|
||||
|
|
|
|||
|
|
@ -12,20 +12,20 @@ import {
|
|||
enum Api {
|
||||
// 获取待办任务统计数据
|
||||
LoadTaskCount = '/api/DroneCaseInfoSingle/LoadTaskCount',
|
||||
// 获取案件信息统计数据
|
||||
// 获取图斑信息统计数据
|
||||
LoadDroneCaseInfoCount = '/api/DroneCaseInfoSingle/LoadDroneCaseInfoCount',
|
||||
// 分页获取案件信息列表
|
||||
// 分页获取图斑信息列表
|
||||
LoadDroneCaseInfoDetail = '/api/DroneCaseInfoSingle/LoadTasklList',
|
||||
// 分页获取任务信息列表
|
||||
LoadTaskDetailList = '/api/DroneCaseInfoSingle/LoadTaskDetailList',
|
||||
// 收藏案件
|
||||
// 收藏图斑
|
||||
AddCaseFavorite = '/api/DroneCaseInfoSingle/AddCaseFavorite',
|
||||
// 获取收藏案件列表
|
||||
// 获取收藏图斑列表
|
||||
FavoriteCaseList = '/api/DroneCaseinfo/FavoriteCaseList',
|
||||
DeleteFavoriteCase = '/api/DroneCaseInfoSingle/DeleteFavoriteCase',
|
||||
// 获取案件详情
|
||||
// 获取图斑详情
|
||||
GetCaseInfoById = '/api/DroneCaseInfoSingle/GetCaseInfoById',
|
||||
// 更新案件行政区划
|
||||
// 更新图斑行政区划
|
||||
UpdateDroneCaseInfo = '/api/DroneCaseInfoSingle/UpdateDroneCaseInfo',
|
||||
// 督办流程
|
||||
Supervise = '/api/WFProcess/Supervise',
|
||||
|
|
@ -47,7 +47,7 @@ enum Api {
|
|||
GetPolygonCenter = '/api/DroneCaseInfoSingle/GetCenterPoints',
|
||||
// 获取用户访问机构权限
|
||||
GetUserOrgs = '/api/Check/GetOrgs',
|
||||
// 大屏下发案件统计
|
||||
// 大屏下发图斑统计
|
||||
IssuedStatitical = "/api/DroneScreenDisplay/CaseOffenceXiaFa",
|
||||
// 大屏核实新增统计
|
||||
VerifyStatitical = "/api/DroneScreenDisplay/CaseOffenceCheckAdd",
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
<template>
|
||||
<div class="my-form-viewer">
|
||||
<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">
|
||||
<BasicForm ref="tabsFormRef" @register="registerForm">
|
||||
<BasicForm :ref="`tabsFormRef${index}`" @register="registerForm" :key="index">
|
||||
<template #CardGroup>
|
||||
<CardGourp
|
||||
v-if="cardGroupData.length > 0 && cardGroupData[index]"
|
||||
|
|
@ -91,8 +91,13 @@
|
|||
const { proxy } = getCurrentInstance();
|
||||
const emit = defineEmits(['getFormSuccess']);
|
||||
const subTableDataStore = subTableStore();
|
||||
const tabsFormRef = ref()
|
||||
const formRef = ref()
|
||||
const tabsFormRef0 = ref();
|
||||
const tabsFormRef1 = ref();
|
||||
const tabsFormRef2 = ref();
|
||||
const tabsFormRef3 = ref();
|
||||
const tabsFormRef4 = ref();
|
||||
const formRef = ref();
|
||||
const activeTabsKey = ref();
|
||||
let formColumns: FormSchema[] = [];
|
||||
const props = defineProps({
|
||||
formConfig: Object,
|
||||
|
|
@ -211,7 +216,7 @@
|
|||
tabElement.schemas.forEach((element) => {
|
||||
if (element.field == props.formRelationId) {
|
||||
keyValue.value = element.componentProps.fieldName;
|
||||
getFormDetail();
|
||||
getFormDetail(scheme.formInfo.tabList);
|
||||
disDetail = true;
|
||||
}
|
||||
if (element.component === 'InputGuid') {
|
||||
|
|
@ -341,11 +346,11 @@
|
|||
}
|
||||
setTimeout(() => {
|
||||
setFieldsValue(FieldsValue.value);
|
||||
clearValidate()
|
||||
clearValidate();
|
||||
}, 10);
|
||||
}
|
||||
|
||||
async function getFormDetail() {
|
||||
async function getFormDetail(element) {
|
||||
var instance = props.instanceInfo;
|
||||
const querys = {
|
||||
id: props.formVerison,
|
||||
|
|
@ -370,7 +375,21 @@
|
|||
});
|
||||
}
|
||||
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();
|
||||
FieldsValue.value = obj;
|
||||
setFieldsValue({
|
||||
|
|
@ -409,17 +428,29 @@
|
|||
emit('getFormSuccess', data[mainTable][0]);
|
||||
}
|
||||
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() {
|
||||
try {
|
||||
// 验证卡片组必填项
|
||||
if (groupRef.value) {
|
||||
if (groupRef.value.length > 0) {
|
||||
groupRef.value.forEach(async (item) => {
|
||||
await item.changeForm();
|
||||
if (!(item.verify())) {
|
||||
for (let index = 0; index < groupRef.value.length; index++) {
|
||||
await groupRef.value[index].changeForm();
|
||||
if (!(await groupRef.value[index].verify())) {
|
||||
return false;
|
||||
}
|
||||
})
|
||||
}
|
||||
} else {
|
||||
await groupRef.value.changeForm();
|
||||
if (!(await groupRef.value.verify())) {
|
||||
|
|
@ -428,26 +459,64 @@
|
|||
}
|
||||
}
|
||||
console.log(subTableDataStore.getGroupData);
|
||||
let resultObj = {}
|
||||
if(tabsFormRef.value){
|
||||
tabsFormRef.value.forEach((item,index) => {
|
||||
console.log(item.getFieldsValue(),index)
|
||||
let data = item.getFieldsValue()
|
||||
Object.keys(data).forEach(key => {
|
||||
if(!resultObj[key]){
|
||||
resultObj[key] = data[key]
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
//卡片组的值赋值给form,优化卡片组必填验证不通过
|
||||
let resultObj = {};
|
||||
let values;
|
||||
switch (activeTabsKey.value) {
|
||||
case 0:
|
||||
resultObj = tabsFormRef0.value[0].getFieldsValue();
|
||||
tabsFormRef0.value[0].setFieldsValue({
|
||||
...resultObj,
|
||||
...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,
|
||||
});
|
||||
|
||||
// 验证表单必填项
|
||||
let values = await validate();
|
||||
values = await validate();
|
||||
break;
|
||||
}
|
||||
for (const key in values) {
|
||||
for (const fieKey in FieldsValue.value) {
|
||||
if (key == fieKey) {
|
||||
|
|
@ -507,8 +576,8 @@
|
|||
if (props.formVerison) {
|
||||
getFormHistory();
|
||||
}
|
||||
tabsFormRef.value && tabsFormRef.value.clearValidate();
|
||||
formRef.value && formRef.value.clearValidate();
|
||||
// tabsFormRef.value && tabsFormRef.value.clearValidate();
|
||||
// formRef.value && formRef.value.clearValidate();
|
||||
});
|
||||
function radioVal() {
|
||||
console.log('radioVal');
|
||||
|
|
|
|||
|
|
@ -69,6 +69,10 @@ export const patchSourceOptions = [
|
|||
label: '省级矿产卫片图斑',
|
||||
value: '省级矿产卫片图斑',
|
||||
},
|
||||
{
|
||||
label: '省级月度图斑',
|
||||
value: '省级月度图斑',
|
||||
},
|
||||
];
|
||||
export const isOverdueOptions = [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@
|
|||
message.warning('请选择一条数据');
|
||||
return;
|
||||
}
|
||||
modalData.title = type === 'bindCaseTypes' ? '分配案件类型' : '分配角色';
|
||||
modalData.title = type === 'bindCaseTypes' ? '分配图斑类型' : '分配角色';
|
||||
modalData.topicId = row[0].topicId;
|
||||
modalData.type = type;
|
||||
openModal.value = true;
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ export const columns = [
|
|||
dataIndex: 'topicName',
|
||||
},
|
||||
{
|
||||
title: '案件类型',
|
||||
title: '图斑类型',
|
||||
dataIndex: 'caseTypes',
|
||||
},
|
||||
{
|
||||
|
|
@ -46,7 +46,7 @@ export const emptyTopicItem = {
|
|||
};
|
||||
export const caseTypesColumns = [
|
||||
{
|
||||
title: '案件名称',
|
||||
title: '图斑名称',
|
||||
dataIndex: 'itemName',
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
<BasicModal
|
||||
v-bind="$attrs"
|
||||
@register="registerModal"
|
||||
title="案件详情"
|
||||
title="图斑详情"
|
||||
:canFullscreen="false"
|
||||
:defaultFullscreen="true"
|
||||
:showCancelBtn="false"
|
||||
|
|
@ -72,7 +72,7 @@
|
|||
dataIndex: 'communityname',
|
||||
},
|
||||
{
|
||||
title: '案件描述',
|
||||
title: '图斑描述',
|
||||
dataIndex: 'case_description',
|
||||
},
|
||||
{
|
||||
|
|
@ -105,7 +105,7 @@
|
|||
},
|
||||
{
|
||||
title: '下发时间',
|
||||
dataIndex: 'createtime',
|
||||
dataIndex: 'synchronoustime',
|
||||
},
|
||||
{
|
||||
title: '项目名称',
|
||||
|
|
|
|||
|
|
@ -229,10 +229,10 @@ export const searchFormSchema: FormSchema[] = [
|
|||
component: 'RangePicker',
|
||||
colProps: { span: 8 },
|
||||
componentProps: {
|
||||
format: 'YYYY-MM',
|
||||
picker: 'month',
|
||||
format: 'YYYY-MM-DD',
|
||||
// picker: 'month',
|
||||
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')]
|
||||
},
|
||||
},
|
||||
];
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@
|
|||
<a-modal v-model:open="open_chuantou" title="导出文件类型" :footer="null">
|
||||
<div>
|
||||
<a-button class="exportbutton" @click="handleExport('chuantou_execl')">
|
||||
统计明细案件信息(execl)
|
||||
统计明细图斑信息(execl)
|
||||
</a-button>
|
||||
<a-button class="exportbutton" @click="handleExport('chuantou_shp')">
|
||||
统计明细矢量数据(shp)
|
||||
|
|
@ -279,9 +279,14 @@
|
|||
},
|
||||
beforeFetch: (data) => {
|
||||
// 接口请求前 参数处理
|
||||
// 默认展示昨天的
|
||||
var temp = {
|
||||
startTime: dayjs(data.startTime).startOf('month').format('YYYY-MM-DD'),
|
||||
endTime: dayjs(data.endTime).endOf('month').format('YYYY-MM-DD HH:mm:ss'),
|
||||
startTime: data.startTime
|
||||
? 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;
|
||||
},
|
||||
|
|
@ -310,8 +315,8 @@
|
|||
const searchForm = reactive<searchListSchema>({
|
||||
AreaId: record.countyid,
|
||||
CaseType: CaseType,
|
||||
startTime: dayjs(searchParams.value?.startTime).startOf('month').format('YYYY-MM-DD'),
|
||||
endTime: dayjs(searchParams.value?.endTime).endOf('month').format('YYYY-MM-DD HH:mm:ss'),
|
||||
startTime: dayjs(searchParams.value?.startTime).startOf('day').format('YYYY-MM-DD'),
|
||||
endTime: dayjs(searchParams.value?.endTime).endOf('day').format('YYYY-MM-DD HH:mm:ss'),
|
||||
page: 1,
|
||||
limit: 10,
|
||||
});
|
||||
|
|
@ -407,22 +412,22 @@
|
|||
let params: any = {};
|
||||
let afterTitle = '';
|
||||
if (
|
||||
dayjs(searchParams.value?.startTime).startOf('month').format('YYYY-MM') ===
|
||||
dayjs(searchParams.value?.endTime).endOf('month').format('YYYY-MM')
|
||||
dayjs(searchParams.value?.startTime).startOf('day').format('YYYY-MM-DD') ===
|
||||
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 {
|
||||
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) {
|
||||
case 'chuantou_execl':
|
||||
// 穿透-导出案件明细execl
|
||||
// 穿透-导出图斑明细execl
|
||||
url = VITE_GLOB_API_URL + '/api/DroneCaseInfoSingle/ExprotCaseListByType';
|
||||
fileName =
|
||||
'统计明细案件信息 ' +
|
||||
'统计明细图斑信息 ' +
|
||||
tablist[activeKey.value].countyname +
|
||||
'-' +
|
||||
tablist[activeKey.value].label +
|
||||
|
|
@ -431,7 +436,7 @@
|
|||
'.xls';
|
||||
break;
|
||||
case 'chuantou_shp':
|
||||
// 穿透-导出案件明细shp
|
||||
// 穿透-导出图斑明细shp
|
||||
url = VITE_GLOB_API_URL + '/api/DroneCaseInfoSingle/ExportShapefile';
|
||||
fileName =
|
||||
'统计明细矢量数据 ' +
|
||||
|
|
@ -468,8 +473,8 @@
|
|||
}
|
||||
if (['mingxi_1', 'mingxi_2', 'mingxi_3'].includes(exportType)) {
|
||||
params = {
|
||||
startTime: dayjs(searchParams.value?.startTime).startOf('month').format('YYYY-MM-DD'),
|
||||
endTime: dayjs(searchParams.value?.endTime).endOf('month').format('YYYY-MM-DD HH:mm:ss'),
|
||||
startTime: dayjs(searchParams.value?.startTime).startOf('day').format('YYYY-MM-DD'),
|
||||
endTime: dayjs(searchParams.value?.endTime).endOf('day').format('YYYY-MM-DD HH:mm:ss'),
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
<BasicModal
|
||||
v-bind="$attrs"
|
||||
@register="registerModal"
|
||||
title="案件详情"
|
||||
title="图斑详情"
|
||||
:canFullscreen="false"
|
||||
:defaultFullscreen="true"
|
||||
:showCancelBtn="false"
|
||||
|
|
@ -73,7 +73,7 @@
|
|||
dataIndex: 'communityname',
|
||||
},
|
||||
{
|
||||
title: '案件描述',
|
||||
title: '图斑描述',
|
||||
dataIndex: 'case_description',
|
||||
},
|
||||
{
|
||||
|
|
@ -97,7 +97,7 @@
|
|||
dataIndex: 'is_illegal',
|
||||
},
|
||||
{
|
||||
title: '案件状态',
|
||||
title: '图斑状态',
|
||||
dataIndex: 'handle_status_name',
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@
|
|||
<a-modal v-model:open="open_chuantou" title="导出文件类型" :footer="null">
|
||||
<div>
|
||||
<a-button class="exportbutton" @click="handleExport('chuantou_execl')">
|
||||
统计明细案件信息(execl)
|
||||
统计明细图斑信息(execl)
|
||||
</a-button>
|
||||
<a-button class="exportbutton" @click="handleExport('chuantou_shp')">
|
||||
统计明细矢量数据(shp)
|
||||
|
|
@ -421,10 +421,10 @@
|
|||
}
|
||||
switch (exportType) {
|
||||
case 'chuantou_execl':
|
||||
// 穿透-导出案件明细execl
|
||||
// 穿透-导出图斑明细execl
|
||||
url = VITE_GLOB_API_URL + '/api/DroneCaseInfoSingle/ExprotCaseListByType';
|
||||
fileName =
|
||||
'统计明细案件信息 ' +
|
||||
'统计明细图斑信息 ' +
|
||||
tablist[activeKey.value].countyname +
|
||||
'-' +
|
||||
tablist[activeKey.value].label +
|
||||
|
|
@ -433,7 +433,7 @@
|
|||
'.xls';
|
||||
break;
|
||||
case 'chuantou_shp':
|
||||
// 穿透-导出案件明细shp
|
||||
// 穿透-导出图斑明细shp
|
||||
url = VITE_GLOB_API_URL + '/api/DroneCaseInfoSingle/ExportShapefile';
|
||||
fileName =
|
||||
'统计明细矢量数据 ' +
|
||||
|
|
|
|||
|
|
@ -13,10 +13,10 @@
|
|||
:label-col="labelCol"
|
||||
: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-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-form-item>
|
||||
<a-form-item label="县区" name="countyid">
|
||||
|
|
@ -61,10 +61,10 @@
|
|||
:label-col="labelCol"
|
||||
: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-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-form-item>
|
||||
<a-form-item label="县区" name="countyid">
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@
|
|||
<a-descriptions-item label="备注">{{ remark }}</a-descriptions-item>
|
||||
<a-descriptions-item label="经度">{{ lng }}</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="图斑照片">
|
||||
<div class="image-div">
|
||||
<a-image-preview-group
|
||||
|
|
@ -476,6 +476,7 @@
|
|||
hexiaotime,
|
||||
wrjffzhaopian,
|
||||
xchczhaopian,
|
||||
synchronoustime,
|
||||
} = props.showInfoData;
|
||||
const anjianzhaopianList = computed(() => {
|
||||
return anjianzhaopian ? anjianzhaopian.split(',') : [];
|
||||
|
|
|
|||
|
|
@ -87,11 +87,11 @@
|
|||
<div :style="`${showSortMark('gengdi_area',2)? 'color: #086DEC;': ''}`">▼</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-icon">
|
||||
<div :style="`${showSortMark('createtime',1)? 'color: #086DEC;': ''}`">▲</div>
|
||||
<div :style="`${showSortMark('createtime',2)? 'color: #086DEC;': ''}`">▼</div>
|
||||
<div :style="`${showSortMark('synchronoustime',1)? 'color: #086DEC;': ''}`">▲</div>
|
||||
<div :style="`${showSortMark('synchronoustime',2)? 'color: #086DEC;': ''}`">▼</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
<PermissionBtn @btn-event="onBtnClicked" />
|
||||
</template>
|
||||
<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]) }}
|
||||
</template>
|
||||
<template v-if="column.key === 'action'">
|
||||
|
|
|
|||
|
|
@ -40,6 +40,10 @@ export const columns: BasicColumn[] = [
|
|||
title: '图斑面积',
|
||||
dataIndex: 'area',
|
||||
},
|
||||
{
|
||||
title: '农用地面积',
|
||||
dataIndex: 'nongyongdiarea',
|
||||
},
|
||||
{
|
||||
title: '耕地面积',
|
||||
dataIndex: 'gengdiarea',
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@
|
|||
<a-descriptions-item label="备注">{{ remark }}</a-descriptions-item>
|
||||
<a-descriptions-item label="经度">{{ lng }}</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="图斑照片">
|
||||
<div class="image-div">
|
||||
<template v-for="(imageItem, imageIndex) in casepicList" :key="imageIndex">
|
||||
|
|
@ -452,6 +452,7 @@
|
|||
hexiaotime,
|
||||
wrjffzhaopian,
|
||||
xchczhaopian,
|
||||
synchronoustime,
|
||||
} = props.showInfoData;
|
||||
const anjianzhaopianList = computed(() => {
|
||||
return anjianzhaopian ? anjianzhaopian.split(',') : [];
|
||||
|
|
|
|||
|
|
@ -87,11 +87,11 @@
|
|||
<div :style="`${showSortMark('gengdi_area',2)? 'color: #086DEC;': ''}`">▼</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-icon">
|
||||
<div :style="`${showSortMark('createtime',1)? 'color: #086DEC;': ''}`">▲</div>
|
||||
<div :style="`${showSortMark('createtime',2)? 'color: #086DEC;': ''}`">▼</div>
|
||||
<div :style="`${showSortMark('synchronoustime',1)? 'color: #086DEC;': ''}`">▲</div>
|
||||
<div :style="`${showSortMark('synchronoustime',2)? 'color: #086DEC;': ''}`">▼</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
<PermissionBtn @btn-event="onBtnClicked" />
|
||||
</template>
|
||||
<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]) }}
|
||||
</template>
|
||||
<template v-if="column.key === 'action'">
|
||||
|
|
|
|||
|
|
@ -40,6 +40,10 @@ export const columns: BasicColumn[] = [
|
|||
title: '图斑面积',
|
||||
dataIndex: 'area',
|
||||
},
|
||||
{
|
||||
title: '农用地面积',
|
||||
dataIndex: 'nongyongdiarea',
|
||||
},
|
||||
{
|
||||
title: '耕地面积',
|
||||
dataIndex: 'gengdiarea',
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
<div class="case-view_content">
|
||||
<div class="file-box w-1/2 xl:w-1/2" v-if="caseHandleInfo">
|
||||
<CollapseContainer
|
||||
title="【案件下发信息】"
|
||||
title="【图斑下发信息】"
|
||||
:canExpan="false"
|
||||
v-if="current == 0 || current == 4"
|
||||
>
|
||||
|
|
@ -22,7 +22,7 @@
|
|||
</CollapseContainer>
|
||||
|
||||
<CollapseContainer
|
||||
title="【案件核查信息】"
|
||||
title="【图斑核查信息】"
|
||||
:canExpan="false"
|
||||
v-if="current == 1 || current == 4"
|
||||
>
|
||||
|
|
@ -34,7 +34,7 @@
|
|||
</CollapseContainer>
|
||||
|
||||
<CollapseContainer
|
||||
title="【案件办理信息-合法举证】"
|
||||
title="【图斑办理信息-合法举证】"
|
||||
:canExpan="false"
|
||||
v-if="
|
||||
(caseHandleInfo.is_illegal == '合法' && current == 2) ||
|
||||
|
|
@ -49,18 +49,18 @@
|
|||
</CollapseContainer>
|
||||
|
||||
<CollapseContainer
|
||||
title="【案件办理信息-伪变化】"
|
||||
title="【图斑办理信息-伪变化】"
|
||||
:canExpan="false"
|
||||
v-if="
|
||||
(caseHandleInfo.is_illegal == '伪变化' && current == 2) ||
|
||||
(caseHandleInfo.is_illegal == '伪变化' && current == 4)
|
||||
"
|
||||
>
|
||||
<div> 伪变化没有案件办理信息 </div>
|
||||
<div> 伪变化没有图斑办理信息 </div>
|
||||
</CollapseContainer>
|
||||
|
||||
<CollapseContainer
|
||||
title="【案件办理信息-违法-拟拆除】"
|
||||
title="【图斑办理信息-违法-拟拆除】"
|
||||
:canExpan="false"
|
||||
v-if="
|
||||
(caseHandleInfo.is_illegal == '违法' &&
|
||||
|
|
@ -75,7 +75,7 @@
|
|||
</CollapseContainer>
|
||||
|
||||
<CollapseContainer
|
||||
title="【案件办理信息-违法-查处】"
|
||||
title="【图斑办理信息-违法-查处】"
|
||||
:canExpan="false"
|
||||
v-if="
|
||||
(caseHandleInfo.is_illegal == '违法' &&
|
||||
|
|
@ -94,7 +94,7 @@
|
|||
</CollapseContainer>
|
||||
|
||||
<CollapseContainer
|
||||
title="【案件办理信息-违法-拟完善手续】"
|
||||
title="【图斑办理信息-违法-拟完善手续】"
|
||||
:canExpan="false"
|
||||
v-if="
|
||||
(caseHandleInfo.is_illegal == '违法' &&
|
||||
|
|
@ -114,7 +114,7 @@
|
|||
</CollapseContainer>
|
||||
|
||||
<CollapseContainer
|
||||
title="【案件审核信息】"
|
||||
title="【图斑审核信息】"
|
||||
:canExpan="false"
|
||||
v-if="current == 3 || current == 4"
|
||||
>
|
||||
|
|
@ -122,7 +122,7 @@
|
|||
</CollapseContainer>
|
||||
|
||||
<CollapseContainer
|
||||
title="【案件退回描述】"
|
||||
title="【图斑退回描述】"
|
||||
:canExpan="false"
|
||||
v-if="detailData.is_drawback == 1"
|
||||
>
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@
|
|||
{{ caseHandleInfo.info.is_forever_build == 1 ? '是' : '否' }}
|
||||
</a-descriptions-item>
|
||||
|
||||
<!-- 案件违法 - 拆除 -->
|
||||
<!-- 图斑违法 - 拆除 -->
|
||||
<a-descriptions-item
|
||||
label="处理办法"
|
||||
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '拟拆除'"
|
||||
|
|
@ -88,7 +88,7 @@
|
|||
{{ caseHandleInfo.info.build_structure }}
|
||||
</a-descriptions-item>
|
||||
|
||||
<!-- 案件违法 查处 -->
|
||||
<!-- 图斑违法 查处 -->
|
||||
<a-descriptions-item
|
||||
label="处理办法"
|
||||
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '查处'"
|
||||
|
|
@ -126,7 +126,7 @@
|
|||
{{ caseHandleInfo.info.illegal_type }}
|
||||
</a-descriptions-item>
|
||||
|
||||
<!-- 案件违法 完善手续 -->
|
||||
<!-- 图斑违法 完善手续 -->
|
||||
<a-descriptions-item
|
||||
label="处理办法"
|
||||
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '拟完善手续'"
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
<template>
|
||||
<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="上报人">
|
||||
{{ caseDetail.identification_user }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="上报时间">
|
||||
{{ caseDetail.identification_time }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="案件状态">
|
||||
<a-descriptions-item label="图斑状态">
|
||||
<a-tag color="warning" v-if="caseDetail.handle_status_id == 0">
|
||||
{{ caseDetail.handle_status_name }}
|
||||
</a-tag>
|
||||
|
|
@ -21,16 +21,16 @@
|
|||
caseDetail.communityname
|
||||
}}
|
||||
</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="经纬度"
|
||||
>{{ caseDetail.lng }} , {{ caseDetail.lat }}</a-descriptions-item
|
||||
>
|
||||
<a-descriptions-item label="案件地址">{{ caseDetail.area }} (m²)</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.case_description }}</a-descriptions-item>
|
||||
<a-descriptions-item label="图斑地址">{{ caseDetail.area }} (m²)</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.case_description }}</a-descriptions-item>
|
||||
|
||||
<a-descriptions-item label="案件图片">
|
||||
<a-descriptions-item label="图斑图片">
|
||||
<div>
|
||||
<ImagePreview :imageList="imgList" />
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -159,7 +159,7 @@
|
|||
},
|
||||
});
|
||||
}
|
||||
// 案件位置显示无人机图标
|
||||
// 图斑位置显示无人机图标
|
||||
function loadDroneMarker(lng, lat) {
|
||||
if (detailMap.value.getLayer('cat-on-building')) {
|
||||
detailMap.value.removeLayer('cat-on-building');
|
||||
|
|
|
|||
|
|
@ -1,18 +1,18 @@
|
|||
// 案件详情首页
|
||||
// 图斑详情首页
|
||||
export { default as CaseView } from './caseview/index.vue';
|
||||
// 【案件下发信息】
|
||||
// 【图斑下发信息】
|
||||
export { default as Issue } from './caseview/src/issue.vue';
|
||||
// 【案件核查信息】
|
||||
// 【图斑核查信息】
|
||||
export { default as Inspect } from './caseview/src/inspect.vue';
|
||||
// 【案件审核信息】
|
||||
// 【图斑审核信息】
|
||||
export { default as Audit } from './caseview/src/audit.vue';
|
||||
// 【案件办理信息-违法-拟拆除】
|
||||
// 【图斑办理信息-违法-拟拆除】
|
||||
export { default as Dismantle } from './caseview/src/dismantle.vue';
|
||||
// 地图位置
|
||||
export { default as MapDetail } from './caseview/src/mapDetail.vue';
|
||||
// 案件办理信息-合法举证
|
||||
// 图斑办理信息-合法举证
|
||||
export { default as Evidence } from './caseview/src/evidence.vue';
|
||||
// 【案件办理信息-违法-查处】
|
||||
// 【图斑办理信息-违法-查处】
|
||||
export { default as Investigate } from './caseview/src/investigate.vue';
|
||||
// 【案件办理信息-违法-拟完善手续】
|
||||
// 【图斑办理信息-违法-拟完善手续】
|
||||
export { default as Procedure } from './caseview/src/procedure.vue';
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
<BasicModal
|
||||
v-bind="$attrs"
|
||||
@register="registerModal"
|
||||
title="案件详情"
|
||||
title="图斑详情"
|
||||
:canFullscreen="false"
|
||||
:defaultFullscreen="true"
|
||||
:showCancelBtn="false"
|
||||
|
|
@ -60,7 +60,7 @@
|
|||
});
|
||||
|
||||
const [registerTable, { reload, getSelectRows, clearSelectedRowKeys }] = useTable({
|
||||
title: '案件列表',
|
||||
title: '图斑列表',
|
||||
api: getCaseInfoList,
|
||||
// api:()=>1,
|
||||
columns,
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@ import { useMessage } from '@/hooks/web/useMessage';
|
|||
type CheckedType = boolean | string | number;
|
||||
export const columns: BasicColumn[] = [
|
||||
{
|
||||
title: '案件编号',
|
||||
title: '图斑编号',
|
||||
dataIndex: 'caseNo',
|
||||
width: 200,
|
||||
},{
|
||||
title: '案件描述',
|
||||
title: '图斑描述',
|
||||
dataIndex: 'caseDescription',
|
||||
width: 200,
|
||||
},{
|
||||
|
|
@ -39,7 +39,7 @@ export const searchFormSchema: FormSchema[] = [
|
|||
{
|
||||
field: 'is_intact',
|
||||
component: 'Select',
|
||||
label: '案件状态',
|
||||
label: '图斑状态',
|
||||
colProps: {
|
||||
span: 6,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
<BasicModal
|
||||
v-bind="$attrs"
|
||||
@register="registerModal"
|
||||
title="案件详情"
|
||||
title="图斑详情"
|
||||
:canFullscreen="false"
|
||||
:defaultFullscreen="true"
|
||||
:showCancelBtn="false"
|
||||
|
|
@ -35,7 +35,7 @@ const props = defineProps<{
|
|||
}>()
|
||||
const caseId = ref('');
|
||||
let columns = reactive({data:[],col:[{
|
||||
title: '案件编号',
|
||||
title: '图斑编号',
|
||||
dataIndex: 'caseNo',
|
||||
},
|
||||
{
|
||||
|
|
@ -43,7 +43,7 @@ let columns = reactive({data:[],col:[{
|
|||
dataIndex: 'communityName',
|
||||
},
|
||||
{
|
||||
title: '案件描述',
|
||||
title: '图斑描述',
|
||||
dataIndex: 'caseDescription',
|
||||
},{
|
||||
title: '所属类型',
|
||||
|
|
@ -61,7 +61,7 @@ let columns = reactive({data:[],col:[{
|
|||
title: '审核时间',
|
||||
dataIndex: 'verifyTime',
|
||||
},{
|
||||
title: '案件状态',
|
||||
title: '图斑状态',
|
||||
dataIndex: 'handleStatusName',
|
||||
}]});
|
||||
let total = ref(0)
|
||||
|
|
|
|||
|
|
@ -150,6 +150,7 @@
|
|||
v-model:current="pageNumber"
|
||||
v-model:pageSize="pageSizeNumber"
|
||||
:total="total"
|
||||
:show-total="total => `共 ${total} 条数据`"
|
||||
show-size-changer
|
||||
show-quick-jumper
|
||||
@change="changePagination"
|
||||
|
|
|
|||
|
|
@ -585,7 +585,7 @@
|
|||
|
||||
}
|
||||
|
||||
// 获取下级行政结构案件统计
|
||||
// 获取下级行政结构图斑统计
|
||||
function getOrgCaseList(column,record:Recordable){
|
||||
|
||||
if(currentOrgLevel.value == 'country'){
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
<PermissionBtn @btn-event="onBtnClicked" />
|
||||
</template>
|
||||
<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]) }}
|
||||
</template>
|
||||
<template v-if="column.key === 'action'">
|
||||
|
|
@ -56,10 +56,10 @@
|
|||
<a-modal v-model:open="open" title="导出文件类型" :footer="null">
|
||||
<div>
|
||||
<a-button class="exportbutton" @click="handleExport('excel')">
|
||||
图斑汇总统计报表(execl)
|
||||
图斑列表统计报表(execl)
|
||||
</a-button>
|
||||
<a-button class="exportbutton" @click="handleExport('shp')">
|
||||
图斑汇总矢量数据(shp)
|
||||
图斑列表矢量数据(shp)
|
||||
</a-button>
|
||||
</div>
|
||||
</a-modal>
|
||||
|
|
@ -92,6 +92,7 @@
|
|||
import { dataProcessingCount } from '@/views/demo/tiankongdi/util';
|
||||
import { BasicForm, useForm } from '@/components/Form';
|
||||
import { PageWrapper } from '@/components/Page';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
const { VITE_GLOB_API_URL } = getAppEnvConfig();
|
||||
|
||||
|
|
@ -136,7 +137,7 @@
|
|||
});
|
||||
const [registerTable, { setTableData, reload, clearSelectedRowKeys, setPagination, setLoading }] =
|
||||
useTable({
|
||||
title: '图斑汇总',
|
||||
title: '图斑列表',
|
||||
dataSource: tableData.value,
|
||||
columns,
|
||||
rowKey: 'id',
|
||||
|
|
@ -166,10 +167,10 @@
|
|||
let fileName = '';
|
||||
if (exportType == 'excel') {
|
||||
url = VITE_GLOB_API_URL + '/api/DroneCaseInfoSingle/ExportCaseInfoTuBanList';
|
||||
fileName = '图斑汇总统计报表' + new Date().getTime() + '.xls';
|
||||
fileName = '图斑列表统计报表' + new Date().getTime() + '.xls';
|
||||
} else if (exportType == 'shp') {
|
||||
url = VITE_GLOB_API_URL + '/api/DroneCaseInfoSingle/ExportCaseInfoShapefile';
|
||||
fileName = '图斑汇总矢量数据' + new Date().getTime() + '.zip';
|
||||
fileName = '图斑列表矢量数据' + new Date().getTime() + '.zip';
|
||||
}
|
||||
axios({
|
||||
method: 'post',
|
||||
|
|
@ -224,6 +225,10 @@
|
|||
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);
|
||||
loadCaseInfoTuBanList(querys).then((res) => {
|
||||
tableData.value = res.items;
|
||||
|
|
|
|||
|
|
@ -34,12 +34,15 @@ export const columns: BasicColumn[] = [
|
|||
{
|
||||
title: '图斑类型',
|
||||
dataIndex: 'typename',
|
||||
width: 80,
|
||||
},
|
||||
{
|
||||
title: '图斑面积',
|
||||
dataIndex: 'area',
|
||||
},
|
||||
{
|
||||
title: '农用地面积',
|
||||
dataIndex: 'nongyongdiarea',
|
||||
},
|
||||
{
|
||||
title: '耕地面积',
|
||||
dataIndex: 'gengdiarea',
|
||||
|
|
@ -211,6 +214,18 @@ export const searchFormSchema: FormSchema[] = [
|
|||
component: 'Input',
|
||||
colProps: { span: 4 },
|
||||
},
|
||||
{
|
||||
field: 'weifaleixing',
|
||||
label: '违法类型',
|
||||
component: 'Select',
|
||||
colProps: { span: 4 },
|
||||
componentProps: {
|
||||
options: [
|
||||
{ label: '非农化违法用地', value: '0' },
|
||||
{ label: '非粮化违法用地', value: '1' },
|
||||
],
|
||||
},
|
||||
},
|
||||
// 增加图斑面积、耕地面积、永农面积的筛选项;
|
||||
{
|
||||
field: 'tubanmianji',
|
||||
|
|
@ -230,4 +245,14 @@ export const searchFormSchema: FormSchema[] = [
|
|||
colProps: { span: 4 },
|
||||
slot: 'jibennongtianmianji',
|
||||
},
|
||||
{
|
||||
field: '[startTime, endTime]',
|
||||
label: '下发时间',
|
||||
component: 'RangePicker',
|
||||
colProps: { span: 5 },
|
||||
componentProps: {
|
||||
format: 'YYYY-MM-DD',
|
||||
placeholder: ['开始日期', '结束日期'],
|
||||
},
|
||||
},
|
||||
];
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ export const columnsDataPreview: BasicColumn[] = [
|
|||
|
||||
export const columns: BasicColumn[] = [
|
||||
{
|
||||
title: '案件编号',
|
||||
title: '图斑编号',
|
||||
dataIndex: 'case_no',
|
||||
width: 120,
|
||||
}
|
||||
|
|
@ -154,7 +154,7 @@ export const columns: BasicColumn[] = [
|
|||
dataIndex: 'communityname',
|
||||
width: 120,
|
||||
},{
|
||||
title: '案件描述',
|
||||
title: '图斑描述',
|
||||
dataIndex: 'case_description',
|
||||
width: 120,
|
||||
},{
|
||||
|
|
@ -179,7 +179,7 @@ export const columns: BasicColumn[] = [
|
|||
dataIndex: 'verifytime',
|
||||
width: 120,
|
||||
},{
|
||||
title: '案件状态',
|
||||
title: '图斑状态',
|
||||
dataIndex: 'handle_status_name',
|
||||
width: 120,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,13 @@
|
|||
<a-form-item label="名称" name="name">
|
||||
<a-input v-model:value="props.modalData.data.name" />
|
||||
</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-select v-model:value="props.modalData.data.layer">
|
||||
<a-select-option value="1">图层1</a-select-option>
|
||||
|
|
@ -89,7 +96,7 @@
|
|||
|
||||
<script setup lang="ts">
|
||||
import { defineProps, defineEmits, ref } from 'vue';
|
||||
const props = defineProps(['modalData', 'modalForm']);
|
||||
const props = defineProps(['modalData', 'showTree']);
|
||||
const emit = defineEmits(['closeModal', 'submit']);
|
||||
const formRef = ref();
|
||||
const treeRules = {
|
||||
|
|
@ -97,6 +104,7 @@
|
|||
itemValue: [{ required: true, message: '类型不能为空', trigger: 'blur' }],
|
||||
};
|
||||
const rightRules = {
|
||||
overlay: [{ required: true, message: '查询分类不能为空', trigger: 'blur' }],
|
||||
layer: [{ required: true, message: '图层不能为空', trigger: 'blur' }],
|
||||
tableName: [{ required: true, message: '数据表不能为空', trigger: 'blur' }],
|
||||
overlayList: [{ required: true, message: '叠加图层不能为空', trigger: 'blur' }],
|
||||
|
|
@ -20,13 +20,13 @@
|
|||
<div class="showTree">
|
||||
<BasicTree
|
||||
ref="treeRef"
|
||||
:treeData="showLTree"
|
||||
:treeData="showTree"
|
||||
:loading="lLoading"
|
||||
:fieldNames="{ key: 'itemValue', title: 'itemName' }"
|
||||
@select="
|
||||
(selectedKeys, { node }) => {
|
||||
getLeftSelectId(node.itemDetailId);
|
||||
changeTypeId(node.key);
|
||||
getSelectId(node.itemDetailId);
|
||||
changeTypeId(node.itemValue);
|
||||
}
|
||||
"
|
||||
/>
|
||||
|
|
@ -39,6 +39,9 @@
|
|||
<PermissionBtn @btnEvent="buttonClick"></PermissionBtn>
|
||||
</template>
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if="column.key == 'code'">
|
||||
{{ getCode(record) }}
|
||||
</template>
|
||||
<template v-if="column.key == 'overlayList'">
|
||||
<div v-for="tag in record.overlayList" :key="tag">
|
||||
<a-tag>{{ tag }}</a-tag>
|
||||
|
|
@ -52,15 +55,22 @@
|
|||
v-model:open="openModal"
|
||||
:title="modalData.title"
|
||||
: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>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
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 { BasicTable, useTable } from '@/components/Table';
|
||||
import { PermissionBtn } from '@/components/PermissionBtn/index';
|
||||
|
|
@ -74,16 +84,22 @@
|
|||
Update,
|
||||
Delete,
|
||||
} 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 dayjs from 'dayjs';
|
||||
import { cloneDeep } from 'lodash-es';
|
||||
import { cloneDeep, forEach } from 'lodash-es';
|
||||
|
||||
const modalForm = ref();
|
||||
let lLoading = ref(false);
|
||||
let typeId = ref('');
|
||||
let selectTreeId = ref('');
|
||||
let showLTree = ref([]);
|
||||
let showTree = ref([]);
|
||||
let openModal = ref(false);
|
||||
const modalData = reactive({
|
||||
title: '',
|
||||
|
|
@ -92,19 +108,36 @@
|
|||
});
|
||||
const treeRef = 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({
|
||||
// beforeFetch: (params) => {
|
||||
// console.log(firstRequestCode.value, 'before');
|
||||
// if (firstRequestCode.value !== '') {
|
||||
// params = { ...params, code: firstRequestCode.value };
|
||||
// } else {
|
||||
// params = { ...params, code: typeId.value };
|
||||
// }
|
||||
// return params;
|
||||
// },
|
||||
beforeFetch: (params) => {
|
||||
if (firstRequestCode.value !== '') {
|
||||
params = { ...params, code: firstRequestCode.value };
|
||||
} else if (typeId.value !== '') {
|
||||
params = { ...params, code: typeId.value };
|
||||
} else {
|
||||
params = { ...params };
|
||||
}
|
||||
return params;
|
||||
},
|
||||
api: LoadPage,
|
||||
columns,
|
||||
title: '云查询管理',
|
||||
formConfig: {
|
||||
labelWidth: 120,
|
||||
schemas: searchFormSchema,
|
||||
|
|
@ -125,16 +158,18 @@
|
|||
return res;
|
||||
},
|
||||
});
|
||||
const getLeftTreeData = (isMounted) => {
|
||||
|
||||
const getTreeData = (isMounted) => {
|
||||
lLoading.value = true;
|
||||
getLeftTree({ code: 'cloudQueryManagement' })
|
||||
.then((res) => {
|
||||
showLTree.value = res;
|
||||
showTree.value = res;
|
||||
lLoading.value = false;
|
||||
if (isMounted && res.length > 0) {
|
||||
firstRequestCode.value = res[0].key;
|
||||
typeId.value = res[0].key;
|
||||
unref(treeRef).setSelectedKeys([res[0].key]);
|
||||
firstRequestCode.value = res[0].itemValue;
|
||||
selectTreeId.value = res[0].itemDetailId;
|
||||
typeId.value = res[0].itemValue;
|
||||
unref(treeRef).setSelectedKeys([res[0].itemValue]);
|
||||
}
|
||||
reload();
|
||||
})
|
||||
|
|
@ -143,16 +178,27 @@
|
|||
});
|
||||
};
|
||||
onMounted(() => {
|
||||
getLeftTreeData(true);
|
||||
getTreeData(true);
|
||||
});
|
||||
const changeTypeId = (value) => {
|
||||
typeId.value = value;
|
||||
|
||||
const changeTypeId = (itemValue) => {
|
||||
if (typeId.value != itemValue) {
|
||||
typeId.value = itemValue;
|
||||
reload();
|
||||
} else {
|
||||
typeId.value = '';
|
||||
reload();
|
||||
}
|
||||
};
|
||||
const getLeftSelectId = (value) => {
|
||||
selectTreeId.value = value;
|
||||
const getSelectId = (itemDetailId) => {
|
||||
if (selectTreeId.value != itemDetailId) {
|
||||
selectTreeId.value = itemDetailId;
|
||||
} else {
|
||||
selectTreeId.value = '';
|
||||
}
|
||||
};
|
||||
|
||||
// 按钮分类
|
||||
const buttonClick = (diffType) => {
|
||||
let check = false;
|
||||
switch (diffType) {
|
||||
|
|
@ -175,7 +221,7 @@
|
|||
onOk() {
|
||||
return delLeftItem({ id: selectTreeId.value })
|
||||
.then((res) => {
|
||||
getLeftTreeData(false);
|
||||
getTreeData(false);
|
||||
typeId.value = '';
|
||||
reload();
|
||||
})
|
||||
|
|
@ -230,21 +276,23 @@
|
|||
break;
|
||||
}
|
||||
};
|
||||
// 表单提交
|
||||
const submit = () => {
|
||||
let userName = localStorage.getItem('fireUserLoginName');
|
||||
switch (modalData.type) {
|
||||
case 'treeAdd':
|
||||
addLeftItem({
|
||||
...modalData.data,
|
||||
itemCode: 'cloudQueryManagement',
|
||||
createUserName: userName,
|
||||
modifyUserName: userName,
|
||||
createDate: dayjs().format('YYYY-MM-DD HH:mm:ss'),
|
||||
modifyDate: dayjs().format('YYYY-MM-DD HH:mm:ss'),
|
||||
enabledMark: 1,
|
||||
sortCode: showLTree.value.length,
|
||||
sortCode: showTree.value.length,
|
||||
})
|
||||
.then((res) => {
|
||||
getLeftTreeData(false);
|
||||
getTreeData(false);
|
||||
openModal.value = false;
|
||||
})
|
||||
.catch((err) => {
|
||||
|
|
@ -295,8 +343,17 @@
|
|||
const clearModal = () => {
|
||||
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>
|
||||
.page-div {
|
||||
position: relative;
|
||||
|
|
@ -338,8 +395,7 @@
|
|||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<style lang="scss">
|
||||
|
||||
.categories-page {
|
||||
.tree-div {
|
||||
.h-full {
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
import dayjs from 'dayjs';
|
||||
|
||||
export const columns = [
|
||||
{
|
||||
title: 'ID',
|
||||
|
|
@ -9,6 +11,11 @@ export const columns = [
|
|||
dataIndex: 'name',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '云查询分类',
|
||||
dataIndex: 'overlay',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '图层',
|
||||
dataIndex: 'layer',
|
||||
|
|
@ -66,7 +73,8 @@ export const emptyRightItem = {
|
|||
areaField:'',
|
||||
isSum: false,
|
||||
};
|
||||
export const searchFormSchema = [
|
||||
|
||||
export const searchFormSchema_1 = [
|
||||
{
|
||||
field: 'key',
|
||||
label: '关键字',
|
||||
|
|
@ -74,3 +82,23 @@ export const searchFormSchema = [
|
|||
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: ['开始日期', '结束日期'],
|
||||
},
|
||||
},
|
||||
];
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -1,34 +1,45 @@
|
|||
<template>
|
||||
<div style="padding: 24px; overflow-y: hidden">
|
||||
<a-tabs v-model:activeKey="activeKey">
|
||||
<a-tab-pane key="imageBoundary" tab="影像边界shp">
|
||||
<ImageBoundary />
|
||||
</a-tab-pane>
|
||||
<a-tab-pane key="imageRelease" tab="影像发布事件">
|
||||
<ImageRelease />
|
||||
</a-tab-pane>
|
||||
<a-tab-pane key="history" tab="历史记录">
|
||||
<History />
|
||||
</a-tab-pane>
|
||||
</a-tabs>
|
||||
<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>
|
||||
// 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';
|
||||
//
|
||||
import ImageBoundary from './imageBoundary.vue';
|
||||
import ImageRelease from './imageRelease.vue';
|
||||
import History from './history.vue';
|
||||
import { columns, searchFormSchema } from './util';
|
||||
|
||||
// 标签页
|
||||
let activeKey = ref('imageBoundary');
|
||||
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>
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
<BasicModal
|
||||
v-bind="$attrs"
|
||||
@register="registerModal"
|
||||
title="案件详情"
|
||||
title="图斑详情"
|
||||
:canFullscreen="false"
|
||||
:defaultFullscreen="true"
|
||||
:showCancelBtn="false"
|
||||
|
|
@ -35,7 +35,7 @@ const props = defineProps<{
|
|||
}>()
|
||||
const caseId = ref('');
|
||||
let columns = reactive({data:[],col:[{
|
||||
title: '案件编号',
|
||||
title: '图斑编号',
|
||||
dataIndex: 'caseNo',
|
||||
},
|
||||
{
|
||||
|
|
@ -43,7 +43,7 @@ let columns = reactive({data:[],col:[{
|
|||
dataIndex: 'communityName',
|
||||
},
|
||||
{
|
||||
title: '案件描述',
|
||||
title: '图斑描述',
|
||||
dataIndex: 'caseDescription',
|
||||
},{
|
||||
title: '所属类型',
|
||||
|
|
@ -61,7 +61,7 @@ let columns = reactive({data:[],col:[{
|
|||
title: '审核时间',
|
||||
dataIndex: 'verifyTime',
|
||||
},{
|
||||
title: '案件状态',
|
||||
title: '图斑状态',
|
||||
dataIndex: 'handleStatusName',
|
||||
}]});
|
||||
let total = ref(0)
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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">支持扩展名:zip、xls、xlsx</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>
|
||||
|
|
@ -1,541 +1,309 @@
|
|||
<template>
|
||||
<div>
|
||||
<a-row ::gutter="0">
|
||||
<a-col :span="12">
|
||||
<a-col :span="24">
|
||||
<BasicTable @register="registerTable" :searchInfo="searchInfo">
|
||||
<template #toolbar>
|
||||
<PermissionBtn @btn-event="onBtnClicked" />
|
||||
</template>
|
||||
</BasicTable>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-col :span="0">
|
||||
<div class="map-outer">
|
||||
<MapboxMap
|
||||
<!-- <MapboxMap
|
||||
:geomsList="geomsList"
|
||||
:mapConfig="mapConfig"
|
||||
@handlerDrawComplete="handlerDrawComplete"
|
||||
@mapOnLoad="onMapboxLoad"
|
||||
ref="MapboxComponent"
|
||||
/>
|
||||
/> -->
|
||||
</div>
|
||||
</a-col>
|
||||
</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
|
||||
v-model:open="addModalShow"
|
||||
v-model:open="modalShow"
|
||||
:maskClosable="false"
|
||||
:afterClose="closeAndCreate"
|
||||
title="添加GeoServer服务"
|
||||
width="800px"
|
||||
width="1000px"
|
||||
style="top: 20px"
|
||||
size="small"
|
||||
>
|
||||
<div class="content">
|
||||
<div class="select-file-div">
|
||||
<div class="upload-div">
|
||||
<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"
|
||||
<div>
|
||||
<a-steps :current="current" size="small" label-placement="vertical" :items="items" />
|
||||
</div>
|
||||
<div class="current1" v-if="current == 0">
|
||||
<UploadFrom
|
||||
ref="uploadFormRef"
|
||||
:uploadForm="uploadFrom"
|
||||
@isZipOrXls="isZipOrXls"
|
||||
@uploadFormSubmit="uploadFormSubmit"
|
||||
/>
|
||||
</div>
|
||||
<div class="current2" v-if="current == 1 && uploadFrom.dataSourceType == 'shp'">
|
||||
<HeadersTable
|
||||
ref="headersTableRef"
|
||||
:headers="uploadFrom.headers"
|
||||
@headersTableSubmit="headersTableSubmit"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="current3"
|
||||
v-if="current == 2 || (current == 1 && uploadFrom.dataSourceType == 'excel')"
|
||||
>
|
||||
<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 class="upload-span">
|
||||
<div class="upload-span-content">
|
||||
<div style="opacity: 0.7">将文件拖拽到这里或点击上传按钮</div>
|
||||
<div style="color: #1e5eff">支持扩展名:zip,xlsx</div>
|
||||
<div style="opacity: 0.7">zip中需要包含 .shp .shx .dbf 文件 且.shp文件大小小于10MB</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="upload-form">
|
||||
|
||||
<a-form
|
||||
ref="formRef"
|
||||
:model="uploadFrom"
|
||||
:label-col="{ style: { width: '75px' } }"
|
||||
labelAlign="right"
|
||||
:rules="uploadFormRules"
|
||||
<a-result
|
||||
status="success"
|
||||
title="图层创建成功"
|
||||
subTitle="图层创建成功,请在云查询图层列表查看"
|
||||
>
|
||||
<a-form-item label="服务名称" name="serverName">
|
||||
<a-input v-model:value="uploadFrom.serverName" placeholder="请输入服务名称" />
|
||||
</a-form-item>
|
||||
|
||||
<!-- 显示条件:文件类型为Excel时 -->
|
||||
<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> -->
|
||||
|
||||
|
||||
<template #extra>
|
||||
<a-button type="primary" @click="handleClose">再次创建</a-button>
|
||||
<a-button @click="handleClose">关闭窗口</a-button>
|
||||
</template>
|
||||
</a-result>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<template #footer>
|
||||
<a-button type="default" >取消</a-button>
|
||||
<a-button type="primary" >添加</a-button>
|
||||
<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>
|
||||
</a-modal>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { ref, reactive, h } from 'vue';
|
||||
|
||||
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';
|
||||
|
||||
// vben
|
||||
import { PermissionBtn } from '@/components/PermissionBtn/index';
|
||||
|
||||
import { columns, columnsDataPreview,searchFormSchema } from './statistical.data';
|
||||
import {MinusOutlined,CloseOutlined,CloudDownloadOutlined,PlusOutlined} from '@ant-design/icons-vue'
|
||||
import axios from 'axios';
|
||||
import print from "vue3-print-nb";
|
||||
|
||||
import { getAppEnvConfig } from '@/utils/env';
|
||||
import { BasicTable, useTable, TableAction } from '@/components/Table';
|
||||
import { useMessage } from '@/hooks/web/useMessage';
|
||||
// 组件
|
||||
import UploadFrom from './clound/uploadFrom.vue';
|
||||
import HeadersTable from './clound/headersTable.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();
|
||||
|
||||
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')
|
||||
import axios from 'axios';
|
||||
import { cloneDeep } from 'lodash-es';
|
||||
|
||||
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 [registerTable, { reload, getSelectRows, clearSelectedRowKeys, updateTableData}] = useTable({
|
||||
// 表格名称
|
||||
title: 'GeoServer服务管理',
|
||||
// 获取数据的接口
|
||||
api: getStatisticalList,
|
||||
// 表单列信息 BasicColumn[]
|
||||
columns,
|
||||
rowKey: 'streetid',
|
||||
const [registerTable, { reload, getSelectRows, clearSelectedRowKeys }] = useTable({
|
||||
title: '云查询图层',
|
||||
api: ShpGeoLayerLoadPage,
|
||||
columns: indexColumns,
|
||||
formConfig: {
|
||||
labelWidth: 120,
|
||||
schemas: searchFormSchema,
|
||||
schemas: indexSearchFormSchema,
|
||||
},
|
||||
// 使用搜索表单
|
||||
useSearchForm: true,
|
||||
// 显示表格设置工具
|
||||
showTableSetting: true,
|
||||
// 是否显示分页
|
||||
pagination: true,
|
||||
// 是否显示表格边框
|
||||
bordered: true,
|
||||
// 序号列
|
||||
showIndexColumn: true,
|
||||
// 勾选列
|
||||
rowSelection: {
|
||||
type: 'radio',
|
||||
},
|
||||
// 搜索
|
||||
handleSearchInfoFn(info) {
|
||||
searchParams.value = info;
|
||||
return info;
|
||||
},
|
||||
});
|
||||
|
||||
const [registerPrintTable] = useTable({
|
||||
// 表格名称
|
||||
title: '',
|
||||
// 获取数据的接口
|
||||
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;
|
||||
},
|
||||
});
|
||||
// 步骤
|
||||
const current = ref(0);
|
||||
const items = ref(items_shp);
|
||||
|
||||
// 步骤1信息
|
||||
const uploadFormRef = ref();
|
||||
const uploadFromAdd = {
|
||||
serverName: '',
|
||||
spatialRef: '',
|
||||
dataSourceType: '',
|
||||
dataType: '',
|
||||
dataTable: '',
|
||||
shpPath: '',
|
||||
appendPath: '',
|
||||
headers: [] as any,
|
||||
};
|
||||
const uploadFrom = ref(uploadFromAdd);
|
||||
|
||||
|
||||
|
||||
|
||||
const [registerTableDataPreview,{ reloadDataPreview, getSelectRowsDataPreview, clearSelectedRowKeysDataPreview }] = useTable({
|
||||
// 表格名称
|
||||
title: '',
|
||||
// 获取数据的接口
|
||||
api: getStatisticalList,
|
||||
// 表单列信息 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 isZipOrXls(value) {
|
||||
uploadFrom.value.dataSourceType = value;
|
||||
if (value === 'shp') {
|
||||
items.value = items_shp;
|
||||
} else if (value === 'excel') {
|
||||
items.value = items_excel;
|
||||
}
|
||||
function exportList(){
|
||||
createMessage.success("接口待对接!")
|
||||
}
|
||||
|
||||
function handleCreate() {
|
||||
addModalShow.value = true;
|
||||
}
|
||||
function viewAccount(record: Recordable) {
|
||||
openAccountModal(true, {
|
||||
record,
|
||||
// 步骤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();
|
||||
});
|
||||
}
|
||||
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
|
||||
current.value = 1;
|
||||
}
|
||||
|
||||
let currentListQuery = reactive({listQuery:{}});
|
||||
|
||||
function handleTabChange(e){
|
||||
currentListQuery.listQuery = tablist[e].listQuery
|
||||
|
||||
console.log(currentListQuery)
|
||||
// 步骤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;
|
||||
}
|
||||
|
||||
|
||||
// function remvoeTab(){
|
||||
|
||||
// }
|
||||
|
||||
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;
|
||||
.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;
|
||||
}
|
||||
|
||||
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() {
|
||||
let rows = getSelectRows();
|
||||
if (rows.length == 0) {
|
||||
return createMessage.warn('请勾选一个角色进行编辑');
|
||||
}
|
||||
const record = rows[0];
|
||||
openRoleModal(true, {
|
||||
record,
|
||||
isUpdate: true,
|
||||
})
|
||||
.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() {
|
||||
uploadFrom.value = cloneDeep(uploadFromAdd);
|
||||
modalShow.value = true;
|
||||
if (uploadFormRef.value) {
|
||||
uploadFormRef.value.clearValidation();
|
||||
}
|
||||
}
|
||||
// 关闭窗口
|
||||
function handleClose() {
|
||||
current.value = 0;
|
||||
modalShow.value = false;
|
||||
uploadFrom.value = cloneDeep(uploadFromAdd);
|
||||
}
|
||||
// 再次创建
|
||||
function closeAndCreate() {
|
||||
current.value = 0;
|
||||
uploadFrom.value = cloneDeep(uploadFromAdd);
|
||||
if (uploadFormRef.value) {
|
||||
uploadFormRef.value.clearValidation();
|
||||
}
|
||||
}
|
||||
// 编辑
|
||||
function handleEdit() {
|
||||
let rows: any = getSelectRows();
|
||||
if (rows.length == 0) {
|
||||
return createMessage.warn('请勾选一个图层进行编辑');
|
||||
}
|
||||
uploadFrom.value = rows[0];
|
||||
isZipOrXls(uploadFrom.value.dataSourceType);
|
||||
modalShow.value = true;
|
||||
current.value = 0;
|
||||
}
|
||||
// 删除
|
||||
async function handleDelete() {
|
||||
let rows = getSelectRows();
|
||||
if (rows.length == 0) {
|
||||
return createMessage.warn('请勾选一个角色进行删除');
|
||||
return createMessage.warn('请勾选一个图层进行删除');
|
||||
}
|
||||
const query = [rows[0].id];
|
||||
const query = { id: rows[0].id };
|
||||
createConfirm({
|
||||
iconType: 'info',
|
||||
title: '删除',
|
||||
content: '确定要删除当前角色吗',
|
||||
content: '确定要删除当前图层吗?',
|
||||
onOk: async () => {
|
||||
const data = await deleteRole(query);
|
||||
const data = await ShpGeoLayerDelete(query);
|
||||
if (data) {
|
||||
handleSuccess();
|
||||
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() {
|
||||
clearSelectedRowKeys();
|
||||
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>
|
||||
<style>
|
||||
.map-outer{
|
||||
width:100%;
|
||||
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;
|
||||
}
|
||||
|
||||
<style lang="less" scoped>
|
||||
.content {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.upload-div{
|
||||
}
|
||||
|
||||
.upload-span{
|
||||
margin:30px auto;
|
||||
.current1 {
|
||||
margin-top: 30px;
|
||||
display: flex;
|
||||
width: 800px;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ export const columnsDataPreview: BasicColumn[] = [
|
|||
|
||||
export const columns: BasicColumn[] = [
|
||||
{
|
||||
title: '案件编号',
|
||||
title: '图斑编号',
|
||||
dataIndex: 'case_no',
|
||||
width: 120,
|
||||
}
|
||||
|
|
@ -154,7 +154,7 @@ export const columns: BasicColumn[] = [
|
|||
dataIndex: 'communityname',
|
||||
width: 120,
|
||||
},{
|
||||
title: '案件描述',
|
||||
title: '图斑描述',
|
||||
dataIndex: 'case_description',
|
||||
width: 120,
|
||||
},{
|
||||
|
|
@ -179,7 +179,7 @@ export const columns: BasicColumn[] = [
|
|||
dataIndex: 'verifytime',
|
||||
width: 120,
|
||||
},{
|
||||
title: '案件状态',
|
||||
title: '图斑状态',
|
||||
dataIndex: 'handle_status_name',
|
||||
width: 120,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -149,6 +149,7 @@
|
|||
v-model:current="pageNumber"
|
||||
v-model:pageSize="pageSizeNumber"
|
||||
:total="total"
|
||||
:show-total="total => `共 ${total} 条数据`"
|
||||
show-size-changer
|
||||
show-quick-jumper
|
||||
@change="changePagination"
|
||||
|
|
|
|||
|
|
@ -13,10 +13,10 @@
|
|||
:label-col="labelCol"
|
||||
: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-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-form-item>
|
||||
<a-form-item label="县区" name="countyid">
|
||||
|
|
@ -36,14 +36,14 @@
|
|||
@change="handleStreetChange"
|
||||
/>
|
||||
</a-form-item>
|
||||
<!-- <a-form-item label="村/社区" name="communityid">
|
||||
<a-form-item label="村/社区" name="communityid">
|
||||
<a-select
|
||||
v-model:value="formState.communityid"
|
||||
:options="data.communityOptions"
|
||||
:field-names="{ label: 'name', value: 'id' }"
|
||||
@change="handleCommunityChange"
|
||||
/>
|
||||
</a-form-item> -->
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-modal>
|
||||
|
||||
|
|
@ -61,10 +61,10 @@
|
|||
:label-col="labelCol"
|
||||
: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-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-form-item>
|
||||
<a-form-item label="县区" name="countyid">
|
||||
|
|
@ -84,14 +84,14 @@
|
|||
@change="handleStreetChange"
|
||||
/>
|
||||
</a-form-item>
|
||||
<!-- <a-form-item label="村/社区" name="communityid">
|
||||
<a-form-item label="村/社区" name="communityid">
|
||||
<a-select
|
||||
v-model:value="formState.communityid"
|
||||
:options="data.communityOptions"
|
||||
:field-names="{ label: 'name', value: 'id' }"
|
||||
@change="handleCommunityChange"
|
||||
/>
|
||||
</a-form-item> -->
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-modal>
|
||||
</div>
|
||||
|
|
@ -123,12 +123,12 @@
|
|||
const rules = ref({
|
||||
countyid: [{ 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({
|
||||
countyOptions: [],
|
||||
streetOptions: [],
|
||||
// communityOptions: [],
|
||||
communityOptions: [],
|
||||
});
|
||||
|
||||
watch(
|
||||
|
|
@ -157,19 +157,20 @@
|
|||
data.streetOptions = res;
|
||||
});
|
||||
formState.value.streetid = '';
|
||||
// formState.value.communityid = '';
|
||||
formState.value.communityid = '';
|
||||
}
|
||||
async function handleStreetChange(value, option) {
|
||||
formState.value.streetid = value;
|
||||
formState.value.streetname = option.name;
|
||||
// getOptions(value).then((res) => {
|
||||
// data.communityOptions = res;
|
||||
// });
|
||||
getOptions(value).then((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) {
|
||||
const data = await getChildrenTree({
|
||||
parentId: value,
|
||||
|
|
@ -192,9 +193,9 @@
|
|||
data.streetOptions = res;
|
||||
});
|
||||
// 获取村/社区数据
|
||||
// getOptions(formState.value.streetid).then((res) => {
|
||||
// data.communityOptions = res;
|
||||
// });
|
||||
getOptions(formState.value.streetid).then((res) => {
|
||||
data.communityOptions = res;
|
||||
});
|
||||
}
|
||||
|
||||
function handlerCloseModal() {
|
||||
|
|
@ -211,8 +212,8 @@
|
|||
countyname: formState.value.countyname,
|
||||
streetid: formState.value.streetid,
|
||||
streetname: formState.value.streetname,
|
||||
// communityid: formState.value.communityid,
|
||||
// communityname: formState.value.communityname,
|
||||
communityid: formState.value.communityid,
|
||||
communityname: formState.value.communityname,
|
||||
};
|
||||
console.log(querys);
|
||||
const data = await updateDroneCaseInfo(querys);
|
||||
|
|
|
|||
|
|
@ -220,6 +220,7 @@
|
|||
v-model:pageSize="pageSize"
|
||||
v-model:current="pageNo"
|
||||
:total="total"
|
||||
:show-total="total => `共 ${total} 条数据`"
|
||||
show-size-changer
|
||||
show-quick-jumper
|
||||
@change="changePage"
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@
|
|||
<a-descriptions-item label="备注">{{ remark }}</a-descriptions-item>
|
||||
<a-descriptions-item label="经度">{{ lng }}</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="图斑照片">
|
||||
<div class="image-div">
|
||||
<a-image-preview-group
|
||||
|
|
@ -480,6 +480,7 @@
|
|||
hexiaotime,
|
||||
wrjffzhaopian,
|
||||
xchczhaopian,
|
||||
synchronoustime,
|
||||
} = props.showInfoData;
|
||||
|
||||
const imageList = ref([])
|
||||
|
|
|
|||
|
|
@ -110,11 +110,11 @@
|
|||
<div :style="`${showSortMark('gengdi_area',2)? 'color: #086DEC;': ''}`">▼</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-icon">
|
||||
<div :style="`${showSortMark('createtime',1)? 'color: #086DEC;': ''}`">▲</div>
|
||||
<div :style="`${showSortMark('createtime',2)? 'color: #086DEC;': ''}`">▼</div>
|
||||
<div :style="`${showSortMark('synchronoustime',1)? 'color: #086DEC;': ''}`">▲</div>
|
||||
<div :style="`${showSortMark('synchronoustime',2)? 'color: #086DEC;': ''}`">▼</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -232,6 +232,7 @@
|
|||
v-model:pageSize="props.pageSize"
|
||||
v-model:current="props.pageNo"
|
||||
:total="props.total"
|
||||
:show-total="total => `共 ${total} 条数据`"
|
||||
show-size-changer
|
||||
show-quick-jumper
|
||||
@change="changePage" />
|
||||
|
|
|
|||
|
|
@ -440,7 +440,6 @@
|
|||
|
||||
footerStyle.value.width = mapConfig.value?.isShowMap ? '100%' : '60%';
|
||||
if (mapConfig.value?.isShowMap) {
|
||||
|
||||
}
|
||||
} else {
|
||||
currentNode = auditNode;
|
||||
|
|
@ -687,6 +686,15 @@
|
|||
// return;
|
||||
// }
|
||||
// 有表单先提交表单数据
|
||||
if (btn.code == 'disagree') {
|
||||
if (!formData.value.des) {
|
||||
createMessage.warning('请填写驳回意见');
|
||||
btnVisble.value = true;
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
btnVisble.value = false;
|
||||
}
|
||||
if (formVisble.value) {
|
||||
var querys = {
|
||||
schemeId: designerData.formCurrentNode.formVerison,
|
||||
|
|
@ -694,12 +702,15 @@
|
|||
pkey: instanceInfo.pkey,
|
||||
pkeyValue: instanceInfo.pkeyValue,
|
||||
};
|
||||
formBoxRef.value
|
||||
await formBoxRef.value
|
||||
.getForm()
|
||||
.then(async (res) => {
|
||||
console.log(res);
|
||||
if (!res) {
|
||||
console.log('无语无语');
|
||||
createMessage.error('请检查表单必填项');
|
||||
btnVisble.value = true;
|
||||
return false;
|
||||
} else {
|
||||
res[designerData.formCurrentNode.formRelationId] = instanceInfo.pkeyValue;
|
||||
for (var item in res) {
|
||||
|
|
@ -710,13 +721,14 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
console.log('审核提交');
|
||||
setTimeout(async () => {
|
||||
querys.data = JSON.stringify(res);
|
||||
const formValue = await functionsaveForm(querys);
|
||||
if (formValue) {
|
||||
if (btn.code == 'zancun') {
|
||||
createMessage.success('暂存成功');
|
||||
return
|
||||
return;
|
||||
}
|
||||
handleSubmit(btn);
|
||||
}
|
||||
|
|
@ -792,6 +804,7 @@
|
|||
// }
|
||||
}
|
||||
async function auditFun() {
|
||||
btnVisble.value = false;
|
||||
// 获取接下来节点审核人
|
||||
if (designerData.currentBtn.isNextAuditor) {
|
||||
const res = await getLoadNextAuditors({
|
||||
|
|
@ -830,6 +843,7 @@
|
|||
closePage();
|
||||
return createMessage.success('成功');
|
||||
} else {
|
||||
btnVisble.value = true;
|
||||
return createMessage.error('失败');
|
||||
}
|
||||
}
|
||||
|
|
@ -963,6 +977,7 @@
|
|||
btnVisble.value = false;
|
||||
return createMessage.success('成功');
|
||||
} else {
|
||||
btnVisble.value = true;
|
||||
return createMessage.error('失败');
|
||||
}
|
||||
}
|
||||
|
|
@ -997,10 +1012,7 @@
|
|||
getTaskInfo();
|
||||
});
|
||||
|
||||
|
||||
function onFormContainerMouseOver(event){
|
||||
|
||||
}
|
||||
function onFormContainerMouseOver(event) {}
|
||||
</script>
|
||||
<style lang="less" scoped>
|
||||
::v-deep .ant-tabs-nav-wrap {
|
||||
|
|
|
|||
|
|
@ -6,21 +6,22 @@
|
|||
src="/subject_lindidiaocha/top.png"
|
||||
:style="{
|
||||
width: '100%',
|
||||
height: `${114 * bi}px`,
|
||||
height: `${116 * bi}px`,
|
||||
}"
|
||||
/>
|
||||
<div
|
||||
class="subject_top_title"
|
||||
:style="{
|
||||
position: 'relative',
|
||||
top: `${-124 * bi}px`,
|
||||
top: `${-116 * bi}px`,
|
||||
}"
|
||||
>
|
||||
<span
|
||||
:style="{
|
||||
position: 'relative',
|
||||
fontSize: `${58 * bi}px`,
|
||||
height: `${114 * bi}px`,
|
||||
fontSize: `${55 * bi}px`,
|
||||
top: `${-20 * bi}px`,
|
||||
height: `${116 * bi}px`,
|
||||
}"
|
||||
>
|
||||
<img
|
||||
|
|
@ -40,7 +41,7 @@
|
|||
class="subject_top_currentTime"
|
||||
:style="{
|
||||
left: `${87 * bi}px`,
|
||||
top: `${4 * bi}px`,
|
||||
top: `${0 * bi}px`,
|
||||
height: `${40 * bi}px`,
|
||||
}"
|
||||
>
|
||||
|
|
@ -55,13 +56,16 @@
|
|||
<div
|
||||
class="subject_top_adminAndLogout"
|
||||
:style="{
|
||||
right: `${87 * bi}px`,
|
||||
top: `${4 * bi}px`,
|
||||
right: `${40 * bi}px`,
|
||||
top: `${0 * bi}px`,
|
||||
height: `${40 * bi}px`,
|
||||
}"
|
||||
>
|
||||
<span class="loginUser"> {{ loginUser }} {{ t('sys.subject.header_admin') }}</span>
|
||||
|
||||
<img src="/subject_lindidiaocha/setting.png" @click="getHome(setting)" />
|
||||
|
||||
<span class="line" @click="getHome(setting)"> {{ setting.title }} </span>
|
||||
<span class="line"> | </span>
|
||||
|
||||
<img src="/subject_lindidiaocha/logout.png" @click="handleLoginOut()" />
|
||||
|
|
@ -101,7 +105,7 @@
|
|||
marginBottom: `${10 * bi}px`,
|
||||
height: `${300 * 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-repeat': 'no-repeat',
|
||||
}"
|
||||
|
|
@ -110,24 +114,32 @@
|
|||
>
|
||||
<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="{
|
||||
position: 'relative',
|
||||
display: 'block',
|
||||
top: `${(200 - ((fotSize + 3) / 2) * getWrap(item.title)) * bi}px`,
|
||||
left: `${45 * bi}px`,
|
||||
width: `${120 * bi}px`,
|
||||
height: `${7 * bi}px`,
|
||||
left: `${25 * bi}px`,
|
||||
width: `${160 * bi}px`,
|
||||
height: `${3 * bi}px`,
|
||||
}"
|
||||
/>
|
||||
<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="{
|
||||
position: 'relative',
|
||||
top: `${(180 + ((fotSize + 3) / 2) * (getWrap(item.title) + 1)) * bi}px`,
|
||||
width: `${120 * bi}px`,
|
||||
height: `${7 * bi}px`,
|
||||
width: `${160 * bi}px`,
|
||||
height: `${3 * bi}px`,
|
||||
}"
|
||||
/>
|
||||
<span
|
||||
|
|
@ -140,41 +152,53 @@
|
|||
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
|
||||
:src="getImageUrl(item.imgUrl)"
|
||||
:style="{
|
||||
display: 'block',
|
||||
position: 'relative',
|
||||
top: `${20 - fotSize * spanWrap * bi}px`,
|
||||
left: `${50 * bi}px`,
|
||||
width: `${110 * bi}px`,
|
||||
height: `${110 * bi}px`,
|
||||
zIndex: 1,
|
||||
top: `${(-55 - fotSize * spanWrap) * bi}px`,
|
||||
left: `${75 * bi}px`,
|
||||
width: `${60 * bi}px`,
|
||||
height: `${58 * bi}px`,
|
||||
zIndex: 3,
|
||||
}"
|
||||
/>
|
||||
<img
|
||||
v-show="item.isHover"
|
||||
src="/subject_lindidiaocha/choose.png"
|
||||
src="/subject_lindidiaocha/choose.webp"
|
||||
:style="{
|
||||
position: 'relative',
|
||||
top: `${(-80 - fotSize * spanWrap) * bi}px`,
|
||||
width: `${80 * bi}px`,
|
||||
height: `${90 * bi}px`,
|
||||
zIndex: 2,
|
||||
top: `${(-127 - fotSize * spanWrap) * bi}px`,
|
||||
width: `${70 * bi}px`,
|
||||
height: `${75 * bi}px`,
|
||||
zIndex: 4,
|
||||
}"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="subject_bottom">
|
||||
<img src="/subject_lindidiaocha/bottom.png" />
|
||||
<img src="/subject_lindidiaocha/bottom.webp" />
|
||||
<span>
|
||||
{{
|
||||
VITE_GLOB_APP_MANAGEMENT_UNIT
|
||||
? VITE_GLOB_APP_MANAGEMENT_UNIT
|
||||
: t('sys.subject.bottom_copyright_lindidiaocha')
|
||||
}}
|
||||
|
||||
|
||||
{{
|
||||
VITE_GLOB_APP_TECHINICAL_SUPPORT
|
||||
? VITE_GLOB_APP_TECHINICAL_SUPPORT
|
||||
|
|
@ -209,15 +233,21 @@
|
|||
const list: any = ref([]);
|
||||
const userStore = useUserStore();
|
||||
const spanWrap = ref(1);
|
||||
const setting = ref({});
|
||||
|
||||
async function getData() {
|
||||
const res: any = await getSpecialData();
|
||||
// 最大标题文字行数
|
||||
res?.forEach((item) => {
|
||||
res?.forEach((item, index) => {
|
||||
if (item.title == '系统管理') {
|
||||
setting.value = item;
|
||||
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;
|
||||
loginUser.value = localStorage.getItem('fireUserLoginName');
|
||||
|
|
@ -276,42 +306,7 @@
|
|||
box[1] = 40;
|
||||
box[2] = 700;
|
||||
box[3] = 1840;
|
||||
box[4] = 10;
|
||||
// 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;
|
||||
// }
|
||||
box[4] = 20;
|
||||
return box;
|
||||
}
|
||||
const updateWindowSize = () => {
|
||||
|
|
@ -352,7 +347,7 @@
|
|||
</script>
|
||||
<style lang="less" scoped>
|
||||
.subject {
|
||||
background-image: url('/subject_lindidiaocha/bg.png');
|
||||
background-image: url('/subject_lindidiaocha/bg.webp');
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
|
|
@ -375,9 +370,7 @@
|
|||
justify-content: center;
|
||||
width: 100%;
|
||||
|
||||
// 字体样式
|
||||
font-family: Alimama ShuHeiTi;
|
||||
// font-size: 58px;
|
||||
color: #ffffff;
|
||||
// text-shadow: 0px 2px 3px rgba(0, 0, 0, 0.25);
|
||||
background: linear-gradient(268deg, #f8fbff 0%, #ffffff 100%);
|
||||
|
|
@ -450,7 +443,8 @@
|
|||
|
||||
.line {
|
||||
position: relative;
|
||||
top: -2px;
|
||||
top: 0px;
|
||||
font-size: 18px;
|
||||
color: #ffffff;
|
||||
}
|
||||
}
|
||||
|
|
@ -460,14 +454,14 @@
|
|||
position: absolute;
|
||||
height: 93%;
|
||||
bottom: 10px;
|
||||
left: 0px;
|
||||
left: 10px;
|
||||
}
|
||||
|
||||
&_right {
|
||||
position: absolute;
|
||||
height: 93%;
|
||||
bottom: 10px;
|
||||
right: 0px;
|
||||
right: 10px;
|
||||
}
|
||||
|
||||
&_box {
|
||||
|
|
@ -524,9 +518,13 @@
|
|||
position: relative;
|
||||
|
||||
// 字体样式
|
||||
font-family: Microsoft YaHei;
|
||||
color: #ffffff !important;
|
||||
background: linear-gradient(0deg, #6da7ff 0%, #e2ebff 100%);
|
||||
font-family: Alimama ShuHeiTi;
|
||||
font-weight: bold;
|
||||
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-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
|
|
@ -541,13 +539,13 @@
|
|||
span {
|
||||
position: absolute;
|
||||
bottom: 10px;
|
||||
left: calc(50% - 645px / 2);
|
||||
width: 645px;
|
||||
left: calc(50% - 660px / 2);
|
||||
width: 660px;
|
||||
height: 18px;
|
||||
font-family: PingFang SC;
|
||||
font-weight: 400;
|
||||
font-size: 18px;
|
||||
color: #074684;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
img {
|
||||
|
|
|
|||