<template> <div class="app-container"> <div class="filter"> <div> <ButtonGradient @click="handleAdd" > <i class="el-icon-plus"></i> 添加 </ButtonGradient> <ButtonGradient @click="onExport" > <i class="el-icon-download"></i> 导出 </ButtonGradient> </div> <InputSearch ref="searchComp" style="width: 402px" :formList="searchFormList" @handleSearch="getList" /> </div> <div class="bodyTable"> <Table :data="dcTrafficSurveyDataList" > <ElTableColumn label="物联id" align="center" width="140" prop="iotDeviceId" /> <ElTableColumn label="观测站名称" align="center" width="140" prop="name" /> <ElTableColumn label="年份" align="center" width="140" prop="year" /> <ElTableColumn label="观测站标识" align="center" width="140" prop="sign" /> <ElTableColumn label="出临行政区划代码" align="center" width="140" prop="regionCode" /> <ElTableColumn label="观测站编号" align="center" width="140" prop="code" /> <ElTableColumn label="观测站类型" align="center" width="140" prop="type" /> <ElTableColumn label="站点桩号" align="center" width="140" prop="stakeMark" /> <ElTableColumn label="起点桩号" align="center" width="140" prop="stakeMarkStart" /> <ElTableColumn label="止点桩号" align="center" width="140" prop="stakeMarkEnd" /> <ElTableColumn label="观测里程" align="center" width="140" prop="observationMileage" /> <ElTableColumn label="比重起点桩号" align="center" width="140" prop="proportionStakeMarkStart" /> <ElTableColumn label="比重止点桩号" align="center" width="140" prop="proportionStakeMarkEnd" /> <ElTableColumn label="比重观测里程" align="center" width="140" prop="proportionMileage" /> <ElTableColumn label="起点名称" align="center" width="140" prop="startName" /> <ElTableColumn label="止点名称" align="center" width="140" prop="endName" /> <ElTableColumn label="调查方法" align="center" width="140" prop="investigationMethods" /> <ElTableColumn label="车道数量" align="center" width="140" prop="lanesNum" /> <ElTableColumn label="技术等级" align="center" width="140" prop="technicalLevel" /> <ElTableColumn label="技术等级唯一" align="center" width="140" prop="uniqueTechnicalLevel" > <template slot-scope="scope"> <span v-if="scope.row.uniqueTechnicalLevel == '1'">是</span> <span v-if="scope.row.uniqueTechnicalLevel == '0'">否</span> </template> </ElTableColumn> <ElTableColumn label="路面类型" align="center" width="140" prop="roadSurfaceType" /> <ElTableColumn label="路面宽度" align="center" width="140" prop="roadWidth" /> <ElTableColumn label="设计速度" align="center" width="140" prop="speed" /> <ElTableColumn label="基准通行能力" align="center" width="140" prop="benchmarkTrafficCapacity" /> <ElTableColumn label="地貌" align="center" width="140" prop="landforms" /> <ElTableColumn label="供电方式" align="center" width="140" prop="powerSupplyMode" /> <ElTableColumn label="通讯方式" align="center" width="140" prop="communicationMethod" /> <ElTableColumn label="调查人员数量" align="center" width="140" prop="numberOfInvestigators" /> <ElTableColumn label="建站日期" align="center" prop="dateOfWebsiteEstablishment" width="140"> <template slot-scope="scope"> <span>{{ parseTime(scope.row.dateOfWebsiteEstablishment, '{y}-{m}-{d}') }}</span> </template> </ElTableColumn> <ElTableColumn label="经度" align="center" width="140" prop="longitude" /> <ElTableColumn label="纬度" align="center" width="140" prop="latitude" /> <ElTableColumn label="备注" align="center" width="140" prop="remark" /> <ElTableColumn label="路线标识" align="center" width="140" prop="routeSignage" /> <ElTableColumn label="路线编号" align="center" width="140" prop="routeCode" /> <ElTableColumn label="路线名称" align="center" width="140" prop="routeName" /> <ElTableColumn label="路线类型" align="center" width="140" prop="routeType" /> <ElTableColumn label="路线简称" align="center" width="140" prop="routeAbbreviation" /> <ElTableColumn label="路线业务编号" align="center" width="140" prop="routeBusinessNumber" /> <ElTableColumn label="行政区划代码" align="center" width="140" prop="regionalismCode" /> <ElTableColumn label="行政区划名称" align="center" width="140" prop="regionalismName" /> <ElTableColumn label="行政区划简称" align="center" width="140" prop="regionalismAbbreviation" /> <ElTableColumn label="机构标识" align="center" width="140" prop="institutionIdentification" /> <ElTableColumn label="上级机构标识" align="center" width="140" prop="superiorOrganizationIdentification" /> <ElTableColumn label="管理机构编号" align="center" width="140" prop="managementOrganizationNumber" /> <ElTableColumn label="管理机构名称" align="center" width="140" prop="nameOfManagementOrganization" /> <ElTableColumn label="管理机构类型" align="center" width="140" prop="typeOfManagementOrganization" /> <ElTableColumn label="操作" align="center" width="140" class-name="small-padding fixed-width"> <template slot-scope="scope"> <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" >修改</el-button> <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" >删除</el-button> </template> </ElTableColumn> </Table> </div> <!-- 添加或修改观测站信息对话框 --> <Dialog :title="title" :visible.sync="open" @update:close="cancel" width="1080px" append-to-body> <el-form ref="form" :model="form" :rules="rules" inline label-width="120px"> <el-form-item label="物联id" prop="iotDeviceId"> <el-input v-model="form.iotDeviceId" placeholder="请输入物联id" /> </el-form-item> <el-form-item label="观测站名称" prop="name"> <el-input v-model="form.name" placeholder="请输入观测站名称" /> </el-form-item> <el-form-item label="观测站编号" prop="code"> <el-input v-model="form.code" placeholder="请输入观测站编号" /> </el-form-item> <el-form-item label="年份" prop="year"> <el-input v-model="form.year" placeholder="请输入年份" /> </el-form-item> <el-form-item label="观测站标识" prop="sign"> <el-input v-model="form.sign" placeholder="请输入观测站标识" /> </el-form-item> <el-form-item label="出临行政区划代码" prop="regionCode"> <el-input v-model="form.regionCode" placeholder="请输入出临行政区划代码" /> </el-form-item> <el-form-item label="观测站类型" prop="type"> <el-input v-model="form.type" placeholder="请输入观测站类型" /> </el-form-item> <el-form-item label="站点桩号" prop="stakeMark"> <el-input v-model="form.stakeMark" placeholder="请输入站点桩号" /> </el-form-item> <el-form-item label="起点桩号" prop="stakeMarkStart"> <el-input v-model="form.stakeMarkStart" placeholder="请输入起点桩号" /> </el-form-item> <el-form-item label="止点桩号" prop="stakeMarkEnd"> <el-input v-model="form.stakeMarkEnd" placeholder="请输入止点桩号" /> </el-form-item> <el-form-item label="观测里程" prop="observationMileage"> <el-input v-model="form.observationMileage" placeholder="请输入观测里程" /> </el-form-item> <el-form-item label="比重起点桩号" prop="proportionStakeMarkStart"> <el-input v-model="form.proportionStakeMarkStart" placeholder="请输入比重起点桩号" /> </el-form-item> <el-form-item label="比重止点桩号" prop="proportionStakeMarkEnd"> <el-input v-model="form.proportionStakeMarkEnd" placeholder="请输入比重止点桩号" /> </el-form-item> <el-form-item label="比重观测里程" prop="proportionMileage"> <el-input v-model="form.proportionMileage" placeholder="请输入比重观测里程" /> </el-form-item> <el-form-item label="起点名称" prop="startName"> <el-input v-model="form.startName" placeholder="请输入起点名称" /> </el-form-item> <el-form-item label="止点名称" prop="endName"> <el-input v-model="form.endName" placeholder="请输入止点名称" /> </el-form-item> <el-form-item label="调查方法" prop="investigationMethods"> <el-input v-model="form.investigationMethods" placeholder="请输入调查方法" /> </el-form-item> <el-form-item label="车道数量" prop="lanesNum"> <el-input v-model="form.lanesNum" placeholder="请输入车道数量" /> </el-form-item> <el-form-item label="技术等级" prop="technicalLevel"> <el-input v-model="form.technicalLevel" placeholder="请输入技术等级" /> </el-form-item> <el-form-item label="技术等级唯一" prop="uniqueTechnicalLevel"> <el-radio-group v-model="form.uniqueTechnicalLevel" style="width: 200px"> <el-radio label="0">否</el-radio> <el-radio label="1">是</el-radio> </el-radio-group> </el-form-item> <el-form-item label="路面类型" prop="roadSurfaceType"> <el-input v-model="form.roadSurfaceType" placeholder="请输入路面类型" /> </el-form-item> <el-form-item label="路面宽度" prop="roadWidth"> <el-input v-model="form.roadWidth" placeholder="请输入路面宽度" /> </el-form-item> <el-form-item label="设计速度" prop="speed"> <el-input v-model="form.speed" placeholder="请输入设计速度" /> </el-form-item> <el-form-item label="基准通行能力" prop="benchmarkTrafficCapacity"> <el-input v-model="form.benchmarkTrafficCapacity" placeholder="请输入基准通行能力" /> </el-form-item> <el-form-item label="地貌" prop="landforms"> <el-input v-model="form.landforms" placeholder="请输入地貌" /> </el-form-item> <el-form-item label="供电方式" prop="powerSupplyMode"> <el-input v-model="form.powerSupplyMode" placeholder="请输入供电方式" /> </el-form-item> <el-form-item label="通讯方式" prop="communicationMethod"> <el-input v-model="form.communicationMethod" placeholder="请输入通讯方式" /> </el-form-item> <el-form-item label="调查人员数量" prop="numberOfInvestigators"> <el-input v-model="form.numberOfInvestigators" placeholder="请输入调查人员数量" /> </el-form-item> <el-form-item label="建站日期" prop="dateOfWebsiteEstablishment"> <el-date-picker clearable style="width: 200px" v-model="form.dateOfWebsiteEstablishment" type="date" value-format="yyyy-MM-dd" placeholder="请选择建站日期"> </el-date-picker> </el-form-item> <el-form-item label="经度" prop="longitude"> <el-input v-model="form.longitude" placeholder="请输入经度" /> </el-form-item> <el-form-item label="纬度" prop="latitude"> <el-input v-model="form.latitude" placeholder="请输入纬度" /> </el-form-item> <el-form-item label="备注" prop="remark"> <el-input v-model="form.remark" placeholder="请输入备注" /> </el-form-item> <el-form-item label="路线标识" prop="routeSignage"> <el-input v-model="form.routeSignage" placeholder="请输入路线标识" /> </el-form-item> <el-form-item label="路线编号" prop="routeCode"> <el-input v-model="form.routeCode" placeholder="请输入路线编号" /> </el-form-item> <el-form-item label="路线名称" prop="routeName"> <el-input v-model="form.routeName" placeholder="请输入路线名称" /> </el-form-item> <el-form-item label="路线类型" prop="routeType"> <el-input v-model="form.routeType" placeholder="请输入路线类型" /> </el-form-item> <el-form-item label="路线简称" prop="routeAbbreviation"> <el-input v-model="form.routeAbbreviation" placeholder="请输入路线简称" /> </el-form-item> <el-form-item label="路线业务编号" prop="routeBusinessNumber"> <el-input v-model="form.routeBusinessNumber" placeholder="请输入路线业务编号" /> </el-form-item> <el-form-item label="行政区划代码" prop="regionalismCode"> <el-input v-model="form.regionalismCode" placeholder="请输入行政区划代码" /> </el-form-item> <el-form-item label="行政区划名称" prop="regionalismName"> <el-input v-model="form.regionalismName" placeholder="请输入行政区划名称" /> </el-form-item> <el-form-item label="行政区划简称" prop="regionalismAbbreviation"> <el-input v-model="form.regionalismAbbreviation" placeholder="请输入行政区划简称" /> </el-form-item> <el-form-item label="机构标识" prop="institutionIdentification"> <el-input v-model="form.institutionIdentification" placeholder="请输入机构标识" /> </el-form-item> <el-form-item label="上级机构标识" prop="superiorOrganizationIdentification"> <el-input v-model="form.superiorOrganizationIdentification" placeholder="请输入上级机构标识" /> </el-form-item> <el-form-item label="管理机构编号" prop="managementOrganizationNumber"> <el-input v-model="form.managementOrganizationNumber" placeholder="请输入管理机构编号" /> </el-form-item> <el-form-item label="管理机构名称" prop="nameOfManagementOrganization"> <el-input v-model="form.nameOfManagementOrganization" placeholder="请输入管理机构名称" /> </el-form-item> <el-form-item label="管理机构类型" prop="typeOfManagementOrganization"> <el-input v-model="form.typeOfManagementOrganization" placeholder="请输入管理机构类型" /> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="primary" @click="submitForm">确 定</el-button> <el-button @click="cancel">取 消</el-button> </div> </Dialog> </div> </template> <script> import { listDcTrafficSurveyData, getDcTrafficSurveyData, delDcTrafficSurveyData, addDcTrafficSurveyData, updateDcTrafficSurveyData } from "@/api/observationStation/observationStation"; import InputSearch from "@screen/components/InputSearch/index.vue"; import Table from '@screen/components/Table.vue'; import ButtonGradient from "@screen/components/Buttons/ButtonGradient.vue"; import { searchFormList } from "./data"; import Dialog from "@screen/components/Dialog/index.vue"; import { Loading } from 'element-ui'; import request from "@/utils/request"; export default { name: "DcTrafficSurveyData", components: { InputSearch, Table, ButtonGradient, searchFormList, Dialog, }, data() { return { searchFormList, // 遮罩层 loading: true, // 选中数组 ids: [], // 非单个禁用 single: true, // 非多个禁用 multiple: true, // 显示搜索条件 showSearch: true, // 总条数 total: 0, // 观测站信息表格数据 dcTrafficSurveyDataList: [], // 弹出层标题 title: "", // 是否显示弹出层 open: false, // 查询参数 queryParams: { pageNum: 1, pageSize: 10, year: null, sign: null, regionCode: null, code: null, name: null, type: null, stakeMark: null, stakeMarkStart: null, stakeMarkEnd: null, observationMileage: null, proportionStakeMarkStart: null, proportionStakeMarkEnd: null, proportionMileage: null, startName: null, endName: null, investigationMethods: null, lanesNum: null, technicalLevel: null, uniqueTechnicalLevel: null, roadSurfaceType: null, roadWidth: null, speed: null, benchmarkTrafficCapacity: null, landforms: null, powerSupplyMode: null, communicationMethod: null, numberOfInvestigators: null, dateOfWebsiteEstablishment: null, longitude: null, latitude: null, routeSignage: null, routeCode: null, routeName: null, routeType: null, routeAbbreviation: null, routeBusinessNumber: null, regionalismCode: null, regionalismName: null, regionalismAbbreviation: null, institutionIdentification: null, superiorOrganizationIdentification: null, managementOrganizationNumber: null, nameOfManagementOrganization: null, typeOfManagementOrganization: null }, // 表单参数 form: {}, // 表单校验 rules: { name: [ { required: true, message: "观测站名称不能为空", trigger: "blur" } ], iotDeviceId: [ { required: true, message: "物联id不能为空", trigger: "blur" } ], } }; }, created() { this.getList(); }, methods: { /** 查询观测站信息列表 */ getList() { this.loading = true; listDcTrafficSurveyData(this.queryParams).then(response => { this.dcTrafficSurveyDataList = response.rows; this.total = response.total; this.loading = false; }); }, // 取消按钮 cancel() { this.open = false; this.reset(); }, // 表单重置 reset() { this.form = { id: null, year: null, sign: null, regionCode: null, code: null, name: null, type: null, stakeMark: null, stakeMarkStart: null, stakeMarkEnd: null, observationMileage: null, proportionStakeMarkStart: null, proportionStakeMarkEnd: null, proportionMileage: null, startName: null, endName: null, investigationMethods: null, lanesNum: null, technicalLevel: null, uniqueTechnicalLevel: null, roadSurfaceType: null, roadWidth: null, speed: null, benchmarkTrafficCapacity: null, landforms: null, powerSupplyMode: null, communicationMethod: null, numberOfInvestigators: null, dateOfWebsiteEstablishment: null, longitude: null, latitude: null, remark: null, updateTime: null, routeSignage: null, routeCode: null, routeName: null, routeType: null, routeAbbreviation: null, routeBusinessNumber: null, regionalismCode: null, regionalismName: null, regionalismAbbreviation: null, institutionIdentification: null, superiorOrganizationIdentification: null, managementOrganizationNumber: null, nameOfManagementOrganization: null, typeOfManagementOrganization: null }; this.resetForm("form"); }, /** 搜索按钮操作 */ handleQuery() { this.queryParams.pageNum = 1; this.getList(); }, /** 重置按钮操作 */ resetQuery() { this.resetForm("queryForm"); this.handleQuery(); }, // 多选框选中数据 handleSelectionChange(selection) { this.ids = selection.map(item => item.id) this.single = selection.length!==1 this.multiple = !selection.length }, /** 新增按钮操作 */ handleAdd() { this.reset(); this.open = true; this.title = "添加观测站"; }, /** 修改按钮操作 */ handleUpdate(row) { this.reset(); const id = row.id || this.ids getDcTrafficSurveyData(id).then(response => { this.form = response.data; this.open = true; this.title = "修改观测站"; }); }, /** 提交按钮 */ submitForm() { this.$refs["form"].validate(valid => { if (valid) { if (this.form.id != null) { updateDcTrafficSurveyData(this.form).then(response => { this.$modal.msgSuccess("修改成功"); this.open = false; this.getList(); }); } else { addDcTrafficSurveyData(this.form).then(response => { this.$modal.msgSuccess("新增成功"); this.open = false; this.getList(); }); } } }); }, /** 删除按钮操作 */ handleDelete(row) { const ids = row.id || this.ids; this.$modal.confirm('是否确认删除观测站信息编号为"' + ids + '"的数据项?').then(function() { return delDcTrafficSurveyData(ids); }).then(() => { this.getList(); this.$modal.msgSuccess("删除成功"); }).catch(() => {}); }, /** 导出按钮操作 */ onExport(){ const self = this; this.$confirm("是否确认导出站点管理信息?", "警告", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning", }) .then(function () { let loadingInstance = Loading.service({ fullscreen: true, background: "#00000052", text: "文件正在下载...", }); request({ url: `/dcObservationStation/export`, method: "post", data: self.queryParams, responseType: 'blob', }).then((res) => { const url = window.URL.createObjectURL(new Blob([res])); let link = document.createElement("a"); link.style.display = "none"; link.href = url; link.setAttribute("download", "站点管理.xlsx"); document.body.appendChild(link); link.click(); URL.revokeObjectURL(link.href); // 释放URL 对象 document.body.removeChild(link); link = null; loadingInstance.close(); }) .catch((err) => { self.$message.error(err); loadingInstance.close(); }); }) } } }; </script> <style lang="scss" scoped> .filter { height: 60px; display: flex; justify-content: space-between; align-items: center; >div { display: flex; gap: 6px; } } ::v-deep .dialog-content { overflow-y: auto !important; height: 500px; } </style>