index.vue 16.8 KB
Newer Older
1
<template>
yaqizhang's avatar
yaqizhang committed
2
  <div class="app-container div-container">
3
    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px">
4 5 6 7 8 9 10 11 12
      <el-form-item label="巡检计划名称" prop="planName">
        <el-input
          v-model="queryParams.planName"
          placeholder="请输入巡检计划名称"
          clearable
          size="small"
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
13
      <el-form-item label="计划状态" prop="planStatus">
王晓倩's avatar
王晓倩 committed
14
        <el-select v-model="queryParams.planStatus" placeholder="请选择计划状态" filterable clearable size="small">
15 16 17 18 19 20
          <el-option
            v-for="dict in typeOptions"
            :key="dict.dictValue"
            :label="dict.dictLabel"
            :value="dict.dictValue"
          ></el-option>
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
        </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="['deviceInspection:inspectionPlan:add']"
38 39
        >新增
        </el-button>
40 41 42 43
      </el-col>
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>

44
    <el-table v-loading="loading" :data="inspectionPlanList" @selection-change="handleSelectionChange">
45 46
      <el-table-column label="序号" type="index" align="center" prop="planName"/>
      <el-table-column label="巡检计划名称" align="center" prop="planName"/>
47
      <el-table-column label="计划时间" align="center" prop="startTime" width="280">
48
        <template slot-scope="scope">
49 50
          <span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d}') }}</span> 
          <span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d}') }}</span>
51 52
        </template>
      </el-table-column>
53
      <el-table-column label="地址" align="center" prop="address"/>
54 55
      <el-table-column label="计划描述" align="center" prop="remarks">
        <template slot-scope="scope">
56 57
          <span v-if="scope.row.remarks != null && scope.row.remarks != ''">{{ scope.row.remarks }}</span>
          <span v-if="scope.row.remarks == null || scope.row.remarks == ''">-</span>
58 59
        </template>
      </el-table-column>
60
      <el-table-column label="计划状态" align="center" prop="planStatus" width="200px">
61
        <template slot-scope="scope">
62 63
          <span v-if="scope.row.planStatus == 0">未生成工单</span>
          <span v-if="scope.row.planStatus == 1">已生成工单</span>
64 65
          <span v-if="scope.row.planStatus == 2">进行中</span>
          <span v-if="scope.row.planStatus == 3">已完成</span>
66 67
        </template>
      </el-table-column>
王晓倩's avatar
王晓倩 committed
68
      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="280px">
69 70
        <template slot-scope="scope">
          <el-button
71
            size="normal"
72 73
            type="text"
            icon="el-icon-edit"
74 75
            @click="handleIssue(scope.row)"
            v-hasPermi="['workOrder:basicsInfo:add']"
76
            v-if="scope.row.planStatus == 0"
77
          >生成工单
78
          </el-button>
79
          <el-button
80
            size="normal"
81 82 83 84 85
            type="text"
            icon="el-icon-edit"
            @click="handleUpdate(scope.row)"
            v-hasPermi="['deviceInspection:inspectionPlan:edit']"
            v-if="scope.row.planStatus == 0"
86 87 88 89 90 91 92
          >修改
          </el-button>
          <el-button
            size="normal"
            type="text"
            icon="el-icon-edit"
            @click="showDetail(scope.row)"
93
            v-hasPermi="['deviceInspection:inspectionPlan:query']"
94
          >详情</el-button>
95
          <el-button
96
            size="normal"
97 98
            type="text"
            icon="el-icon-delete"
99 100 101
            @click="handleIsDel(scope.row)"
            v-hasPermi="['deviceInspection:inspectionPlan:edit']"
            v-if="scope.row.planStatus == 0"
102 103
          >作废
          </el-button>
104 105 106
        </template>
      </el-table-column>
    </el-table>
107

108 109 110
    <pagination
      v-show="total>0"
      :total="total"
111 112
      :page.sync="queryParams.pageNum"
      :limit.sync="queryParams.pageSize"
113 114 115 116
      @pagination="getList"
    />

    <!-- 添加或修改巡检计划对话框 -->
117
    <el-dialog :title="title1" :visible.sync="open1" width="800px" append-to-body @close="cancel">
