LinYeFangHuo/src/views/demo/meshing/inspection/LeftTable.vue

271 lines
7.2 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

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

<template>
<div class="m-4 mr-0 overflow-hidden bg-white" style="overflow: auto">
<div class="flex justify-around items-center form-data m-4">
<a-input v-model:value="formState.keyWord" placeholder="输入关键字" style="width: 30%" />
<a-tree-select
v-model:value="formState.areaid"
style="width: 30%"
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
:tree-data="treeData"
:field-names="{ label: 'name', value: 'id' }"
placeholder="选择行政区划"
allow-clear
/>
<div class="form-button">
<a-button type="primary" @click="getTaskList"></a-button>
<a-button type="primary" @click="toStatic"></a-button>
<a-button type="primary" @click="toInspection"></a-button>
</div>
</div>
<div class="table-data">
<div style="width: 100%; text-align: center; padding: 100px 0px" v-if="tasklist.length <= 0">
<img src="@/assets/images/canvas/noData.png" style="width: 140px; margin-bottom: 20px" />
<p style="color: #cfcfcf">暂无数据</p>
</div>
<div class="clock-item-container" v-else>
<div class="clock-item" v-for="(item, index) in tasklist" :key="index">
<div class="clock-item-icon">
<img src="@/assets/images/meshing/clockIn-bg.png" />
</div>
<div class="clock-item-info">
<p>打卡点名称{{ item.pointname }}</p>
<p>创建时间{{ item.createtime }}</p>
<p>负责人员{{ item.usernames }}</p>
<p style="text-align: right">
<a-popconfirm
title="确定删除吗?"
ok-text=""
cancel-text=""
@confirm="deleteTask(item.id)"
>
<a-button type="primary" danger size="mini">删除</a-button>
</a-popconfirm>
<a-button type="primary" round size="mini" @click="editClockInfo(item)"
>编辑</a-button
>
<a-button type="primary" round size="mini" @click="lookClockInfo(item)"
>查看</a-button
>
</p>
</div>
</div>
</div>
<div class="table-data-pagination m-4">
<a-pagination
size="small"
show-size-changer
show-quick-jumper
v-model:current="pageData.current"
:total="pageData.total"
@change="paginationOnChange"
@showSizeChange="onShowSizeChange"
:show-total="(total) => `${total}`"
/>
</div>
</div>
<EditModal @register="editModal" @success="editSuccess" />
<a-modal
v-model:visible="statisticsModalVisible"
title="统计"
wrap-class-name="full-modal"
width="100%"
:footer="null"
>
<StatisticsModel />
</a-modal>
<a-modal
v-model:visible="InspectionModelVisible"
title="巡检"
wrap-class-name="full-modal"
width="100%"
:footer="null"
destroyOnClose
>
<InspectionModel />
</a-modal>
</div>
</template>
<script setup lang="ts">
import { reactive, UnwrapRef, ref, onMounted } from 'vue';
import { useModal } from '@/components/Modal';
import { EditModal, StatisticsModel, InspectionModel } from './index';
import { getCheckPointList, deleteCheckPoint } from '@/api/firegrid/index';
import { useMessage } from '@/hooks/web/useMessage';
import { EventBus } from '@/utils/eventBus';
import { getDeptList } from '@/api/demo/system';
const { createMessage } = useMessage();
const emits = defineEmits(['viewHandle']);
const [editModal, { openModal: openEidtModal }] = useModal();
const statisticsModalVisible = ref(false);
const InspectionModelVisible = ref(false);
onMounted(() => {
getTree();
getTaskList();
EventBus.on('addCheckPoint', (data) => {
getTaskList();
});
});
// 查询
interface FormState {
keyWord: string | null;
areaid: string | null;
}
interface listObj {
Id: number;
PointName: string;
Lat: string;
Lng: string;
CreateTime: string;
CreateUserName: string;
}
const formState: UnwrapRef<FormState> = reactive({
keyWord: null,
areaid: null,
});
const treeData: any = ref([]);
// 分页
const pageData = reactive({
total: 100,
current: 1,
pageSize: 10,
});
const getTree = () => {
getDeptList().then((res) => {
treeData.value = res;
});
};
const paginationOnChange = (page: number) => {
pageData.current = page;
getTaskList();
};
const onShowSizeChange = (current: number, pageSize: number) => {
pageData.current = current;
pageData.pageSize = pageSize;
getTaskList();
};
// 列表
const tasklist = ref<listObj[]>([]);
const getTaskList = () => {
const params = {
page: pageData.current,
limit: pageData.pageSize,
pointName: formState.keyWord,
areaid: formState.areaid,
};
EventBus.emit('getPatrolMap', params);
getCheckPointList(params).then((res) => {
tasklist.value = res.items;
pageData.total = res.total;
});
};
// 删除
const deleteTask = (id) => {
deleteCheckPoint({ id }).then((res) => {
if (res) {
getTaskList();
return createMessage.success('删除成功');
} else {
return createMessage.error('删除成功');
}
});
};
// 编辑
const editClockInfo = (row) => {
openEidtModal(true, {
isUpdate: true,
id: row.id,
});
};
// 编辑成功
const editSuccess = () => {
getTaskList();
};
// 统计
const toStatic = () => {
statisticsModalVisible.value = true;
};
// 查看
const lookClockInfo = (row) => {
emits('viewHandle', row);
EventBus.emit('inspectionMap', row);
};
// 巡检
const toInspection = () => {
InspectionModelVisible.value = true;
};
</script>
<style lang="less" scoped>
.form-button {
button {
margin-left: 4px;
}
}
.clock-item-container {
width: calc(100% - 10px);
height: calc(100% - 40px);
padding: 0px 15px;
margin: 15px 0px;
overflow: auto;
border-top: 1px solid @border-color-light;
.clock-item {
width: 100%;
height: 150px;
margin: 10px 0px;
padding: 10px 15px;
border-bottom: 1px solid @border-color-light;
}
.clock-item-icon {
width: 100px;
height: 80px;
float: left;
}
.clock-item-icon img {
width: 80px;
height: 80px;
margin-top: 6px;
}
.clock-item-info {
float: left;
width: calc(100% - 100px);
height: 100px;
line-height: 18px;
font-size: 12px;
button {
margin-right: 4px;
}
}
.clock-item-info p {
margin-bottom: 0px;
margin-top: 10px;
}
}
.table-data {
position: relative;
height: calc(100% - 68px);
.table-data-pagination {
display: flex;
justify-content: end;
position: relative;
bottom: 0px;
background-color: @component-background;
}
}
</style>
<style lang="less" scoped>
.full-modal {
.ant-modal {
max-width: 100%;
}
.ant-modal-content {
height: calc(100vh);
}
.ant-modal-body {
height: 80%;
}
}
</style>