CaiYuanYiTiHua/src/views/demo/report/caseview/index.vue

436 lines
15 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="case-view">
<div class="case-view_step">
<a-steps v-model:current="current" type="navigation" size="small" :style="stepStyle">
<a-step
v-for="(item, index) in flowLog"
:key="index"
:title="item.name"
:status="item.state"
:disabled="item.status == 0 ? true : false"
/>
</a-steps>
</div>
<div class="case-view_content">
<div class="file-box w-1/2 xl:w-1/2" v-if="caseHandleInfo">
<CollapseContainer
title="【图斑下发信息】"
:canExpan="false"
v-if="current == 0 || current == 4"
>
<Issue :data="detailData"></Issue>
</CollapseContainer>
<CollapseContainer
title="【图斑核查信息】"
:canExpan="false"
v-if="current == 1 || current == 4"
>
<Inspect
:data="caseHandleInfo"
:playerOptions="playerOptions"
:threadImageList="threadImageList"
></Inspect>
</CollapseContainer>
<CollapseContainer
title="【图斑办理信息-合法举证】"
:canExpan="false"
v-if="
(caseHandleInfo.is_illegal == '合法' && current == 2) ||
(caseHandleInfo.is_illegal == '合法' && current == 4)
"
>
<Evidence
:data="caseHandleInfo"
:evidenceFileList="evidenceFileList"
:boundaryImageList="boundaryImageList"
></Evidence>
</CollapseContainer>
<CollapseContainer
title="【图斑办理信息-伪变化】"
:canExpan="false"
v-if="
(caseHandleInfo.is_illegal == '伪变化' && current == 2) ||
(caseHandleInfo.is_illegal == '伪变化' && current == 4)
"
>
<div> 伪变化没有图斑办理信息 </div>
</CollapseContainer>
<CollapseContainer
title="【图斑办理信息-违法-拟拆除】"
:canExpan="false"
v-if="
(caseHandleInfo.is_illegal == '违法' &&
caseHandleInfo.info.measure_name == '拟拆除' &&
current == 2) ||
(caseHandleInfo.is_illegal == '违法' &&
caseHandleInfo.info.measure_name == '拟拆除' &&
current == 4)
"
>
<Dismantle :data="caseHandleInfo" :videoOptions="videoOptions"></Dismantle>
</CollapseContainer>
<CollapseContainer
title="【图斑办理信息-违法-查处】"
:canExpan="false"
v-if="
(caseHandleInfo.is_illegal == '违法' &&
caseHandleInfo.info.measure_name == '查处' &&
current == 2) ||
(caseHandleInfo.is_illegal == '违法' &&
caseHandleInfo.info.measure_name == '查处' &&
current == 4)
"
>
<Investigate
:data="caseHandleInfo"
:paymentImageList="paymentImageList"
:punishImageList="punishImageList"
></Investigate>
</CollapseContainer>
<CollapseContainer
title="【图斑办理信息-违法-拟完善手续】"
:canExpan="false"
v-if="
(caseHandleInfo.is_illegal == '违法' &&
caseHandleInfo.info.measure_name == '拟完善手续' &&
current == 2) ||
(caseHandleInfo.is_illegal == '违法' &&
caseHandleInfo.info.measure_name == '拟完善手续' &&
current == 4)
"
>
<Procedure
:data="caseHandleInfo"
:agreeImageList="agreeImageList"
:checkoutImageList="checkoutImageList"
:boundaryImageList="boundaryImageList"
></Procedure>
</CollapseContainer>
<CollapseContainer
title="【图斑审核信息】"
:canExpan="false"
v-if="current == 3 || current == 4"
>
<Audit :data="flowLog[3]"></Audit>
</CollapseContainer>
<CollapseContainer
title="【图斑退回描述】"
:canExpan="false"
v-if="detailData.is_drawback == 1"
>
<a-descriptions bordered :column="2" size="small" :labelStyle="labelStyle">
<a-descriptions-item label="退回描述">
{{ detailData.drawback_description }}
</a-descriptions-item>
</a-descriptions>
</CollapseContainer>
</div>
<CollapseContainer title="地图位置" :canExpan="false" class="map-box ml-1 w-1/2 xl:w-1/2">
<MapDetail :ruleForm="detailData" :isOnce="true"></MapDetail>
</CollapseContainer>
</div>
</div>
</template>
<script lang="ts" setup>
// 已归档 202205020912205393
// 拟拆除 202404181541067344
import { ref, onMounted, reactive, watch } from 'vue';
import { getCaseFlowLog, getCaseInfo, getDroneCaseDeal } from '@/api/monitor/index';
import { fileListModel, fileList } from '@/api/monitor/model/index';
import { CollapseContainer } from '@/components/Container';
import {
Issue,
Inspect,
Audit,
Dismantle,
MapDetail,
Evidence,
Investigate,
Procedure,
} from '../index';
const BASE_IMAGE_URL = ref('http://192.168.104:9011');
const current = ref<number>(0);
const stepStyle = ref({
marginBottom: '60px',
boxShadow: '0px -1px 0 0 #e8e8e8 inset',
});
const labelStyle = ref({
width: '100px',
});
const props = defineProps({
caseId: String,
});
console.log(props);
watch(
() => props.caseId,
(newVal, oldVal) => {
console.log(newVal);
getCaseFlowLogData();
loadDetailCaseInfo();
getCaseHandleInfo();
},
);
const detailData = ref();
const caseHandleInfo = ref();
const playerOptions = ref();
//现场照片
const threadImageList = ref<fileListModel>([]);
// 整改后、处理后照片
const threadAfterImageList = ref<any>([]);
// 视频
const videoOptions = ref();
//合法举证材料列表
const evidenceFileList = ref<fileListModel>([]);
// 勘测定界图
const boundaryImageList = ref<fileListModel>([]);
//处罚通知书照片
const punishImageList = ref<fileListModel>([]);
//交罚款通知书照片
const paymentImageList = ref<fileListModel>([]);
//政府同意完善手续证明照片
const agreeImageList = ref<fileListModel>([]);
//办理手续证明照片
const checkoutImageList = ref<fileListModel>([]);
const flowLog = ref();
// 获取步骤条数据
async function getCaseFlowLogData() {
current.value = 0;
const data = await getCaseFlowLog({ id: props.caseId });
flowLog.value = data;
if (flowLog.value.length == 4 && flowLog.value[1].status == 1) {
let obj = {
name: '伪变化',
status: 1,
time: '',
state: 'finish',
user_name: '',
};
flowLog.value.splice(2, 0, obj);
}
current.value = 0;
flowLog.value.forEach((item, index) => {
current.value = current.value + item.status;
if (flowLog.value[index].status == 1) {
flowLog.value[index].state = 'finish';
} else {
flowLog.value[index].state = 'wait';
}
});
if (current.value != 0) {
current.value--;
}
}
// 获取详情
async function loadDetailCaseInfo() {
const data = await getCaseInfo({ id: props.caseId });
console.log(data);
detailData.value = data;
}
// 获取处理详情
async function getCaseHandleInfo() {
const data = await getDroneCaseDeal({ caseid: props.caseId });
console.log(data);
caseHandleInfo.value = data;
if (caseHandleInfo.value.is_illegal == 0) {
caseHandleInfo.value.is_illegal = '合法';
} else if (caseHandleInfo.value.is_illegal == 1) {
caseHandleInfo.value.is_illegal = '违法';
} else if (caseHandleInfo.value.is_illegal == 2) {
caseHandleInfo.value.is_illegal = '伪变化';
}
// 视频
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, // 当true时Video.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);
});
}
// 现场照片
if (data.pic_info_list.length > 0) {
data.pic_info_list.forEach((item) => {
threadImageList.value.push(item.filePath);
});
for (let i = 0; i < threadImageList.value.length; i++) {
let obj = {
filePath: BASE_IMAGE_URL + '/' + threadImageList.value[i],
s_filePath: BASE_IMAGE_URL + '/S_' + threadImageList.value[i],
};
threadImageList.value[i] = obj;
}
}
// 处理后照片 整改后照片 恢复后照片
if (data.after_pic_list.length > 0) {
threadAfterImageList.value = [];
data.after_pic_list.forEach((item: fileList) => {
threadAfterImageList.value.push(BASE_IMAGE_URL + '/S_' + item.filePath);
});
}
// 处理后视频
videoOptions.value = [];
if (data.remove_video_list.length > 0) {
videoOptions.value = [];
data.remove_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, // 当true时Video.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, //全屏按钮
},
};
videoOptions.value.push(options);
});
}
// 合法 - 举证材料合法文件 evidence_file_list
if (data.evidence_file_list.length > 0) {
evidenceFileList.value = [];
data.evidence_file_list.forEach((item: fileList) => {
let obj = {
filePath: BASE_IMAGE_URL + '/' + item.filePath,
s_filePath: BASE_IMAGE_URL + '/' + item.filePath,
};
evidenceFileList.value.push(obj);
});
}
if (data.boundary_pic_list.length > 0) {
boundaryImageList.value = [];
data.boundary_pic_list.forEach((item) => {
let obj = {
filePath: BASE_IMAGE_URL + '/' + item,
s_filePath: BASE_IMAGE_URL + '/' + item,
};
boundaryImageList.value.push(obj);
});
}
// 违法 查处 - 处罚通知书 punish_pic_list
if (data.punish_pic_list.length > 0) {
punishImageList.value = [];
data.punish_pic_list.forEach((item) => {
let obj = {
filePath: BASE_IMAGE_URL + '/' + item,
s_filePath: BASE_IMAGE_URL + '/S_' + item,
};
punishImageList.value.push(obj);
});
}
// 违法 查处 - 交款通知书 payment_pic_list
if (data.payment_pic_list.length > 0) {
paymentImageList.value = [];
data.payment_pic_list.forEach((item) => {
let obj = {
filePath: BASE_IMAGE_URL + '/' + item,
s_filePath: BASE_IMAGE_URL + '/S_' + item,
};
paymentImageList.value.push(obj);
});
}
// 违法 完善手续 - 政府同意完善手续证明 agree_checkout_pic_list
if (data.agree_checkout_pic_list.length > 0) {
agreeImageList.value = [];
data.agree_checkout_pic_list.forEach((item) => {
let obj = {
filePath: BASE_IMAGE_URL + '/' + item,
s_filePath: BASE_IMAGE_URL + '/S_' + item,
};
agreeImageList.value.push(obj);
});
}
// 违法 完善手续 - 办理手续 checkout_pic_list
if (data.checkout_pic_list.length > 0) {
checkoutImageList.value = [];
data.checkout_pic_list.forEach((item) => {
let obj = {
filePath: BASE_IMAGE_URL + '/' + item,
s_filePath: BASE_IMAGE_URL + '/S_' + item,
};
checkoutImageList.value.push(obj);
});
}
}
onMounted(() => {
getCaseFlowLogData();
loadDetailCaseInfo();
getCaseHandleInfo();
});
</script>
<style lang="less" scoped>
.case-view {
padding: 20px 32px;
background-color: @component-background;
&__step {
padding: 24px 40px;
background-color: @app-content-background;
}
&_content {
display: flex;
height: 65vh;
.file-box {
overflow: auto;
}
}
}
.map-box {
height: 100%;
}
</style>