zhgdyun/src/views/projectFront/quality/inspectionLedger.vue
2024-04-29 16:02:58 +08:00

3484 lines
112 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="inspectionRecord">
<div class="statistics">
<span
>{{ $t('message.quality.sum') }}:
<span class="value">{{ statisticsValue.totalNum }}</span>
</span>
<span
>{{ $t('message.quality.recordsOfTheFebruary') }}:
<span class="value">{{ statisticsValue.investigateNum }}</span></span
>
<span
>{{ $t('message.quality.hasBeenClosed') }}:
<span class="value">{{ statisticsValue.closeNum }}</span></span
>
<span
>{{ $t('message.quality.NotClosed') }}:
<span class="value">{{ statisticsValue.notCloseNum }}</span></span
>
<span
>{{ $t('message.quality.extendedPeriodNotClosed') }}:
<span class="value">{{
statisticsValue.overdueNotCloseNum
}}</span></span
>
<span
>{{ $t('message.quality.afterRectification') }}:
<span class="value">{{ statisticsValue.rectificationNum }}</span></span
>
<span
>{{ $t('message.quality.toReview') }}:
<span class="value">{{ statisticsValue.reviewNum }}</span></span
>
<span
>{{ $t('message.quality.toCheck') }}:
<span class="value">{{ statisticsValue.verificationNum }}</span></span
>
<!-- 中建五局添加字段 -->
<span v-if="COMPANY == 'zjwj'"
>整改率:
<span class="value"
>{{ statisticsValue.rectificationRatio }}%</span
></span
>
<span v-if="COMPANY == 'zjwj'"
>闭合率:
<span class="value">{{ statisticsValue.completeRatio }}%</span></span
>
</div>
<el-form
:inline="true"
:model="formInline"
size="small"
class="demo-form-inline"
>
<el-form-item :label="$t('message.quality.inspectionTime')">
<el-date-picker
style="width: 335px"
v-model="time"
value-format="yyyy-MM-dd HH:mm:ss"
type="datetimerange"
:range-separator="$t('message.quality.to')"
:start-placeholder="$t('message.quality.startDate')"
:end-placeholder="$t('message.quality.endDate')"
@change="checkedTime"
>
</el-date-picker>
</el-form-item>
<el-form-item :label="$t('message.quality.queryType')">
<el-select
style="width: 150px"
v-model="formInline.recordType"
:placeholder="$t('message.quality.queryType')"
>
<el-option :label="$t('message.quality.add')" value=""></el-option>
<el-option label="排查记录" :value="2"></el-option>
<el-option label="质量问题" :value="1"></el-option>
<!-- <el-option
:label="$t('message.quality.recordsOfTheFebruary')"
:value="1"
></el-option>
<el-option
:label="$t('message.quality.hasBeenClosed')"
:value="2"
></el-option>
<el-option
:label="$t('message.quality.NotClosed')"
:value="3"
></el-option>
<el-option
:label="$t('message.quality.extendedPeriodNotClosed')"
:value="4"
></el-option>
<el-option
:label="$t('message.quality.afterRectification')"
:value="5"
></el-option>
<el-option
:label="$t('message.quality.toReview')"
:value="6"
></el-option>
<el-option
:label="$t('message.quality.toCheck')"
:value="7"
></el-option> -->
</el-select>
</el-form-item>
<el-form-item :label="$t('message.quality.problemLevel')">
<el-select
style="width: 150px"
v-model="formInline.level"
:placeholder="$t('message.quality.problemLevel')"
>
<el-option :label="$t('message.quality.add')" value=""></el-option>
<el-option
:label="$t('message.quality.stair')"
:value="1"
></el-option>
<el-option
:label="$t('message.quality.second')"
:value="2"
></el-option>
<el-option
:label="$t('message.quality.three')"
:value="3"
></el-option>
<el-option :label="$t('message.quality.four')" :value="4"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('message.quality.state')">
<el-select
style="width: 150px"
v-model="formInline.status"
:placeholder="$t('message.quality.state')"
>
<el-option :label="$t('message.quality.add')" value=""></el-option>
<el-option label="待整改" :value="2"></el-option>
<el-option label="待复查" :value="3"></el-option>
<el-option label="待核验" :value="4"></el-option>
<el-option label="超期未关闭" :value="7"></el-option>
<el-option label="合格" :value="5"></el-option>
<!-- <el-option
:label="$t('message.quality.noRectification')"
:value="1"
></el-option> -->
<!-- <el-option
:label="$t('message.quality.afterRectification')"
:value="2"
></el-option>
<el-option
:label="$t('message.quality.toReview')"
:value="3"
></el-option>
<el-option
:label="$t('message.quality.toCheck')"
:value="4"
></el-option>
<el-option
:label="$t('message.quality.qualified')"
:value="5"
></el-option>
<el-option
:label="$t('message.quality.disqualification')"
:value="6"
></el-option> -->
</el-select>
</el-form-item>
<el-form-item :label="$t('message.quality.urgencyDegree')">
<el-select
style="width: 150px"
v-model="formInline.urgentLevel"
:placeholder="$t('message.quality.urgencyDegree')"
>
<el-option :label="$t('message.quality.add')" value=""></el-option>
<el-option
:label="$t('message.quality.ordinary')"
:value="1"
></el-option>
<el-option
:label="$t('message.quality.severity')"
:value="2"
></el-option>
<el-option
:label="$t('message.quality.critical')"
:value="3"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="区域" prop="regionId" v-if="COMPANY == 'zjwj'">
<el-cascader
style="width: 150px"
v-model="formInline.regionId"
clearable
ref="formRegion1"
:options="checkPointList"
:props="checkPointProps"
@change="changeRegion"
></el-cascader>
</el-form-item>
<el-form-item>
<el-button type="primary" plain @click="onSubmit">{{
$t('message.quality.inquire')
}}</el-button>
<el-button type="warning" plain @click="refreshBtn">{{
$t('message.quality.flush')
}}</el-button>
<el-button type="primary" @click="addBtn">新增</el-button>
<el-button type="primary" @click="exportData">导出</el-button>
</el-form-item>
</el-form>
<el-table :data="tableData" class="tables" height="570" style="width: 100%">
<el-table-column
:label="$t('message.quality.numericalOrder')"
type="index"
width="55"
>
</el-table-column>
<el-table-column label="检查类型" align="center" prop="recordType">
<template slot-scope="scope">{{
scope.row.recordType == 1 ? '质量问题' : '排查记录'
}}</template>
</el-table-column>
<!-- 检查结果-->
<el-table-column
align="center"
prop="changeLimitTime"
:label="
$t('message.quality.inspectionResult') +
'/' +
$t('message.quality.rectificationLimit')
"
>
<template slot-scope="scope">
<el-button type="text">
{{
scope.row.status == 1
? $t('message.quality.noRectification')
: scope.row.status == 2
? $t('message.quality.afterRectification')
: scope.row.status == 3
? $t('message.quality.toReview')
: scope.row.status == 4
? $t('message.quality.toCheck')
: scope.row.status == 5
? $t('message.quality.qualified')
: scope.row.status == 6
? $t('message.quality.disqualification')
: scope.row.status == ''
? $t('message.quality.qualified')
: ''
}}
</el-button>
<span class="tableStatus" v-show="scope.row.overTime == true"
>超期</span
>
<div>{{ scope.row.changeLimitTime }}</div>
</template>
</el-table-column>
<el-table-column
align="center"
prop="inspectManName"
:label="
$t('message.quality.rummager') +
'/' +
$t('message.quality.inspectionTime')
"
width="180"
>
<template slot-scope="scope">
<div>{{ scope.row.inspectManName }}</div>
<!-- <div>{{ scope.row.createEnterpriseName }}</div> -->
<div>{{ scope.row.inspectTime }}</div>
</template>
</el-table-column>
<el-table-column
align="center"
prop="dangerItemContent"
:label="$t('message.quality.problemInformation')"
>
</el-table-column>
<el-table-column
align="center"
prop="changeName"
:label="$t('message.quality.rectificationPeople')"
>
</el-table-column>
<el-table-column
align="center"
prop="reviewName"
:label="$t('message.quality.reviewOfThePeople')"
>
</el-table-column>
<el-table-column
align="center"
prop="verifyManName"
:label="$t('message.quality.checkOne')"
>
</el-table-column>
<!-- <el-table-column
align="center"
prop="notifyPersonName"
:label="$t('message.quality.notifier')"
>
</el-table-column> -->
<!-- //例行检查-->
<!-- <el-table-column
prop="routineCheckName"
:label="$t('message.quality.routineCheck')"
>
</el-table-column> -->
<el-table-column align="center" prop="remark" label="整改要求">
<template slot-scope="scope">
<div :title="scope.row.remark" class="textSty">
{{ scope.row.remark }}
</div>
</template>
</el-table-column>
<el-table-column align="center" label="操作">
<template slot-scope="scope">
<div class="tableBtns" style="margin-left: 60px">
<div
@click="newShowDatadetails(scope.row, scope.$index)"
class="operationText last"
>
<i
class="el-icon-tickets"
style="color: #8dacfa; font-size: 16px; margin-right: 2px"
></i>
<span>查看</span>
</div>
</div>
</template>
</el-table-column>
</el-table>
<el-pagination
class="pagerBox"
style="margin: 30px 0 20px"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pageNo"
:page-sizes="$store.state.PAGESIZRS"
:page-size="pageSize"
layout="total, sizes, prev, pager, next"
:total="Number(total)"
background
></el-pagination>
<!-- //编辑责任区域 -->
<el-dialog
:modal-append-to-body="false"
@close="close"
:title="addTitle"
:visible.sync="addDialog"
width="866px"
:close-on-click-modal="false"
>
<vue-scroll style="height: 600px">
<div class="dialog_content" style="padding: 0 100px">
<el-radio-group
v-model="recordType"
size="small"
style="margin-bottom: 20px"
@change="close"
>
<el-radio-button
:label="1"
v-show="type == 'add' || (type == 'detail' && recordType == 1)"
>{{ $t('message.quality.qualityProblem') }}</el-radio-button
>
<el-radio-button
v-if="COMPANY != 'zjwj'"
:label="2"
v-show="type == 'add' || (type == 'detail' && recordType == 2)"
>{{ $t('message.quality.recordsOfTheFebruary') }}</el-radio-button
>
</el-radio-group>
<div
v-show="recordType == 1 || (recordType == 1 && type == 'detail')"
>
<el-form
ref="addForm1"
size="small"
:rules="addForm1Rules"
:model="addForm1"
label-width="120px"
>
<!-- 检查部位-->
<el-form-item
:label="$t('message.quality.checkPoint')"
prop="regionId"
>
<el-cascader
:disabled="type == 'detail'"
v-model="addForm1.regionId"
style="width: 400px"
clearable
ref="formRegion1"
:options="checkPointList"
:props="checkPointProps"
@change="changeRegion"
></el-cascader>
</el-form-item>
<!-- 问题描述 -->
<el-form-item
:label="$t('message.quality.problemDescription')"
prop="dangerItemId"
>
<div class="custom-cascader-wrapper">
<el-cascader
:disabled="type == 'detail'"
:options="classifyList"
v-model="addForm1.dangerItemId"
style="width: 400px"
:show-all-levels="false"
@clear="addForm1.dangerItemId = []"
:props="checkClassifyProps"
clearable
@change="handleChange"
ref="cascaderAddr"
></el-cascader>
</div>
</el-form-item>
<!-- 问题分类-->
<el-form-item
:label="$t('message.quality.questionClassification')"
prop="dangerItemId"
>
<el-cascader
disabled
v-model="addForm1.dangerItemId"
style="width: 400px"
ref="formRegion2"
@change="selectcascader"
@focus="focuscascader"
@blur="blurcascader"
clearable
:props="checkClassifyProps"
@clear="addForm1.dangerItemId = []"
:options="classifyList"
></el-cascader>
</el-form-item>
<el-form-item
:label="$t('message.quality.moreInfo')"
prop="dangerDesc"
>
<el-input
:disabled="type == 'detail'"
type="textarea"
style="width: 400px"
:placeholder="
$t('message.quality.pleaseEnter') +
$t('message.quality.content')
"
v-model="addForm1.dangerDesc"
>
</el-input>
</el-form-item>
<!-- 整改要求-->
<el-form-item
:label="$t('message.quality.rectificationRequest')"
prop="remark"
>
<el-input
:disabled="type == 'detail'"
type="textarea"
style="width: 400px"
:placeholder="
$t('message.quality.pleaseEnter') +
$t('message.quality.content')
"
v-model="addForm1.remark"
>
</el-input>
</el-form-item>
<el-form-item
:label="$t('message.quality.routineCheck')"
prop="routineId"
v-if="routineList.length > 0"
>
<el-radio-group
v-model="addForm1.routineId"
:disabled="type == 'detail'"
>
<el-radio
v-for="(item, index) in routineList"
:key="index"
:label="item.id"
>{{ item.name }}</el-radio
>
</el-radio-group>
</el-form-item>
<!-- <el-form-item
label="分部工程"
prop="subsectionId"
:disabled="type == 'detail'"
>
<el-select
:disabled="type == 'detail'"
v-model="addForm1.subsectionId"
@change="checkSubListData"
filterable
style="width: 400px"
clearable
placeholder="请选择"
>
<el-option
v-for="(item, index) in listData"
:key="index"
:label="item.subdivisionProjectName"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="分项工程" prop="subentryId">
<el-select
:disabled="type == 'detail'"
v-model="addForm1.subentryId"
filterable
style="width: 400px"
clearable
placeholder="请选择"
>
<el-option
v-for="(item, index) in subListData"
:key="index"
:label="item.subdivisionProjectName"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="巡检楼层" prop="floor">
<el-input
style="width: 400px"
:disabled="type == 'detail'"
placeholder="请输入整数"
v-model="addForm1.floor"
@input="
addForm1.floor = addForm1.floor.replace(/[^\-\d]/g, '')
"
>
</el-input>
</el-form-item> -->
<el-form-item label="事件描述" prop="addedDescription">
<el-input
:disabled="type == 'detail'"
type="textarea"
style="width: 400px"
:placeholder="
$t('message.quality.pleaseEnter') +
$t('message.quality.content')
"
v-model="addForm1.addedDescription"
>
</el-input>
</el-form-item>
<el-form-item
:label="$t('message.quality.problemLevel')"
prop="level"
>
<!-- 问题等级-->
<el-radio-group
v-model="addForm1.level"
:disabled="type == 'detail'"
>
<el-radio :label="1">{{
$t('message.quality.stair')
}}</el-radio>
<el-radio :label="2">{{
$t('message.quality.second')
}}</el-radio>
<el-radio :label="3">{{
$t('message.quality.three')
}}</el-radio>
<el-radio :label="4">{{
$t('message.quality.four')
}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
:label="$t('message.quality.urgencyDegree')"
prop="urgentLevel"
>
<el-radio-group
v-model="addForm1.urgentLevel"
:disabled="type == 'detail'"
>
<el-radio :label="1">{{
$t('message.quality.ordinary')
}}</el-radio>
<el-radio :label="2">{{
$t('message.quality.severity')
}}</el-radio>
<el-radio :label="3">{{
$t('message.quality.critical')
}}</el-radio>
</el-radio-group>
</el-form-item>
<!-- 检查人-->
<!-- <el-form-item
:label="$t('message.quality.rummager')"
prop="inspectManId"
>
<el-select
:disabled="type=='detail'"
v-model="addForm1.inspectManId"
filterable
style="width: 400px"
clearable
:placeholder="$t('message.quality.pleaseSelect')"
>
<el-option
v-for="item in crewList"
:key="item.userId"
:label="item.workerName"
:value="item.userId"
> -->
<!-- <span style="float: left">{{ item.workerName }}</span>
<span style="float: right; color: #8492a6; font-size: 13px"
>{{ $t("message.quality.phoneNumber") }}{{
item.userTel
? item.userTel.substring(0, 3) +
"****" +
item.userTel.substring(7)
: ""
}}</span
> -->
<!-- </el-option>
</el-select>
</el-form-item> -->
<el-form-item
:label="$t('message.quality.inspectionTime')"
prop="inspectTime"
>
<el-date-picker
:disabled="type == 'detail'"
value-format="yyyy-MM-dd HH:mm:ss"
style="width: 400px"
v-model="addForm1.inspectTime"
type="datetime"
:placeholder="$t('message.quality.optionDate')"
>
</el-date-picker>
</el-form-item>
<el-form-item
v-if="COMPANY != 'zjwj'"
:label="$t('message.quality.subContractor')"
prop="enterpriseName"
>
<el-input
:disabled="type == 'detail'"
placeholder="请选择"
style="width: 400px"
v-model="addForm1.enterpriseName"
clearable
@focus="getEnterprise"
@clear="addForm1.enterpriseSn = ''"
>
</el-input>
</el-form-item>
<el-form-item
:label="$t('message.quality.rectificationLimit')"
prop="changeLimitTime"
>
<el-date-picker
:disabled="type == 'detail'"
style="width: 400px"
value-format="yyyy-MM-dd HH:mm:ss"
v-model="addForm1.changeLimitTime"
type="datetime"
:placeholder="$t('message.quality.optionDate')"
>
</el-date-picker>
</el-form-item>
<el-form-item
:label="$t('message.quality.rectificationPeople')"
prop="changeId"
>
<el-select
:disabled="type == 'detail'"
v-model="addForm1.changeId"
filterable
style="width: 400px"
clearable
:placeholder="$t('message.quality.pleaseSelect')"
>
<el-option
v-for="item in crewUpdateList"
:key="item.userId + ''"
:label="item.realName"
:value="item.userId + ''"
>
<!-- <span style="float: left">{{ item.workerName }}</span>
<span style="float: right; color: #8492a6; font-size: 13px"
>{{ $t("message.quality.phoneNumber") }}{{
item.userTel
? item.userTel.substring(0, 3) +
"****" +
item.userTel.substring(7)
: ""
}}</span
> -->
</el-option>
</el-select>
</el-form-item>
<el-form-item
:label="$t('message.quality.reviewOfThePeople')"
prop="reviewId"
>
<el-select
:disabled="type == 'detail'"
v-model="addForm1.reviewId"
filterable
style="width: 400px"
clearable
:placeholder="$t('message.quality.pleaseSelect')"
>
<el-option
v-for="item in crewList"
:key="item.userId + ''"
:label="item.realName"
:value="item.userId + ''"
>
<!-- <span style="float: left">{{ item.workerName }}</span>
<span style="float: right; color: #8492a6; font-size: 13px"
>{{ $t("message.quality.phoneNumber") }}{{
item.userTel
? item.userTel.substring(0, 3) +
"****" +
item.userTel.substring(7)
: ""
}}</span
> -->
</el-option>
</el-select>
</el-form-item>
<el-form-item
:label="$t('message.quality.checkOne')"
prop="verifyManId"
>
<el-select
:disabled="type == 'detail'"
v-model="addForm1.verifyManId"
filterable
style="width: 400px"
clearable
:placeholder="$t('message.quality.pleaseSelect')"
>
<el-option
v-for="item in crewList"
:key="item.userId + ''"
:label="item.realName"
:value="item.userId + ''"
>
<!-- <span style="float: left">{{ item.workerName }}</span>
<span style="float: right; color: #8492a6; font-size: 13px"
>{{ $t("message.quality.phoneNumber") }}{{
item.userTel
? item.userTel.substring(0, 3) +
"****" +
item.userTel.substring(7)
: ""
}}</span
> -->
</el-option>
</el-select>
</el-form-item>
<!-- <el-form-item
:label="$t('message.quality.notifier')"
prop="notifyPerson"
>
<el-select
:disabled="type == 'detail'"
v-model="addForm1.notifyPerson"
filterable
style="width: 400px"
multiple
:placeholder="$t('message.quality.pleaseSelect')"
>
<el-option
v-for="item in crewList"
:key="item.userId + ''"
:label="item.workerName"
:value="item.userId + ''"
>
</el-option>
</el-select>
</el-form-item> -->
<el-form-item
:label="$t('message.quality.sceneChanges')"
prop="status"
>
<el-switch
:disabled="type == 'detail'"
v-model="addForm1.status"
:active-text="$t('message.quality.completed')"
:inactive-text="$t('message.quality.unfinished')"
active-color="#13ce66"
:active-value="5"
:inactive-value="2"
>
</el-switch>
</el-form-item>
<!-- 图纸定位 -->
<!-- <el-form-item
v-if="COMPANY != 'longguang'"
:label="$t('message.quality.drawingPositioning')"
>
<el-button
:disabled="type == 'detail'"
type="text"
icon="el-icon-location-information"
@click="drawingPositionBtn"
>{{ $t('message.quality.positionOnTheDrawing') }}</el-button
>
</el-form-item> -->
<!-- 上传图片-->
<el-form-item
:label="$t('message.quality.uploadPictures')"
prop="imgUrl"
>
<el-upload
:class="{ hide: hideUpload }"
:disabled="type == 'detail'"
:action="uploadUrl"
list-type="picture-card"
:on-success="(file) => handleSuccess(file, 1)"
:on-error="(file) => handleError(file, 1)"
:on-remove="
(file, fileList) => handleRemove(file, fileList, 1)
"
:on-preview="(file) => handlePreview(file, 1)"
accept="image/jpeg,image/jpg,image/png"
:before-upload="(file) => beforeUpload(file, 1)"
name="files"
:file-list="fileList1"
:limit="5"
>
<i class="el-icon-plus"></i>
</el-upload>
<!-- 支持格式-->
<span>{{ $t('message.quality.uploadHint') }}</span>
</el-form-item>
<el-form-item prop="fileUrl">
<el-upload
:disabled="type == 'detail'"
class="upload-demo"
:action="uploadUrl"
:on-success="(file) => handleSuccess(file, 2)"
:on-error="(file) => handleError(file, 2)"
:on-remove="
(file, fileList) => handleRemove(file, fileList, 2)
"
:on-preview="(file) => handlePreview(file, 2)"
:limit="1"
:file-list="fileList2"
:before-upload="(file) => beforeUpload(file, 2)"
name="files"
>
<el-button
:disabled="type == 'detail'"
size="small"
type="primary"
>{{ $t('message.quality.uploadAttachment') }}</el-button
>
<!-- 上传附件-->
<div slot="tip" class="el-upload__tip">
{{ $t('message.quality.uploadHint2') }}
</div>
</el-upload>
</el-form-item>
</el-form>
<!-- <el-divider
content-position="left"
v-if="rectifyRecordList.length > 0"
>整改记录</el-divider
>
<el-timeline class="detailBox" :reverse="true">
<el-timeline-item
:timestamp="item.createTime"
placement="top"
v-for="(item, index) in rectifyRecordList"
:key="index"
>
<el-card>
<p class="grid-content">
<span class="label"
>{{ item.type == 1 ? '整改人' : '复查人' }}</span
><span class="value">{{ item.createUserName }}</span>
</p>
<p class="grid-content" v-if="item.type == 1">
<span class="label">整改状态:</span
><span class="value">{{
item.status == 2 ? '已整改' : '未整改'
}}</span>
</p>
<p class="grid-content" v-else>
<span class="label">复查状态:</span
><span class="value">{{
item.status == 2 ? '合格' : '不合格'
}}</span>
</p>
<p class="grid-content">
<span class="label">相关说明:</span
><span class="value">{{ item.additionalRemarks }}</span>
</p>
<div class="grid-content" v-if="imgList[index]">
<span class="label">相关照片:</span>
<span class="value">
<el-image
@click="
openImg($store.state.FILEURL + imgList[index][0].url)
"
style="width: 50px"
:src="$store.state.FILEURL + imgList[index][0].url"
>
</el-image>
</span>
</div>
</el-card>
</el-timeline-item>
</el-timeline> -->
</div>
<div
v-show="recordType == 2 || (recordType == 2 && type == 'detail')"
>
<el-form
ref="addForm2"
size="small"
:rules="addForm2Rules"
:model="addForm2"
label-width="120px"
>
<el-form-item
:label="$t('message.quality.checkPoint')"
prop="regionId"
>
<el-cascader
:disabled="type == 'detail'"
v-model="addForm2.regionId"
style="width: 400px"
clearable
:options="checkPointList"
ref="addFormRegion2"
:props="checkPointProps"
@clear="addForm2.regionId = ''"
@change="changeRegion"
></el-cascader>
</el-form-item>
<el-form-item
:label="$t('message.quality.classification')"
prop="dangerItemId"
>
<el-cascader
:disabled="type == 'detail'"
:options="classifyList"
v-model="addForm2.dangerItemId"
style="width: 400px"
@clear="addForm2.dangerItemId = []"
:props="checkClassifyProps"
clearable
@change="handleChange"
ref="cascaderAddr2"
></el-cascader>
</el-form-item>
<el-form-item
label="分部工程"
prop="subsectionId"
:disabled="type == 'detail'"
>
<el-select
:disabled="type == 'detail'"
v-model="addForm2.subsectionId"
@change="checkSubListData"
filterable
style="width: 400px"
:clearable="true"
placeholder="请选择"
>
<el-option
v-for="(item, index) in listData"
:key="index"
:label="item.subdivisionProjectName"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="分项工程" prop="subentryId">
<el-select
:disabled="type == 'detail'"
v-model="addForm2.subentryId"
filterable
style="width: 400px"
:clearable="true"
placeholder="请选择"
>
<el-option
v-for="(item, index) in subListData"
:key="index"
:label="item.subdivisionProjectName"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="巡检楼层" prop="floor">
<el-input
style="width: 400px"
:disabled="type == 'detail'"
placeholder="请输入整数"
v-model="addForm2.floor"
>
</el-input>
</el-form-item>
<el-form-item label="事件描述" prop="addedDescription">
<el-input
:disabled="type == 'detail'"
type="textarea"
style="width: 400px"
:placeholder="
$t('message.quality.pleaseEnter') +
$t('message.quality.content')
"
v-model="addForm2.addedDescription"
>
</el-input>
</el-form-item>
<el-form-item
:label="$t('message.quality.moreInfo')"
prop="dangerDesc"
>
<el-input
:disabled="type == 'detail'"
style="width: 400px"
type="textarea"
:placeholder="
$t('message.quality.pleaseEnter') +
$t('message.quality.content')
"
v-model="addForm2.dangerDesc"
>
</el-input>
</el-form-item>
<el-form-item
:label="$t('message.quality.routineCheck')"
prop="routineId"
v-if="routineList.length > 0"
>
<el-radio-group
v-model="addForm2.routineId"
:disabled="type == 'detail'"
>
<el-radio
v-for="(item, index) in routineList"
:key="index"
:label="item.id"
>{{ item.name }}</el-radio
>
</el-radio-group>
</el-form-item>
<!-- <el-form-item
:label="$t('message.quality.rummager')"
prop="inspectManId"
>
<el-select
:disabled="type=='detail'"
v-model="addForm2.inspectManId"
filterable
style="width: 400px"
clearable
:placeholder="$t('message.quality.pleaseSelect')"
>
<el-option
v-for="item in crewList"
:key="item.userId"
:label="item.workerName"
:value="item.userId"
> -->
<!-- <span style="float: left">{{ item.workerName }}</span>
<span style="float: right; color: #8492a6; font-size: 13px"
>{{ $t("message.quality.phoneNumber") }}{{
item.userTel
? item.userTel.substring(0, 3) +
"****" +
item.userTel.substring(7)
: ""
}}</span
> -->
<!-- </el-option>
</el-select>
</el-form-item> -->
<el-form-item
:label="$t('message.quality.inspectionTime')"
prop="inspectTime"
>
<el-date-picker
:disabled="type == 'detail'"
style="width: 400px"
value-format="yyyy-MM-dd HH:mm:ss"
v-model="addForm2.inspectTime"
type="datetime"
:placeholder="$t('message.quality.optionDate')"
>
</el-date-picker>
</el-form-item>
<el-form-item
:label="$t('message.quality.subContractor')"
prop="enterpriseName"
>
<el-input
:disabled="type == 'detail'"
placeholder="请选择"
style="width: 400px"
v-model="addForm2.enterpriseName"
clearable
@focus="getEnterprise"
@clear="addForm2.enterpriseSn = ''"
>
</el-input>
</el-form-item>
<!-- 上传图片-->
<el-form-item
:label="$t('message.quality.uploadPictures')"
prop="imgUrl"
>
<el-upload
:class="{ hide: hideUpload }"
:disabled="type == 'detail'"
:action="uploadUrl"
list-type="picture-card"
:on-success="(file) => handleSuccess(file, 3)"
:on-error="(file) => handleError(file, 3)"
:on-remove="
(file, fileList) => handleRemove(file, fileList, 3)
"
:on-preview="(file) => handlePreview(file, 3)"
:limit="5"
:file-list="fileList3"
accept="image/jpeg,image/jpg,image/png"
name="files"
>
<i class="el-icon-plus"></i>
</el-upload>
<span>{{ $t('message.quality.uploadHint') }}</span>
</el-form-item>
<el-form-item prop="fileUrl">
<el-upload
:disabled="type == 'detail'"
class="upload-demo"
:action="uploadUrl"
:on-success="(file) => handleSuccess(file, 4)"
:on-error="(file) => handleError(file, 4)"
:on-remove="
(file, fileList) => handleRemove(file, fileList, 4)
"
:on-preview="(file) => handlePreview(file, 4)"
:limit="1"
:on-exceed="handleExceed"
:file-list="fileList4"
:before-upload="(file) => beforeUpload(file, 4)"
name="files"
>
<el-button
:disabled="type == 'detail'"
size="small"
type="primary"
>{{ $t('message.quality.uploadAttachment') }}</el-button
>
<div slot="tip" class="el-upload__tip">
{{ $t('message.quality.uploadHint2') }}
</div>
</el-upload>
</el-form-item>
</el-form>
</div>
</div>
<div class="dialog-footer">
<el-button
class="cancleBtn"
@click="cancleEvent"
icon="el-icon-circle-close"
size="medium"
>{{ $t('message.alarmValueSet.cancel') }}
</el-button>
<el-button
:disabled="type == 'detail'"
type="primary"
icon="el-icon-circle-check"
@click="submitAddRecordFrom"
size="medium"
>{{ $t('message.alarmValueSet.save') }}
</el-button>
</div>
</vue-scroll>
</el-dialog>
<!-- 分包弹窗 -->
<el-dialog
:modal-append-to-body="false"
:title="
$t('message.quality.select') + $t('message.quality.subContractor')
"
:visible.sync="showEnterpriseDialog"
width="667px"
:close-on-click-modal="false"
>
<div class="dialog_content">
<!-- <el-radio-group
v-model="subcontractType"
size="small"
style="margin-bottom: 20px"
@change="changeSubcontractType"
>
<el-radio-button :label="1">{{
$t('message.quality.subcontractor')
}}</el-radio-button>
<el-radio-button :label="6">{{
$t('message.quality.lborSubcontractor')
}}</el-radio-button>
</el-radio-group> -->
<el-table
:data="subcontractList"
style="width: 100%"
class="tables"
@row-click="checkedSubcontractList"
>
<el-table-column
prop="enterpriseName"
:label="$t('message.quality.companyName')"
>
</el-table-column>
</el-table>
</div>
</el-dialog>
<!-- 图纸定位 -->
<el-dialog
:modal-append-to-body="false"
:title="$t('message.quality.drawingPositioning')"
:visible.sync="showPositioning"
width="1000px"
:close-on-click-modal="false"
>
<!-- <vue-scroll style="height: 600px"> -->
<div class="dialog_content" style="padding: 0 20px">
<div class="fullHeight">
<div class="right fullHeight">
<!-- <el-select
v-model="value"
clearable
placeholder="请选择图纸"
size="small"
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select> -->
<div
class="mapContainer whiteBlock"
id="mapContainer"
v-show="mapUrl"
>
<div class="infoDetail">
<div class="operateBox">
<img
src="@/assets/images/personPosition/zoomin.png"
@click="shrink"
v-show="!createdCoord"
/>
<img
src="@/assets/images/personPosition/zoomout.png"
@click="magnify"
v-show="!createdCoord"
/>
<img
src="@/assets/images/personPosition/addPoint.png"
class="add"
v-show="!createdCoord"
@click="
createdCoord = !createdCoord
multiples = 1
"
/>
<img
src="@/assets/images/personPosition/addPointing.png"
class="add"
v-show="createdCoord"
@click="createdCoord = !createdCoord"
/>
</div>
<el-upload
class="uploadBtn"
ref="upload"
name="files"
:action="$store.state.UPLOADURL"
:on-success="uploadMapSuccess"
accept=".png, .jpg, .jpeg"
:show-file-list="false"
>
<el-button slot="trigger" type="primary" size="medium">
{{ $t('message.personnelPosition.mapManage.re_upload') }}
</el-button>
</el-upload>
</div>
<div class="mapBox" id="mapBox">
<div
class="mapContent"
id="mapContent"
:style="{
transform: 'scale(' + multiples + ')',
transformOrigin: 'top left',
}"
>
<img
id="map"
:src="mapUrl"
:class="createdCoord ? 'map' : ''"
:style="{ transform: 'rotateZ(' + deg + 'deg)' }"
@click="addPoint($event)"
/>
<div
class="personBox"
v-for="(item, index) in pointList"
:key="index"
:style="{
left: item.coordinateX + 'px',
top: item.coordinateY + 'px',
}"
>
<el-popover placement="top" width="auto" trigger="click">
<div class="devDetail">
<p>
{{ $t('message.quality.coordinate') }}X:
{{ item.coordinateX }}Y:
{{ item.coordinateY }}
</p>
<p>
<!-- <span
class="primaryText hovers"
@click="editPoint(item, index)"
>{{
$t("message.personnelPosition.mapManage.edit")
}}</span> -->
<span
class="redText hovers"
@click="removePoint(item, index)"
>{{
$t('message.personnelPosition.mapManage.delete')
}}</span
>
</p>
</div>
<img
slot="reference"
src="@/assets/images/personPosition/monitorPoint.png"
alt
/>
</el-popover>
</div>
</div>
</div>
</div>
<div class="mapContainer whiteBlock" v-show="!mapUrl">
<div class="placeholderBox">
<img src="@/assets/images/noData.png" alt srcset />
<p>
{{ $t('message.personnelPosition.mapManage.no_drawings') }}
<el-upload
style="display: inline-block"
ref="upload"
name="files"
:action="$store.state.UPLOADURL"
:on-success="uploadMapSuccess"
:before-upload="beforeAvatarUpload"
accept=".png, .jpg, .jpeg"
:show-file-list="false"
>
<span slot="trigger">{{
$t('message.personnelPosition.mapManage.click_upload')
}}</span>
<!--点击上传-->
</el-upload>
</p>
</div>
</div>
</div>
</div>
</div>
<div class="dialog-footer">
<el-button
class="cancleBtn"
@click="
showPositioning = false
pointList = []
createdCoord = false
"
icon="el-icon-circle-close"
size="medium"
>{{ $t('message.alarmValueSet.cancel') }}
</el-button>
<el-button
type="primary"
icon="el-icon-circle-check"
@click="savePointBtn"
size="medium"
>{{ $t('message.alarmValueSet.save') }}
</el-button>
</div>
<!-- </vue-scroll> -->
</el-dialog>
<!-- 图片裁剪弹框 -->
<el-dialog
:modal-append-to-body="false"
:title="
$t('message.personnelPosition.mapManage.dialog_KJNova_Clipper.title')
"
:visible.sync="cropperDialog"
width="1200px"
>
<div class="dialog_content" style="height: 600px">
<!-- <vue-scroll> -->
<vueCropper
ref="cropper"
:img="cropperOption.img"
:outputType="cropperOption.outputType"
:autoCrop="true"
></vueCropper>
<!-- </vue-scroll> -->
</div>
<div class="dialog-footer">
<el-button
class="cancleBtn"
@click="cropperDialog = false"
icon="el-icon-circle-close"
size="medium"
>{{ $t('message.personnelPosition.cancel') }}
</el-button>
<el-button
type="primary"
icon="el-icon-circle-check"
@click="saveMapUrlFn"
size="medium"
>{{ $t('message.personnelPosition.determine') }}
</el-button>
</div>
</el-dialog>
<el-dialog :modal-append-to-body="false" :visible.sync="dialogVisible">
<img width="100%" :src="dialogImageUrl" alt="" />
</el-dialog>
<!-- 查看详情 -->
<el-dialog
:modal-append-to-body="false"
title="查看详情"
:visible.sync="dialogDetil"
width="867px"
:close-on-click-modal="false"
>
<div style="height: 600px">
<vue-scroll>
<div style="width: 800px">
<!-- 隐患记录 超期整改 -->
<div class="headerLeft">隐患记录</div>
<span
v-if="detailData.overTime == true"
style="
color: red;
font-weight: 500;
position: absolute;
left: 89%;
top: 1%;
"
>超期整改</span
>
<div class="detailBox">
<el-row :gutter="20">
<el-col :span="12">
<div class="grid-content">
<span class="label">检查类型:</span>
<span
class="value"
style="font-weight: 500; color: #5181f6; cursor: pointer"
>{{
detailData.recordType == 1 ? '质量问题' : '排查记录'
}}</span
>
</div>
</el-col>
<el-col :span="12">
<div class="grid-content">
<span class="label">分包单位:</span>
<span class="value">{{ detailData.enterpriseName }}</span>
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<div class="grid-content">
<span class="label">整改结果:</span>
<span
class="value"
:style="{
'font-weight': 500,
cursor: 'pointer',
color:
detailData.status == 2
? '#5181f6'
: detailData.status == 3
? '#ff8c00'
: detailData.status == 4
? '#a020f0'
: detailData.status == 5
? '#21c28e'
: '',
}"
>
<span
class="radiusD"
:style="{
background:
detailData.status == 2
? '#5181f6'
: detailData.status == 3
? '#ff8c00'
: detailData.status == 4
? '#a020f0'
: detailData.status == 5
? '#21c28e'
: '',
}"
></span>
<span>
{{
detailData.status == 2
? '待整改'
: detailData.status == 3
? '待复查'
: detailData.status == 4
? '待核验'
: detailData.status == 5
? '合格'
: ''
}}</span
>
</span>
<!-- <span
class="value"
style="font-weight: 500; color: #5181f6; cursor: pointer"
>
{{
detailData.status == 1
? '无需整改'
: detailData.status == 2
? '待整改'
: detailData.status == 3
? '待复查'
: detailData.status == 4
? '待核验'
: detailData.status == 5
? '合格'
: detailData.status == 6
? '不合格'
: detailData.status == ''
? '合格'
: ''
}}</span
> -->
</div>
</el-col>
<el-col :span="12">
<div class="grid-content">
<span class="label">检查时间:</span>
<span class="value">{{ detailData.inspectTime }}</span>
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<div class="grid-content">
<span class="label" style="margin-left: -14px"
>检查人:</span
>
<span class="value" style="margin-left: 25px">{{
detailData.inspectManName
}}</span>
</div>
</el-col>
<el-col :span="12">
<div class="grid-content">
<span class="label">补充说明:</span>
<span class="value">
{{ detailData.dangerDesc }}
</span>
</div>
</el-col>
</el-row>
<div>
<el-row :gutter="20">
<el-col :span="12">
<div class="grid-content">
<span class="label">分部工程:</span>
<span class="value">
{{ detailData.subsectionName }}
</span>
</div>
</el-col>
<el-col :span="12">
<div class="grid-content">
<span class="label">分项工程:</span>
<span class="value">
{{ detailData.subentryName }}
</span>
</div>
</el-col>
</el-row>
<el-row :gutter="20" v-show="detailData.recordType == 1">
<el-col :span="12">
<div class="grid-content">
<span class="label" style="margin-left: -14px"
>核验人:</span
>
<span class="value" style="margin-left: 25px">{{
detailData.verifyManName
}}</span>
</div>
</el-col>
<el-col :span="12">
<div class="grid-content">
<span class="label">问题等级:</span>
<span class="value">{{
detailData.level == 1
? '一级'
: detailData.level == 2
? '二级'
: detailData.level == 3
? '三级'
: '四级'
}}</span>
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<div class="grid-content">
<span class="label">检查部位:</span>
<span class="value" :title="detailData.regionName">{{
detailData.regionName
}}</span>
</div>
</el-col>
<el-col :span="12">
<div class="grid-content">
<span class="label">事件描述:</span>
<span class="value">
{{ detailData.addedDescription }}
</span>
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12" v-show="detailData.recordType == 1">
<div class="grid-content">
<span class="label">现场整改:</span>
<span
class="value"
:style="{
color:
detailData.status == 1 || detailData.status == 5
? '#21c28e'
: '#ff8c00',
}"
>{{
detailData.status == 1 || detailData.status == 5
? '已完成'
: '未完成'
}}</span
>
</div>
</el-col>
<el-col :span="12" v-show="detailData.recordType == 1">
<div class="grid-content">
<span class="label">紧急程度:</span>
<span class="value">{{
detailData.urgentLevel == 1
? '一般'
: detailData.urgentLevel == 2
? '严重'
: '紧要'
}}</span>
</div>
</el-col>
</el-row>
</div>
<el-row :gutter="20">
<el-col :span="12" v-show="detailData.recordType == 1">
<div class="grid-content">
<span class="label">问题分类:</span>
<span class="value" :title="detailData.dangerItemContent">
{{ detailData.dangerItemContent }}
</span>
</div>
</el-col>
<el-col :span="12" v-show="detailData.recordType == 1">
<div class="grid-content">
<span class="label" style="margin-left: -14px"
>整改人:</span
>
<span class="value" style="margin-left: 25px">{{
detailData.changeName
}}</span>
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12" v-show="detailData.recordType == 1">
<div class="grid-content">
<span class="label">整改要求:</span>
<span class="value" :title="detailData.remark">
{{ detailData.remark }}
</span>
</div>
</el-col>
<el-col :span="12" v-show="detailData.recordType == 1">
<div class="grid-content">
<span class="label">整改时限:</span>
<span class="value">{{ detailData.changeLimitTime }}</span>
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12" v-show="detailData.recordType == 1">
<div class="grid-content">
<span class="label">问题描述:</span>
<span class="value">
{{ detailData.problemDescription }}
</span>
</div>
</el-col>
<el-col :span="12" v-show="detailData.recordType == 1">
<div class="grid-content">
<span class="label" style="margin-left: -14px"
>复查人1</span
>
<span class="value" style="margin-left: 25px">{{
detailData.reviewName
}}</span>
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<div class="grid-content">
<span class="label">巡检楼层:</span>
<span class="value">
{{ detailData.floor }}
</span>
</div>
</el-col>
<el-col :span="12">
<div class="grid-content">
<span class="label" style="line-height: 25px"
>现场视频:</span
>
<span
style="color: #5181f6; cursor: pointer; margin-top: 3px"
class="value"
@click.stop="playerVideo(detailData.fileUrl)"
>
{{ videoName }}
</span>
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12" v-show="detailData.recordType == 2">
<div class="grid-content">
<span class="label">排查分类:</span>
<span class="value" :title="detailData.dangerItemContent">{{
detailData.dangerItemContent
}}</span>
</div>
</el-col>
<el-col :span="12">
<div class="grid-content">
<span class="label">现场照片:</span>
<span class="value" style="cursor: pointer;">
<el-image
v-for="(item, index) in parseImage2(
detailData.imageUrl
)"
:key="index"
style="width: 100px; height: 100px; margin-right: 10px"
:src="item"
:preview-src-list="parseImage2(item.fileUrl)"
@click="openImg(item)"
>
</el-image>
</span>
</div>
</el-col>
</el-row>
<el-row :gutter="20"> </el-row>
<!-- <el-row :gutter="20">
<el-col :span="24">
<div class="grid-content">
<span class="label">模型定位:</span>
<span class="value"> 已关联 </span>
</div>
</el-col>
</el-row> -->
<div class="headerLeft" v-if="rectifyRecordList.length > 0">
整改&复核记录
</div>
<el-timeline class="detailBox" :reverse="true">
<el-timeline-item
:timestamp="item.rectifyTime"
placement="top"
v-for="(item, index) in rectifyRecordList"
:key="index"
>
<el-card>
<p class="grid-content">
<span class="label">{{
item.type == 1
? '整改人:'
: item.type == 2
? '复查人:'
: item.type == 3
? '核验人:'
: '无'
}}</span
><span class="value">{{ item.createUserName }}</span>
</p>
<p class="grid-content" v-if="item.type == 1">
<span class="label">整改状态</span
><span class="value">{{
item.status == 2 ? '已整改' : '未整改'
}}</span>
</p>
<p class="grid-content" v-else-if="item.type == 2">
<span class="label">复查状态</span
><span class="value">{{
item.status == 2 ? '合格' : '不合格'
}}</span>
</p>
<p class="grid-content" v-else>
<span class="label">核验状态</span
><span class="value">{{
item.status == 2 ? '合格' : '不合格'
}}</span>
</p>
<p class="grid-content" v-if="item.status == 1">
<span class="label">驳回说明</span
><span class="value">{{ item.additionalRemarks }}</span>
</p>
<p class="grid-content" v-if="item.status == 2">
<span class="label">补充说明</span
><span class="value">{{ item.additionalRemarks }}</span>
</p>
<div class="grid-content">
<span class="label">{{
item.type == 1
? '整改照片:'
: item.type == 2
? '复查照片:'
: '核验照片:'
}}</span>
<span class="value" style="cursor: pointer;">
<el-image
v-for="(item2, index) in item.fileUrl"
:key="index"
style="
width: 100px;
height: 100px;
margin-right: 10px;
"
:src="item2"
:preview-src-list="item2.fileUrl"
@click="openImg(item2)"
>
</el-image>
</span>
</div>
</el-card>
</el-timeline-item>
</el-timeline>
</div>
</div>
</vue-scroll>
</div>
</el-dialog>
<!-- 视频播放 -->
<el-dialog
class="video"
:modal-append-to-body="false"
:visible.sync="isShow"
@close="closeBtn"
>
<video
v-if="isShow || player"
width="100%"
height="550"
controls
autoplay
style="margin-left: 10px"
>
<source :src="player" type="video/mp4" />
<source :src="player" type="video/mp4" />
<source :src="player" type="video/mp4" />
您的浏览器不支持 video 标签
</video>
</el-dialog>
</div>
</template>
<script>
import {
getInspectionRecordListApi,
getQualityRegionListApi,
getDangerTypeRecordApi,
getSubcontractListApi,
addRecordApi,
getRoutineInspectApi,
selectRectifyRecordListApi,
addQualityRectifyRecordApi
} from '@/assets/js/api/quality.js'
import { getProjectChilderSystemUserListApi } from '@/assets/js/api/configManage.js'
import { VueCropper } from 'vue-cropper'
import {
getSubdivisionProjectApi //所有分部分项工程, 以父子节点形式呈现
} from '@/assets/js/api/quality'
var VUE = null
export default {
components: {
VueCropper
},
data() {
return {
replyData: {
rectifyTime: '',
fileUrl: '',
additionalRemarks: '',
qualityId: '',
},//未整改回复
dialogDetil: false,
detailData: {},
fileListRectification: [],
userIdInfo: '',
//-------
listData: [],
subListData: [],
time: [],
hideUpload: false, //
formInline: {
inspectEndTime: '',
inspectStartTime: '',
recordType: '',
level: '',
status: '',
urgentLevel: '',
regionId: '',
},
type: 'add',
pageNo: 1,
pageSize: 10,
total: 0,
projectSn: this.$store.state.projectSn,
statisticsValue: {
closeNum: 0,
investigateNum: 0,
notCloseNum: 0,
overdueNotCloseNum: 0,
rectificationNum: 0,
reviewNum: 0,
totalNum: 0,
verificationNum: 0,
rectificationRatio: 0,//整改率
completeRatio: 0,//闭合率
},
tableData: [], //列表数据
recordType: 1, //新增数据 1质量问题2排查记录
addDialog: false,
addTitle:
this.$t('message.quality.new') +
this.$t('message.quality.inspectionRecord'),
addForm1: {
regionId: '',
regionName: '',
dangerItemContent: '',
dangerItemId: '',
dangerTypeId: '',
dangerDesc: '',
remark: '',
routineId: 0,
level: 0,
urgentLevel: 0,
inspectManId: '',
inspectTime: '',
enterpriseSn: '',
enterpriseName: '',
changeLimitTime: '',
changeId: '',
reviewId: '',
verifyManId: '',
notifyPerson: [],
status: '',
measurePoints: [],
imageUrl: '',
fileUrl: '',
subsectionId: '', //分部工程
subentryId: '', //分项工程
floor: '', //巡检楼层
addedDescription: '' //问题描述
},
addForm1Rules: this.$t('message.quality.addForm1Rules'),
addForm2: {
regionId: '',
regionName: '',
dangerDesc: '',
routineInspect: 0,
inspectManId: '',
inspectTime: '',
dangerItemContent: '',
dangerItemId: '',
dangerTypeId: '',
enterpriseSn: '',
enterpriseName: '',
imageUrl: '',
fileUrl: '',
subsectionId: '', //分部工程
subentryId: '', //分项工程
floor: '', //巡检楼层
addedDescription: '' //问题描述
},
addForm2Rules: this.$t('message.quality.addForm2Rules'),
checkPointList: [], // 检查部位下拉
checkPointProps: {
value: 'id',
label: 'regionName',
children: 'children',
checkStrictly: true
},
classifyList: [], // 问题描述 问题分类下拉
checkClassifyProps: {
value: 'id',
label: 'dangerName',
children: 'children',
checkStrictly: false
},
crewList: [],
crewUpdateList: [],
routineList: [], //例行检查列表
showEnterpriseDialog: false, // 显示分包选择弹窗
subcontractType: 1, //分包商类型
subcontractList: [], // 分包商列表
uploadUrl: '',
fileUrl: '',
fileList1: [],
fileList2: [],
fileList3: [],
fileList4: [],
dialogImageUrl: '', //查看图片的路径
dialogVisible: false, //查看图片弹窗
showPositioning: false, //图纸定位 弹窗
mapUrl: '', //图纸
pointList: [], //坐标数组
createdCoord: false, //创建坐标
multiples: 1, //图纸大小
floorList: [], //背景图列表
cropperDialog: false, //图片裁剪弹窗
cropperOption: {
outputType: 'png',
img: ''
},
deg: 0,
COMPANY: '',
rectifyRecordList: '', //整改记录
imgList: [],
player: '',
isShow: false,
videoName: '',
unitEnterpriseId: ''
}
},
created() {
this.userIdInfo = this.$store.state.userInfo.userId
console.log('查看当前用户的id', this.userIdInfo);
this.uploadUrl = this.$store.state.UPLOADURL
this.fileUrl = this.$store.state.FILEURL
this.onSubmit()
this.COMPANY = COMPANY
this.getProgressListData()
this.getPositionList()
},
computed: {
isJSON() {
return function (str) {
if (typeof str == 'string') {
try {
var obj = JSON.parse(str)
if (typeof obj == 'object' && obj) {
return true
} else {
return false
}
} catch (e) {
return false
}
}
}
}
},
mounted() { },
methods: {
//关闭视频
closeBtn() {
this.isShow = false
this.player = ''
},
//视频播放
playerVideo(item) {
if (item) {
let index = item.indexOf("*");
let videoUrl = item.substring(index + 1);
console.log('点击', videoUrl);
this.isShow = false
this.$nextTick(() => {
this.player = videoUrl
this.isShow = true
})
} else {
this.$message.error('暂无视频')
}
},
//新版查看详情
newShowDatadetails(item, index) {
this.videoName = item.fileUrl.split('*')[0]
console.log('新版查看详情', item);
this.selectRectifyRecordList(item.id)
this.dialogDetil = true
this.detailData = item
this.replyData = {
rectifyTime: '',
fileUrl: '',
additionalRemarks: '',
}
this.fileListRectification = []
},
//提交整改回复
rectifAdd(valId, statusType, type) {
if (type == 1 && statusType == 2) {
this.replyData.status = 2//整改
this.replyData.type = 1
}
else if (type == 2 && statusType == 3) {
this.replyData.status = 2//复查合格
this.replyData.type = 2
}
else if (type == 3 && statusType == 3) {
this.replyData.status = 1//复查不合格
this.replyData.type = 2
}
else if (type == 2 && statusType == 4) {
this.replyData.status = 2//核验合格
this.replyData.type = 3
}
else if (type == 3 && statusType == 4) {
this.replyData.status = 1//核验不合格
this.replyData.type = 3
}
//待整改提交
if (this.fileListRectification.length > 0) {
let arr = []
this.fileListRectification.forEach(item => {
arr.push(item.name)
})
this.replyData.fileUrl = arr.join(',')
} else {
this.replyData.fileUrl = ""
}
this.replyData.qualityId = valId
this.replyData.createUser = this.userIdInfo
console.log('整改提交的表单数据:::', this.replyData);
addQualityRectifyRecordApi(this.replyData).then(res => {
if (res.code == 200) {
this.$message.success('提交成功')
this.dialogDetil = false
this.onSubmit()
}
})
},
parseImage2(urls) {
let arr = []
if (urls) {
arr = urls.split(',')
}
arr.forEach((element, index) => {
arr[index] = this.$store.state.FILEURL + element
let result = arr[index].substring(0, arr[index].indexOf('*'));
arr[index] = result
})
return arr
},
parseImage(urls) {
let arr = [];
if (typeof urls === 'string') {
arr = urls.split(',');
} else if (Array.isArray(urls)) {
arr = urls;
}
const data = arr.map((item) => {
return this.$store.state.FILEURL + item.trim();
}).filter(Boolean);
return data;
},
checkSubListData(val) {
console.log('一级菜单改动了 ', val)
if (this.recordType == 1) {
this.listData.forEach((value) => {
if (value.id == val) {
this.subListData = value.children
if (value.children.length >= 1) {
this.addForm1.subentryId = value.children[0].id
}
}
})
} else if (this.recordType == 2) {
this.listData.forEach((value) => {
if (value.id == val) {
this.subListData = value.children
if (value.children.length >= 1) {
this.addForm2.subentryId = value.children[0].id
}
}
})
}
},
//获取分部分项工程, 以父子节点形式呈现
getProgressListData() {
let data = {
projectSn: this.projectSn
}
getSubdivisionProjectApi(data).then((res) => {
if (res.code == 200) {
this.listData = res.result
if (this.listData.length >= 1) {
// this.addForm1.subsectionId = this.listData[0].id;//默认选中第一项分部工程
if (this.listData[0].children.length >= 1) {
this.subListData = this.listData[0].children
// this.addForm1.subentryId = this.listData[0].children[0].id//默认选中第一项分项工程
}
}
}
})
},
//导出
exportData() {
if (this.COMPANY == 'zjwj') {
window.location.href =
this.$http.defaults.baseURL +
'xmgl/qualityRectifyRecord/recordRectify/excel/export?projectSn=' +
this.$store.state.projectSn +
'&recordType=' +
this.formInline.recordType +
'&inspectStartTime=' +
this.formInline.inspectStartTime +
'&inspectEndTime=' +
this.formInline.inspectEndTime +
'&level=' +
this.formInline.level +
'&status=' +
this.formInline.status +
'&pageNo=' +
this.pageNo +
'&pageSize=' +
this.pageSize
}
else {
window.location.href =
this.$http.defaults.baseURL +
'xmgl/download/exporExcelQualityInspectionRecord?projectSn=' +
this.$store.state.projectSn +
'&recordType=' +
this.formInline.recordType +
'&inspectStartTime=' +
this.formInline.inspectStartTime +
'&inspectEndTime=' +
this.formInline.inspectEndTime +
'&level=' +
this.formInline.level +
'&status=' +
this.formInline.status +
'&urgentLevel=' +
this.formInline.urgentLevel +
'&pageNo=' +
this.pageNo +
'&pageSize=' +
this.pageSize
}
},
openImg(src) {
window.open(src)
},
focuscascader(e) {
let that = this
console.log(that.classifyList)
if (that.$refs['formRegion2'].getCheckedNodes().length) {
that.classifyList.forEach((item) => {
that.$set(item, 'disabled', true)
// item.disabled = true;
if (item.children) {
item.children.forEach((item2) => {
that.$set(item2, 'disabled', true)
// item2.disabled = true
})
}
})
// this.$refs.formRegion2.panel.lazyLoad();
// this.$refs['formRegion2'].getCheckedNodes()[0].pathNodes.disabled = true;
}
},
blurcascader(e) {
let that = this
console.log(that.classifyList)
if (that.$refs['formRegion2'].getCheckedNodes().length) {
that.classifyList.forEach((item) => {
that.$set(item, 'disabled', false)
// item.disabled = true;
if (item.children) {
item.children.forEach((item2) => {
that.$set(item2, 'disabled', false)
// item2.disabled = true
})
}
})
// this.$refs.formRegion2.panel.lazyLoad();
// this.$refs['formRegion2'].getCheckedNodes()[0].pathNodes.disabled = true;
}
},
selectcascader(e) {
//remark整改要求 level等级
if (e.length) {
console.log(this.$refs['formRegion2'].getCheckedNodes()[0].data)
this.addForm1.level =
this.$refs['formRegion2'].getCheckedNodes()[0].data.level
this.addForm1.remark =
this.$refs['formRegion2'].getCheckedNodes()[0].data.remark
} else {
this.addForm1.level = ''
this.addForm1.remark = ''
}
},
changeRegion(val) {
// console.log(val,this.checkPointList,this.$refs['formRegion1'].getCheckedNodes()[0])
if (this.recordType == 1) {
let pathLabels =
this.$refs['formRegion1'].getCheckedNodes()[0].pathLabels
let data = this.$refs['formRegion1'].getCheckedNodes()[0].data
// console.log(pathLabels,data)
let text = ''
for (let i = 0; i < pathLabels.length; i++) {
if (text) {
text = text + '/' + pathLabels[i]
} else {
text = pathLabels[i]
}
}
if (data.dutyId) {
this.addForm1.changeId = data.dutyId
console.log(' this.addForm1.changeId================', this.addForm1.changeId);
} else {
this.addForm1.changeId = ''
}
this.addForm1.regionName = text
// console.log(data.intendanceIds.split(','))
// console.log(text)
if (data.intendanceIds.split(',') > 0) {
for (let j = 0; j < data.intendanceIds.split(',').length; j++) {
if (this.addForm1.notifyPerson > 0) {
this.addForm1.notifyPerson = []
}
this.addForm1.notifyPerson.push(
Number(data.intendanceIds.split(',')[j])
)
}
}
this.addForm1.notifyPerson = data.intendanceIds ? data.intendanceIds.split(',') : []
console.log(' this.addForm1.notifyPerson================', this.addForm1.notifyPerson);
this.subcontractList = data.enterpriseInfos;
this.crewUpdateList = data.systemUsers;
} else if (this.recordType == 2) {
let pathLabels =
this.$refs['addFormRegion2'].getCheckedNodes()[0].pathLabels
let data = this.$refs['addFormRegion2'].getCheckedNodes()[0].data
let text = ''
for (let i = 0; i < pathLabels.length; i++) {
if (text) {
text = text + '/' + pathLabels[i]
} else {
text = pathLabels[i]
}
}
// if (data.dutyId) {
// this.addForm2.changeId = Number(data.dutyId)
// }
this.addForm2.regionName = text
}
this.addForm1.inspectManId = this.checkPointList
},
// 切换检查时间
checkedTime(time) {
if (time != null) {
this.formInline.inspectStartTime = time[0]
this.formInline.inspectEndTime = time[1]
} else {
this.formInline.inspectStartTime = ''
this.formInline.inspectEndTime = ''
}
},
//整改记录
selectRectifyRecordList(id) {
selectRectifyRecordListApi({
qualityId: id
}).then((res) => {
this.rectifyRecordList = res.result
this.rectifyRecordList.forEach((item) => {
if (item.fileUrl) {
this.imgList = [];
if (item.fileUrl.startsWith('[') && item.fileUrl.endsWith(']')) {
let fileListI = JSON.parse(item.fileUrl);
fileListI.forEach((file) => {
let url = file.url;
if (!url.startsWith('http://')) {
url = this.fileUrl + url;
}
this.imgList.push(url);
});
} else {
let fileListI = item.fileUrl.split(',');
fileListI.forEach((url) => {
if (!url.startsWith('http://')) {
url = this.fileUrl + url;
}
this.imgList.push(url);
});
}
item.fileUrl = this.imgList;
} else {
item.fileUrl = [];
}
});
console.log('整改记录-处理后--', this.rectifyRecordList)
})
},
//原版查看详情
showDatadetails(val) {
console.log('查看详情====', val)
this.selectRectifyRecordList(val.id)
this.hideUpload = true
this.addBtn(1)
if (val.recordType == 1) {
console.log('类型是1吗');
this.recordType = 1
val.urgentLevel = Number(val.urgentLevel)
// val.notifyPerson = [Number(val.notifyPerson)];
let arr = val.imageUrl.split(',')
let fileArr = val.fileUrl.split(',')
let showImgUrl = []
let showFileUrl = []
for (let i = 0; i < arr.length; i++) {
let imgArr = arr[i].split('*')
let obj = { name: imgArr[0], url: imgArr[1] }
showImgUrl.push(obj)
}
for (let i = 0; i < fileArr.length; i++) {
let file = fileArr[i].split('*')
let obj = { name: file[0], url: file[1] }
showFileUrl.push(obj)
}
showFileUrl = showFileUrl.filter((item) => {
return item.url != undefined
})
showImgUrl = showImgUrl.filter((item) => {
return item.url != undefined
})
this.fileList1 = showImgUrl
this.fileList2 = showFileUrl
this.addForm1 = JSON.parse(JSON.stringify(val))
this.addForm1.notifyPerson = val.notifyPerson
.split(',')
.map((item2) => String(item2))
} else {
this.recordType = 2
val.urgentLevel = Number(val.urgentLevel)
// val.notifyPerson = [Number(val.notifyPerson)];
let arr = val.imageUrl.split(',')
let fileArr = val.fileUrl.split(',')
let showImgUrl = []
let showFileUrl = []
for (let i = 0; i < arr.length; i++) {
let imgArr = arr[i].split('*')
let obj = { name: imgArr[0], url: imgArr[1] }
showImgUrl.push(obj)
}
for (let i = 0; i < fileArr.length; i++) {
let file = fileArr[i].split('*')
let obj = { name: file[0], url: file[1] }
showFileUrl.push(obj)
}
showFileUrl = showFileUrl.filter((item) => {
return item.url != undefined
})
showImgUrl = showImgUrl.filter((item) => {
return item.url != undefined
})
this.fileList3 = showImgUrl
this.fileList4 = showFileUrl
this.addForm2 = val
this.addForm2.notifyPerson = val.notifyPerson
.split(',')
.map((item) => Number(item))
}
},
//刷新按钮
refreshBtn() {
this.time = []
this.formInline = {
inspectEndTime: '',
inspectStartTime: '',
recordType: '',
level: '',
status: '',
urgentLevel: '',
regionId: '',
}
this.pageNo = 1
this.pageSize = 10
this.onSubmit()
},
//查询按钮 分页列表查询
onSubmit() {
let data = this.formInline
data.projectSn = this.projectSn
data.pageNo = this.pageNo
data.pageSize = this.pageSize
getInspectionRecordListApi(data).then((res) => {
console.log('res----', res);
if (res.code == 200) {
this.statisticsValue = res.result.total
this.tableData = res.result.page.records
this.total = res.result.page.total
}
})
},
//新增按钮
addBtn(type) {
console.log(type)
if (type == 1) {
this.type = 'detail'
this.addTitle =
this.$t('message.quality.inspectionRecord') +
this.$t('message.quality.detail')
} else {
this.type = 'add'
this.addTitle =
this.$t('message.quality.new') +
this.$t('message.quality.inspectionRecord')
this.fileList1 = []
this.fileList3 = []
}
this.addDialog = true
this.getPositionList()
this.getDescribeClassifyList()
this.getPeopleList()
// this.getPeopleUpdateList();
this.getRoutineInspect()
this.close()
this.rectifyRecordList = []
},
//获取新增弹窗-- 检查部位下拉
getPositionList() {
let data = {
projectSn: this.projectSn
}
getQualityRegionListApi(data).then((res) => {
console.log('res=================', res);
if (res.code == 200) {
this.checkPointList = res.result
}
})
},
// 例行检查 列表
getRoutineInspect() {
let data = {
projectSn: this.projectSn
}
getRoutineInspectApi(data).then((res) => {
if (res.code == 200) {
this.routineList = res.result
}
})
},
//获取问题描述 和 问题分类 下拉列表
getDescribeClassifyList() {
let data = {
projectSn: this.projectSn,
recordStatus: 0,
}
getDangerTypeRecordApi(data).then((res) => {
if (res.code == 200) {
console.log(res)
this.classifyList = res.result
this.classifyList.forEach((item) => {
// item.disabled = true;
if (item.children) {
item.children.forEach((item2) => {
// item2.disabled = true;
// console.log(item2);
if (item2.itemList) {
item2.itemList.forEach((item3) => {
item3.dangerName = item3.content
// console.log(item.content);
})
}
item2.children = item2.itemList
})
// console.log();
// console.log(item.children);
}
})
}
})
},
//获取去整改人 通知人 检查人 核查人下拉
getPeopleList() {
let data = {
projectSn: this.projectSn
}
getProjectChilderSystemUserListApi(data).then((res) => {
if (res.code == 200) {
this.crewList = res.result
}
})
},
//获取整改人
getPeopleUpdateList() {
let data = {
projectSn: this.projectSn,
enterpriseId: this.unitEnterpriseId
}
getProjectChilderSystemUserListApi(data).then((res) => {
if (res.code == 200) {
this.crewUpdateList = res.result
}
})
},
//获取问题描述
handleChange(value) {
if (value.length) {
console.log(value, this.addForm2.dangerItemId)
let pathLabels = this.$refs['cascaderAddr'].getCheckedNodes()
let pathLabels2 = this.$refs['cascaderAddr2'].getCheckedNodes()
// for (let i = 0; i < pathLabels[0].pathNodes.length - 1; i++) {
// // pathLabels[0].pathNodes[i].disabled = true;
// }
if (this.recordType == 1 && pathLabels.length > 0) {
//只有问题描述有三级时才查询问题等级
if (this.$refs['cascaderAddr'].getCheckedNodes()[0].pathLabels.length >= 3) {
this.addForm1.level =
this.$refs['cascaderAddr'].getCheckedNodes()[0].data.level
} else {
this.addForm1.level = ''
}
this.addForm1.remark =
this.$refs['cascaderAddr'].getCheckedNodes()[0].data.remark
this.addForm1.dangerItemContent = pathLabels[0].pathLabels
.map((item) => {
console.log(pathLabels)
console.log(item, 1632)
return item
})
.join('/')
// pathLabels[0].pathLabels[0] +
// pathLabels[0].pathLabels[1] +
// pathLabels[0].pathLabels[2];
} else {
// this.addForm2.level =
// this.$refs['cascaderAddr2'].getCheckedNodes()[0].data.level
this.addForm2.remark =
this.$refs['cascaderAddr2'].getCheckedNodes()[0].data.remark
this.addForm2.dangerItemContent = pathLabels2[0].pathLabels
.map((item) => {
console.log(item, 1640)
return item
})
.join('/')
console.log('获取问题进来了吗-2', this.addForm2.dangerItemContent);
// pathLabels2[0].pathLabels[0] +
// pathLabels2[0].pathLabels[1] +
// pathLabels2[0].pathLabels[2];
}
} else {
this.addForm1.level = ''
this.addForm1.remark = ''
}
},
//获取分包单位
getEnterprise(type) {
if (type != 1) {
this.showEnterpriseDialog = true
}
// let data = {
// // enterpriseTypeId: this.subcontractType,
// pageNo: 1,
// pageSize: 999,
// projectSn: this.projectSn
// }
// getSubcontractListApi(data).then((res) => {
// if (res.code == 200) {
// this.subcontractList = res.result.records
// }
// })
},
//切换分包公司类型
changeSubcontractType(val) {
this.subcontractType = val
this.getEnterprise(1)
},
//选中的分包公司
checkedSubcontractList(val) {
if (this.recordType == 1) {
this.addForm1.enterpriseSn = val.enterpriseSn
this.addForm1.enterpriseName = val.enterpriseName
this.unitEnterpriseId = val.id
} else {
this.addForm2.enterpriseSn = val.enterpriseSn
this.addForm2.enterpriseName = val.enterpriseName
this.unitEnterpriseId = val.id
}
this.addForm1.changeId = "";
this.getPeopleList();
// this.getPeopleUpdateList();
this.showEnterpriseDialog = false
},
beforeUpload(file, type) {
if (type == 2 || type == 4) {
const fileType = file.type
const fileTypeList = ['audio/mp3', 'video/mp4']
if (!fileTypeList.includes(fileType)) {
this.$message.error('只能上传MP3/MP4文件')
return false
}
return true
}
},
//上传成功
handleSuccess(file, type) {
if (type == 1) {
let data = {
name: file.data[0].filename,
url: this.fileUrl + file.data[0].imageUrl
}
if (this.fileList1.length >= 4) {
this.$message.warning('最多只能上传5张图片')
return false
} else {
this.fileList1.push(data)
}
} else if (type == 2) {
let data = {
name: file.data[0].fileInfo.originalFilename,
url: this.fileUrl + file.data[0].imageUrl
}
this.fileList2.push(data)
} else if (type == 3) {
let data = {
name: file.data[0].filename,
url: this.fileUrl + file.data[0].imageUrl
}
if (this.fileList3.length >= 4) {
this.$message.warning('最多只能上传5张图片')
return false
} else {
this.fileList3.push(data)
}
}
else if (type == 4) {
let data = {
name: file.data[0].fileInfo.originalFilename,
url: this.fileUrl + file.data[0].imageUrl
}
this.fileList4.push(data)
}
else if (type == 5) {
let data = {
name: file.data[0].filename,
url: this.fileUrl + file.data[0].imageUrl
}
this.fileListRectification.push(data)
}
},
//上传失败
handleError(file) {
this.$message.error(this.$t('message.quality.failToUpload'))
},
//查看图片
handlePreview(file) {
this.dialogImageUrl = file.url
var filename = file.name
var index1 = filename.lastIndexOf('.')
var index2 = filename.length
var type = filename.substring(index1, index2)
console.log(type)
if (type == '.mp4' || type == '.mp3') {
// window.open(file.url)
} else {
this.dialogVisible = true
}
},
//删除图片
handleRemove(file, fileList, type) {
if (type == 1) {
this.fileList1 = fileList
} else if (type == 2) {
this.fileList2 = fileList
} else if (type == 3) {
this.fileList3 = fileList
}
else if (type == 4) {
this.fileList4 = fileList
}
else if (type == 5) {
this.fileListRectification = fileList
}
},
//在图纸定位弹窗
drawingPositionBtn() {
this.showPositioning = true
},
//上传图纸
uploadMapSuccess(res) {
this.cropperOption.img = this.$store.state.FILEURL + res.data[0].imageUrl
this.cropperDialog = true
},
//获取鼠标位置
getMousePos(event) {
var e = event || window.event
var scrollX =
document.documentElement.scrollLeft || document.body.scrollLeft
var scrollY =
document.documentElement.scrollTop || document.body.scrollTop
var x = e.pageX || e.clientX + scrollX
var y = e.pageY || e.clientY + scrollY
// console.log("x: " + x + "\ny: " + y);
// console.log(this);
return { x: x, y: y }
},
//新增坐标数据
addPoint(event) {
if (this.createdCoord) {
let clickPoint = this.getMousePos(event) // 获取鼠标的位置
let left = event.target.getBoundingClientRect().left //获取点击元素的位置
let top = event.target.getBoundingClientRect().top
let data = {
coordinateX: clickPoint.x - left - 6,
coordinateY: clickPoint.y - top - 9
}
this.pointList.push(data)
}
},
// 放大
magnify() {
if (this.multiples >= 3) {
return
}
this.multiples += 0.25
},
// 缩小
shrink() {
if (this.multiples <= 0.5) {
return
}
this.multiples -= 0.25
},
// 旋转
rotate() {
this.deg += 90
if (this.deg >= 360) {
this.deg = 0
}
},
// 保存 裁剪后的 地图
saveMapUrlFn() {
this.$refs.cropper.startCrop()
var _this = this
this.$refs.cropper.getCropBlob((data) => {
var param = new FormData()
param.append('files', data, 'image.png')
_this.$http
.post('/upload/image', param, {
headers: {
'Content-Type': 'multipart/form-data'
}
})
.then((res) => {
if (res.data.status == 'SUCCESS') {
console.log(_this.$store.state.FILEURL)
console.log(res.data)
_this.mapUrl =
_this.$store.state.FILEURL + res.data.data[0].imageUrl
_this.cropperDialog = false
console.log(_this.$store.state.FILEURL, res.data.data)
_this.$nextTick(() => {
var oImg = document.getElementById('map'),
w,
h
if (oImg.naturalWidth) {
oImg.onload = function () {
w = oImg.naturalWidth
h = oImg.naturalHeight
}
} else {
// IE 6/7/8
var nImg = new Image()
nImg.onload = function () {
w = nImg.width
h = nImg.height
}
nImg.src = oImg.src
}
})
}
})
})
},
//上传前
beforeAvatarUpload(file) { },
editPoint(item) { },
//删除坐标
removePoint(item, index) {
let arr = JSON.parse(JSON.stringify(this.pointList))
for (let i = 0; i < arr.length; i++) {
if (
item.coordinateX == arr[i].coordinateX &&
item.coordinateY == arr[i].coordinateY
) {
arr.splice(i, 1)
}
}
this.pointList = arr
},
//保存坐标
savePointBtn() {
this.showPositioning = false
this.createdCoord = false
},
// 取消新增
cancleEvent() {
this.mapUrl = ''
this.addDialog = false
this.$refs.addForm1.resetFields() //清除所有验证
this.$refs.addForm2.resetFields() //清除所有验证
},
//提交 新增
submitAddRecordFrom() {
let newRefs = null
if (this.recordType == 1) {
newRefs = 'addForm1'
} else if (this.recordType == 2) {
newRefs = 'addForm2'
}
console.log(this.addForm1)
console.log(this.addForm2)
this.$refs[newRefs].validate((valid) => {
if (valid) {
let data = {}
if (this.recordType == 1) {
data = JSON.parse(JSON.stringify(this.addForm1))
data.regionId =
this.addForm1.regionId.length > 1
? this.addForm1.regionId[this.addForm1.regionId.length - 1]
: this.addForm1.regionId[0]
data.dangerItemId =
this.addForm1.dangerItemId[this.addForm1.dangerItemId.length - 1]
data.dangerTypeId = this.addForm1.dangerItemId[0]
let pointArr = []
for (let i = 0; i < this.pointList.length; i++) {
let obj =
this.pointList[i].coordinateX +
'*' +
this.pointList[i].coordinateY
pointArr.push(obj)
}
let imgUrl = []
let fileUrl = []
for (let i = 0; i < this.fileList1.length; i++) {
let obj = this.fileList1[i].name + '*' + this.fileList1[i].url
imgUrl.push(obj)
}
for (let i = 0; i < this.fileList2.length; i++) {
let obj = this.fileList2[i].name + '*' + this.fileList2[i].url
fileUrl.push(obj)
}
data.measurePoints = pointArr.join(',')
console.log('data.measurePoints=============', data.measurePoints);
data.notifyPerson = this.addForm1.notifyPerson.join(',')
data.imageUrl = imgUrl.join(',')
data.fileUrl = fileUrl.join(',')
} else {
data = JSON.parse(JSON.stringify(this.addForm2))
data.regionId =
this.addForm2.regionId.length > 1
? this.addForm2.regionId[this.addForm2.regionId.length - 1]
: this.addForm2.regionId[0]
data.dangerItemId =
this.addForm2.dangerItemId[this.addForm2.dangerItemId.length - 1]
data.dangerTypeId = this.addForm2.dangerItemId[0]
// data.regionId = this.addForm2.regionId
// ? this.addForm2.regionId.pop()
// : "";
// data.dangerItemId = this.addForm2.dangerItemId
// ? this.addForm1.dangerItemId.pop()
// : "";
let imgUrl = []
let fileUrl = []
for (let i = 0; i < this.fileList3.length; i++) {
let obj = this.fileList3[i].name + '*' + this.fileList3[i].url
imgUrl.push(obj)
}
for (let i = 0; i < this.fileList4.length; i++) {
let obj = this.fileList4[i].name + '*' + this.fileList4[i].url
fileUrl.push(obj)
}
data.imageUrl = imgUrl.join(',')
data.fileUrl = fileUrl.join(',')
}
data.recordType = this.recordType
data.projectSn = this.projectSn
console.log('data', data)
data.inspectManId = this.$store.state.userInfo.userId
addRecordApi(data).then((res) => {
if (res.code == 200) {
this.$message.success(this.$t('message.quality.newSuccess'))
this.$refs.addForm1.resetFields() //清除所有验证
this.$refs.addForm2.resetFields() //清除所有验证
// this.$refs["addForm1"].resetFields();
// this.$refs["addForm2"].resetFields();
this.addDialog = false
this.fileList1 = []
this.fileList2 = []
this.fileList3 = []
this.fileList4 = []
this.pointList = []
this.recordType = 1
this.mapUrl = ''
this.pageNo = 1
this.onSubmit()
}
})
} else {
console.log('error submit!!')
return false
}
})
},
handleSizeChange(val) {
this.pageSize = val
this.onSubmit()
},
handleCurrentChange(val) {
this.pageNo = val
this.onSubmit()
},
close() {
// this.mapUrl = ''
this.fileList1 = []
this.fileList2 = []
this.fileList3 = []
this.fileList4 = []
this.$refs.addForm1.resetFields() //清除所有验证
this.$refs.addForm2.resetFields() //清除所有验证
this.hideUpload = false
if (this.recordType == 1) {
this.addForm1 = {
regionId: '',
regionName: '',
dangerItemContent: '',
dangerItemId: '',
dangerTypeId: '',
dangerDesc: '',
remark: '',
routineId: 0,
level: 0,
urgentLevel: 0,
inspectManId: '',
inspectTime: '',
enterpriseSn: '',
enterpriseName: '',
changeLimitTime: '',
changeId: '',
reviewId: '',
verifyManId: '',
notifyPerson: [],
status: 2,
measurePoints: [],
imageUrl: '',
fileUrl: '',
subsectionId: '',
subentryId: '',
}
} else {
this.addForm2 = {
regionId: '',
regionName: '',
dangerDesc: '',
routineInspect: 0,
inspectManId: '',
inspectTime: '',
dangerItemContent: '',
dangerItemId: '',
dangerTypeId: '',
enterpriseSn: '',
enterpriseName: '',
imageUrl: '',
fileUrl: '',
subsectionId: '',
subentryId: '',
}
}
},
submit() { },
handleExceed() { }
}
}
</script>
<style lang="less" scoped>
/deep/ .hide .el-upload--picture-card {
display: none;
}
.inspectionRecord {
box-sizing: border-box;
padding: 16px 20px;
height: 100%;
background: #fff;
}
.statistics {
width: 100%;
padding: 0 0 20px 0;
font-weight: 600;
font-size: 13px;
.value {
color: rgb(64, 158, 255);
margin-right: 20px;
}
}
.closeBtn {
position: absolute;
top: 1%;
color: #fff;
left: 98%;
font-size: 20px;
cursor: pointer;
}
// .title {
// border-bottom: 1px solid rgba(220, 230, 253, 1);
// color: @--color-primary;
// padding-left: 24px;
// font-size: 14px;
// span {
// position: relative;
// padding: 16px 0 5px;
// display: inline-block;
// &::before {
// content: '';
// position: absolute;
// bottom: -1px;
// left: 0;
// width: 100%;
// height: 2px;
// background-color: @--color-primary;
// z-index: 2;
// }
// }
// }
// .right {
// width: calc(100% - 222px);
// margin-left: 10px;
// }
.flex {
display: flex;
align-items: center;
justify-content: space-between;
}
.flex2 {
display: flex;
align-items: center;
}
.list_content {
padding: 10px 0;
height: calc(100% - 87px - 20px);
position: relative;
}
.content_data {
padding: 0 20px;
box-sizing: border-box;
height: 43px;
line-height: 43px;
cursor: pointer;
position: relative;
&.active {
background-color: rgba(81, 129, 246, 0.1);
&::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 4px;
height: 100%;
background-color: @--color-primary;
border-radius: 2px;
}
}
}
.mapContainer {
height: calc(100% - 133px - 40px);
padding: 20px;
position: relative;
.infoDetail {
font-size: 14px;
margin-bottom: 24px;
span:first-child {
margin-right: 165px;
display: inline-block;
}
.uploadBtn {
float: right;
margin-top: -25px;
}
}
.mapBox {
border: 1px solid rgba(151, 151, 151, 0.5);
height: calc(100% - 40px);
position: relative;
overflow: auto;
}
.mapContent {
position: relative;
height: 480px;
// left: 0;
// top: 0;
// z-index: 3;
}
// .mapContent2{
// position: relative;
// }
.personBox {
position: absolute;
transition: 0.2s all;
img {
cursor: pointer;
}
.redText {
margin-left: 20px;
display: inline-block;
}
}
}
.devDetail {
p {
margin-bottom: 10px;
.primaryText {
margin-right: 20px;
display: inline-block;
}
&:last-child {
margin-bottom: 0;
}
}
}
.operateBox {
// margin-bottom: 10px;
position: absolute;
right: 112px;
top: -9px;
img {
margin-right: 20px;
cursor: pointer;
}
}
.operateList {
font-size: 12px;
li {
cursor: pointer;
display: flex;
align-items: center;
margin-bottom: 10px;
justify-content: center;
img {
margin-right: 10px;
}
&.last {
margin-bottom: 0;
}
}
}
.map {
cursor: pointer;
}
// /deep/.el-select{
// input{
// height: auto !important;
// }
// }
.el-cascader-node {
max-width: 250px;
}
.detailBox {
.grid-content {
overflow: hidden;
margin-bottom: 10px;
.label {
float: left;
width: 80px;
text-align: right;
}
.value {
float: left;
width: calc(80% - 80px);
margin-left: 10px;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
}
}
.btn-box {
height: 50px;
margin-top: 30px;
display: flex;
justify-content: space-around;
align-items: center;
}
.tableStatus {
width: 55px;
height: 25px;
display: inline-block;
background: red;
color: #fff;
line-height: 25px;
border-radius: 5px;
position: absolute;
top: 18%;
left: 65%;
}
.radiusD {
display: inline-block;
width: 6px;
height: 6px;
border-radius: 10px;
margin-top: 3px;
margin: 2px 0px;
}
.headerLeft {
height: 30px;
background: #ededed;
font-size: 14px;
color: #616266;
line-height: 30px;
padding: 0 10px;
margin-bottom: 20px;
}
.textSty {
width: 190px;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
</style>