徐景良 2024-07-10 18:15:33 +08:00
commit 69bfd69af2
17 changed files with 458 additions and 208 deletions

View File

@ -7,6 +7,7 @@ enum Api {
DeleteEntitys = '/api/ImMsg/DeleteEntitys',
ReadMsg = '/api/ImMsg/ReadMsg',
GetLastList = '/api/ImMsg/GetLastList',
GetInfoByContentId = '/api/ImMsg/GetInfoByContentId',
}
export function loadSysImMsgList(params) {
@ -37,3 +38,9 @@ export function getLastList(params) {
url: Api.GetLastList + '?userId=' + params.userId,
});
}
export function getInfoByContentId(params) {
return defHttp.get({
url: Api.GetInfoByContentId + '?contentid=' + params.id,
});
}

View File

@ -35,6 +35,8 @@ enum Api {
AddtaskFavorite = '/api/DroneCaseInfoSingle/AddtaskFavorite',
// 审核列表删除收藏
DeleteTaskCase = '/api/DroneCaseInfoSingle/DeleteTaskCase',
// 获取当前账号可以看见的乡镇
loadStreet = '/api/DroneCaseInfoSingle/loadStreet'
}
/**
@ -43,6 +45,9 @@ enum Api {
export function getLoadTaskCount(params?: taskCountParams) {
return defHttp.get<countModel>({ url: Api.LoadTaskCount, params });
}
export function getLoadStreet() {
return defHttp.get({ url: Api.loadStreet });
}
/**
* @description: getCaseFlowLog

View File

@ -431,4 +431,27 @@
}
}
}
/* 整个滚动条的样式 */
::-webkit-scrollbar {
width: 12px;
height: 12px;
}
/* 滚动条轨道 */
::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 10px;
}
/* 滚动条滑块 */
::-webkit-scrollbar-thumb {
background: #888;
border-radius: 10px;
}
/* 当鼠标悬停在滚动条滑块上时的样式 */
::-webkit-scrollbar-thumb:hover {
background: #555;
}
</style>

View File

