hdy
2024-03-22 4ca73594828312fba2fd60afaae3928981ca6701
提交 | 用户 | 时间
4ca735 1 <template>
H 2   <div class="app-container">
3     <el-card class="box-card">
4       <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
5         <el-form-item label="计划编号" prop="planCode">
6           <el-input
7             v-model="queryParams.planCode"
8             placeholder="请输入计划编号"
9             clearable
10             @keyup.enter.native="handleQuery"
11           />
12         </el-form-item>
13         <el-form-item label="计划名称" prop="planName">
14           <el-input
15             v-model="queryParams.planName"
16             placeholder="请输入计划名称"
17             clearable
18             @keyup.enter.native="handleQuery"
19           />
20         </el-form-item>
21         <el-form-item label="状态" prop="status">
22           <el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
23             <el-option
24               v-for="dict in dict.type.plan_status"
25               :key="dict.value"
26               :label="dict.label"
27               :value="dict.value"
28             />
29           </el-select>
30         </el-form-item>
31         <el-form-item label-width="130" label="开始时间" prop="startTime">
32           <el-date-picker
33             v-model="queryParams.startTime"
34             type="datetimerange"
35             value-format="yyyy-MM-dd HH:mm:ss"
36             range-separator="至"
37             start-placeholder="开始日期"
38             end-placeholder="结束日期"
39             align="right">
40           </el-date-picker>
41         </el-form-item>
42         <el-form-item style="float: right">
43           <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
44           <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
45         </el-form-item>
46       </el-form>
47     </el-card>
48
49     <el-card style="margin-top: 10px" class="box-card">
50       <el-row :gutter="10" class="mb8">
51         <el-col :span="1.5">
52           <el-button
53             type="primary"
54             plain
55             icon="el-icon-plus"
56             size="mini"
57             @click="handleAdd"
58             v-hasPermi="['em:inspectionPlan:add']"
59           >新增</el-button>
60         </el-col>
61         <el-col :span="1.5">
62           <el-button
63             type="success"
64             plain
65             icon="el-icon-edit"
66             size="mini"
67             :disabled="single"
68             @click="handleUpdate"
69             v-hasPermi="['em:inspectionPlan:edit']"
70           >修改</el-button>
71         </el-col>
72         <el-col :span="1.5">
73           <el-button
74             type="danger"
75             plain
76             icon="el-icon-delete"
77             size="mini"
78             :disabled="multiple"
79             @click="handleDelete"
80             v-hasPermi="['em:inspectionPlan:remove']"
81           >删除</el-button>
82         </el-col>
83         <el-col :span="1.5">
84           <el-button
85             type="warning"
86             plain
87             icon="el-icon-download"
88             size="mini"
89             @click="handleExport"
90             v-hasPermi="['em:inspectionPlan:export']"
91           >导出</el-button>
92         </el-col>
93         <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
94       </el-row>
95
96       <el-table border v-loading="loading" :data="inspectionPlanInfoList" @selection-change="handleSelectionChange" >
97         <el-table-column type="selection" width="55" align="center" />
98         <el-table-column label="计划名称" align="center" prop="planName">
99         </el-table-column>
100         <el-table-column label="计划编号" align="center" prop="planCode">
101         </el-table-column>
102         <el-table-column label="计划类型" align="center" prop="planType">
103           <template slot-scope="scope">
104             <dict-tag :options="dict.type.plan_type" :value="scope.row.planType"/>
105           </template>
106         </el-table-column>
107         <el-table-column label="频率" align="center" prop="frequency">
108         </el-table-column>
109         <el-table-column label="维度" align="center" prop="dimension">
110           <template slot-scope="scope">
111             <dict-tag :options="dict.type.dimension" :value="scope.row.dimension"/>
112           </template>
113         </el-table-column>
114         <el-table-column label="开始时间" align="center" prop="startTime">
115         </el-table-column>
116         <el-table-column label="结束时间" align="center" prop="endTime">
117         </el-table-column>
118         <el-table-column label="状态" align="center" prop="state">
119           <template slot-scope="scope">
120             <dict-tag :options="dict.type.plan_status" :value="scope.row.state"/>
121           </template>
122         </el-table-column>
123         <el-table-column label="上次生成时间" align="center" prop="lastGenerationTime">
124         </el-table-column>
125         <el-table-column label="备注" align="center" prop="remarks">
126         </el-table-column>
127         <el-table-column label="创建时间" align="center" prop="createTime">
128         </el-table-column>
129         <el-table-column label="创建人" align="center" prop="createUser">
130         </el-table-column>
131         <el-table-column label="修改时间" align="center" prop="updateTime">
132         </el-table-column>
133         <el-table-column label="修改人" align="center" prop="updateUser">
134         </el-table-column>
135       </el-table>
136     </el-card>
137
138     <pagination
139       v-show="total>0"
140       :total="total"
141       :page.sync="queryParams.pageNum"
142       :limit.sync="queryParams.pageSize"
143       @pagination="getList"
144     />
145
146     <!-- 添加或修改点检保养计划对话框 -->
147     <el-dialog v-dialogpop-up :title="title" :visible.sync="open" width="1200px" append-to-body>
148       <span slot="title">
149         <i class="el-icon-s-order"></i>
150         {{titleName}}
151       </span>
152       <el-form ref="form" inline :model="form" :rules="rules" label-width="80px" >
153         <el-form-item label="计划名称" prop="planName" >
154           <el-input style="width: 450px" v-model="form.planName" placeholder="请输入计划名称" />
155         </el-form-item>
156         <el-form-item label="计划编号" prop="planCode">
157           <el-input style="width: 450px" v-model="form.planCode" placeholder="请输入计划编号" />
158         </el-form-item>
159         <el-form-item label="状态" prop="state">
160           <el-radio-group style="width: 450px" v-model="form.status">
161             <el-radio
162               v-for="dict in dict.type.plan_status"
163               :key="dict.value"
164               :label="dict.value"
165             >{{dict.label}}</el-radio>
166           </el-radio-group>
167         </el-form-item>
168         <el-form-item label="计划类型" prop="state">
169           <el-radio-group style="width: 450px" v-model="form.planType">
170             <el-radio
171               v-for="dict in dict.type.plan_type"
172               :key="dict.value"
173               :label="dict.value"
174             >{{dict.label}}</el-radio>
175           </el-radio-group>
176         </el-form-item>
177         <el-form-item label="频率" prop="frequency">
178           <el-input style="width: 450px" v-model="form.frequency" placeholder="请输入频率" />
179         </el-form-item>
180         <el-form-item label="维度" prop="dimension">
181           <el-select v-model="form.dimension" placeholder="请选择维度" style="width: 450px">
182             <el-option
183               v-for="dict in dict.type.dimension"
184               :key="dict.value"
185               :label="dict.label"
186               :value="dict.value">
187             </el-option>
188           </el-select>
189         </el-form-item>
190         <el-form-item label="开始时间" prop="startTime">
191           <el-date-picker
192             style="width: 450px"
193             clearable
194             v-model="form.startTime"
195             type="date"
196             value-format="yyyy-MM-dd"
197             placeholder="请选择出站时间">
198           </el-date-picker>
199         </el-form-item>
200         <el-form-item label="结束时间" prop="endTime">
201           <el-date-picker
202             style="width: 450px"
203             clearable
204             v-model="form.endTime"
205             type="date"
206             value-format="yyyy-MM-dd"
207             placeholder="请选择出站时间">
208           </el-date-picker>
209         </el-form-item>
210         <el-form-item label="备注" prop="remarks">
211           <el-input style="width: 1000px" v-model="form.remarks" placeholder="请输入备注" />
212         </el-form-item>
213       </el-form>
214       <el-tabs type="border-card" >
215         <el-tab-pane label="设备清单" >
216           <Checkmachinery ref="machinerylist" :optType="optType" :id="form.id" @inSelected="onMachineryAdd"></Checkmachinery>
217         </el-tab-pane>
218         <el-tab-pane label="点检项目">
219           <Checksubject ref="subjectlist"   :optType="optType"  :id="form.id"  @subSelected="subMachineryAdd"></Checksubject>
220         </el-tab-pane>
221       </el-tabs>
222       <el-divider></el-divider>
223       <el-button type="primary" @click="submitForm">确 定</el-button>
224       <el-button @click="cancel">取 消</el-button>
225     </el-dialog>
226   </div>
227 </template>
228
229 <script>
230 import { listInspectionPlanInfo, getInspectionPlanInfo, delInspectionPlanInfo, addInspectionPlanInfo, updateInspectionPlanInfo } from "@/api/main/em/inspectionPlanInfo/inspectionPlanInfo";
231 import Checksubject from "@/views/main/em/inspectionPlanInfo/subject.vue";
232 import Checkmachinery from "@/views/main/em/inspectionPlanInfo/machinery.vue";
233
234 export default {
235   name: "InspectionPlanInfo",
236   dicts: ['plan_status','plan_type','dimension'],
237   components:{Checkmachinery,Checksubject},
238   data() {
239     return {
240       // 遮罩层
241       loading: true,
242       optType: null,
243       titleName: "",
244       // 选中数组
245       ids: [],
246       // 非单个禁用
247       single: true,
248       // 非多个禁用
249       multiple: true,
250       // 显示搜索条件
251       showSearch: true,
252       // 总条数
253       total: 0,
254       // 设备点检保养计划表格数据
255       inspectionPlanInfoList: [],
256       machineryList: [],
257       // 弹出层标题
258       title: "",
259       // 是否显示弹出层
260       open: false,
261       // 查询参数
262       queryParams: {
263         pageNum: 1,
264         pageSize: 10,
265         planCode: null,
266         planName: null,
267         planType: null,
268         state: null,
269         frequency: null,
270         dimension: null,
271         lastGenerationTime: null,
272         startTime: null,
273         endTime: null,
274         devices: null,
275         inspectionItems: null,
276         remarks: null,
277         createUser: null,
278         updateUser: null,
279         spareField1: null,
280         spareField2: null,
281         spareField3: null,
282         spareField4: null,
283         equipmentCode: null,
284         equipmentName: null,
285         equipmentBrand: null,
286         equipmentSpec: null,
287         itemsCode: null,
288         itemsName: null,
289         itemsType: null,
290         standard: null,
291         itemsContent: null
292       },
293       // 表单参数
294       form: {},
295       // 表单校验
296       rules: {
297         id: [
298           { required: true, message: "id不能为空", trigger: "blur" }
299         ],
300         planName: [
301           { required: true, message: "计划名称不能为空", trigger: "blur" }
302         ],
303         planCode: [
304           { required: true, message: "计划编号不能为空", trigger: "blur" }
305         ],
306         planType: [
307           { required: true, message: "计划类型不能为空", trigger: "blur" }
308         ],
309         dimension: [
310           { required: true, message: "维度不能为空", trigger: "blur" }
311         ],
312         frequency: [
313           { required: true, message: '频率不能为空', trigger: 'blur' },
314           {
315             validator: (rule, value, callback) => {
316               if (value === '' || value === undefined || value === null) {
317                 callback(new Error('频率不能为空'));
318               } else if (!Number.isInteger(Number(value))) {
319                 callback(new Error('频率必须是整数'));
320               } else {
321                 callback();
322               }
323             },
324             trigger: 'blur'
325           }
326         ],
327       },
328       pickerOptions: {
329         shortcuts: [{
330           text: '最近一周',
331           onClick(picker) {
332             const end = new Date();
333             const start = new Date();
334             start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
335             picker.$emit('pick', [start, end]);
336           },
337           class: 'custom-shortcut' // 添加class属性
338         }, {
339           text: '最近一个月',
340           onClick(picker) {
341             const end = new Date();
342             const start = new Date();
343             start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
344             picker.$emit('pick', [start, end]);
345           },
346           class: 'custom-shortcut' // 添加class属性
347         }, {
348           text: '最近三个月',
349           onClick(picker) {
350             const end = new Date();
351             const start = new Date();
352             start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
353             picker.$emit('pick', [start, end]);
354           },
355         }]
356       },
357     };
358   },
359   created() {
360     this.getList();
361   },
362   methods: {
363     /** 查询设备点检保养计划列表 */
364     getList() {
365       this.loading = true;
366       this.queryParams.spareField1 = 1;
367       listInspectionPlanInfo(this.queryParams).then(response => {
368         this.inspectionPlanInfoList = response.rows;
369         this.total = response.total;
370         this.loading = false;
371       });
372       console.log(this.queryParams.spareField1)
373     },
374     // 取消按钮
375     cancel() {
376       this.open = false;
377       this.reset();
378     },
379     // 表单重置
380     reset() {
381       this.form = {
382         id: null,
383         planCode: null,
384         planName: null,
385         planType: null,
386         state: null,
387         frequency: null,
388         dimension: null,
389         lastGenerationTime: null,
390         startTime: null,
391         endTime: null,
392         devices: null,
393         inspectionItems: null,
394         remarks: null,
395         createTime: null,
396         createUser: null,
397         updateTime: null,
398         updateUser: null,
399         spareField1: null,
400         spareField2: null,
401         spareField3: null,
402         spareField4: null,
403         equipmentCode: null,
404         equipmentName: null,
405         equipmentBrand: null,
406         equipmentSpec: null,
407         itemsCode: null,
408         itemsName: null,
409         itemsType: null,
410         standard: null,
411         itemsContent: null
412       };
413       this.resetForm("form");
414     },
415     /** 子表数据回传*/
416     onMachineryAdd(checkmachineryList){
417       if(checkmachineryList !=null && checkmachineryList.length >0){
418         this.machineryList = checkmachineryList
419         console.log(this.machineryList)
420       }
421     },
422     subMachineryAdd(checksubjectList){
423       if(checksubjectList !=null && checksubjectList.length >0){
424         this.subjectList = checksubjectList
425       }
426     },
427     /** 子表清单新增 */
428     checkAdd(){
429       for (let i = 0; i < this.machineryList.length; i++) {
430         this.machineryList[i].spareField2 = this.form.id
431         this.machineryList[i].spareField1 = '设备清单'
432         addInspectionPlanInfo(this.machineryList[i]).then(response =>{
433         });
434       }
435       for (let i = 0; i < this.subjectList.length; i++) {
436         this.subjectList[i].spareField2 = this.form.id
437         this.subjectList[i].spareField1 = '项目清单'
438         addInspectionPlanInfo(this.subjectList[i]).then(response =>{
439         });
440       }
441     },
442     /** 搜索按钮操作 */
443     handleQuery() {
444       this.queryParams.pageNum = 1;
445       this.getList();
446     },
447     /** 重置按钮操作 */
448     resetQuery() {
449       this.resetForm("queryForm");
450       this.handleQuery();
451     },
452     // 多选框选中数据
453     handleSelectionChange(selection) {
454       this.ids = selection.map(item => item.id)
455       this.single = selection.length!==1
456       this.multiple = !selection.length
457       console.log(this.ids)
458     },
459     /** 新增按钮操作 */
460     handleAdd() {
461       this.reset();
462       this.open = true;
463       this.optType = "add";
464       this.titleName = "添加设备点检保养计划";
465     },
466     /** 修改按钮操作 */
467     handleUpdate(row) {
468       this.reset();
469       const id = row.id || this.ids
470       getInspectionPlanInfo(id).then(response => {
471         this.form = response.data;
472         this.open = true;
473         this.optType = "edit";
474         this.titleName = "修改设备点检保养计划";
475       });
476     },
477     /** 提交按钮 */
478     submitForm() {
479       this.$refs["form"].validate(valid => {
480         if (valid) {
481           if (this.form.id != null) {
482             this.form.spareField1 =1;
483             updateInspectionPlanInfo(this.form).then(response => {
484               this.$modal.msgSuccess("修改成功");
485               this.open = false;
486               this.getList();
487             });
488             this.checkAdd()
489           } else {
490             this.form.spareField1 =1;
491             addInspectionPlanInfo(this.form).then(response => {
492               this.$modal.msgSuccess("新增成功");
493               this.open = false;
494               this.getList();
495             });
496             this.checkAdd()
497           }
498         }
499       });
500     },
501     /** 删除按钮操作 */
502     handleDelete(row) {
503       const ids = row.id || this.ids;
504       this.$modal.confirm('是否确认删除设备点检保养计划编号为"' + ids + '"的数据项?').then(function() {
505         return delInspectionPlanInfo(ids);
506       }).then(() => {
507         this.getList();
508         this.$modal.msgSuccess("删除成功");
509       }).catch(() => {});
510     },
511     /** 导出按钮操作 */
512     handleExport() {
513       this.download('em/inspectionPlanInfo/export', {
514         ...this.queryParams
515       }, `inspectionPlanInfo_${new Date().getTime()}.xlsx`)
516     }
517   }
518 };
519 </script>