Forráskód Böngészése

Merge branch 'dev' of http://110.41.163.243:9980/kd-aiot/kd-aiot-frontend into dev

ysy 2 éve
szülő
commit
3ff6eb6c99

+ 1 - 0
src/components/addPatrolConfigDialog/index.vue

@@ -634,6 +634,7 @@
 
       // 分类树的选择
       chooseClassify(val) {
+        this.clickedTreeNode = true;
         const id = this.findTopLevelAncestorId(this.rootData, val);
         this.rootId = id;
         this._getEquipmentList(val, this.isBindPlan);

+ 6 - 3
src/components/addSpareDialog/index.vue

@@ -24,6 +24,7 @@
           :type="'7'"
           :paramsType="'type'"
           ref="treeList"
+          id="6"
         />
       </el-col>
       <el-col :span="18">
@@ -61,7 +62,8 @@
 
 <script>
   import AssetTree from '@/components/AssetTree';
-  import { getCategoryList } from '@/api/ledgerAssets';
+  // import { getCategoryList } from '@/api/ledgerAssets';
+  import { getList } from '@/api/classifyManage/itemInformation';
   export default {
     components: {
       // CommonTree,
@@ -141,13 +143,14 @@
 
       // 获取添加备件弹窗表格数据
       async _getClassificationSpareList(data) {
+        console.log(1);
         this.tableLoading = true;
         let params = {
           page: 1,
-          size: 99999,
+          size: 10,
           categoryLevelId: this.currentTreeData.id
         };
-        const res = await getCategoryList(params);
+        const res = await getList(params);
         console.log('res', res);
         this.tableLoading = false;
         if (res.list.length) {

+ 146 - 0
src/views/rulesManagement/inspectionPoint/components/patrol-search.vue

@@ -0,0 +1,146 @@
+<!-- 搜索表单 -->
+<template>
+  <el-form
+    label-width="100px"
+    class="ele-form-search"
+    @keyup.enter.native="search"
+    @submit.native.prevent
+  >
+    <el-row :gutter="15">
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="计划配置单号:">
+          <el-input clearable v-model="where.code" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="规则名称:">
+          <el-input clearable v-model="where.ruleName" placeholder="请输入" />
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="计划配置名称:">
+          <el-input clearable v-model="where.name" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="状态:">
+          <DictSelection dictName="规则状态" clearable v-model="where.status">
+          </DictSelection>
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="巡点检部门:">
+          <deptSelect v-model="where.groupId" />
+        </el-form-item>
+        <el-form-item label="创建时间:">
+          <el-date-picker
+            v-model="time"
+            type="daterange"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            :default-time="['00:00:00', '23:59:59']"
+          >
+          </el-date-picker>
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="设备分类:">
+          <equipmentSelect v-model="where.categoryLevelId" />
+        </el-form-item>
+        <div class="ele-form-actions">
+          <el-button
+            type="primary"
+            icon="el-icon-search"
+            class="ele-btn-icon"
+            @click="search"
+            size="small"
+          >
+            查询
+          </el-button>
+          <el-button
+            @click="reset"
+            icon="el-icon-refresh-left"
+            size="small"
+            type="primary"
+            >重置</el-button
+          >
+        </div>
+      </el-col>
+    </el-row>
+  </el-form>
+</template>
+
+<script>
+  import { login } from '@/api/login';
+  // import {  listOrganizations } from '@/api/system/organization';
+  import equipmentSelect from '@/components/CommomSelect/equipment-select.vue';
+  import deptSelect from '@/components/CommomSelect/dept-select.vue';
+  export default {
+    components: { equipmentSelect, deptSelect },
+    data() {
+      // 默认表单数据
+      const defaultWhere = {
+        name: '',
+        code: '',
+        groupId: '',
+        status: '',
+        ruleName: '',
+        startTime: '',
+        endTime: '',
+        categoryLevelId: ''
+      };
+      return {
+        // 表单数据
+        where: { ...defaultWhere },
+        // deptData:[],   //部门树
+        time: []
+      };
+    },
+    computed: {
+      // 是否开启响应式布局
+      styleResponsive() {
+        return this.$store.state.theme.styleResponsive;
+      }
+    },
+    created() {
+      // this.getDeptList()
+    },
+    methods: {
+      /* 搜索 */
+      search() {
+        if (this.time != null && this.time.length) {
+          this.where.startTime = this.time[0];
+          this.where.endTime = this.time[1];
+        }
+        if (this.time == null) {
+          this.where.startTime = '';
+          this.where.endTime = '';
+        }
+        this.$emit('search', this.where);
+      },
+      /*  重置 */
+      reset() {
+        this.time = [];
+        this.where = { ...this.defaultWhere };
+        this.search();
+      }
+
+      // 获取部门列表数据
+      // async getDeptList () {
+      //   try {
+      //     let list = await listOrganizations()
+      //     this.deptData = this.$util.toTreeData({
+      // 		  data: list,
+      // 		  idField: 'id',
+      // 		  parentIdField: 'parentId'
+      //     });
+      //   } catch (error) {}
+      // },
+    }
+  };
+</script>
+<style lang="scss" scoped>
+  .ele-form-actions {
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+</style>

+ 262 - 0
src/views/rulesManagement/inspectionPoint/detail.vue

@@ -0,0 +1,262 @@
+<template>
+  <div class="patrol_config_detail" v-loading="detailsLoading">
+    <div class="main_content">
+      <!-- 基本信息 -->
+      <div class="base_info">
+        <HeaderTitle title="基本信息" size="16px"></HeaderTitle>
+        <el-row class="base_info_content">
+          <el-col :span="6">
+            <span>计划单号:</span>
+            <span>{{ detailsForm.code }}</span>
+          </el-col>
+          <el-col :span="6">
+            <span>巡点检名称:</span>
+            <span>{{ detailsForm.name }}</span>
+          </el-col>
+          <el-col :span="6">
+            <span>巡点检部门:</span>
+            <span>{{ detailsForm.groupName }}</span>
+          </el-col>
+          <el-col :span="6">
+            <span>:</span>
+            <span>{{ detailsForm.executorName }}</span>
+          </el-col>
+          <el-col :span="6">
+            <span>计划完成时长:</span>
+            <span>{{ detailsForm.duration }}分钟</span>
+          </el-col>
+          <el-col :span="6">
+            <span>设备分类:</span>
+            <span>{{ detailsForm.categoryName }}</span>
+          </el-col>
+          <el-col :span="6">
+            <span>规则名称:</span>
+            <span>{{ detailsForm.ruleName }}</span>
+          </el-col>
+          <!--          <el-col :span="6">
+            <span>创建部门:</span>
+            <span>{{ detailsForm.createOrgName }}</span>
+          </el-col> -->
+          <el-col :span="6">
+            <span>创建人:</span>
+            <span>{{ detailsForm.createUserName }}</span>
+          </el-col>
+          <el-col :span="6">
+            <span>创建时间:</span>
+            <span>{{ detailsForm.createTime }}</span>
+          </el-col>
+          <el-col :span="6">
+            <span>审核人:</span>
+            <span>{{ detailsForm.approvalUserName }}</span>
+          </el-col>
+          <el-col :span="24">
+            <span>备注:</span>
+            <span>{{ detailsForm.remark }}</span>
+          </el-col>
+        </el-row>
+      </div>
+      <!-- 巡点检设备 -->
+      <div class="patrol_equipment_info">
+        <HeaderTitle title="巡点检设备" size="16px"></HeaderTitle>
+        <div class="patrol_equipment_info_content">
+          <div
+            class="equipment_item"
+            v-for="item in detailsForm.deviceInfo"
+            :key="item.id"
+          >
+            <div class="equipment_info">
+              <div class="item_info">
+                <span class="item_label">设备编码</span>
+                <span class="item_value">{{ item.substance.code }}</span>
+              </div>
+              <div class="item_info">
+                <span class="item_label">设备名称</span>
+                <span class="item_value">{{ item.substance.name }}</span>
+              </div>
+              <div class="item_info">
+                <span class="item_label">设备型号</span>
+                <span class="item_value">{{ item.substance.model }}</span>
+              </div>
+              <div class="item_info">
+                <span class="item_label">设备位置</span>
+                <span class="item_value">{{
+                  item.substance.positionNames
+                }}</span>
+              </div>
+            </div>
+            <p>操作事项</p>
+            <div class="matter_info">
+              <el-table :data="matterRulesList" border>
+                <el-table-column label="序号" align="center" width="80">
+                  <template slot-scope="scope">
+                    <span>{{ scope.$index + 1 }}</span>
+                  </template>
+                </el-table-column>
+                <el-table-column label="事项" prop="name" />
+                <el-table-column label="内容" prop="content" />
+                <el-table-column label="标准" prop="norm" />
+              </el-table>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+  import { getInfoById } from '@/api/ruleManagement/plan';
+  import { getDetail } from '@/api/ruleManagement/matter';
+  export default {
+    name: 'patrolConfigDetail',
+    data() {
+      return {
+        detailsLoading: false,
+        detailsForm: {},
+        matterRulesList: []
+      };
+    },
+    mounted() {
+      this.getDetailsData(this.$route.query.id);
+    },
+    computed: {},
+    methods: {
+      // 获取详情数据
+      async getDetailsData(id) {
+        this.detailsLoading = true;
+        getInfoById(id)
+          .then((res) => {
+            this.detailsLoading = false;
+            console.log('====res', res);
+            this.detailsForm = res;
+            let arr = [];
+            res.execute.map((item) => {
+              arr.push(item.userName);
+            });
+            this.$set(this.detailsForm, 'executorName', arr.join(','));
+            this._getMatterRulesDetails(res.ruleId);
+          })
+          .catch(() => {
+            this.detailsLoading = false;
+          });
+      },
+
+      // 封装 - 获取规则下面的详情数据及事项
+      async _getMatterRulesDetails(val) {
+        const res = await getDetail(val);
+        this.matterRulesList = res.ruleItems;
+      }
+    }
+  };
+</script>
+
+<style lang="scss" scoped>
+  .patrol_config_detail {
+    padding: 5px 0;
+    .detail_title {
+      display: flex;
+      height: 40px;
+      align-items: center;
+      justify-content: space-between;
+      > span {
+        background-color: #fff;
+        line-height: 40px;
+        width: 90px;
+        text-align: center;
+        border-top: 4px solid #157a2c;
+      }
+    }
+    .main_content {
+      background-color: #fff;
+      padding: 20px 40px;
+      .base_info {
+        .base_info_title {
+          border-bottom: 1px solid #1890ff;
+          padding-bottom: 3px;
+          margin-bottom: 20px;
+          > span {
+            display: inline-block;
+            line-height: 16px;
+            border-left: 6px solid #1890ff;
+            padding-left: 6px;
+          }
+        }
+        .base_info_content {
+          padding: 0 60px;
+          font-size: 14px;
+          ::v-deep .el-col {
+            margin-bottom: 20px;
+            > span:first-child {
+              font-weight: 700;
+            }
+          }
+        }
+      }
+      .patrol_equipment_info {
+        .patrol_equipment_info_title {
+          border-bottom: 1px solid #1890ff;
+          padding-bottom: 3px;
+          margin-bottom: 20px;
+          > span {
+            display: inline-block;
+            line-height: 16px;
+            border-left: 6px solid #1890ff;
+            padding-left: 6px;
+          }
+        }
+        .patrol_equipment_info_content {
+          padding: 0 30px;
+          .equipment_item {
+            border: 1px solid #ccc;
+            font-size: 14px;
+            padding: 15px;
+            margin-bottom: 30px;
+            .equipment_info {
+              display: flex;
+              flex-wrap: wrap;
+              border: 1px solid #ddd;
+              .item_info {
+                width: 33.33%;
+                height: 24px;
+                line-height: 24px;
+                display: flex;
+                .item_label {
+                  width: 90px;
+                  text-align: center;
+                  background-color: #f2f2f2;
+                  font-weight: 700;
+                }
+                .item_value {
+                  border-bottom: 1px solid #f2f2f2;
+                  flex: 1;
+                  padding-left: 5px;
+                }
+                &:last-child {
+                  width: 100%;
+                  .item_value {
+                    border: 0;
+                  }
+                }
+              }
+            }
+            > p {
+              margin-top: 20px;
+              color: #797979;
+            }
+            .matter_info {
+              ::v-deep .el-table {
+                th.el-table__cell {
+                  background-color: #f2f2f2;
+                  padding: 0;
+                }
+                td.el-table__cell {
+                  padding: 0;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+</style>

+ 233 - 0
src/views/rulesManagement/inspectionPoint/index.vue

@@ -0,0 +1,233 @@
+<template>
+  <div class="ele-body">
+    <el-card shadow="never" v-loading="loading">
+      <patrol-search @search="reload"> </patrol-search>
+      <!-- 数据表格 -->
+      <ele-pro-table
+        ref="table"
+        :columns="columns"
+        :datasource="datasource"
+        cache-key="systemRoleTable"
+      >
+        <!-- 表头工具栏 -->
+        <template v-slot:toolbar>
+          <el-button
+            size="small"
+            type="primary"
+            icon="el-icon-plus"
+            class="ele-btn-icon"
+            @click="openEdit()"
+          >
+            新建
+          </el-button>
+        </template>
+        <template v-slot:code="{ row }">
+          <el-link type="primary" :underline="false" @click="goDetail(row)">
+            {{ row.code }}
+          </el-link>
+        </template>
+        <!-- 操作列 -->
+        <template v-slot:action="{ row }">
+          <el-link
+            type="primary"
+            :underline="false"
+            icon="el-icon-edit"
+            @click="openEdit(row)"
+          >
+            修改
+          </el-link>
+          <el-popconfirm
+            class="ele-action"
+            title="确定要删除此巡检点配置吗?"
+            @confirm="remove(row)"
+          >
+            <template v-slot:reference>
+              <el-link type="danger" :underline="false" icon="el-icon-delete">
+                删除
+              </el-link>
+            </template>
+          </el-popconfirm>
+        </template>
+      </ele-pro-table>
+    </el-card>
+
+    <!-- 新建或编辑弹窗 -->
+    <AddPatrolConfigDialog
+      ref="addPatrolConfigDialogRef"
+      :dialogTitle="dialogTitle"
+      :isBindPlan="isBindPlan"
+      @done="reload"
+    />
+  </div>
+</template>
+
+<script>
+  import AddPatrolConfigDialog from '@/components/addPatrolConfigDialog';
+  import PatrolSearch from './components/patrol-search.vue';
+  import { planConfigPage, removeRule } from '@/api/ruleManagement/plan';
+  import dictMixins from '@/mixins/dictMixins';
+  export default {
+    mixins: [dictMixins],
+    components: {
+      PatrolSearch,
+      AddPatrolConfigDialog
+    },
+    data() {
+      return {
+        // 表格列配置
+        columns: [
+          {
+            columnKey: 'index',
+            label: '序号',
+            type: 'index',
+            width: 55,
+            align: 'center',
+            showOverflowTooltip: true,
+            fixed: 'left'
+          },
+          {
+            prop: 'code',
+            label: '计划配置单号',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110,
+            slot: 'code'
+          },
+          {
+            prop: 'name',
+            label: '计划配置名称',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'groupName',
+            label: '巡点检部门',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'categoryName',
+            label: '设备分类',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'ruleName',
+            label: '规则名称',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'autoOrder',
+            label: '自动派单',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110,
+            formatter: (_row, _column, cellValue) => {
+              let autoOrder =
+                _row.autoOrder == 1 ? '是' : _row.autoOrder == 0 ? '否' : '-';
+              return autoOrder;
+            }
+          },
+          {
+            prop: 'status',
+            label: '状态',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110,
+            formatter: (_row, _column, cellValue) => {
+              return this.getDictValue('规则状态', _row.status);
+            }
+          },
+          {
+            prop: 'createUserName',
+            label: '创建人',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'createTime',
+            label: '创建时间',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110,
+            formatter: (_row, _column, cellValue) => {
+              return this.$util.toDateString(cellValue);
+            }
+          },
+          {
+            columnKey: 'action',
+            label: '操作',
+            width: 150,
+            align: 'center',
+            resizable: false,
+            slot: 'action',
+            showOverflowTooltip: true
+          }
+        ],
+        // 加载状态
+        loading: false,
+        pageType: 'add',
+        dialogTitle: '',
+        isBindPlan: false
+      };
+    },
+    computed: {},
+    created() {
+      this.requestDict('规则状态');
+    },
+    methods: {
+      /* 表格数据源 */
+      datasource({ page, limit, where, order }) {
+        return planConfigPage({
+          pageNum: page,
+          size: limit,
+          ...where,
+          groupId: where.groupId == null ? '' : where.groupId,
+          categoryLevelId:
+            where.categoryLevelId == null ? '' : where.categoryLevelId,
+          ruleType: 1
+        });
+      },
+
+      /* 刷新表格 */
+      reload(where) {
+        this.$refs.table.reload({ page: 1, where, ruleType: 1 });
+      },
+
+      openEdit(row) {
+        this.isBindPlan = false;
+        this.$refs.addPatrolConfigDialogRef.addPatrolConfigDialog = true;
+        if (row) {
+          this.dialogTitle = '编辑巡点检计划配置';
+        } else {
+          this.dialogTitle = '新增巡点检计划配置';
+        }
+        this.$refs.addPatrolConfigDialogRef.init(row, '巡点检');
+      },
+
+      remove(row) {
+        removeRule([row.id]).then((res) => {
+          this.$message.success('删除成功!');
+          this.reload();
+        });
+      },
+
+      goDetail({ id }) {
+        this.$router.push({
+          path: '/rulesManagement/inspectionPoint/detail',
+          query: {
+            id
+          }
+        });
+      }
+    }
+  };
+</script>
+
+<style lang="scss" scoped></style>

+ 128 - 0
src/views/rulesManagement/maintenance/components/maintain-search.vue

@@ -0,0 +1,128 @@
+<!-- 搜索表单 -->
+<template>
+  <el-form
+    label-width="100px"
+    class="ele-form-search"
+    @keyup.enter.native="search"
+    @submit.native.prevent
+  >
+    <el-row :gutter="15">
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="计划配置单号:">
+          <el-input clearable v-model="where.code" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="规则名称:">
+          <el-input clearable v-model="where.ruleName" placeholder="请输入" />
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="计划配置名称:">
+          <el-input clearable v-model="where.name" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="状态:">
+          <DictSelection dictName="规则状态" clearable v-model="where.status">
+          </DictSelection>
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="执行部门:">
+          <deptSelect v-model="where.groupId" />
+        </el-form-item>
+        <el-form-item label="创建时间:">
+          <el-date-picker
+            v-model="time"
+            type="daterange"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            :default-time="['00:00:00', '23:59:59']"
+          >
+          </el-date-picker>
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="设备分类:">
+          <equipmentSelect v-model="where.categoryLevelId" />
+        </el-form-item>
+        <div class="ele-form-actions">
+          <el-button
+            type="primary"
+            icon="el-icon-search"
+            class="ele-btn-icon"
+            @click="search"
+            size="small"
+          >
+            查询
+          </el-button>
+          <el-button
+            @click="reset"
+            icon="el-icon-refresh-left"
+            size="small"
+            type="primary"
+            >重置</el-button
+          >
+        </div>
+      </el-col>
+    </el-row>
+  </el-form>
+</template>
+
+<script>
+  import { login } from '@/api/login';
+  import equipmentSelect from '@/components/CommomSelect/equipment-select.vue';
+  import deptSelect from '@/components/CommomSelect/dept-select.vue';
+  export default {
+    components: { equipmentSelect, deptSelect },
+    data() {
+      // 默认表单数据
+      const defaultWhere = {
+        name: '',
+        ruleName: '',
+        code: '',
+        groupId: '',
+        status: '',
+        categoryLevelId: ''
+      };
+      return {
+        // 表单数据
+        where: { ...defaultWhere },
+        time: []
+      };
+    },
+    computed: {
+      // 是否开启响应式布局
+      styleResponsive() {
+        return this.$store.state.theme.styleResponsive;
+      }
+    },
+    created() {},
+    methods: {
+      /* 搜索 */
+      search() {
+        if (this.time != null && this.time.length) {
+          this.where.startTime = this.time[0];
+          this.where.endTime = this.time[1];
+        }
+        if (this.time == null) {
+          this.where.startTime = '';
+          this.where.endTime = '';
+        }
+        this.$emit('search', this.where);
+      },
+      /*  重置 */
+      reset() {
+        this.time = [];
+        this.where = { ...this.defaultWhere };
+        this.search();
+      }
+    }
+  };
+</script>
+<style lang="scss" scoped>
+  .ele-form-actions {
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+</style>

+ 280 - 0
src/views/rulesManagement/maintenance/detail.vue

@@ -0,0 +1,280 @@
+<template>
+  <div class="maintain_config_detail" v-loading="detailsLoading">
+    <div class="main_content">
+      <!-- 基本信息 -->
+      <div class="base_info">
+        <HeaderTitle title="基本信息" size="16px"></HeaderTitle>
+        <el-row class="base_info_content">
+          <el-col :span="6">
+            <span>计划单号:</span>
+            <span>{{ detailsForm.code }}</span>
+          </el-col>
+          <el-col :span="6">
+            <span>保养名称:</span>
+            <span>{{ detailsForm.name }}</span>
+          </el-col>
+          <el-col :span="6">
+            <span>保养部门:</span>
+            <span>{{ detailsForm.groupName }}</span>
+          </el-col>
+          <el-col :span="6">
+            <span>保养人员:</span>
+            <span>{{ detailsForm.executorName }}</span>
+          </el-col>
+          <el-col :span="6">
+            <span>计划完成时长:</span>
+            <span>{{ detailsForm.duration }}分钟</span>
+          </el-col>
+          <el-col :span="6">
+            <span>设备分类:</span>
+            <span>{{ detailsForm.categoryName }}</span>
+          </el-col>
+          <el-col :span="6">
+            <span>规则名称:</span>
+            <span>{{ detailsForm.ruleName }}</span>
+          </el-col>
+<!--          <el-col :span="6">
+            <span>创建部门:</span>
+            <span>{{ detailsForm.createOrgName }}</span>
+          </el-col> -->
+          <el-col :span="6">
+            <span>创建人:</span>
+            <span>{{ detailsForm.createUserName }}</span>
+          </el-col>
+		  <el-col :span="6">
+		    <span>创建时间:</span>
+		    <span>{{ detailsForm.createTime }}</span>
+		  </el-col>
+          <el-col :span="6">
+            <span>审核人:</span>
+            <span>{{ detailsForm.approvalUserName }}</span>
+          </el-col>
+          <el-col :span="24">
+            <span>备注:</span>
+            <span>{{ detailsForm.remark }}</span>
+          </el-col>
+        </el-row>
+      </div>
+      <!-- 保养设备 -->
+      <div class="maintain_equipment_info">
+		<HeaderTitle title="保养设备" size="16px"></HeaderTitle>
+        <div class="maintain_equipment_info_content">
+          <div
+            class="equipment_item"
+            v-for="item in detailsForm.deviceInfo"
+            :key="item.id"
+          >
+            <div class="equipment_info">
+              <div class="item_info">
+                <span class="item_label">设备编码</span>
+                <span class="item_value">{{  item.substance.code }}</span>
+              </div>
+              <div class="item_info">
+                <span class="item_label">设备名称</span>
+                <span class="item_value">{{ item.substance.name }}</span>
+              </div>
+              <div class="item_info">
+                <span class="item_label">设备型号</span>
+                <span class="item_value">{{ item.substance.model }}</span>
+              </div>
+              <div class="item_info">
+                <span class="item_label">设备位置</span>
+                <span class="item_value">{{ item.substance.positionNames }}</span>
+              </div>
+            </div>
+            <p>操作事项</p>
+            <div class="matter_info">
+              <el-table :data="matterRulesList" border>
+                <el-table-column label="序号" align="center" width="80">
+                  <template slot-scope="scope">
+                    <span>{{ scope.$index + 1 }}</span>
+                  </template>
+                </el-table-column>
+                <el-table-column label="事项" prop="name" />
+                <el-table-column label="内容" prop="content" />
+                <el-table-column label="标准" prop="norm" />
+              </el-table>
+            </div>
+            <p>备品备件</p>
+            <div class="matter_info">
+              <el-table :data="item.sparePart" border>
+                <el-table-column label="序号" align="center" width="80">
+                  <template slot-scope="scope">
+                    <span>{{ scope.$index + 1 }}</span>
+                  </template>
+                </el-table-column>
+                <el-table-column label="备件类别名称" align="center" prop="categoryName">
+                </el-table-column>
+                <el-table-column label="规格型号" align="center" prop="model">
+                </el-table-column>
+                <el-table-column label="所需数量" align="center" prop="needNum">
+                </el-table-column>
+                <el-table-column label="单位" align="center" prop="unit">
+                </el-table-column>
+              </el-table>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+  import { getInfoById } from '@/api/ruleManagement/plan';
+  import {  getDetail } from '@/api/ruleManagement/matter';
+
+export default {
+  name: 'maintainConfigDetail',
+  data () {
+    return {
+      detailsLoading: false,
+      detailsForm: {},
+      matterRulesList:[]
+    }
+  },
+  computed: {
+    
+  },
+  mounted () {
+    this.getDetailsData(this.$route.query.id)
+  },
+  methods: {
+    // 获取详情数据
+    async getDetailsData (id) {
+      this.detailsLoading = true
+      getInfoById(id)
+        .then(res => {
+          this.detailsLoading = false
+          this.detailsForm = res
+    		let arr = []
+    		res.execute.map(item=>{
+    			 arr.push(item.userName)
+    		})
+    		 this.$set(this.detailsForm,'executorName',arr.join(','))
+    		 this._getMatterRulesDetails(res.ruleId)
+        })
+        .catch(() => {
+          this.detailsLoading = false
+        })
+    },
+    
+    // 封装 - 获取规则下面的详情数据及事项
+    async _getMatterRulesDetails (val) {		
+      const res = await getDetail(val)
+       this.matterRulesList = res.ruleItems
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.maintain_config_detail {
+  padding: 5px 0;
+  .detail_title {
+    display: flex;
+    height: 40px;
+    align-items: center;
+    justify-content: space-between;
+    > span {
+      background-color: #fff;
+      line-height: 40px;
+      width: 90px;
+      text-align: center;
+      border-top: 4px solid #1890ff;
+    }
+  }
+  .main_content {
+    background-color: #fff;
+    padding: 20px 40px;
+    .base_info {
+      .base_info_title {
+        border-bottom: 1px solid #1890ff;
+        padding-bottom: 3px;
+        margin-bottom: 20px;
+        > span {
+          display: inline-block;
+          line-height: 16px;
+          border-left: 6px solid #1890ff;
+          padding-left: 6px;
+        }
+      }
+      .base_info_content {
+        padding: 0 100px;
+        font-size: 14px;
+        ::v-deep .el-col {
+          margin-bottom: 20px;
+          > span:first-child {
+            font-weight: 700;
+          }
+        }
+      }
+    }
+    .maintain_equipment_info {
+      .maintain_equipment_info_title {
+        border-bottom: 1px solid #1890ff;
+        padding-bottom: 3px;
+        margin-bottom: 20px;
+        > span {
+          display: inline-block;
+          line-height: 16px;
+          border-left: 6px solid #1890ff;
+          padding-left: 6px;
+        }
+      }
+      .maintain_equipment_info_content {
+        padding: 0 30px;
+        .equipment_item {
+          border: 1px solid #ccc;
+          font-size: 14px;
+          padding: 15px;
+          margin-bottom: 30px;
+          .equipment_info {
+            display: flex;
+            flex-wrap: wrap;
+            border: 1px solid #ddd;
+            .item_info {
+              width: 33.33%;
+              height: 24px;
+              line-height: 24px;
+              display: flex;
+              .item_label {
+                width: 90px;
+                text-align: center;
+                background-color: #f2f2f2;
+                font-weight: 700;
+              }
+              .item_value {
+                border-bottom: 1px solid #f2f2f2;
+                flex: 1;
+                padding-left: 5px;
+              }
+              &:last-child {
+                width: 100%;
+                .item_value {
+                  border: 0;
+                }
+              }
+            }
+          }
+          > p {
+            margin-top: 20px;
+            color: #797979;
+          }
+          .matter_info {
+            ::v-deep .el-table {
+              th.el-table__cell {
+                background-color: #f2f2f2;
+                padding: 0;
+              }
+              td.el-table__cell {
+                padding: 0;
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
+</style>

+ 234 - 0
src/views/rulesManagement/maintenance/index.vue

@@ -0,0 +1,234 @@
+<template>
+  <div class="ele-body">
+    <el-card shadow="never" v-loading="loading">
+      <maintain-search @search="reload"> </maintain-search>
+      <!-- 数据表格 -->
+      <ele-pro-table
+        ref="table"
+        :columns="columns"
+        :datasource="datasource"
+        cache-key="systemRoleTable"
+      >
+        <!-- 表头工具栏 -->
+        <template v-slot:toolbar>
+          <el-button
+            size="small"
+            type="primary"
+            icon="el-icon-plus"
+            class="ele-btn-icon"
+            @click="openEdit()"
+          >
+            新建
+          </el-button>
+        </template>
+        <template v-slot:code="{ row }">
+          <el-link type="primary" :underline="false" @click="goDetail(row)">
+            {{ row.code }}
+          </el-link>
+        </template>
+        <!-- 操作列 -->
+        <template v-slot:action="{ row }">
+          <el-link
+            type="primary"
+            :underline="false"
+            icon="el-icon-edit"
+            @click="openEdit(row)"
+          >
+            修改
+          </el-link>
+          <el-popconfirm
+            class="ele-action"
+            title="确定要删除此保养配置吗?"
+            @confirm="remove(row)"
+          >
+            <template v-slot:reference>
+              <el-link type="danger" :underline="false" icon="el-icon-delete">
+                删除
+              </el-link>
+            </template>
+          </el-popconfirm>
+        </template>
+      </ele-pro-table>
+    </el-card>
+
+    <!-- 新建或编辑弹窗 -->
+    <AddPatrolConfigDialog
+      ref="addPatrolConfigDialogRef"
+      :dialogTitle="dialogTitle"
+      :isBindPlan="isBindPlan"
+      @done="reload"
+    />
+  </div>
+</template>
+
+<script>
+  import AddPatrolConfigDialog from '@/components/addPatrolConfigDialog';
+  import MaintainSearch from './components/maintain-search.vue';
+  import { planConfigPage, removeRule } from '@/api/ruleManagement/plan';
+  import dictMixins from '@/mixins/dictMixins';
+  export default {
+    mixins: [dictMixins],
+    components: {
+      MaintainSearch,
+      AddPatrolConfigDialog
+    },
+    data() {
+      return {
+        // 表格列配置
+        columns: [
+          {
+            columnKey: 'index',
+            label: '序号',
+            type: 'index',
+            width: 55,
+            align: 'center',
+            showOverflowTooltip: true,
+            fixed: 'left'
+          },
+          {
+            prop: 'code',
+            label: '计划配置单号',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110,
+            slot: 'code'
+          },
+          {
+            prop: 'name',
+            label: '计划配置名称',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'groupName',
+            label: '执行部门',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'categoryName',
+            label: '设备分类',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'ruleName',
+            label: '规则名称',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'autoOrder',
+            label: '自动派单',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110,
+            formatter: (_row, _column, cellValue) => {
+              let autoOrder =
+                _row.autoOrder == 1 ? '是' : _row.autoOrder == 0 ? '否' : '-';
+              return autoOrder;
+            }
+          },
+          {
+            prop: 'status',
+            label: '状态',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110,
+            formatter: (_row, _column, cellValue) => {
+              return this.getDictValue('规则状态', _row.status);
+            }
+          },
+          {
+            prop: 'createUserName',
+            label: '创建人',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'createTime',
+            label: '创建时间',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110,
+            formatter: (_row, _column, cellValue) => {
+              return this.$util.toDateString(cellValue);
+            }
+          },
+          {
+            columnKey: 'action',
+            label: '操作',
+            width: 150,
+            align: 'center',
+            resizable: false,
+            slot: 'action',
+            showOverflowTooltip: true
+          }
+        ],
+        // 加载状态
+        loading: false,
+        pageType: 'add',
+        dialogTitle: '',
+        isBindPlan: false
+      };
+    },
+    computed: {},
+    created() {
+      this.requestDict('规则状态');
+    },
+    methods: {
+      /* 表格数据源 */
+      datasource({ page, limit, where, order }) {
+        return planConfigPage({
+          pageNum: page,
+          size: limit,
+          ...where,
+          groupId: where.groupId == null ? '' : where.groupId,
+          categoryLevelId:
+            where.categoryLevelId == null ? '' : where.categoryLevelId,
+          ruleType: 2
+        });
+      },
+
+      /* 刷新表格 */
+      reload(where) {
+        this.$refs.table.reload({ page: 1, where, ruleType: 2 });
+      },
+
+      openEdit(row) {
+        this.isBindPlan = false;
+        // this.$refs.addPatrolConfigDialogRef.$refs.addFormRef && this.$refs.addPatrolConfigDialogRef.$refs.addFormRef.clearValidate()
+        this.$refs.addPatrolConfigDialogRef.addPatrolConfigDialog = true;
+        if (row) {
+          this.dialogTitle = '编辑保养计划配置';
+        } else {
+          this.dialogTitle = '新增保养计划配置';
+        }
+        this.$refs.addPatrolConfigDialogRef.init(row, '保养');
+      },
+
+      goDetail({ id }) {
+        this.$router.push({
+          path: '/rulesManagement/maintenance/detail',
+          query: {
+            id
+          }
+        });
+      },
+
+      remove(row) {
+        removeRule([row.id]).then((res) => {
+          this.$message.success('删除成功!');
+          this.reload();
+        });
+      }
+    }
+  };
+</script>
+
+<style lang="scss" scoped></style>

+ 73 - 66
src/views/rulesManagement/planRules/index.vue

@@ -18,65 +18,70 @@
           <el-button @click="$router.go(-1)">返回</el-button>
         </div> -->
       </div>
-
-      <div class="plan" v-if="activeComp == 'point'">
-        <InspectionPoint />
-      </div>
-      <div class="plan" v-if="activeComp == 'ance'">
-        <Maintenance />
-      </div>
-      <div class="plan" v-if="activeComp == 'plan'">
-        <inventory-search @search="reload"> </inventory-search>
-        <!-- 数据表格 -->
-        <ele-pro-table
-          ref="table"
-          :columns="columns"
-          :datasource="datasource"
-          cache-key="systemRoleTable14"
-        >
-          <!-- 表头工具栏 -->
-          <template v-slot:toolbar>
-            <el-button
-              size="small"
-              type="primary"
-              icon="el-icon-plus"
-              class="ele-btn-icon"
-              @click="openEdit()"
-            >
-              新建
-            </el-button>
-            <el-button
-              size="small"
-              type="primary"
-              class="ele-btn-icon"
-              @click="goDetail()"
-            >
-              详情
-            </el-button>
-          </template>
-          <!-- 操作列 -->
-          <template v-slot:action="{ row }">
-            <el-link
-              type="primary"
-              :underline="false"
-              icon="el-icon-edit"
-              @click="openEdit(row)"
-            >
-              修改
-            </el-link>
-            <el-popconfirm
-              class="ele-action"
-              title="确定要删除此角色吗?"
-              @confirm="remove(row)"
-            >
-              <template v-slot:reference>
-                <el-link type="danger" :underline="false" icon="el-icon-delete">
-                  删除
-                </el-link>
-              </template>
-            </el-popconfirm>
-          </template>
-        </ele-pro-table>
+      <div class="main">
+        <div v-if="activeComp == 'point'">
+          <InspectionPoint />
+        </div>
+        <div v-if="activeComp == 'anmac'">
+          <Maintenance />
+        </div>
+        <div v-if="activeComp == 'plan'" class="plan">
+          <inventory-search @search="reload"> </inventory-search>
+          <!-- 数据表格 -->
+          <ele-pro-table
+            ref="table"
+            :columns="columns"
+            :datasource="datasource"
+            cache-key="systemRoleTable14"
+          >
+            <!-- 表头工具栏 -->
+            <template v-slot:toolbar>
+              <el-button
+                size="small"
+                type="primary"
+                icon="el-icon-plus"
+                class="ele-btn-icon"
+                @click="openEdit()"
+              >
+                新建
+              </el-button>
+              <el-button
+                size="small"
+                type="primary"
+                class="ele-btn-icon"
+                @click="goDetail()"
+              >
+                详情
+              </el-button>
+            </template>
+            <!-- 操作列 -->
+            <template v-slot:action="{ row }">
+              <el-link
+                type="primary"
+                :underline="false"
+                icon="el-icon-edit"
+                @click="openEdit(row)"
+              >
+                修改
+              </el-link>
+              <el-popconfirm
+                class="ele-action"
+                title="确定要删除此角色吗?"
+                @confirm="remove(row)"
+              >
+                <template v-slot:reference>
+                  <el-link
+                    type="danger"
+                    :underline="false"
+                    icon="el-icon-delete"
+                  >
+                    删除
+                  </el-link>
+                </template>
+              </el-popconfirm>
+            </template>
+          </ele-pro-table>
+        </div>
       </div>
     </el-card>
 
@@ -91,8 +96,8 @@
 </template>
 
 <script>
-  import InspectionPoint from '../../ruleConfiguration/inspectionPoint';
-  import Maintenance from '../../ruleConfiguration/maintenance';
+  import InspectionPoint from '../inspectionPoint';
+  import Maintenance from '../maintenance';
   import InventorySearch from './components/inventory-search.vue';
   import AddInventoryDialog from './components/addInventoryDialog.vue';
   import { pageRoles } from '@/api/system/role';
@@ -107,8 +112,8 @@
       return {
         activeComp: 'point',
         tabOptions: [
-          { key: 'point', name: '巡点配置' },
-          { key: 'ance', name: '保养配置' },
+          { key: 'point', name: '巡点配置' },
+          { key: 'anmac', name: '保养配置' },
           { key: 'plan', name: '盘点配置' }
         ],
         // 表格列配置
@@ -252,8 +257,10 @@
     padding-top: 0;
     padding-left: 0;
   }
-  .plan {
-    margin-left: 17px;
-    margin-top: 17px;
+  .main {
+    padding-left: 17px;
+    .plan {
+      padding-top: 15px;
+    }
   }
 </style>