118
      <el-form ref="form1" :model="form1" :rules="rules1" label-width="120px">
119
        <el-col :span="23">
120
          <el-form-item label="巡检计划名称" prop="planName">
121
            <el-input v-model="form1.planName" placeholder="请输入巡检计划名称" style="width: 600px"/>
122
          </el-form-item>
123 124
        </el-col>
        <el-col :span="23">
125
          <el-form-item label="巡检设备" prop="devices">
126
            <el-cascader
127
              placeholder="请选择巡检设备"
128
              v-model="form1.devices"
129 130 131 132 133 134
              :options="options"
              :props="props"
              :show-all-levels="false"
              @change="handleChange"
              filterable
              clearable
135
              style="width: 600px"
136 137
            ></el-cascader>
          </el-form-item>
138 139
        </el-col>
        <el-col :span="12">
140 141
          <el-form-item label="开始时间" prop="startTime">
            <el-date-picker clearable size="small"
142
                            v-model="form1.startTime"
143 144 145 146 147
                            type="date"
                            value-format="yyyy-MM-dd HH:mm:ss"
                            placeholder="选择开始时间">
            </el-date-picker>
          </el-form-item>
148 149
        </el-col>
        <el-col :span="12">
150 151
          <el-form-item label="结束时间" prop="endTime">
            <el-date-picker clearable size="small"
152
                            v-model="form1.endTime"
153 154 155 156 157
                            type="date"
                            value-format="yyyy-MM-dd HH:mm:ss"
                            placeholder="选择结束时间">
            </el-date-picker>
          </el-form-item>
158 159
        </el-col>
        <el-col :span="23">
160
          <el-form-item label="地址" prop="address">
161
            <el-input v-model="form1.address" type="textarea" placeholder="请输入地址" style="width: 600px"/>
162
          </el-form-item>
163 164
        </el-col>
        <el-col :span="23">
165
          <el-form-item label="计划描述" prop="remarks">
166
            <el-input type="textarea" v-model="form1.remarks" placeholder="请输入计划描述" style="width: 600px"/>
167
          </el-form-item>
168
        </el-col>
169 170 171 172 173 174 175
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm1"> </el-button>
        <el-button @click="cancel"> </el-button>
      </div>
    </el-dialog>
    <el-dialog :title="title2" :visible.sync="open2" width="800px" append-to-body @close="cancel">
176
      <el-form ref="form2" :model="form2" :rules="rules2" label-width="130px">
177 178
          <el-form-item label="巡检计划名称">
            <font>{{form2.planName}}</font>
179 180
          </el-form-item>
          <el-form-item label="计划时间">
181 182
            <font>{{ parseTime(form2.startTime, '{y}-{m}-{d}') }} 
              {{ parseTime(form2.endTime, '{y}-{m}-{d}') }}</font>
183
          </el-form-item>
184
          <el-form-item label="地址">
185
            <font>{{form2.address}}</font>
186 187
          </el-form-item>
          <el-form-item label="工单名称" prop="orderName">
188
            <el-input v-model="form2.orderName" placeholder="请输入工单名称" style="width: 590px" />
189 190
          </el-form-item>
          <el-form-item label="指定执行人员" prop="appointInspector">
王晓倩's avatar
王晓倩 committed
191
            <el-select v-model="form2.appointInspector" placeholder="请选择执行人员" filterable clearable size="small" style="width: 590px" >
192 193 194 195 196 197 198 199 200
              <el-option
                v-for="item in inspector"
                :key="item.userId"
                :label="item.nickName"
                :value="item.userId"
              ></el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="工单描述" prop="remarks">
201
            <el-input type="textarea" v-model="form2.remarks" placeholder="请输入工单描述" style="width: 590px" />
202
          </el-form-item>
203 204
      </el-form>
      <div slot="footer" class="dialog-footer">
205
        <el-button type="primary" @click="submitForm2"> </el-button>
206 207 208 209 210 211 212
        <el-button @click="cancel"> </el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
