Compare commits
6 Commits
0dc80b65d7
...
468afebc60
| Author | SHA1 | Date |
|---|---|---|
|
|
468afebc60 | |
|
|
8c6108e16e | |
|
|
b656067110 | |
|
|
47f1827500 | |
|
|
7a6d421fa5 | |
|
|
773f26f239 |
|
|
@ -88,3 +88,46 @@ export type RolePageListGetResultModel = BasicFetchResult<RoleListItem>;
|
||||||
export type RoleListGetResultModel = RoleListItem[];
|
export type RoleListGetResultModel = RoleListItem[];
|
||||||
|
|
||||||
export type addDeptModel = addDept[];
|
export type addDeptModel = addDept[];
|
||||||
|
|
||||||
|
export type ReportParams = BasicPageParams;
|
||||||
|
|
||||||
|
export interface ReportListItem {
|
||||||
|
id?:string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface NoticeListItem {
|
||||||
|
Id :string;
|
||||||
|
msg_title:string;
|
||||||
|
msg_content:string;
|
||||||
|
createtime:string;
|
||||||
|
createuser:string;
|
||||||
|
createusername:string;
|
||||||
|
is_delete:number;
|
||||||
|
msg_type:number;
|
||||||
|
case_no:string;
|
||||||
|
caseid:string;
|
||||||
|
is_read:number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UserListParams{
|
||||||
|
key:string;
|
||||||
|
page:number;
|
||||||
|
limit:number;
|
||||||
|
}
|
||||||
|
export interface UserListItem{
|
||||||
|
account:string;
|
||||||
|
name:string;
|
||||||
|
id:string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type UserListGetResultModel = BasicFetchResult<UserListItem>;
|
||||||
|
|
||||||
|
export interface StatisticalListItem{
|
||||||
|
account:string;
|
||||||
|
name:string;
|
||||||
|
id:string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type StatisticalListGetResultModel = BasicFetchResult<StatisticalListItem>;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,13 @@ import {
|
||||||
AccountListGetResultModel,
|
AccountListGetResultModel,
|
||||||
RolePageListGetResultModel,
|
RolePageListGetResultModel,
|
||||||
RoleListGetResultModel,
|
RoleListGetResultModel,
|
||||||
|
addDept,
|
||||||
|
ReportParams,
|
||||||
|
ReportListGetResultModel,
|
||||||
|
NoticeListGetResultModel,
|
||||||
|
UserListParams,
|
||||||
|
UserListGetResultModel,
|
||||||
|
StatisticalListGetResultModel,
|
||||||
} from './model/systemModel';
|
} from './model/systemModel';
|
||||||
import { defHttp } from '@/utils/http/axios';
|
import { defHttp } from '@/utils/http/axios';
|
||||||
|
|
||||||
|
|
@ -54,6 +61,14 @@ enum Api {
|
||||||
LoadDataBaseLinkTree = '/api/SysDatabaseLink/LoadDataBaseLinkTree',
|
LoadDataBaseLinkTree = '/api/SysDatabaseLink/LoadDataBaseLinkTree',
|
||||||
GetPosInfo = '/api/SysPosition/Get',
|
GetPosInfo = '/api/SysPosition/Get',
|
||||||
UpdatePosition = '/api/SysPosition/Update',
|
UpdatePosition = '/api/SysPosition/Update',
|
||||||
|
ReportList = '/api/DroneCaseinfo/LoadCaseInfoList',
|
||||||
|
NoticeList = '/api/DroneCaseinfo/LoadMessageList',
|
||||||
|
AddNotice = '/api/DroneCaseinfo/AddMessage',
|
||||||
|
UpdateNotice = '/api/DroneCaseinfo/UpdateMessage',
|
||||||
|
DeleteNotice = '/api/DroneCaseinfo/UpdateDelMessage',
|
||||||
|
UserList = '/api/users/load',
|
||||||
|
StatisticalList='/api/DroneCaseinfo/CaseSynthesisCensus',
|
||||||
|
LoadNoticeDetail="/api/DroneCaseinfo/LoadMessage",
|
||||||
getChildrenTree = '/api/Orgs/LoadChildren',
|
getChildrenTree = '/api/Orgs/LoadChildren',
|
||||||
GetUserRoles = '/api/Roles/UserRoles',
|
GetUserRoles = '/api/Roles/UserRoles',
|
||||||
GetUserOrgs = '/api/Orgs/UserOrgs',
|
GetUserOrgs = '/api/Orgs/UserOrgs',
|
||||||
|
|
@ -249,6 +264,72 @@ export const getLoadDataBaseLinkTree = () => defHttp.get({ url: Api.LoadDataBase
|
||||||
|
|
||||||
export const getPosInfo = (params) => defHttp.get({ url: Api.GetPosInfo, params });
|
export const getPosInfo = (params) => defHttp.get({ url: Api.GetPosInfo, params });
|
||||||
|
|
||||||
|
|
||||||
export const getUserRoles = (params) => defHttp.get({ url: Api.GetUserRoles, params });
|
export const getUserRoles = (params) => defHttp.get({ url: Api.GetUserRoles, params });
|
||||||
|
|
||||||
export const getUserOrgs = (params) => defHttp.get({ url: Api.GetUserOrgs, params });
|
export const getUserOrgs = (params) => defHttp.get({ url: Api.GetUserOrgs, params });
|
||||||
|
|
||||||
|
export const getReportList = (params: ReportParams)=>
|
||||||
|
defHttp.get<ReportListGetResultModel>({ url: Api.ReportList, params });
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export const getStatisticalList = (params: ReportParams)=>
|
||||||
|
defHttp.get<StatisticalListGetResultModel>({ url: Api.StatisticalList, params });
|
||||||
|
|
||||||
|
export const getNoticeList = (params?:Object) =>
|
||||||
|
defHttp.get<NoticeListGetResultModel>({url:Api.NoticeList,params})
|
||||||
|
|
||||||
|
export function addNotice(params) {
|
||||||
|
return defHttp.post(
|
||||||
|
{
|
||||||
|
url: Api.AddNotice,
|
||||||
|
params,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function updateNotice(params) {
|
||||||
|
return defHttp.post(
|
||||||
|
{
|
||||||
|
url: Api.UpdateNotice,
|
||||||
|
params,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export function deleteNotice(params) {
|
||||||
|
return defHttp.post(
|
||||||
|
{
|
||||||
|
url: Api.DeleteNotice,
|
||||||
|
params,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getNoticeDetail(params) {
|
||||||
|
return defHttp.get(
|
||||||
|
{
|
||||||
|
url: Api.LoadNoticeDetail,
|
||||||
|
params,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export function getCaseInfoList(params){
|
||||||
|
return defHttp.get(
|
||||||
|
{
|
||||||
|
url: Api.ReportList,
|
||||||
|
params,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export const getUserList = (params: UserListParams)=>
|
||||||
|
defHttp.get<UserListGetResultModel>({ url: Api.UserList, params });
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,105 @@
|
||||||
|
<template>
|
||||||
|
<BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit">
|
||||||
|
|
||||||
|
<BasicForm @register="registerForm" >
|
||||||
|
|
||||||
|
</BasicForm>
|
||||||
|
</BasicModal>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref, computed, unref, reactive } from 'vue';
|
||||||
|
import { BasicModal, useModalInner } from '@/components/Modal';
|
||||||
|
import { BasicForm, useForm } from '@/components/Form';
|
||||||
|
import { formSchema,UserListParams } from './dept.data';
|
||||||
|
|
||||||
|
import { getDeptList, addNotice, updateNotice,getUserList, getRoleListByPage } from '@/api/demo/system';
|
||||||
|
import { useMessage } from '@/hooks/web/useMessage';
|
||||||
|
const { createMessage } = useMessage();
|
||||||
|
defineOptions({ name: 'DeptModal' });
|
||||||
|
|
||||||
|
|
||||||
|
const emit = defineEmits(['success', 'register']);
|
||||||
|
|
||||||
|
const isUpdate = ref(true);
|
||||||
|
|
||||||
|
const [registerForm, { resetFields, setFieldsValue, updateSchema, validate }] = useForm({
|
||||||
|
labelWidth: 100,
|
||||||
|
baseColProps: { span: 24 },
|
||||||
|
schemas: formSchema,
|
||||||
|
showActionButtonGroup: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
|
||||||
|
resetFields();
|
||||||
|
setModalProps({ confirmLoading: false });
|
||||||
|
isUpdate.value = !!data?.isUpdate;
|
||||||
|
if (unref(isUpdate)) {
|
||||||
|
setFieldsValue({
|
||||||
|
...data.record,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const roleList = await getRoleListByPage()
|
||||||
|
updateSchema({
|
||||||
|
field: 'roles',
|
||||||
|
componentProps: {
|
||||||
|
options:roleList.items
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const query:UserListParams = {key:"",page:1,limit:999};
|
||||||
|
const userList = await getUserList(query);
|
||||||
|
updateSchema({
|
||||||
|
field: 'recipientUserId',
|
||||||
|
componentProps: {
|
||||||
|
options:userList.items
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const treeData = await getDeptList();
|
||||||
|
|
||||||
|
updateSchema({
|
||||||
|
field: 'orgs',
|
||||||
|
componentProps: { treeData },
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
const getTitle = computed(() => (!unref(isUpdate) ? '新增通知' : '编辑通知'));
|
||||||
|
|
||||||
|
async function handleSubmit() {
|
||||||
|
try {
|
||||||
|
const values = await validate();
|
||||||
|
let query = values;
|
||||||
|
// 调用接口
|
||||||
|
if (!unref(isUpdate)) {
|
||||||
|
const data = await addNotice(query);
|
||||||
|
if (data) {
|
||||||
|
setModalProps({ confirmLoading: true });
|
||||||
|
closeModal();
|
||||||
|
emit('success');
|
||||||
|
return createMessage.success('新增成功');
|
||||||
|
} else {
|
||||||
|
return createMessage.error('新增失败');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const data = await updateNotice(query);
|
||||||
|
if (data) {
|
||||||
|
setModalProps({ confirmLoading: true });
|
||||||
|
closeModal();
|
||||||
|
emit('success');
|
||||||
|
return createMessage.success('编辑成功');
|
||||||
|
} else {
|
||||||
|
return createMessage.error('编辑失败');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
setModalProps({ confirmLoading: false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// function handleRoleOptions(){
|
||||||
|
|
||||||
|
// }
|
||||||
|
</script>
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
<template>
|
||||||
|
<div class="m-4 mr-0 overflow-hidden bg-white">
|
||||||
|
<BasicTree ref="asyncExpandTreeRef" title="部门列表" toolbar search
|
||||||
|
treeWrapperClassName="h-[calc(100%-35px)] overflow-auto" loadData :actionList="actionList"
|
||||||
|
:renderIcon="createIcon" :clickRowToExpand="false" :treeData="treeData" :fieldNames="{ key: 'id', title: 'name' }"
|
||||||
|
:defaultExpandAll="true" @select="handleSelect" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { onMounted, ref , nextTick, unref} from 'vue';
|
||||||
|
|
||||||
|
import { BasicTree, TreeItem ,TreeActionType} from '@/components/Tree';
|
||||||
|
import { getDeptList } from '@/api/demo/system';
|
||||||
|
|
||||||
|
defineOptions({ name: 'DeptTree' });
|
||||||
|
|
||||||
|
const emit = defineEmits(['select']);
|
||||||
|
|
||||||
|
const treeData = ref < TreeItem[] > ([]);
|
||||||
|
const asyncExpandTreeRef = ref < Nullable < TreeActionType >> (null);
|
||||||
|
|
||||||
|
async function fetch() {
|
||||||
|
treeData.value = (await getDeptList()) as unknown as TreeItem[];
|
||||||
|
// 展开全部
|
||||||
|
nextTick(() => {
|
||||||
|
unref(asyncExpandTreeRef)?.expandAll(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleSelect(keys) {
|
||||||
|
emit('select', keys[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
fetch();
|
||||||
|
});
|
||||||
|
defineExpose({
|
||||||
|
fetch
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
@ -0,0 +1,59 @@
|
||||||
|
<template>
|
||||||
|
<BasicModal v-bind="$attrs" @register="registerModal" title="给部门分配职级组" @ok="handleSubmit">
|
||||||
|
<BasicForm @register="registerForm" :model="modelRef"/>
|
||||||
|
</BasicModal>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref } from 'vue';
|
||||||
|
import { BasicModal, useModalInner } from '@/components/Modal';
|
||||||
|
import { BasicForm, useForm } from '@/components/Form';
|
||||||
|
import { formGroupSchema } from './dept.data';
|
||||||
|
|
||||||
|
import { orgPosGroup} from '@/api/demo/system';
|
||||||
|
import { useMessage } from '@/hooks/web/useMessage';
|
||||||
|
const { createMessage } = useMessage();
|
||||||
|
defineOptions({ name: 'PosGroupModal' });
|
||||||
|
|
||||||
|
const emit = defineEmits(['success', 'register']);
|
||||||
|
|
||||||
|
const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
|
||||||
|
labelWidth: 100,
|
||||||
|
baseColProps: { span: 24 },
|
||||||
|
schemas: formGroupSchema,
|
||||||
|
showActionButtonGroup: false,
|
||||||
|
});
|
||||||
|
let depeId = ref()
|
||||||
|
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
|
||||||
|
resetFields();
|
||||||
|
setModalProps({ confirmLoading: false });
|
||||||
|
|
||||||
|
depeId.value = data.record.id
|
||||||
|
setFieldsValue({
|
||||||
|
...data.record,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
async function handleSubmit() {
|
||||||
|
try {
|
||||||
|
const values = await validate();
|
||||||
|
let query = {
|
||||||
|
orgId:depeId.value,
|
||||||
|
posGroupId:values.posGroupId,
|
||||||
|
}
|
||||||
|
// 调用接口
|
||||||
|
const data = await orgPosGroup(query);
|
||||||
|
if(data){
|
||||||
|
setModalProps({ confirmLoading: true });
|
||||||
|
// TODO custom api
|
||||||
|
closeModal();
|
||||||
|
emit('success');
|
||||||
|
return createMessage.success('成功');
|
||||||
|
}else{
|
||||||
|
return createMessage.error('失败');
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
setModalProps({ confirmLoading: false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -0,0 +1,234 @@
|
||||||
|
import { BasicColumn, FormSchema } from '@/components/Table';
|
||||||
|
import { getDataBaseCodeList } from '@/api/formdesign/index';
|
||||||
|
|
||||||
|
// 数据源table
|
||||||
|
export const dbsourcesColumns: BasicColumn[] = [
|
||||||
|
{
|
||||||
|
title: 'ID',
|
||||||
|
dataIndex: 'id',
|
||||||
|
ifShow: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '编码',
|
||||||
|
dataIndex: 'code',
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '名称',
|
||||||
|
dataIndex: 'name',
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '数据库',
|
||||||
|
dataIndex: 'dbId',
|
||||||
|
width: 80,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '创建人',
|
||||||
|
dataIndex: 'createUserName',
|
||||||
|
width: 80,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '创建时间',
|
||||||
|
dataIndex: 'createDate',
|
||||||
|
width: 80,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '创建人id',
|
||||||
|
dataIndex: 'reateUserId',
|
||||||
|
ifShow: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '备注',
|
||||||
|
dataIndex: 'description',
|
||||||
|
ifShow: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'ID',
|
||||||
|
dataIndex: 'id',
|
||||||
|
ifShow: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'modifyDate',
|
||||||
|
dataIndex: 'modifyDate',
|
||||||
|
ifShow: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'modifyUserId',
|
||||||
|
dataIndex: 'modifyUserId',
|
||||||
|
ifShow: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'modifyUserName',
|
||||||
|
dataIndex: 'modifyUserName',
|
||||||
|
ifShow: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'SQL',
|
||||||
|
dataIndex: 'sql',
|
||||||
|
ifShow: false,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
// 数据源table-搜索
|
||||||
|
export const searchFormSchema: FormSchema[] = [
|
||||||
|
{
|
||||||
|
field: 'keyword',
|
||||||
|
label: '名称',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 8 },
|
||||||
|
},
|
||||||
|
];
|
||||||
|
// 数据源table-新增、编辑
|
||||||
|
export const formSchema: FormSchema[] = [
|
||||||
|
{
|
||||||
|
field: 'code',
|
||||||
|
component: 'Input',
|
||||||
|
label: '编号',
|
||||||
|
colProps: {
|
||||||
|
span: 24,
|
||||||
|
},
|
||||||
|
defaultValue: '',
|
||||||
|
required: true,
|
||||||
|
componentProps: {
|
||||||
|
placeholder: '请输入',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'name',
|
||||||
|
component: 'Input',
|
||||||
|
label: '名称',
|
||||||
|
colProps: {
|
||||||
|
span: 24,
|
||||||
|
},
|
||||||
|
defaultValue: '',
|
||||||
|
required: true,
|
||||||
|
componentProps: {
|
||||||
|
placeholder: '请输入',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'dbId',
|
||||||
|
component: 'ApiTreeSelect',
|
||||||
|
label: '数据库',
|
||||||
|
required: true,
|
||||||
|
colProps: {
|
||||||
|
span: 24,
|
||||||
|
},
|
||||||
|
componentProps: {
|
||||||
|
api: () =>
|
||||||
|
getDataBaseCodeList({}).then((data: Recordable) => {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
resolve(data);
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
labelField: 'text',
|
||||||
|
valueField: 'value',
|
||||||
|
async: true,
|
||||||
|
onChange: (e, v) => {
|
||||||
|
console.log('ApiTreeSelect====>:', e, v);
|
||||||
|
},
|
||||||
|
onLoadData: ({ treeData, resolve, treeNode }) => {
|
||||||
|
setTimeout(() => {
|
||||||
|
const children: Recordable[] = [];
|
||||||
|
treeData.value.forEach((item) => {
|
||||||
|
if (item.id == treeNode.id) {
|
||||||
|
if (item.childNodes) {
|
||||||
|
item.childNodes.forEach((val) => {
|
||||||
|
children.push({
|
||||||
|
text: val.text,
|
||||||
|
value: val.value,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
children.forEach((item) => {
|
||||||
|
item.isLeaf = false;
|
||||||
|
item.children = [];
|
||||||
|
});
|
||||||
|
treeNode.dataRef.children = children;
|
||||||
|
treeData.value = [...treeData.value];
|
||||||
|
resolve();
|
||||||
|
return;
|
||||||
|
}, 300);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'sql',
|
||||||
|
component: 'InputTextArea',
|
||||||
|
label: 'SQL语句',
|
||||||
|
colProps: {
|
||||||
|
span: 24,
|
||||||
|
},
|
||||||
|
defaultValue: '',
|
||||||
|
required: true,
|
||||||
|
componentProps: {
|
||||||
|
placeholder: '',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'description',
|
||||||
|
component: 'InputTextArea',
|
||||||
|
label: '描述',
|
||||||
|
colProps: {
|
||||||
|
span: 24,
|
||||||
|
},
|
||||||
|
defaultValue: '',
|
||||||
|
componentProps: {
|
||||||
|
placeholder: '请输入',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'id',
|
||||||
|
component: 'Input',
|
||||||
|
label: 'id',
|
||||||
|
ifShow: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'createUserId',
|
||||||
|
component: 'Input',
|
||||||
|
label: '创建人',
|
||||||
|
ifShow: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'createUserName',
|
||||||
|
component: 'Input',
|
||||||
|
label: '创建人',
|
||||||
|
ifShow: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'createDate',
|
||||||
|
component: 'Input',
|
||||||
|
label: '创建时间',
|
||||||
|
ifShow: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'modifyUserId',
|
||||||
|
component: 'Input',
|
||||||
|
label: '修改人',
|
||||||
|
ifShow: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'modifyUserName',
|
||||||
|
component: 'Input',
|
||||||
|
label: '修改人',
|
||||||
|
ifShow: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'modifyDate',
|
||||||
|
component: 'Input',
|
||||||
|
label: '修改时间',
|
||||||
|
ifShow: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'isEdit',
|
||||||
|
component: 'Input',
|
||||||
|
ifShow: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'tenantId',
|
||||||
|
component: 'Input',
|
||||||
|
ifShow: false,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
@ -0,0 +1,193 @@
|
||||||
|
import { BasicColumn, FormSchema } from '@/components/Table';
|
||||||
|
import { h } from 'vue';
|
||||||
|
import { Tag } from 'ant-design-vue';
|
||||||
|
import { getPosGroupList } from '@/api/demo/system';
|
||||||
|
|
||||||
|
export const columns: BasicColumn[] = [
|
||||||
|
{
|
||||||
|
title: '标题',
|
||||||
|
dataIndex: 'msg_title',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '内容',
|
||||||
|
dataIndex: 'msg_content',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '编辑人',
|
||||||
|
dataIndex: 'createusername',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '创建时间',
|
||||||
|
dataIndex: 'createtime',
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// title: '操作',
|
||||||
|
// dataIndex: 'operate',
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// title: '备注',
|
||||||
|
// dataIndex: 'remark',
|
||||||
|
// },
|
||||||
|
];
|
||||||
|
|
||||||
|
export const searchFormSchema: FormSchema[] = [
|
||||||
|
{
|
||||||
|
field: 'key',
|
||||||
|
label: '关键字段',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},{
|
||||||
|
field: 'msg_type',
|
||||||
|
component: 'Select',
|
||||||
|
label: '通知类型',
|
||||||
|
colProps: {
|
||||||
|
span: 6,
|
||||||
|
},
|
||||||
|
componentProps: {
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
label: '政策法规',
|
||||||
|
value: '0',
|
||||||
|
key: '0',
|
||||||
|
},{
|
||||||
|
label: '消息通知',
|
||||||
|
value: '1',
|
||||||
|
key: '1',
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
];
|
||||||
|
export interface UserListParams{
|
||||||
|
key:string;
|
||||||
|
page:number;
|
||||||
|
limit:number;
|
||||||
|
}
|
||||||
|
export const formGroupSchema: FormSchema[] = [
|
||||||
|
{
|
||||||
|
field: 'posGroupId',
|
||||||
|
component: 'ApiSelect',
|
||||||
|
label: '职级组',
|
||||||
|
required: true,
|
||||||
|
componentProps: ({ formActionType, formModel }) => {
|
||||||
|
return {
|
||||||
|
api: getPosGroupList, // 接口
|
||||||
|
// 接口参数
|
||||||
|
resultField: 'result',
|
||||||
|
labelField: 'name',
|
||||||
|
valueField: 'id',
|
||||||
|
};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export const formSchema: FormSchema[] = [
|
||||||
|
{
|
||||||
|
field: 'Id',
|
||||||
|
label: '名称',
|
||||||
|
component: 'Input',
|
||||||
|
ifShow:false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'msg_title',
|
||||||
|
label: '通知标题',
|
||||||
|
component: 'Input',
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'msg_content',
|
||||||
|
label: '通知内容',
|
||||||
|
component: 'InputTextArea',
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'msg_type',
|
||||||
|
label: '通知类型',
|
||||||
|
component: 'RadioButtonGroup',
|
||||||
|
defaultValue: 0,
|
||||||
|
componentProps: {
|
||||||
|
options: [
|
||||||
|
{ label: '政策法规', value: 0 },
|
||||||
|
{ label: '消息通知', value: 1 },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
required: true,
|
||||||
|
},{
|
||||||
|
field: 'is_all',
|
||||||
|
label: '是否全选',
|
||||||
|
component: 'RadioButtonGroup',
|
||||||
|
defaultValue: 0,
|
||||||
|
componentProps: {
|
||||||
|
options: [
|
||||||
|
{ label: '否', value: 0 },
|
||||||
|
{ label: '是', value: 1 },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
required: true,
|
||||||
|
},{
|
||||||
|
field: 'is_all',
|
||||||
|
label: '是否全选',
|
||||||
|
component: 'RadioButtonGroup',
|
||||||
|
defaultValue: 0,
|
||||||
|
componentProps: {
|
||||||
|
options: [
|
||||||
|
{ label: '否', value: 0 },
|
||||||
|
{ label: '是', value: 1 },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'roles',
|
||||||
|
component: 'Select',
|
||||||
|
label: '选择角色',
|
||||||
|
colProps: {
|
||||||
|
span: 24,
|
||||||
|
},
|
||||||
|
componentProps: {
|
||||||
|
mode:"multiple",
|
||||||
|
fieldNames: {
|
||||||
|
label: 'name',
|
||||||
|
value: 'id',
|
||||||
|
},
|
||||||
|
options: [], // defalut []
|
||||||
|
placeholder: '请选择角色',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'recipientUserId',
|
||||||
|
component: 'Select',
|
||||||
|
label: '选择用户',
|
||||||
|
colProps: {
|
||||||
|
span: 24,
|
||||||
|
},
|
||||||
|
componentProps: {
|
||||||
|
mode:"multiple",
|
||||||
|
fieldNames: {
|
||||||
|
label: 'name',
|
||||||
|
value: 'id',
|
||||||
|
},
|
||||||
|
options: [], // defalut []
|
||||||
|
placeholder: '请选择用户',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'orgs',
|
||||||
|
label: '选择部门',
|
||||||
|
component: 'TreeSelect',
|
||||||
|
componentProps: {
|
||||||
|
treeCheckable:true,
|
||||||
|
fieldNames: {
|
||||||
|
label: 'name',
|
||||||
|
value: 'id',
|
||||||
|
},
|
||||||
|
onChange:(value)=>{
|
||||||
|
console.log(value)
|
||||||
|
},
|
||||||
|
getPopupContainer: () => document.body,
|
||||||
|
},
|
||||||
|
// required: true,
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
];
|
||||||
|
|
@ -0,0 +1,94 @@
|
||||||
|
<template>
|
||||||
|
<BasicDrawer v-bind="$attrs" @register="registerDrawer" :title="getTitle" width="70%">
|
||||||
|
<BasicTable
|
||||||
|
class="w-4/4 xl:w-5/5"
|
||||||
|
@register="registerTable"
|
||||||
|
@fetch-success="onFetchSuccess"
|
||||||
|
:searchInfo="searchInfo"
|
||||||
|
>
|
||||||
|
<template #toolbar>
|
||||||
|
<span>关键字</span>
|
||||||
|
<a-select
|
||||||
|
:options="columnOptions"
|
||||||
|
v-model:value="field"
|
||||||
|
placeholder="请选择"
|
||||||
|
style="width: 120px"
|
||||||
|
size="mini"
|
||||||
|
/>
|
||||||
|
<a-input-search
|
||||||
|
v-model:value="searchValue"
|
||||||
|
placeholder="请输入查询关键字"
|
||||||
|
style="width: 200px"
|
||||||
|
@search="onSearch"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</BasicTable>
|
||||||
|
</BasicDrawer>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref, reactive } from 'vue';
|
||||||
|
import { BasicTable, useTable } from '@/components/Table';
|
||||||
|
import { BasicDrawer, useDrawerInner } from '@/components/Drawer';
|
||||||
|
// ts
|
||||||
|
import {} from './dbsource.data';
|
||||||
|
// api
|
||||||
|
import { fun_GetDataColName } from '@/api/demo/dbsource';
|
||||||
|
|
||||||
|
const tableData = ref();
|
||||||
|
const searchValue = ref();
|
||||||
|
// 下拉框
|
||||||
|
const columnOptions = ref([]);
|
||||||
|
// 下拉框选择的值
|
||||||
|
let field = ref('');
|
||||||
|
// 抽屉的标题
|
||||||
|
const getTitle = ref('');
|
||||||
|
|
||||||
|
// 抽屉
|
||||||
|
const [registerDrawer, { setDrawerProps }] = useDrawerInner(async (data) => {
|
||||||
|
clearSelectedRowKeys();
|
||||||
|
reload();
|
||||||
|
setDrawerProps({ confirmLoading: false });
|
||||||
|
getTitle.value = '查看数据源数据 - ' + data.name;
|
||||||
|
getColumnData(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 表格
|
||||||
|
const searchInfo = reactive<Recordable>({});
|
||||||
|
const [registerTable, { reload, clearSelectedRowKeys, setColumns }] = useTable({
|
||||||
|
dataSource: tableData,
|
||||||
|
rowKey: 'id',
|
||||||
|
striped: false,
|
||||||
|
useSearchForm: false,
|
||||||
|
bordered: true,
|
||||||
|
// 序号列
|
||||||
|
showIndexColumn: true,
|
||||||
|
handleSearchInfoFn(info) {
|
||||||
|
return info;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// 表格表头
|
||||||
|
async function getColumnData(record) {
|
||||||
|
let data = await fun_GetDataColName({ code: record.code });
|
||||||
|
let columns: string[] = [];
|
||||||
|
data.forEach((element) => {
|
||||||
|
columns.push({
|
||||||
|
title: element,
|
||||||
|
dataIndex: element,
|
||||||
|
label: element,
|
||||||
|
value: element,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
setColumns(columns);
|
||||||
|
// 下拉框
|
||||||
|
columnOptions.value = columns;
|
||||||
|
}
|
||||||
|
// 表格数据
|
||||||
|
async function setTableData() {
|
||||||
|
// tableData.value = columnData;
|
||||||
|
}
|
||||||
|
// 查找
|
||||||
|
function onSearch() {
|
||||||
|
console.log(field);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -0,0 +1,148 @@
|
||||||
|
<template>
|
||||||
|
<PageWrapper dense contentFullHeight fixedHeight contentClass="flex">
|
||||||
|
<BasicTable class="w-4/4 xl:w-5/5" @register="registerTable" :searchInfo="searchInfo">
|
||||||
|
<template #toolbar>
|
||||||
|
<PermissionBtn @btnEvent="onBtnClicked"></PermissionBtn>
|
||||||
|
</template>
|
||||||
|
</BasicTable>
|
||||||
|
<DeptModal @register="registerModal" @success="handleSuccess" />
|
||||||
|
<PosGroupModal @register="registerPosGroupModal" @success="handleSuccess"></PosGroupModal>
|
||||||
|
</PageWrapper>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { reactive, ref } from 'vue';
|
||||||
|
|
||||||
|
import { BasicTable, useTable } from '@/components/Table';
|
||||||
|
import { getNoticeList, deleteNotice,getNoticeDetail } from '@/api/demo/system';
|
||||||
|
import { PageWrapper } from '@/components/Page';
|
||||||
|
import { useModal } from '@/components/Modal';
|
||||||
|
import { useMessage } from '@/hooks/web/useMessage';
|
||||||
|
|
||||||
|
import { DeptTree } from './page';
|
||||||
|
import { DeptModal } from './page';
|
||||||
|
import { PosGroupModal } from './page';
|
||||||
|
import { PermissionBtn } from '@/components/PermissionBtn/index';
|
||||||
|
import { columns, searchFormSchema } from './dept.data';
|
||||||
|
|
||||||
|
defineOptions({ name: 'DeptManagement' });
|
||||||
|
const { createConfirm, createMessage } = useMessage();
|
||||||
|
|
||||||
|
const [registerModal, { openModal: openDeptModal }] = useModal();
|
||||||
|
const [registerPosGroupModal, { openModal: openPosGroupModal }] = useModal();
|
||||||
|
const searchInfo = reactive<Recordable>({});
|
||||||
|
|
||||||
|
const [registerTable, { reload, getSelectRows, clearSelectedRowKeys }] = useTable({
|
||||||
|
title: '通知详情',
|
||||||
|
api: getNoticeList,
|
||||||
|
rowKey: 'Id',
|
||||||
|
columns,
|
||||||
|
formConfig: {
|
||||||
|
labelWidth: 120,
|
||||||
|
schemas: searchFormSchema,
|
||||||
|
},
|
||||||
|
rowSelection: {
|
||||||
|
//多选框
|
||||||
|
type: 'checkbox',
|
||||||
|
// type: 'radio',
|
||||||
|
},
|
||||||
|
useSearchForm: true,
|
||||||
|
showTableSetting: true,
|
||||||
|
bordered: true,
|
||||||
|
handleSearchInfoFn(info) {
|
||||||
|
return info;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
async function handlePoGroup() {
|
||||||
|
let rows = getSelectRows();
|
||||||
|
if (!rows.length) {
|
||||||
|
return createMessage.warn('请选择一个部门');
|
||||||
|
}
|
||||||
|
var record = rows[0];
|
||||||
|
openPosGroupModal(true, {
|
||||||
|
record,
|
||||||
|
isUpdate: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const childRef = ref<any>();
|
||||||
|
|
||||||
|
function handlePreViewData(){
|
||||||
|
|
||||||
|
}
|
||||||
|
function handleCreate() {
|
||||||
|
openDeptModal(true, {
|
||||||
|
isUpdate: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleEdit() {
|
||||||
|
let rows = getSelectRows();
|
||||||
|
if (rows.length != 1) {
|
||||||
|
return createMessage.warn('请选择一条数据进行编辑');
|
||||||
|
}
|
||||||
|
const record = rows[0];
|
||||||
|
|
||||||
|
// let res:any = getNoticeDetail({id:rows[0].Id});
|
||||||
|
// const record = res.result;
|
||||||
|
// console.log("record",res);
|
||||||
|
openDeptModal(true, {
|
||||||
|
record,
|
||||||
|
isUpdate: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function handleDelete() {
|
||||||
|
let rows = getSelectRows();
|
||||||
|
|
||||||
|
if (rows.length == 0) {
|
||||||
|
return createMessage.warn('请选择一条通知进行删除');
|
||||||
|
}
|
||||||
|
const query = [];
|
||||||
|
rows.forEach((item,index)=>{
|
||||||
|
query.push(item.Id);
|
||||||
|
})
|
||||||
|
|
||||||
|
createConfirm({
|
||||||
|
iconType: 'info',
|
||||||
|
title: '删除',
|
||||||
|
content: '确定要删除当前通知吗',
|
||||||
|
onOk: async () => {
|
||||||
|
const data = await deleteNotice(query);
|
||||||
|
if (data) {
|
||||||
|
handleSuccess();
|
||||||
|
return createMessage.success('删除成功');
|
||||||
|
} else {
|
||||||
|
return createMessage.error('删除失败');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function onBtnClicked(domId) {
|
||||||
|
switch (domId) {
|
||||||
|
case 'btnAdd':
|
||||||
|
handleCreate();
|
||||||
|
break;
|
||||||
|
case 'btnEdit':
|
||||||
|
handleEdit();
|
||||||
|
break;
|
||||||
|
case 'btnDelete':
|
||||||
|
handleDelete();
|
||||||
|
break;
|
||||||
|
case 'btnPoGroup':
|
||||||
|
handlePoGroup();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function handleSelect(orgId = '') {
|
||||||
|
searchInfo.orgId = orgId;
|
||||||
|
reload();
|
||||||
|
}
|
||||||
|
function handleSuccess() {
|
||||||
|
clearSelectedRowKeys();
|
||||||
|
// childRef.value.fetch();
|
||||||
|
reload();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -0,0 +1,116 @@
|
||||||
|
<template>
|
||||||
|
<BasicModal
|
||||||
|
v-bind="$attrs"
|
||||||
|
@register="registerModal"
|
||||||
|
:centered="true"
|
||||||
|
:canFullscreen="false"
|
||||||
|
:defaultFullscreen="false"
|
||||||
|
:showCancelBtn="true"
|
||||||
|
:showOkBtn="true"
|
||||||
|
:draggable="false"
|
||||||
|
:title="getTitle"
|
||||||
|
:useWrapper="true"
|
||||||
|
@ok="handleOk"
|
||||||
|
>
|
||||||
|
<BasicForm ref="registerFormRef" @register="registerForm" />
|
||||||
|
</BasicModal>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref, computed, unref, defineEmits } from 'vue';
|
||||||
|
import { BasicModal, useModalInner } from '@/components/Modal';
|
||||||
|
import { BasicForm, useForm } from '@/components/Form';
|
||||||
|
import { useMessage } from '@/hooks/web/useMessage';
|
||||||
|
|
||||||
|
// ts
|
||||||
|
import { formSchema } from './dbsource.data';
|
||||||
|
// api
|
||||||
|
import { fun_AddForm, fun_UpdateForm } from '@/api/demo/dbsource';
|
||||||
|
|
||||||
|
const emit = defineEmits(['submit']);
|
||||||
|
const { createMessage } = useMessage();
|
||||||
|
|
||||||
|
// 是否是修改
|
||||||
|
const isUpdate = ref(false);
|
||||||
|
// 标题
|
||||||
|
const getTitle = computed(() => (unref(isUpdate) ? '编辑数据源' : '新增数据源'));
|
||||||
|
// 窗口
|
||||||
|
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
|
||||||
|
setModalProps({ confirmLoading: false });
|
||||||
|
isUpdate.value = data.isUpdate;
|
||||||
|
if (isUpdate.value) {
|
||||||
|
setFieldsValue(data.record);
|
||||||
|
} else {
|
||||||
|
validate();
|
||||||
|
resetFields();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 表单form
|
||||||
|
const registerFormRef = ref<any>();
|
||||||
|
const [registerForm, { setFieldsValue, getFieldsValue, resetFields, validate }] = useForm({
|
||||||
|
labelWidth: 100,
|
||||||
|
schemas: formSchema,
|
||||||
|
showActionButtonGroup: false,
|
||||||
|
baseColProps: { lg: 24, md: 24 },
|
||||||
|
});
|
||||||
|
|
||||||
|
// 提交
|
||||||
|
async function handleOk() {
|
||||||
|
validate();
|
||||||
|
let record = getFieldsValue();
|
||||||
|
let params = {
|
||||||
|
code: record.code,
|
||||||
|
name: record.name,
|
||||||
|
dbId: record.dbId,
|
||||||
|
sql: record.sql,
|
||||||
|
description: record.description,
|
||||||
|
};
|
||||||
|
if (isUpdate.value) {
|
||||||
|
// 修改
|
||||||
|
params.id = record.id;
|
||||||
|
params.createUserName = record.createUserName;
|
||||||
|
params.createDate = record.createDate;
|
||||||
|
let data = await fun_UpdateForm(params);
|
||||||
|
if (data) {
|
||||||
|
createMessage.success('修改成功!');
|
||||||
|
closeModal();
|
||||||
|
emit('submit');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 新增
|
||||||
|
params.createUserName = localStorage.getItem('fireUserLoginName');
|
||||||
|
params.createDate = new Date();
|
||||||
|
let data = await fun_AddForm(params);
|
||||||
|
if (data) {
|
||||||
|
createMessage.success('新增成功!');
|
||||||
|
closeModal();
|
||||||
|
emit('submit');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.l-rblock {
|
||||||
|
width: 60%;
|
||||||
|
height: 60%;
|
||||||
|
background-color: @border-color-base;
|
||||||
|
|
||||||
|
&_content {
|
||||||
|
box-sizing: border-box;
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
max-width: 794px;
|
||||||
|
overflow: hidden auto;
|
||||||
|
background: @component-background;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin: auto;
|
||||||
|
padding: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&_formLine {
|
||||||
|
height: 50px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
|
||||||
|
export { default as DeptTree } from './DeptTree.vue';
|
||||||
|
export { default as DeptModal } from './DeptModal.vue';
|
||||||
|
export { default as PosGroupModal } from './PosGroupModal.vue';
|
||||||
|
|
||||||
|
|
@ -0,0 +1,440 @@
|
||||||
|
<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>
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
export interface caseDetailObj {
|
||||||
|
case_no?: string;
|
||||||
|
identification_user?: string;
|
||||||
|
identification_time?: string;
|
||||||
|
handle_status_id?: number;
|
||||||
|
handle_status_name?: string;
|
||||||
|
countyname?: string;
|
||||||
|
streetname?: string;
|
||||||
|
communityname?: string;
|
||||||
|
address?: string;
|
||||||
|
lng?: number;
|
||||||
|
lat?: number;
|
||||||
|
area?: number;
|
||||||
|
typename?: string;
|
||||||
|
remark?: string;
|
||||||
|
case_description?: string;
|
||||||
|
}
|
||||||
|
export interface infoObj{
|
||||||
|
createusername?: string;
|
||||||
|
createtime?:string;
|
||||||
|
verifystatusname?:string;
|
||||||
|
measure_name?:string;
|
||||||
|
result_name?: string;
|
||||||
|
contacts_people?: string;
|
||||||
|
contacts_phone?: string;
|
||||||
|
actual_scene_case?: string;
|
||||||
|
actual_use_to?: string;
|
||||||
|
pseudo_change_reason?: string;
|
||||||
|
actual_area?: string;
|
||||||
|
is_have_build?: number;
|
||||||
|
is_forever_build?: number;
|
||||||
|
illegal_contact?: string;
|
||||||
|
is_build_complete?: number;
|
||||||
|
is_have_checkout_condition?: number;
|
||||||
|
illegal_contact_phone?: string;
|
||||||
|
build_structure?: string;
|
||||||
|
illegal_type?: string;
|
||||||
|
remark?: string;
|
||||||
|
transactor_name?: string;
|
||||||
|
transact_time?: string;
|
||||||
|
evidence_file_name?: string;
|
||||||
|
evidence_file_number?: string;
|
||||||
|
evidence_file_indate?: string;
|
||||||
|
illegal_contact_idcard?: string;
|
||||||
|
registr_number?: string;
|
||||||
|
procedure_indate?:string;
|
||||||
|
}
|
||||||
|
export interface caseHandleInfoObj {
|
||||||
|
info:infoObj
|
||||||
|
is_illegal?: string;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
<template>
|
||||||
|
<a-descriptions bordered :column="2" size="small" :labelStyle="labelStyle">
|
||||||
|
<a-descriptions-item label="审核人">
|
||||||
|
{{ auditData.user_name }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="审核时间">
|
||||||
|
{{ auditData.time }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
</a-descriptions>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref, watch } from 'vue';
|
||||||
|
const labelStyle = ref({
|
||||||
|
width: '100px',
|
||||||
|
});
|
||||||
|
const auditData: any = ref({});
|
||||||
|
const props = defineProps({
|
||||||
|
data: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
console.log(props.data);
|
||||||
|
auditData.value = props.data;
|
||||||
|
watch(
|
||||||
|
() => props.data,
|
||||||
|
(newVal, oldVal) => {
|
||||||
|
auditData.value = newVal;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
<style lang="less" scoped>
|
||||||
|
::v-deep .ant-image .ant-image-img {
|
||||||
|
width: 85px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,85 @@
|
||||||
|
<template>
|
||||||
|
<a-descriptions bordered :column="2" size="small" :labelStyle="labelStyle">
|
||||||
|
<a-descriptions-item label="办理人">{{
|
||||||
|
caseHandleInfo.info.transactor_name
|
||||||
|
}}</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="办理时间">
|
||||||
|
{{ caseHandleInfo.info.transact_time }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="拟拆除后照片">
|
||||||
|
<div>
|
||||||
|
<ImagePreview :imageList="imgList" />
|
||||||
|
</div>
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="视频">
|
||||||
|
<div v-if="videoOptions.length > 0">
|
||||||
|
<video-player
|
||||||
|
class="video-player vjs-custom-skin"
|
||||||
|
v-for="(item, index) in videoOptions"
|
||||||
|
:key="index"
|
||||||
|
ref="videoPlayer"
|
||||||
|
:playsinline="true"
|
||||||
|
:options="item"
|
||||||
|
style="width: 200px"
|
||||||
|
></video-player>
|
||||||
|
</div>
|
||||||
|
</a-descriptions-item>
|
||||||
|
</a-descriptions>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { reactive, watch, ref } from 'vue';
|
||||||
|
import { ImagePreview } from '@/components/Preview';
|
||||||
|
import { caseHandleInfoObj } from '../model';
|
||||||
|
const labelStyle = ref({
|
||||||
|
width: '100px',
|
||||||
|
});
|
||||||
|
const caseHandleInfo = ref<caseHandleInfoObj>({
|
||||||
|
info: {},
|
||||||
|
});
|
||||||
|
const videoOptions: any = ref([]);
|
||||||
|
const threadAfterImageList: any = ref([]);
|
||||||
|
const props = defineProps({
|
||||||
|
data: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
videoOptions: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
threadAfterImageList: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
caseHandleInfo.value = props.data;
|
||||||
|
videoOptions.value = props.videoOptions;
|
||||||
|
threadAfterImageList.value = props.threadImageList;
|
||||||
|
const imgList = ref([
|
||||||
|
'https://picsum.photos/id/66/346/216',
|
||||||
|
'https://picsum.photos/id/67/346/216',
|
||||||
|
'https://picsum.photos/id/68/346/216',
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.data,
|
||||||
|
(newVal, oldVal) => {
|
||||||
|
caseHandleInfo.value = newVal;
|
||||||
|
videoOptions.value = props.videoOptions;
|
||||||
|
threadImageList.value = props.threadImageList;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
<style lang="less" scoped>
|
||||||
|
::v-deep .ant-image .ant-image-img {
|
||||||
|
width: 85px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,97 @@
|
||||||
|
<template>
|
||||||
|
<a-descriptions bordered :column="2" size="small" :labelStyle="labelStyle">
|
||||||
|
<a-descriptions-item label="办理人">{{
|
||||||
|
caseHandleInfo.info.transactor_name
|
||||||
|
}}</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="办理时间">
|
||||||
|
{{ caseHandleInfo.info.transact_time }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="批准文件名称">
|
||||||
|
{{ caseHandleInfo.info.evidence_file_name }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="批准文件编号">
|
||||||
|
{{ caseHandleInfo.info.evidence_file_number }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="批文有效日期">
|
||||||
|
{{ caseHandleInfo.info.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>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { watch, ref } from 'vue';
|
||||||
|
import { ImagePreview } from '@/components/Preview';
|
||||||
|
import { caseHandleInfoObj } from '../model';
|
||||||
|
const labelStyle = ref({
|
||||||
|
width: '100px',
|
||||||
|
});
|
||||||
|
const caseHandleInfo = ref<caseHandleInfoObj>({
|
||||||
|
info: {},
|
||||||
|
});
|
||||||
|
const playerOptions: any = ref([]);
|
||||||
|
const boundaryImageList: any = ref([]);
|
||||||
|
const evidenceFileList: any = ref([]);
|
||||||
|
const props = defineProps({
|
||||||
|
data: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
playerOptions: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
boundaryImageList: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
evidenceFileList: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
caseHandleInfo.value = props.data;
|
||||||
|
playerOptions.value = props.playerOptions;
|
||||||
|
boundaryImageList.value = props.boundaryImageList;
|
||||||
|
evidenceFileList.value = props.boundaryImageList;
|
||||||
|
const imgList = ref([
|
||||||
|
'https://picsum.photos/id/66/346/216',
|
||||||
|
'https://picsum.photos/id/67/346/216',
|
||||||
|
'https://picsum.photos/id/68/346/216',
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.data,
|
||||||
|
(newVal, oldVal) => {
|
||||||
|
caseHandleInfo.value = newVal;
|
||||||
|
playerOptions.value = props.playerOptions;
|
||||||
|
boundaryImageList.value = props.boundaryImageList;
|
||||||
|
evidenceFileList.value = props.boundaryImageList;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
<style lang="less" scoped>
|
||||||
|
::v-deep .ant-image .ant-image-img {
|
||||||
|
width: 85px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
@ -0,0 +1,247 @@
|
||||||
|
<template>
|
||||||
|
<a-descriptions bordered :column="2" size="small" :labelStyle="labelStyle">
|
||||||
|
<a-descriptions-item label="核查人">{{
|
||||||
|
caseHandleInfo.info.createusername
|
||||||
|
}}</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="核查时间">
|
||||||
|
{{ caseHandleInfo.info.createtime }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="处理进度">
|
||||||
|
{{ caseHandleInfo.info.verifystatusname }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="是否违法">
|
||||||
|
{{ caseHandleInfo.is_illegal }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="处理措施" v-if="caseHandleInfo.is_illegal == '是'">
|
||||||
|
{{ caseHandleInfo.info.measure_name }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
|
||||||
|
<!-- 合法 -->
|
||||||
|
<a-descriptions-item label="项目名称" v-if="caseHandleInfo.is_illegal == '合法'">
|
||||||
|
{{ caseHandleInfo.info.result_name }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="当事人" v-if="caseHandleInfo.is_illegal == '合法'">
|
||||||
|
{{ caseHandleInfo.info.contacts_people }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="联系电话" v-if="caseHandleInfo.is_illegal == '合法'">
|
||||||
|
{{ caseHandleInfo.info.contacts_phone }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="建设情况" v-if="caseHandleInfo.is_illegal == '合法'">
|
||||||
|
{{ caseHandleInfo.info.actual_scene_case }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="实际用途" v-if="caseHandleInfo.is_illegal == '合法'">
|
||||||
|
{{ caseHandleInfo.info.actual_use_to }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
|
||||||
|
<!-- 伪变化 -->
|
||||||
|
<a-descriptions-item label="伪变化原因" v-if="caseHandleInfo.is_illegal == '伪变化'">
|
||||||
|
{{ caseHandleInfo.info.pseudo_change_reason }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="实际用途" v-if="caseHandleInfo.is_illegal == '伪变化'">
|
||||||
|
{{ caseHandleInfo.info.actual_use_to }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="实际面积" v-if="caseHandleInfo.is_illegal == '伪变化'">
|
||||||
|
{{ caseHandleInfo.info.actual_area }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="是否有建筑物" v-if="caseHandleInfo.is_illegal == '伪变化'">
|
||||||
|
{{ caseHandleInfo.info.is_have_build == 1 ? '是' : '否' }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="是否永久性建筑" v-if="caseHandleInfo.is_illegal == '伪变化'">
|
||||||
|
{{ caseHandleInfo.info.is_forever_build == 1 ? '是' : '否' }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
|
||||||
|
<!-- 案件违法 - 拆除 -->
|
||||||
|
<a-descriptions-item
|
||||||
|
label="处理办法"
|
||||||
|
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '拟拆除'"
|
||||||
|
>
|
||||||
|
{{ caseHandleInfo.info.measure_name }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item
|
||||||
|
label="实际用途"
|
||||||
|
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '拟拆除'"
|
||||||
|
>
|
||||||
|
{{ caseHandleInfo.info.actual_use_to }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item
|
||||||
|
label="当事人"
|
||||||
|
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '拟拆除'"
|
||||||
|
>
|
||||||
|
{{ caseHandleInfo.info.illegal_contact }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item
|
||||||
|
label="联系电话"
|
||||||
|
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '拟拆除'"
|
||||||
|
>
|
||||||
|
{{ caseHandleInfo.info.illegal_contact_phone }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item
|
||||||
|
label="建设情况"
|
||||||
|
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '拟拆除'"
|
||||||
|
>
|
||||||
|
{{ caseHandleInfo.info.is_build_complete == 1 ? '已建成' : '建设中' }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item
|
||||||
|
label="建筑结构"
|
||||||
|
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '拟拆除'"
|
||||||
|
>
|
||||||
|
{{ caseHandleInfo.info.build_structure }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
|
||||||
|
<!-- 案件违法 查处 -->
|
||||||
|
<a-descriptions-item
|
||||||
|
label="处理办法"
|
||||||
|
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '查处'"
|
||||||
|
>
|
||||||
|
{{ caseHandleInfo.info.measure_name }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item
|
||||||
|
label="实际用途"
|
||||||
|
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '查处'"
|
||||||
|
>
|
||||||
|
{{ caseHandleInfo.info.actual_use_to }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item
|
||||||
|
label="当事人"
|
||||||
|
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '查处'"
|
||||||
|
>
|
||||||
|
{{ caseHandleInfo.info.illegal_contact }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item
|
||||||
|
label="联系电话"
|
||||||
|
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '查处'"
|
||||||
|
>
|
||||||
|
{{ caseHandleInfo.info.illegal_contact_phone }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item
|
||||||
|
label="建筑结构"
|
||||||
|
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '查处'"
|
||||||
|
>
|
||||||
|
{{ caseHandleInfo.info.build_structure }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item
|
||||||
|
label="违法类型"
|
||||||
|
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '查处'"
|
||||||
|
>
|
||||||
|
{{ caseHandleInfo.info.illegal_type }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
|
||||||
|
<!-- 案件违法 完善手续 -->
|
||||||
|
<a-descriptions-item
|
||||||
|
label="处理办法"
|
||||||
|
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '拟完善手续'"
|
||||||
|
>
|
||||||
|
{{ caseHandleInfo.info.measure_name }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item
|
||||||
|
label="实际用途"
|
||||||
|
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '拟完善手续'"
|
||||||
|
>
|
||||||
|
{{ caseHandleInfo.info.actual_use_to }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item
|
||||||
|
label="当事人"
|
||||||
|
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '拟完善手续'"
|
||||||
|
>
|
||||||
|
{{ caseHandleInfo.info.illegal_contact }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item
|
||||||
|
label="联系电话"
|
||||||
|
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '拟完善手续'"
|
||||||
|
>
|
||||||
|
{{ caseHandleInfo.info.illegal_contact_phone }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item
|
||||||
|
label="拟完善手续名称"
|
||||||
|
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '拟完善手续'"
|
||||||
|
>
|
||||||
|
{{ caseHandleInfo.info.result_name }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item
|
||||||
|
label="是否具备完善手续条件"
|
||||||
|
v-if="caseHandleInfo.is_illegal == '违法' && caseHandleInfo.info.measure_name == '拟完善手续'"
|
||||||
|
>
|
||||||
|
{{ caseHandleInfo.info.is_have_checkout_condition == 1 ? '是' : '否' }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
|
||||||
|
<a-descriptions-item label="备注">
|
||||||
|
{{ caseHandleInfo.info.remark }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
|
||||||
|
<a-descriptions-item label="现场照片">
|
||||||
|
<div>
|
||||||
|
<ImagePreview :imageList="imgList" />
|
||||||
|
</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>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { reactive, watch, ref } from 'vue';
|
||||||
|
import { ImagePreview } from '@/components/Preview';
|
||||||
|
import { caseHandleInfoObj } from '../model';
|
||||||
|
const labelStyle = ref({
|
||||||
|
width: '100px',
|
||||||
|
});
|
||||||
|
const caseHandleInfo = ref<caseHandleInfoObj>({
|
||||||
|
info: {},
|
||||||
|
});
|
||||||
|
const playerOptions: any = ref([]);
|
||||||
|
const threadImageList: any = ref([]);
|
||||||
|
const props = defineProps({
|
||||||
|
data: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
playerOptions: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
threadImageList: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
console.log(props)
|
||||||
|
caseHandleInfo.value = props.data;
|
||||||
|
playerOptions.value = props.playerOptions;
|
||||||
|
threadImageList.value = props.threadImageList;
|
||||||
|
const imgList = ref([
|
||||||
|
'https://picsum.photos/id/66/346/216',
|
||||||
|
'https://picsum.photos/id/67/346/216',
|
||||||
|
'https://picsum.photos/id/68/346/216',
|
||||||
|
]);
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.data,
|
||||||
|
(newVal, oldVal) => {
|
||||||
|
caseHandleInfo.value = newVal;
|
||||||
|
playerOptions.value = props.playerOptions;
|
||||||
|
threadImageList.value = props.threadImageList;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
<style lang="less" scoped>
|
||||||
|
::v-deep .ant-image .ant-image-img {
|
||||||
|
width: 85px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,100 @@
|
||||||
|
<template>
|
||||||
|
<a-descriptions bordered :column="2" size="small" :labelStyle="labelStyle">
|
||||||
|
<a-descriptions-item label="办理人">{{
|
||||||
|
caseHandleInfo.info.transactor_name
|
||||||
|
}}</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="办理时间">
|
||||||
|
{{ caseHandleInfo.info.transact_time }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="立案号">
|
||||||
|
{{ caseHandleInfo.info.registr_number }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="当事人姓名">
|
||||||
|
{{ caseHandleInfo.info.illegal_contact }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="身份证号码">
|
||||||
|
{{ caseHandleInfo.info.illegal_contact_idcard }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="违法类型">
|
||||||
|
{{ caseHandleInfo.info.illegal_type }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
|
||||||
|
<a-descriptions-item label="处罚通知书">
|
||||||
|
<div>
|
||||||
|
<ImagePreview :imageList="punishImageList" />
|
||||||
|
</div>
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="交款通知单">
|
||||||
|
<div>
|
||||||
|
<ImagePreview :imageList="paymentImageList" />
|
||||||
|
</div>
|
||||||
|
</a-descriptions-item>
|
||||||
|
</a-descriptions>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { watch, ref } from 'vue';
|
||||||
|
import { ImagePreview } from '@/components/Preview';
|
||||||
|
import { caseHandleInfoObj } from '../model';
|
||||||
|
const labelStyle = ref({
|
||||||
|
width: '100px',
|
||||||
|
});
|
||||||
|
const caseHandleInfo = ref<caseHandleInfoObj>({
|
||||||
|
info: {},
|
||||||
|
});
|
||||||
|
const playerOptions: any = ref([]);
|
||||||
|
const paymentImageList: any = ref([]);
|
||||||
|
const punishImageList: any = ref([]);
|
||||||
|
const props = defineProps({
|
||||||
|
data: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
playerOptions: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
paymentImageList: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
punishImageList: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
caseHandleInfo.value = props.data;
|
||||||
|
playerOptions.value = props.playerOptions;
|
||||||
|
paymentImageList.value = props.paymentImageList;
|
||||||
|
punishImageList.value = props.paymentImageList;
|
||||||
|
const imgList = ref([
|
||||||
|
'https://picsum.photos/id/66/346/216',
|
||||||
|
'https://picsum.photos/id/67/346/216',
|
||||||
|
'https://picsum.photos/id/68/346/216',
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.data,
|
||||||
|
(newVal, oldVal) => {
|
||||||
|
caseHandleInfo.value = newVal;
|
||||||
|
playerOptions.value = props.playerOptions;
|
||||||
|
paymentImageList.value = props.paymentImageList;
|
||||||
|
punishImageList.value = props.paymentImageList;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
<style lang="less" scoped>
|
||||||
|
::v-deep .ant-image .ant-image-img {
|
||||||
|
width: 85px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
@ -0,0 +1,77 @@
|
||||||
|
<template>
|
||||||
|
<a-descriptions bordered :column="2" size="small" :labelStyle="labelStyle">
|
||||||
|
<a-descriptions-item label="案件编号">{{ caseDetail.case_no }}</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="上报人">
|
||||||
|
{{ caseDetail.identification_user }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="上报时间">
|
||||||
|
{{ caseDetail.identification_time }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="案件状态">
|
||||||
|
<a-tag color="warning" v-if="caseDetail.handle_status_id == 0">
|
||||||
|
{{ caseDetail.handle_status_name }}
|
||||||
|
</a-tag>
|
||||||
|
<a-tag color="processing" v-else-if="caseDetail.handle_status_id == 1">
|
||||||
|
{{ caseDetail.handle_status_name }}
|
||||||
|
</a-tag>
|
||||||
|
<a-tag color="success" v-else>{{ caseDetail.handle_status_name }}</a-tag>
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="行政区划">
|
||||||
|
/ {{ caseDetail.countyname }} / {{ caseDetail.streetname }} / {{
|
||||||
|
caseDetail.communityname
|
||||||
|
}}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="案件地址">{{ caseDetail.address }}</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="经纬度"
|
||||||
|
>{{ caseDetail.lng }} , {{ caseDetail.lat }}</a-descriptions-item
|
||||||
|
>
|
||||||
|
<a-descriptions-item label="案件地址">{{ caseDetail.area }} (m²)</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="案件类型">{{ caseDetail.typename }}</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="案件备注">{{ caseDetail.remark }}</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="案件描述">{{ caseDetail.case_description }}</a-descriptions-item>
|
||||||
|
|
||||||
|
<a-descriptions-item label="案件图片">
|
||||||
|
<div>
|
||||||
|
<ImagePreview :imageList="imgList" />
|
||||||
|
</div>
|
||||||
|
</a-descriptions-item>
|
||||||
|
</a-descriptions>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { reactive, watch, ref } from 'vue';
|
||||||
|
import { ImagePreview } from '@/components/Preview';
|
||||||
|
import { DetailModel, caseDetailObj } from '../model';
|
||||||
|
const labelStyle = ref({
|
||||||
|
width: '100px',
|
||||||
|
});
|
||||||
|
const caseDetail = ref<caseDetailObj>({});
|
||||||
|
const props = defineProps({
|
||||||
|
data: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
if(Object.keys(props.data).length != 0){
|
||||||
|
caseDetail.value = props.data.info;
|
||||||
|
}
|
||||||
|
const imgList = ref([
|
||||||
|
'https://picsum.photos/id/66/346/216',
|
||||||
|
'https://picsum.photos/id/67/346/216',
|
||||||
|
'https://picsum.photos/id/68/346/216',
|
||||||
|
]);
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.data,
|
||||||
|
(newVal, oldVal) => {
|
||||||
|
caseDetail.value = newVal.info;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
<style lang="less" scoped>
|
||||||
|
::v-deep .ant-image .ant-image-img {
|
||||||
|
width: 85px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,205 @@
|
||||||
|
<template>
|
||||||
|
<div class="w-full">
|
||||||
|
<MapboxMaps :mapOptions="mapOptions" @map-on-load="mapOnLoad" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import rodeImg from '@/assets/images/icon_fly2.png';
|
||||||
|
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: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const geojson = ref();
|
||||||
|
const droneMarker = ref();
|
||||||
|
const mapBox = ref();
|
||||||
|
|
||||||
|
const mapOptions = {
|
||||||
|
center: [117.84714891969796, 35.22152309532066],
|
||||||
|
zoom: 10,
|
||||||
|
};
|
||||||
|
watch(
|
||||||
|
() => props.ruleForm,
|
||||||
|
(newVal, oldVal) => {
|
||||||
|
console.log(newVal);
|
||||||
|
loadCaseGeoJson();
|
||||||
|
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;
|
||||||
|
loadImageLayer();
|
||||||
|
loadStreetBorderLayer();
|
||||||
|
loadCaseGeoJson();
|
||||||
|
};
|
||||||
|
// 费县图斑
|
||||||
|
function loadImageLayer() {
|
||||||
|
detailMap.value.addLayer({
|
||||||
|
id: 'wms-test-layer',
|
||||||
|
type: 'raster',
|
||||||
|
source: {
|
||||||
|
type: 'raster',
|
||||||
|
tiles: [
|
||||||
|
'http://175.27.168.120:8080/geoserver/feixian/wms?service=WMS&version=1.1.0&request=GetMap&layers=feixian:yingxiang&styles=&bbox={bbox-epsg-3857}&width=256&height=256&srs=EPSG:3857&format=image/png&TRANSPARENT=TRUE',
|
||||||
|
],
|
||||||
|
tileSize: 256,
|
||||||
|
},
|
||||||
|
paint: {},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// 费县镇界
|
||||||
|
function loadStreetBorderLayer() {
|
||||||
|
detailMap.value.addLayer({
|
||||||
|
id: 'street-border',
|
||||||
|
type: 'raster',
|
||||||
|
source: {
|
||||||
|
type: 'raster',
|
||||||
|
tiles: [
|
||||||
|
'http://175.27.168.120:8080/geoserver/feixian/wms?service=WMS&version=1.1.0&request=GetMap&layers=feixian:zhenjie&styles=&bbox={bbox-epsg-3857}&width=256&height=256&srs=EPSG:3857&format=image/png&TRANSPARENT=TRUE',
|
||||||
|
],
|
||||||
|
tileSize: 256,
|
||||||
|
},
|
||||||
|
paint: {},
|
||||||
|
layout: {
|
||||||
|
visibility: 'visible',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
detailMap.value.resize();
|
||||||
|
}
|
||||||
|
// 获取GeoJSON图层
|
||||||
|
async function loadCaseGeoJson() {
|
||||||
|
const data = await getDroneGeoJson({ id: props.ruleForm.info.id });
|
||||||
|
console.log(data);
|
||||||
|
geojson.value = data;
|
||||||
|
if (geojson.value.features.length == 0) {
|
||||||
|
detailMap.value.addLayer({
|
||||||
|
id: 'points',
|
||||||
|
type: 'symbol',
|
||||||
|
source: {
|
||||||
|
type: 'geojson',
|
||||||
|
data: {
|
||||||
|
type: 'FeatureCollection',
|
||||||
|
features: [
|
||||||
|
{
|
||||||
|
type: 'Feature',
|
||||||
|
geometry: {
|
||||||
|
type: 'Point',
|
||||||
|
coordinates: [props.ruleForm.info.lng, props.ruleForm.info.lng],
|
||||||
|
},
|
||||||
|
properties: {
|
||||||
|
title: 'Mapbox DC',
|
||||||
|
icon: 'monument',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
layout: {},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// 报错的修改方法There is already a source with ID "geojsonfill"
|
||||||
|
if (detailMap.value.getLayer('geojsonfill')) {
|
||||||
|
detailMap.value.removeLayer('geojsonfill');
|
||||||
|
detailMap.value.removeSource('geojsonfill');
|
||||||
|
}
|
||||||
|
if (detailMap.value.getLayer('geojsonline')) {
|
||||||
|
detailMap.value.removeLayer('geojsonline');
|
||||||
|
detailMap.value.removeSource('geojsonline');
|
||||||
|
}
|
||||||
|
|
||||||
|
detailMap.value.addLayer({
|
||||||
|
id: 'geojsonfill',
|
||||||
|
type: 'fill',
|
||||||
|
source: {
|
||||||
|
type: 'geojson',
|
||||||
|
data: geojson.value,
|
||||||
|
},
|
||||||
|
paint: {
|
||||||
|
'fill-color': '#FE9003',
|
||||||
|
'fill-opacity': 0.2,
|
||||||
|
'fill-outline-color': '#FE9003',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
detailMap.value.addLayer({
|
||||||
|
id: 'geojsonline',
|
||||||
|
type: 'line',
|
||||||
|
source: {
|
||||||
|
type: 'geojson',
|
||||||
|
data: geojson.value,
|
||||||
|
},
|
||||||
|
layout: {
|
||||||
|
'line-join': 'round',
|
||||||
|
'line-cap': 'round',
|
||||||
|
},
|
||||||
|
paint: {
|
||||||
|
'line-color': '#FE9003',
|
||||||
|
'line-width': 4,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// 案件位置显示无人机图标
|
||||||
|
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%;
|
||||||
|
height: 50vh;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,111 @@
|
||||||
|
<template>
|
||||||
|
<a-descriptions bordered :column="2" size="small" :labelStyle="labelStyle">
|
||||||
|
<a-descriptions-item label="办理人">{{
|
||||||
|
caseHandleInfo.info.transactor_name
|
||||||
|
}}</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="办理时间">
|
||||||
|
{{ caseHandleInfo.info.transact_time }}
|
||||||
|
</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="手续有效期">
|
||||||
|
{{ caseHandleInfo.info.procedure_indate }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="批准文件编号">
|
||||||
|
{{ caseHandleInfo.info.evidence_file_number }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
<a-descriptions-item label="批文有效日期">
|
||||||
|
{{ caseHandleInfo.info.evidence_file_indate }}
|
||||||
|
</a-descriptions-item>
|
||||||
|
|
||||||
|
<a-descriptions-item label="勘测定界图">
|
||||||
|
<div>
|
||||||
|
<ImagePreview :imageList="boundaryImageList" />
|
||||||
|
</div>
|
||||||
|
</a-descriptions-item>
|
||||||
|
</a-descriptions>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { watch, ref } from 'vue';
|
||||||
|
import { ImagePreview } from '@/components/Preview';
|
||||||
|
import { caseHandleInfoObj } from '../model';
|
||||||
|
const labelStyle = ref({
|
||||||
|
width: '100px',
|
||||||
|
});
|
||||||
|
const caseHandleInfo = ref<caseHandleInfoObj>({
|
||||||
|
info: {},
|
||||||
|
});
|
||||||
|
const playerOptions: any = ref([]);
|
||||||
|
const checkoutImageList: any = ref([]);
|
||||||
|
const boundaryImageList: any = ref([]);
|
||||||
|
const agreeImageList: any = ref([]);
|
||||||
|
const props = defineProps({
|
||||||
|
data: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
playerOptions: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
checkoutImageList: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
boundaryImageList: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
agreeImageList: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
caseHandleInfo.value = props.data;
|
||||||
|
playerOptions.value = props.playerOptions;
|
||||||
|
boundaryImageList.value = props.checkoutImageList;
|
||||||
|
checkoutImageList.value = props.checkoutImageList;
|
||||||
|
agreeImageList.value = props.checkoutImageList;
|
||||||
|
const imgList = ref([
|
||||||
|
'https://picsum.photos/id/66/346/216',
|
||||||
|
'https://picsum.photos/id/67/346/216',
|
||||||
|
'https://picsum.photos/id/68/346/216',
|
||||||
|
]);
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.data,
|
||||||
|
(newVal, oldVal) => {
|
||||||
|
caseHandleInfo.value = newVal;
|
||||||
|
playerOptions.value = props.playerOptions;
|
||||||
|
boundaryImageList.value = props.checkoutImageList;
|
||||||
|
checkoutImageList.value = props.checkoutImageList;
|
||||||
|
agreeImageList.value = props.checkoutImageList;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
<style lang="less" scoped>
|
||||||
|
::v-deep .ant-image .ant-image-img {
|
||||||
|
width: 85px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,96 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<BasicTable @register="registerTable" :searchInfo="searchInfo">
|
||||||
|
<template #toolbar>
|
||||||
|
<PermissionBtn @btn-event="onBtnClicked" />
|
||||||
|
</template>
|
||||||
|
<template #bodyCell="{ column, record }">
|
||||||
|
<template v-if="column.key === 'action'">
|
||||||
|
<TableAction
|
||||||
|
:actions="[
|
||||||
|
{
|
||||||
|
label: '详情',
|
||||||
|
onClick: viewDetail.bind(null, record),
|
||||||
|
},
|
||||||
|
]"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</BasicTable>
|
||||||
|
<BasicModal
|
||||||
|
v-bind="$attrs"
|
||||||
|
@register="registerModal"
|
||||||
|
title="案件详情"
|
||||||
|
:canFullscreen="false"
|
||||||
|
:defaultFullscreen="true"
|
||||||
|
:showCancelBtn="false"
|
||||||
|
:showOkBtn="false"
|
||||||
|
:draggable="false"
|
||||||
|
>
|
||||||
|
<CaseView :caseId="caseId"></CaseView>
|
||||||
|
</BasicModal>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { reactive, ref } from 'vue';
|
||||||
|
import { BasicTable, useTable, TableAction, BasicColumn } from '@/components/Table';
|
||||||
|
import { getCaseInfoList } from '@/api/monitor/index';
|
||||||
|
import { useMessage } from '@/hooks/web/useMessage';
|
||||||
|
import { PermissionBtn } from '@/components/PermissionBtn/index';
|
||||||
|
import { searchFormSchema, columns } from './report.data';
|
||||||
|
import { BasicModal, useModal } from '@/components/Modal';
|
||||||
|
import { CaseView } from '@/views/demo/monitor/index';
|
||||||
|
const { createConfirm, createMessage } = useMessage();
|
||||||
|
const searchInfo = reactive<Recordable>({});
|
||||||
|
|
||||||
|
const [registerTable, { reload, getSelectRows, clearSelectedRowKeys }] = useTable({
|
||||||
|
title: '案件列表',
|
||||||
|
api: getCaseInfoList,
|
||||||
|
columns,
|
||||||
|
rowKey: 'id',
|
||||||
|
formConfig: {
|
||||||
|
labelWidth: 120,
|
||||||
|
schemas: searchFormSchema,
|
||||||
|
},
|
||||||
|
useSearchForm: true,
|
||||||
|
showTableSetting: true,
|
||||||
|
bordered: true,
|
||||||
|
showIndexColumn: false,
|
||||||
|
rowSelection: {
|
||||||
|
type: 'checkbox',
|
||||||
|
},
|
||||||
|
handleSearchInfoFn(info) {
|
||||||
|
return info;
|
||||||
|
},
|
||||||
|
actionColumn: {
|
||||||
|
width: 80,
|
||||||
|
title: '操作',
|
||||||
|
dataIndex: 'action',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const [registerModal, { openModal, setModalProps }] = useModal();
|
||||||
|
const caseId = ref('');
|
||||||
|
function onBtnClicked(domId) {
|
||||||
|
switch (domId) {
|
||||||
|
case 'btnExport':
|
||||||
|
createMessage.success("接口待对接!")
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function viewDetail(record) {
|
||||||
|
console.log(record);
|
||||||
|
caseId.value = record.id;
|
||||||
|
openModal();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="less" scoped>
|
||||||
|
// ::v-deep .ant-row .ant-col{
|
||||||
|
// margin-right: 2px;
|
||||||
|
// }
|
||||||
|
// ::v-deep .ant-row .ant-col.ant-col-2 {
|
||||||
|
// margin-right: 10px;
|
||||||
|
// }
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
|
||||||
|
export { default as AccountModal } from './AccountModal.vue';
|
||||||
|
export { default as ModulesModal } from './ModulesModal.vue';
|
||||||
|
export { default as RoleDrawer } from './RoleDrawer.vue';
|
||||||
|
export { default as RoleModal } from './RoleModal.vue';
|
||||||
|
|
||||||
|
|
@ -0,0 +1,98 @@
|
||||||
|
import { BasicColumn, FormSchema } from '@/components/Table';
|
||||||
|
import { h } from 'vue';
|
||||||
|
import { Switch,Tag } from 'ant-design-vue';
|
||||||
|
import { setRoleStatus } from '@/api/demo/system';
|
||||||
|
import { useMessage } from '@/hooks/web/useMessage';
|
||||||
|
|
||||||
|
type CheckedType = boolean | string | number;
|
||||||
|
export const columns: BasicColumn[] = [
|
||||||
|
{
|
||||||
|
title: '案件编号',
|
||||||
|
dataIndex: 'case_no',
|
||||||
|
width: 200,
|
||||||
|
},{
|
||||||
|
title: '案件描述',
|
||||||
|
dataIndex: 'case_description',
|
||||||
|
width: 200,
|
||||||
|
},{
|
||||||
|
title: '办结状态',
|
||||||
|
dataIndex: 'handle_status_name',
|
||||||
|
width: 200,
|
||||||
|
},{
|
||||||
|
title: '上报人',
|
||||||
|
dataIndex: 'createusername',
|
||||||
|
width: 200,
|
||||||
|
},{
|
||||||
|
title: '上报时间',
|
||||||
|
dataIndex: 'createtime',
|
||||||
|
width: 200,
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
export const searchFormSchema: FormSchema[] = [
|
||||||
|
{
|
||||||
|
field: 'key',
|
||||||
|
label: '关键字段',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'is_intact',
|
||||||
|
component: 'Select',
|
||||||
|
label: '案件状态',
|
||||||
|
colProps: {
|
||||||
|
span: 6,
|
||||||
|
},
|
||||||
|
componentProps: {
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
label: '全部',
|
||||||
|
value: null,
|
||||||
|
key: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '未判读',
|
||||||
|
value: '0',
|
||||||
|
key: '0',
|
||||||
|
},{
|
||||||
|
label: '已提交',
|
||||||
|
value: '1',
|
||||||
|
key: '1',
|
||||||
|
},{
|
||||||
|
label: '已关闭',
|
||||||
|
value: '99',
|
||||||
|
key: '99',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
export const formSchema: FormSchema[] = [
|
||||||
|
{
|
||||||
|
field: 'id',
|
||||||
|
label: '角色名称',
|
||||||
|
required: true,
|
||||||
|
component: 'Input',
|
||||||
|
ifShow:false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'name',
|
||||||
|
label: '角色名称',
|
||||||
|
required: true,
|
||||||
|
component: 'Input',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'status',
|
||||||
|
label: '状态',
|
||||||
|
component: 'RadioButtonGroup',
|
||||||
|
defaultValue: 0,
|
||||||
|
componentProps: {
|
||||||
|
options: [
|
||||||
|
{ label: '启用', value: 0},
|
||||||
|
{ label: '停用', value: 1 },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
@ -0,0 +1,122 @@
|
||||||
|
<template>
|
||||||
|
<a-table :columns="columns.col" :data-source="columns.data" size="small" height="300px" bordered :pagination="pagination.pagination">
|
||||||
|
<template #bodyCell="{ column, record }">
|
||||||
|
<template v-if="column.dataIndex === 'action'">
|
||||||
|
<a @click="viewDetail(record)">详情</a>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</a-table>
|
||||||
|
|
||||||
|
<BasicModal
|
||||||
|
v-bind="$attrs"
|
||||||
|
@register="registerModal"
|
||||||
|
title="案件详情"
|
||||||
|
:canFullscreen="false"
|
||||||
|
:defaultFullscreen="true"
|
||||||
|
:showCancelBtn="false"
|
||||||
|
:showOkBtn="false"
|
||||||
|
:draggable="false"
|
||||||
|
>
|
||||||
|
<CaseView :caseId="caseId"></CaseView>
|
||||||
|
</BasicModal>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { reactive,ref,defineProps,watch } from 'vue';
|
||||||
|
import { BasicModal, useModal } from '@/components/Modal';
|
||||||
|
import { getCaseInfoList } from '@/api/demo/system';
|
||||||
|
import { CaseView } from '@/views/demo/monitor/index';
|
||||||
|
const [registerModal, { openModal, setModalProps }] = useModal();
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
tablist:Object,
|
||||||
|
currentListQuery:Object
|
||||||
|
}>()
|
||||||
|
const caseId = ref('');
|
||||||
|
let columns = reactive({data:[{},{},{}],col:[{
|
||||||
|
title: '案件编号',
|
||||||
|
dataIndex: 'case_no',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '社区/村',
|
||||||
|
dataIndex: 'communityname',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '案件描述',
|
||||||
|
dataIndex: 'case_description',
|
||||||
|
},{
|
||||||
|
title: '所属类型',
|
||||||
|
dataIndex: 'typename',
|
||||||
|
},{
|
||||||
|
title: '处理人',
|
||||||
|
dataIndex: 'deal_username',
|
||||||
|
},{
|
||||||
|
title: '处理时间',
|
||||||
|
dataIndex: 'deal_time',
|
||||||
|
},{
|
||||||
|
title: '审核人',
|
||||||
|
dataIndex: 'verifyuser',
|
||||||
|
},{
|
||||||
|
title: '审核时间',
|
||||||
|
dataIndex: 'verifytime',
|
||||||
|
},{
|
||||||
|
title: '案件状态',
|
||||||
|
dataIndex: 'handle_status_name',
|
||||||
|
},{
|
||||||
|
title: '操作',
|
||||||
|
dataIndex: 'action',
|
||||||
|
}]});
|
||||||
|
let total = ref(0)
|
||||||
|
|
||||||
|
function viewDetail(record) {
|
||||||
|
console.log(record);
|
||||||
|
caseId.value = record.id;
|
||||||
|
openModal();
|
||||||
|
}
|
||||||
|
|
||||||
|
let pageSize = ref(props.currentListQuery.limit)
|
||||||
|
let current = ref(props.currentListQuery.page)
|
||||||
|
|
||||||
|
function handlePageChange(page,pageSize){
|
||||||
|
props.currentListQuery.page = page;
|
||||||
|
props.currentListQuery.limit = pageSize;
|
||||||
|
pageSize.value = pageSize;
|
||||||
|
current.value = page;
|
||||||
|
handleGetList()
|
||||||
|
}
|
||||||
|
|
||||||
|
let pagination = reactive({
|
||||||
|
pagination: {
|
||||||
|
pageSize:pageSize, // 每页显示的条数
|
||||||
|
showSizeChanger: true, // 是否可以改变每页显示的条数
|
||||||
|
pageSizeOptions: ['10', '50', '80', '100'], // 可选的每页显示条数
|
||||||
|
showQuickJumper: true, // 是否可以快速跳转到指定页
|
||||||
|
showTotal:total=>`共${total}条`,
|
||||||
|
current: current, // 当前页数
|
||||||
|
total: total, // 总条数
|
||||||
|
onChange:handlePageChange
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
watch(()=>props.currentListQuery,(newValue,oldValue)=>{
|
||||||
|
handleGetList();
|
||||||
|
},{immediate:true,deep:true})
|
||||||
|
|
||||||
|
|
||||||
|
function handleGetList(){
|
||||||
|
getCaseInfoList(props.currentListQuery).then(res=>{
|
||||||
|
columns.data = res.items;
|
||||||
|
total.value = res.total;
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<style scoped>
|
||||||
|
.editable-row-operations a {
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,493 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<BasicTable @register="registerTable" :searchInfo="searchInfo">
|
||||||
|
<template #toolbar>
|
||||||
|
<PermissionBtn @btn-event="onBtnClicked" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template #bodyCell="{ column, record }">
|
||||||
|
|
||||||
|
<!-- 无人机发现数量 -->
|
||||||
|
<template v-if="column.key === 'allCount'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.allCount}}</a>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- 完成外业核查数量 -->
|
||||||
|
<template v-if="column.key === 'handleStatus'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.handleStatus}}</a>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- 24H内为核查 -->
|
||||||
|
<template v-if="column.key === 'notDealHour24'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.notDealHour24}}</a>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- 房屋翻新 -->
|
||||||
|
<template v-if="column.key === 'typeFanxinCount'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.typeFanxinCount}}</a>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- 房屋加盖 -->
|
||||||
|
<template v-if="column.key === 'typeJiagaiCount'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.typeJiagaiCount}}</a>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- 房屋翻建 -->
|
||||||
|
<template v-if="column.key === 'typeFanjianCount'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.typeFanjianCount}}</a>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- 存量建设 -->
|
||||||
|
<template v-if="column.key === 'typeCunliangCount'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.typeCunliangCount}}</a>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- 推土 -->
|
||||||
|
<template v-if="column.key === 'typeTuituCount'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.typeTuituCount}}</a>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- 其他 -->
|
||||||
|
<!-- <template v-if="column.key === 'typeOtherCount'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.typeOtherCount}}</a>
|
||||||
|
</template> -->
|
||||||
|
|
||||||
|
<!-- 合法 -->
|
||||||
|
<template v-if="column.key === 'illegal0Count'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.illegal0Count}}</a>
|
||||||
|
</template>
|
||||||
|
<!-- 违法 -->
|
||||||
|
<template v-if="column.key === 'illegal1Count'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.illegal1Count}}</a>
|
||||||
|
</template>
|
||||||
|
<!-- 伪变化 -->
|
||||||
|
<template v-if="column.key === 'illegal2Count'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.illegal2Count}}</a>
|
||||||
|
</template>
|
||||||
|
<!-- 外业核实后确定违法数量 -->
|
||||||
|
<template v-if="column.key === 'illegal1Count1'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.illegal1Count}}</a>
|
||||||
|
</template>
|
||||||
|
<!-- 违法面积 -->
|
||||||
|
<!-- <template v-if="column.key === 'illegalHandleAreaList'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.illegalHandleAreaList}}</a>
|
||||||
|
</template> -->
|
||||||
|
<!-- 整改销号数 -->
|
||||||
|
<template v-if="column.key === 'illegalHandle2Status'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.illegalHandle2Status}}</a>
|
||||||
|
</template>
|
||||||
|
<!-- 销号面积 -->
|
||||||
|
<!-- <template v-if="column.key === 'illegalHandle2AreaList'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.illegalHandle2AreaList}}</a>
|
||||||
|
</template> -->
|
||||||
|
<!-- 尚未整改宗数 -->
|
||||||
|
<template v-if="column.key === 'illegalHandle01Status'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.illegalHandle01Status}}</a>
|
||||||
|
</template>
|
||||||
|
<!-- 尚未整改面积 -->
|
||||||
|
<!-- <template v-if="column.key === 'illegalHandle01AreaList'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.illegalHandle01AreaList}}</a>
|
||||||
|
</template> -->
|
||||||
|
<!-- 3日内未整改完成 -->
|
||||||
|
<template v-if="column.key === 'notComplete3'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.notComplete3}}</a>
|
||||||
|
</template>
|
||||||
|
<!-- 7日内未整改完成 -->
|
||||||
|
<template v-if="column.key === 'notComplete7'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.notComplete7}}</a>
|
||||||
|
</template>
|
||||||
|
<!-- 30日内未整改完成 -->
|
||||||
|
<template v-if="column.key === 'notComplete30'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.notComplete30}}</a>
|
||||||
|
</template>
|
||||||
|
<!-- 30日以上未整改完成 -->
|
||||||
|
<template v-if="column.key === 'notComplete30More'">
|
||||||
|
<a @click="handlePreViewData(column,record)">{{record.notComplete30More}}</a>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
</BasicTable>
|
||||||
|
|
||||||
|
<div class="data-preview-container" v-if="showRecordList">
|
||||||
|
<a-tabs v-model:activeKey="activeKey" hide-add type="editable-card" @edit="onEdit" @change="handleTabChange">
|
||||||
|
<a-tab-pane v-for="(pane,index) in tablist" :key="index.toString()" :tab="pane.streetname+'-'+pane.label" :closable="pane.closable">
|
||||||
|
</a-tab-pane>
|
||||||
|
</a-tabs>
|
||||||
|
<RecordList :tablist="tablist" :currentListQuery="currentListQuery.listQuery"></RecordList>
|
||||||
|
|
||||||
|
<div class="data-preview-container-option">
|
||||||
|
|
||||||
|
<div @click="exportList()">
|
||||||
|
<CloudDownloadOutlined />
|
||||||
|
</div>
|
||||||
|
<div @click="handleCloseRecordList()">
|
||||||
|
<MinusOutlined />
|
||||||
|
</div>
|
||||||
|
<div @click="handleCloseAllRecordList()">
|
||||||
|
<CloseOutlined />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref,reactive } from 'vue';
|
||||||
|
|
||||||
|
import { BasicTable, useTable, TableAction } from '@/components/Table';
|
||||||
|
import { getStatisticalList, deleteRole } from '@/api/demo/system';
|
||||||
|
|
||||||
|
// import {DataPreivew} from './RecordList.vue'
|
||||||
|
|
||||||
|
import { useMessage } from '@/hooks/web/useMessage';
|
||||||
|
import { useModal } from '@/components/Modal';
|
||||||
|
import { RecordList } from './page';
|
||||||
|
|
||||||
|
import { PermissionBtn } from '@/components/PermissionBtn/index';
|
||||||
|
|
||||||
|
import { columns, columnsDataPreview,searchFormSchema } from './statistical.data';
|
||||||
|
import {MinusOutlined,CloseOutlined,CloudDownloadOutlined} from '@ant-design/icons-vue'
|
||||||
|
|
||||||
|
defineOptions({ name: 'RoleManagement' });
|
||||||
|
let activeKey = ref('0')
|
||||||
|
|
||||||
|
const { createConfirm, createMessage } = useMessage();
|
||||||
|
const [registerModal, { openModal: openRoleModal }] = useModal();
|
||||||
|
const [registerModulesModal, { openModal: openModulesModal }] = useModal();
|
||||||
|
const [registerAccountModal, { openModal: openAccountModal }] = useModal();
|
||||||
|
const searchInfo = reactive<Recordable>({});
|
||||||
|
|
||||||
|
const showRecordList = ref<boolean>(false);
|
||||||
|
|
||||||
|
const panes = reactive<{ title: string; content: string; key: string; closable?: boolean}[]>([])
|
||||||
|
const [registerTable, { reload, getSelectRows, clearSelectedRowKeys }] = useTable({
|
||||||
|
// 表格名称
|
||||||
|
title: '统计报表',
|
||||||
|
// 获取数据的接口
|
||||||
|
api: getStatisticalList,
|
||||||
|
// 表单列信息 BasicColumn[]
|
||||||
|
columns,
|
||||||
|
rowKey: 'id',
|
||||||
|
formConfig: {
|
||||||
|
labelWidth: 120,
|
||||||
|
schemas: searchFormSchema,
|
||||||
|
},
|
||||||
|
// 使用搜索表单
|
||||||
|
useSearchForm: true,
|
||||||
|
// 显示表格设置工具
|
||||||
|
showTableSetting: true,
|
||||||
|
// 是否显示表格边框
|
||||||
|
bordered: true,
|
||||||
|
// 序号列
|
||||||
|
showIndexColumn: false,
|
||||||
|
// 勾选列
|
||||||
|
rowSelection: false,
|
||||||
|
// 搜索
|
||||||
|
handleSearchInfoFn(info) {
|
||||||
|
return info;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
const [registerTableDataPreview,{ reloadDataPreview, getSelectRowsDataPreview, clearSelectedRowKeysDataPreview }] = useTable({
|
||||||
|
// 表格名称
|
||||||
|
title: '',
|
||||||
|
// 获取数据的接口
|
||||||
|
api: getStatisticalList,
|
||||||
|
// 表单列信息 BasicColumn[]
|
||||||
|
columnsDataPreview,
|
||||||
|
rowKey: 'id',
|
||||||
|
formConfig: {
|
||||||
|
labelWidth: 120,
|
||||||
|
// schemas: searchFormSchema,
|
||||||
|
},
|
||||||
|
// 使用搜索表单
|
||||||
|
useSearchForm: false,
|
||||||
|
// 显示表格设置工具
|
||||||
|
showTableSetting: false,
|
||||||
|
// 是否显示表格边框
|
||||||
|
bordered: true,
|
||||||
|
// 序号列
|
||||||
|
showIndexColumn: false,
|
||||||
|
// 勾选列
|
||||||
|
rowSelection: false,
|
||||||
|
// 搜索
|
||||||
|
handleSearchInfoFn(info) {
|
||||||
|
return info;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
function handleCloseRecordList(){
|
||||||
|
showRecordList.value = false;
|
||||||
|
}
|
||||||
|
function exportList(){
|
||||||
|
createMessage.success("接口待对接!")
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleCreate() {
|
||||||
|
openRoleModal(true, {
|
||||||
|
isUpdate: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function viewAccount(record: Recordable) {
|
||||||
|
openAccountModal(true, {
|
||||||
|
record,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function onEdit(targetKey: string){
|
||||||
|
tablist.splice(parseInt(targetKey),1);
|
||||||
|
if(tablist.length==0){
|
||||||
|
showRecordList.value = false;
|
||||||
|
}
|
||||||
|
if(parseInt(targetKey)>1){
|
||||||
|
activeKey.value = (parseInt(targetKey)-1).toString();
|
||||||
|
|
||||||
|
}else{
|
||||||
|
activeKey.value = '0';
|
||||||
|
}
|
||||||
|
currentListQuery.listQuery = tablist[activeKey.value].listQuery
|
||||||
|
}
|
||||||
|
|
||||||
|
let currentListQuery = reactive({listQuery:{}});
|
||||||
|
|
||||||
|
function handleTabChange(e){
|
||||||
|
currentListQuery.listQuery = tablist[e].listQuery
|
||||||
|
|
||||||
|
console.log(currentListQuery)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// function remvoeTab(){
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
const tablist = reactive<{streetname:string;label:string;listQuery:searchListSchema}[]>([])
|
||||||
|
// 查询条件
|
||||||
|
interface searchListSchema{
|
||||||
|
is_intact?:number;
|
||||||
|
streetid?:string;
|
||||||
|
identification_start_time?:string;
|
||||||
|
identification_end_time?:string;
|
||||||
|
page?:number;
|
||||||
|
limit?:number;
|
||||||
|
is_deal?:number;
|
||||||
|
is_not_deal_hour24?:number;
|
||||||
|
is_drawback?:number;
|
||||||
|
typeid?:number;
|
||||||
|
is_illegal?:number;
|
||||||
|
is_complete?:number;
|
||||||
|
handle_status_id?:number;
|
||||||
|
out_time_flag?:number;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// const searchForm = reactive<searchListSchema>({
|
||||||
|
|
||||||
|
// })
|
||||||
|
|
||||||
|
function handlePreViewData(column,record:Recordable){
|
||||||
|
|
||||||
|
const searchForm = reactive<searchListSchema>({
|
||||||
|
streetid:record.streetid,
|
||||||
|
identification_start_time:"",
|
||||||
|
identification_end_time:"",
|
||||||
|
is_intact:1,
|
||||||
|
page:1,
|
||||||
|
limit:10,
|
||||||
|
})
|
||||||
|
|
||||||
|
switch(column.dataIndex){
|
||||||
|
case 'allCount':
|
||||||
|
break;
|
||||||
|
case 'handleStatus':
|
||||||
|
searchForm.is_deal = 1;
|
||||||
|
break;
|
||||||
|
case 'notDealHour24':
|
||||||
|
searchForm.is_not_deal_hour24 = 1;
|
||||||
|
searchForm.is_drawback = 0;
|
||||||
|
break;
|
||||||
|
case 'notDealHour24':
|
||||||
|
searchForm.is_not_deal_hour24 = 1;
|
||||||
|
searchForm.is_drawback = 0;
|
||||||
|
break;
|
||||||
|
case 'typeFanxinCount':
|
||||||
|
searchForm.typeid = record.typeid
|
||||||
|
case 'typeJiagaiCount':
|
||||||
|
searchForm.typeid = record.typeid
|
||||||
|
case 'typeFanjianCount':
|
||||||
|
searchForm.typeid = record.typeid
|
||||||
|
case 'typeCunliangCount':
|
||||||
|
searchForm.typeid = record.typeid
|
||||||
|
case 'typeTuituCount':
|
||||||
|
searchForm.typeid = record.typeid
|
||||||
|
case 'illegal0Count':
|
||||||
|
searchForm.is_illegal = 0;
|
||||||
|
searchForm.is_deal = 1;
|
||||||
|
break;
|
||||||
|
case 'illegal1Count':
|
||||||
|
searchForm.is_illegal = 1;
|
||||||
|
searchForm.is_deal = 1;
|
||||||
|
break;
|
||||||
|
case 'illegal2Count':
|
||||||
|
searchForm.is_illegal = 2;
|
||||||
|
searchForm.is_deal = 1;
|
||||||
|
break;
|
||||||
|
case 'illegal1Count1':
|
||||||
|
searchForm.is_illegal = 1;
|
||||||
|
searchForm.is_deal = 1;
|
||||||
|
break;
|
||||||
|
case 'illegalHandle2Status':
|
||||||
|
searchForm.handle_status_id = 1;
|
||||||
|
searchForm.is_deal = 1;
|
||||||
|
break;
|
||||||
|
case 'illegalHandle01Status':
|
||||||
|
searchForm.is_illegal = 1;
|
||||||
|
searchForm.is_deal = 1;
|
||||||
|
searchForm.is_complete = 0;
|
||||||
|
break;
|
||||||
|
case 'notComplete3':
|
||||||
|
searchForm.is_illegal = 1;
|
||||||
|
searchForm.is_complete = 0;
|
||||||
|
searchForm.out_time_flag = 1;
|
||||||
|
break;
|
||||||
|
case 'notComplete7':
|
||||||
|
searchForm.is_illegal = 1;
|
||||||
|
searchForm.is_complete = 0;
|
||||||
|
searchForm.out_time_flag = 2;
|
||||||
|
break;
|
||||||
|
case 'notComplete30':
|
||||||
|
searchForm.is_illegal = 1;
|
||||||
|
searchForm.is_complete = 0;
|
||||||
|
searchForm.out_time_flag = 4;
|
||||||
|
break;
|
||||||
|
case 'notComplete30More':
|
||||||
|
searchForm.is_illegal = 1;
|
||||||
|
searchForm.is_complete = 0;
|
||||||
|
searchForm.out_time_flag = 5;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
let tabItem = {
|
||||||
|
streetname:record.streetname,
|
||||||
|
label:column.title,
|
||||||
|
listQuery:searchForm,
|
||||||
|
}
|
||||||
|
|
||||||
|
tablist.push(tabItem)
|
||||||
|
activeKey.value = tablist.length > 1 ? (tablist.length-1).toString() : '0';
|
||||||
|
|
||||||
|
showRecordList.value = true;
|
||||||
|
currentListQuery.listQuery = searchForm
|
||||||
|
|
||||||
|
}
|
||||||
|
function handleCloseAllRecordList(){
|
||||||
|
for(let i=0;i<tablist.length;i++){
|
||||||
|
tablist.pop();
|
||||||
|
}
|
||||||
|
showRecordList.value = false;
|
||||||
|
|
||||||
|
}
|
||||||
|
function handleEdit() {
|
||||||
|
let rows = getSelectRows();
|
||||||
|
if (rows.length == 0) {
|
||||||
|
return createMessage.warn('请勾选一个角色进行编辑');
|
||||||
|
}
|
||||||
|
const record = rows[0];
|
||||||
|
openRoleModal(true, {
|
||||||
|
record,
|
||||||
|
isUpdate: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function handleDelete() {
|
||||||
|
let rows = getSelectRows();
|
||||||
|
if (rows.length == 0) {
|
||||||
|
return createMessage.warn('请勾选一个角色进行删除');
|
||||||
|
}
|
||||||
|
const query = [rows[0].id];
|
||||||
|
createConfirm({
|
||||||
|
iconType: 'info',
|
||||||
|
title: '删除',
|
||||||
|
content: '确定要删除当前角色吗',
|
||||||
|
onOk: async () => {
|
||||||
|
const data = await deleteRole(query);
|
||||||
|
if (data) {
|
||||||
|
handleSuccess();
|
||||||
|
return createMessage.success('删除成功');
|
||||||
|
} else {
|
||||||
|
return createMessage.error('删除失败');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function handlePrint(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleExport(){
|
||||||
|
createMessage.success("接口待对接!")
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleSuccess() {
|
||||||
|
clearSelectedRowKeys();
|
||||||
|
reload();
|
||||||
|
reloadDataPreview();
|
||||||
|
}
|
||||||
|
function onBtnClicked(domId) {
|
||||||
|
switch (domId) {
|
||||||
|
case 'btnAdd':
|
||||||
|
handleCreate();
|
||||||
|
break;
|
||||||
|
case 'btnEdit':
|
||||||
|
handleEdit();
|
||||||
|
break;
|
||||||
|
case 'btnDelete':
|
||||||
|
handleDelete();
|
||||||
|
break;
|
||||||
|
case 'btnModules':
|
||||||
|
let rows = getSelectRows();
|
||||||
|
if (rows.length == 0) {
|
||||||
|
return createMessage.warn('请勾选一个角色进行编辑');
|
||||||
|
}
|
||||||
|
const record = rows[0];
|
||||||
|
openModulesModal(true, {
|
||||||
|
record,
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case 'btnPrint':
|
||||||
|
handlePrint();
|
||||||
|
break;
|
||||||
|
case 'btnExport':
|
||||||
|
handleExport();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
.data-preview-container{
|
||||||
|
width:100%;
|
||||||
|
height: calc( 100% - 0px);
|
||||||
|
position:absolute;
|
||||||
|
padding:30px 10px;
|
||||||
|
top:0px;
|
||||||
|
left:0px;
|
||||||
|
background:#fff;
|
||||||
|
}
|
||||||
|
.data-preview-container-option{
|
||||||
|
width:120px;
|
||||||
|
height: 40px;
|
||||||
|
position:absolute;
|
||||||
|
top:30px;
|
||||||
|
right:0px;
|
||||||
|
}
|
||||||
|
.data-preview-container-option div{
|
||||||
|
width:40px;
|
||||||
|
height:40px;
|
||||||
|
line-height:40px;
|
||||||
|
float:left;
|
||||||
|
text-align: center;
|
||||||
|
cursor:pointer;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
|
||||||
|
export { default as RecordList} from './RecordList.vue'
|
||||||
|
|
||||||
|
|
@ -0,0 +1,234 @@
|
||||||
|
import { BasicColumn, FormSchema } from '@/components/Table';
|
||||||
|
import { h } from 'vue';
|
||||||
|
import { Switch,Tag } from 'ant-design-vue';
|
||||||
|
import { setRoleStatus } from '@/api/demo/system';
|
||||||
|
import { useMessage } from '@/hooks/web/useMessage';
|
||||||
|
|
||||||
|
type CheckedType = boolean | string | number;
|
||||||
|
|
||||||
|
|
||||||
|
export const columnsDataPreview: BasicColumn[] = [
|
||||||
|
{
|
||||||
|
title: '乡镇(街道)',
|
||||||
|
dataIndex: 'streetname',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '无人机发现数量',
|
||||||
|
dataIndex: 'allCount',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '外业图斑核查情况',
|
||||||
|
children:[
|
||||||
|
{
|
||||||
|
title: '完成外业核查数量',
|
||||||
|
dataIndex: 'handleStatus',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '24h内未核查',
|
||||||
|
dataIndex: 'notDealHour24',
|
||||||
|
width: 120,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},{
|
||||||
|
title: '下发疑似图斑类型',
|
||||||
|
children:[
|
||||||
|
{
|
||||||
|
title: '房屋翻新',
|
||||||
|
dataIndex: 'typeFanxinCount',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '房屋加盖',
|
||||||
|
dataIndex: 'typeJiagaiCount',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '房屋翻建',
|
||||||
|
dataIndex: 'typeFanjianCount',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '存量建设',
|
||||||
|
dataIndex: 'typeCunliangCount',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '推土',
|
||||||
|
dataIndex: 'typeTuituCount',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '其他',
|
||||||
|
dataIndex: 'typeOtherCount',
|
||||||
|
width: 120,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},{
|
||||||
|
title: '图斑判定',
|
||||||
|
children:[
|
||||||
|
{
|
||||||
|
title: '合法',
|
||||||
|
dataIndex: 'illegal0Count',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '违法',
|
||||||
|
dataIndex: 'illegal1Count',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '伪变化',
|
||||||
|
dataIndex: 'illegal2Count',
|
||||||
|
width: 120,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},{
|
||||||
|
title: '新增违法图斑整改情况',
|
||||||
|
dataIndex: 'handle_status_name',
|
||||||
|
children:[
|
||||||
|
{
|
||||||
|
title: '外业核实后确定违法数',
|
||||||
|
dataIndex: 'beginTime',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '违法面积',
|
||||||
|
dataIndex: 'illegalHandleAreaList',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '整改销号数',
|
||||||
|
dataIndex: 'beginTime',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '销号面积',
|
||||||
|
dataIndex: 'beginTime',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '尚未整改宗数',
|
||||||
|
dataIndex: 'beginTime',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '未整改面积',
|
||||||
|
dataIndex: 'beginTime',
|
||||||
|
width: 120,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},{
|
||||||
|
title: '违法图斑整改进度情况',
|
||||||
|
children:[
|
||||||
|
{
|
||||||
|
title: '3日内未整改完成',
|
||||||
|
dataIndex: 'notComplete3',
|
||||||
|
},{
|
||||||
|
title: '7日内未整改完成',
|
||||||
|
dataIndex: 'notComplete7',
|
||||||
|
},{
|
||||||
|
title: '30日内未整改完成',
|
||||||
|
dataIndex: 'notComplete30',
|
||||||
|
},{
|
||||||
|
title: '30日以上未整改完成',
|
||||||
|
dataIndex: 'notComplete30More',
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},{
|
||||||
|
title: '百分制考核计分',
|
||||||
|
dataIndex: 'handle_status_name',
|
||||||
|
children:[
|
||||||
|
{
|
||||||
|
title: '24h外业核查计分',
|
||||||
|
dataIndex: 'beginTime',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '整改进度计分',
|
||||||
|
dataIndex: 'beginTime',
|
||||||
|
width: 120,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},{
|
||||||
|
title: '备注',
|
||||||
|
dataIndex: 'createusername',
|
||||||
|
width: 200,
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
export const columns: BasicColumn[] = [
|
||||||
|
{
|
||||||
|
title: '案件编号',
|
||||||
|
dataIndex: 'case_no',
|
||||||
|
width: 120,
|
||||||
|
}
|
||||||
|
,{
|
||||||
|
title: '村/社区',
|
||||||
|
dataIndex: 'communityname',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '案件描述',
|
||||||
|
dataIndex: 'case_description',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '所属类型',
|
||||||
|
dataIndex: 'typename',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '处理人',
|
||||||
|
dataIndex: 'deal_username',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '处理时间',
|
||||||
|
dataIndex: 'deal_time',
|
||||||
|
width: 120,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '审核人',
|
||||||
|
dataIndex: 'verifyuser',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '审核时间',
|
||||||
|
dataIndex: 'verifytime',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '案件状态',
|
||||||
|
dataIndex: 'handle_status_name',
|
||||||
|
width: 120,
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
export const searchFormSchema: FormSchema[] = [
|
||||||
|
{
|
||||||
|
field: 'key',
|
||||||
|
label: '关键字段',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: '[startDate, endDate]',
|
||||||
|
label: '日期范围',
|
||||||
|
component: 'RangePicker',
|
||||||
|
colProps: { span: 8 },
|
||||||
|
componentProps: {
|
||||||
|
format: 'YYYY-MM-DD',
|
||||||
|
placeholder: ['开始日期', '结束日期'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
export const formSchema: FormSchema[] = [
|
||||||
|
{
|
||||||
|
field: 'id',
|
||||||
|
label: '角色名称',
|
||||||
|
required: true,
|
||||||
|
component: 'Input',
|
||||||
|
ifShow:false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'name',
|
||||||
|
label: '角色名称',
|
||||||
|
required: true,
|
||||||
|
component: 'Input',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'status',
|
||||||
|
label: '状态',
|
||||||
|
component: 'RadioButtonGroup',
|
||||||
|
defaultValue: 0,
|
||||||
|
componentProps: {
|
||||||
|
options: [
|
||||||
|
{ label: '启用', value: 0},
|
||||||
|
{ label: '停用', value: 1 },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
@ -0,0 +1,332 @@
|
||||||
|
import { BasicColumn, FormSchema } from '@/components/Table';
|
||||||
|
import { h } from 'vue';
|
||||||
|
import { Switch,Tag } from 'ant-design-vue';
|
||||||
|
import { setRoleStatus } from '@/api/demo/system';
|
||||||
|
import { useMessage } from '@/hooks/web/useMessage';
|
||||||
|
|
||||||
|
type CheckedType = boolean | string | number;
|
||||||
|
|
||||||
|
|
||||||
|
export const columnsDataPreview: BasicColumn[] = [
|
||||||
|
{
|
||||||
|
title: '乡镇(街道)',
|
||||||
|
dataIndex: 'streetname',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '无人机发现数量',
|
||||||
|
dataIndex: 'allCount',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '外业图斑核查情况',
|
||||||
|
children:[
|
||||||
|
{
|
||||||
|
title: '完成外业核查数量',
|
||||||
|
dataIndex: 'handleStatus',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '24h内未核查',
|
||||||
|
dataIndex: 'notDealHour24',
|
||||||
|
width: 120,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},{
|
||||||
|
title: '下发疑似图斑类型',
|
||||||
|
dataIndex: '',
|
||||||
|
children:[
|
||||||
|
{
|
||||||
|
title: '房屋翻新',
|
||||||
|
dataIndex: 'typeFanxinCount',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '房屋加盖',
|
||||||
|
dataIndex: 'typeJiagaiCount',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '房屋翻建',
|
||||||
|
dataIndex: 'typeFanjianCount',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '存量建设',
|
||||||
|
dataIndex: 'typeCunliangCount',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '推土',
|
||||||
|
dataIndex: 'typeTuituCount',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '其他',
|
||||||
|
dataIndex: 'typeOtherCount',
|
||||||
|
width: 120,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},{
|
||||||
|
title: '图斑判定',
|
||||||
|
dataIndex:"1",
|
||||||
|
children:[
|
||||||
|
{
|
||||||
|
title: '合法',
|
||||||
|
dataIndex: 'illegal0Count',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '违法',
|
||||||
|
dataIndex: 'illegal1Count',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '伪变化',
|
||||||
|
dataIndex: 'illegal2Count',
|
||||||
|
width: 120,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},{
|
||||||
|
title: '新增违法图斑整改情况',
|
||||||
|
dataIndex: '2',
|
||||||
|
children:[
|
||||||
|
{
|
||||||
|
title: '外业核实后确定违法数',
|
||||||
|
dataIndex: 'illegal1Count1',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '违法面积',
|
||||||
|
dataIndex: 'illegalHandleAreaList',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '整改销号数',
|
||||||
|
dataIndex: 'illegalHandle2Status',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '销号面积',
|
||||||
|
dataIndex: 'illegalHandle2AreaList',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '尚未整改宗数',
|
||||||
|
dataIndex: 'illegalHandle01Status',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '未整改面积',
|
||||||
|
dataIndex: 'illegalHandle01AreaList',
|
||||||
|
width: 120,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},{
|
||||||
|
title: '违法图斑整改进度情况',
|
||||||
|
children:[
|
||||||
|
{
|
||||||
|
title: '3日内未整改完成',
|
||||||
|
dataIndex: 'notComplete3',
|
||||||
|
},{
|
||||||
|
title: '7日内未整改完成',
|
||||||
|
dataIndex: 'notComplete7',
|
||||||
|
},{
|
||||||
|
title: '30日内未整改完成',
|
||||||
|
dataIndex: 'notComplete30',
|
||||||
|
},{
|
||||||
|
title: '30日以上未整改完成',
|
||||||
|
dataIndex: 'notComplete30More',
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},{
|
||||||
|
title: '百分制考核计分',
|
||||||
|
dataIndex: 'handle_status_name',
|
||||||
|
children:[
|
||||||
|
{
|
||||||
|
title: '24h外业核查计分',
|
||||||
|
dataIndex: 'beginTime',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '整改进度计分',
|
||||||
|
dataIndex: 'beginTime',
|
||||||
|
width: 120,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '备注',
|
||||||
|
dataIndex: 'mask',
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
export const columns: BasicColumn[] = [
|
||||||
|
{
|
||||||
|
title: '乡镇(街道)',
|
||||||
|
dataIndex: 'streetname',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '无人机发现数量',
|
||||||
|
dataIndex: 'allCount',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '外业图斑核查情况',
|
||||||
|
children:[
|
||||||
|
{
|
||||||
|
title: '完成外业核查数量',
|
||||||
|
dataIndex: 'handleStatus',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '24h内未核查',
|
||||||
|
dataIndex: 'notDealHour24',
|
||||||
|
width: 120,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},{
|
||||||
|
title: '下发疑似图斑类型',
|
||||||
|
dataIndex: '',
|
||||||
|
children:[
|
||||||
|
{
|
||||||
|
title: '房屋翻新',
|
||||||
|
dataIndex: 'typeFanxinCount',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '房屋加盖',
|
||||||
|
dataIndex: 'typeJiagaiCount',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '房屋翻建',
|
||||||
|
dataIndex: 'typeFanjianCount',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '存量建设',
|
||||||
|
dataIndex: 'typeCunliangCount',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '推土',
|
||||||
|
dataIndex: 'typeTuituCount',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '其他',
|
||||||
|
dataIndex: 'typeOtherCount',
|
||||||
|
width: 120,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},{
|
||||||
|
title: '图斑判定',
|
||||||
|
dataIndex:"1",
|
||||||
|
children:[
|
||||||
|
{
|
||||||
|
title: '合法',
|
||||||
|
dataIndex: 'illegal0Count',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '违法',
|
||||||
|
dataIndex: 'illegal1Count',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '伪变化',
|
||||||
|
dataIndex: 'illegal2Count',
|
||||||
|
width: 120,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},{
|
||||||
|
title: '新增违法图斑整改情况',
|
||||||
|
dataIndex: '2',
|
||||||
|
children:[
|
||||||
|
{
|
||||||
|
title: '外业核实后确定违法数',
|
||||||
|
dataIndex: 'illegal1Count1',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '违法面积',
|
||||||
|
dataIndex: 'illegalHandleAreaList',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '整改销号数',
|
||||||
|
dataIndex: 'illegalHandle2Status',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '销号面积',
|
||||||
|
dataIndex: 'illegalHandle2AreaList',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '尚未整改宗数',
|
||||||
|
dataIndex: 'illegalHandle01Status',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '未整改面积',
|
||||||
|
dataIndex: 'illegalHandle01AreaList',
|
||||||
|
width: 120,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},{
|
||||||
|
title: '违法图斑整改进度情况',
|
||||||
|
children:[
|
||||||
|
{
|
||||||
|
title: '3日内未整改完成',
|
||||||
|
dataIndex: 'notComplete3',
|
||||||
|
},{
|
||||||
|
title: '7日内未整改完成',
|
||||||
|
dataIndex: 'notComplete7',
|
||||||
|
},{
|
||||||
|
title: '30日内未整改完成',
|
||||||
|
dataIndex: 'notComplete30',
|
||||||
|
},{
|
||||||
|
title: '30日以上未整改完成',
|
||||||
|
dataIndex: 'notComplete30More',
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},{
|
||||||
|
title: '百分制考核计分',
|
||||||
|
dataIndex: 'handle_status_name',
|
||||||
|
children:[
|
||||||
|
{
|
||||||
|
title: '24h外业核查计分',
|
||||||
|
dataIndex: 'beginTime',
|
||||||
|
width: 120,
|
||||||
|
},{
|
||||||
|
title: '整改进度计分',
|
||||||
|
dataIndex: 'beginTime',
|
||||||
|
width: 120,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '备注',
|
||||||
|
dataIndex: 'mask',
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
export const searchFormSchema: FormSchema[] = [
|
||||||
|
{
|
||||||
|
field: 'key',
|
||||||
|
label: '关键字段',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: '[identification_start_time, identification_end_time]',
|
||||||
|
label: '日期范围',
|
||||||
|
component: 'RangePicker',
|
||||||
|
colProps: { span: 8 },
|
||||||
|
componentProps: {
|
||||||
|
format: 'YYYY-MM-DD',
|
||||||
|
placeholder: ['开始日期', '结束日期'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
export const formSchema: FormSchema[] = [
|
||||||
|
{
|
||||||
|
field: 'id',
|
||||||
|
label: '角色名称',
|
||||||
|
required: true,
|
||||||
|
component: 'Input',
|
||||||
|
ifShow:false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'name',
|
||||||
|
label: '角色名称',
|
||||||
|
required: true,
|
||||||
|
component: 'Input',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'status',
|
||||||
|
label: '状态',
|
||||||
|
component: 'RadioButtonGroup',
|
||||||
|
defaultValue: 0,
|
||||||
|
componentProps: {
|
||||||
|
options: [
|
||||||
|
{ label: '启用', value: 0},
|
||||||
|
{ label: '停用', value: 1 },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
// vite.config.ts
|
||||||
|
import { defineApplicationConfig } from "file:///E:/projects/%E5%B8%82%E7%BA%A7%E5%A4%A9%E7%A9%BA%E5%9C%B0%E7%9B%91%E6%B5%8B/merge/ShiJiTianKongDiPingTai/internal/vite-config/dist/index.mjs";
|
||||||
|
import { mars3dPlugin } from "file:///E:/projects/%E5%B8%82%E7%BA%A7%E5%A4%A9%E7%A9%BA%E5%9C%B0%E7%9B%91%E6%B5%8B/merge/ShiJiTianKongDiPingTai/node_modules/.pnpm/vite-plugin-mars3d@3.1.3_rollup@3.29.4/node_modules/vite-plugin-mars3d/dist/index.js";
|
||||||
|
import path from "path";
|
||||||
|
var __vite_injected_original_dirname = "E:\\projects\\\u5E02\u7EA7\u5929\u7A7A\u5730\u76D1\u6D4B\\merge\\ShiJiTianKongDiPingTai";
|
||||||
|
var vite_config_default = defineApplicationConfig({
|
||||||
|
overrides: {
|
||||||
|
optimizeDeps: {
|
||||||
|
include: [
|
||||||
|
"echarts/core",
|
||||||
|
"echarts/charts",
|
||||||
|
"echarts/components",
|
||||||
|
"echarts/renderers",
|
||||||
|
"qrcode",
|
||||||
|
"@iconify/iconify",
|
||||||
|
"ant-design-vue/es/locale/zh_CN",
|
||||||
|
"ant-design-vue/es/locale/en_US",
|
||||||
|
"@/../lib/vform/designer.umd.js"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
build: {
|
||||||
|
/* 其他build生产打包配置省略 */
|
||||||
|
//...
|
||||||
|
target: "esnext",
|
||||||
|
commonjsOptions: {
|
||||||
|
include: /node_modules|lib/
|
||||||
|
//这里记得把lib目录加进来,否则生产打包会报错!!
|
||||||
|
}
|
||||||
|
},
|
||||||
|
server: {
|
||||||
|
proxy: {
|
||||||
|
"/basic-api": {
|
||||||
|
target: "http://localhost:3000",
|
||||||
|
changeOrigin: true,
|
||||||
|
ws: true,
|
||||||
|
rewrite: (path2) => path2.replace(new RegExp(`^/basic-api`), "")
|
||||||
|
// only https
|
||||||
|
// secure: false
|
||||||
|
},
|
||||||
|
"/upload": {
|
||||||
|
target: "http://localhost:3300/upload",
|
||||||
|
changeOrigin: true,
|
||||||
|
ws: true,
|
||||||
|
rewrite: (path2) => path2.replace(new RegExp(`^/upload`), "")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
warmup: {
|
||||||
|
clientFiles: ["./index.html", "./src/{views,components}/*"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
define: {
|
||||||
|
"process.env": {
|
||||||
|
BASE_URL: "/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
css: {
|
||||||
|
preprocessorOptions: {
|
||||||
|
less: {
|
||||||
|
javascriptEnabled: true,
|
||||||
|
additionalData: `
|
||||||
|
@import "${path.resolve(__vite_injected_original_dirname, "src/mars/components/mars-ui/base.less")}";
|
||||||
|
`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
plugins: [mars3dPlugin()]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
export {
|
||||||
|
vite_config_default as default
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJFOlxcXFxwcm9qZWN0c1xcXFxcdTVFMDJcdTdFQTdcdTU5MjlcdTdBN0FcdTU3MzBcdTc2RDFcdTZENEJcXFxcbWVyZ2VcXFxcU2hpSmlUaWFuS29uZ0RpUGluZ1RhaVwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRTpcXFxccHJvamVjdHNcXFxcXHU1RTAyXHU3RUE3XHU1OTI5XHU3QTdBXHU1NzMwXHU3NkQxXHU2RDRCXFxcXG1lcmdlXFxcXFNoaUppVGlhbktvbmdEaVBpbmdUYWlcXFxcdml0ZS5jb25maWcudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0U6L3Byb2plY3RzLyVFNSVCOCU4MiVFNyVCQSVBNyVFNSVBNCVBOSVFNyVBOSVCQSVFNSU5QyVCMCVFNyU5QiU5MSVFNiVCNSU4Qi9tZXJnZS9TaGlKaVRpYW5Lb25nRGlQaW5nVGFpL3ZpdGUuY29uZmlnLnRzXCI7aW1wb3J0IHsgZGVmaW5lQXBwbGljYXRpb25Db25maWcgfSBmcm9tICdAdmJlbi92aXRlLWNvbmZpZyc7XG5pbXBvcnQgeyBtYXJzM2RQbHVnaW4gfSBmcm9tICd2aXRlLXBsdWdpbi1tYXJzM2QnO1xuaW1wb3J0IHBhdGgsIHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVBcHBsaWNhdGlvbkNvbmZpZyh7XG4gIG92ZXJyaWRlczoge1xuICAgIG9wdGltaXplRGVwczoge1xuICAgICAgaW5jbHVkZTogW1xuICAgICAgICAnZWNoYXJ0cy9jb3JlJyxcbiAgICAgICAgJ2VjaGFydHMvY2hhcnRzJyxcbiAgICAgICAgJ2VjaGFydHMvY29tcG9uZW50cycsXG4gICAgICAgICdlY2hhcnRzL3JlbmRlcmVycycsXG4gICAgICAgICdxcmNvZGUnLFxuICAgICAgICAnQGljb25pZnkvaWNvbmlmeScsXG4gICAgICAgICdhbnQtZGVzaWduLXZ1ZS9lcy9sb2NhbGUvemhfQ04nLFxuICAgICAgICAnYW50LWRlc2lnbi12dWUvZXMvbG9jYWxlL2VuX1VTJyxcbiAgICAgICAgJ0AvLi4vbGliL3Zmb3JtL2Rlc2lnbmVyLnVtZC5qcycsXG4gICAgICBdLFxuICAgIH0sXG4gICAgYnVpbGQ6IHtcbiAgICAgIC8qIFx1NTE3Nlx1NEVENmJ1aWxkXHU3NTFGXHU0RUE3XHU2MjUzXHU1MzA1XHU5MTREXHU3RjZFXHU3NzAxXHU3NTY1ICovXG4gICAgICAvLy4uLlxuICAgICAgdGFyZ2V0OiAnZXNuZXh0JyxcbiAgICAgIGNvbW1vbmpzT3B0aW9uczoge1xuICAgICAgICBpbmNsdWRlOiAvbm9kZV9tb2R1bGVzfGxpYi8sIC8vXHU4RkQ5XHU5MUNDXHU4QkIwXHU1Rjk3XHU2MjhBbGliXHU3NkVFXHU1RjU1XHU1MkEwXHU4RkRCXHU2NzY1XHVGRjBDXHU1NDI2XHU1MjE5XHU3NTFGXHU0RUE3XHU2MjUzXHU1MzA1XHU0RjFBXHU2MkE1XHU5NTE5XHVGRjAxXHVGRjAxXG4gICAgICB9LFxuICAgIH0sXG4gICAgc2VydmVyOiB7XG4gICAgICBwcm94eToge1xuICAgICAgICAnL2Jhc2ljLWFwaSc6IHtcbiAgICAgICAgICB0YXJnZXQ6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnLFxuICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcbiAgICAgICAgICB3czogdHJ1ZSxcbiAgICAgICAgICByZXdyaXRlOiAocGF0aCkgPT4gcGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoYF4vYmFzaWMtYXBpYCksICcnKSxcbiAgICAgICAgICAvLyBvbmx5IGh0dHBzXG4gICAgICAgICAgLy8gc2VjdXJlOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICAnL3VwbG9hZCc6IHtcbiAgICAgICAgICB0YXJnZXQ6ICdodHRwOi8vbG9jYWxob3N0OjMzMDAvdXBsb2FkJyxcbiAgICAgICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXG4gICAgICAgICAgd3M6IHRydWUsXG4gICAgICAgICAgcmV3cml0ZTogKHBhdGgpID0+IHBhdGgucmVwbGFjZShuZXcgUmVnRXhwKGBeL3VwbG9hZGApLCAnJyksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgd2FybXVwOiB7XG4gICAgICAgIGNsaWVudEZpbGVzOiBbJy4vaW5kZXguaHRtbCcsICcuL3NyYy97dmlld3MsY29tcG9uZW50c30vKiddLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGRlZmluZToge1xuICAgICAgJ3Byb2Nlc3MuZW52Jzoge1xuICAgICAgICBCQVNFX1VSTDogJy8nLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNzczoge1xuICAgICAgcHJlcHJvY2Vzc29yT3B0aW9uczoge1xuICAgICAgICBsZXNzOiB7XG4gICAgICAgICAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgYWRkaXRpb25hbERhdGE6IGBcbiAgICAgICAgICBAaW1wb3J0IFwiJHtwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnc3JjL21hcnMvY29tcG9uZW50cy9tYXJzLXVpL2Jhc2UubGVzcycpfVwiO1xuICAgICAgICAgIGAsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgcGx1Z2luczogW21hcnMzZFBsdWdpbigpXSxcbiAgfSxcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFvWSxTQUFTLCtCQUErQjtBQUM1YSxTQUFTLG9CQUFvQjtBQUM3QixPQUFPLFVBQXVCO0FBRjlCLElBQU0sbUNBQW1DO0FBSXpDLElBQU8sc0JBQVEsd0JBQXdCO0FBQUEsRUFDckMsV0FBVztBQUFBLElBQ1QsY0FBYztBQUFBLE1BQ1osU0FBUztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsSUFDQSxPQUFPO0FBQUE7QUFBQTtBQUFBLE1BR0wsUUFBUTtBQUFBLE1BQ1IsaUJBQWlCO0FBQUEsUUFDZixTQUFTO0FBQUE7QUFBQSxNQUNYO0FBQUEsSUFDRjtBQUFBLElBQ0EsUUFBUTtBQUFBLE1BQ04sT0FBTztBQUFBLFFBQ0wsY0FBYztBQUFBLFVBQ1osUUFBUTtBQUFBLFVBQ1IsY0FBYztBQUFBLFVBQ2QsSUFBSTtBQUFBLFVBQ0osU0FBUyxDQUFDQSxVQUFTQSxNQUFLLFFBQVEsSUFBSSxPQUFPLGFBQWEsR0FBRyxFQUFFO0FBQUE7QUFBQTtBQUFBLFFBRy9EO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDVCxRQUFRO0FBQUEsVUFDUixjQUFjO0FBQUEsVUFDZCxJQUFJO0FBQUEsVUFDSixTQUFTLENBQUNBLFVBQVNBLE1BQUssUUFBUSxJQUFJLE9BQU8sVUFBVSxHQUFHLEVBQUU7QUFBQSxRQUM1RDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLFFBQVE7QUFBQSxRQUNOLGFBQWEsQ0FBQyxnQkFBZ0IsNEJBQTRCO0FBQUEsTUFDNUQ7QUFBQSxJQUNGO0FBQUEsSUFDQSxRQUFRO0FBQUEsTUFDTixlQUFlO0FBQUEsUUFDYixVQUFVO0FBQUEsTUFDWjtBQUFBLElBQ0Y7QUFBQSxJQUNBLEtBQUs7QUFBQSxNQUNILHFCQUFxQjtBQUFBLFFBQ25CLE1BQU07QUFBQSxVQUNKLG1CQUFtQjtBQUFBLFVBQ25CLGdCQUFnQjtBQUFBLHFCQUNMLEtBQUssUUFBUSxrQ0FBVyx1Q0FBdUMsQ0FBQztBQUFBO0FBQUEsUUFFN0U7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBQ0EsU0FBUyxDQUFDLGFBQWEsQ0FBQztBQUFBLEVBQzFCO0FBQ0YsQ0FBQzsiLAogICJuYW1lcyI6IFsicGF0aCJdCn0K
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
// vite.config.ts
|
||||||
|
import { defineApplicationConfig } from "file:///E:/projects/%E5%B8%82%E7%BA%A7%E5%A4%A9%E7%A9%BA%E5%9C%B0%E7%9B%91%E6%B5%8B/merge/ShiJiTianKongDiPingTai/internal/vite-config/dist/index.mjs";
|
||||||
|
import { mars3dPlugin } from "file:///E:/projects/%E5%B8%82%E7%BA%A7%E5%A4%A9%E7%A9%BA%E5%9C%B0%E7%9B%91%E6%B5%8B/merge/ShiJiTianKongDiPingTai/node_modules/.pnpm/vite-plugin-mars3d@3.1.3_rollup@3.29.4/node_modules/vite-plugin-mars3d/dist/index.js";
|
||||||
|
import path from "path";
|
||||||
|
var __vite_injected_original_dirname = "E:\\projects\\\u5E02\u7EA7\u5929\u7A7A\u5730\u76D1\u6D4B\\merge\\ShiJiTianKongDiPingTai";
|
||||||
|
var vite_config_default = defineApplicationConfig({
|
||||||
|
overrides: {
|
||||||
|
optimizeDeps: {
|
||||||
|
include: [
|
||||||
|
"echarts/core",
|
||||||
|
"echarts/charts",
|
||||||
|
"echarts/components",
|
||||||
|
"echarts/renderers",
|
||||||
|
"qrcode",
|
||||||
|
"@iconify/iconify",
|
||||||
|
"ant-design-vue/es/locale/zh_CN",
|
||||||
|
"ant-design-vue/es/locale/en_US",
|
||||||
|
"@/../lib/vform/designer.umd.js"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
build: {
|
||||||
|
/* 其他build生产打包配置省略 */
|
||||||
|
//...
|
||||||
|
target: "esnext",
|
||||||
|
commonjsOptions: {
|
||||||
|
include: /node_modules|lib/
|
||||||
|
//这里记得把lib目录加进来,否则生产打包会报错!!
|
||||||
|
}
|
||||||
|
},
|
||||||
|
server: {
|
||||||
|
proxy: {
|
||||||
|
"/basic-api": {
|
||||||
|
target: "http://localhost:3000",
|
||||||
|
changeOrigin: true,
|
||||||
|
ws: true,
|
||||||
|
rewrite: (path2) => path2.replace(new RegExp(`^/basic-api`), "")
|
||||||
|
// only https
|
||||||
|
// secure: false
|
||||||
|
},
|
||||||
|
"/upload": {
|
||||||
|
target: "http://localhost:3300/upload",
|
||||||
|
changeOrigin: true,
|
||||||
|
ws: true,
|
||||||
|
rewrite: (path2) => path2.replace(new RegExp(`^/upload`), "")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
warmup: {
|
||||||
|
clientFiles: ["./index.html", "./src/{views,components}/*"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
define: {
|
||||||
|
"process.env": {
|
||||||
|
BASE_URL: "/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
css: {
|
||||||
|
preprocessorOptions: {
|
||||||
|
less: {
|
||||||
|
javascriptEnabled: true,
|
||||||
|
additionalData: `
|
||||||
|
@import "${path.resolve(__vite_injected_original_dirname, "src/mars/components/mars-ui/base.less")}";
|
||||||
|
`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
plugins: [mars3dPlugin()]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
export {
|
||||||
|
vite_config_default as default
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJFOlxcXFxwcm9qZWN0c1xcXFxcdTVFMDJcdTdFQTdcdTU5MjlcdTdBN0FcdTU3MzBcdTc2RDFcdTZENEJcXFxcbWVyZ2VcXFxcU2hpSmlUaWFuS29uZ0RpUGluZ1RhaVwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRTpcXFxccHJvamVjdHNcXFxcXHU1RTAyXHU3RUE3XHU1OTI5XHU3QTdBXHU1NzMwXHU3NkQxXHU2RDRCXFxcXG1lcmdlXFxcXFNoaUppVGlhbktvbmdEaVBpbmdUYWlcXFxcdml0ZS5jb25maWcudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0U6L3Byb2plY3RzLyVFNSVCOCU4MiVFNyVCQSVBNyVFNSVBNCVBOSVFNyVBOSVCQSVFNSU5QyVCMCVFNyU5QiU5MSVFNiVCNSU4Qi9tZXJnZS9TaGlKaVRpYW5Lb25nRGlQaW5nVGFpL3ZpdGUuY29uZmlnLnRzXCI7aW1wb3J0IHsgZGVmaW5lQXBwbGljYXRpb25Db25maWcgfSBmcm9tICdAdmJlbi92aXRlLWNvbmZpZyc7XG5pbXBvcnQgeyBtYXJzM2RQbHVnaW4gfSBmcm9tICd2aXRlLXBsdWdpbi1tYXJzM2QnO1xuaW1wb3J0IHBhdGgsIHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVBcHBsaWNhdGlvbkNvbmZpZyh7XG4gIG92ZXJyaWRlczoge1xuICAgIG9wdGltaXplRGVwczoge1xuICAgICAgaW5jbHVkZTogW1xuICAgICAgICAnZWNoYXJ0cy9jb3JlJyxcbiAgICAgICAgJ2VjaGFydHMvY2hhcnRzJyxcbiAgICAgICAgJ2VjaGFydHMvY29tcG9uZW50cycsXG4gICAgICAgICdlY2hhcnRzL3JlbmRlcmVycycsXG4gICAgICAgICdxcmNvZGUnLFxuICAgICAgICAnQGljb25pZnkvaWNvbmlmeScsXG4gICAgICAgICdhbnQtZGVzaWduLXZ1ZS9lcy9sb2NhbGUvemhfQ04nLFxuICAgICAgICAnYW50LWRlc2lnbi12dWUvZXMvbG9jYWxlL2VuX1VTJyxcbiAgICAgICAgJ0AvLi4vbGliL3Zmb3JtL2Rlc2lnbmVyLnVtZC5qcycsXG4gICAgICBdLFxuICAgIH0sXG4gICAgYnVpbGQ6IHtcbiAgICAgIC8qIFx1NTE3Nlx1NEVENmJ1aWxkXHU3NTFGXHU0RUE3XHU2MjUzXHU1MzA1XHU5MTREXHU3RjZFXHU3NzAxXHU3NTY1ICovXG4gICAgICAvLy4uLlxuICAgICAgdGFyZ2V0OiAnZXNuZXh0JyxcbiAgICAgIGNvbW1vbmpzT3B0aW9uczoge1xuICAgICAgICBpbmNsdWRlOiAvbm9kZV9tb2R1bGVzfGxpYi8sIC8vXHU4RkQ5XHU5MUNDXHU4QkIwXHU1Rjk3XHU2MjhBbGliXHU3NkVFXHU1RjU1XHU1MkEwXHU4RkRCXHU2NzY1XHVGRjBDXHU1NDI2XHU1MjE5XHU3NTFGXHU0RUE3XHU2MjUzXHU1MzA1XHU0RjFBXHU2MkE1XHU5NTE5XHVGRjAxXHVGRjAxXG4gICAgICB9LFxuICAgIH0sXG4gICAgc2VydmVyOiB7XG4gICAgICBwcm94eToge1xuICAgICAgICAnL2Jhc2ljLWFwaSc6IHtcbiAgICAgICAgICB0YXJnZXQ6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnLFxuICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcbiAgICAgICAgICB3czogdHJ1ZSxcbiAgICAgICAgICByZXdyaXRlOiAocGF0aCkgPT4gcGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoYF4vYmFzaWMtYXBpYCksICcnKSxcbiAgICAgICAgICAvLyBvbmx5IGh0dHBzXG4gICAgICAgICAgLy8gc2VjdXJlOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICAnL3VwbG9hZCc6IHtcbiAgICAgICAgICB0YXJnZXQ6ICdodHRwOi8vbG9jYWxob3N0OjMzMDAvdXBsb2FkJyxcbiAgICAgICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXG4gICAgICAgICAgd3M6IHRydWUsXG4gICAgICAgICAgcmV3cml0ZTogKHBhdGgpID0+IHBhdGgucmVwbGFjZShuZXcgUmVnRXhwKGBeL3VwbG9hZGApLCAnJyksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgd2FybXVwOiB7XG4gICAgICAgIGNsaWVudEZpbGVzOiBbJy4vaW5kZXguaHRtbCcsICcuL3NyYy97dmlld3MsY29tcG9uZW50c30vKiddLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGRlZmluZToge1xuICAgICAgJ3Byb2Nlc3MuZW52Jzoge1xuICAgICAgICBCQVNFX1VSTDogJy8nLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNzczoge1xuICAgICAgcHJlcHJvY2Vzc29yT3B0aW9uczoge1xuICAgICAgICBsZXNzOiB7XG4gICAgICAgICAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgYWRkaXRpb25hbERhdGE6IGBcbiAgICAgICAgICBAaW1wb3J0IFwiJHtwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnc3JjL21hcnMvY29tcG9uZW50cy9tYXJzLXVpL2Jhc2UubGVzcycpfVwiO1xuICAgICAgICAgIGAsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgcGx1Z2luczogW21hcnMzZFBsdWdpbigpXSxcbiAgfSxcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFvWSxTQUFTLCtCQUErQjtBQUM1YSxTQUFTLG9CQUFvQjtBQUM3QixPQUFPLFVBQXVCO0FBRjlCLElBQU0sbUNBQW1DO0FBSXpDLElBQU8sc0JBQVEsd0JBQXdCO0FBQUEsRUFDckMsV0FBVztBQUFBLElBQ1QsY0FBYztBQUFBLE1BQ1osU0FBUztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsSUFDQSxPQUFPO0FBQUE7QUFBQTtBQUFBLE1BR0wsUUFBUTtBQUFBLE1BQ1IsaUJBQWlCO0FBQUEsUUFDZixTQUFTO0FBQUE7QUFBQSxNQUNYO0FBQUEsSUFDRjtBQUFBLElBQ0EsUUFBUTtBQUFBLE1BQ04sT0FBTztBQUFBLFFBQ0wsY0FBYztBQUFBLFVBQ1osUUFBUTtBQUFBLFVBQ1IsY0FBYztBQUFBLFVBQ2QsSUFBSTtBQUFBLFVBQ0osU0FBUyxDQUFDQSxVQUFTQSxNQUFLLFFBQVEsSUFBSSxPQUFPLGFBQWEsR0FBRyxFQUFFO0FBQUE7QUFBQTtBQUFBLFFBRy9EO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDVCxRQUFRO0FBQUEsVUFDUixjQUFjO0FBQUEsVUFDZCxJQUFJO0FBQUEsVUFDSixTQUFTLENBQUNBLFVBQVNBLE1BQUssUUFBUSxJQUFJLE9BQU8sVUFBVSxHQUFHLEVBQUU7QUFBQSxRQUM1RDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLFFBQVE7QUFBQSxRQUNOLGFBQWEsQ0FBQyxnQkFBZ0IsNEJBQTRCO0FBQUEsTUFDNUQ7QUFBQSxJQUNGO0FBQUEsSUFDQSxRQUFRO0FBQUEsTUFDTixlQUFlO0FBQUEsUUFDYixVQUFVO0FBQUEsTUFDWjtBQUFBLElBQ0Y7QUFBQSxJQUNBLEtBQUs7QUFBQSxNQUNILHFCQUFxQjtBQUFBLFFBQ25CLE1BQU07QUFBQSxVQUNKLG1CQUFtQjtBQUFBLFVBQ25CLGdCQUFnQjtBQUFBLHFCQUNMLEtBQUssUUFBUSxrQ0FBVyx1Q0FBdUMsQ0FBQztBQUFBO0FBQUEsUUFFN0U7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBQ0EsU0FBUyxDQUFDLGFBQWEsQ0FBQztBQUFBLEVBQzFCO0FBQ0YsQ0FBQzsiLAogICJuYW1lcyI6IFsicGF0aCJdCn0K
|
||||||
Loading…
Reference in New Issue