|
@@ -1,833 +0,0 @@
|
|
|
-<template>
|
|
|
- <div id="buildsiteReport" class="buildsiteReport">
|
|
|
- <div class="filteroption">
|
|
|
- <span style="width: 100px;">工地类型</span>
|
|
|
- <div>
|
|
|
- <el-select v-model="queryParams.typeId" @focus="getbuildType" size="small">
|
|
|
- <el-option v-for="item in buildType" :key="item.id" :label="item.name" :value="item.id" />
|
|
|
- </el-select>
|
|
|
- </div>
|
|
|
- <span style="margin-left: 10px; width: 60px;">地址</span>
|
|
|
- <div>
|
|
|
- <el-input v-model="queryParams.address" size="small" placeholder="请输入内容" />
|
|
|
- </div>
|
|
|
- <span style="margin-left: 10px; width: 60px;">状态</span>
|
|
|
- <div>
|
|
|
- <el-select v-model="queryParams.state" size="small">
|
|
|
- <el-option v-for="item in stateStatus" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
- </el-select>
|
|
|
- </div>
|
|
|
- <el-button class="search" style="margin-left: 5px;" type="primary" size="small" @click="buildReportQuery()">查询</el-button>
|
|
|
- <el-button class="search" style="margin-left: 10px;" type="primary" size="small" @click="reportClick()">上报</el-button>
|
|
|
- </div>
|
|
|
- <div class="datatable">
|
|
|
- <el-table :data="buildsiteData" stripe style="width: 100%;" height="100%" ref="table1" @select="table1Select">
|
|
|
- <el-table-column type="selection" width="55"></el-table-column>
|
|
|
- <el-table-column type="index" label="序号" width="80px" align="center">
|
|
|
- <template slot-scope="scope">
|
|
|
- <span>{{((pageInfo.current - 1) * pageInfo.size) + (scope.$index+1) }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="type" sortable label="工地类型" align="center" />
|
|
|
- <el-table-column prop="address" sortable label="地址" align="left" />
|
|
|
- <el-table-column prop="sgdw" sortable label="施工单位名称" align="center" />
|
|
|
- <el-table-column prop="gdfzr" sortable label="施工负责人" width="150" align="center" />
|
|
|
- <el-table-column prop="phone" sortable label="联系电话" width="120" align="center" />
|
|
|
- <el-table-column prop="state" sortable label="状态" width="100" align="center" />
|
|
|
- <el-table-column label="操作" width="100" align="center">
|
|
|
- <el-button type="text" size="small" @click="dialogDetail = true">详情</el-button>
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
- </div>
|
|
|
- <div class="pagination-area">
|
|
|
- <el-pagination layout="total, sizes, prev, next, pager, jumper"
|
|
|
- :page-sizes="[10, 25, 50, 100]"
|
|
|
- :page-size="pageInfo.size"
|
|
|
- :current-page="pageInfo.current"
|
|
|
- :total="pageInfo.tableTotal"
|
|
|
- @size-change="handleSizeChange"
|
|
|
- @current-change="handleCurrentChange" />
|
|
|
- </div>
|
|
|
- <el-dialog :visible.sync="reportDialog" title="工地监护上报" width="1200px" top="5vh">
|
|
|
- <div style="width:100%; display: flex; flex-wrap: wrap;">
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">工地类型:</span>
|
|
|
- <div class="flexInfo">
|
|
|
- <el-select v-model="reportForm.typeId" style="width:100%;" size="small" placeholder="请选择审核结果" clearable>
|
|
|
- <el-option v-for="item of buildType" :key="item.id" :value="item.id" :label="item.name"></el-option>
|
|
|
- </el-select>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">所属片区:</span>
|
|
|
- <div class="flexInfo">
|
|
|
- <el-select v-model="reportForm.pointPlace" size="small" placeholder="请选择片区" style="width: 260px;">
|
|
|
- <el-option v-for="item of pointPlaces" :key="item.OBJECTID" :value="item.OBJECTID" :label="item.NAME"></el-option>
|
|
|
- </el-select>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDivx">
|
|
|
- <span class="flexTitle">施工单位名称:</span>
|
|
|
- <div class="flexInfo">
|
|
|
- <el-input v-model="reportForm.sgdw" placeholder="请输入施工单位名称" size="small"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDivx">
|
|
|
- <span class="flexTitle">施工负责人:</span>
|
|
|
- <div class="flexInfo">
|
|
|
- <el-input v-model="reportForm.gdfzr" placeholder="请输入施工单位名称" size="small"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDivx">
|
|
|
- <span class="flexTitle">联系人电话:</span>
|
|
|
- <div class="flexInfo">
|
|
|
- <el-input v-model="reportForm.phone" placeholder="请输入施工单位名称" size="small"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDivMax">
|
|
|
- <span class="flexTitle">地址:</span>
|
|
|
- <div class="flexInfo">
|
|
|
- <el-input v-model="reportForm.address" type="textarea" placeholder="请输入地址" size="small"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDivMax">
|
|
|
- <span class="flexTitle">附件:</span>
|
|
|
- <div class="flexInfo">
|
|
|
- <el-form-item label="附件">
|
|
|
- <el-upload class="upload-demo" action="https://jsonplaceholder.typicode.com/posts/"
|
|
|
- :on-preview="handlePreview"
|
|
|
- :on-remove="handleRemove"
|
|
|
- :before-remove="beforeRemove"
|
|
|
- :on-change="beforeAvatarUpload"
|
|
|
- :on-success="handleAvatarSuccess"
|
|
|
- :file-list="fileList" :auto-upload="false"
|
|
|
- multiple :limit="3" :on-exceed="handleExceed" style="width: 260px;" size="small">
|
|
|
- <el-button size="small" type="primary" style="width: 260px; margin-top: 3px;" >点击上传</el-button>
|
|
|
- <div slot="tip" class="el-upload__tip">⚠️注意:文件大小不能超过10MB!最多3个文件!</div>
|
|
|
- </el-upload>
|
|
|
- </el-form-item>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDivMax">
|
|
|
- <span class="flexTitle">经度:</span>
|
|
|
- <div class="flexInfo">
|
|
|
- <el-input v-model="reportForm.pointLon" placeholder="请输入经度" size="small"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDivMax">
|
|
|
- <span class="flexTitle">纬度:</span>
|
|
|
- <div class="flexInfo">
|
|
|
- <el-input v-model="reportForm.pointLat" placeholder="请输入纬度:" size="small"></el-input>
|
|
|
- <el-button icon="el-icon-map-location" style="width: 50px; margin-bottom: 5px;" type="primary" size="small" @click="chageFlagStatus()"></el-button>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <el-form :model="reportForm" :rules="constructionRule" label-position="right" label-width="110px">
|
|
|
- <el-row :gutter="20">
|
|
|
- <el-col :span="10">
|
|
|
- <el-form-item label="工地类型">
|
|
|
-
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="10" :offset="2">
|
|
|
- <el-form-item label="地址">
|
|
|
- <el-input placeholder="请输入地址"></el-input>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-row :gutter="20">
|
|
|
- <el-col :span="10">
|
|
|
- <el-form-item label="施工单位名称">
|
|
|
- <el-input placeholder="请输入施工单位名称"></el-input>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="10" :offset="2">
|
|
|
- <el-form-item label="施工负责人">
|
|
|
- <el-input placeholder="请输入施工负责人"></el-input>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-row :gutter="20">
|
|
|
- <el-col :span="10">
|
|
|
- <el-form-item label="联系电话">
|
|
|
- <el-input placeholder="请输入联系电话" type="number"></el-input>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-row>
|
|
|
- <el-col :span="24">
|
|
|
- <el-form-item label="详细描述">
|
|
|
- <el-input type="textarea" placeholder="请输入详细描述"></el-input>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-row>
|
|
|
- <el-col :span="24">
|
|
|
- <el-form-item label="附件">
|
|
|
- <el-upload class="upload-demo" action="https://jsonplaceholder.typicode.com/posts/" :on-preview="handlePreview" :on-remove="handleRemove" :before-remove="beforeRemove" multiple :limit="3" :on-exceed="handleExceed">
|
|
|
- <el-button size="small" type="primary">点击上传</el-button>
|
|
|
- </el-upload>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-row :gutter="20">
|
|
|
- <el-col :span="10">
|
|
|
- <el-form-item label="经度">
|
|
|
- <el-input v-model="reportForm.pointLon" placeholder="请输入经度" type="number"></el-input>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="12" :offset="2">
|
|
|
- <el-form-item label="纬度">
|
|
|
- <el-input v-model="reportForm.pointLat" placeholder="请输入纬度" type="number" style="width: 205px"></el-input>
|
|
|
- <el-button type="primary" icon="el-icon-map-location" @click="flag = true"></el-button>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-row>
|
|
|
- <el-col :span="24">
|
|
|
- <div style="width:100%; height: 310px; margin-top:8px;" ref="mapBox"></div>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- </el-form>
|
|
|
- <template slot="footer">
|
|
|
- <el-button @click="reportDialog = false" size="small">取消</el-button>
|
|
|
- <el-button type="primary" @click="confirmWorkSiteGuardReport()" size="small">确定</el-button>
|
|
|
- </template>
|
|
|
- </el-dialog>
|
|
|
- <div style="width:100%;height:100%;display:none;" ref="cctvMap"></div>
|
|
|
- <el-dialog :visible.sync="dialogDetail" title="详情" width="60%" top="5vh">
|
|
|
- <tf-table-legend label="工地监护上报记录" isopen="true">
|
|
|
- <div style="width: 100%; display: flex; flex-wrap: wrap;">
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">工地类型:</span>
|
|
|
- <el-select v-model="detailData.workSiteType" style="display: inline-block; margin-left: 5px; width: calc(100% - 140px);" size="small"
|
|
|
- placeholder="请选择工地类型" clearable :disabled="true">
|
|
|
- <el-option key="0" value="0" label="代建工地"></el-option>
|
|
|
- <el-option key="1" value="1" label="外部施工工地"></el-option>
|
|
|
- </el-select>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">地址:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.detailAddress" placeholder="请输入地址详细信息" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">地理位置:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.geoAddress" placeholder="请输入隐患地理位置" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">施工单位名称:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.constructionUnitName" placeholder="请输入施工单位名称" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">施工负责人:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.constructionLeader" placeholder="请输入施工负责人" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">联系电话:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.phoneNo" placeholder="请输入联系电话" type="textarea" :rows="1" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">附件:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-upload class="upload-demo" action="https://jsonplaceholder.typicode.com/posts/" :on-preview="handlePreview"
|
|
|
- :on-remove="handleRemove" :before-remove="beforeRemove" multiple :limit="3" :on-exceed="handleExceed">
|
|
|
- <el-button size="small" type="primary">点击上传</el-button>
|
|
|
- </el-upload>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </tf-table-legend>
|
|
|
- <tf-table-legend label="工地监护派工" isopen="false" style="margin-top: 8px;">
|
|
|
- <div style="width: 100%; display: flex; flex-wrap: wrap;">
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">是否确认:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.isConfirm" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">是否需要人员巡查:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.isNeedGuard" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">巡查人:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.xjWorker" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">巡查周期:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.xjPeriod" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">起止时间:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.xjBeginAndEndTime" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </tf-table-legend>
|
|
|
- <tf-table-legend label="工地巡查记录" isopen="false" style="margin-top: 8px;">
|
|
|
- <div style="width: 100%; display: flex; flex-wrap: wrap;">
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">情况说明:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.conditionExplain" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">上报时间:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.reportTime_process" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">上报位置:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.reportPosition" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">上报人:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.reportWorker" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">地址:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.position" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">确认时间:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.confirmTime" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">完成率:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.overRatio" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">上报时间:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.reprotTime_over" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">人员轨迹:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.workerTrail" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">附件:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-upload class="upload-demo" action="https://jsonplaceholder.typicode.com/posts/" :on-preview="handlePreview"
|
|
|
- :on-remove="handleRemove" :before-remove="beforeRemove" multiple :limit="3" :on-exceed="handleExceed">
|
|
|
- <el-button size="small" type="primary">点击上传</el-button>
|
|
|
- </el-upload>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </tf-table-legend>
|
|
|
- <tf-table-legend label="工地监护结束申请" isopen="false" style="margin-top: 8px;">
|
|
|
- <div style="width: 100%; display: flex; flex-wrap: wrap;">
|
|
|
- <div class="flexDiv" style="width: 99%">
|
|
|
- <span class="flexTitle">工地情况:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.workSiteSituation" placeholder="排除隐患情况说明"
|
|
|
- type="textarea" :rows="1" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv">
|
|
|
- <span class="flexTitle">附件:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-upload class="upload-demo" action="https://jsonplaceholder.typicode.com/posts/" :on-preview="handlePreview"
|
|
|
- :on-remove="handleRemove" :before-remove="beforeRemove" multiple :limit="3" :on-exceed="handleExceed">
|
|
|
- <el-button size="small" type="primary">点击上传</el-button>
|
|
|
- </el-upload>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </tf-table-legend>
|
|
|
- <tf-table-legend label="工地监护审核" isopen="false" style="margin-top: 8px;">
|
|
|
- <div style="width: 100%; display: flex; flex-wrap: wrap;">
|
|
|
- <div class="flexDiv" style="width: 99%;">
|
|
|
- <span class="flexTitle">审核意见:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.checkIdea" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flexDiv" style="width: 99%">
|
|
|
- <span class="flexTitle">审核意见备注:</span>
|
|
|
- <div style="display: inline-block; margin-left: 5px; width:calc(100% - 140px);">
|
|
|
- <el-input v-model="detailData.checkIdeaAnnex" placeholder="审核意见意见意见意见说明"
|
|
|
- type="textarea" :rows="1" size="small" :disabled="true"></el-input>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </tf-table-legend>
|
|
|
- </el-dialog>
|
|
|
- </div>
|
|
|
-</template>
|
|
|
-<script>
|
|
|
-import Vue from 'vue'
|
|
|
-import buildsiteDetail from './child/buildsiteDetail'
|
|
|
-import reportPanel from './child/reportPanel'
|
|
|
-import tfTableLegend from '@/views/zhpt/common/TableLegend'
|
|
|
-import { esriConfig } from 'staticPub/config'
|
|
|
-import { loadModules } from 'esri-loader'
|
|
|
-import { queryBuildList, reportWorkSiteGuard , getBuildType } from '@/api/xjWorkSiteCheckApi'
|
|
|
-export default {
|
|
|
- name: 'BuildsiteReport',
|
|
|
- components: { tfTableLegend },
|
|
|
- props: ['data'],
|
|
|
- data() {
|
|
|
- return {
|
|
|
- buildType: [], //码表 => 工地类型
|
|
|
- pointPlaces: [], //码表 => 所属片区
|
|
|
- stateStatus: [ //码表 => 0无需监护、1监护巡查、2已结束、3监护结束申请
|
|
|
- { id:'',name:'全部' },
|
|
|
- { id:'0',name:'无需监护' },
|
|
|
- { id:'1',name:'监护巡查' },
|
|
|
- { id:'2',name:'已结束' },
|
|
|
- { id:'3',name:'监护结束申请' },
|
|
|
- ],
|
|
|
- pageInfo: { current: 1, size: 10, tableTotal:1 }, //分页数据
|
|
|
- queryParams: { //查询参数
|
|
|
- typeId: undefined, //工地类型
|
|
|
- address: undefined, //工地地址
|
|
|
- state: undefined, //工地状态
|
|
|
- },
|
|
|
- buildsiteData: [], //table表格数据
|
|
|
- flag: false, //控制上报页面是否可点击地图获得经纬度
|
|
|
-
|
|
|
-
|
|
|
- reportDialog: false,// 上报弹窗
|
|
|
- reportForm: { // 上报弹窗的数据
|
|
|
- uploadType: "1", //上报途径
|
|
|
- typeId: undefined, //工地类型
|
|
|
- address: undefined, //工地地址
|
|
|
- sgdw: undefined, //施工单位名称
|
|
|
- gdfzr: undefined, //施工负责人
|
|
|
- phone: undefined, //联系人电话
|
|
|
- notes: undefined, //备注
|
|
|
- pointPlace: undefined, //工地所属片区
|
|
|
- pointLon: undefined, //经度
|
|
|
- pointLat: undefined, //纬度
|
|
|
- },
|
|
|
-
|
|
|
- dialogDetail: false, //控制详情页面的显示
|
|
|
-
|
|
|
-
|
|
|
- constructionRule: {},// 工地规则
|
|
|
-
|
|
|
- fileList: [
|
|
|
- {
|
|
|
- name: 'food.jpeg',
|
|
|
- url:
|
|
|
- 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'
|
|
|
- },
|
|
|
- {
|
|
|
- name: 'food2.jpeg',
|
|
|
- url:
|
|
|
- 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'
|
|
|
- }
|
|
|
- ],
|
|
|
- //详情数据
|
|
|
- detailData: {
|
|
|
- workSiteType: [], //工地类型
|
|
|
- detailAddress: '', //详情页面地址
|
|
|
- geoAddress: '', //地理位置
|
|
|
- constructionUnitName: '', //施工单位名称
|
|
|
- constructionLeader: '', //施工负责人
|
|
|
- phoneNo: '', //联系电话
|
|
|
- reportRecordAnnex: '', //附件
|
|
|
- isConfirm: '', //是否确认
|
|
|
- isNeedGuard: '', //是否需要人员监护
|
|
|
- xjWorker: '', //巡查人
|
|
|
- xjPeriod: '', //巡查周期
|
|
|
- xjBeginAndOverTime: '', //起止时间
|
|
|
- conditionExplain: '', //情况说明,巡查情况说明
|
|
|
- reportTime_process: '', //上报时间,过程记录上传时间
|
|
|
- reportPosition: '', //上报位置,过程上传时的位置信息
|
|
|
- reportWorker: '', //上报人,巡查上报人
|
|
|
- position: '', //地址,上报时地址描述
|
|
|
- confirmTime: '', // 确认时间,执行人员查看接收的时间
|
|
|
- overRatio: '', //完成率
|
|
|
- reprotTime_over: '', //上报时间,巡检任务完成后的上报时间
|
|
|
- workerTrail: '', //人员轨迹,巡查人员过程轨迹记录信息
|
|
|
- xjRecordAnnex: '', //附件,图片、语音
|
|
|
- workSiteSituation: '', //工地情况说明
|
|
|
- overApplicationAnnex: '', //附件
|
|
|
- checkIdea: '', //审核意见
|
|
|
- checkIdeaAnnex: '' //审核意见备注
|
|
|
- },
|
|
|
- }
|
|
|
- },
|
|
|
- watch: {},
|
|
|
- mounted() {
|
|
|
- var that = this
|
|
|
- var div = this.$refs.cctvMap
|
|
|
- var mapV = this.data.mapView
|
|
|
- var map = mapV.map
|
|
|
- loadModules(['esri/views/MapView'],{ url: esriConfig.baseUrl }).then(([MapView]) => {
|
|
|
- const mapview = new MapView({
|
|
|
- container: div,
|
|
|
- map: map,
|
|
|
- })
|
|
|
- that.mapV = mapview
|
|
|
- mapview.ui.components = []
|
|
|
- mapview.constraints.lods = mapV.constraints.lods
|
|
|
- mapview.on('click', function(e) {
|
|
|
- if(that.flag === true) {
|
|
|
- that.reportForm.pointLon = e.mapPoint.longitude.toFixed(6) //经度
|
|
|
- that.reportForm.pointLat = e.mapPoint.latitude.toFixed(6) //纬度
|
|
|
- that.drawPoint(e.mapPoint.longitude, e.mapPoint.latitude)
|
|
|
- that.getPartArea(e.mapPoint.longitude, e.mapPoint.latitude) //获取片区信息
|
|
|
- that.flag = false
|
|
|
- }
|
|
|
- })
|
|
|
- })
|
|
|
-
|
|
|
- that.getbuildType(); //工地类型
|
|
|
- that.buildReportQuery(); //查询
|
|
|
- },
|
|
|
- methods: {
|
|
|
- /*--------------------- 地图相关 ----------------*/
|
|
|
- /**
|
|
|
- * @description 加载地图
|
|
|
- */
|
|
|
- loadMap: function() {
|
|
|
- this.$refs.mapBox.appendChild(this.$refs.cctvMap)
|
|
|
- this.$refs.cctvMap.style.display = ''
|
|
|
- this.mapV.extent = this.data.mapView.extent
|
|
|
- },
|
|
|
- /**
|
|
|
- * @description 绘制工地点位
|
|
|
- */
|
|
|
- drawPoint() {
|
|
|
- let that = this
|
|
|
- let mapV = this.data.mapView
|
|
|
- let map = mapV.map
|
|
|
- loadModules(['esri/views/MapView', "esri/Graphic", "esri/layers/GraphicsLayer"],{ url: esriConfig.baseUrl }).then(([MapView, Graphic, GraphicsLayer]) => {
|
|
|
- that.mapV = mapView
|
|
|
- if(this.reportForm.pointLat) {
|
|
|
- const point = {
|
|
|
- type: 'point',
|
|
|
- longitude: that.reportForm.pointLon,
|
|
|
- latitude: that.reportForm.pointLat
|
|
|
- };
|
|
|
- const simpleMarkerSymbol = {
|
|
|
- type: "simple-marker",
|
|
|
- color: [226, 119, 40],//橙色
|
|
|
- outLine: {
|
|
|
- color: [255, 255, 255],//白色
|
|
|
- width: 1
|
|
|
- }
|
|
|
- };
|
|
|
- const pointGraphic = new Graphic({
|
|
|
- geometry: point,
|
|
|
- symbol: simpleMarkerSymbol
|
|
|
- });
|
|
|
- if(that.graphicsLayer != null) {
|
|
|
- that.graphicsLayer = null
|
|
|
- map.removeAll(that.graphicsLayer)
|
|
|
- }
|
|
|
- that.graphicsLayer = new GraphicsLayer()
|
|
|
- that.graphicsLayer.add(pointGraphic)
|
|
|
- map.add(that.graphicsLayer)
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * @description 获取片区
|
|
|
- */
|
|
|
- getPartArea(lon, lat) {
|
|
|
- loadModules([ 'esri/geometry/geometryEngine', 'esri/geometry/Point', 'esri/geometry/geometryEngineAsync' ],{ url: esriConfig.baseUrl }).then(([geometryEngine, Point, geometryEngineAsync]) => {
|
|
|
- let sp = this.data.mapView.spatialReference
|
|
|
- $.ajax({
|
|
|
- url: appconfig.gisResource.business_map.config[0].url + "/" + this.layerId + "/query?f=pjson",
|
|
|
- type: 'POST',
|
|
|
- data: {
|
|
|
- where: '1=1',
|
|
|
- f: 'pjson',
|
|
|
- outFields: '*'
|
|
|
- },
|
|
|
- success: (data) => {
|
|
|
- let point = {
|
|
|
- type: 'point',
|
|
|
- x: lon,
|
|
|
- y: lat,
|
|
|
- spatialReference: sp
|
|
|
- }
|
|
|
- this.pointPlaces = []
|
|
|
- this.pointGeo = []
|
|
|
- data = JSON.parse(data)
|
|
|
- data = data.features
|
|
|
- this.pointGeo = data
|
|
|
- for(let item of data) {
|
|
|
- this.pointPlaces.push(item.attributes)
|
|
|
- }
|
|
|
- let index = undefined
|
|
|
- for(let item of this.pointGeo) {
|
|
|
- item.geometry.spatialReference = sp
|
|
|
- let isIn = geometryEngine.intersects(item.geometry, point)
|
|
|
- if(isIn === true) {
|
|
|
- index = item.attributes.OBJECTID
|
|
|
- }
|
|
|
- }
|
|
|
- this.reportForm.pointPlace = index
|
|
|
- },
|
|
|
- error: (error) => this.$message.error(error)
|
|
|
- })
|
|
|
- })
|
|
|
- },
|
|
|
-
|
|
|
- /**
|
|
|
- * @description 改变flag的值,false停止绘制
|
|
|
- */
|
|
|
- chageFlagStatus() {
|
|
|
- this.flag = true //开始绘制
|
|
|
- },
|
|
|
-
|
|
|
- /*--------------------- 附件上传 ----------------*/
|
|
|
- handleRemove(file, fileList) {
|
|
|
- console.log('文件列表移除文件时的钩子', file, fileList)
|
|
|
- this.fileList = fileList
|
|
|
- },
|
|
|
- handlePreview(file) {
|
|
|
- console.log('点击文件列表中已上传的文件时的钩子', file)
|
|
|
- },
|
|
|
- handleExceed(files, fileList) {
|
|
|
- this.$message.warning(
|
|
|
- `当前限制选择 3 个文件,本次选择了 ${
|
|
|
- files.length
|
|
|
- } 个文件,共选择了 ${files.length + fileList.length} 个文件`
|
|
|
- )
|
|
|
- },
|
|
|
- beforeRemove(file, fileList) {
|
|
|
- return this.$confirm(`确定移除 ${file.name}?`)
|
|
|
- },
|
|
|
- //上传之前的钩子函数
|
|
|
- beforeAvatarUpload(response, file, fileList) {
|
|
|
- console.log(response, file)
|
|
|
- this.fileMap(file)
|
|
|
- },
|
|
|
- fileMap(file) {
|
|
|
- if (file.length !== 0) {
|
|
|
- const files = file.map((v) => {
|
|
|
- return v.raw
|
|
|
- })
|
|
|
- this.files = files
|
|
|
- }
|
|
|
- },
|
|
|
- handleAvatarSuccess(res, file, fileList) {
|
|
|
- console.log('文件上传成功时的钩子', res, file, fileList)
|
|
|
- },
|
|
|
-
|
|
|
-
|
|
|
- watchDetail() {
|
|
|
- var oTroubleDetail = Vue.extend(buildsiteDetail)
|
|
|
- var dom = new oTroubleDetail().$mount().$el
|
|
|
- this.data.tfDialog.Show('详情', dom)
|
|
|
- this.data.tfDialog.setSize('980px', '20px')
|
|
|
- },
|
|
|
- buildsiteReport() {
|
|
|
- var oTroubleDetail = Vue.extend(reportPanel)
|
|
|
- var dom = new oTroubleDetail().$mount().$el
|
|
|
- this.data.tfDialog.Show('上报', dom)
|
|
|
- this.data.tfDialog.setSize('980px', '20px')
|
|
|
- },
|
|
|
- table1Select(e) {
|
|
|
- // this.reportDisable = e.length < 1 //当选中条数小于1时,上报按钮不可点击
|
|
|
- },
|
|
|
-
|
|
|
- /*--------------------- 分页查询 ---------------*/
|
|
|
- /**
|
|
|
- * @description 分页每页条数
|
|
|
- */
|
|
|
- handleSizeChange(pageSize) {
|
|
|
- this.pageInfo.size = pageSize
|
|
|
- this.getData()
|
|
|
- },
|
|
|
- /**
|
|
|
- * @description 改变当前页
|
|
|
- */
|
|
|
- handleCurrentChange(currentPage) {
|
|
|
- this.pageInfo.current = currentPage
|
|
|
- this.getData()
|
|
|
- },
|
|
|
-
|
|
|
- /*--------------------- API请求 ----------------*/
|
|
|
- /**
|
|
|
- * @description 查询工地列表
|
|
|
- */
|
|
|
- buildReportQuery() {
|
|
|
- this.pageInfo.current=1
|
|
|
- this.getData()
|
|
|
- },
|
|
|
-
|
|
|
- /**
|
|
|
- * @description 查询工地列表
|
|
|
- */
|
|
|
- getData(){
|
|
|
- var that = this;
|
|
|
- //追加分页参数
|
|
|
- const query = that.pageInfo
|
|
|
- Object.assign(query, that.queryParams)
|
|
|
- console.log("query参数:"+JSON.stringify(that.pageInfo));
|
|
|
- that.buildsiteData = []
|
|
|
- queryBuildList(query).then(res => {
|
|
|
- if(res.code !== 1){
|
|
|
- that.$message.error("获取工地列表出错!")
|
|
|
- return;
|
|
|
- }
|
|
|
- //数据总数
|
|
|
- that.pageInfo.tableTotal = res.result.total
|
|
|
- that.buildsiteData = res.result.records
|
|
|
- })
|
|
|
- },
|
|
|
-
|
|
|
- /**
|
|
|
- * @description 工地上报
|
|
|
- */
|
|
|
- reportClick() {
|
|
|
- const that = this
|
|
|
- let mapView = this.data.mapView
|
|
|
- this.flag = true
|
|
|
- if(this.flag = true) {
|
|
|
- this.click = mapView.on('click', function(e) {
|
|
|
- that.reportForm.pointLon = (e.mapPoint.longitude).toFixed(6) //经度
|
|
|
- that.reportForm.pointLat = (e.mapPoint.latitude).toFixed(6) //纬度
|
|
|
- that.drawPoint(e.mapPoint.longitude, e.mapPoint.latitude)
|
|
|
- that.reportDialog = true //显示弹窗
|
|
|
- that.getPartArea(e.mapPoint.longitude, e.mapPoint.latitude)
|
|
|
- that.$nextTick(that.loadMap)
|
|
|
- that.flag = false
|
|
|
- })
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- /**
|
|
|
- * @description 码表 => 工地类型码表
|
|
|
- */
|
|
|
- getbuildType(){
|
|
|
- getBuildType({ size:10000 }).then(res => {
|
|
|
- this.buildType = res.result.records
|
|
|
- //增加全部
|
|
|
- this.buildType.unshift({
|
|
|
- id:'',name:'全部'
|
|
|
- })
|
|
|
- })
|
|
|
- },
|
|
|
-
|
|
|
-
|
|
|
- //确认上报时触发事件,调用接口进行上报信息传输
|
|
|
- confirmWorkSiteGuardReport() {
|
|
|
- reportWorkSiteGuard().then(res => {
|
|
|
- console.log(res);
|
|
|
- })
|
|
|
- this.reportDialog = false //关闭弹框
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-</script>
|
|
|
-
|
|
|
-<style lang='scss' scoped>
|
|
|
-.buildsiteReport {
|
|
|
- height: 100%;
|
|
|
- width: 100%;
|
|
|
- padding: 5px;
|
|
|
- .filteroption {
|
|
|
- width: 40%;
|
|
|
- height: 40px;
|
|
|
- font-size: 14px;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: space-between;
|
|
|
- }
|
|
|
- .datatable {
|
|
|
- flex: 1;
|
|
|
- height: calc(100% - 100px);
|
|
|
- }
|
|
|
- .pagination-area {
|
|
|
- height: 60px;
|
|
|
- display: flex;
|
|
|
- justify-content: flex-end;
|
|
|
- align-items: center;
|
|
|
- // align-self: flex-end;
|
|
|
- }
|
|
|
- /deep/ .el-button {
|
|
|
- margin-left: 0;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-.el-row {
|
|
|
- margin-bottom: 20px;
|
|
|
-}
|
|
|
-
|
|
|
-.flexDiv{
|
|
|
- width: 33%;
|
|
|
- height: 30px;
|
|
|
- line-height: 30px;
|
|
|
- margin-top: 10px;
|
|
|
-}
|
|
|
-.flexDivMax{
|
|
|
- width: 99%;
|
|
|
- height: 50px;
|
|
|
- line-height: 50px;
|
|
|
- margin-top: 8px;
|
|
|
-}
|
|
|
-.flexDivFile{
|
|
|
- width: 99%;
|
|
|
- height: 100px;
|
|
|
- line-height: 100px;
|
|
|
- margin-top: 8px;
|
|
|
-}
|
|
|
-.flexDivMap{
|
|
|
- width: 99%;
|
|
|
- height: 310px;
|
|
|
- line-height: 310px;
|
|
|
- margin-top: 8px;
|
|
|
-}
|
|
|
-.flexTitle{
|
|
|
- min-width: 120px;
|
|
|
- display: inline-block;
|
|
|
- text-align: right;
|
|
|
-}
|
|
|
-.flexInfo{
|
|
|
- display: inline-block;
|
|
|
- width: calc(100% - 150px);
|
|
|
-}
|
|
|
-</style>
|
|
|
-
|
|
|
-<style>
|
|
|
-input::-webkit-outer-spin-button,
|
|
|
-input::-webkit-inner-spin-button {
|
|
|
- -webkit-appearance: none !important;
|
|
|
-}
|
|
|
-input[type="number"] {
|
|
|
- -moz-appearance: textfield;
|
|
|
-}
|
|
|
-</style>
|