矿产专题 工作管理 demo
parent
513d656798
commit
0e5f0e6cb6
@ -0,0 +1,33 @@
|
|||||||
|
<template>
|
||||||
|
<div class="pagination-div">
|
||||||
|
<a-pagination
|
||||||
|
size="small"
|
||||||
|
v-model:pageSize="props.pageData.limit"
|
||||||
|
v-model:current="props.pageData.page"
|
||||||
|
:total="props.total"
|
||||||
|
show-size-changer
|
||||||
|
show-quick-jumper
|
||||||
|
@change="changePage" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { defineProps, defineEmits } from "vue"
|
||||||
|
|
||||||
|
const props = defineProps(["pageData","total"])
|
||||||
|
const emits = defineEmits(["changePageData"])
|
||||||
|
|
||||||
|
const changePage = (page, pageSize) => {
|
||||||
|
console.log(page,pageSize)
|
||||||
|
emits('changePageData',page,pageSize)
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.pagination-div{
|
||||||
|
height: 60px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,192 @@
|
|||||||
|
<template>
|
||||||
|
<div class="screen-div">
|
||||||
|
<div class="screen-item" style="margin-right:20px;margin-bottom:12px;">
|
||||||
|
<div class="screen-item-label">年份</div>
|
||||||
|
<a-select
|
||||||
|
allowClear
|
||||||
|
style="width:99px;"
|
||||||
|
v-model:value="props.screenData.year"
|
||||||
|
:options="yearOptions"
|
||||||
|
@change="(value) => emits('screenDataChange',value,'year')"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="screen-item" style="margin-right:17px;margin-bottom:12px;">
|
||||||
|
<div class="screen-item-label" style="margin-right: 11px;">图斑来源</div>
|
||||||
|
<a-select
|
||||||
|
allowClear
|
||||||
|
style="width:144px;"
|
||||||
|
v-model:value="props.screenData.tubanlaiyuan"
|
||||||
|
:options="polygonSourceOptions"
|
||||||
|
@change="(value) => emits('screenDataChange',value,'tubanlaiyuan')"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="screen-item" style="margin-bottom:12px;">
|
||||||
|
<div class="screen-item-label">县区</div>
|
||||||
|
<a-select
|
||||||
|
allowClear
|
||||||
|
style="width:120px;"
|
||||||
|
v-model:value="props.screenData.countyid"
|
||||||
|
:options="countiesOptions"
|
||||||
|
@change="(value) => changeCounties(value)"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="screen-item" style="margin-right: 13px;margin-bottom:12px;">
|
||||||
|
<div class="screen-item-label">乡镇</div>
|
||||||
|
<a-select
|
||||||
|
allowClear
|
||||||
|
style="width:120px;"
|
||||||
|
v-model:value="props.screenData.streetId"
|
||||||
|
:options="streetsOptions"
|
||||||
|
@change="(value) => emits('screenDataChange',value,'streetId')"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="screen-item" style="margin-bottom:12px;">
|
||||||
|
<div class="screen-item-label">处理状态</div>
|
||||||
|
<a-select
|
||||||
|
allowClear
|
||||||
|
mode="multiple"
|
||||||
|
style="width:312px;"
|
||||||
|
v-model:value="props.screenData.nowStatus"
|
||||||
|
:options="statusOptions"
|
||||||
|
:max-tag-count="1"
|
||||||
|
@change="(value) => emits('screenDataChange',value,'nowStatus')"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="screen-item" style="margin-right: 13px;margin-bottom:12px;">
|
||||||
|
<div class="screen-item-label">图斑类型</div>
|
||||||
|
<a-select
|
||||||
|
allowClear
|
||||||
|
style="width: 97px"
|
||||||
|
:options="polygonTypeOptions"
|
||||||
|
v-model:value="props.screenData.typename"
|
||||||
|
@change="(value) => emits('screenDataChange',value,'typename')"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="screen-item" style="margin-bottom:12px;">
|
||||||
|
<div class="screen-item-label" style="margin-right: 10px;">下发时间</div>
|
||||||
|
<a-range-picker
|
||||||
|
:format="'YYYY-MM-DD'"
|
||||||
|
allowClear
|
||||||
|
style="width: 300px;"
|
||||||
|
class="item-time-select"
|
||||||
|
v-model:value="props.screenData.time"
|
||||||
|
@change="(value) => emits('screenDataChange',value,'time')"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="screen-item" style="margin-right: 14px;">
|
||||||
|
<a-input
|
||||||
|
allowClear
|
||||||
|
placeholder="请输入图斑编号"
|
||||||
|
class="item-input"
|
||||||
|
v-model:value="props.screenData.mapNo"
|
||||||
|
@change="(value) => emits('screenDataChange',value.target.value,'mapNo')"
|
||||||
|
style="width:404px;"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="screen-item" style="margin-left: 10px;cursor: pointer;">
|
||||||
|
<a-button
|
||||||
|
class="item-button"
|
||||||
|
type="primary"
|
||||||
|
:icon="h(SearchOutlined)"
|
||||||
|
@click="emits('search')">查询</a-button>
|
||||||
|
<Icon style="font-size: 25px;margin-left: 10px;" icon="streamline:interface-time-reset-time-clock-reset-stopwatch-circle-measure-loading" @click="emits('resetScreenData')" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { defineProps, defineEmits, ref, h } from "vue"
|
||||||
|
import { SearchOutlined } from "@ant-design/icons-vue"
|
||||||
|
import Icon from '@/components/Icon/Icon.vue';
|
||||||
|
import { yearOptions } from '@/utils/global'
|
||||||
|
import { polygonSourceOptions, polygonTypeOptions, countiesOptions, statusOptions } from '@/components/illegalmining/util'
|
||||||
|
import { getChildrenTree } from '@/api/demo/system';
|
||||||
|
|
||||||
|
const props = defineProps(["screenData"])
|
||||||
|
const emits = defineEmits(["screenDataChange","search","resetScreenData"])
|
||||||
|
|
||||||
|
const streetsOptions = ref([])
|
||||||
|
|
||||||
|
const changeCounties = (value) => {
|
||||||
|
emits('screenDataChange',value,'countyid')
|
||||||
|
emits('screenDataChange','','streetId')
|
||||||
|
if(value){
|
||||||
|
getChildrenTree({ parentId: value }).then(res => {
|
||||||
|
let data = res
|
||||||
|
streetsOptions.value = data.map(item => {
|
||||||
|
return {
|
||||||
|
label: item.name,
|
||||||
|
value: item.id
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.screen-div{
|
||||||
|
padding: 22px 12px 20px 13px;
|
||||||
|
display: flex;
|
||||||
|
width:590px;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
.screen-item{
|
||||||
|
display: flex;
|
||||||
|
height: 39px;
|
||||||
|
.screen-item-label{
|
||||||
|
font-family: Alibaba PuHuiTi;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 17px;
|
||||||
|
color: #000000;
|
||||||
|
line-height: 30px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-right: 9px;
|
||||||
|
}
|
||||||
|
:deep(.ant-select-selector){
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-family: HarmonyOS Sans;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 19px;
|
||||||
|
color: #000000;
|
||||||
|
line-height: 30px;
|
||||||
|
height: 39px;
|
||||||
|
box-shadow: 2px 3px 3px 1px rgba(13,13,13,0.05);
|
||||||
|
}
|
||||||
|
.item-input{
|
||||||
|
width:373px;
|
||||||
|
font-family: Alibaba PuHuiTi;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 17px;
|
||||||
|
color: #000000;
|
||||||
|
line-height: 30px;
|
||||||
|
box-shadow: 2px 3px 3px 1px rgba(13,13,13,0.05);
|
||||||
|
}
|
||||||
|
.item-time-select{
|
||||||
|
box-shadow: 2px 3px 3px 1px rgba(13,13,13,0.05);
|
||||||
|
:deep(input){
|
||||||
|
font-family: HarmonyOS Sans;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 15px;
|
||||||
|
color: #000000;
|
||||||
|
line-height: 30px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.item-button{
|
||||||
|
font-family: Alibaba PuHuiTi;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 19px;
|
||||||
|
color: #FFFFFF;
|
||||||
|
line-height: 30px;
|
||||||
|
height:39px;
|
||||||
|
width: 97px;
|
||||||
|
background: #086DEC;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,307 @@
|
|||||||
|
<template>
|
||||||
|
<div class="data-list-div" style="padding-top: 1px;">
|
||||||
|
<div v-for="(item, index) in props.dataList" :key="index" class="data-list-item">
|
||||||
|
<div class="back-box" v-if="showDrawBack(item)">{{ drawBackSpan(item) }}</div>
|
||||||
|
<div class="data-list-layout-div">
|
||||||
|
<div class="data-list-title-div">
|
||||||
|
<img src="/positioning.png" class="map-mark" style="cursor:pointer;" @click="locationFun(item)"/>
|
||||||
|
<div class="label-div">
|
||||||
|
<div class="item-label">{{item.countyname}}</div>
|
||||||
|
<div class="item-sub-label">
|
||||||
|
<span style="margin-right:12px;">{{item.streetname}}</span>
|
||||||
|
<span>{{item.caseno}}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="item-mark" v-if="item.isbuildname">{{item.isbuildname}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="data-item-type-div" style="cursor:pointer;" @click="goAudit(item)">
|
||||||
|
{{item.unitname}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="data-list-info-div">
|
||||||
|
<div class="info-layout-div">
|
||||||
|
<div class="info-item" style="width: 130px;">
|
||||||
|
<div class="info-label">总面积</div>
|
||||||
|
<div class="info-data" :title="dataProcessing(item.area)">{{dataProcessing(item.area)}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="info-item" style="width: 130px;">
|
||||||
|
<div class="info-label">违法</div>
|
||||||
|
<div class="info-data" :title="dataProcessing(item.nongyongdiarea)">{{dataProcessing(item.nongyongdiarea)}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="info-item" style="width: 130px;">
|
||||||
|
<div class="info-label">耕地</div>
|
||||||
|
<div class="info-data" :title="dataProcessing(item.gengdiarea)">{{dataProcessing(item.gengdiarea)}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="info-layout-div">
|
||||||
|
<div>
|
||||||
|
<img src="@/assets/images/tiankongdi/collect-active.png" class="img-box" @click="collectItem(item)" v-if="item.fid"/>
|
||||||
|
<img src="@/assets/images/tiankongdi/collect.png" class="img-box" @click="collectItem(item)" v-else/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a-modal
|
||||||
|
width="100%"
|
||||||
|
wrap-class-name="full-modal"
|
||||||
|
v-model:open="auditOpen"
|
||||||
|
title="接收办理"
|
||||||
|
footer=""
|
||||||
|
:destroyOnClose="true"
|
||||||
|
>
|
||||||
|
<template #footer> </template>
|
||||||
|
<div class="handoff">
|
||||||
|
<a-button
|
||||||
|
type="primary"
|
||||||
|
style="margin-right: 25px;"
|
||||||
|
@click="prevData"
|
||||||
|
>上一条</a-button>
|
||||||
|
<a-button
|
||||||
|
type="primary"
|
||||||
|
@click="nextData"
|
||||||
|
>下一条</a-button>
|
||||||
|
</div>
|
||||||
|
<Audit
|
||||||
|
v-if="handoffShow"
|
||||||
|
ref="posRef"
|
||||||
|
:processId="processId"
|
||||||
|
:taskId="taskId"
|
||||||
|
:isRead="isRead"
|
||||||
|
:type="type"
|
||||||
|
@closeModel="closeMolder"
|
||||||
|
/>
|
||||||
|
</a-modal>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { defineProps, defineEmits, ref } from "vue"
|
||||||
|
import {showDrawBack, drawBackSpan} from '@/views/demo/util'
|
||||||
|
import { dataProcessing } from '@/views/demo/tiankongdi/util'
|
||||||
|
import { message } from 'ant-design-vue'
|
||||||
|
import { useUserStore } from '@/store/modules/user'
|
||||||
|
import { flowStore } from '@/store/modules/flow';
|
||||||
|
import { getDetail } from '@/api/sys/WFSchemeInfo';
|
||||||
|
import { Audit } from '@/views/demo/workflow/task/process/page';
|
||||||
|
// TODO 更换接口
|
||||||
|
import { addTaskFavorite,deleteTaskCase } from '@/api/tiankongdi/index';
|
||||||
|
|
||||||
|
const userStore = useUserStore()
|
||||||
|
const flowWfDataStore = flowStore();
|
||||||
|
|
||||||
|
const props = defineProps(["dataList"])
|
||||||
|
const emits = defineEmits(["changeTask","query"])
|
||||||
|
|
||||||
|
const mapNo = ref('')
|
||||||
|
const searchList = ref([])
|
||||||
|
const showDataId = ref()
|
||||||
|
const auditOpen = ref(false);
|
||||||
|
const processId = ref('');
|
||||||
|
const taskId = ref('');
|
||||||
|
const type = ref('');
|
||||||
|
const isRead: any = ref(0);
|
||||||
|
const handoffShow = ref(true)
|
||||||
|
|
||||||
|
const locationFun = (record) => {
|
||||||
|
console.log(record);
|
||||||
|
emits('changeTask', record.geomid);
|
||||||
|
}
|
||||||
|
const goAudit = async (record) => {
|
||||||
|
showDataId.value = record.id
|
||||||
|
let data = await getDetail({ code: record.processcode });
|
||||||
|
let scheme = JSON.parse(data.scheme.content);
|
||||||
|
let wfData = scheme.wfData;
|
||||||
|
flowWfDataStore.setWfDataAll(wfData);
|
||||||
|
auditOpen.value = true;
|
||||||
|
processId.value = record.processid;
|
||||||
|
taskId.value = record.taskid;
|
||||||
|
type.value = record.type;
|
||||||
|
}
|
||||||
|
const collectItem = (item) => {
|
||||||
|
console.log(item,userStore.getUserInfo)
|
||||||
|
if(item.fid){
|
||||||
|
cancelCollectItem(item)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let userInfo = userStore.getUserInfo
|
||||||
|
let params = {
|
||||||
|
taskId: item.taskid,
|
||||||
|
favoriteUserId: userInfo.id
|
||||||
|
}
|
||||||
|
addTaskFavorite(params).then(res => {
|
||||||
|
console.log(res)
|
||||||
|
message.success('收藏成功')
|
||||||
|
emits('query')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const cancelCollectItem = (item) => {
|
||||||
|
deleteTaskCase(item.fid).then(res => {
|
||||||
|
message.success('取消收藏成功')
|
||||||
|
emits('query')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const prevData = () => {
|
||||||
|
}
|
||||||
|
const nextData = () => {
|
||||||
|
}
|
||||||
|
const closeMolder = () => {
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.data-list-div{
|
||||||
|
flex: 1;
|
||||||
|
overflow: auto;
|
||||||
|
padding: 10px;
|
||||||
|
scrollbar-width: none; /* firefox */
|
||||||
|
-ms-overflow-style: none; /* IE 10+ */
|
||||||
|
.data-list-item{
|
||||||
|
background:#fff;
|
||||||
|
padding:20px 10px 10px 10px;
|
||||||
|
// border-radius:6px;
|
||||||
|
margin-bottom:1px;
|
||||||
|
position: relative;
|
||||||
|
.back-box{
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top:0;
|
||||||
|
background: #EA1C06;
|
||||||
|
padding: 3px 6px;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 12px;
|
||||||
|
border-radius: 0px 0px 0px 8px;
|
||||||
|
}
|
||||||
|
.data-list-layout-div{
|
||||||
|
display:flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding-bottom: 8px;
|
||||||
|
border-bottom: 1px solid #E5E5E5;
|
||||||
|
height: 45px;
|
||||||
|
.data-list-title-div{
|
||||||
|
display:flex;
|
||||||
|
align-items: center;
|
||||||
|
.map-mark{
|
||||||
|
width:17px;
|
||||||
|
height:17px;
|
||||||
|
}
|
||||||
|
.label-div{
|
||||||
|
display: flex;
|
||||||
|
align-items: baseline;
|
||||||
|
margin-right: 12px
|
||||||
|
}
|
||||||
|
.item-label{
|
||||||
|
font-family: Alibaba PuHuiTi;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 23px;
|
||||||
|
color: #000000;
|
||||||
|
margin-left: 9px;
|
||||||
|
margin-right:10px;
|
||||||
|
}
|
||||||
|
.item-sub-label{
|
||||||
|
font-family: Alibaba PuHuiTi;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 17px;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.item-mark{
|
||||||
|
font-family: Alibaba PuHuiTi;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 13px;
|
||||||
|
margin-left: 17px;
|
||||||
|
color: #696969;
|
||||||
|
margin-top: 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.data-item-type-div{
|
||||||
|
font-family: Alibaba PuHuiTi;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 15px;
|
||||||
|
color: #696969;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
cursor:pointer;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.data-list-info-div{
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-top: 10px;
|
||||||
|
height: 40px;
|
||||||
|
.info-layout-div{
|
||||||
|
display:flex;
|
||||||
|
align-items: center;
|
||||||
|
.info-time{
|
||||||
|
font-family: HarmonyOS Sans;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 15px;
|
||||||
|
color: #000000;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.info-item{
|
||||||
|
display:flex;
|
||||||
|
background: rgba(237, 237, 237, 0.55);
|
||||||
|
align-items: center;
|
||||||
|
width: 110px;
|
||||||
|
border-radius: 7px;
|
||||||
|
margin-right: 8px;
|
||||||
|
height: 33px;
|
||||||
|
justify-content: center;
|
||||||
|
.info-label{
|
||||||
|
font-family: Alibaba PuHuiTi;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 13px;
|
||||||
|
color: #959494;
|
||||||
|
// width:45%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
padding-right: 5px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.info-data{
|
||||||
|
font-family: HarmonyOS Sans;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 13px;
|
||||||
|
color: #000000;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.data-list-item:nth-last-child(1){
|
||||||
|
border-bottom-left-radius: 6px;
|
||||||
|
border-bottom-right-radius: 6px
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.data-list-div::-webkit-scrollbar {
|
||||||
|
display: none; /* Chrome Safari */
|
||||||
|
}
|
||||||
|
.img-box{
|
||||||
|
width: 25px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.full-modal {
|
||||||
|
.ant-modal {
|
||||||
|
min-width: 100vw;
|
||||||
|
top: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
.ant-modal-content {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
.ant-modal-body {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.handoff{
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
padding-right: 25px;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,123 @@
|
|||||||
|
<template>
|
||||||
|
<div class="sift-div">
|
||||||
|
<div class="layout-div">
|
||||||
|
<div class="sift-item" @click="dataListSort('area')">
|
||||||
|
<div class="sift-label">总面积</div>
|
||||||
|
<div class="sift-icon">
|
||||||
|
<div :style="`${showSortMark('area',1)? 'color: #086DEC;': ''}`">▲</div>
|
||||||
|
<div :style="`${showSortMark('area',2)? 'color: #086DEC;': ''}`">▼</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sift-item" @click="dataListSort('gengdi_area')">
|
||||||
|
<div class="sift-label">耕地面积</div>
|
||||||
|
<div class="sift-icon">
|
||||||
|
<div :style="`${showSortMark('gengdi_area',1)? 'color: #086DEC;': ''}`">▲</div>
|
||||||
|
<div :style="`${showSortMark('gengdi_area',2)? 'color: #086DEC;': ''}`">▼</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sift-item" @click="dataListSort('synchronoustime')">
|
||||||
|
<div class="sift-label">下发时间</div>
|
||||||
|
<div class="sift-icon">
|
||||||
|
<div :style="`${showSortMark('synchronoustime',1)? 'color: #086DEC;': ''}`">▲</div>
|
||||||
|
<div :style="`${showSortMark('synchronoustime',2)? 'color: #086DEC;': ''}`">▼</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="collect-div">
|
||||||
|
<img src="@/assets/images/tiankongdi/collect-active.png" class="img-box" @click="getCollectList(0)" v-if="openCollect"/>
|
||||||
|
<img src="@/assets/images/tiankongdi/collect.png" class="img-box" @click="getCollectList(1)" v-else/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { defineProps, defineEmits, ref, computed } from "vue"
|
||||||
|
import { orderUtils } from '@/components/illegalmining/util'
|
||||||
|
|
||||||
|
const props = defineProps(["sortData","screenData"])
|
||||||
|
const emits = defineEmits(["changeSort","collectChange"])
|
||||||
|
|
||||||
|
const order = ref(0) // 0: 不排序 1: 升序 2: 降序
|
||||||
|
const openCollect = computed(() => {
|
||||||
|
if(props.screenData.type === '') return false
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
|
||||||
|
const dataListSort = (type) => {
|
||||||
|
if(props.sortData.sortType === '' || props.sortData.sortType === type){
|
||||||
|
order.value = (order.value + 1) % 3
|
||||||
|
}else{
|
||||||
|
order.value = 1
|
||||||
|
}
|
||||||
|
let str_order = orderUtils[order.value]
|
||||||
|
if(order.value == 0){
|
||||||
|
type = null
|
||||||
|
}
|
||||||
|
emits('changeSort', type, str_order)
|
||||||
|
}
|
||||||
|
const showSortMark = (key, sort) => {
|
||||||
|
if(props.sortData.sortType === key && sort === order.value){
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
const getCollectList = (type) => {
|
||||||
|
if(type == 0){
|
||||||
|
type = ""
|
||||||
|
}
|
||||||
|
emits('collectChange', type)
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.sift-div{
|
||||||
|
background:#fff;
|
||||||
|
height: 77px;
|
||||||
|
padding:19px 13px;
|
||||||
|
margin-left: 10px;
|
||||||
|
margin-right: 10px;
|
||||||
|
border-radius: 10px 10px 0px 0px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
.layout-div{
|
||||||
|
display:flex;
|
||||||
|
.back-button{
|
||||||
|
font-size:22px;
|
||||||
|
cursor:pointer;
|
||||||
|
}
|
||||||
|
.interval-div{
|
||||||
|
height:100%;
|
||||||
|
width:1px;
|
||||||
|
background:#EDEDED;
|
||||||
|
margin-left: 10px;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
.sift-item{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-right:15px;
|
||||||
|
cursor:pointer;
|
||||||
|
user-select:none;
|
||||||
|
.sift-label{
|
||||||
|
font-family: Alibaba PuHuiTi;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 19px;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.sift-icon{
|
||||||
|
font-size: 9px;
|
||||||
|
margin-left:5px;
|
||||||
|
opacity: 0.53;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.collect-div{
|
||||||
|
display:flex;
|
||||||
|
align-items:center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.img-box{
|
||||||
|
width: 25px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,73 @@
|
|||||||
|
/**
|
||||||
|
* 年份 year
|
||||||
|
* 图斑来源 tubanlaiyuan
|
||||||
|
* 图斑类型 typename
|
||||||
|
* 县区 countyid
|
||||||
|
* 乡镇 streetid
|
||||||
|
* 处理状态 nowStatus
|
||||||
|
* 下发时间段 startTime-endTime
|
||||||
|
* 图斑号 caseNo
|
||||||
|
*/
|
||||||
|
// 图斑来源
|
||||||
|
import { getChildrenTree } from '@/api/demo/system';
|
||||||
|
const counties = await getChildrenTree({ parentId: 371300 })
|
||||||
|
console.log(counties,'counties')
|
||||||
|
export const polygonSourceOptions= [
|
||||||
|
{ label: '群众举报', value: '群众举报'},
|
||||||
|
{ label: '舆情', value: '舆情'},
|
||||||
|
{ label: '12345', value: '12345'},
|
||||||
|
{ label: '矿产卫片', value: '矿产卫片'},
|
||||||
|
{ label: '无人机巡查', value: '无人机巡查'},
|
||||||
|
{ label: '其他部门移交', value: '其他部门移交'},
|
||||||
|
{ label: '上级领导交班', value: '上级领导交班'},
|
||||||
|
{ label: '县级自查上报', value: '县级自查上报'},
|
||||||
|
]
|
||||||
|
// 图斑类型
|
||||||
|
export const polygonTypeOptions= [
|
||||||
|
{ label: '开采', value: '开采'},
|
||||||
|
{ label: '加工', value: '加工'},
|
||||||
|
]
|
||||||
|
// 当前状态
|
||||||
|
export const statusOptions = [
|
||||||
|
{ label: '待填报', value: '1'},
|
||||||
|
{ label: '待整改', value: '2'},
|
||||||
|
{ label: '待县级审核', value: '3'},
|
||||||
|
{ label: '待市级审核', value: '4'},
|
||||||
|
{ label: '待查处', value: '5'},
|
||||||
|
{ label: '查处待县级审核', value: '6'},
|
||||||
|
{ label: '查处待市级审核', value: '7'},
|
||||||
|
{ label: '查处后待整改', value: '8'},
|
||||||
|
{ label: '整改后待县级审核', value: '9'},
|
||||||
|
{ label: '整改后待市级审核', value: '10'},
|
||||||
|
{ label: '已归档', value: '99'},
|
||||||
|
]
|
||||||
|
// 整改类型
|
||||||
|
export const rectifyTypeOptions = [
|
||||||
|
{ label: '取缔', value: '取缔'},
|
||||||
|
{ label: '保留', value: '保留'},
|
||||||
|
]
|
||||||
|
// 违法类型(开采)
|
||||||
|
export const mineIllegalTypeOptions = [
|
||||||
|
{ label: '无证开采类', value: '无证开采类'},
|
||||||
|
{ label: '越界开采类', value: '越界开采类'},
|
||||||
|
{ label: '持证矿山类', value: '持证矿山类'},
|
||||||
|
{ label: '以项目名义类', value: '以项目名义类'},
|
||||||
|
{ label: '其他', value: '其他'},
|
||||||
|
]
|
||||||
|
// 违法类型(加工)
|
||||||
|
export const processIllegalTypeOptions = [
|
||||||
|
{ label: '违法占地', value: '违法占地'},
|
||||||
|
{ label: '购销非法开采矿产品', value: '购销非法开采矿产品'},
|
||||||
|
{ label: '其他', value: '其他'},
|
||||||
|
]
|
||||||
|
export const countiesOptions = counties.map(item => {
|
||||||
|
return {
|
||||||
|
label: item.name,
|
||||||
|
value: item.id
|
||||||
|
}
|
||||||
|
})
|
||||||
|
export const orderUtils = {
|
||||||
|
0: null,
|
||||||
|
1: 'asc',
|
||||||
|
2: 'desc',
|
||||||
|
}
|
@ -0,0 +1,147 @@
|
|||||||
|
<template>
|
||||||
|
<div class="out-div">
|
||||||
|
<SearchComponent
|
||||||
|
:screenData="screenData"
|
||||||
|
@screenDataChange="screenDataChange"
|
||||||
|
@search="search"
|
||||||
|
@resetScreenData="resetScreenData"/>
|
||||||
|
<SortComponent
|
||||||
|
:sortData="sortData"
|
||||||
|
:screenData="screenData"
|
||||||
|
@changeSort="changeSort"
|
||||||
|
@collectChange="collectChange"/>
|
||||||
|
<ShowListComponent
|
||||||
|
:dataList="dataList"
|
||||||
|
@changeTask="changeTask"
|
||||||
|
@query="query"/>
|
||||||
|
<PaginationComponent
|
||||||
|
:pageData="pageData"
|
||||||
|
:total="total"
|
||||||
|
@changePageData="changePageData"/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, onMounted, defineEmits } from "vue"
|
||||||
|
import SearchComponent from '@/components/illegalmining/SearchComponent/index.vue'
|
||||||
|
import SortComponent from '@/components/illegalmining/SortComponent/index.vue'
|
||||||
|
import ShowListComponent from '@/components/illegalmining/ShowListComponent/index.vue'
|
||||||
|
import PaginationComponent from '@/components/illegalmining/PaginationComponent/index.vue'
|
||||||
|
import dayjs from 'dayjs';
|
||||||
|
// TODO 换接口
|
||||||
|
import { getLoadDroneCaseInfoDetail } from '@/api/tiankongdi/index';
|
||||||
|
|
||||||
|
const emits = defineEmits(['changeLoading','changeTask'])
|
||||||
|
|
||||||
|
const screenData = ref({
|
||||||
|
year: '',
|
||||||
|
tubanlaiyuan: '',
|
||||||
|
typename: '',
|
||||||
|
countyid:'',
|
||||||
|
streetid: '',
|
||||||
|
nowStatus: [],
|
||||||
|
time: null,
|
||||||
|
caseNo: '',
|
||||||
|
type: '',
|
||||||
|
})
|
||||||
|
const sortData = ref({
|
||||||
|
sortType: null,
|
||||||
|
order: null,
|
||||||
|
})
|
||||||
|
const pageData = ref({
|
||||||
|
page: 1,
|
||||||
|
limit: 10,
|
||||||
|
})
|
||||||
|
const total = ref(0)
|
||||||
|
const dataList = ref([])
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
query()
|
||||||
|
})
|
||||||
|
|
||||||
|
const query = () => {
|
||||||
|
let params = {
|
||||||
|
...pageData.value,
|
||||||
|
...sortData.value,
|
||||||
|
}
|
||||||
|
Object.keys(screenData.value).forEach(key => {
|
||||||
|
switch(key){
|
||||||
|
case 'time':
|
||||||
|
if(screenData.value.time){
|
||||||
|
params['startTime'] = dayjs(screenData.value.time[0]).format('YYYY-MM-DD')
|
||||||
|
params['endTime'] = dayjs(screenData.value.time[1]).format('YYYY-MM-DD')
|
||||||
|
}
|
||||||
|
break
|
||||||
|
case 'nowStatus':
|
||||||
|
if(screenData.value.nowStatus.length > 0){
|
||||||
|
params['nowStatus'] = screenData.value.nowStatus.join(',')
|
||||||
|
}
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
if(screenData.value[key] && screenData.value[key] !== ''){
|
||||||
|
params[key] = screenData.value[key]
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
})
|
||||||
|
emits('changeLoading',true)
|
||||||
|
// TODO 换接口
|
||||||
|
getLoadDroneCaseInfoDetail(params).then(res => {
|
||||||
|
console.log(res)
|
||||||
|
dataList.value = res.items
|
||||||
|
total.value = res.total
|
||||||
|
}).finally(() => {
|
||||||
|
emits('changeLoading',false)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const screenDataChange = (value, type) => {
|
||||||
|
console.log(value,type)
|
||||||
|
screenData.value[type] = value
|
||||||
|
}
|
||||||
|
const search = () => {
|
||||||
|
query()
|
||||||
|
console.log(screenData.value)
|
||||||
|
}
|
||||||
|
const changeSort = (sortType, order) => {
|
||||||
|
sortData.value.sortType = sortType
|
||||||
|
sortData.value.order = order
|
||||||
|
query()
|
||||||
|
}
|
||||||
|
const collectChange = (type) => {
|
||||||
|
screenData.value.type = type
|
||||||
|
query()
|
||||||
|
}
|
||||||
|
const resetScreenData = () => {
|
||||||
|
screenData.value = {
|
||||||
|
year: '',
|
||||||
|
tubanlaiyuan: '',
|
||||||
|
typename: '',
|
||||||
|
countyid:'',
|
||||||
|
streetid: '',
|
||||||
|
nowStatus: [],
|
||||||
|
time: null,
|
||||||
|
caseNo: '',
|
||||||
|
type: screenData.value.type,
|
||||||
|
}
|
||||||
|
query()
|
||||||
|
}
|
||||||
|
const changePageData = (page, limit) => {
|
||||||
|
pageData.value.page = page
|
||||||
|
pageData.value.limit = limit
|
||||||
|
query()
|
||||||
|
}
|
||||||
|
const changeTask = (id) => {
|
||||||
|
emits('changeTask',id)
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
|
||||||
|
.out-div{
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
// background-color: aqua;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,86 @@
|
|||||||
|
<template>
|
||||||
|
<div class="curb-spot-city">
|
||||||
|
<div class="show-list">
|
||||||
|
<a-spin :spinning="spinning">
|
||||||
|
<MapList
|
||||||
|
@changeLoading="changeLoading"
|
||||||
|
@changeTask="changeTask"/>
|
||||||
|
</a-spin>
|
||||||
|
</div>
|
||||||
|
<MapboxMap
|
||||||
|
:mapConfig="mapConfig"
|
||||||
|
@mapOnLoad="onMapboxLoad"
|
||||||
|
ref="MapboxComponent"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, defineAsyncComponent, onMounted } from "vue"
|
||||||
|
const MapboxMap = defineAsyncComponent(() => import('@/components/MapboxMaps/MapComponent.vue'));
|
||||||
|
import { getGeom, getConfig } from '@/api/sys/layerManagement';
|
||||||
|
import { message } from 'ant-design-vue'
|
||||||
|
import MapList from './MapList/index.vue'
|
||||||
|
|
||||||
|
const spinning = ref(false)
|
||||||
|
const mapConfig = ref({ isShowMap: false });
|
||||||
|
const MapboxComponent = ref();
|
||||||
|
|
||||||
|
const changeLoading = (value: boolean) => {
|
||||||
|
spinning.value = value
|
||||||
|
}
|
||||||
|
function onMapboxLoad(): void {
|
||||||
|
getConfig({ code: 'mapsetting' }).then((res) => {
|
||||||
|
mapConfig.value = JSON.parse(res.codeValue);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function changeTask(val) {
|
||||||
|
let getGeomPrams = {
|
||||||
|
TableName: 'drone_shp_data ',
|
||||||
|
FieldName: 'gid',
|
||||||
|
FieldValue: val?.split(','),
|
||||||
|
page: 1,
|
||||||
|
limit: 999,
|
||||||
|
key: null,
|
||||||
|
};
|
||||||
|
if (val) {
|
||||||
|
getGeom(getGeomPrams).then((res) => {
|
||||||
|
let geoms:any[] = [];
|
||||||
|
if (res) {
|
||||||
|
if (res.items?.length > 0) {
|
||||||
|
res.items.forEach((item, index) => {
|
||||||
|
let geom = {
|
||||||
|
key: item.gid,
|
||||||
|
mapgeom: item.geometry,
|
||||||
|
};
|
||||||
|
geoms.push(geom);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
MapboxComponent.value.handlerDraw('Details', geoms, false);
|
||||||
|
} else {
|
||||||
|
message.error('当前数据没有图斑!');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
message.error('当前数据没有图斑!');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.curb-spot-city {
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
.show-list {
|
||||||
|
width: 590px;
|
||||||
|
background: #efefef;
|
||||||
|
:deep(.ant-spin-nested-loading) {
|
||||||
|
height: 100%;
|
||||||
|
width: 590px;
|
||||||
|
}
|
||||||
|
:deep(.ant-spin-container) {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Reference in New Issue