ShiJiTianKongDiPingTai/src/views/demo/caseauditing/module/index.vue

600 lines
17 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>
<PageWrapper dense contentFullHeight fixedHeight contentClass="flex">
<div :class="`${prefixCls}`">
<div :class="`${prefixCls}-header`">
<div>
<a-button type="primary" :icon="h(StarOutlined)" @click="openCollenction">
{{ favoriteNum }}
</a-button>
</div>
<div class="flex">
<a-tree-select
v-if="selectOptions1.length > 0"
v-model:value="selectValues1"
show-search
style="width: 230px"
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
placeholder="查询地区"
allow-clear
:tree-data="selectOptions1"
:field-names="{
children: 'children',
value: 'id',
label: 'name',
}"
tree-node-filter-prop="name"
@change="areaChange"
/>
<a-select
ref="select"
v-model:value="is_illegal"
style="width: 150px"
class="ml-3"
allowClear
:options="selectOptions2"
placeholder="现场状况"
@change="reload1"
/>
<a-select
ref="select"
v-model:value="is_drawback"
:options="selectOptions3"
style="width: 150px"
class="ml-3"
allowClear
placeholder="新增退回"
@change="reload1"
/>
<a-input
style="width: 150px"
class="ml-3"
v-model:value="searchKey"
placeholder="请输入"
/>
<a-button class="ml-3" :icon="h(SearchOutlined)" @click="reload1">搜索</a-button>
<a-button type="success" class="ml-3" :icon="h(DownloadOutlined)">导出</a-button>
</div>
</div>
<div :class="`${prefixCls}-content`">
<div :class="`${prefixCls}-content-tabbox`">
<div :class="`${prefixCls}-content-tabbox-left`" :style="auditingVisible?'width:50%':'width:100%'">
<BasicTable @register="registerTable" v-if="!collenctionVisible">
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
label: '收藏',
color: 'warning',
onClick: () => {
handleCollention(record);
},
},
{
label: '审核',
onClick: () => {
handleAuditing(record);
},
},
]"
/>
</template>
</template>
</BasicTable>
<div :class="`${prefixCls}-content-tabbox-left-collenction`" v-if="collenctionVisible">
<div :class="`${prefixCls}-content-tabbox-left-collenction-header`">
<div> <StarOutlined /> 收藏案件 </div>
<div
:class="`${prefixCls}-content-tabbox-left-collenction-header-close`"
@click="closeCollenction"
><CloseOutlined
/></div>
</div>
<div>
<BasicTable @register="registerCollenctionTable">
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
label: '移除',
type: 'link',
color: 'warning',
onClick: () => {
handleRemoveCollention(record);
},
},
{
label: '审核',
onClick: () => {
handleAuditing(record);
},
},
]"
/>
</template>
</template>
</BasicTable>
</div>
</div>
</div>
<div :class="`${prefixCls}-content-tabbox-right`" v-if="auditingVisible">
<div :class="`${prefixCls}-content-tabbox-right-header`">
<div
:class="`${prefixCls}-content-tabbox-right-header-tabs`"
v-for="(item, index) in tabsArr"
:key="index"
>
<div
:class="tabsActiveIndex == index ? 'active' : 'tabsnormal'"
@click="tabsClick(index)"
>{{ item }}</div
>
</div>
<div :class="`${prefixCls}-content-tabbox-right-header-close`" @click="auditingClose"
><CloseOutlined
/></div>
</div>
<div :class="`${prefixCls}-content-tabbox-right-content`">
<BasicForm ref="formRef" @register="registerForm" v-show="tabsActiveIndex == 0">
<template #imgSlot>
<div
v-for="(item, num) in fileList"
:key="num"
style="
position: relative;
width: 125px;
height: 90px;
overflow: hidden;
float: left;
background: #f9f9f9;
margin-left: 6px;
margin-bottom: 6px;
"
>
<a-image :width="125" :src="item.url" />
</div>
<a-empty v-show="fileList.length <= 0">
<template #description>
<span>暂无图片</span>
</template>
</a-empty>
</template>
<template #videoSlot>
<video
width="240"
height="150"
controls
v-for="(item, index) in videoList"
:key="index"
>
<source :src="item" type="video/mp4" />
您的浏览器不支持Video标签。
</video>
<a-empty v-show="videoList.length <= 0">
<template #description>
<span>暂无视频</span>
</template>
</a-empty>
</template>
</BasicForm>
<HandleCase :id="selectRowDetail.id" v-show="tabsActiveIndex == 1" />
</div>
<div :class="`${prefixCls}-content-tabbox-right-footer`">
<a-input class="ml-3" v-model:value="caseBackReason" placeholder="案件退回原因" />
<a-button type="error" class="ml-3" @click="handleCaseBack"> 退回 </a-button>
<a-button type="primary" class="ml-3" @click="handlePassForm"> 通过 </a-button>
</div>
</div>
</div>
<div :class="`${prefixCls}-content-mapbox`">
<MapDetail :ruleForm="selectRowDetail"></MapDetail>
</div>
</div>
</div>
</PageWrapper>
</template>
<script lang="ts" setup>
import { onMounted, ref, h } from 'vue';
import {
SearchOutlined,
StarOutlined,
DownloadOutlined,
CloseOutlined,
} from '@ant-design/icons-vue';
import HandleCase from './HandleCase.vue';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { BasicForm, useForm } from '@/components/Form';
import { PageWrapper } from '@/components/Page';
import {
getTableDataList,
addCaseCollection,
delCaseCollection,
getCollectionCaseList,
getUserInfoData,
getCaseDealDetail,
getCaseList,
caseAudiSteps,
caseBackSteps,
} from '@/api/caseauditing/index';
import { getDeptList } from '@/api/demo/system';
import { columns, formSchema } from './index.data';
import { useMessage } from '@/hooks/web/useMessage';
import { MapDetail } from '@/views/demo/summaryverification/index';
const { createMessage } = useMessage();
const favoriteNum: any = ref();
const tabsActiveIndex: any = ref('0');
const tabsArr: any = ref(['案件信息', '核查办理']);
const auditingVisible: any = ref(false);
const collenctionVisible: any = ref(false);
const collenctionList: any = ref([]);
const selectRowDetail: any = ref({});
const caseBackReason: any = ref();
const selectValues1: any = ref();
const selectOptions1: any = ref([]);
const videoList: any = ref([]);
const searchKey: any = ref();
const countyid: any = ref();
const streetid: any = ref();
const communityid: any = ref();
const is_illegal: any = ref();
const selectOptions2: any = ref([
{ label: '合法', value: 0 },
{ label: '违法', value: 1 },
{ label: '伪变化', value: 2 },
]);
const is_drawback: any = ref();
const selectOptions3: any = ref([
{ label: '新增', value: 0 },
{ label: '退回', value: 1 },
]);
const fileList: any = ref([]);
const [registerTable, { reload: reload1 }] = useTable({
title: '',
api: getTableDataList,
columns,
rowKey: 'id',
formConfig: {
labelWidth: 120,
},
isTreeTable: true,
striped: false,
useSearchForm: false,
showTableSetting: false,
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 200,
title: '操作',
dataIndex: 'action',
},
beforeFetch: (data) => {
let temp = {
page: data.page,
limit: data.limit,
is_illegal: is_illegal.value,
is_drawback: is_drawback.value,
countyid: countyid.value,
key: searchKey.value,
};
return temp;
},
handleSearchInfoFn(info) {
return info;
},
});
const [registerCollenctionTable, { reload: reload2 }] = useTable({
title: '',
api: getCollectionCaseList,
columns,
rowKey: 'id',
formConfig: {
labelWidth: 120,
},
isTreeTable: true,
striped: false,
useSearchForm: false,
showTableSetting: false,
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 200,
title: '操作',
dataIndex: 'action',
},
handleSearchInfoFn(info) {
return info;
},
});
const [registerForm, { setFieldsValue }] = useForm({
labelWidth: 120,
labelAlign: 'right',
schemas: formSchema,
showActionButtonGroup: false,
baseColProps: { lg: 24, md: 24 },
});
function areaChange(items) {
countyid.value = null;
streetid.value = null;
communityid.value = null;
countyid.value = items;
// if (items && JSON.stringify(items).length == 6) {
// countyid.value = items;
// }
// if (items && JSON.stringify(items).length == 9) {
// streetid.value = items;
// }
// if (items && JSON.stringify(items).length == 12) {
// communityid.value = items;
// }
reload1();
}
function handlePassForm() {
const param = {
id: selectRowDetail.value.id,
};
caseAudiSteps(param).then((res) => {
if (res) {
createMessage.success('审核成功');
setTimeout(() => {
reload1();
reload2();
}, 500);
}
});
}
function handleCaseBack() {
if (!caseBackReason.value) {
createMessage.error('退回原因不能为空');
return;
}
const param = {
id: selectRowDetail.value.id,
drawbackReason: caseBackReason.value,
};
caseBackSteps(param).then((res) => {
if (res) {
createMessage.success('操作成功');
} else {
createMessage.error('此案件未办理,无需退回。');
}
});
}
function handleAuditing(record) {
const formData = record;
caseBackReason.value = null;
formData.homeAddress =
record.countyname + record.streetname + record.communityname + record.address;
formData.lngLat = record.lng + ' , ' + record.lat;
selectRowDetail.value = formData;
auditingVisible.value = true;
setTimeout(() => {
setFieldsValue(formData);
}, 100);
const param = {
caseid: record.id,
};
getCaseDealDetail(param).then((res) => {
fileList.value = [];
videoList.value = [];
if (res.pic_info_list.length > 0) {
res.pic_info_list.forEach((item) => {
fileList.value.push({
url: 'http://60.213.14.14:6070/' + item.filePath,
});
});
}
if (res.video_list.length > 0) {
res.video_list.forEach((item) => {
videoList.value.push('http://60.213.14.14:6070/' + item);
});
} else {
if (res.remove_video_list.length > 0) {
res.remove_video_list.forEach((item) => {
videoList.value.push('http://60.213.14.14:6070/' + item);
});
}
}
});
}
function handleCollention(row) {
getUserInfoData().then((res) => {
let param = {
caseNo: row.case_no,
favoriteUserId: res.user.Id,
};
addCaseCollection(param).then((rel) => {
if (rel) {
createMessage.success('收藏成功');
getCollentionLength();
reload2();
getCaseCollList();
}
});
});
}
function handleRemoveCollention(row) {
const arr = collenctionList.value.filter((item) => {
return item.caseNo == row.case_no;
});
let param = [arr[0].id];
delCaseCollection(param).then((res) => {
if (res) {
createMessage.success('已从收藏夹中移除');
getCollentionLength();
reload2();
}
});
}
function openCollenction() {
collenctionVisible.value = true;
}
function closeCollenction() {
collenctionVisible.value = false;
reload1();
}
function tabsClick(index: any) {
tabsActiveIndex.value = index;
}
function auditingClose() {
auditingVisible.value = false;
}
function getCollentionLength() {
getCollectionCaseList().then((res) => {
favoriteNum.value = res.total;
});
}
function getOrgList() {
getDeptList().then((res) => {
res.forEach((item) => {
if (item.id == '371300') {
selectOptions1.value = item.children;
}
});
});
}
function getCaseCollList() {
getUserInfoData().then((res) => {
getCaseList({ uid: res.user.Id }).then((rel) => {
collenctionList.value = rel;
});
});
}
onMounted(() => {
getCollentionLength();
getCaseCollList();
getOrgList();
});
const prefixCls = 'form-box';
</script>
<style lang="less" scoped>
.form-box {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
&-header {
width: 100%;
padding: 0 10px;
height: 60px;
background: #f8f8f8;
display: flex;
justify-content: space-between;
align-items: center;
}
&-content {
width: 100%;
height: calc(100% - 60px);
display: flex;
&-tabbox {
width: 70%;
display: flex;
justify-content: space-between;
&-left {
border: 1px solid #eee;
&-collenction {
display: flex;
flex-direction: column;
height: 100%;
&-header {
padding: 0 10px;
height: 50px;
overflow: auto;
border-bottom: 1px solid #eee;
display: flex;
background: #fff;
align-items: center;
justify-content: space-between;
&-close {
cursor: pointer;
}
}
}
}
&-right {
width:50%;
margin-left: 15px;
margin-bottom: 15px;
border: 1px solid #eee;
background: #fff;
&-header {
position: relative;
padding: 0 10px;
height: 50px;
overflow: auto;
border-bottom: 1px solid #eee;
display: flex;
&-tabs {
cursor: pointer;
margin: 0 10px;
.active {
color: #409eff;
height: 100%;
display: flex;
align-items: center;
}
.tabsnormal {
height: 100%;
display: flex;
align-items: center;
&:hover {
color: #409eff;
border-bottom: 1px solid #409eff;
}
}
}
&-close {
position: absolute;
right: 20px;
top: 50%;
transform: translate(0, -50%);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
}
}
&-content {
height: calc(100% - 140px);
overflow: auto;
padding: 15px 20px 15px 10px;
margin: 10px 0;
}
&-footer {
height: 60px;
border-top: 1px solid #eee;
display: flex;
align-items: center;
padding-right: 15px;
}
}
}
&-mapbox {
width: calc(30% - 20px);
margin: 0 15px 15px 15px;
border: 1px solid #eee;
}
}
}
</style>