@ -30,7 +30,7 @@
<template #footer> </template>
<Look ref="posRef" :processId="processId" />
</a-modal>
<Message @register="register" />
<DetailModal @register="registerModal" />
</div>
</template>
<script lang="ts" setup>
@ -40,16 +40,18 @@
import { tabListData } from './data';
import { useDesign } from '@/hooks/web/useDesign';
import { useMessage } from '@/hooks/web/useMessage';
import { getLastList, loadSysImMsgList, readMsg } from '@/api/demo/message';
import { getLastList, readMsg, getInfoByContentId } from '@/api/demo/message';
import { useUserStore } from '@/store/modules/user';
import { Look } from '@/views/demo/workflow/task/process/page';
import { useModal } from '@/components/Modal';
import NoticeList from './NoticeList.vue';
import Message from './message.vue';
import { signal } from '@/utils/signalR';
import { getDetail } from '@/api/sys/WFSchemeInfo';
import { flowStore } from '@/store/modules/flow';
const [register, { openModal }] = useModal();
const flowWfDataStore = flowStore();
const [registerModal, { openModal }] = useModal();
const userStore = useUserStore();
const userInfo: any = userStore.getUserInfo;
@ -59,6 +61,9 @@
const numberStyle = {};
const auditOpen = ref(false);
const processId = ref('');
const taskId = ref('');
const isRead: any = ref(0);
const type = ref('');
const count = computed(() => {
let count = 0;
for (let i = 0; i < listData.value.length; i++) {
@ -68,17 +73,32 @@
});
async function onNoticeClick(record) {
console.log(record);
// createMessage.success('ID=' + record.id);
// // 线,线
// record.titleDelete = !record.titleDelete;
const index = listData.value[0].list.findIndex((item: any) => item.id === record.id);
if (index !== -1) {
listData.value[0].list.splice(index, 1);
}
if (record.contentId) {
auditOpen.value = true;
processId.value = record.contentId;
const info = await getInfoByContentId({
id: record.contentId,
});
if (info) {
let data = await getDetail({ code: info.ProcessCode });
let scheme = JSON.parse(data.scheme.content);
let wfData = scheme.wfData;
flowWfDataStore.setWfDataAll(wfData);
auditOpen.value = true;
processId.value = info.ProcessId;
taskId.value = info.Id;
type.value = info.Type;
} else {
openModal(true, {
record,
});
}
} else {
openModal(true, {
record,
});
}
const data = await readMsg({
id: record.msgId,
@ -88,11 +108,6 @@
const data = await getLastList({
userId: userInfo.id,
});
// const data = await loadSysImMsgList({
// page: 1,
// limit: 10,
// });
console.log(data);
let arr: any = [];
if (data && data.length > 0) {
data.forEach((item: any) => {
@ -138,18 +153,14 @@
duration: 3,
});
getList();
// openModal(true, {
// user: user,
// message: message,
// time: time,
// id: id,
// issystem: issystem,
// });
});
onMounted(() => {
getList();
start();
});
function closeMolder() {
auditOpen.value = false;
}
</script>
<style lang="less">
@prefix-cls: ~'@{namespace}-header-notify';

View File

@ -1,40 +0,0 @@
<template>
<BasicModal
@register="registerModal"
v-bind="$attrs"
title="新消息"
okText="查看"
cancelText="关闭"
@ok="onNoticeClick"
>
Modal Info.
</BasicModal>
<a-modal
width="100%"
wrap-class-name="full-modal"
v-model:open="auditOpen"
title="详情"
:destroyOnClose="true"
>
<template #footer> </template>
<Look ref="posRef" :processId="processId" />
</a-modal>
</template>
<script lang="ts" setup>
import { ref } from 'vue';
import { BasicModal, useModalInner } from '@/components/Modal';
import { Look } from '@/views/demo/workflow/task/process/page';
const info = ref({});
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
setModalProps({ confirmLoading: false });
console.log(data);
info.value = data;
});
const auditOpen = ref(false);
const processId = ref('');
async function onNoticeClick() {
auditOpen.value = true;
closeModal();
}
</script>

View File

@ -116,9 +116,9 @@
<a-modal
v-model:open="showRecordList"
width="1500px"
width="1710px"
:footer="null"
style="top: 100px"
style="top: 50px; left: 105px"
@ok="handleOk"
>
<template #closeIcon>
@ -192,8 +192,8 @@
beforeFetch: (data) => {
//
var temp = {
startTime: dayjs(data.startTime).format('YYYY-MM'),
endTime: dayjs(data.endTime).format('YYYY-MM'),
startTime: dayjs(data.startTime).startOf('month').format('YYYY-MM-DD'),
endTime: dayjs(data.endTime).endOf('month').format('YYYY-MM-DD'),
};
return temp;
},
@ -223,8 +223,8 @@
const searchForm = reactive<searchListSchema>({
AreaId: record.countyid,
CaseType: CaseType,
startTime: dayjs(searchParams.value?.startTime).format('YYYY-MM'),
endTime: dayjs(searchParams.value?.endTime).format('YYYY-MM'),
startTime: dayjs(searchParams.value?.startTime).startOf('month').format('YYYY-MM-DD'),
endTime: dayjs(searchParams.value?.endTime).endOf('month').format('YYYY-MM-DD'),
page: 1,
limit: 10,
});
@ -299,8 +299,8 @@
//
function handleExport() {
let params = {
startTime: dayjs(searchParams.value?.startTime).format('YYYY-MM'),
endTime: dayjs(searchParams.value?.endTime).format('YYYY-MM'),
startTime: dayjs(searchParams.value?.startTime).startOf('month').format('YYYY-MM-DD'),
endTime: dayjs(searchParams.value?.endTime).endOf('month').format('YYYY-MM-DD'),
};
axios({
method: 'post',
@ -331,7 +331,7 @@
}
};
</script>
<style>
<style lang="less" scoped>
#closeIconButton {
width: 30px;
height: 40px;

View File

@ -0,0 +1,45 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" title="消息">
<Description
:collapseOptions="{ canExpand: true, helpMessage: 'help me' }"
:column="1"
:data="mockData"
:schema="schema"
/>
</BasicModal>
</template>
<script lang="ts" setup>
import { ref, computed, unref, h } from 'vue';
import { Tag } from 'ant-design-vue';
import { BasicModal, useModalInner } from '@/components/Modal';
import { Description, DescItem, useDescription } from '@/components/Description';
defineOptions({ name: 'AccountModal' });
const mockData = ref();
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
setModalProps({ confirmLoading: false });
console.log(data);
mockData.value = data.record;
});
const schema: DescItem[] = [
{
field: 'content',
label: '内容',
},
{
field: 'isRead',
label: '状态',
render: (curVal, data) => {
const isRead = data.isRead;
const enable = ~~isRead === 1;
const color = enable ? 'green' : 'red';
const text = enable ? '已读' : '未读';
return h(Tag, { color: color }, () => text);
},
},
{
field: 'createDate',
label: '创建时间',
},
];
</script>

View File

