JSDW/src/views/Logistics/ProjectOverviewQuery/index.vue

336 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 后勤模块 - 项目总览查询 - 列表 -->
<template>
<div class="MainBox">
<el-form :model="queryForm" class="card-box mb-4" label-position="top">
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="项目名称/编号">
<el-input v-model="queryForm.projectName" placeholder="请输入项目名称/编号"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="所属层级节点">
<el-select v-model="queryForm.nodeType" placeholder="请选择节点类型" clearable>
<el-option v-for="item in nodeTypeList" :key="item.value" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="施工单位">
<el-input v-model="queryForm.constructionUnit" placeholder="请输入施工单位"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="监理单位">
<el-input v-model="queryForm.supervisionUnit" placeholder="请输入监理单位"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="作业类型">
<el-select v-model="queryForm.workType" placeholder="请选择作业类型" clearable>
<el-option v-for="item in workTypeList" :key="item.value" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="风险类型">
<el-select v-model="queryForm.riskType" placeholder="请选择风险类型" clearable>
<el-option v-for="item in riskTypeList" :key="item.value" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目状态">
<el-select v-model="queryForm.projectStatus" placeholder="请选择项目状态" clearable>
<el-option v-for="item in projectStatusList" :key="item.value" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="作业时间">
<el-date-picker v-model="queryForm.dateRange" type="daterange" value-format="yyyy-MM-dd"
range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item>
<el-button size="default">重置</el-button>
<el-button type="primary" size="default">查询</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="card-box">
<el-table :data="tableData" class="mt-2">
<el-table-column prop="projectNo" label="项目编号" fixed="left" width="200"></el-table-column>
<el-table-column prop="projectName" label="项目名称" fixed="left" width="200"></el-table-column>
<el-table-column prop="nodeName" label="所属节点" width="200"></el-table-column>
<el-table-column prop="constructionUnit" label="单位施工" width="200"></el-table-column>
<el-table-column prop="supervisionUnit" label="监理单位" width="200"></el-table-column>
<el-table-column prop="operationLocation" label="作业地点" width="200"></el-table-column>
<el-table-column prop="operationTime" label="作业起止时间" width="200"></el-table-column>
<el-table-column prop="workPlanStatus" label="工作计划审批状态" width="200"></el-table-column>
<el-table-column prop="entrancePermitStatus" label="出入证申请状态" width="200"></el-table-column>
<el-table-column prop="workTicketStatus" label="工作票状态" width="200"></el-table-column>
<el-table-column prop="highRiskWorkTicketStatus" label="高风险工作票状态" width="200"></el-table-column>
<el-table-column prop="allotStatus" label="球机分配状态" width="200"></el-table-column>
<el-table-column prop="ReviewStatusA" label="监理复核状态" width="200"></el-table-column>
<el-table-column prop="ReviewStatusB" label="物业复核状态" width="200"></el-table-column>
<el-table-column prop="TemplateType" label="风险卡模版类型" width="200"></el-table-column>
<el-table-column prop="progress" label="必选项完成度" width="200">
<template #default="scope">
<el-progress :percentage="scope.row.progress"
:format="(percentage) => `${percentage}%`"></el-progress>
</template>
</el-table-column>
<el-table-column prop="problemNumAI" label="AI反馈问题数" width="200"></el-table-column>
<el-table-column prop="problemNumSupervision" label="监理反馈问题数" width="200"></el-table-column>
<el-table-column prop="rectifyNum" label="整改完成数" width="200"></el-table-column>
<el-table-column prop="permissionDesc" label="整改通过率" width="200"></el-table-column>
<el-table-column prop="projectStatus" label="项目状态" width="200">
<template #default="scope">
<el-tag :type="scope.row.projectStatus === '已完成' ? 'success' : 'danger'">{{
scope.row.projectStatus }}</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="180" fixed="right">
<template #default="scope">
<el-button size="small" type="primary" link @click="handleDetailClick(scope.row)">查看详情</el-button>
<el-button size="small" type="primary" link @click="handleExportClick(scope.row)">导出档案</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination-container">
<span class="total-count">显示第 {{ (pageNum - 1) * pageSize + 1 }} {{ pageNum * pageSize }} 条记录 {{
total }}</span>
<el-pagination v-model:current-page="pageNum" v-model:page-size="pageSize" :page-sizes="[5, 10, 20]"
:total="total" layout="prev, pager, next"></el-pagination>
</div>
</div>
<!-- 节点审核弹窗 -->
<DialogBox v-if="dialogShow" ref="dialogRef" :show="dialogShow" :CloseDialog="handleCancel" />
</div>
</template>
<script setup name="Index">
import { ref } from "vue";
import DialogBox from "./DialogBox/index.vue";
// 查询表单数据
const queryForm = ref({
projectName: "",
nodeType: "",
constructionUnit: "",
dateRange: [],
});
// 作业类型列表
const workTypeList = ref([
{
label: "正常作业",
value: "1"
},
{
label: "异常作业",
value: "2"
},
]);
// 风险类型列表
const riskTypeList = ref([
{
label: "高风险",
value: "1"
},
{
label: "中风险",
value: "2"
},
{
label: "低风险",
value: "3"
},
]);
// 项目状态列表
const projectStatusList = ref([
{
label: "实施中",
value: "1"
},
{
label: "待审批",
value: "2"
},
{
label: "已完成",
value: "3"
},
]);
// 节点类型列表
const nodeTypeList = ref([
{
label: "部门",
value: "1"
},
{
label: "楼层",
value: "2"
},
{
label: "班组",
value: "3"
},
]);
// 表格数据
const tableData = ref([
{
id: 1,
projectNo: "PM20240610001",
projectName: "XX输变电工程",
nodeName: "城东片区",
constructionUnit: "XX建设有限公司",
supervisionUnit: "XX监理有限公司",
operationLocation: "XX市XX区",
operationTime: "2024-06-10 09:00至2024-06-15 17:00",
workPlanStatus: "已审批",
entrancePermitStatus: "已申请",
workTicketStatus: "已签发",
highRiskWorkTicketStatus: "已签发",
allotStatus: "已分配",
ReviewStatusA: "已复核",
ReviewStatusB: "已复核",
TemplateType: "高空作业",
progress: 75,
problemNumAI: 2,
problemNumSupervision: 1,
rectifyNum: 3,
permissionDesc: "100%",
projectStatus: "已完成"
},
{
id: 2,
projectNo: "PM20240609001",
projectName: "XX变电站工程",
nodeName: "城西片区",
constructionUnit: "XX建设有限公司",
supervisionUnit: "XX监理有限公司",
operationLocation: "XX市XX区",
operationTime: "2024-06-09 10:00至2024-06-14 18:00",
workPlanStatus: "已审批",
entrancePermitStatus: "已申请",
workTicketStatus: "已签发",
highRiskWorkTicketStatus: "已签发",
allotStatus: "已分配",
ReviewStatusA: "已复核",
ReviewStatusB: "已复核",
TemplateType: "高空作业",
progress: 80,
problemNumAI: 1,
problemNumSupervision: 0,
rectifyNum: 1,
permissionDesc: "100%",
projectStatus: "已完成"
},
{
id: 3,
projectNo: "PM20240608001",
projectName: "XX线路工程",
nodeName: "城南片区",
constructionUnit: "XX建设有限公司",
supervisionUnit: "XX监理有限公司",
operationLocation: "XX市XX区",
operationTime: "2024-06-08 08:00至2024-06-13 16:00",
workPlanStatus: "已审批",
entrancePermitStatus: "已申请",
workTicketStatus: "已签发",
highRiskWorkTicketStatus: "已签发",
allotStatus: "已分配",
ReviewStatusA: "已复核",
ReviewStatusB: "已复核",
TemplateType: "高空作业",
progress: 90,
problemNumAI: 0,
problemNumSupervision: 0,
rectifyNum: 0,
permissionDesc: "100%",
projectStatus: "已完成"
}
]);
const dialogShow = ref(false); // 入库审核弹窗-显示状态
const pageNum = ref(1); // 当前页码
const pageSize = ref(5); // 每页显示条数
const total = ref(20); // 总记录数
// 查看详情
const handleDetailClick = (row) => {
dialogShow.value = true
}
// 关闭弹窗
const handleCancel = () => {
console.log('关闭弹窗')
dialogShow.value = false
}
</script>
<style scoped lang="scss">
.MainBox {
padding: 20px;
height: 100%;
background: #F9FAFB;
}
.FlexBox {
display: flex;
justify-content: flex-start;
align-items: center;
gap: 10px;
}
.TitleBox {
font-size: 16px;
font-weight: bold;
color: #303133;
}
.mt-2 {
margin-top: 20px;
}
.card-box {
background: #fff;
padding: 16px;
border-radius: 4px;
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
overflow: hidden;
}
.pagination-container {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 16px;
}
.total-count {
color: #606266;
}
</style>