Compare commits

...

3 Commits

Author SHA1 Message Date
刘妍 fa25527257 案件详情优化适配,增加文件上传内容 2024-04-25 16:27:43 +08:00
刘妍 bc51ed3991 Merge branch 'ly' 2024-04-25 15:00:26 +08:00
刘妍 4e4ec20f40 案件判读初步搭建 2024-04-25 14:59:20 +08:00
26 changed files with 1265 additions and 307 deletions

View File

@ -10,7 +10,7 @@ VITE_GLOB_API_URL=http://192.168.10.104:9020
# File upload address optional
VITE_GLOB_UPLOAD_URL=/upload
VITE_GLOB_UPLOAD_URL=http://192.168.10.104:9011
# Interface prefix
VITE_GLOB_API_URL_PREFIX=

View File

@ -1,25 +1,29 @@
// WFProcess 流程模版基本信息
// WFProcess 流程模版基本信息
import { defHttp } from '@/utils/http/axios';
import { caseFlowLogParams , flowLogModel , droneCaseDealModel ,droneCaseDealParams} from './model/index'
import {
caseFlowLogParams,
flowLogModel,
droneCaseDealModel,
droneCaseDealParams,
} from './model/index';
enum Api {
// 获取案件详情步骤条
GetCaseFlowLog = '/api/DroneCaseinfo/GetCaseFlowLog',
// 获取案件处理详情
GetDroneCaseDeal = '/api/DroneCaseinfo/GetDroneCaseDeal',
// 获取案件详情
GetCaseInfo = '/api/DroneCaseinfo/GetCaseInfo',
// 获取案件详情
GetCaseInfo = '/api/DroneCaseinfo/GetCaseInfo',
// 案件列表
LoadCaseInfoList = '/api/DroneCaseinfo/LoadCaseInfoList',
// 获取GeoJson图层
GetDroneGeoJson='/api/DroneCaseinfo/GetDroneGeoJson'
GetDroneGeoJson = '/api/DroneCaseinfo/GetDroneGeoJson',
}
/**
* @description: getCaseFlowLog
*/
export function getCaseFlowLog(params?: caseFlowLogParams) {
export function getCaseFlowLog(params?: caseFlowLogParams) {
return defHttp.get<flowLogModel>({ url: Api.GetCaseFlowLog, params });
}
/**
@ -46,5 +50,3 @@ export function getCaseInfoList(params?: caseFlowLogParams) {
export function getDroneGeoJson(params?: caseFlowLogParams) {
return defHttp.get<flowLogModel>({ url: Api.GetDroneGeoJson, params });
}

View File

@ -1,21 +1,22 @@
export interface caseFlowLogParams {
id?: string;
}
export interface droneCaseDealParams{
caseid?:string;
export interface droneCaseDealParams {
caseid?: string;
id?: string;
}
export interface flowLog {
name: string;
time: string;
user_name: string;
status: number;
state?:string;
state?: string;
}
export type flowLogModel = flowLog[];
export interface fileList{
filePath?:string | undefined;
s_filePath?:string;
export interface fileList {
filePath?: string | undefined;
s_filePath?: string;
}
export type fileListModel = fileList[];
@ -30,5 +31,4 @@ export type droneCaseDealModel = {
payment_pic_list?: any;
agree_checkout_pic_list?: any;
checkout_pic_list?: any;
}
};

View File

@ -1,16 +1,15 @@
// WFDelegate 流程模版基本信息
// WFDelegate 流程模版基本信息
import { defHttp } from '@/utils/http/axios';
import {DetailParams} from './model/wfSchemeInfoModel'
import { DetailParams } from './model/wfSchemeInfoModel';
enum Api {
enum Api {
// 创建流程
LoadMyUserList = '/api/WFDelegate/LoadMyUserList',
}
/**
* @description: getLoadMyUserList
*/
export function getLoadMyUserList(params?: DetailParams) {
export function getLoadMyUserList(params?: DetailParams) {
return defHttp.get({ url: Api.LoadMyUserList, params });
}
}

View File

@ -1,8 +1,12 @@
// WFProcess 流程模版基本信息
// WFProcess 流程模版基本信息
import { defHttp } from '@/utils/http/axios';
import { CreateParams, DeleteDraftParams, RevokeAuditParams,LoadNextAuditorsParams } from './model/WFProcessModel'
import { MyUncompletedParams } from './model/WFTaskModel'
import {
CreateParams,
DeleteDraftParams,
RevokeAuditParams,
LoadNextAuditorsParams,
} from './model/WFProcessModel';
import { MyUncompletedParams } from './model/WFTaskModel';
enum Api {
// 创建流程
@ -28,73 +32,63 @@ enum Api {
// 加签审核
SignAudit = '/api/WFProcess/SignAudit',
// 流程审核
Audit='/api/WFProcess/Audit',
Audit = '/api/WFProcess/Audit',
// 获取下一节点审核人
LoadNextAuditors='/api/WFProcess/LoadNextAuditors',
LoadNextAuditors = '/api/WFProcess/LoadNextAuditors',
// 确认阅读
ReadFlow='/api/WFProcess/ReadFlow',
ReadFlow = '/api/WFProcess/ReadFlow',
}
/**
* @description: getLoadMyPage
*/
export function getLoadNextAuditors(params?: LoadNextAuditorsParams) {
export function getLoadNextAuditors(params?: LoadNextAuditorsParams) {
return defHttp.get({ url: Api.LoadNextAuditors, params });
}
/**
* @description:
*/
export function create(params?: CreateParams) {
return defHttp.post(
{
url: Api.Create,
params,
},
);
return defHttp.post({
url: Api.Create,
params,
});
}
/**
* @description:
*/
export function createAgain(params?: CreateParams) {
return defHttp.post(
{
url: Api.CreateAgain,
params,
},
);
return defHttp.post({
url: Api.CreateAgain,
params,
});
}
/**
* @description:
*/
export function signAudit(id?:String,params?: CreateParams) {
return defHttp.post(
{
url: Api.SignAudit+"?id="+id,
params,
},
);
export function signAudit(id?: String, params?: CreateParams) {
return defHttp.post({
url: Api.SignAudit + '?id=' + id,
params,
});
}
/**
* @description:
*/
export function audit(id:String,params?: CreateParams) {
return defHttp.post(
{
url: Api.Audit+"?id="+id,
params,
},
);
export function audit(id: String, params?: CreateParams) {
return defHttp.post({
url: Api.Audit + '?id=' + id,
params,
});
}
/**
* @description: 稿
*/
export function saveDraft(params?: CreateParams) {
return defHttp.post(
{
url: Api.SaveDraft,
params,
},
);
return defHttp.post({
url: Api.SaveDraft,
params,
});
}
/**
* @description: getLoadMyPage
@ -112,45 +106,37 @@ export function getLoadMyDraftPage(params?: MyUncompletedParams) {
* @description: 稿
*/
export function deleteDraft(params: DeleteDraftParams) {
return defHttp.post(
{
url: Api.DeleteDraft + "?id=" + params.id,
params,
},
);
return defHttp.post({
url: Api.DeleteDraft + '?id=' + params.id,
params,
});
}
/**
* @description:
*/
export function urge(params: DeleteDraftParams) {
return defHttp.post(
{
url: Api.Urge + "?id=" + params.id,
params,
},
);
return defHttp.post({
url: Api.Urge + '?id=' + params.id,
params,
});
}
/**
* @description:
*/
export function revoke(params: DeleteDraftParams) {
return defHttp.post(
{
url: Api.Revoke + "?id=" + params.id,
params,
},
);
return defHttp.post({
url: Api.Revoke + '?id=' + params.id,
params,
});
}
/**
* @description:
*/
export function revokeAudit(params: RevokeAuditParams) {
return defHttp.post(
{
url: Api.RevokeAudit + "?id=" + params.id + "&taskId=" + params.taskId,
params,
},
);
return defHttp.post({
url: Api.RevokeAudit + '?id=' + params.id + '&taskId=' + params.taskId,
params,
});
}
/**
* @description: getPBMN
@ -162,10 +148,8 @@ export function getBPMN(params: DeleteDraftParams) {
/**
* @description:
*/
export function ReadFlow(id: string) {
return defHttp.post(
{
url: Api.ReadFlow + "?id=" + id ,
},
);
}
export function ReadFlow(id: string) {
return defHttp.post({
url: Api.ReadFlow + '?id=' + id,
});
}

View File

@ -1,25 +1,35 @@
// WFSchemeInfo 流程模版基本信息
// WFSchemeInfo 流程模版基本信息
import { defHttp } from '@/utils/http/axios';
import {SchemeListParams,GetSchemeModel,AddParams,
DeleteParams,UpdateParams,StateParams,HistoryParams,GetHistoryModel,SchemeParams,DetailParams} from './model/wfSchemeInfoModel'
import {
SchemeListParams,
GetSchemeModel,
AddParams,
DeleteParams,
UpdateParams,
StateParams,
HistoryParams,
GetHistoryModel,
SchemeParams,
DetailParams,
} from './model/wfSchemeInfoModel';
enum Api {
enum Api {
// 流程模板基本信息
LoadPage = '/api/WFSchemeInfo/LoadPage',
Add = '/api/WFSchemeInfo/Add',
Update = '/api/WFSchemeInfo/Update',
Delete = '/api/WFSchemeInfo/Delete',
UpDateState = '/api/WFSchemeInfo/UpDateState',
GetDetail='/api/WFSchemeInfo/Get',
GetDetail = '/api/WFSchemeInfo/Get',
// 可用模板合集
Load='/api/WFSchemeInfo/Load',
Load = '/api/WFSchemeInfo/Load',
// 流程模板详细信息
LoadHistoryPage= '/api/WFScheme/LoadPage',
UpdateScheme='/api/WFSchemeInfo/UpdateScheme',
LoadHistoryPage = '/api/WFScheme/LoadPage',
UpdateScheme = '/api/WFSchemeInfo/UpdateScheme',
// 获取某模板历史数据
VerisonsLoad='/api/WFScheme/Load',
VerisonsLoad = '/api/WFScheme/Load',
// 获取自定义流程列表(流程发起页)
GetInfoList='/api/WFSchemeInfo/GetInfoList'
GetInfoList = '/api/WFSchemeInfo/GetInfoList',
}
/**
@ -28,57 +38,56 @@ import {SchemeListParams,GetSchemeModel,AddParams,
export function getLoadPage(params?: SchemeListParams) {
return defHttp.get<GetSchemeModel>({ url: Api.LoadPage, params });
}
export function getDetail(params?: DetailParams){
export function getDetail(params?: DetailParams) {
return defHttp.get({ url: Api.GetDetail, params });
}
/**
* @description: getLoad
*/
export function getLoad(params?: SchemeListParams) {
export function getLoad(params?: SchemeListParams) {
return defHttp.get<GetSchemeModel>({ url: Api.Load, params });
}
/**
* @description: postAdd
*/
export function postAdd( params?:AddParams) {
return defHttp.post(
{
url: Api.Add,
params,
},
);
}
export function update(params:UpdateParams) {
export function postAdd(params?: AddParams) {
return defHttp.post({
url: Api.Update+"?id="+params.schemeinfo.id,
params
url: Api.Add,
params,
});
}
export function del(params:DeleteParams) {
return defHttp.post({ url: Api.Delete + "?id=" + params.id });
export function update(params: UpdateParams) {
return defHttp.post({
url: Api.Update + '?id=' + params.schemeinfo.id,
params,
});
}
export function updateState(params:StateParams){
return defHttp.post({ url: Api.UpDateState + "?id=" + params.id +"&state="+params.state});
export function del(params: DeleteParams) {
return defHttp.post({ url: Api.Delete + '?id=' + params.id });
}
export function getLoadHistoryPage(params?:HistoryParams){
return defHttp.get<GetHistoryModel>({url:Api.LoadHistoryPage,params})
}
export function getVerisonsLoad(params?:HistoryParams){
return defHttp.get<GetHistoryModel>({url:Api.VerisonsLoad,params})
export function updateState(params: StateParams) {
return defHttp.post({ url: Api.UpDateState + '?id=' + params.id + '&state=' + params.state });
}
export function updateScheme(params:SchemeParams){
return defHttp.post({ url: Api.UpdateScheme + "?id=" + params.id +"&schemeId="+params.schemeId});
export function getLoadHistoryPage(params?: HistoryParams) {
return defHttp.get<GetHistoryModel>({ url: Api.LoadHistoryPage, params });
}
export function getVerisonsLoad(params?: HistoryParams) {
return defHttp.get<GetHistoryModel>({ url: Api.VerisonsLoad, params });
}
export function updateScheme(params: SchemeParams) {
return defHttp.post({
url: Api.UpdateScheme + '?id=' + params.id + '&schemeId=' + params.schemeId,
});
}
/**
* @description: getInfoList
*/
export function getInfoList(params) {
export function getInfoList(params) {
return defHttp.get({ url: Api.GetInfoList, params });
}

View File

@ -1,55 +1,53 @@
// WFTask
import { defHttp } from '@/utils/http/axios';
import {MyUncompletedParams,TaskDetailParam} from './model/WFTaskModel'
import { MyUncompletedParams, TaskDetailParam } from './model/WFTaskModel';
enum Api {
enum Api {
// 我的待办
LoadMyUncompletedPage = '/api/WFTask/LoadMyUncompletedPage',
// 我的已办
LoadMyCompletedPage='/api/WFTask/LoadMyCompletedPage',
LoadMyCompletedPage = '/api/WFTask/LoadMyCompletedPage',
// 我的传阅
LoadMyReadPage='/api/WFTask/LoadMyReadPage',
LoadMyReadPage = '/api/WFTask/LoadMyReadPage',
// 我的委托
LoadMyDelegatePage='/api/WFTask/LoadMyDelegatePage',
GetTaskDetail='/api/WFTask/Get',
GetBPMNTask='/api/WFTask/GetBPMN'
LoadMyDelegatePage = '/api/WFTask/LoadMyDelegatePage',
GetTaskDetail = '/api/WFTask/Get',
GetBPMNTask = '/api/WFTask/GetBPMN',
}
/**
* @description: getLoadMyUncompletedPage
*/
export function getLoadMyUncompletedPage(params?: MyUncompletedParams) {
export function getLoadMyUncompletedPage(params?: MyUncompletedParams) {
return defHttp.get({ url: Api.LoadMyUncompletedPage, params });
}
/**
* @description: getLoadMyCompletedPage
*/
export function getLoadMyCompletedPage(params?: MyUncompletedParams) {
export function getLoadMyCompletedPage(params?: MyUncompletedParams) {
return defHttp.get({ url: Api.LoadMyCompletedPage, params });
}
/**
* @description: getLoadMyReadPage
*/
export function getLoadMyReadPage(params?: MyUncompletedParams) {
export function getLoadMyReadPage(params?: MyUncompletedParams) {
return defHttp.get({ url: Api.LoadMyReadPage, params });
}
/**
* @description: getLoadMyDelegatePage
*/
export function getLoadMyDelegatePage(params?: MyUncompletedParams) {
export function getLoadMyDelegatePage(params?: MyUncompletedParams) {
return defHttp.get({ url: Api.LoadMyDelegatePage, params });
}
/**
* @description: GetTaskDetail
*/
export function getTaskDetail(params?: TaskDetailParam) {
export function getTaskDetail(params?: TaskDetailParam) {
return defHttp.get({ url: Api.GetTaskDetail, params });
}
/**
* @description: getBPMNTask
*/
export function getBPMNTask(params?: TaskDetailParam) {
export function getBPMNTask(params?: TaskDetailParam) {
return defHttp.get({ url: Api.GetBPMNTask, params });
}

View File

@ -1,5 +1,10 @@
import { defHttp } from '@/utils/http/axios';
import {TableListParams,TableListModel,TableFormsParams,TableFormsModel} from './model/flowPenal'
import {
TableListParams,
TableListModel,
TableFormsParams,
TableFormsModel,
} from './model/flowPenalModel';
enum Api {
GetTableList = '/api/FormModule/GetTableList',
@ -15,7 +20,7 @@ export function getTableList(params: TableListParams) {
}
/**
* @description: getTableForms
*/
export function getTableForms(params: TableFormsParams) {
*/
export function getTableForms(params: TableFormsParams) {
return defHttp.get<TableFormsModel>({ url: Api.GetTableForms, params });
}
}

View File

@ -1,45 +1,44 @@
/**
* @description:
*/
export interface CreateParams {
processId?: string | null,
schemeCode?: string,
title?: string,
userId?: string,
toUserId?: string,
export interface CreateParams {
processId?: string | null;
schemeCode?: string;
title?: string;
userId?: string;
toUserId?: string;
nextUsers?: {
additionalProp1: string,
additionalProp2: string,
additionalProp3: string
},
des?: string,
code?: string,
name?: string,
stampImg?: string,
stampPassWord?: string,
nextId?: string
additionalProp1: string;
additionalProp2: string;
additionalProp3: string;
};
des?: string;
code?: string;
name?: string;
stampImg?: string;
stampPassWord?: string;
nextId?: string;
}
/**
* @description: 稿
*/
export interface DeleteDraftParams {
id: string,
export interface DeleteDraftParams {
id: string;
}
/**
* @description:
*/
export interface RevokeAuditParams {
id: string,
taskId:string,
export interface RevokeAuditParams {
id: string;
taskId: string;
}
/**
* @description:
*/
export interface LoadNextAuditorsParams {
code: string,
processId?:string | number,
nodeId:string,
operationCode:string,
userId:string,
export interface LoadNextAuditorsParams {
code: string;
processId?: string | number;
nodeId: string;
operationCode: string;
userId: string;
}

View File

@ -1,7 +1,7 @@
/**
* @description:
*/
export interface MyUncompletedParams {
export interface MyUncompletedParams {
keyWord: string;
page: number;
limit: number;
@ -10,4 +10,4 @@
}
export interface TaskDetailParam {
id: string;
}
}

View File

@ -1,7 +1,7 @@
/**
* @description:
*/
export interface TableListModel {
export interface TableListModel {
name: string;
description: number;
dbObjectType: number;
@ -15,7 +15,7 @@ export interface TableListParams {
/**
* @description:
*/
export interface TableFormsParams {
export interface TableFormsParams {
dbCode: string;
tableNames: string;
}
@ -23,7 +23,7 @@ export interface TableListParams {
/**
* @description:
*/
export interface TableFormsModel {
export interface TableFormsModel {
db_codetable: object;
db_codecolumnsList:object
}
db_codecolumnsList: object;
}

View File

@ -19,8 +19,8 @@ export interface AddParams {
/**
* @description:
*/
export interface UpdateParams {
itemDetailId?:string;
export interface UpdateParams {
itemDetailId?: string;
itemName?: string;
itemValue?: string;
sortCode?: number;
@ -28,12 +28,11 @@ export interface AddParams {
description?: string;
}
/**
* @description:
*/
export interface DeleteParams {
id: string ;
id: string;
}
/**

View File

@ -20,41 +20,41 @@ export interface DetailParams {
*/
export interface AddParams {
schemeinfo: {
id: string,
code: string,
name: string,
category: string,
color: string,
icon: string,
schemeId: string,
enabledMark: 0,
mark: 0,
isInApp: 0,
authType: 0,
description: string,
type: 0,
createDate: string,
createUserId: string,
createUserName: string
},
id: string;
code: string;
name: string;
category: string;
color: string;
icon: string;
schemeId: string;
enabledMark: 0;
mark: 0;
isInApp: 0;
authType: 0;
description: string;
type: 0;
createDate: string;
createUserId: string;
createUserName: string;
};
schemeAuthList: [
{
id: string,
schemeInfoId: string,
objName: string,
objId: string,
objType: 0
}
],
id: string;
schemeInfoId: string;
objName: string;
objId: string;
objType: 0;
},
];
scheme: {
id: string,
schemeInfoId: string,
type: 0,
createDate: string,
createUserId: string,
createUserName: string,
content: string
}
id: string;
schemeInfoId: string;
type: 0;
createDate: string;
createUserId: string;
createUserName: string;
content: string;
};
}
/**
@ -62,44 +62,43 @@ export interface AddParams {
*/
export interface UpdateParams {
schemeinfo: {
id: string,
code: string,
name: string,
category: string,
color: string,
icon: string,
schemeId: string,
enabledMark: 0,
mark: 0,
isInApp: 0,
authType: 0,
description: string,
type: 0,
createDate: string,
createUserId: string,
createUserName: string
},
id: string;
code: string;
name: string;
category: string;
color: string;
icon: string;
schemeId: string;
enabledMark: 0;
mark: 0;
isInApp: 0;
authType: 0;
description: string;
type: 0;
createDate: string;
createUserId: string;
createUserName: string;
};
schemeAuthList: [
{
id: string,
schemeInfoId: string,
objName: string,
objId: string,
objType: 0
}
],
id: string;
schemeInfoId: string;
objName: string;
objId: string;
objType: 0;
},
];
scheme: {
id: string,
schemeInfoId: string,
type: 0,
createDate: string,
createUserId: string,
createUserName: string,
content: string
}
id: string;
schemeInfoId: string;
type: 0;
createDate: string;
createUserId: string;
createUserName: string;
content: string;
};
}
/**
* @description:
*/
@ -149,18 +148,18 @@ export interface HistoryParams {
* @description:
*/
export interface GetHistoryModel {
id: string,
schemeInfoId: string,
type: number,
createDate: string,
createUserId: string,
createUserName: string,
content: string
id: string;
schemeInfoId: string;
type: number;
createDate: string;
createUserId: string;
createUserName: string;
content: string;
}
/**
* @description:
*/
export interface SchemeParams {
id: string,
schemeId: string
id: string;
schemeId: string;
}

View File

@ -1,6 +1,12 @@
// sysDataItemDetail 字典明细接口api
import { defHttp } from '@/utils/http/axios';
import {CodeParams,AddParams,UpdateParams ,DeleteParams,GetSysDataItemDetailModel} from './model/sysDataItemDetailModel'
import {
CodeParams,
AddParams,
UpdateParams,
DeleteParams,
GetSysDataItemDetailModel,
} from './model/sysDataItemDetailModel';
enum Api {
Load = '/api/SysDataItemDetail/Load',
Add = '/api/SysDataItemDetail/Add',
@ -11,13 +17,11 @@ enum Api {
/**
* @description: postAdd
*/
export function postAdd(code:string, params?:AddParams) {
return defHttp.post(
{
url: Api.Add + "?code=" + code,
params,
},
);
export function postAdd(code: string, params?: AddParams) {
return defHttp.post({
url: Api.Add + '?code=' + code,
params,
});
}
/**
@ -27,16 +31,14 @@ export function getLoad(params: CodeParams) {
return defHttp.get<GetSysDataItemDetailModel>({ url: Api.Load, params });
}
export function update(params?:UpdateParams) {
console.log(params)
export function update(params?: UpdateParams) {
console.log(params);
return defHttp.post({
url: Api.Update,
params
params,
});
}
export function del(params:DeleteParams) {
return defHttp.post({ url: Api.Delete + "?id=" + params.id });
export function del(params: DeleteParams) {
return defHttp.post({ url: Api.Delete + '?id=' + params.id });
}

View File

@ -4,8 +4,9 @@ import { UploadFileParams } from '#/axios';
import { useGlobSetting } from '@/hooks/setting';
import { AxiosProgressEvent } from 'axios';
const { uploadUrl = '' } = useGlobSetting();
const { uploadUrl } = useGlobSetting();
const uploadFileUrl = uploadUrl + '/api/Platform/Upload'
/**
* @description: Upload interface
*/
@ -15,7 +16,7 @@ export function uploadApi(
) {
return defHttp.uploadFile<UploadApiResult>(
{
url: uploadUrl,
url: uploadFileUrl,
onUploadProgress,
},
params,

View File

@ -17,15 +17,17 @@ enum Api {
* @description: user login api
*/
export function loginApi(params: LoginParams, mode: ErrorMessageMode = 'modal') {
console.log(defHttp.post<LoginResultModel>(
{
url: Api.Login,
params,
},
{
errorMessageMode: mode,
},
))
console.log(
defHttp.post<LoginResultModel>(
{
url: Api.Login,
params,
},
{
errorMessageMode: mode,
},
),
);
return defHttp.post<LoginResultModel>(
{
url: Api.Login,

View File

@ -0,0 +1,22 @@
.mapboxgl-ctrl-logo {
display: none !important;
}
.map-container {
position: relative;
}
.map-box,
.map-container {
width: 100%;
height: 100%;
}
.map-control {
position: absolute;
right: 10px;
top: 10px;
display: flex;
}
.map-control img {
width: 40px;
height: 40px;
cursor: pointer;
}

View File

@ -17,7 +17,7 @@
</a-steps>
</div>
<div class="case-view_content">
<div class="file-box w-1/2 xl:w-1/2" v-if="caseHandleInfo">
<div :class="props.mapShow ? 'file-box w-1/2 xl:w-1/2' : 'file-all'" v-if="caseHandleInfo">
<CollapseContainer
title="【案件下发信息】"
:canExpan="false"
@ -138,7 +138,7 @@
</a-descriptions>
</CollapseContainer>
</div>
<CollapseContainer title="地图位置" :canExpan="false" class="map-box ml-1 w-1/2 xl:w-1/2">
<CollapseContainer v-if="props.mapShow" title="地图位置" :canExpan="false" class="map_box ml-1 w-1/2 xl:w-1/2">
<MapDetail :ruleForm="detailData" :isOnce="true"></MapDetail>
</CollapseContainer>
</div>
@ -172,6 +172,12 @@
});
const props = defineProps({
caseId: String,
mapShow: {
type: Boolean,
default: () => {
return true ;
},
},
});
console.log(props);
watch(
@ -430,11 +436,15 @@
display: flex;
height: 65vh;
.file-box {
overflow: auto;
overflow-y: auto;
}
.file-all{
overflow-y: auto;
width: 100%;
}
}
}
.map-box {
.map_box {
height: 100%;
}
</style>

View File

@ -15,11 +15,11 @@ export interface caseDetailObj {
remark?: string;
case_description?: string;
}
export interface infoObj{
export interface infoObj {
createusername?: string;
createtime?:string;
verifystatusname?:string;
measure_name?:string;
createtime?: string;
verifystatusname?: string;
measure_name?: string;
result_name?: string;
contacts_people?: string;
contacts_phone?: string;
@ -43,9 +43,20 @@ export interface infoObj{
evidence_file_indate?: string;
illegal_contact_idcard?: string;
registr_number?: string;
procedure_indate?:string;
procedure_indate?: string;
}
export interface caseHandleInfoObj {
info:infoObj
info: infoObj;
is_illegal?: string;
}
}
export interface ListItem {
title: string;
icon: string;
color?: string;
}
export interface TabItem {
key: string;
name: string;
component: string;
}

View File

@ -41,6 +41,7 @@
import { reactive, watch, ref } from 'vue';
import { ImagePreview } from '@/components/Preview';
import { DetailModel, caseDetailObj } from '../model';
const labelStyle = ref({
width: '100px',
});

View File

@ -1,6 +1,6 @@
<template>
<div class="w-full">
<MapboxMaps :mapOptions="mapOptions" @map-on-load="mapOnLoad" />
<MapboxMaps :mapOptions="mapOptions" :control="[]" @map-on-load="mapOnLoad" />
</div>
</template>
<script lang="ts" setup>
@ -8,6 +8,7 @@
import { ref, watch } from 'vue';
import MapboxMaps from '@/components/MapboxMaps/index.vue';
import { getDroneGeoJson } from '@/api/monitor/index';
const detailMap = ref();
const props = defineProps({
ruleForm: {
@ -199,7 +200,6 @@
</script>
<style scoped lang="less">
.w-full {
width: 100%;
height: 50vh;
}
</style>

View File

@ -16,7 +16,9 @@ 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';
// 案件判读
export { default as Interpret } from './interpretation/src/interpret.vue';
// 案件处理
export { default as Dispose } from './interpretation/src/dispose.vue';
// 案件判读地图
export { default as InterpretMap } from './interpretation/src/interpretMap.vue';

View File

@ -0,0 +1,251 @@
<template>
<div class="interpretation-box">
<InterpretMap :interpretData="interpretData" @setArea="setArea"></InterpretMap>
<div :class="prefixCls" v-if="disabledType">
<div :class="`${prefixCls}__top`">
<a-form ref="formRef" :model="listQuery" labelAlign="left">
<a-form-item placeholder="状态">
<a-select
v-model:value="listQuery.is_intact"
placeholder="请选择"
:options="data.intactDatas"
:field-names="{ label: 'itemName', value: 'itemValue' }"
>
</a-select>
</a-form-item>
<a-form-item placeholder="办理状态">
<a-select
v-model:value="listQuery.handle_status_id"
placeholder="请选择"
:options="data.handleDealOptions"
:field-names="{ label: 'itemName', value: 'itemValue' }"
>
</a-select>
</a-form-item>
<a-form-item placeholder="办理状态">
<a-tree-select
v-model:value="value"
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
:tree-data="data.OrgList"
placeholder="查询地区"
/>
</a-form-item>
<a-form-item>
<a-input v-model:value="listQuery.key" placeholder="请输入关键字" />
</a-form-item>
<a-form-item>
<a-input v-model:value="listQuery.identification_user" placeholder="判读人姓名" />
</a-form-item>
<a-form-item class="btn_item">
<a-button @click="getList">
<template #icon><SearchOutlined /></template>
</a-button>
<a-button>
<template #icon><VerticalAlignBottomOutlined /></template>
</a-button>
</a-form-item>
</a-form>
<div class="clear"></div>
</div>
<div :class="`${prefixCls}__content`">
<List :pagination="pagination">
<template v-for="item in data.dataList" :key="item.id">
<List.Item class="list">
<List.Item.Meta>
<template #avatar>
<a-image
:width="60"
src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
/>
</template>
<template #title>
<span>{{ item.case_description }}</span>
</template>
<template #description>
<div class="description-box">
<div class="description">
<span>{{ item.streetname }}&nbsp;{{ item.communityname }}</span>
&nbsp;&nbsp;&nbsp;&nbsp;
<span style="float: right">{{ item.createtime }}</span>
</div>
<div class="description">
{{ item.identification_user }}
</div>
<div class="extra">
<a-button type="primary" @click="interpretBnt(item)"></a-button>
</div>
</div>
</template>
</List.Item.Meta>
</List.Item>
</template>
</List>
</div>
</div>
<div class="case_info" v-else>
<CollapseContainer title="案件信息" :canExpan="false">
<template #action>
<div class="case_close" @click="changeType">
<CloseOutlined />
</div>
</template>
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="案件判读">
<Interpret :interpretData="interpretData"></Interpret>
</a-tab-pane>
<a-tab-pane key="2" tab="案件处理">
<Dispose :id="interpretData.id"></Dispose>
</a-tab-pane>
</a-tabs>
</CollapseContainer>
</div>
</div>
</template>
<script setup lang="ts">
import { ref, reactive, onMounted } from 'vue';
import { Progress, Row, Col, List, Tag, Tabs } from 'ant-design-vue';
import Icon from '@/components/Icon/Icon.vue';
import { CollapseContainer } from '@/components/Container';
import { SearchOutlined } from '@ant-design/icons-vue';
import { VerticalAlignBottomOutlined, CloseOutlined } from '@ant-design/icons-vue';
import { BasicForm } from '@/components/Form';
import MapboxMaps from '@/components/MapboxMaps/index.vue';
import { getCaseInfoList } from '@/api/monitor/index';
import { Interpret, Dispose, InterpretMap } from '../index';
const disabledType = ref(true);
const prefixCls = 'list-basic';
const activeKey = ref('1');
const interpretData = ref({});
const pagination = ref({
onChange: (page: number) => {
console.log(page);
listQuery.value.page = page;
getList();
},
pageSize: 5,
total: 0,
});
const listQuery = ref({
page: 1,
limit: 5,
is_intact: 0,
});
const data = reactive({
OrgList: [],
handleDealOptions: [],
intactDatas: [],
dataList: [],
});
const mapOptions = {
center: [117.84714891969796, 35.22152309532066],
zoom: 10,
};
const detailMap = ref();
const mapBox = ref();
const mapOnLoad = (map) => {
mapBox.value = map;
//
const testSource =
'http://123.132.248.154:9205/geoserver/gwc/service/tms/1.0.0/TEST_WORK_SPACE%3Alindi@EPSG:900913@pbf/{z}/{x}/{y}.pbf';
map.U.addVector('name', testSource);
map.U.addLineLayer('ffff', {
source: 'name',
'source-layer': 'lindi',
});
detailMap.value = map;
};
async function getList() {
const obj = await getCaseInfoList(listQuery.value);
console.log(obj);
data.dataList = obj.items;
pagination.value.total = obj.total;
}
function changeType() {
disabledType.value = true;
}
function interpretBnt(item) {
disabledType.value = false;
console.log(item);
interpretData.value = item;
}
function setArea(area) {
interpretData.value.area = area;
}
onMounted(() => {
getList();
});
</script>
<style scoped lang="less">
.w-full {
width: 100%;
position: relative;
height: 90vh;
}
.case_info {
position: absolute;
top: 12px;
left: 25px;
width: 40%;
height: 87vh;
.vben-collapse-container {
height: 100%;
}
.case_close {
cursor: pointer;
}
}
.list-basic {
position: absolute;
top: 12px;
left: 25px;
width: 30%;
height: 90vh;
&__top {
padding: 10px;
background-color: @component-background;
text-align: center;
height: 10vh;
.clear {
clear: both;
}
}
&__content {
height: 76vh;
overflow: auto;
margin-top: 12px;
padding: 10px 0;
background-color: @component-background;
.list {
position: relative;
}
.icon {
font-size: 40px !important;
}
.extra {
display: flex;
justify-content: flex-end;
}
.description-box {
display: flex;
flex-direction: column;
}
}
}
::v-deep .ant-form {
.ant-form-item {
float: left;
margin-bottom: 4px;
margin-left: 4px;
width: 30%;
button {
margin-right: 10px;
}
}
}
</style>

View File

@ -0,0 +1,382 @@
<template>
<div>
<CollapseContainer title="【案件核查信息】" :canExpan="false">
<a-descriptions bordered :column="1" size="small" :labelStyle="labelStyle">
<a-descriptions-item label="核查人">{{
caseHandlingData.createusername
}}</a-descriptions-item>
<a-descriptions-item label="核查时间">
{{ caseHandlingData.createtime }}
</a-descriptions-item>
<a-descriptions-item label="是否违法">
<span v-if="illegal == 0"></span>
<span v-else-if="illegal == 1">违法</span>
<span v-else-if="illegal == 2">伪变化</span>
</a-descriptions-item>
<a-descriptions-item label="现场照片">
<div>
<ImagePreview :imageList="imageList" />
</div>
</a-descriptions-item>
<a-descriptions-item label="现场视频">
<div v-if="playerOptions.length > 0">
<video-player
class="video-player vjs-custom-skin"
v-for="(item, index) in playerOptions"
:key="index"
ref="videoPlayer"
:playsinline="true"
:options="item"
style="width: 200px"
></video-player>
</div>
</a-descriptions-item>
<a-descriptions-item label="处理措施" v-if="illegal == 1">
{{ caseHandlingData.createtime }}
</a-descriptions-item>
<template v-if="illegal == 0">
<a-descriptions-item label="项目名称">
{{ caseHandlingData.result_name }}
</a-descriptions-item>
<a-descriptions-item label="建设情况">
{{ caseHandlingData.actual_scene_case }}
</a-descriptions-item>
<a-descriptions-item label="建筑结构">
{{ caseHandlingData.build_structure }}
</a-descriptions-item>
<a-descriptions-item label="实际用途">
{{ caseHandlingData.actual_use_to }}
</a-descriptions-item>
<a-descriptions-item label="当事人">
{{ caseHandlingData.illegal_contact }}
</a-descriptions-item>
<a-descriptions-item label="当事人电话">
{{ caseHandlingData.illegal_contact_phone }}
</a-descriptions-item>
</template>
</a-descriptions>
</CollapseContainer>
<CollapseContainer title="【案件办理信息-合法】" :canExpan="false" v-if="illegal == 0">
<a-descriptions-item label="批准文件名称">
{{ caseHandlingData.evidence_file_name }}
</a-descriptions-item>
<a-descriptions-item label="批准文件编号">
{{ caseHandlingData.evidence_file_number }}
</a-descriptions-item>
<a-descriptions-item label="批准文件有效期">
{{ caseHandlingData.evidence_file_indate }}
</a-descriptions-item>
<a-descriptions-item label="合法批准文件">
<div>
<ImagePreview :imageList="evidenceFileList" />
</div>
</a-descriptions-item>
<a-descriptions-item label="勘测定界图">
<div>
<ImagePreview :imageList="boundaryImageList" />
</div>
</a-descriptions-item>
<a-descriptions-item label="是否超范围">
{{ caseHandlingData.is_out_boundary == 1 ? '是' : '否' }}
</a-descriptions-item>
<a-descriptions-item label="是否超层">
{{ caseHandlingData.is_over_floor == 1 ? '是' : '否' }}
</a-descriptions-item>
<a-descriptions-item label="办理人">
{{ caseHandlingData.transactor_name }}
</a-descriptions-item>
<a-descriptions-item label="办理时间">
{{ caseHandlingData.transact_time }}
</a-descriptions-item>
</CollapseContainer>
<CollapseContainer title="【案件办理信息-伪变化】" :canExpan="false" v-if="illegal == 2">
<a-descriptions-item label="伪变化原因">
{{ caseHandlingData.pseudo_change_reason }}
</a-descriptions-item>
<a-descriptions-item label="实际用途">
{{ caseHandlingData.actual_use_to }}
</a-descriptions-item>
<a-descriptions-item label="实际面积">
{{ caseHandlingData.actual_area }}
</a-descriptions-item>
<a-descriptions-item label="是否有建筑物">
{{ caseHandlingData.is_have_build == 1 ? '是' : '否' }}
</a-descriptions-item>
<a-descriptions-item label="是否永久性建筑">
{{ caseHandlingData.is_have_build == 1 ? '是' : '否' }}
</a-descriptions-item>
<a-descriptions-item label="办理人">
{{ caseHandlingData.transactor_name }}
</a-descriptions-item>
<a-descriptions-item label="办理时间">
{{ caseHandlingData.transact_time }}
</a-descriptions-item>
</CollapseContainer>
<CollapseContainer
title="【案件办理信息-拟拆除】"
:canExpan="false"
v-if="illegal == 1 && caseHandlingData.measure_name == '拟拆除'"
>
<a-descriptions-item label="实际用途">
{{ caseHandlingData.actual_use_to }}
</a-descriptions-item>
<a-descriptions-item label="当事人">
{{ caseHandlingData.illegal_contact }}
</a-descriptions-item>
<a-descriptions-item label="当事人电话">
{{ caseHandlingData.illegal_contact_phone }}
</a-descriptions-item>
<a-descriptions-item label="建设情况">
{{ caseHandlingData.is_build_complete == 1 ? '已建成' : '建设中' }}
</a-descriptions-item>
<a-descriptions-item label="建筑结构">
{{ caseHandlingData.build_structure }}
</a-descriptions-item>
<a-descriptions-item label="拆除后照片">
<div>
<ImagePreview :imageList="afterImageList" />
</div>
</a-descriptions-item>
<a-descriptions-item label="办理人">
{{ caseHandlingData.transactor_name }}
</a-descriptions-item>
<a-descriptions-item label="办理时间">
{{ caseHandlingData.transact_time }}
</a-descriptions-item>
</CollapseContainer>
<CollapseContainer
title="【案件办理信息-查处】"
:canExpan="false"
v-if="illegal == 1 && caseHandlingData.measure_name == '查处'"
>
<a-descriptions-item label="实际用途">
{{ caseHandlingData.actual_use_to }}
</a-descriptions-item>
<a-descriptions-item label="当事人">
{{ caseHandlingData.illegal_contact }}
</a-descriptions-item>
<a-descriptions-item label="当事人电话">
{{ caseHandlingData.illegal_contact_phone }}
</a-descriptions-item>
<a-descriptions-item label="身份证号码">
{{ caseHandlingData.illegal_contact_idcard }}
</a-descriptions-item>
<a-descriptions-item label="违法类型">
{{ caseHandlingData.illegal_type }}
</a-descriptions-item>
<a-descriptions-item label="立案号">
{{ caseHandlingData.build_structure }}
</a-descriptions-item>
<a-descriptions-item label="处罚通知书">
<div>
<ImagePreview :imageList="punishImageList" />
</div>
</a-descriptions-item>
<a-descriptions-item label="交款通知书">
<div>
<ImagePreview :imageList="paymentImagesList" />
</div>
</a-descriptions-item>
<a-descriptions-item label="办理人">
{{ caseHandlingData.transactor_name }}
</a-descriptions-item>
<a-descriptions-item label="办理时间">
{{ caseHandlingData.transact_time }}
</a-descriptions-item>
</CollapseContainer>
<CollapseContainer
title="【案件办理信息-拟完善手续】"
:canExpan="false"
v-if="illegal == 1 && caseHandlingData.measure_name == '拟完善手续'"
>
<a-descriptions-item label="实际用途">
{{ caseHandlingData.actual_use_to }}
</a-descriptions-item>
<a-descriptions-item label="当事人">
{{ caseHandlingData.illegal_contact }}
</a-descriptions-item>
<a-descriptions-item label="当事人电话">
{{ caseHandlingData.illegal_contact_phone }}
</a-descriptions-item>
<a-descriptions-item label="拟完善手续名称">
{{ caseHandlingData.result_name }}
</a-descriptions-item>
<a-descriptions-item label="完善手续条件">
{{ caseHandlingData.is_have_checkout_condition == 1 ? '是' : '否' }}
</a-descriptions-item>
<a-descriptions-item label="违法类型">
{{ caseHandlingData.illegal_type }}
</a-descriptions-item>
<a-descriptions-item label="政府同意完善手续证明">
<div>
<ImagePreview :imageList="agreeImageList" />
</div>
</a-descriptions-item>
<a-descriptions-item label="办理手续照片">
<div>
<ImagePreview :imageList="checkoutImageList" />
</div>
</a-descriptions-item>
<a-descriptions-item label="勘测定界图">
<div>
<ImagePreview :imageList="boundaryImageList" />
</div>
</a-descriptions-item>
<a-descriptions-item label="手续有效期">
{{ caseHandlingData.procedure_indate }}
</a-descriptions-item>
<a-descriptions-item label="办理人">
{{ caseHandlingData.transactor_name }}
</a-descriptions-item>
<a-descriptions-item label="办理时间">
{{ caseHandlingData.transact_time }}
</a-descriptions-item>
</CollapseContainer>
</div>
</template>
<script lang="ts" setup>
import { reactive, watch, ref , onMounted} from 'vue';
import { ImagePreview } from '@/components/Preview';
import { CollapseContainer } from '@/components/Container';
import { caseHandleInfoObj } from '../model';
import { getDroneCaseDeal } from '@/api/monitor/index'
const illegal = ref(0);
const labelStyle = ref({
width: '100px',
});
const caseHandlingData = ref({});
const playerOptions = ref([]);
const imageList = ref([
'https://picsum.photos/id/66/346/216',
'https://picsum.photos/id/67/346/216',
'https://picsum.photos/id/68/346/216',
]);
const evidenceFileList = ref([
'https://picsum.photos/id/66/346/216',
'https://picsum.photos/id/67/346/216',
'https://picsum.photos/id/68/346/216',
]);
const boundaryImageList = ref([
'https://picsum.photos/id/66/346/216',
'https://picsum.photos/id/67/346/216',
'https://picsum.photos/id/68/346/216',
]);
const afterImageList = ref([
'https://picsum.photos/id/66/346/216',
'https://picsum.photos/id/67/346/216',
'https://picsum.photos/id/68/346/216',
]);
const punishImageList = ref([]);
const paymentImagesList = ref([]);
const agreeImageList = ref([]);
const checkoutImageList = ref([]);
const props = defineProps({
id: String
});
watch(
() => props.id,
(newVal, oldVal) => {
getCaseHandlingDetail()
},
);
onMounted(() => {
getCaseHandlingDetail();
});
async function getCaseHandlingDetail() {
const data = await getDroneCaseDeal({ caseid: props.id });
illegal.value = data.is_illegal;
caseHandlingData.value = data.info;
imageList.value = [];
if (data.pic_info_list.length > 0) {
data.pic_info_list.forEach((item) => {
item.s_filePath = BASE_IMAGE_URL + '/S_' + item.filePath;
item.filePath = BASE_IMAGE_URL + '/' + item.filePath;
imageList.value.push(item);
});
}
afterImageList.value = [];
if (data.after_pic_list.length > 0) {
data.after_pic_list.forEach((item) => {
item.s_filePath = BASE_IMAGE_URL + '/S_' + item.filePath;
item.filePath = BASE_IMAGE_URL + '/' + item.filePath;
afterImageList.value.push(item);
});
}
//
evidenceFileList.value = [];
if (data.evidence_file_list.length > 0) {
data.evidence_file_list.forEach((item) => {
item.s_filePath = BASE_IMAGE_URL + '/S_' + item.filePath;
item.filePath = BASE_IMAGE_URL + '/' + item.filePath;
evidenceFileList.value.push(item);
});
}
//
if (data.punish_pic_list.length > 0) {
punishImageList.value = this.handleImageArray(data.punish_pic_list);
}
//
if (data.payment_pic_list.length > 0) {
paymentImagesList.value = this.handleImageArray(data.payment_pic_list);
}
//
if (data.agree_checkout_pic_list.length > 0) {
agreeImageList.value = this.handleImageArray(data.agree_checkout_pic_list);
}
//
if (data.checkout_pic_list.length > 0) {
checkoutImageList.value = this.handleImageArray(data.checkout_pic_list);
}
//
if (data.boundary_pic_list.length > 0) {
boundaryImageList.value = this.handleImageArray(data.boundary_pic_list);
}
playerOptions.value = [];
if (data.video_list.length > 0) {
data.video_list.forEach((item, index) => {
let options = {
playbackRates: [0.5, 1.0, 1.5, 2.0], //
autoplay: false, //true,
muted: false, //
loop: false, //
preload: 'auto', // <video>auto,
language: 'zh-CN',
aspectRatio: '16:9', // 使 - "16:9""4:3"
fluid: true, // trueVideo.js player
sources: [
{
type: '',
src: BASE_IMAGE_URL + '/' + item, //url
},
],
poster: '', //
// width: document.documentElement.clientWidth,
notSupportedMessage: '此视频暂无法播放,请稍后再试', //Video.js
controlBar: {
timeDivider: true, //
durationDisplay: true, //
remainingTimeDisplay: false, //
fullscreenToggle: true, //
},
};
playerOptions.value.push(options);
});
}
}
</script>
<style lang="less" scoped>
::v-deep .ant-image .ant-image-img {
width: 85px;
margin-bottom: 10px;
}
</style>

View File

@ -0,0 +1,177 @@
<template>
<div class="interpret-box">
<a-form
ref="formRef"
:rules="data.rules"
:model="ruleForm"
:label-col="labelCol"
:wrapper-col="wrapperCol"
>
<a-form-item label="案件编号">
<a-input v-model:value="ruleForm.case_no" disabled />
</a-form-item>
<a-form-item label="案件详情">
<a-input v-model:value="ruleForm.case_description" placeholder="请输入" />
</a-form-item>
<a-form-item label="违规类型" name="typeid">
<a-select
v-model:value="ruleForm.typeid"
placeholder="请选择"
:options="data.violationOptions"
:field-names="{ label: 'itemName', value: 'itemValue' }"
>
</a-select>
</a-form-item>
<a-form-item label="图斑面积">
<a-input v-model:value="ruleForm.area" placeholder="请输入" />
</a-form-item>
<a-form-item label="县/区">
<a-select
v-model:value="ruleForm.countyid"
placeholder="请选择"
:options="data.cityDatas"
:field-names="{ label: 'itemName', value: 'itemValue' }"
>
</a-select>
</a-form-item>
<a-form-item label="乡镇/街道">
<a-select
v-model:value="ruleForm.streetid"
placeholder="请选择"
:options="data.streetDatas"
:field-names="{ label: 'itemName', value: 'itemValue' }"
>
</a-select>
</a-form-item>
<a-form-item label="社区/村">
<a-select
v-model:value="ruleForm.communityname"
placeholder="请选择"
:options="data.communtDatas"
:field-names="{ label: 'itemName', value: 'itemValue' }"
>
</a-select>
</a-form-item>
<a-form-item label="详细地址">
<a-input v-model:value="ruleForm.address" placeholder="请输入" />
</a-form-item>
<a-form-item label="备注">
<a-textarea
v-model:value="ruleForm.description"
placeholder="备注"
:auto-size="{ minRows: 1, maxRows: 3 }"
/>
</a-form-item>
<a-form-item label="现场照片">
<ImageUpload :maxSize="20" v-model:file-list="fileList" :maxNumber="10" @change="handleChange" :api="uploadApi" />
</a-form-item>
</a-form>
</div>
</template>
<script lang="ts" setup>
import { ImageUpload } from '@/components/Upload';
import { ref, reactive , watch} from 'vue';
import {uploadApi} from '@/api/sys/upload'
const formRef = ref();
const labelCol = { span: 7 };
const wrapperCol = { span: 17 };
const ruleForm = ref({});
const fileList = ref([]);
const data = reactive({
violationOptions: [],
communtDatas: [],
streetDatas: [],
cityDatas: [],
rules: {
typeid: [{ required: true, message: '请选择违规类型' }],
},
});
const props = defineProps({
interpretData: {
type: Object,
default: () => {
return {};
},
},
});
console.log(props.interpretData);
ruleForm.value = props.interpretData;
watch(
() => props.interpretData,
(newVal, oldVal) => {
ruleForm.value = newVal;
},
);
const handleChange = (info: UploadChangeParam) => {
if (info.file.status === 'uploading') {
loading.value = true;
return;
}
if (info.file.status === 'done') {
// Get this url from response in real world.
getBase64(info.file.originFileObj, (base64Url: string) => {
imageUrl.value = base64Url;
loading.value = false;
});
}
if (info.file.status === 'error') {
loading.value = false;
message.error('upload error');
}
};
//
async function getNoBuildStatus() {
getMethodCommon('/Categorys/LoadList', { typeid: 'DRONE_CASE_TYPE' }).then((res) => {
this.violationOptions = res.result;
});
}
//
async function getAreasData() {
getMethodCommon('/Orgs/LoadOrgList', { name: '费县' }).then((res) => {
this.areasDatas = res.result;
res.result.forEach((item) => {
if (item.parentName == '临沂市') {
this.cityDatas.push(item);
}
if (item.parentId == this.ruleForm.countyid) {
this.streetDatas.push(item);
}
if (item.parentId == this.ruleForm.streetid) {
this.communtDatas.push(item);
}
});
});
}
async function validateForm() {
let res = await formRef.value
.validate()
.then((values) => {
return true;
})
.catch((error) => {
return false;
});
return res;
}
</script>
<style lang="less" scoped>
.interpret-box {
width: 100%;
.ant-form {
padding: 20px;
display: flex;
flex-direction: column;
.ant-form-item {
float: left;
margin-bottom: 10px;
margin-left: 4px;
width: 100%;
button {
margin-right: 10px;
}
}
}
}
</style>

View File

@ -0,0 +1,103 @@
<template>
<div class="w-full">
<MapboxMaps :mapOptions="mapOptions" @map-on-load="mapOnLoad" :control="mapControl" @map-draw="handlerMapDraw" />
</div>
</template>
<script setup lang="ts">
import { ref, reactive, onMounted, watch } from 'vue';
import rodeImg from '@/assets/images/icon_fly2.png';
import MapboxMaps from '@/components/MapboxMaps/index.vue';
import { DrawingType } from '@/enums/mapEnum';
const mapControl: DrawingType[] = [DrawingType.Polygon];
const mapOptions = {
center: [117.84714891969796, 35.22152309532066],
zoom: 10,
};
const detailMap = ref();
const mapBox = ref();
const ruleForm = ref({});
const props = defineProps({
interpretData: {
type: Object,
default: () => {
return {};
},
},
});
console.log(props.interpretData);
ruleForm.value = props.interpretData;
watch(
() => props.interpretData,
(newVal, oldVal) => {
ruleForm.value = newVal;
detailMap.value.flyTo({
center: [newVal.lng, newVal.lat], //
zoom: 18, //
pitch: 0, //
});
loadDroneMarker(newVal.lng, newVal.lat);
},
);
const mapOnLoad = (map) => {
mapBox.value = map;
//
const testSource =
'http://123.132.248.154:9205/geoserver/gwc/service/tms/1.0.0/TEST_WORK_SPACE%3Alindi@EPSG:900913@pbf/{z}/{x}/{y}.pbf';
map.U.addVector('name', testSource);
map.U.addLineLayer('ffff', {
source: 'name',
'source-layer': 'lindi',
});
detailMap.value = map;
};
//
const handlerMapDraw = (type: string, data: any) => {
console.log('data::: ', data);
console.log('type::: ', type);
};
//
function loadDroneMarker(lng, lat) {
if (detailMap.value.getLayer('cat-on-building')) {
detailMap.value.removeLayer('cat-on-building');
detailMap.value.removeSource('cat-on-building');
detailMap.value.removeImage('cat');
}
detailMap.value.loadImage(rodeImg, (error, image) => {
detailMap.value.addImage('cat', image);
detailMap.value.addLayer({
id: 'cat-on-building',
source: {
type: 'geojson',
data: {
type: 'FeatureCollection',
features: [
{
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [lng, lat],
},
},
],
},
},
slot: 'top',
type: 'symbol',
layout: {
'icon-image': 'cat',
'icon-size': 0.05,
'symbol-placement': 'point',
'symbol-z-elevate': true,
},
});
});
}
</script>
<style scoped lang="less">
.w-full {
width: 100%;
position: relative;
height: 90vh;
}
</style>