@ -28,6 +28,7 @@
<template #footer> </template>
<Look ref="posRef" :processId="processId" />
</a-modal>
<DetailModal @register="registerModal" />
</div>
</template>
<script lang="ts" setup>
@ -44,8 +45,13 @@
deleteEntitys,
virtualDeleteEntitys,
readMsg,
getInfoByContentId,
} from '@/api/demo/message';
import { getDetail } from '@/api/sys/WFSchemeInfo';
import { flowStore } from '@/store/modules/flow';
import DetailModal from './DetailModal.vue';
const flowWfDataStore = flowStore();
const { createConfirm, createMessage } = useMessage();
const searchInfo = reactive<Recordable>({});
const isDelete = ref(0);
@ -68,7 +74,6 @@
},
//
handleSearchInfoFn(info) {
console.log(info);
isDelete.value = info.isDelete;
return info;
},
@ -82,10 +87,36 @@
});
const auditOpen = ref(false);
const processId = ref('');
const taskId = ref('');
const isRead: any = ref(0);
const type = ref('');
const [registerModal, { openModal }] = useModal();
async function viewAccount(record: Recordable) {
//
if (record.contentId) {
auditOpen.value = true;
processId.value = record.contentId;
const info = await getInfoByContentId({
id: record.contentId,
});
if (info) {
let data = await getDetail({ code: info.ProcessCode });
let scheme = JSON.parse(data.scheme.content);
let wfData = scheme.wfData;
flowWfDataStore.setWfDataAll(wfData);
auditOpen.value = true;
processId.value = info.ProcessId;
taskId.value = info.Id;
type.value = info.Type;
} else {
openModal(true, {
record,
});
}
} else {
//
openModal(true, {
record,
});
}
const data = await readMsg({
id: record.msgId,
@ -146,7 +177,6 @@
function onBtnClicked(domId) {
switch (domId) {
case 'btnDelete':
console.log(isDelete.value);
if (isDelete.value == 1) {
completelyDel();
} else {
@ -157,6 +187,9 @@
break;
}
}
function closeMolder() {
auditOpen.value = false;
}
</script>
<style lang="less">
.full-modal {

View File

@ -34,7 +34,7 @@ export const columns: BasicColumn[] = [
{
title: '图斑编号',
dataIndex: 'caseno',
width: 160,
width: 200,
},
{
title: '下发时间',
@ -179,8 +179,9 @@ export const searchFormSchema: FormSchema[] = [
{ label: '待接收', value: '待接收' },
{ label: '待填报', value: '待填报' },
{ label: '待整改', value: '待整改' },
{ label: '待审核', value: '待审核' },
{ label: '已完成', value: '已完成' },
{ label: '市级审核', value: '市级审核' },
{ label: '县级审核', value: '县级审核' },
{ label: '已归档', value: '已归档' },
],
},
colProps: { span: 4 },
@ -199,9 +200,6 @@ export const searchFormSchema: FormSchema[] = [
labelField: 'name',
valueField: 'id',
onChange: () => {
const { reload } = tableAction;
reload();
// or
formModel.streetid = '';
},
};

View File

@ -37,7 +37,7 @@ export const columns: BasicColumn[] = [
{
title: '图斑编号',
dataIndex: 'caseno',
width: 160,
width: 200,
},
{
title: '下发时间',
@ -53,7 +53,7 @@ export const columns: BasicColumn[] = [
},
{
title: '判定结果',
dataIndex: 'typename',
dataIndex: 'isillegal',
},
{
title: '当前状态',
@ -133,15 +133,15 @@ export const searchFormSchema: FormSchema[] = [
},
},
{
field: 'typename',
field: 'isIllegal',
label: '判定结果',
component: 'Select',
colProps: { span: 4 },
componentProps: {
options: [
{ label: '农用地违法', value: '农用地违法' },
{ label: '建设用地', value: '建设用地' },
{ label: '推堆土', value: '推堆土' },
{ label: '合法', value: 0 },
{ label: '违法', value: 1 },
{ label: '其他', value: 2 },
],
},
},
@ -154,8 +154,9 @@ export const searchFormSchema: FormSchema[] = [
{ label: '待接收', value: '待接收' },
{ label: '待填报', value: '待填报' },
{ label: '待整改', value: '待整改' },
{ label: '待审核', value: '待审核' },
{ label: '已完成', value: '已完成' },
{ label: '市级审核', value: '市级审核' },
{ label: '县级审核', value: '县级审核' },
{ label: '已归档', value: '已归档' },
],
},
colProps: { span: 4 },
@ -174,9 +175,6 @@ export const searchFormSchema: FormSchema[] = [
labelField: 'name',
valueField: 'id',
onChange: () => {
const { reload } = tableAction;
reload();
// or
formModel.streetid = '';
},
};

View File

@ -41,12 +41,49 @@
@click="emits('showInfo', true, item)"
v-if="dataList.length > 0"
>
<div class="name-div">
<div class="name-div">
<div class="item-mark"></div>
<div class="item-label">{{ item.areaname }}</div>
<div class="progress-div">
<div class="progress-label progress-color">进度</div>
<div class="progress-data" style="width:97px">
<span style="color: #086DEC;">{{item.verificatedtask}}</span>/{{item.totaltask}}
</div>
</div>
<div class="progress-div">
<div class="progress-label extended-color">超期</div>
<div class="progress-data" style="width:50px">
<span style="color: #D03542">{{item.overduetask}}</span>
</div>
</div>
<div class="progress-div">
<div class="progress-label reviewed-color" style="width:70px;">待审核</div>
<div class="progress-data" style="width:50px">
<span style="color: #EC7908;">{{item.verifytask}}</span>
</div>
</div>
</div>
<div class="data-div">
<span>{{ item.count }}</span>
<div class="info-data-div">
<div class="info-data-item">
<div class="info-data-label">合法</div>
<div class="info-data-data">{{item.legalcase}}</div>
</div>
<div class="info-data-item">
<div class="info-data-label">其他</div>
<div class="info-data-data">{{item.ilegalcase}}</div>
</div>
<div class="info-data-item">
<div class="info-data-label">非粮化</div>
<div class="info-data-data">{{item.nonfoodcase}}</div>
</div>
<div class="info-data-item">
<div class="info-data-label">复耕</div>
<div class="info-data-data">{{item.rehabilitationcase}}</div>
</div>
<div class="info-data-item">
<div class="info-data-label">补手续</div>
<div class="info-data-data">{{item.makeupcase}}</div>
</div>
</div>
</div>
<div v-else class="no-data">
@ -58,10 +95,10 @@
<script setup lang="ts">
import { ref, defineProps, defineEmits, toRefs } from 'vue';
import { batchOptions, yearOptions } from '@/views/demo/tiankongdi/curbspotcity/util.ts';
import { batchOptions, yearOptions,patchSourceOptions } from '@/views/demo/tiankongdi/curbspotcity/util.ts';
import { Empty } from 'ant-design-vue';
const props = defineProps(['year', 'batch', 'dataList']);
const props = defineProps(['year', 'batch', 'dataList','patchSource']);
const emits = defineEmits(['auditProgressScreenChange', 'showInfo']);
const simpleImage = Empty.PRESENTED_IMAGE_SIMPLE;
</script>
@ -73,23 +110,27 @@
.screen-row {
display: flex;
.screen-item {
flex: 1;
font-family: Alibaba PuHuiTi;
font-weight: 500;
font-size: 17px;
color: #000000;
width: 50%;
display: flex;
.screen-item-label {
width: 55px;
width: 56px;
padding-left: 10px;
display: flex;
align-items: center;
font-size: 15px;
}
}
}
}
.data-list {
height: calc(100% - 52px);
background: @component-background;
margin-top: 10px;
height: calc(100% - 62px);
// background: darkgoldenrod;
// background: @component-background;
margin-top: 10px;
padding: 0px 10px;
.data-title {
height: 40px;
background: #bab9b7;
@ -102,17 +143,58 @@
}
.show-data-list-content {
.data-item {
cursor: pointer;
width: 100%;
background: #fff;
border-radius: 11px;
padding: 10px;
margin-bottom: 10px;
.name-div {
display: flex;
display: flex;
height: 50px;
align-items: center;
padding: 10px;
justify-content: space-between;
border-bottom: 1px solid #ececec;
cursor: pointer;
.name-div {
display: flex;
height: 50px;
align-items: center;
padding: 10px 0px;
border-bottom: 1px solid #E5E5E5;
}
.info-data-div{
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 10px;
.info-data-item{
display: flex;
align-items: center;
flex: 1;
justify-content: center;
border-right: 1px solid #EDEDED;
.info-data-label{
font-family: Alibaba PuHuiTi;
font-weight: 400;
font-size: 16px;
color: #959494;
display: flex;
justify-content: end;
flex: 1;
padding-right: 5px;
}
.info-data-data{
font-family: HarmonyOS Sans;
font-weight: 500;
font-size: 16px;
color: #000000;
line-height: 30px;
flex: 1;
display: flex;
justify-content: start;
padding-left: 5px;
}
}
.info-data-item:nth-last-child(1){
border-right: 0px;
}
}
.data-div {
font-weight: 500;
@ -126,17 +208,52 @@
margin-right: 7px;
}
.item-label {
width: 100px;
font-size: 16px;
font-weight: 600;
margin-left: 5px;
}
.progress-div{
display:flex;
font-weight: 500;
font-size: 16px;
line-height: 30px;
margin-right: 17px;
.progress-label{
font-family: Alibaba PuHuiTi;
color: #FFFFFF;
width: 50px;
height: 27px;
border-radius: 13px 0px 0px 13px;
display: flex;
align-items: center;
justify-content: center;
}
.progress-data{
background: #EFEFEF;
height: 27px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 0px 0px 11px 0px;
}
.progress-color{
background: #086DEC;
}
.extended-color{
background: #D03542
}
.reviewed-color{
background: #EC7908
}
}
}
.data-item:hover {
background-color: rgba(8, 109, 236, 0.08);
}
.data-item:nth-child(2n) {
background: #ececec;
}
// .data-item:nth-child(2n) {
// background: #ececec;
// }
}
}
.no-data {

View File

@ -37,7 +37,7 @@
<a-descriptions-item label="案件备注">{{ remark }}</a-descriptions-item>
<a-descriptions-item label="下发时间">{{ createtime }}</a-descriptions-item>
<a-descriptions-item label="案件图片">
<template v-for="(imageItem, imageIndex) in anjianzhaopianList" :key="imageIndex" >
<template v-for="(imageItem, imageIndex) in casepicList" :key="imageIndex" >
<a-image
v-if="imageItem"
width="100px"
@ -58,11 +58,11 @@
'min-width': '250px',
'word-break': 'break-all'
}">
<a-descriptions-item label="判定结果">{{ is_illegal }}</a-descriptions-item>
<a-descriptions-item label="判定结果">{{ getLabel('is_illegal',is_illegal) }}</a-descriptions-item>
<a-descriptions-item label="项目名称">{{ xiangmumc }}</a-descriptions-item>
<a-descriptions-item label="项目主体">{{ xiangmuzhuti }}</a-descriptions-item>
<a-descriptions-item label="实际用途">{{ actual_use_to }}</a-descriptions-item>
<a-descriptions-item label="违法类型">{{ weifaleixing }}</a-descriptions-item>
<a-descriptions-item label="违法类型">{{ getLabel('weifaleixing',weifaleixing) }}</a-descriptions-item>
<a-descriptions-item label="处理方式">{{ result_name }}</a-descriptions-item>
<a-descriptions-item label="立案号">{{ registr_number }}</a-descriptions-item>
<a-descriptions-item label="违法联系人">{{ illegal_contact }}</a-descriptions-item>
@ -82,7 +82,7 @@
<!-- {{ fujian }} -->
</a-descriptions-item>
<a-descriptions-item label="照片">
<template v-for="(imageItem, imageIndex) in casepicList" :key="imageIndex" >
<template v-for="(imageItem, imageIndex) in anjianzhaopianList" :key="imageIndex" >
<a-image
v-if="imageItem"
width="100px"
@ -173,6 +173,14 @@ import { getGeom } from '@/api/sys/layerManagement';
import { useMessage } from '@/hooks/web/useMessage';
const { createMessage } = useMessage();
import Icon from '@/components/Icon/Icon.vue';
import {
mapTypeOptions,
illegalTypeOptions,
measureOptions,
mapStatusOptions,
markTypeOptions,
illegalTypeList,
} from '@/views/demo/tiankongdi/curbspotcity/util.ts'
const MapboxComponent = ref();
const mapConfig = ref({})
@ -306,7 +314,24 @@ const yanshoubiaoList = computed(() => {
function onMapboxLoad(){
changeTask();
}
const getLabel = (type,value) => {
let result:any[] = []
let label = ''
switch(type){
case 'is_illegal':
result = mapTypeOptions
break;
case 'weifaleixing':
result = illegalTypeList
break;
}
result.forEach(item => {
if(item.value == value){
label = item.label
}
})
return label
}
function changeTask() {
let getGeomPrams = {
TableName: 'drone_shp_data ',
@ -340,7 +365,7 @@ function changeTask() {
}
}
const downLoadFile = (url) => {
window.open(`http://192.168.10.102:9023/${rul}`,'_self')
window.open(`http://192.168.10.102:9023/${url}`,"mozillaTab")
}
</script>

View File

@ -66,12 +66,13 @@
allowClear
style="flex: 1;"
v-model:value="props.infoScreenData.streetId"
:options="props.streetsAreaOptions"
:options="streetsAreaOptions"
@change="(value) => emits('mapListScreenChange',value,'streetId')"
/>
</div>
<div class="screen-item" style="width:40%">
<a-input
<a-input
placeholder="请输入图斑编号"
style="flex:1;margin-left: 10px;"
v-model:value="props.infoScreenData.mapNo"
@change="(value) => emits('mapListScreenChange',value.target.value,'mapNo')"
@ -104,11 +105,11 @@
<div :style="`${showSortMark('gengdi_area',2)? 'color: #086DEC;': ''}`">&#9660</div>
</div>
</div>
<div class="sift-item" @click="dataListSort('CreateDate')">
<div class="sift-item" @click="dataListSort('createtime')">
<div class="sift-label">下发时间</div>
<div class="sift-icon">
<div :style="`${showSortMark('CreateDate',1)? 'color: #086DEC;': ''}`">&#9650</div>
<div :style="`${showSortMark('CreateDate',2)? 'color: #086DEC;': ''}`">&#9660</div>
<div :style="`${showSortMark('createtime',1)? 'color: #086DEC;': ''}`">&#9650</div>
<div :style="`${showSortMark('createtime',2)? 'color: #086DEC;': ''}`">&#9660</div>
</div>
</div>
</div>
@ -140,12 +141,12 @@
<div style="display:flex;">
<a-input style="width:30%;"
v-model:value="props.infoScreenData.mapAreaFirst"
@change="(value) => emits('mapListScreenChange',value,'mapAreaFirst')"
@change="(e) => emits('mapListScreenChange',e.target.value,'mapAreaFirst')"
/>
<span>---</span>
<a-input style="width:30%;"
v-model:value="props.infoScreenData.mapAreaLast"
@change="(value) => emits('mapListScreenChange',value,'mapAreaLast')"
@change="(e) => emits('mapListScreenChange',e.target.value,'mapAreaLast')"
/>
</div>
</div>
@ -154,12 +155,12 @@
<div style="display:flex;">
<a-input style="width:30%;"
v-model:value="props.infoScreenData.arableAreaFirst"
@change="(value) => emits('mapListScreenChange',value,'arableAreaFirst')"
@change="(e) => emits('mapListScreenChange',e.target.value,'arableAreaFirst')"
/>
<span>---</span>
<a-input style="width:30%;"
v-model:value="props.infoScreenData.arableAreaLast"
@change="(value) => emits('mapListScreenChange',value,'arableAreaLast')"
@change="(e) => emits('mapListScreenChange',e.target.value,'arableAreaLast')"
/>
</div>
</div>
@ -288,7 +289,7 @@
import { ref, onMounted, defineEmits, defineProps, computed, h } from "vue"
import { StarOutlined, StarFilled, SearchOutlined, RollbackOutlined } from '@ant-design/icons-vue';
import Icon from '@/components/Icon/Icon.vue';
import { addCaseFavorite,addTaskFavorite,getCaseInfoById, deleteFavoriteCase,deleteTaskCase } from '@/api/tiankongdi/index.ts';
import { addCaseFavorite,addTaskFavorite,getCaseInfoById, deleteFavoriteCase,deleteTaskCase,getLoadStreet, } from '@/api/tiankongdi/index.ts';
import {
batchOptions,
yearOptions,
@ -305,6 +306,7 @@ import { message } from "ant-design-vue";
import ShowInfoModal from './ShowInfoModal/index.vue'
import { flowStore } from '@/store/modules/flow';
import { getDetail } from '@/api/sys/WFSchemeInfo';
import { Audit } from '@/views/demo/workflow/task/process/page';
const userStore = useUserStore()
const flowWfDataStore = flowStore();
const emits = defineEmits([
@ -322,7 +324,6 @@ const props = defineProps([
"cityType",
"municipalAreaOptions",
"countiesAreaOptions",
"streetsAreaOptions",
"communitiesAreaOptions",
"pageNo",
"pageSize",
@ -354,7 +355,20 @@ const openCollect = computed(() => {
return true
})
const showInfoData = ref()
const streetsAreaOptions = ref([
{ label: '全部', value: '' },
])
onMounted(() => {
getLoadStreet().then(res => {
console.log(res)
res.forEach(item => {
streetsAreaOptions.value.push({
label: item.Name,
value: item.Id,
})
})
})
console.log('onMounted')
})
@ -422,14 +436,14 @@ const showInfo = (item) => {
})
}
async function goAudit(record) {
showDataIndex.value = props.infoDataList.findIndex(item => item.taskeid === record.taskeid)
showDataIndex.value = props.infoDataList.findIndex(item => item.taskid === record.taskid)
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.taskeid;
taskId.value = record.taskid;
type.value = record.type;
}
const prevData = async () => {
@ -450,7 +464,7 @@ const prevData = async () => {
let wfData = scheme.wfData;
flowWfDataStore.setWfDataAll(wfData);
processId.value = record.processid;
taskId.value = record.taskeid;
taskId.value = record.taskid;
type.value = record.type;
handoffShow.value = true
}
@ -472,13 +486,19 @@ const nextData = async () => {
let wfData = scheme.wfData;
flowWfDataStore.setWfDataAll(wfData);
processId.value = record.processid;
taskId.value = record.taskeid;
taskId.value = record.taskid;
type.value = record.type;
handoffShow.value = true
}
</script>
<style lang="scss" scoped>
.handoff{
width: 100%;
display: flex;
justify-content: flex-end;
padding-right: 25px;
}
.full-modal {
.ant-modal {
min-width: 100vw;

View File

@ -27,12 +27,11 @@ export const mapStatusOptions = [
{ label: '待接收', value: 0 },
{ label: '待填报', value: 1 },
{ label: '待整改', value: 2 },
{ label: '待审核', value: 3 },
{ label: '已完成', value: 4 },
]
export const markTypeOptions = [
{ label: '建设中', value: 0 },
{ label: '已建成', value: 1 },
{ label: '在建', value: '在建' },
{ label: '已建成', value: '已建成' },
{ label: '持续变化', value: '持续变化' },
]
export const patchSourceOptions = [
{
@ -53,4 +52,8 @@ export const isOverdueOptions = [
label: '已超期',
value: '已超期',
},
]
export const illegalTypeList = [
{ label: '非农化违法用地', value: 0 },
{ label: '非粮化违法用地', value: 1 },
]

View File

@ -8,7 +8,7 @@
>
<template v-for="item in settingList" :key="item.key">
<TabPane :tab="item.name">
<div :style="'display: flex; height:' + data.height">
<div :style="' height:' + data.height">
<component :is="tabs[item.component]" />
</div>
</TabPane>

View File

@ -17,12 +17,12 @@
ref="MapboxComponent"
/>
</div>
<div :class="mapConfig?.isShowMap ? 'form-container' : ''">
<a-layout>
<a-layout>
<a-layout-content>
<a-tabs v-model:activeKey="activeName" @change="changeActive" type="card" >
<a-tabs v-model:activeKey="activeName" @change="changeActive" type="card">
<a-tab-pane
key="form"
:tab="
@ -33,7 +33,11 @@
v-if="formVisble"
>
<div>
<ImagePreview v-if="isShowImagePreview" :globalImagePreviewUrl="globalImagePreviewUrl" @closeImagePreview="closeImagePreview"></ImagePreview>
<ImagePreview
v-if="isShowImagePreview"
:globalImagePreviewUrl="globalImagePreviewUrl"
@closeImagePreview="closeImagePreview"
></ImagePreview>
<FormViewer
ref="formBoxRef"
:formConfig="formConfig"
@ -47,7 +51,6 @@
v-if="formVisble"
/>
</div>
</a-tab-pane>
<a-tab-pane key="flow" tab="流程模板" force-render>
<div class="process-design" :style="'display: flex; height:' + designerData.height">
@ -110,7 +113,6 @@
</a-layout>
</div>
<!-- 节点记录信息 -->
<div class="info-box" v-if="designerData.nodeLogs.length > 0">
<a-drawer v-model:open="infoOpen" class="custom-class" title="记录信息" placement="right">
@ -138,7 +140,7 @@
</template>
<script lang="ts" setup>
import { ref, reactive, onBeforeMount, defineAsyncComponent,watch } from 'vue';
import { ref, reactive, onBeforeMount, defineAsyncComponent, watch } from 'vue';
import { FormViewer } from '@/components/FormViewer';
import { ProcessViewer } from '@/components/ProcessViewer';
import { PageWrapper } from '@/components/Page';
@ -149,7 +151,7 @@
import { auditInfo } from './page';
import { getGeom } from '@/api/sys/layerManagement';
import { storeToRefs } from 'pinia';
import ImagePreview from "@/components/Upload/src/components/image_preview.vue";
import ImagePreview from '@/components/Upload/src/components/image_preview.vue';
import { userFormFileStore } from '@/store/modules/formFileUrl';
import { useMessage } from '@/hooks/web/useMessage';
const { createMessage } = useMessage();
@ -259,9 +261,14 @@
if (data.process.isFinished == 1) {
data.flowViewer.finishedTaskSet.forEach((finishElement) => {
wfData.forEach((element) => {
if (finishElement == element.id && element.type == 'bpmn:Task') {
if (element.type == 'bpmn:StartEvent') {
currentNode = element;
}
if (finishElement == element.id && element.type == 'bpmn:Task') {
if (!element.isInherit) {
currentNode = element;
}
}
});
});
mapConfig.value = currentNode.mapConfig;
@ -431,34 +438,34 @@
// tabStore.closeTabByKey('/dashboard/task_look_preview/detail?processId=' + processId, router);
// }
//
const chooseLayer = ref<string>("")
const geomfield = ref<string>("");
const chooseLayer = ref<string>('');
const geomfield = ref<string>('');
function findValue(obj, targetKey) {
for (var key in obj) {
if (typeof obj[key] === 'object') {
// findValue
var result = findValue(obj[key], targetKey);
if (result !== undefined && result == 'MapGeom') {
return result;
}
} else if (key === targetKey && obj[key] == 'MapGeom') {
//
chooseLayer.value = obj['mapSetData'].chooseLayer;
geomfield.value = obj['field']
return obj[key];
}
for (var key in obj) {
if (typeof obj[key] === 'object') {
// findValue
var result = findValue(obj[key], targetKey);
if (result !== undefined && result == 'MapGeom') {
return result;
}
} else if (key === targetKey && obj[key] == 'MapGeom') {
//
chooseLayer.value = obj['mapSetData'].chooseLayer;
geomfield.value = obj['field'];
return obj[key];
}
}
}
function getFormSuccess(formData){
if(mapConfig.value.isShowMap){
function getFormSuccess(formData) {
if (mapConfig.value.isShowMap) {
handlerShowGeomtrys(designerData.formCurrentNode, formData);
}
}
async function handlerShowGeomtrys(currentNode,formData) {
findValue(currentNode.authFields,"component");
async function handlerShowGeomtrys(currentNode, formData) {
findValue(currentNode.authFields, 'component');
let layer: string = chooseLayer.value;
if (!layer) {
createMessage.error('图斑未绑定图层服务!');
@ -467,57 +474,55 @@
let geomfiledValue = geomfield.value;
let gids = '';
try {
geomfiledValue = geomfiledValue.toLowerCase();
gids = formData[geomfiledValue];
// ids
if (gids) {
try {
let getGeomPrams = {
TableName: layer,
FieldName: 'gid',
FieldValue: gids,
page: 1,
limit: 999,
key: null,
};
getGeom(getGeomPrams).then((res) => {
let geoms = [];
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(status,mapgemoList.value, false);
MapboxComponent.value.handlerDraw('Details', geoms, false);
} else {
createMessage.error('当前数据没有图斑!');
geomfiledValue = geomfiledValue.toLowerCase();
gids = formData[geomfiledValue];
// ids
if (gids) {
try {
let getGeomPrams = {
TableName: layer,
FieldName: 'gid',
FieldValue: gids,
page: 1,
limit: 999,
key: null,
};
getGeom(getGeomPrams).then((res) => {
let geoms = [];
if (res) {
if (res.items?.length > 0) {
res.items.forEach((item, index) => {
let geom = {
key: item.gid,
mapgeom: item.geometry,
};
geoms.push(geom);
});
}
});
} catch (e) {
createMessage.error('当前数据没有图斑!');
}
} else {
// MapboxComponent.value.handlerDraw(status,mapgemoList.value, false);
MapboxComponent.value.handlerDraw('Details', geoms, false);
} else {
createMessage.error('当前数据没有图斑!');
}
});
} catch (e) {
createMessage.error('当前数据没有图斑!');
}
} else {
createMessage.error('当前数据没有图斑!');
}
} catch {
createMessage.error('获取图斑数据失败!');
}
}
function onMapboxLoad() {
function onMapboxLoad() {}
}
//
//
const isShowImagePreview = ref<Boolean>(false);
const closeImagePreview = ()=>{
const closeImagePreview = () => {
isShowImagePreview.value = false;
}
const globalImagePreviewUrl=ref<String>();
};
const globalImagePreviewUrl = ref<String>();
const formFileStore = userFormFileStore();
const formFileState = storeToRefs(formFileStore);
watch(formFileState.url, (newValue, oldValue) => {

View File

@ -102,7 +102,7 @@
}
});
list.value = res;
cardRotationLoop();
// cardRotationLoop();
}
//
async function cardRotationLoop() {
@ -143,7 +143,7 @@
//
async function getHome(item) {
if (!item.linkOrApi) {
message.error('跳转链接为空');
message.warn('暂未开放');
return;
}
if (item.isExternal) {