|
@@ -0,0 +1,929 @@
|
|
|
+<!--
|
|
|
+ *@description: 工业工程
|
|
|
+ *@author: yh Fu
|
|
|
+ *@date: 2024-01-02 15:51:03
|
|
|
+ *@version: V1.0.5
|
|
|
+ -->
|
|
|
+
|
|
|
+<template>
|
|
|
+ <div class="app-container">
|
|
|
+ <el-form :model="searchParams" ref="searchParams" size="small" :inline="true" v-show="showSearch"
|
|
|
+ label-width="110px">
|
|
|
+ <el-form-item label="工程类型" prop="enginType">
|
|
|
+ <el-select v-model="searchParams.enginType" placeholder="请选择工程类型" clearable>
|
|
|
+ <el-option
|
|
|
+ v-for="dict in EngineepipeType"
|
|
|
+ :key="dict.value"
|
|
|
+ :label="dict.label"
|
|
|
+ :value="dict.value"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="工程名称" prop="enginName">
|
|
|
+ <el-input v-model="searchParams.enginName" placeholder="请输入建筑工程名称" maxlength="20"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="工程分类" prop="enginClassification" v-if="engineeType">
|
|
|
+ <el-select v-model="searchParams.enginClassification" placeholder="请选择工程分类">
|
|
|
+ <el-option
|
|
|
+ v-for="e in dict.type.engin_classification"
|
|
|
+ :key="e.value"
|
|
|
+ :label="e.label"
|
|
|
+ :value="e.value"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item>
|
|
|
+ <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
|
+ <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+
|
|
|
+ <el-row :gutter="10" class="mb8">
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ plain
|
|
|
+ icon="el-icon-plus"
|
|
|
+ size="mini"
|
|
|
+ @click="handleAdd"
|
|
|
+ v-hasPermi="['zdsz:engineeringIndustry:add']"
|
|
|
+ >新增
|
|
|
+ </el-button>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button
|
|
|
+ type="success"
|
|
|
+ plain
|
|
|
+ icon="el-icon-edit"
|
|
|
+ size="mini"
|
|
|
+ :disabled="single"
|
|
|
+ @click="handleUpdate"
|
|
|
+ v-hasPermi="['zdsz:engineeringIndustry:edit']"
|
|
|
+ >修改
|
|
|
+ </el-button>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button
|
|
|
+ type="danger"
|
|
|
+ plain
|
|
|
+ icon="el-icon-delete"
|
|
|
+ size="mini"
|
|
|
+ :disabled="multiple"
|
|
|
+ @click="handleDelete"
|
|
|
+ v-hasPermi="['zdsz:engineeringIndustry:remove']"
|
|
|
+ >删除
|
|
|
+ </el-button>
|
|
|
+ </el-col>
|
|
|
+ <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <el-table v-loading="loading" :data="comprehensiveList" @selection-change="handleSelectionChange">
|
|
|
+ <el-table-column type="selection" width="55" align="center"/>
|
|
|
+ <el-table-column label="工程名称" align="center" prop="enginName"/>
|
|
|
+ <!--<el-table-column label="工程类型" align="center" prop="enginType"/>-->
|
|
|
+ <!--<el-table-column label="工程分类" align="center" prop="enginClassification"/>-->
|
|
|
+ <!--<el-table-column label="现场负责人" align="center" prop="sceneHead"/>-->
|
|
|
+ <!--<el-table-column label="设计负责人" align="center" prop="designHead"/>-->
|
|
|
+ <!--<el-table-column label="监理负责人" align="center" prop="supervisionHead"/>-->
|
|
|
+ <!--<el-table-column label="监理单位" align="center" prop="supervisionUnit"/>-->
|
|
|
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
|
|
+ <template v-slot="scope">
|
|
|
+ <el-button
|
|
|
+ size="mini"
|
|
|
+ type="text"
|
|
|
+ icon="el-icon-edit"
|
|
|
+ @click="handleUpdate(scope.row)"
|
|
|
+ v-hasPermi="['zdsz:engineeringIndustry:edit']"
|
|
|
+ >修改
|
|
|
+ </el-button>
|
|
|
+ <el-button
|
|
|
+ type="text"
|
|
|
+ icon="el-icon-edit"
|
|
|
+ size="mini"
|
|
|
+ v-hasPermi="['zdsz:engineeringIndustry:edit']"
|
|
|
+ @click="updateviewSource(scope.row)"
|
|
|
+ >修改施工信息
|
|
|
+ </el-button>
|
|
|
+ <el-button type="text"
|
|
|
+ icon="el-icon-edit"
|
|
|
+ size="mini"
|
|
|
+ v-hasPermi="['zdsz:engineeringIndustry:add']"
|
|
|
+ @click="addzEngineeringMaterBo(scope.row)"
|
|
|
+ >添加用料
|
|
|
+ </el-button>
|
|
|
+ <el-button
|
|
|
+ size="mini"
|
|
|
+ type="text"
|
|
|
+ icon="el-icon-edit"
|
|
|
+ v-hasPermi="['zdsz:engineeringPipeJacking:add']"
|
|
|
+ @click="addNewPipe(scope.row)"
|
|
|
+ >新增顶管工程
|
|
|
+ </el-button>
|
|
|
+ <el-button
|
|
|
+ type="text"
|
|
|
+ icon="el-icon-edit"
|
|
|
+ size="mini"
|
|
|
+ v-hasPermi="['zdsz:engineeringIndustry:query']"
|
|
|
+ @click="viewSource(scope.row)"
|
|
|
+ >历史施工
|
|
|
+ </el-button>
|
|
|
+ <el-button
|
|
|
+ size="mini"
|
|
|
+ type="text"
|
|
|
+ icon="el-icon-delete"
|
|
|
+ @click="handleDelete(scope.row)"
|
|
|
+ v-hasPermi="['zdsz:engineeringIndustry:remove']"
|
|
|
+ >删除
|
|
|
+ </el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+
|
|
|
+ <pagination
|
|
|
+ v-show="total>0"
|
|
|
+ :total="total"
|
|
|
+ :page.sync="searchParams.pageNum"
|
|
|
+ :limit.sync="searchParams.pageSize"
|
|
|
+ @pagination="getList"
|
|
|
+ />
|
|
|
+ <!-- 顶管工程新增 -->
|
|
|
+ <EngineePipe ref="enginPipe"/>
|
|
|
+ <!-- 添加或修改市政工程|工业工程对话框 -->
|
|
|
+ <el-dialog :title="title" :visible.sync="open" append-to-body customClass="appendElDialog">
|
|
|
+ <el-form ref="form" :model="form" :rules="rules" label-width="110px">
|
|
|
+ <el-form-item label="工程名称" prop="enginName">
|
|
|
+ <el-input v-model="form.enginName" placeholder="请填写工程名称" maxlength="60"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <!--<el-form-item label="建筑单位" prop="constructUnit">-->
|
|
|
+ <!--<el-input v-model="form.constructUnit" placeholder="请填写建筑单位" maxlength="50"></el-input>-->
|
|
|
+ <!--</el-form-item>-->
|
|
|
+ <!--<el-form-item label="项目负责人" prop="projectHead">-->
|
|
|
+ <!--<el-input v-model="form.projectHead" placeholder="请填写项目负责人" maxlength="20"></el-input>-->
|
|
|
+ <!--</el-form-item>-->
|
|
|
+ <!--<el-form-item label="现场负责人" prop="sceneHead">-->
|
|
|
+ <!--<el-input v-model="form.sceneHead" placeholder="请填写现场负责人" maxlength="20"></el-input>-->
|
|
|
+ <!--</el-form-item>-->
|
|
|
+ <!--<el-form-item label="设计单位" prop="designUnit">-->
|
|
|
+ <!--<el-input v-model="form.designUnit" placeholder="请填写设计单位" maxlength="50"></el-input>-->
|
|
|
+ <!--</el-form-item>-->
|
|
|
+ <!--<el-form-item label="设计负责人" prop="designHead">-->
|
|
|
+ <!--<el-input v-model="form.designHead" placeholder="请填写现场负责人" maxlength="20"></el-input>-->
|
|
|
+ <!--</el-form-item>-->
|
|
|
+ <!--<el-form-item label="设计联系方式" prop="designPhone">-->
|
|
|
+ <!--<el-input v-model="form.designPhone" placeholder="请填写设计联系方式" maxlength="13"></el-input>-->
|
|
|
+ <!--</el-form-item>-->
|
|
|
+ <!--<el-form-item label="监理单位" prop="supervisionUnit">-->
|
|
|
+ <!--<el-input v-model="form.supervisionUnit" placeholder="请填写监理单位" maxlength="50"/>-->
|
|
|
+ <!--</el-form-item>-->
|
|
|
+ <!--<el-form-item label="监理负责人" prop="supervisionHead">-->
|
|
|
+ <!--<el-input v-model="form.supervisionHead" placeholder="请填写监理负责人" maxlength="20"></el-input>-->
|
|
|
+ <!--</el-form-item>-->
|
|
|
+ <!--<el-form-item label="监理联系电话" prop="supervisionPhone">-->
|
|
|
+ <!--<el-input v-model="form.supervisionPhone" placeholder="请填写监理联系电话" maxlength="13"></el-input>-->
|
|
|
+ <!--</el-form-item>-->
|
|
|
+ <!--<el-form-item label="工程类型" prop="enginType">-->
|
|
|
+ <!--<el-select v-model="form.enginType" placeholder="请选择工程类型" style="width: 100%">-->
|
|
|
+ <!--<el-option-->
|
|
|
+ <!--v-for="e in EngineepipeType"-->
|
|
|
+ <!--:key="e.value"-->
|
|
|
+ <!--:label="e.label"-->
|
|
|
+ <!--:value="e.value"-->
|
|
|
+ <!--></el-option>-->
|
|
|
+ <!--</el-select>-->
|
|
|
+ <!--</el-form-item>-->
|
|
|
+ <!--<el-form-item label="工程分类" prop="enginClassification" v-if="form.type === '1'">-->
|
|
|
+ <!--<el-select v-model="form.enginClassification" placeholder="请选择工程分类" multiple style="width: 100%">-->
|
|
|
+ <!--<el-option-->
|
|
|
+ <!--v-for="e in dict.type.engin_classification"-->
|
|
|
+ <!--:key="e.value"-->
|
|
|
+ <!--:label="e.label"-->
|
|
|
+ <!--:value="e.value"-->
|
|
|
+ <!--></el-option>-->
|
|
|
+ <!--</el-select>-->
|
|
|
+ <!--</el-form-item>-->
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="附件" v-if="form.id" style="width: 100%">
|
|
|
+ <ObsFileUpload ref="obsFileUpload" :file-size="100"
|
|
|
+ :file-type="['dwg','dwt','doc','docx','xls','xlsx','png', 'jpg', 'jpeg','mp4']"
|
|
|
+ :limit="9999"
|
|
|
+ :value="form.pics"
|
|
|
+ @input="filesUpload"
|
|
|
+ ></ObsFileUpload>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="附件" v-else style="width: 100%">
|
|
|
+ <ObsFileUpload ref="obsFileUpload" :file-size="100"
|
|
|
+ :file-type="['dwg','dwt','doc','docx','xls','xlsx','png', 'jpg', 'jpeg','mp4']"
|
|
|
+ :limit="9999"
|
|
|
+ :value="form.files"
|
|
|
+ @input="filesUpload"
|
|
|
+ ></ObsFileUpload>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <div style="width: 25%; float: right">
|
|
|
+ <el-button :loading="buttonLoading" type="primary" @click="submitForm">提交</el-button>
|
|
|
+ <el-button @click="cancel">取 消</el-button>
|
|
|
+ </div>
|
|
|
+ </el-form>
|
|
|
+ </el-dialog>
|
|
|
+ <!-- 施工信息dialog -->
|
|
|
+ <el-dialog :visible.sync="nodeDetailVisible" title="施工信息" append-to-body customClass="appendElNodeDialog"
|
|
|
+ width="70% !important">
|
|
|
+ <el-form ref="nodeForm" :model="zEngineeringNodeBo.zEngineeringInfoBo" :rules="nodeRules" label-width="200px">
|
|
|
+ <el-form-item label="施工时间" prop="constructTime">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="zEngineeringNodeBo.zEngineeringInfoBo.constructTime"
|
|
|
+ value-format="yyyy-MM-dd hh:mm:ss"
|
|
|
+ type="datetime"
|
|
|
+ style="width: 100%"
|
|
|
+ placeholder="请选择施工时间">
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ <el-row>
|
|
|
+ <el-form-item label="照片" prop="zEngiineeringPhotoBoList" style="width: 100%;">
|
|
|
+ <ObsImageUpload ref="obsImageUpload" :limit="9999" :fileType="['png', 'jpg', 'jpeg']"
|
|
|
+ :value="zEngineeringNodeBo.zEngineeringInfoBo.zEngiineeringPhotoBoList"
|
|
|
+ @input="getUrl"></ObsImageUpload>
|
|
|
+ </el-form-item>
|
|
|
+ </el-row>
|
|
|
+ <el-row v-for="(item, index) in zEngineeringMaterialBo" :key="index">
|
|
|
+ <el-col :span="7">
|
|
|
+ <el-form-item
|
|
|
+ :prop="`${item.id}.materialQuality`"
|
|
|
+ style="margin-left: 120px"
|
|
|
+ label-width="auto"
|
|
|
+ label="材质"
|
|
|
+ >
|
|
|
+ <el-select v-model="item.materialQuality" placeholder="请选择材质" style="width: 70%"
|
|
|
+ @change="getEnginSpecificationsList(item, index)">
|
|
|
+ <el-option
|
|
|
+ v-for="e in materialQualityList"
|
|
|
+ :key="e.id"
|
|
|
+ :label="e.name"
|
|
|
+ :value="e.id"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="7">
|
|
|
+ <el-form-item
|
|
|
+ :prop="`${item.id}.specifications`"
|
|
|
+ style="margin-left: 80px"
|
|
|
+ label-width="auto"
|
|
|
+ label="规格"
|
|
|
+ >
|
|
|
+ <el-select v-model="item.specifications" placeholder="请选择规格" style="width: 70%">
|
|
|
+ <el-option
|
|
|
+ v-for="e in zEngineeringMaterialBo.specifications"
|
|
|
+ :key="e.id"
|
|
|
+ :label="e.name"
|
|
|
+ :value="e.id"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="7">
|
|
|
+ <el-form-item
|
|
|
+ :prop="`${item.id}.number`"
|
|
|
+ style="margin-left: 40px"
|
|
|
+ label-width="auto"
|
|
|
+ label="数量"
|
|
|
+ >
|
|
|
+ <div class="block" style="display: inline-block; margin-right: 20px;">
|
|
|
+ <el-input v-model="item.number" placeholder="请输入数量" style="width: 100%" maxlength="8"/>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="3">
|
|
|
+ <el-form-item style="margin-left: -120px;">
|
|
|
+ <el-button v-if="zEngineeringMaterialBo.length > 1" @click="removezEngineeringMaterialBo(index)">
|
|
|
+ 删除
|
|
|
+ </el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <div style="width: 25%; float: right">
|
|
|
+ <el-button @click="addzEngineeringMaterialBo">添加用料</el-button>
|
|
|
+ <el-button :loading="buttonLoading" type="primary" @click="updateMaterBo">提交</el-button>
|
|
|
+ <el-button @click="nodeCancel">取 消</el-button>
|
|
|
+ </div>
|
|
|
+ </el-form>
|
|
|
+ </el-dialog>
|
|
|
+ <ConstructionDetails
|
|
|
+ ref="ConstructionDetails"
|
|
|
+ :status="status"
|
|
|
+ :currentCollapses="currentCollapses"
|
|
|
+ @updateNodeOption="updateNodeOption"
|
|
|
+ :enginType="'带气封堵施工'"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+<script>
|
|
|
+import {
|
|
|
+ getEngineeAirWallList,
|
|
|
+ addEngineeEngineeAirWall,
|
|
|
+ UpdateEngineeAirWall,
|
|
|
+ DelEngineeAirWall,
|
|
|
+ EditEngineeAirWall,
|
|
|
+ putEngineeAirWall,
|
|
|
+ QueryEngineeAirWall,
|
|
|
+} from '@/api/zdsz/engineeringAirWall'
|
|
|
+import {getDicts} from "@/api/system/dict/data";
|
|
|
+import EngineePipe from '@/components/EngineePipe'
|
|
|
+import {validPhoneMobile} from '@/api/rules'
|
|
|
+import ConstructionDetails from '@/components/ConstructionDetails/index.vue'
|
|
|
+import {getEnginMaterialQualityList} from '@/api/zdsz/enginee'
|
|
|
+import {getEnginSpecificationsList} from '@/api/zdsz/enginSpecifications'
|
|
|
+
|
|
|
+export default {
|
|
|
+ name: "openrepair",
|
|
|
+ dicts: ['sys_yes_no', 'is_repair', 'industry_engin_type', 'self_closing_valve_type', 'visit_type', 'engin_classification', 'engineering_infrastructure'],
|
|
|
+ components: {
|
|
|
+ ConstructionDetails,
|
|
|
+ EngineePipe
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ // 自定义校验
|
|
|
+ const validatePicPass = (rule, value, callback) => {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ // 至少有一个图片、一个创建时间
|
|
|
+ if (this.zEngineeringNodeBo.zEngineeringInfoBo.zEngiineeringPhotoBoList.length !== 0
|
|
|
+ && (this.zEngineeringNodeBo.zEngineeringInfoBo.constructTime !== null || undefined)) {
|
|
|
+ resolve(true)
|
|
|
+ } else {
|
|
|
+ reject(new Error('no pass'))
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ // 按钮loading
|
|
|
+ buttonLoading: false,
|
|
|
+ // 遮罩层
|
|
|
+ loading: true,
|
|
|
+ // 选中数组
|
|
|
+ ids: [],
|
|
|
+ status: null,
|
|
|
+ // 非单个禁用
|
|
|
+ single: true,
|
|
|
+ // 非多个禁用
|
|
|
+ multiple: true,
|
|
|
+ // 显示搜索条件
|
|
|
+ showSearch: true,
|
|
|
+ // 工程分类显示
|
|
|
+ engineeType: true,
|
|
|
+ // 总条数
|
|
|
+ total: 0,
|
|
|
+ currentNode: [],
|
|
|
+ currentCollapses: [],
|
|
|
+ // 市政工程|工业工程表格数据
|
|
|
+ comprehensiveList: [],
|
|
|
+ // 弹出层标题
|
|
|
+ title: "",
|
|
|
+ gc: true,
|
|
|
+ nodeList: [],
|
|
|
+ // 是否显示弹出层
|
|
|
+ open: false,
|
|
|
+ // 查询参数
|
|
|
+ queryParams: {
|
|
|
+ enginType: null,
|
|
|
+ enginName: '', // 工程名称
|
|
|
+ enginClassification: '', // 工程分类
|
|
|
+ },
|
|
|
+ nodeDetailVisible: false, // 施工信息dialog
|
|
|
+ MaterVisible: false, // 用料信息dialog
|
|
|
+ // 表单参数
|
|
|
+ form: {
|
|
|
+ files: [], // 附件
|
|
|
+ pics: [], // 附件返回
|
|
|
+ type: '', // 用来区分工业工程、市政工程
|
|
|
+ enginName: '', // 工程名称
|
|
|
+ enginType: '', // 工程类型
|
|
|
+ constructUnit: '', // 建筑单位
|
|
|
+ projectHead: '', // 项目负责人
|
|
|
+ sceneHead: '', // 现场负责人
|
|
|
+ designUnit: '', // 设计单位
|
|
|
+ designHead: '', // 设计负责人
|
|
|
+ designPhone: '', // 设计联系电话
|
|
|
+ supervisionUnit: '', // 监理单位
|
|
|
+ supervisionHead: '', // 监理负责人
|
|
|
+ supervisionPhone: '', // 监理联系电话
|
|
|
+ enginClassification: [], // 工程分类
|
|
|
+ zEngineeringNodeBo: { // 工程节点
|
|
|
+ type: '', // 节点类型
|
|
|
+ zEngineeringInfoBo: { // 施工信息
|
|
|
+ constructUser: '', // 施工人
|
|
|
+ constructTime: '', // 施工时间
|
|
|
+ zEngiineeringPhotoBoList: [], // 图片列表
|
|
|
+ zEngineeringMaterialBo: [ // 用料对象
|
|
|
+ {
|
|
|
+ materialQuality: '', // 用料材质
|
|
|
+ specifications: '', // 用料规格
|
|
|
+ number: '' // 用料数量
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ zEngineeringMaterialBo: [ // 用料对象
|
|
|
+ {
|
|
|
+ materialQuality: '', // 用料材质
|
|
|
+ specifications: '', // 用料规格
|
|
|
+ number: '' // 用料数量
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ zEngineeringNodeBo: { // 工程节点
|
|
|
+ type: '', // 节点类型
|
|
|
+ zEngineeringInfoBo: { // 施工信息
|
|
|
+ constructUser: '', // 施工人
|
|
|
+ constructTime: '', // 施工时间
|
|
|
+ zEngiineeringPhotoBoList: [], // 图片列表
|
|
|
+ }
|
|
|
+ },
|
|
|
+ EngineepipeType: [], // 工程类型
|
|
|
+ materialQualityList: [], // 用料材质List
|
|
|
+ specificationsList: [], // 用料规格List
|
|
|
+ // 表单校验
|
|
|
+ rules: {
|
|
|
+ enginName: [
|
|
|
+ {required: true, message: "工程名称不能为空", trigger: 'blur'}
|
|
|
+ ],
|
|
|
+ enginClassification: [
|
|
|
+ {required: true, message: "工程分类不能为空", trigger: 'blur'}
|
|
|
+ ],
|
|
|
+ enginType: [
|
|
|
+ {required: true, message: "工程类型不能为空", trigger: 'blur'}
|
|
|
+ ],
|
|
|
+ constructUnit: [
|
|
|
+ {required: true, message: "建筑单位不能为空", trigger: 'blur'}
|
|
|
+ ],
|
|
|
+ type: [
|
|
|
+ {required: false, message: "类型不能为空", trigger: "blur"}
|
|
|
+ ],
|
|
|
+ files: [
|
|
|
+ {required: true, message: "至少上传一个附件", trigger: "blur"}
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ // 节点规则校验
|
|
|
+ nodeRules: {
|
|
|
+ constructTime: [
|
|
|
+ {required: true, message: "施工时间不能为空", trigger: ['change', 'blur']}
|
|
|
+ ],
|
|
|
+ zEngiineeringPhotoBoList: [
|
|
|
+ {required: true, message: "图片不能为空", trigger: ['change', 'blur'], validator: validatePicPass}
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ searchParams: {
|
|
|
+ pageSize: 10,
|
|
|
+ pageNum: 1,
|
|
|
+ enginName: null, // 工程名称
|
|
|
+ enginClassification: null, // 工程分类
|
|
|
+ },
|
|
|
+ currentType: null, // 附件组件类型 put修改 add新增
|
|
|
+ };
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ // 根据url获取type节点类型
|
|
|
+ this.getType();
|
|
|
+ if (this.form.type === '2') {
|
|
|
+ this.engineeType = false
|
|
|
+ }
|
|
|
+ this.getList();
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ // 获取材质
|
|
|
+ getEnginMaterialQualityList({enginType: this.$route.query.type == '1' ? '工业工程' : '市政工程'}).then(res => {
|
|
|
+ this.materialQualityList = res.data
|
|
|
+ });
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ filesUpload(url){
|
|
|
+ console.log('upload successfully')
|
|
|
+ this.form.files = url
|
|
|
+ this.$refs.form.validate()
|
|
|
+ },
|
|
|
+ validateState(rule, value, callback) {
|
|
|
+ console.log(rule)
|
|
|
+ console.log(value)
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ if (value !== null && value !== undefined && value !== '' && value !== 0) {
|
|
|
+ resolve(true)
|
|
|
+ } else {
|
|
|
+ return callback(new Error('材质不能为空'))
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ validateSize(rule, value, callback) {
|
|
|
+ console.log(value)
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ const value = this.zEngineeringMaterialBo[rule.index].specifications
|
|
|
+ console.log(value)
|
|
|
+ if (value !== null && value !== undefined && value !== '' && value !== 0) {
|
|
|
+ resolve(true)
|
|
|
+ } else {
|
|
|
+ return callback(new Error('规格不能为空'))
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ validateNumber(rule, value, callback) {
|
|
|
+ console.log(value)
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ const value = this.zEngineeringMaterialBo[rule.index].number
|
|
|
+ // 至少有一个图片、一个用料信息、一个创建时间
|
|
|
+ if (value) {
|
|
|
+ resolve(true)
|
|
|
+ } else {
|
|
|
+ return reject(new Error('数量不能为空'))
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ updateNodeOption(value) {
|
|
|
+ console.log(this.form);
|
|
|
+ console.log(value)
|
|
|
+ this.form.files = this.form.pics
|
|
|
+ UpdateEngineeAirWall(this.form).then(res => {
|
|
|
+ this.$modal.msgSuccess("修改成功");
|
|
|
+
|
|
|
+ this.$refs.ConstructionDetails.dialogVisible = false
|
|
|
+ })
|
|
|
+ this.getList();
|
|
|
+ },
|
|
|
+ // 根据所选材质获取对应规格
|
|
|
+ getEnginSpecificationsList(item, index) {
|
|
|
+ this.zEngineeringMaterialBo[index].specifications = null
|
|
|
+ // 根据材质ID获取材质规格
|
|
|
+ getEnginSpecificationsList(item.materialQuality).then(res => {
|
|
|
+ this.zEngineeringMaterialBo.specifications = res.data
|
|
|
+ })
|
|
|
+ },
|
|
|
+ //添加用料信息
|
|
|
+ async addzEngineeringMaterBo(row) {
|
|
|
+ this.zEngineeringNodeBo = { // 工程节点
|
|
|
+ type: '', // 节点类型
|
|
|
+ zEngineeringInfoBo: { // 施工信息
|
|
|
+ constructUser: '', // 施工人
|
|
|
+ constructTime: '', // 施工时间
|
|
|
+ zEngiineeringPhotoBoList: [], // 图片列表
|
|
|
+ zEngineeringMaterialBo: []
|
|
|
+ },
|
|
|
+ }
|
|
|
+ this.zEngineeringMaterialBo = [ // 用料对象
|
|
|
+ {
|
|
|
+ materialQuality: '', // 用料材质
|
|
|
+ specifications: '', // 用料规格
|
|
|
+ number: '' // 用料数量
|
|
|
+ },
|
|
|
+ ]
|
|
|
+ const id = row.id
|
|
|
+ putEngineeAirWall(id).then(response => {
|
|
|
+ this.loading = false;
|
|
|
+ this.form = response.data
|
|
|
+ this.form.zEngineeringNodeBo = []
|
|
|
+ this.nodeDetailVisible = true;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ updateMaterBo() {
|
|
|
+ this.form.zEngineeringNodeBo = []
|
|
|
+ if (this.zEngineeringMaterialBo.length > 0) {
|
|
|
+ let valid = true;
|
|
|
+ if (this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['materialQuality'] == '' || this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['materialQuality'] == null) {
|
|
|
+ valid = false;
|
|
|
+ }
|
|
|
+ if (this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['specifications'] == '' || this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['specifications'] == null) {
|
|
|
+ valid = false;
|
|
|
+ }
|
|
|
+ if (this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['number'] == '' || this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['number'] == null) {
|
|
|
+ valid = false;
|
|
|
+ }
|
|
|
+ // if (this.form.enginClassification != [] && this.form.enginClassification.length>0) {
|
|
|
+ // this.form.enginClassification = this.form.enginClassification.join(',');
|
|
|
+ // }
|
|
|
+ if (valid) {
|
|
|
+ this.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo = this.zEngineeringMaterialBo
|
|
|
+ this.form.zEngineeringNodeBo = this.zEngineeringNodeBo
|
|
|
+ this.zEngineeringNodeBo.type = this.$route.query.type
|
|
|
+ this.$refs.nodeForm.validate(valid => {
|
|
|
+ if (valid) {
|
|
|
+ EditEngineeAirWall(this.form).then(res => {
|
|
|
+ this.nodeDetailVisible = false
|
|
|
+ this.$modal.msgSuccess("新增成功");
|
|
|
+ })
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ this.$message.warning('完善信息!')
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
+ //添加用料
|
|
|
+ addzEngineeringMaterialBo() {
|
|
|
+ if (this.zEngineeringMaterialBo.length > 0) {
|
|
|
+ let valid = true;
|
|
|
+ if (this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['materialQuality'] == '' || this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['materialQuality'] == null) {
|
|
|
+ valid = false;
|
|
|
+ }
|
|
|
+ if (this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['specifications'] == '' || this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['specifications'] == null) {
|
|
|
+ valid = false;
|
|
|
+ }
|
|
|
+ if (this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['number'] == '' || this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['number'] == null) {
|
|
|
+ valid = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (valid) {
|
|
|
+ this.zEngineeringMaterialBo.push({
|
|
|
+ materialQuality: '', // 用料材质
|
|
|
+ specifications: '', // 用料规格
|
|
|
+ number: '' // 用料数量
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ this.$message.warning('完善信息!')
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 删除用料信息
|
|
|
+ removezEngineeringMaterialBo(index) {
|
|
|
+ this.zEngineeringMaterialBo.splice(index, 1)
|
|
|
+ },
|
|
|
+ // 根据url获取type节点类型
|
|
|
+ getType() {
|
|
|
+ const queryString = window.location.search;
|
|
|
+ const params = new URLSearchParams(queryString);
|
|
|
+ const type = params.get('type');
|
|
|
+ if (type) {
|
|
|
+ this.form.type = type;
|
|
|
+ this.form.zEngineeringNodeBo.type = (type === '1' ? "工业工程" : "市政工程")
|
|
|
+ this.EngineepipeType = (type === '1' ? [{value: '小微商服', label: '小微商服'}, {
|
|
|
+ value: '新建工业',
|
|
|
+ label: '新建工业'
|
|
|
+ }, {value: '改造工业', label: '改造工业'}]
|
|
|
+ : [{value: '气源', label: '气源'}, {value: '排迁', label: '排迁'}])
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 新增顶管工程
|
|
|
+ addNewPipe(data) {
|
|
|
+ // console.log(this.form)
|
|
|
+ this.$refs.enginPipe.openDialog({
|
|
|
+ id: data.id,
|
|
|
+ type: this.form.type
|
|
|
+ }, 'add', data)
|
|
|
+ },
|
|
|
+ // 历史查询
|
|
|
+ viewSource(e) {
|
|
|
+ console.log('历史查询', e)
|
|
|
+ this.currentId = e.id
|
|
|
+ let val = e.enginType + "_" + e.enginClassification
|
|
|
+ val = 'air_wall_node'
|
|
|
+ // alert(val)
|
|
|
+ getDicts(val).then(res => {
|
|
|
+ let dict = []
|
|
|
+ for (let i = 0; i < res.data.length; i++) {
|
|
|
+ dict.push({
|
|
|
+ "label": res.data[i].dictLabel,
|
|
|
+ "value": res.data[i].dictValue,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ // 此处有注释
|
|
|
+ this.$refs.ConstructionDetails.open(dict, this.form.type,null,null,null,null,null,this.form.type === '1' ? "工业工程" : "市政工程")
|
|
|
+ this.status = 'read-only'
|
|
|
+ })
|
|
|
+ },
|
|
|
+ // 历史查询
|
|
|
+ updateviewSource(e) {
|
|
|
+ this.currentId = e.id
|
|
|
+ this.$refs.ConstructionDetails.open(_, this.form.type,null,null,null,null,null,this.form.type === '1' ? "工业工程" : "市政工程")
|
|
|
+ this.status = 'put'
|
|
|
+ },
|
|
|
+ viewNodeSource(e) {
|
|
|
+ // alert('type='+e)
|
|
|
+ if(!e)return
|
|
|
+ console.log('todo: 获取数据', e)
|
|
|
+ // todo: 获取数据
|
|
|
+ QueryEngineeAirWall({
|
|
|
+ id: this.currentId,
|
|
|
+ type: e
|
|
|
+ }).then(res => {
|
|
|
+ console.log(res)
|
|
|
+ this.form = res.data
|
|
|
+ try {
|
|
|
+ this.currentCollapses = res.data.zEngineeringNodeBo.zEngineeringInfoBoList
|
|
|
+ } catch (error) {
|
|
|
+ this.currentCollapses = [];
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ nodeCancel() {
|
|
|
+ this.nodeDetailVisible = false
|
|
|
+ this.reset()
|
|
|
+ },
|
|
|
+ // 修改施工信息
|
|
|
+ toNodeDetail() {
|
|
|
+ // 根据材质id查询对应规格回显
|
|
|
+ this.$refs["form"].validate(valid => {
|
|
|
+ if (valid) {
|
|
|
+ this.nodeDetailVisible = true
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ getUrl(url) {
|
|
|
+ this.zEngineeringNodeBo.zEngineeringInfoBo.zEngiineeringPhotoBoList = this.$refs.obsImageUpload.fileList ? this.$refs.obsImageUpload.fileList.map(e => e.url) : [];
|
|
|
+ },
|
|
|
+ /** 查询市政工程|工业工程列表 */
|
|
|
+ getList(val) {
|
|
|
+ this.loading = true;
|
|
|
+ getEngineeAirWallList(this.searchParams).then(res => {
|
|
|
+ this.comprehensiveList = res.rows;
|
|
|
+ this.total = res.total;
|
|
|
+ this.loading = false;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 取消按钮
|
|
|
+ cancel() {
|
|
|
+ this.open = false;
|
|
|
+ this.reset();
|
|
|
+ },
|
|
|
+ // 表单重置
|
|
|
+ reset() {
|
|
|
+ for (let formKey in this.form) {
|
|
|
+ this.form[formKey] = null
|
|
|
+ }
|
|
|
+ this.form.zEngineeringNodeBo = {}
|
|
|
+ this.form.zEngineeringNodeBo.zEngineeringInfoBo = {}
|
|
|
+ this.zEngineeringMaterialBo = []
|
|
|
+ this.zEngineeringMaterialBo.push({
|
|
|
+ materialQuality: '', // 用料材质
|
|
|
+ specifications: '', // 用料规格
|
|
|
+ number: '' // 用料数量
|
|
|
+ })
|
|
|
+ this.getType()
|
|
|
+ },
|
|
|
+ /** 搜索按钮操作 */
|
|
|
+ handleQuery() {
|
|
|
+ this.searchParams.pageNum = 1;
|
|
|
+ this.getList();
|
|
|
+ },
|
|
|
+ /** 重置按钮操作 */
|
|
|
+ resetQuery() {
|
|
|
+ this.resetForm("searchParams");
|
|
|
+ this.handleQuery();
|
|
|
+ },
|
|
|
+ // 多选框选中数据
|
|
|
+ handleSelectionChange(selection) {
|
|
|
+ this.ids = selection.map(item => item.id)
|
|
|
+ this.single = selection.length !== 1
|
|
|
+ this.multiple = !selection.length
|
|
|
+ },
|
|
|
+ /** 新增按钮操作 */
|
|
|
+ handleAdd() {
|
|
|
+ this.reset();
|
|
|
+ this.gc = true
|
|
|
+ this.title = "新增带气封堵施工";
|
|
|
+ this.currentType = 'add'
|
|
|
+ this.open = true;
|
|
|
+ },
|
|
|
+ removeFile(val) {
|
|
|
+ console.log(val)
|
|
|
+ console.log("我是文件")
|
|
|
+ this.form.files = val
|
|
|
+ },
|
|
|
+ /** 修改按钮操作 */
|
|
|
+ handleUpdate(row) {
|
|
|
+ this.gc = false
|
|
|
+ this.loading = true;
|
|
|
+ this.reset();
|
|
|
+ const id = row.id || this.ids
|
|
|
+ putEngineeAirWall(id).then(response => {
|
|
|
+ this.loading = false;
|
|
|
+ this.form = response.data;
|
|
|
+ if (response.data.zEngineeringNodeBoList !== undefined && response.data.zEngineeringNodeBoList.length > 0) {
|
|
|
+ this.zEngineeringNodeBo = response.data.zEngineeringNodeBoList[0]
|
|
|
+ if (response.data.zEngineeringNodeBoList[0].zEngineeringInfoBoList !== undefined && response.data.zEngineeringNodeBoList[0].zEngineeringInfoBoList.length > 0) {
|
|
|
+ this.zEngineeringNodeBo.zEngineeringInfoBo = response.data.zEngineeringNodeBoList[0].zEngineeringInfoBoList[0]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.title = "修改带气封堵施工";
|
|
|
+ this.currentType = 'put'
|
|
|
+ this.open = true;
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ /** 提交按钮 */
|
|
|
+ submitForm() {
|
|
|
+ this.form.zEngineeringNodeBo = null
|
|
|
+ if (this.zEngineeringNodeBo.type !== '') {
|
|
|
+ this.form.zEngineeringNodeBo = this.zEngineeringNodeBo
|
|
|
+ this.form.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo = this.zEngineeringMaterialBo
|
|
|
+ }
|
|
|
+ // if (this.form.enginClassification != [] && this.form.enginClassification.length>0) {
|
|
|
+ // this.form.enginClassification = this.form.enginClassification.join(',');
|
|
|
+ // }
|
|
|
+ this.$refs["form"].validate(valid => {
|
|
|
+ if (valid) {
|
|
|
+ this.form.files = this.$refs.obsFileUpload.fileList;
|
|
|
+ if (this.form.files.length === 0) {
|
|
|
+ this.$message.warning('必须上传附件!')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (this.form.id == null) {
|
|
|
+ addEngineeEngineeAirWall(this.form).then(res => {
|
|
|
+ this.$modal.msgSuccess("新增成功");
|
|
|
+ this.open = false;
|
|
|
+ this.nodeDetailVisible = false
|
|
|
+ this.getList();
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ UpdateEngineeAirWall(this.form).then(res => {
|
|
|
+ this.$modal.msgSuccess("修改成功");
|
|
|
+ this.open = false;
|
|
|
+ this.nodeDetailVisible = false
|
|
|
+ this.getList();
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ /** 删除按钮操作 */
|
|
|
+ handleDelete(row) {
|
|
|
+ const ids = row.id || this.ids;
|
|
|
+ this.$modal.confirm('是否确认删除所选择的数据项?').then(() => {
|
|
|
+ this.loading = true;
|
|
|
+ return DelEngineeAirWall(ids);
|
|
|
+ }).then(() => {
|
|
|
+ this.loading = false;
|
|
|
+ this.getList();
|
|
|
+ this.$modal.msgSuccess("删除成功");
|
|
|
+ }).catch(() => {
|
|
|
+ }).finally(() => {
|
|
|
+ this.loading = false;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ /** 导出按钮操作 */
|
|
|
+ handleExport() {
|
|
|
+ this.download('zdsz/engineeringIndustry/export', {
|
|
|
+ ...this.queryParams
|
|
|
+ }, `comprehensive_${new Date().getTime()}.xlsx`)
|
|
|
+ }
|
|
|
+ }
|
|
|
+};
|
|
|
+</script>
|
|
|
+
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+
|
|
|
+
|
|
|
+::v-deep .appendElDialog {
|
|
|
+ width: 70%;
|
|
|
+ height: 80%;
|
|
|
+
|
|
|
+
|
|
|
+ .el-dialog__body {
|
|
|
+ height: 85%;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-form-item {
|
|
|
+ margin-bottom: 22px;
|
|
|
+ width: 44%;
|
|
|
+ display: inline-block;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-form-item:nth-child(2n+2) {
|
|
|
+ margin-left: 5%;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-form-item:not(:nth-child(1):nth-child(2)) {
|
|
|
+ margin-top: 0.5%;
|
|
|
+ }
|
|
|
+
|
|
|
+ .remark_input {
|
|
|
+ .el-textarea__inner {
|
|
|
+ width: 238%;
|
|
|
+ height: 190px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+::v-deep .appendElNodeDialog {
|
|
|
+ // width: 70%;
|
|
|
+ height: 80%;
|
|
|
+
|
|
|
+ .el-select {
|
|
|
+ width: 70%
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-dialog__body {
|
|
|
+ height: 85%;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-form-item {
|
|
|
+ margin-bottom: 22px;
|
|
|
+ width: 100%;
|
|
|
+ display: inline-block;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ .el-form-item:not(:nth-child(1):nth-child(2)) {
|
|
|
+ margin-top: 0.5%;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|
|
|
+
|