213 214 215 216
  import { listInspectionPlan, getInspectionPlan, addInspectionPlan, updateInspectionPlan } from "@/api/deviceInspection/inspectionPlan";
  import { addBasicsInfo } from "@/api/workOrder/basicsInfo";
  import { inspectorList } from "@/api/system/user";
  import { deviceNodeTree } from "@/api/device/deviceInfo";
217

218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252
  export default {
    name: "InspectionPlan",
    components: {},
    data() {
      return {
        // 遮罩层
        loading: true,
        // 导出遮罩层
        exportLoading: false,
        // 选中数组
        ids: [],
        // 非单个禁用
        single: true,
        // 非多个禁用
        multiple: true,
        // 显示搜索条件
        showSearch: true,
        // 总条数
        total: 0,
        // 巡检计划表格数据
        inspectionPlanList: [],
        // 计划状态字典
        typeOptions: [],
        // 设备级联
        options: [],
        props: {
          multiple: true,
          value: "id",
          label: "name",
          level: "level",
          children: "childList",
        },
        // 巡检员列表
        inspector: [],
        // 弹出层标题
253 254 255 256 257
        title1: "",
        // 是否显示弹出层
        open1: false,
        // 弹出层标题
        title2: "",
258
        // 是否显示弹出层
259
        open2: false,
260 261
        // 查询参数
        queryParams: {
262 263
          pageNum: 1,
          pageSize: 10,
264 265 266 267 268 269 270
          planName: null,
          orderId: null,
          startTime: null,
          endTime: null,
          planStatus: null,
          remarks: null
        },
271
        // 巡检计划表单参数
272 273
        form1: {
        },
274 275
        // 工单表单参数
        form2: {  },
276
        // 表单校验
277
        rules1: {
278
          planName: [
王晓倩's avatar
王晓倩 committed
279
            { required: true, message: "请输入计划名称", trigger: "blur" }
280
          ],
281 282 283
          devices: [
            { required: true, message: "请选择巡检设备", trigger: "blur" }
          ],
王晓倩's avatar
王晓倩 committed
284
          startTime: [
285
            { required: true, message: "请选择开始时间", trigger: "blur" }
王晓倩's avatar
王晓倩 committed
286 287
          ],
          endTime: [
288
            { required: true, message: "请选择结束时间", trigger: "blur" }
王晓倩's avatar
王晓倩 committed
289
          ],
290 291 292
          address: [
            { required: true, message: "请输入地址", trigger: "blur" }
          ],
293 294 295 296 297
        },
        rules2: {
          orderName: [
            { required: true, message: "请输入工单名称", trigger: "blur" }
          ],
298 299 300
          appointInspector: [
            { required: true, message: "请选择巡检人员", trigger: "blur" }
          ],
301
        }
302 303
      };
    },
304
    created() {
305
      this.getList();
306 307
      this.getDicts("t_plan_status").then(response => {
        this.typeOptions = response.data;
308 309
      });
    },
310 311
    methods: {
      handleChange(value) {
王晓倩's avatar
王晓倩 committed
312
        console.log(this.form1.devices);
313 314 315 316 317 318 319 320 321 322 323 324 325
      },
      /** 查询巡检计划列表 */
      getList() {
        this.loading = true;
        listInspectionPlan(this.queryParams).then(response => {
          this.inspectionPlanList = response.rows;
          this.total = response.total;
          this.loading = false;
        });
      },
      /** 详细信息跳转 */
      showDetail(row) {
        this.$router.push({
yaqizhang's avatar
yaqizhang committed
326
          path: '/deviceInspection/inspectiondetail',
327
          query:{
328
            planId : row.planId
329
          }
330 331 332 333 334 335 336 337 338 339 340
        }) //带参跳转
      },
      getInspectorList(){
        this.loading = true;
        inspectorList().then(response => {
          this.inspector = response.data;
          this.loading = false;
        });
      },
      // 取消按钮
      cancel() {
341 342
        this.open1 = false;
        this.open2 = false;
343 344 345 346
        this.reset();
      },
      // 表单重置
      reset() {
347
        this.form1 = {
348 349 350 351 352
          planId: null,
          planName: null,
          orderId: null,
          startTime: null,
          endTime: null,
王晓倩's avatar
王晓倩 committed
353
          planStatus: null,
354 355 356 357
          updateTime: null,
          createTime: null,
          remarks: null
        };
358 359 360 361 362 363 364 365
        this.resetForm("form1");
        this.form2 = {
          planId: null,
          planName: null,
          orderId: null,
          orderName: null,
          startTime: null,
          endTime: null,
王晓倩's avatar
王晓倩 committed
366
          planStatus: null,
367 368 369 370 371 372
          appointInspector: null,
          updateTime: null,
          createTime: null,
          remarks: null
        };
        this.resetForm("form2");
373 374 375
      },
      /** 搜索按钮操作 */
      handleQuery() {
376
        this.queryParams.pageNum = 1;
377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394
        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();
        deviceNodeTree().then(response => {
          this.options = response.data;
395
          this.open1 = true;
王晓倩's avatar
王晓倩 committed
396
          this.title1 = "新增巡检计划";
397 398 399 400 401 402 403 404
        });
      },
      /** 下发按钮操作 */
      handleIssue(row) {
        this.reset();
        this.getInspectorList();
        const planId = row.planId || this.ids
        getInspectionPlan(planId).then(response => {
405
          this.form2 = response.data;
406
          this.form2.remarks = "";
407 408
          this.open2 = true;
          this.title2 = "填写工单信息";
409 410 411 412 413 414 415 416 417 418
        });
      },
      /** 修改按钮操作 */
      handleUpdate(row) {
        this.reset();
        deviceNodeTree().then(response => {
          this.options = response.data;
        });
        const planId = row.planId || this.ids
        getInspectionPlan(planId).then(response => {
419 420 421 422
          this.form1 = response.data;
          this.form1.devices = eval(this.form1.deviceIds);
          this.open1 = true;
          this.title1 = "修改巡检计划";
423 424
        });
      },
425 426 427
      /** 新增修改巡检计划提交按钮 */
      submitForm1() {
        this.$refs["form1"].validate(valid => {
428
          console.log("form1", this.$refs["form1"]);
429
          if (valid) {
430 431 432 433 434 435 436 437 438
            // 二维数组转字符串(处理设备级联选项的值)
            var arr = this.form1.devices;
            var arrLen = arr.length;
            var str = "[";
            for (var i = 0; i < arrLen; i++) {
              str += "[";
              for (var j = 0; j < arr[i].length; j++) {
                str += arr[i][j];
                if (j < arr[i].length - 1) {
439
                  str += ",";
440 441
                }
              }
442
              str += "]";
443 444 445
              if (i < arrLen - 1) {
                str += ",";
              }
446
            }
447 448
            str += "]";
            this.form1.deviceIds = str;
449

450 451
            if (this.title1 == "修改巡检计划") {
              updateInspectionPlan(this.form1).then(response => {
452
                this.msgSuccess("修改成功");
453
                this.open1 = false;
454 455
                this.getList();
              });
王晓倩's avatar
王晓倩 committed
456
            } else if (this.title1 == "新增巡检计划") {
457
              addInspectionPlan(this.form1).then(response => {
458
                this.msgSuccess("添加成功");
459
                this.open1 = false;
460 461 462 463 464 465
                this.getList();
              });
            }
          }
        });
      },
466 467 468 469 470 471 472 473 474 475 476 477 478 479
      /** 生成工单提交按钮 */
      submitForm2() {
        this.$refs["form2"].validate(valid => {
          if (valid) {
            this.form2.resourceId = this.form2.planId;
            this.form2.orderType = "1";
            addBasicsInfo(this.form2).then(response => {
              this.msgSuccess("生成工单成功");
              this.open2 = false;
              this.getList();
            });
          }
        });
      },
480 481 482
      /** 作废按钮操作 */
      handleIsDel(row) {
        row.isDel = "1";
483
        this.$confirm('是否确认作废巡检计划名称为"' + row.planName + '"的数据项?', "警告", {
484 485 486
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
487 488
        }).then(function () {
          return updateInspectionPlan(row);
489 490
        }).then(() => {
          this.getList();
491 492 493 494 495 496
          this.msgSuccess("已作废");
        }).catch(() => {
        });
      },
    }
  };
王晓倩's avatar
王晓倩 committed
497
</script>