From 2657ebf965f26c60f81640394771269716d5d6ca Mon Sep 17 00:00:00 2001
From: yangzhicheng <dayu123@qq.com>
Date: Fri, 12 Jul 2024 14:10:30 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E6=8C=89=E9=92=AE?=
 =?UTF-8?q?=E6=8C=89=E4=B8=8B=20=20check=E5=A4=84=E7=90=86=E4=BF=AE?=
 =?UTF-8?q?=E6=AD=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/views/inspection/inspectionrouteDetail.vue | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/src/views/inspection/inspectionrouteDetail.vue b/src/views/inspection/inspectionrouteDetail.vue
index 109c017..e530e50 100644
--- a/src/views/inspection/inspectionrouteDetail.vue
+++ b/src/views/inspection/inspectionrouteDetail.vue
@@ -157,17 +157,15 @@
     },
     methods: {
       handleFormSubmit() {
-        const form = this.$refs.form;
-        form.validate((valid) => {
+        this.$refs.form.validate((valid, done, msg) => {
           if (valid) {
+            done()
             this.Submit();
           } else {
-            this.$message({
-              type: "warning",
-              message: "请输入必要信息!"
-            });
+            console.log('error submit!!');
+            return false;
           }
-        });
+        })
       },
       // 处理表单提交
       Submit() {

From b53377de7ae369c566dff3653ae26065d75878d8 Mon Sep 17 00:00:00 2001
From: yangzhicheng <dayu123@qq.com>
Date: Fri, 12 Jul 2024 14:15:36 +0800
Subject: [PATCH 2/2] =?UTF-8?q?=E6=96=B0=E8=A7=84=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/api/inspection/inspectionplan.js          |  71 +++
 src/views/inspection/inspectionPlanDetail.vue | 301 +++++++++++++
 src/views/inspection/inspectionplan.vue       | 418 ++++++++++++++++++
 3 files changed, 790 insertions(+)
 create mode 100644 src/api/inspection/inspectionplan.js
 create mode 100644 src/views/inspection/inspectionPlanDetail.vue
 create mode 100644 src/views/inspection/inspectionplan.vue

diff --git a/src/api/inspection/inspectionplan.js b/src/api/inspection/inspectionplan.js
new file mode 100644
index 0000000..83bcfd5
--- /dev/null
+++ b/src/api/inspection/inspectionplan.js
@@ -0,0 +1,71 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/inspection/inspectionplan/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/inspection/inspectionplan/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/inspection/inspectionplan/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/inspection/inspectionplan/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/inspection/inspectionplan/update',
+    method: 'post',
+    data: row
+  })
+}
+
+export const takeEffect = (ids) => {
+  return request({
+    url: '/api/inspection/inspectionplan/takeEffect',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const lapse = (ids, reason) => {
+  return request({
+    url: '/api/inspection/inspectionplan/lapse',
+    method: 'post',
+    params: {
+      ids,
+      reason,
+    }
+  })
+}
+
diff --git a/src/views/inspection/inspectionPlanDetail.vue b/src/views/inspection/inspectionPlanDetail.vue
new file mode 100644
index 0000000..19dd42f
--- /dev/null
+++ b/src/views/inspection/inspectionPlanDetail.vue
@@ -0,0 +1,301 @@
+<template>
+  <basic-container>
+    <avue-form :option="option"
+               v-model="form"
+               ref="form"
+               :before-open="beforeOpen"
+               :class="frame_class">
+    </avue-form>
+    <div class="container">
+       <span >
+          <el-button type="primary"
+                     size="large"
+                     @click="handleFormSubmit"
+                     v-if="addUpdateShowButton">
+                     确定</el-button>
+         <el-button type="primary"
+                    size="small"
+                    @click="seachToUpdate"
+                    v-if="shouldShowButton">
+                      修改</el-button>
+       </span>
+    </div>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove, takeEffect, lapse} from "@/api/inspection/inspectionplan";
+  import {mapGetters} from "vuex";
+  import {getToken} from "@/util/auth";
+
+  export default {
+    name: "inspectionPlanDetail",
+    data() {
+      var validateTime = (rule, value, callback) => {
+        if (value === '') {
+          callback(new Error('请输入计划终了时间'));
+        } else if(this.form.startTime > value) {
+          callback(new Error('输入的计划起始时间大于计划终了时间'));
+        } else {
+          callback();
+        }
+      };
+      return {
+        addUpdateShowButton:{},
+        shouldShowButton:{},
+        readonlyForm:{},
+        frame_class: '',
+        form: {},
+        query: {},
+        option: {
+          submitBtn: false,
+          emptyBtn: false,
+          column: [
+            {
+              label: "计划编号",
+              prop: "planNo",
+              disabled: true,
+              span: 8,
+            },
+            {
+              label: "计划名称",
+              prop: "planName",
+              span: 8,
+              rules: [{
+                required: true,
+                message: "请输入计划名称",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "场站",
+              prop: "station",
+              type: "select",
+              span: 8,
+              dicUrl: "/api/daf-system/dict/dictionary?code=station",
+              props: {
+                label: "dictValue",
+                value: "dictKey"
+              },
+              rules: [{
+                required: true,
+                message: "请输入场站",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "计划类型",
+              prop: "planType",
+              span: 8,
+              rules: [{
+                required: true,
+                message: "请输入计划类型",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "周期类型",
+              prop: "periodType",
+              span: 8,
+              rules: [{
+                required: true,
+                message: "请输入周期类型",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "周期值",
+              prop: "periodValue",
+              span: 8,
+              rules: [{
+                required: true,
+                message: "请输入周期值",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "计划起始时间",
+              prop: "startTime",
+              span: 8,
+              type: "date",
+              labelWidth: 120,
+              format: 'yyyy年MM月dd日',
+              valueFormat: "yyyyMMdd",
+              rules: [{
+                required: true,
+                message: "请输入计划起始时间",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "计划终了时间",
+              prop: "endTime",
+              span: 8,
+              type: "date",
+              labelWidth: 120,
+              format: 'yyyy年MM月dd日',
+              valueFormat: "yyyyMMdd",
+              rules: [{ validator: validateTime, trigger: 'blur' }]
+            },
+            {
+              label: "状态",
+              prop: "planStatus",
+              span: 8,
+              type: "select",
+              dicUrl: "/api/daf-system/dict/dictionary?code=istatus",
+              props: {
+                label: "dictValue",
+                value: "dictKey"
+              },
+              rules: [{
+                required: true,
+                message: "请输入状态",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "取消原因",
+              prop: "cancelReason",
+              span: 8,
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+          // this.option.column = this.option.column.filter(v => {
+          //     return this.permission['inspectionroute_col_' + v.prop]
+          // })
+        return {
+          addBtn: false,
+          viewBtn: false,
+          delBtn: false,
+          editBtn: false
+        };
+      },
+    },
+    created () {
+      if(["view"].includes(this.$route.query.frameMode)){
+        this.readonlyForm = true;
+        this.addUpdateShowButton = false;
+        this.shouldShowButton=true;
+        this.frame_class = 'frame_class';
+      }else{
+        const planNo = this.findObject(this.option.column, "planNo");
+        planNo.value = ' ';
+        planNo.disabled = true;
+        const planStatus = this.findObject(this.option.column, "planStatus");
+        planStatus.display = false;
+        const cancelReason = this.findObject(this.option.column, "cancelReason");
+        cancelReason.display = false;
+        this.readonlyForm = false;
+        this.addUpdateShowButton = true;
+        this.shouldShowButton=false;
+        this.frame_class = null;
+      }
+      this.SearchDetail();
+    },
+    methods: {
+      handleFormSubmit() {
+        this.$refs.form.validate((valid, done, msg) => {
+          if (valid) {
+            done()
+            this.Submit();
+          } else {
+            console.log('error submit!!');
+            return false;
+          }
+        })
+      },
+      // 处理表单提交
+      Submit() {
+        if(this.$route.query.frameMode=="add"){
+          this.$confirm("是否新增所填数据?", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(() => {
+            add(this.form).then(()=>{
+              this.$router.push({
+                path: "/inspection/inspectionplan",
+                query: {
+                },
+              });
+              this.$message({
+                type: "success",
+                message: "操作成功!"
+              });
+            }).catch((error) => {
+              this.$message({
+                type: "error",
+                message: "操作失败!"
+              });
+            });
+          });
+        }else {
+          this.$confirm("是否修改所填数据?", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(() => {
+            update(this.form).then(() => {
+              this.$router.push({
+                path: "/inspection/inspectionplan",
+                query: {},
+              });
+              this.$message({
+                type: "success",
+                message: "操作成功!"
+              });
+            }).catch((error) => {
+              this.$message({
+                type: "error",
+                message: "操作失败!"
+              });
+            });
+          });
+        }
+      },
+      seachToUpdate () {
+        this.shouldShowButton=false;
+        this.addUpdateShowButton=true;
+        this.readonlyForm=false;
+        this.frame_class = null;
+      },
+      SearchDetail() {
+        if (["view"].includes(this.$route.query.frameMode)) {
+          getDetail(this.$route.query.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+    }
+  };
+</script>
+
+<style>
+.frame_class input.el-input__inner {
+  border: none;
+  box-shadow: none;
+  outline: none;
+  pointer-events: none;
+}
+.frame_class .el-input__icon {
+  display: none;
+}
+.frame_class .el-input--prefix .el-input__inner {
+  padding-left: 15px;
+}
+.frame_class input::placeholder {
+  color: transparent;
+  display: none; /* 默认隐藏 */
+}
+.container {
+  display: flex;
+  justify-content: flex-end; /* 将子元素推到容器的末端 */
+}
+</style>
diff --git a/src/views/inspection/inspectionplan.vue b/src/views/inspection/inspectionplan.vue
new file mode 100644
index 0000000..69bbd95
--- /dev/null
+++ b/src/views/inspection/inspectionplan.vue
@@ -0,0 +1,418 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               :search.sync="search"
+               :header-cell-class-name="headerClass"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.inspectionroute_delete"
+                   @click="handleDelete">批量删除
+        </el-button>
+      </template>
+      <template slot="menuRight">
+        <el-button type="primary"
+                   size="small"
+                   v-if="permission.inspectionroute_add"
+                   plain
+                   @click="handleDetailAdd">新增
+        </el-button>
+        <el-button type="primary"
+                   size="small"
+                   plain
+                   @click="handleTakeEffect">生效
+        </el-button>
+        <el-button type="primary"
+                   size="small"
+                   plain
+                   @click="handleLapse">失效
+        </el-button>
+        <el-button type="primary"
+                   size="small"
+                   plain
+                   @click="handleExport">导出
+        </el-button>
+      </template>
+      <template #menu="{row,index,size}">
+        <el-button v-if="permission.inspectionroute_view" @click="handleDetailSearch(row,index)" type="text">查看</el-button>
+        <el-button v-if="permission.inspectionroute_delete" @click="rowDel(row)" type="text">删除</el-button>
+      </template>
+    </avue-crud>
+    <el-dialog title="失效"
+               append-to-body
+               :visible.sync="cancelBox"
+               width="555px">
+      <avue-form :option="cancelOption" v-model="cancelForm" ref="cancelForm">
+      </avue-form>
+      <div class="container">
+         <span>
+            <el-button type="primary"
+                       size="small"
+                       plain
+                       @click="handleDetailCancel">失效
+            </el-button>
+         </span>
+      </div>
+    </el-dialog>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove, takeEffect, lapse} from "@/api/inspection/inspectionplan";
+  import {mapGetters} from "vuex";
+  import expUtil from "@/util/exportUtil";
+  import {getToken} from "@/util/auth";
+
+  export default {
+    data() {
+      return {
+        form: {},
+        search:{},
+        query: {},
+        loading: true,
+        cancelBox: false,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          height: 'auto',
+          calcHeight: 210,
+          searchShow: true,
+          searchMenuSpan: 6,
+          tip: false,
+          border: true,
+          index: false,
+          viewBtn: true,
+          selection: true,
+          searchBtnText: '查询',
+          emptyBtnText: '重置',
+          column: [
+            {
+              label: "计划编号",
+              prop: "planNo",
+              search: true
+            },
+            {
+              label: "计划名称",
+              prop: "planName",
+              search: true
+            },
+            {
+              label: "场站",
+              prop: "station",
+              type: "select",
+              search: true,
+              dicUrl: "/api/daf-system/dict/dictionary?code=station",
+              props: {
+                label: "dictValue",
+                value: "dictKey"
+              }
+            },
+            {
+              label: "计划类型",
+              prop: "planType"
+            },
+            {
+              label: "周期类型",
+              prop: "periodType",
+              search: true
+            },
+            {
+              label: "周期值",
+              prop: "periodValue"
+            },
+            {
+              label: "计划起始时间",
+              prop: "startTime",
+              type: "date",
+              format: 'yyyy年MM月dd日',
+              valueFormat: "yyyyMMdd",
+            },
+            {
+              label: "计划终了时间",
+              prop: "endTime",
+              type: "date",
+              format: 'yyyy年MM月dd日',
+              valueFormat: "yyyyMMdd",
+            },
+            {
+              label: "计划状态",
+              prop: "planStatus",
+              type: "select",
+              search: true,
+              dicUrl: "/api/daf-system/dict/dictionary?code=istatus",
+              props: {
+                label: "dictValue",
+                value: "dictKey"
+              }
+            },
+            {
+              label: "取消原因",
+              prop: "cancelReason"
+            },
+          ]
+        },
+        cancelForm: {},
+        cancelOption: {
+          height: 'auto',
+          calcHeight: 210,
+          emptyBtn:false,
+          submitBtn:false,
+          tip: false,
+          border: true,
+          index: false,
+          selection: true,
+          column: [
+            {
+              label: "取消原因",
+              type: "textarea",
+              prop: "cancelReason",
+              span: 24
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+          // this.option.column = this.option.column.filter(v => {
+          //     return this.permission['inspectionplan_col_' + v.prop]
+          // })
+        return {
+          addBtn: false,
+          viewBtn: false,
+          delBtn: false,
+          editBtn: false
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          done();
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+        }, error => {
+          window.console.log(error);
+          loading();
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          done();
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+        }, error => {
+          window.console.log(error);
+          loading();
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      handleDetailAdd() {
+        this.$router.push({
+          path: "/inspection/inspectionPlanDetail",
+          query: {
+            frameMode:"add"
+          },
+        });
+      },
+      handleDetailSearch(row) {
+        debugger
+        this.$router.push({
+          path: "/inspection/inspectionPlanDetail",
+          query: {
+            frameMode:"view",
+            id: row.id
+          },
+        });
+      },
+      handleTakeEffect() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("是否将选择数据改为生效状态?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return takeEffect(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      handleLapse() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.cancelBox = true;
+      },
+      handleDetailCancel() {
+        this.$confirm("是否将选择数据改为失效状态?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return lapse(this.ids, this.cancelForm.cancelReason);
+          })
+          .then(() => {
+            this.cancelForm.cancelReason = '';
+            this.cancelBox = false;
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection()
+          });
+      },
+      handleExport() {
+        this.$confirm("是否导出数据?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          expUtil.excelExport(`/api/inspection/inspectionplan/export?daf-auth=${getToken()}`, this.search, ['station', "planStatus"]);
+        });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      },
+      headerClass() {
+        return 'header-class'
+      }
+    }
+  };
+</script>
+
+<style>
+.header-class{
+  background-color: #3366cc !important;
+  color: #FFFFFF !important;
+}
+.container {
+  display: flex;
+  justify-content: flex-end; /* 将子元素推到容器的末端 */
+}
+</style>