<template> <div class="app-container"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form-item label="计划编码" prop="planCode"> <el-input v-model="queryParams.planCode" placeholder="请输入计划编码" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="计划名称" prop="planName"> <el-input v-model="queryParams.planName" placeholder="请输入计划名称" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="车间" prop="planWorkshop"> <el-input v-model="queryParams.planWorkshop" placeholder="请输入车间" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item v-if="false" label="产线" prop="planProdLine"> <el-input v-model="queryParams.planProdLine" placeholder="请输入产线" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item v-if="false" label="设备名称" prop="equipmentName"> <el-input v-model="queryParams.equipmentName" placeholder="请输入设备名称" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item v-if="false" label="设备编码" prop="equipmentCode"> <el-input v-model="queryParams.equipmentCode" placeholder="请输入设备编码" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item v-if="false" label="循环周期" prop="planLoop"> <el-input v-model="queryParams.planLoop" placeholder="请输入循环周期" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item v-if="false" label="循环周期类型" prop="planLoopType"> <el-select v-model="queryParams.planLoopType" placeholder="请选择循环周期类型" clearable> <el-option v-for="dict in dict.type.device_loop_type" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-form-item> <el-form-item v-if="false" label="循环执行时间开始" prop="planLoopStart"> <el-date-picker clearable v-model="queryParams.planLoopStart" type="date" value-format="yyyy-MM-dd" placeholder="请选择循环执行时间开始"> </el-date-picker> </el-form-item> <el-form-item v-if="false" label="循环执行时间结束" prop="planLoopEnd"> <el-date-picker clearable v-model="queryParams.planLoopEnd" type="date" value-format="yyyy-MM-dd" placeholder="请选择循环执行时间结束"> </el-date-picker> </el-form-item> <el-form-item v-if="false" label="巡检人员" prop="planPerson"> <el-input v-model="queryParams.planPerson" placeholder="请输入巡检人员" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="计划状态" prop="planStatus"> <el-select v-model="queryParams.planStatus" placeholder="请选择计划状态" clearable> <el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-form-item> <el-form-item v-if="false" label="是否可生产-限制" prop="planRestrict"> <el-input v-model="queryParams.planRestrict" placeholder="请输入是否可生产-限制" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item v-if="false" label="是否委外" prop="planOutsource"> <el-input v-model="queryParams.planOutsource" placeholder="请输入是否委外" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item v-if="false" label="委外工单编码" prop="workCode"> <el-input v-model="queryParams.workCode" placeholder="请输入委外工单编码" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item v-if="false" label="工厂" prop="factoryCode"> <el-input v-model="queryParams.factoryCode" placeholder="请输入工厂" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item v-if="false" label="备用字段1" prop="attr1"> <el-input v-model="queryParams.attr1" placeholder="请输入备用字段1" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item v-if="false" label="备用字段2" prop="attr2"> <el-input v-model="queryParams.attr2" placeholder="请输入备用字段2" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item v-if="false" label="备用字段3" prop="attr3"> <el-input v-model="queryParams.attr3" placeholder="请输入备用字段3" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item v-if="false" label="删除标志" prop="delFlag"> <el-input v-model="queryParams.delFlag" placeholder="请输入删除标志" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="创建人" prop="createBy"> <el-input v-model="queryParams.createBy" placeholder="请输入创建人" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="创建时间" prop="createTime"> <el-date-picker clearable v-model="queryParams.createTime" type="date" value-format="yyyy-MM-dd" placeholder="请选择创建时间"> </el-date-picker> </el-form-item> <el-form-item label="更新人" prop="updateBy"> <el-input v-model="queryParams.updateBy" placeholder="请输入更新人" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="更新时间" prop="updateTime"> <el-date-picker clearable v-model="queryParams.updateTime" type="date" value-format="yyyy-MM-dd" placeholder="请选择更新时间"> </el-date-picker> </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="['device:upkeepPlan:add']" >添加计划 </el-button> </el-col> <el-col :span="1.5"> <el-button type="success" plain icon="el-icon-edit" size="mini" @click="handleUpdate" v-hasPermi="['device:upkeepPlan:add']" >委外计划 </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="['device:upkeepPlan:remove']" >删除 </el-button> </el-col> <el-col :span="1.5"> <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['device:upkeepPlan:export']" >导出 </el-button> </el-col> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> </el-row> <el-table v-loading="loading" :data="upkeepPlanList" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55" align="center"/> <el-table-column width="60" align="center" label="序号" type="index"></el-table-column> <el-table-column v-if="false" label="主键" align="center" prop="planId"/> <el-table-column label="计划编码" align="center" prop="planCode"/> <el-table-column label="计划名称" align="center" prop="planName"/> <el-table-column label="车间" align="center" prop="planWorkshop"/> <el-table-column v-if="false" label="产线" align="center" prop="planProdLine"/> <el-table-column v-if="false" label="设备名称" align="center" prop="equipmentName"/> <el-table-column v-if="false" label="设备编码" align="center" prop="equipmentCode"/> <el-table-column label="循环周期" align="center" prop="planLoop"/> <el-table-column label="循环周期类型" align="center" prop="planLoopType"> <template slot-scope="scope"> <dict-tag :options="dict.type.device_loop_type" :value="scope.row.planLoopType"/> </template> </el-table-column> <el-table-column label="循环执行时间开始" align="center" prop="planLoopStart" width="180"> <template slot-scope="scope"> <span>{{ parseTime(scope.row.planLoopStart, '{y}-{m}-{d}') }}</span> </template> </el-table-column> <el-table-column label="循环执行时间结束" align="center" prop="planLoopEnd" width="180"> <template slot-scope="scope"> <span>{{ parseTime(scope.row.planLoopEnd, '{y}-{m}-{d}') }}</span> </template> </el-table-column> <el-table-column v-if="false" label="巡检人员" align="center" prop="planPerson"/> <el-table-column label="计划状态" align="center" prop="planStatus"> <template slot-scope="scope"> <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.planStatus"/> </template> </el-table-column> <el-table-column v-if="false" label="是否可生产-限制" align="center" prop="planRestrict"/> <el-table-column v-if="false" label="维护类型" align="center" prop="planType"/> <el-table-column v-if="false" label="是否委外" align="center" prop="planOutsource"/> <el-table-column v-if="false" label="委外工单编码" align="center" prop="workCode"/> <el-table-column v-if="false" label="工厂" align="center" prop="factoryCode"/> <el-table-column v-if="false" label="备用字段1" align="center" prop="attr1"/> <el-table-column v-if="false" label="备用字段2" align="center" prop="attr2"/> <el-table-column v-if="false" label="备用字段3" align="center" prop="attr3"/> <el-table-column v-if="false" label="删除标志" align="center" prop="delFlag"/> <el-table-column label="创建人" align="center" prop="createBy"/> <el-table-column label="创建时间" align="center" prop="createTime" width="180"> <template slot-scope="scope"> <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> </template> </el-table-column> <el-table-column label="更新人" align="center" prop="updateBy"/> <el-table-column label="更新时间" align="center" prop="updateTime" width="180"> <template slot-scope="scope"> <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span> </template> </el-table-column> <el-table-column width="180" label="操作" align="center" class-name="small-padding fixed-width" fixed="right"> <template slot-scope="scope"> <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['device:upkeepPlan:edit']" >修改 </el-button> <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['device:upkeepPlan:remove']" >删除 </el-button> </template> </el-table-column> </el-table> <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" /> <!-- 添加或修改保养计划对话框 --> <el-dialog :title="title" :visible.sync="open" width="900px" append-to-body> <el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-form-item v-if="false" label="计划编码" prop="planCode"> <el-input v-model="form.planCode" placeholder="请输入计划编码"/> </el-form-item> <div class="my-step-mar"> <el-steps :active="upkeepSteps" finish-status="success" align-center> <el-step title="保养计划基本信息"></el-step> <el-step title="选择设备、保养项"></el-step> <el-step v-if="false" title="更换备件"></el-step> <el-step title="人员"></el-step> </el-steps> <!-- 保养计划基本信息 --> <div class="my-step-body" v-if="this.upkeepSteps==0"> <el-row> <el-col :span="8"> <el-form-item label="保养名称:"> <el-input v-model="form.planName" placeholder="请输入保养名称"/> </el-form-item> </el-col> <el-col :span=12 :offset="1"> <el-form-item label="保养类型:"> <el-radio v-model="form.upkeep" label="0">单次</el-radio> <el-radio v-model="form.upkeep" label="1">多次</el-radio> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="8"> <el-form-item label="工作中心:"> <el-select v-model="form.planWorkshop" placeholder="工作中心" clearable> <el-option v-for="item in workCenterList" :key="item.factoryCode" :label="item.factoryName" :value="item.factoryCode"> </el-option> </el-select> </el-form-item> </el-col> <el-col :offset="1" :span="6" v-if="form.upkeep == 1"> <el-form-item label="循环周期:"> <el-input v-model="form.planLoop" placeholder="请输入循环周期"/> </el-form-item> </el-col> <el-col :span="2" v-if="form.upkeep == 1"> <el-select v-model="form.planLoopType" placeholder="周期" clearable> <el-option v-for="dict in dict.type.device_loop_type" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-col> </el-row> <el-row> <el-col :span="20"> <el-form-item label-width="160px" label="计划保养时间计算规则:"> <el-radio v-model="form.calculationRule" label="0">按固定周期</el-radio> <el-radio v-model="form.calculationRule" label="1">按上次保养时间</el-radio> </el-form-item> </el-col> </el-row> <el-row v-if="form.calculationRule == 0"> <el-col :span="20"> <el-form-item label-width="100px" label="保养执行时间"> <el-date-picker @change="changeArray" v-model="form.planTimeArray" type="datetimerange" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间"> </el-date-picker> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="20"> <el-form-item label-width="110px" label="是否停机保养:"> <el-radio v-model="form.shutDown" label="0">停机保养</el-radio> <el-radio v-model="form.shutDown" label="1">开机保养</el-radio> </el-form-item> </el-col> </el-row> </div> <!-- 选择设备、保养项 --> <div class="my-step-body" v-if="this.upkeepSteps==1"> <el-row> <el-col class="my-step-mar" :span="1.5"> <el-button type="primary" plain size="mini" @click="selectEquBtn"> 选择设备 </el-button> </el-col> </el-row> <el-table :data="form.equipmentItem" stripe style="width: 100%"> <el-table-column type="selection" width="55" align="center"/> <el-table-column prop="equipmentCode" label="设备编码" width="180"> </el-table-column> <el-table-column prop="equipmentName" label="设备名称" width="180"> </el-table-column> <el-table-column prop="itemTempName" label="巡检项" width="300"> </el-table-column> <el-table-column width="150" fixed="right" label="操作" > <template slot-scope="scope"> <el-button @click="editorTheItem(scope.row)" type="text" size="small">标准</el-button> <el-button @click="selectSpareBtn(scope.row)" type="text" size="small">备件</el-button> <el-button @click="delTheEquItem(scope.row)" type="text" size="small">删除</el-button> </template> </el-table-column> </el-table> <!-- 编辑检查项弹窗 --> <el-dialog title="编辑检查项" :visible.sync="editorItem" width="50%" append-to-body > <!-- 编辑检查标准 --> <el-table :data="itemDetailList" v-loading="detailLoading" stripe @selection-change="selectChangeEqu" style="width: 100%"> <el-table-column width="55" align="center"/> <el-table-column prop="itemName" label="检查项"> </el-table-column> <el-table-column prop="standardName" label="检查标准"> </el-table-column> <el-table-column prop="standardTypeName" label="标准类型"> </el-table-column> <el-table-column fixed="right" label="操作" > <template slot-scope="scope"> <el-button @click="delStandard(scope.row)" type="text" size="small">删除</el-button> </template> </el-table-column> </el-table> <span slot="footer" class="dialog-footer"> <el-button type="primary" @click="standardBtn">确 定</el-button> </span> </el-dialog> <!-- 选择设备弹窗 --> <el-dialog title="选择设备" :visible.sync="selectEqu" width="50%" append-to-body > <el-form :model="equipmentQuery" ref="queryBPForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form-item label="设备编码"> <el-input v-model="equipmentQuery.equipmentCode" placeholder="请输入设备编码" clearable /> </el-form-item> <el-form-item label="设备名称"> <el-input v-model="equipmentQuery.equipmentName" placeholder="请输入设备名称" clearable /> </el-form-item> <el-form-item v-if="false" label="设备类型"> <el-input v-model="equipmentQuery.equipmentName" placeholder="请输入设备类型" clearable /> </el-form-item> <el-form-item> <el-button type="primary" icon="el-icon-search" size="mini" @click="getEquList">搜索</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetEqu">重置</el-button> </el-form-item> </el-form> <!-- 搜索-设备列表 --> <el-table :data="queryEquipment" v-loading="equLoading" stripe @selection-change="selectChangeEqu" style="width: 100%"> <el-table-column type="selection" width="55" align="center"/> <el-table-column prop="equipmentCode" label="设备编码"> </el-table-column> <el-table-column prop="equipmentName" label="设备名称"> </el-table-column> <el-table-column prop="equipmentTypeName" label="设备类型"> </el-table-column> <el-table-column prop="workshopName" label="工作中心"> </el-table-column> </el-table> <pagination v-show="equTotal>0" :total="equTotal" :page.sync="equipmentQuery.pageNum" :limit.sync="equipmentQuery.pageSize" @pagination="getEquList" /> <span slot="footer" class="dialog-footer"> <el-button @click="selectEqu = false">取 消</el-button> <el-button type="primary" @click="confirmSelectEquBtn">确 定</el-button> </span> </el-dialog> <!-- 选择备件弹窗 --> <el-dialog title="备件领用" :visible.sync="spareDialog" width="50%" append-to-body > <el-tabs type="border-card"> <el-tab-pane label="备件选择"> <el-form :model="spareQuery" ref="queryBPForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form-item label="备件编码"> <el-input v-model="spareQuery.materialCode" placeholder="请输入备件编码" clearable /> </el-form-item> <el-form-item label="备件名称"> <el-input v-model="spareQuery.materialDesc" placeholder="请输入备件名称" clearable /> </el-form-item> <el-form-item v-if="false" label="备件类型"> <el-input v-model="spareQuery.spareType" placeholder="请输入备件类型" clearable /> </el-form-item> <el-form-item> <el-button type="primary" icon="el-icon-search" size="mini" @click="getSpareList">搜索</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetSpare">重置</el-button> </el-form-item> </el-form> <!-- 搜索-备件列表 --> <el-table :data="spareList" v-loading="spareLoading" stripe @selection-change="selectChangeSpare" style="width: 100%"> <el-table-column v-if="false" type="selection" width="55" align="center"/> <el-table-column prop="materialCode" label="备件号"> </el-table-column> <el-table-column prop="materialDesc" label="备件名称"> </el-table-column> <el-table-column prop="spareType" label="备件类型"> </el-table-column> <el-table-column prop="amount" label="库存数量"> </el-table-column> <el-table-column width="150" fixed="right" label="操作" > <template slot-scope="scope"> <el-button @click="addSpareList(scope.row)" type="text" size="small">添加</el-button> </template> </el-table-column> </el-table> <pagination v-show="spareTotal>0" :total="spareTotal" :page.sync="spareQuery.pageNum" :limit.sync="spareQuery.pageSize" @pagination="getSpareList" /> <span slot="footer" class="dialog-footer"> <el-button @click="spareDialog = false">取 消</el-button> <el-button type="primary" @click="confirmSelectSpareBtn">确 定</el-button> </span> </el-tab-pane> <el-tab-pane label="备件数量"> <el-row> <el-col class="my-step-mar" :span="1.5"> <el-button type="primary" plain size="mini" @click="applyNumDialog = true , applyNum = null"> 领用数量 </el-button> </el-col> </el-row> <el-table :data="chooseSpareList" v-loading="spareLoading" stripe @selection-change="selectChangeSpare" style="width: 100%"> <el-table-column type="selection" width="55" align="center"/> <el-table-column prop="materialCode" label="备件号"> </el-table-column> <el-table-column prop="materialDesc" label="备件名称"> </el-table-column> <el-table-column prop="spareType" label="备件类型"> </el-table-column> <el-table-column prop="amount" label="库存数量"> </el-table-column> <el-table-column prop="applyNum" label="领用数量"> </el-table-column> <el-table-column width="150" fixed="right" label="操作" > <template slot-scope="scope"> <el-button @click="delSpareList(scope.row)" type="text" size="small">删除</el-button> </template> </el-table-column> </el-table> <el-dialog title="申领数量" :visible.sync="applyNumDialog" width="30%" append-to-body > <el-row> <el-col :span="8" :offset="7"> <el-input-number v-model="applyNum" @change="changeApplySpareNum" :min="1" label="描述文字"></el-input-number> </el-col> </el-row> <span slot="footer" class="dialog-footer"> <el-button v-if="false" @click="applyNumDialog = false">取 消</el-button> <el-button type="primary" @click="applyNumDialog = false">确 定</el-button> </span> </el-dialog> </el-tab-pane> <el-button type="primary" class="dialog-footer" @click="spareChangeCom">完成</el-button> </el-tabs> </el-dialog> </div> <!-- 更换备件 --> <div class="my-step-body" v-if="false"> <el-row> <el-col class="my-step-mar" :span="1.5"> <el-button type="primary" plain size="mini" @click="selectSpareBtn"> 选择备件 </el-button> </el-col> </el-row> <el-table :data="form.selectSpareList" stripe style="width: 100%"> <el-table-column type="selection" width="55" align="center"/> <el-table-column prop="materialCode" label="备件号" width="180"> </el-table-column> <el-table-column prop="materialDesc" label="备件名称" width="180"> </el-table-column> <el-table-column prop="amount" label="库存数量" width="300"> </el-table-column> <el-table-column fixed="right" label="操作" > <template slot-scope="scope"> <el-button @click="editorTheItem(scope.row)" type="text" size="small">编辑</el-button> <el-button @click="delTheEquItem(scope.row)" type="text" size="small">删除</el-button> </template> </el-table-column> </el-table> </div> <!-- 人员 --> <div class="my-step-body" v-if="this.upkeepSteps==2"> <el-row> <el-col :span="24" :offset="1"> <el-transfer :titles="['人员','已选择人员']" filterable :filter-method="filterMethod" filter-placeholder="请输入人员名称" v-model="selectPersonList" :data="personList"> </el-transfer> </el-col> </el-row> </div> </div> </el-form> <div slot="footer" class="dialog-footer"> <el-button style="margin-top: 12px;" v-if="this.upkeepSteps > 0" @click="stepLast">上一步</el-button> <el-button style="margin-top: 12px;" v-if="this.upkeepSteps < 2" @click="stepNext">下一步</el-button> <el-button type="primary" v-if="this.upkeepSteps == 2" @click="submitForm">提 交</el-button> </div> </el-dialog> </div> </template> <script> import { listUpkeepPlan, getUpkeepPlan, delUpkeepPlan, addUpkeepPlan, updateUpkeepPlan, formatEquItem, setSpareList, querySpareList } from "@/api/device/upkeepPlan"; import {getEquList, getPersonList, getWorkCenter, initUpdatePlanInfo} from "@/api/device/plan"; export default { name: "UpkeepPlan", dicts: ['device_loop_type', 'sys_normal_disable'], data() { return { // 选中的备件 selOnSpare: [], // 申领数量 applyNum: null, // 申领数量弹出层 applyNumDialog: false, // 已经选择的备件数 chooseSpareList: [], // 备件总条数 spareTotal: 0, // 备件table加载 spareLoading: false, // 选择备件弹窗 spareDialog: false, // 备件list spareList: [], // 保养人员选择穿梭框 personList: [], selectPersonList: [], // 工作中心list workCenterList: [], // 编辑检查标准list itemDetailList: [], // 编辑检查标准loading detailLoading: false, // 选中的设备信息 selectEquList: [], // 设备信息loading equLoading: false, // 搜索到的设备总数 equTotal: 0, // 搜索到的设备list queryEquipment: [], // 设备弹窗搜索条件 spareQuery: { materialCode: null, materialDesc: null, pageNum: 1, pageSize: 10, }, // 设备弹窗搜索条件 equipmentQuery: { equipmentCode: null, equipmentName: null, workshopCode: null, pageNum: 1, pageSize: 10, }, // 选择设备弹窗 selectEqu: false, // 编辑检查项弹窗 editorItem: false, // 步骤 upkeepSteps: 0, // 遮罩层 loading: true, // 选中数组 ids: [], // 非单个禁用 single: true, // 非多个禁用 multiple: true, // 显示搜索条件 showSearch: true, // 总条数 total: 0, // 保养计划表格数据 upkeepPlanList: [], // 弹出层标题 title: "", // 是否显示弹出层 open: false, // 查询参数 queryParams: { pageNum: 1, pageSize: 10, planCode: null, planName: null, planWorkshop: null, planProdLine: null, equipmentName: null, equipmentCode: null, planLoop: null, planLoopType: null, planLoopStart: null, planLoopEnd: null, planPerson: null, planStatus: null, planRestrict: null, planType: 'maintenance', planOutsource: null, workCode: null, factoryCode: null, attr1: null, attr2: null, attr3: null, delFlag: null, createBy: null, createTime: null, updateBy: null, updateTime: null }, // 表单参数 form: { selectSpareList: [], equipmentItem: [], shutDown: '0', calculationRule: '0', planLoopType: 'day', planLoop: null, upkeep: '1', planName: null, planWorkshop: null, personList:[], planTimeArray:[], }, // 表单校验 rules: {} }; }, created() { this.getList(); }, methods: { // 备件选择完成按钮 spareChangeCom() { console.log("点击了完成按钮") console.log(this.chooseSpareList) console.log("form") console.log(this.form) this.spareDialog = false; }, // 备件数量改变 changeApplySpareNum(e) { for (let i = 0; i < this.selOnSpare.length; i++) { this.selOnSpare[i].applyNum = e; } }, // 删除备件-备件数量 delSpareList(e) { console.log("删除备件") console.log(e) for (let i = 0; i < this.chooseSpareList.length; i++){ if (this.chooseSpareList[i].materialCode == e.materialCode) { this.chooseSpareList.splice(i,1); this.$message({ message: '删除成功!', type: 'success' }) } } }, // 选择备件-添加备件 addSpareList(e) { console.log("选择备件") console.log(e) for (let i = 0; i < this.chooseSpareList.length; i++){ if (this.chooseSpareList[i].materialCode == e.materialCode) { this.$message({ message: '不可重复添加!', type: 'warning' }) return; } } this.chooseSpareList.push(e); this.$message({ message: '添加成功!', type: 'success' }) }, // 改变巡检周期事件 changeArray(e) { console.log(e) console.log(this.form.planTimeArray) if (this.form.planLoop == null) { this.$message({ message: '请输入循环周期!', type: 'warning' }) this.form.planTimeArray = []; return } if (this.form.planLoopType == null) { this.$message({ message: '请选择循环类型!', type: 'warning' }) this.form.planTimeArray = []; return } // 检验 if (this.form.planLoopType == 'day') { // 计算日期差值(以毫秒为单位) let diff = this.form.planTimeArray[1].getTime() - this.form.planTimeArray[0].getTime(); // 转换为天数 let days = Math.floor(diff / (1000 * 60 * 60 * 24)); if (days > this.form.planLoop) { this.$message({ message: '可执行时间范围为' + days + '天,循环周期为' + days + '天,超过循环周期' + (days - this.form.planLoop) + '天,请重新选择执行时间!', type: 'warning' }) this.form.planTimeArray = []; return } } if (this.form.planLoopType == 'week') { // 计算日期差值(以毫秒为单位) let diff = this.form.planTimeArray[1].getTime() - this.form.planTimeArray[0].getTime(); // 转换为周数 let weeks = Math.floor(diff / (1000 * 60 * 60 * 24 * 7)); if (weeks > (this.form.planLoop / 7)) { this.$message({ message: '可执行时间范围为' + weeks + '周,循环周期为' + weeks + '周,超过循环周期' + (weeks * 7 - this.form.planLoop) + '天,请重新选择执行时间!', type: 'warning' }) this.form.planTimeArray = []; return } } if (this.form.planLoopType == 'month') { let monthsDiff = (this.form.planTimeArray[1].getFullYear() - this.form.planTimeArray[0].getFullYear()) * 12 + this.form.planTimeArray[1].getMonth() - this.form.planTimeArray[0].getMonth(); if (monthsDiff > this.form.planLoop) { this.$message({ message: '可执行时间范围为' + monthsDiff + '月,循环周期为' + monthsDiff + '月,超过循环周期' + (monthsDiff - this.form.planLoop) + '月,请重新选择执行时间!', type: 'warning' }) this.form.planTimeArray = []; return } } if (this.form.planLoopType == 'season') { let monthsDiff = (this.form.planTimeArray[1].getFullYear() - this.form.planTimeArray[0].getFullYear()) * 12 + this.form.planTimeArray[1].getMonth() - this.form.planTimeArray[0].getMonth(); if (monthsDiff * 3 > this.form.planLoop) { this.$message({ message: '可执行时间范围为' + monthsDiff * 3 + '季度,循环周期为' + monthsDiff * 3 + '季度,超过循环周期' + (monthsDiff - this.form.planLoop) + '月,请重新选择执行时间!', type: 'warning' }) this.form.planTimeArray = []; return } } if (this.form.planLoopType == 'year') { // 计算年份差值 let yearsDiff = this.form.planTimeArray[1].getFullYear() - this.form.planTimeArray[0].getFullYear(); if (yearsDiff > this.form.planLoop) { this.$message({ message: '可执行时间范围为' + yearsDiff + '年,循环周期为' + yearsDiff + '年,超过循环周期' + (yearsDiff - this.form.planLoop) + '年,请重新选择执行时间!', type: 'warning' }) this.form.planTimeArray = []; return } } }, // 选择备件确定按钮 confirmSelectSpareBtn() { console.log("点击了选择备件确定按钮") }, // 多选备件按钮 selectChangeSpare(e) { console.log("多选改变") console.log(e) this.selOnSpare = e; }, // 备件搜索重置按钮 resetSpare() { this.spareQuery = { materialCode: null, materialDesc: null, pageNum: 1, pageSize: 10, }; this.setSpareList(); console.log("点击了搜索重置按钮") }, // 获取备件信息 setSpareList() { querySpareList(this.spareQuery).then(response => { this.spareTotal = response.total; this.spareList = response.rows; this.spareLoading = false; console.log(response) }) }, // 搜索备件按钮 getSpareList() { this.setSpareList() console.log("点击了搜索备件按钮") }, // 选择备件按钮操作 selectSpareBtn(e) { console.log("点击了选择备件按钮!") console.log(e) this.setSpareList(); if (e.spareList == null) { e.spareList = []; } this.chooseSpareList = e.spareList; this.spareDialog = true; }, // 获取设备List-置入穿梭框信息 setPerson() { getPersonList().then(response => { for (let i = 0; i < response.data.length; i++) { this.personList.push({ label: response.data[i].nickName + '(' + response.data[i].userName + ')', key: response.data[i].userId, }) } }); }, // 巡检人员穿梭框 filterMethod(query, item) { return item.label.indexOf(query) > -1; }, // 获取工作中心 setWorkCenter() { getWorkCenter().then(response => { this.workCenterList = response.data; }) }, // 编辑标准确认按钮 standardBtn() { this.editorItem = false; }, // 删除标准 delStandard(e) { e.showFlag = false; for (let i = 0; i < this.itemDetailList.length; i++) { if (this.itemDetailList[i].detailCode == e.detailCode) { this.itemDetailList[i].showFlag = false; this.itemDetailList.splice(i, 1); } } }, // 点击编辑设备-巡检项目 editorTheItem(e) { // 清除缓存 this.itemDetailList = []; for (let i = 0; i < this.form.equipmentItem.length; i++) { if (e.code == this.form.equipmentItem[i].code) { for (let j = 0; j < this.form.equipmentItem[i].equPlanDetailList.length; j++) { var itemName = this.form.equipmentItem[i].equPlanDetailList[j].itemName; for (let k = 0; k < this.form.equipmentItem[i].equPlanDetailList[j].equPlanStandardList.length; k++){ this.form.equipmentItem[i].equPlanDetailList[j].equPlanStandardList[k].itemName = itemName; if (this.form.equipmentItem[i].equPlanDetailList[j].equPlanStandardList[k].standardType == "qualitative") { this.form.equipmentItem[i].equPlanDetailList[j].equPlanStandardList[k].standardTypeName = "定性"; }else { this.form.equipmentItem[i].equPlanDetailList[j].equPlanStandardList[k].standardTypeName = "定量"; } this.itemDetailList.push(this.form.equipmentItem[i].equPlanDetailList[j].equPlanStandardList[k]); } } } } this.editorItem = true; }, // 删除设备-巡检项 delTheEquItem(e) { this.form.equipmentItem.splice(e.equipmentCode, 1) }, // 选择设备确认按钮 confirmSelectEquBtn() { // 查询是否已经选择过 for (let i = 0; i < this.form.equipmentItem.length; i++) { for (let j = 0; j < this.selectEquList.length; j++) { if (this.form.equipmentItem[i].equipmentCode == this.selectEquList[j].equipmentCode) { this.$message({ message: "存在已选择的设备!", type: "warning" }) return } } } // 处理信息 formatEquItem(this.selectEquList).then(response => { for (let i = 0; i < response.data.length; i++) { this.form.equipmentItem.push(response.data[i]); } this.selectEqu = false; }) }, // 选择设备多选操作 selectChangeEqu(e) { this.selectEquList = e; }, // 获取设备信息 getEquList() { this.equLoading = true; this.equipmentQuery.workshopCode = this.form.planWorkshop; getEquList(this.equipmentQuery).then(response => { this.equTotal = response.total; this.queryEquipment = response.rows; this.equLoading = false; }) }, // 点击选择设备按钮 selectEquBtn() { this.getEquList(); this.selectEqu = true; }, // 上一步 stepLast() { this.upkeepSteps--; }, // 下一步 stepNext() { this.upkeepSteps++; }, /** 查询保养计划列表 */ getList() { this.loading = true; listUpkeepPlan(this.queryParams).then(response => { this.upkeepPlanList = response.rows; this.total = response.total; this.loading = false; }); }, // 取消按钮 cancel() { this.open = false; this.reset(); }, // 表单重置 reset() { this.form = { planId: null, planCode: null, planName: null, planWorkshop: null, planProdLine: null, equipmentName: null, equipmentCode: null, planLoop: null, planLoopType: 'day', planLoopStart: null, planLoopEnd: null, planPerson: null, planStatus: null, planRestrict: null, planType: 'maintenance', planOutsource: null, workCode: null, factoryCode: null, attr1: null, attr2: null, attr3: null, delFlag: null, createBy: null, createTime: null, updateBy: null, updateTime: null, upkeep: '1', calculationRule: '0', shutDown: '0', equipmentItem: [], personList:[], selectSpareList: [], planTimeArray:[], }; this.resetForm("form"); }, // 重置设备搜索 resetEqu() { this.equipmentQuery = { equipmentCode: null, equipmentName: null, workshopCode: null, pageNum: 1, pageSize: 10, }; this.getEquList(); }, /** 搜索按钮操作 */ handleQuery() { this.queryParams.pageNum = 1; this.getList(); }, /** 重置按钮操作 */ resetQuery() { this.resetForm("queryForm"); this.handleQuery(); }, // 多选框选中数据 handleSelectionChange(selection) { this.ids = selection.map(item => item.planId) this.single = selection.length !== 1 this.multiple = !selection.length }, /** 新增按钮操作 */ handleAdd() { this.reset(); // 清除缓存 this.resetQuery(); this.queryEquipment = []; this.upkeepSteps = 0; this.selectPersonList = []; this.personList = []; this.setPerson(); this.setWorkCenter(); this.open = true; this.title = "添加保养计划"; }, /** 修改按钮操作 */ handleUpdate(row) { this.reset(); // 清除缓存 this.queryEquipment = []; this.upkeepSteps = 0; this.selectPersonList = []; this.personList = []; this.setPerson(); this.setWorkCenter(); initUpdatePlanInfo(row).then(response => { this.form = response.data; console.log("这里!!!!") console.log(response.data) this.selectPersonList = response.data.personListVO; for (let i = 0; i < this.form.equipmentItem.length; i++) { if (this.form.equipmentItem[i].itemTempName == null) { this.form.equipmentItem[i].itemTempName = ''; } for (let j = 0; j < this.form.equipmentItem[i].equPlanDetailList.length; j++) { this.form.equipmentItem[i].itemTempName = this.form.equipmentItem[i].itemTempName + this.form.equipmentItem[i].equPlanDetailList[j].itemName + "," } } console.log("这里时修改前") console.log(this.form) this.open = true; this.title = "修改计划"; }) }, /** 提交按钮 */ submitForm() { this.$refs["form"].validate(valid => { if (valid) { if (this.form.planId != null) { this.form.personList = this.selectPersonList; console.log("这里时修改后") console.log(this.form) updateUpkeepPlan(this.form).then(response => { this.$modal.msgSuccess("修改成功"); this.open = false; this.getList(); }); } else { this.form.personList = this.selectPersonList; addUpkeepPlan(this.form).then(response => { this.$modal.msgSuccess("新增成功"); this.open = false; this.getList(); }); } } }); }, /** 删除按钮操作 */ handleDelete(row) { const planIds = row.planId || this.ids; this.$modal.confirm('是否确认删除保养计划编号为"' + planIds + '"的数据项?').then(function () { return delUpkeepPlan(planIds); }).then(() => { this.getList(); this.$modal.msgSuccess("删除成功"); }).catch(() => { }); }, /** 导出按钮操作 */ handleExport() { this.download('device/upkeepPlan/export', { ...this.queryParams }, `upkeepPlan_${new Date().getTime()}.xlsx`) } } }; </script> <style> .my-step-mar { margin-left: 10px; margin-right: 10px; } .my-step-body { margin-top: 15px; } .el-transfer-panel { width: 250px; } </style>