quwangxin 3 år sedan
förälder
incheckning
05eb96acfc

+ 36 - 0
src/api/maintenance/repair_plan.js

@@ -0,0 +1,36 @@
+import request from '@/utils/request';
+
+// 分页
+export async function planRepairPage (data) {
+  const res = await request.get('/eam/planrepair/page', {
+    params: data
+  });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// // 保存
+// export async function save (data) {
+//   const res = await request.post('/eam/repairrequest/save', data);
+//   if (res.data.code == 0) {
+//     return res.data;
+//   }
+//   return Promise.reject(new Error(res.data.message));
+// }
+// // 修改
+// export async function update (data) {
+//   const res = await request.post('/eam/repairrequest/update', data);
+//   if (res.data.code == 0) {
+//     return res.data;
+//   }
+//   return Promise.reject(new Error(res.data.message));
+// }
+// // 详情
+// export async function getById (id) {
+//   const res = await request.get(`/eam/repairrequest/getById/${id}`);
+//   if (res.data.code == 0) {
+//     return res.data;
+//   }
+//   return Promise.reject(new Error(res.data.message));
+// }

+ 567 - 0
src/components/addPatrolPlanDialog/DispatchDialog.vue

@@ -0,0 +1,567 @@
+<template>
+  <el-dialog
+    title="派单"
+    :visible.sync="addPatrolPlanDialog"
+    :before-close="handleClose"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    custom-class="ele-dialog-form"
+    width="90%"
+    v-loading="editLoading"
+  >
+    <div class="dialog_body">
+      <el-form
+        :model="addForm"
+        ref="addFormRef"
+        :rules="addFormRules"
+        label-width="120px"
+      >
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="工单编号" prop="code">
+              <el-input
+                v-model="addForm.code"
+                placeholder="自动带出"
+                disabled
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="关联计划" prop="name">
+              <el-input v-model="addForm.name" placeholder="请输入"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="执行部门" prop="groupId">
+              <deptSelect
+                v-model="addForm.groupId"
+                @change="searchDeptNodeClick"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item
+              label="执行人"
+              prop="executorId"
+              :rules="[{ required: true, message: '请选择执行人' }]"
+            >
+              <personSelect
+                ref="executorRef"
+                v-model="addForm.executorId"
+                :init="false"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <!-- 设备分类 -->
+      <div class="equipment_box">
+        <div class="left_aside">
+          <div class="equipment_list_title">设备列表</div>
+          <div class="equipment_tree">
+            <el-tree
+              :data="planDeviceList"
+              :props="defaultProps"
+              ref="equiListTree"
+              highlight-current
+              node-key="id"
+              @node-click="handleNodeClick"
+              show-checkbox
+            ></el-tree>
+          </div>
+        </div>
+        <div class="right_aside">
+          <div class="equipment_info">
+            <div class="item_info">
+              <span class="item_label">设备编码</span>
+              <span class="item_value">{{ equipmentInfo.equiCode }}</span>
+            </div>
+            <div class="item_info">
+              <span class="item_label">设备名称</span>
+              <span class="item_value">{{ equipmentInfo.equiName }}</span>
+            </div>
+            <div class="item_info">
+              <span class="item_label">设备型号</span>
+              <span class="item_value">{{ equipmentInfo.equiModel }}</span>
+            </div>
+            <div class="item_info">
+              <span class="item_label">设备位置</span>
+              <span class="item_value">{{ equipmentInfo.equiLocation }}</span>
+            </div>
+          </div>
+          <!-- 操作事项 -->
+          <div>
+            <span type="text">操作事项</span>
+            <el-table
+              :data="
+                planDeviceList[currentEquItemIndex] &&
+                planDeviceList[currentEquItemIndex].workItems
+              "
+              border
+            >
+              <el-table-column label="序号" align="center" width="60">
+                <template slot-scope="scope">
+                  <span>{{ scope.$index + 1 }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="事项" align="center" prop="name">
+              </el-table-column>
+              <el-table-column label="内容" align="center" prop="content">
+              </el-table-column>
+              <el-table-column label="标准" align="center" prop="norm">
+              </el-table-column>
+            </el-table>
+          </div>
+
+          <!-- 添加备品备件 -->
+          <div v-if="type === '保养'">
+            <span type="text">所需备件</span>
+            <el-table
+              :data="
+                planDeviceList[currentEquItemIndex] &&
+                planDeviceList[currentEquItemIndex].sparePart
+              "
+              height="300"
+              :key="currentEquItemIndex"
+              border
+            >
+              <el-table-column label="序号" align="center" width="60">
+                <template slot-scope="scope">
+                  <span>{{ scope.$index + 1 }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="备件名称" align="center" prop="name">
+              </el-table-column>
+              <el-table-column label="规格型号" align="center" prop="modelType">
+                <template slot-scope="{ row }">
+                  <span>{{ row.specification }}/{{ row.modelType }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="所需数量" align="center" prop="num">
+              </el-table-column>
+              <el-table-column label="单位" align="center" prop="measuringUnit">
+              </el-table-column>
+              <el-table-column label="费用" align="center" prop="univalence">
+                <template slot-scope="scope">
+                  {{ scope.row.num * scope.row.univalence
+                  }}{{ scope.row.univalenceUnit == 'wanyuan' ? '万元' : '元' }}
+                </template>
+              </el-table-column>
+            </el-table>
+            <div style="text-align: center"
+              >备件总费用:
+              {{
+                planDeviceList[currentEquItemIndex] &&
+                planDeviceList[currentEquItemIndex].totalCost
+                  ? planDeviceList[currentEquItemIndex].totalCost
+                  : '-'
+              }}
+              元
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div slot="footer" class="dialog_footer">
+      <el-button type="primary" @click="submit">提交</el-button>
+      <el-button @click="handleClose">关闭</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  import equipmentSelect from '@/components/CommomSelect/equipment-select.vue';
+  import personSelect from '@/components/CommomSelect/person-select.vue';
+  import deptSelect from '@/components/CommomSelect/dept-select.vue';
+  import RuleItemSelection from '@/components/ruleItemSelection';
+  import AddSpareDialog from '@/components/addSpareDialog';
+  import {
+    getRule,
+    getCategory,
+    getAssetList,
+    getInfoById
+  } from '@/api/ruleManagement/plan';
+  import { getDetail, getCode } from '@/api/ruleManagement/matter';
+  import { saveOrUpdate } from '@/api/maintenance/patrol_maintenance';
+  import { deepClone } from '@/utils';
+  import { getById } from '@/api/maintenance/patrol_maintenance';
+  export default {
+    name: 'addPatrolPlanDialog',
+    components: {
+      // SelectTree,
+      personSelect,
+      deptSelect
+    },
+    props: {
+      type: {
+        type: String,
+        default: '巡点检'
+      }
+    },
+    data () {
+      return {
+        defaultProps: {
+          label: 'showName'
+        },
+        addPatrolPlanDialog: false,
+        equipmentInfo: {},
+        clickedTreeNode: false,
+        selectedMatter: [],
+        selectedSpare: [],
+        uerList: [],
+        deptList: [],
+        executorList: [],
+        currentEquItemIndex: 0,
+        formLabel: '',
+        planRuleTypeObj: {
+          1: 'PATROL',
+          2: 'MAINTAIN',
+          4: 'INVENTORY'
+        },
+        addForm: {
+          assetDict: '1',
+          assetsName: '生产设备',
+          // code: getRuleNo('PL'), // 计划单号
+          cycleType: 0,
+          name: '', // 计划名称
+          autoOrder: 1, // 自动派单
+          ruleId: '', // 规则id
+          ruleName: '', // 规则名称
+          duration: '', // 计划完成时长
+          categoryLevelId: '', // 设备分类Id
+          bizTypeName: '', // 设备分类name
+          verifyUserId: '', // 审核人id
+          verifyUserName: '', // 审核人name
+          groupId: '', // 巡点检部门code
+          executorId: '', // 巡点检人员id
+          remark: '', // 备注
+          categoryId: '', //
+          planType: 'PATROL' // 计划规则类型 巡点检: 'PATROL', 保养: 'MAINTAIN', 盘点: 'INVENTORY'
+        },
+        // 计划规则设备列表
+        planDeviceList: [
+          // {
+          //   equiTypeId: '', // 设备分类Id
+          //   equiTypeName: '', // 设备分类名字
+          //   equiCode: '', // 设备编码 equCode
+          //   equiName: '', // 设备名称 name
+          //   equiModel: '', // 设备型号 specifications
+          //   equiLocation: '', // 设备位置
+          //   equiLocationCode: '', // 设备位置code
+          //   // 设备备品备件 - 巡点检不需要备品备件,保养需要
+          //   sparePart: [],
+          //   totalCost: 0
+          // }
+        ],
+        addFormRules: {
+          categoryLevelId: [
+            { required: true, message: '请选择设备分类', trigger: 'change' }
+          ],
+          groupId: [
+            {
+              required: true,
+              message: '请选择选择执行部门',
+              trigger: 'change'
+            }
+          ],
+          executorId: [
+            {
+              required: true,
+              message: '请选择选择执行人',
+              trigger: 'change'
+            }
+          ]
+        },
+        ruleNameList: [],
+        equipmentList: [],
+        currentNode: null,
+        rootId: null,
+        editLoading: false
+      };
+    },
+    computed: {},
+    async created () {},
+    methods: {
+      open (row) {
+        this.addForm.id = row.id;
+        this.getInfo(this.addForm.id);
+        this.addPatrolPlanDialog = true;
+      },
+      // 编辑详情
+      async getInfo (id) {
+        this.editLoading = true;
+        const res = await getById(id).catch(() => {
+          this.editLoading = false;
+        });
+        this.editLoading = false;
+        if (res?.data) {
+          const data = res.data;
+
+          this.addForm = data;
+
+          this.planDeviceList = this.addForm.planDeviceList.map((item) => ({
+            ...item,
+            ...item.substance
+          }));
+
+          const item = this.planDeviceList[0];
+
+          // const { equiLocation, equiLocationCode } = this.getEquiLocation(item);
+          this.$nextTick(() => {
+            this.$refs.equiListTree.setCurrentKey(item.id);
+            this.equipmentInfo = {
+              equiTypeId: this.addForm.categoryId,
+              equiCode: item.code,
+              equiName: item.name
+              // equiModel: item.category.modelType
+              // equiLocation: equiLocation,
+              // equiLocationCode: equiLocationCode
+            };
+            this.currentEquItemIndex = 0;
+            // this.planDeviceList[0]['equiLocation'] = equiLocation;
+            // this.planDeviceList[0]['equiLocationCode'] = equiLocationCode;
+          });
+        }
+      },
+      handleClose () {
+        this.addPatrolPlanDialog = false;
+        this.$refs.addFormRef.resetFields();
+        this.currentEquItemIndex = 0;
+        this.equipmentInfo = {};
+        this.addForm = {};
+      },
+      // 设备列表树点击
+      handleNodeClick (data, node) {
+        const { equiLocation, equiLocationCode } = this.getEquiLocation(data);
+        this.equipmentInfo = {
+          equiCode: data.code,
+          equiName: data.name,
+          deviceId: data.id,
+          equiModel: data.category.modelType,
+          equiLocation: equiLocation,
+          equiLocationCode: equiLocationCode
+        };
+        // 保存当前点击的设备列表某节点的index,在添加操作事项的时候,可以将事项list放到对应的节点对象中,以及切换节点的时候回显事项list
+        this.currentEquItemIndex = this.planDeviceList.findIndex(
+          (item) => item.code === data.code
+        );
+        this.clickedTreeNode = true;
+        this.planDeviceList[this.currentEquItemIndex]['equiLocation'] =
+          equiLocation;
+        this.planDeviceList[this.currentEquItemIndex]['equiLocationCode'] =
+          equiLocationCode;
+      },
+      // 封装 - 获取设备分类列表
+      async _getEquipmentList (val) {
+        const params = {
+          pageNum: 1,
+          size: -1,
+          categoryId: val || this.addForm.categoryId,
+          rootCategoryLevelId: this.rootId
+        };
+        try {
+          const res = await getAssetList(params);
+          this.planDeviceList = res.list;
+          this.planDeviceList.map((item) => {
+            item.showName = item.name + '(' + item.code + ')';
+          });
+          this.currentEquItemIndex = 0;
+          const item = this.planDeviceList[0];
+          const { equiLocation, equiLocationCode } = this.getEquiLocation(item);
+          this.$nextTick(() => {
+            this.$refs.equiListTree.setCurrentKey(item.id);
+            this.equipmentInfo = {
+              equiTypeId: this.addForm.categoryId,
+              equiCode: item.code,
+              equiName: item.name,
+              equiModel: item.category.modelType,
+              equiLocation: equiLocation,
+              equiLocationCode: equiLocationCode
+            };
+            this.currentEquItemIndex = 0;
+            this.planDeviceList[0]['equiLocation'] = equiLocation;
+            this.planDeviceList[0]['equiLocationCode'] = equiLocationCode;
+
+            // 对比详情返回的数据和设备分类下面所有的设备列表,将sparePart同步过去
+            if (this.addForm.planDeviceList) {
+              for (let i = 0; i < this.planDeviceList.length; i++) {
+                for (let j = 0; j < this.addForm.planDeviceList.length; j++) {
+                  if (
+                    this.planDeviceList[i].id ===
+                    this.addForm.planDeviceList[j].deviceId
+                  ) {
+                    this.$refs.equiListTree.setChecked(
+                      this.planDeviceList[i].id,
+                      true
+                    );
+                    this.planDeviceList[i]['workItems'] =
+                      this.addForm.planDeviceList[j]['workItems'];
+                    this.planDeviceList[i]['sparePart'] =
+                      this.addForm.planDeviceList[j]['sparePart'];
+                  }
+                }
+              }
+            }
+          });
+        } catch (error) {
+          this.planDeviceList = [];
+        }
+      },
+      //选择部门(搜索)
+      searchDeptNodeClick (info) {
+        // 根据部门获取人员
+        const params = { groupId: info };
+        this.$nextTick(() => {
+          this.$refs.executorRef.getList(params);
+        });
+      },
+      // 封装 - 获取设备位置名称和code方法
+      getEquiLocation (data) {
+        // 设备位置编码
+        const equiLocationCode = data.position[0].pathIds;
+        // 设备位置名称
+        const equiLocation = data.position[0].pathName;
+        return { equiLocation, equiLocationCode };
+      },
+      // 提交
+      submit () {
+        console.log(this.planDeviceList);
+        this.$refs.addFormRef.validate(async (valid) => {
+          if (valid) {
+            try {
+              let workItemsChecked = true;
+              const selectList = this.$refs.equiListTree.getCheckedNodes();
+              if (!selectList.length) {
+                this.$message.warning('请选择设备!');
+                return;
+              }
+              const planDeviceList = selectList.map((item) => {
+                const obj = this.planDeviceList.find(
+                  (itm) => itm.id === item.id
+                );
+                if (!obj.workItems?.length) {
+                  workItemsChecked = false;
+                }
+
+                const { equiLocation, equiLocationCode } =
+                  this.getEquiLocation(item);
+                return {
+                  equiCode: item.code,
+                  equiName: item.name,
+                  deviceId: item.id,
+                  equiModel: item.modelType,
+                  equiLocation: equiLocation,
+                  equiLocationCode: equiLocationCode,
+                  workItems: obj.workItems ? obj.workItems : [],
+                  sparePart: obj.sparePart ? obj.sparePart : []
+                };
+              });
+
+              if (!workItemsChecked || !selectList.length) {
+                this.$message.warning('请添加操作事项!');
+                return;
+              }
+              if (this.addForm.planType instanceof Object) {
+                this.addForm.planType =
+                  this.planRuleTypeObj[this.addForm.planType.code];
+              }
+
+              // 将newData拼接成一个新数组赋值给后端接收字段
+              const params = this.addForm;
+              params.planDeviceList = planDeviceList;
+
+              params.type = this.dialogTitle.includes('巡点检')
+                ? 1
+                : this.dialogTitle.includes('保养')
+                ? 2
+                : 3;
+              await saveOrUpdate(params);
+              const type = this.dialogTitle.includes('新增') ? '新增' : '编辑';
+              this.handleClose();
+              this.$message.success(type + '成功!');
+              this.$emit('refreshList');
+            } catch (error) {
+              console.log(error);
+            }
+          }
+        });
+      }
+    }
+  };
+</script>
+
+<style lang="scss" scoped>
+  ::v-deep .el-form {
+    .el-form-item {
+      margin-bottom: 14px;
+    }
+    .el-form-item__error {
+      padding-top: 0;
+    }
+  }
+  .equipment_box {
+    display: flex;
+    .left_aside {
+      width: 300px;
+      border: 1px solid #797979;
+      margin-right: 5px;
+      .equipment_list_title {
+        height: 24px;
+        line-height: 24px;
+        text-align: center;
+        background-color: #d7d7d7;
+        color: #000;
+        font-weight: 700;
+      }
+      .equipment_tree {
+        height: 510px;
+        overflow: auto;
+      }
+      ::v-deep .el-tree-node__expand-icon.el-icon-caret-right {
+        padding: 0;
+      }
+      ::v-deep
+        .el-tree--highlight-current
+        .el-tree-node.is-current
+        > .el-tree-node__content {
+        background-color: #d7f1fd !important;
+      }
+    }
+    .right_aside {
+      flex: 1;
+      border: 1px solid #797979;
+      padding: 10px;
+      .equipment_info {
+        display: flex;
+        flex-wrap: wrap;
+        border: 1px solid #ddd;
+        .item_info {
+          width: 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;
+            }
+          }
+        }
+      }
+    }
+  }
+  .dialog_footer {
+    text-align: center;
+  }
+</style>

+ 1 - 1
src/views/maintenance/patrol/plan/components/plan-search.vue

@@ -19,7 +19,7 @@
             class="w100"
           >
             <el-option label="自动" :value="1"></el-option>
-            <el-option label="手动" :value="2"></el-option>
+            <el-option label="手动" :value="0"></el-option>
           </el-select>
         </el-form-item>
       </el-col>

+ 39 - 40
src/views/maintenance/patrol/plan/details.vue

@@ -9,79 +9,85 @@
             <el-col :span="12">
               <el-col :span="12">
                 <el-form-item label="计划单号">
-                  <span> {{ data.code }} </span>
+                  <span> {{ infoData.code }} </span>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="来源计划配置单号">
-                  <span> {{ data.planConfigCode }} </span>
+                  <span> {{ infoData.planConfigCode }} </span>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="巡点检名称">
-                  <span> {{ data.name }} </span>
+                  <span> {{ infoData.name }} </span>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="巡点检部门">
-                  <span v-if="data.executor && data.executor.length">
-                    {{ data.executor[0].groupName }}
+                  <span v-if="infoData.executor && infoData.executor.length">
+                    {{ infoData.executor[0].groupName }}
                   </span>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="巡点检人员">
-                  <span v-if="data.executor && data.executor.length">
-                    {{ data.executor.map((i) => i.name).join(',') }}
+                  <span v-if="infoData.executor && infoData.executor.length">
+                    {{ infoData.executor.map((i) => i.name).join(',') }}
                   </span>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="计划完成时长">
-                  <span v-if="data.duration >= 0">{{ data.duration }}分钟</span>
+                  <span v-if="infoData.duration >= 0"
+                    >{{ infoData.duration }}分钟</span
+                  >
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="巡点检周期">
-                  <span v-if="data.ruleInfo">
-                    {{ data.ruleInfo.cycleValue
-                    }}{{ getDictValue('巡点检周期', data.ruleInfo.cycleType) }}
+                  <span v-if="infoData.ruleInfo">
+                    {{ infoData.ruleInfo.cycleValue
+                    }}{{
+                      getDictValue('巡点检周期', infoData.ruleInfo.cycleType)
+                    }}
                   </span>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="设备分类">
-                  <span> {{ data.categoryLevelName }} </span>
+                  <span> {{ infoData.categoryLevelName }} </span>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="规则名称">
-                  <span> {{ data.ruleInfo && data.ruleInfo.name }} </span>
+                  <span>
+                    {{ infoData.ruleInfo && infoData.ruleInfo.name }}
+                  </span>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="创建人">
-                  <span> {{ data.createUserName }} </span>
+                  <span> {{ infoData.createUserName }} </span>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="创建部门">
-                  <span> {{ data.createUserGroupName }} </span>
+                  <span> {{ infoData.createUserGroupName }} </span>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="创建时间">
-                  <span> {{ data.createTime }} </span>
+                  <span> {{ infoData.createTime }} </span>
                 </el-form-item>
               </el-col>
               <el-col :span="24">
                 <el-form-item label="备注">
-                  <span> {{ data.remark }} </span>
+                  <span> {{ infoData.remark }} </span>
                 </el-form-item>
               </el-col>
             </el-col>
             <el-col :span="12">
-              <img :src="data.imageUrl" alt="" />
+              <!-- <img :src="infoData.imageUrl" alt="" /> -->
             </el-col>
           </el-row>
         </div>
@@ -92,7 +98,7 @@
           <div class="maintain_equipment_info_content">
             <div
               class="equipment_item"
-              v-for="item in data.planDeviceList"
+              v-for="item in infoData.planDeviceList"
               :key="item.id"
             >
               <div class="equipment_info" v-if="item.substance">
@@ -117,7 +123,7 @@
               </div>
               <p>操作事项</p>
               <div class="matter_info">
-                <el-table :data="item.workItems" border>
+                <el-table :data="item.workItems || []" border>
                   <el-table-column label="序号" align="center" width="80">
                     <template slot-scope="scope">
                       <span>{{ scope.$index + 1 }}</span>
@@ -137,34 +143,34 @@
           <div class="item_row">
             <div class="item_info">
               <span class="item_label border_top">审批结果</span>
-              <span class="item_value" v-if="data.approvalResult == 0"
+              <span class="item_value" v-if="infoData.approvalResult === 0"
                 >驳回</span
               >
-              <span class="item_value" v-if="data.approvalResult == 1"
+              <span class="item_value" v-if="infoData.approvalResult === 1"
                 >通过</span
               >
             </div>
             <div class="item_info border_top">
               <span class="item_label">审批人</span>
-              <!-- <span class="item_value">{{ data.verifyUserName }}</span> -->
+              <!-- <span class="item_value">{{ infoData.verifyUserName }}</span> -->
             </div>
             <div class="item_info border_right border_top">
               <span class="item_label">审批时间</span>
-              <span class="item_value">{{ data.approvalTime }}</span>
+              <span class="item_value">{{ infoData.approvalTime }}</span>
             </div>
             <div
               class="item_info reason border_right"
-              v-if="data.auditResult == 0"
+              v-if="infoData.auditResult == 0"
             >
               <span class="item_label">驳回原因</span>
-              <span class="item_value">{{ data.rejectCause }}</span>
+              <span class="item_value">{{ infoData.rejectCause }}</span>
             </div>
           </div>
         </div>
         <!-- 巡点检、执行信息 -->
         <div class="execute_info">
           <HeaderTitle title="执行信息" size="16px"></HeaderTitle>
-          <el-table :data="data.planWorkOrderList">
+          <el-table :data="infoData.planWorkOrderList || []">
             <el-table-column label="序号" align="center" width="60">
               <template slot-scope="scope">
                 <span>{{ scope.$index + 1 }}</span>
@@ -289,14 +295,8 @@
     data () {
       return {
         num: 1,
-        infoData: {
-          type: '',
-          area: { province: {}, area: {}, city: {} },
-          mgrOrg: {},
-          manager: {}
-        },
         dialogVisible: false,
-        data: {},
+        baseInfo: {},
         pageLoading: false,
         typeValue: null,
         contract_type: [],
@@ -312,7 +312,8 @@
         ],
         ruleItem: [],
         cause: '',
-        showtext: false
+        showtext: false,
+        infoData: {}
       };
     },
     async created () {
@@ -328,14 +329,12 @@
       },
       // 表格数据
       async getInfo () {
-        let res = await getById(this.$route.query.id).catch(() => {
+        this.pageLoading = true;
+        const res = await getById(this.$route.query.id).catch(() => {
           this.pageLoading = false;
         });
         if (res?.data) {
-          this.data = res.data;
-          // this.data.planEquiList = this.data.planEquiList.filter(
-          //   (item) => item.itemList && item.itemList.length > 0
-          // );
+          this.infoData = res.data;
         }
         this.pageLoading = false;
       },

+ 8 - 1
src/views/maintenance/patrol/plan/index.vue

@@ -42,6 +42,7 @@
           <el-link
             type="primary"
             :underline="false"
+            v-if="row.cycleType === 0"
             icon="el-icon-edit"
             @click="openAdd('编辑巡点检计划', row)"
           >
@@ -51,7 +52,7 @@
             type="primary"
             :underline="false"
             icon="el-icon-edit"
-            @click="openAdd('新增巡点检计划')"
+            @click="openDispatch(row)"
           >
             派单
           </el-link>
@@ -69,16 +70,19 @@
 
     <!-- 新建或编辑弹窗 -->
     <AddPatrolPlanDialog ref="addPatrolPlanDialogRef" @refreshList="reload" />
+    <dispatchDialog ref="dispatchDialogRef" @refreshList="reload" />
   </div>
 </template>
 
 <script>
   import AddPatrolPlanDialog from '@/components/addPatrolPlanDialog';
+  import DispatchDialog from '@/components/addPatrolPlanDialog/DispatchDialog';
   import PlanSearch from './components/plan-search.vue';
   import { getPage, revocation } from '@/api/maintenance/patrol_maintenance';
   export default {
     components: {
       PlanSearch,
+      DispatchDialog,
       AddPatrolPlanDialog
     },
     data () {
@@ -218,6 +222,9 @@
         });
       },
 
+      openDispatch (row) {
+        this.$refs.dispatchDialogRef.open(row);
+      },
       openAdd (dialogTitle, row) {
         this.$refs.addPatrolPlanDialogRef.open(dialogTitle, row);
       },

+ 49 - 48
src/views/maintenance/repair/maintenancePlan/components/maintenance-search.vue

@@ -11,18 +11,18 @@
         <el-form-item label="计划单号:">
           <el-input clearable v-model="where.code" placeholder="请输入" />
         </el-form-item>
-		<el-form-item label="创建时间:">
-			<el-date-picker
-				v-model="where.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-form-item label="创建时间:">
+          <el-date-picker
+            v-model="where.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="计划名称:">
@@ -31,29 +31,31 @@
       </el-col>
       <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
         <el-form-item label="报修人:">
-          <personSelect v-model="where.userId" />
+          <el-input clearable v-model="where.userId" 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.texture" placeholder="请输入" />
-			 </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-form-item label="状态:">
+          <el-input clearable v-model="where.texture" placeholder="请输入" />
+        </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>
@@ -62,37 +64,36 @@
 <script>
   import personSelect from '@/components/CommomSelect/person-select.vue';
   export default {
-	components: { personSelect },
-    data() {
+    components: { personSelect },
+    data () {
       // 默认表单数据
       const defaultWhere = {
         name: '',
         code: '',
-        fixCode:'',
-        ownershipGroupId:''
+        fixCode: '',
+        ownershipGroupId: ''
       };
       return {
         // 表单数据
         where: { ...defaultWhere },
-        treeData:[]
+        treeData: []
       };
     },
     computed: {
       // 是否开启响应式布局
-      styleResponsive() {
+      styleResponsive () {
         return this.$store.state.theme.styleResponsive;
       }
     },
-    created(){
-    },
+    created () {},
     methods: {
       /* 搜索 */
-      search() {
+      search () {
         console.log(this.where);
         this.$emit('search', this.where);
       },
       /*  重置 */
-      reset() {
+      reset () {
         this.where = { ...this.defaultWhere };
         this.search();
       }
@@ -100,9 +101,9 @@
   };
 </script>
 <style lang="scss" scoped>
-    .ele-form-actions{
-		display:flex;
-		align-items: center;
-		justify-content: flex-end;
-	}
-</style>
+  .ele-form-actions {
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+</style>