Kaynağa Gözat

修改设备

huang_an 2 yıl önce
ebeveyn
işleme
2a956db122

+ 22 - 0
src/api/maintenance/patrol_maintenance.js

@@ -24,6 +24,17 @@ export async function getById(id) {
   }
   return Promise.reject(new Error(res.data.message));
 }
+
+// 详情(维修)
+export async function getRepairInfoById(params) {
+  const res = await request.get(`/eam/planmaintenance/getRepairInfoById`, {
+    params
+  });
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
 // 撤回
 export async function revocation(id) {
   const res = await request.get(`/eam/planmaintenance/revocation/${id}`);
@@ -112,3 +123,14 @@ export async function received(data) {
   }
   return Promise.reject(new Error(res.data.message));
 }
+
+/**
+ * 通过工单查询备品备件
+ */
+export async function getSpareParts(params) {
+  const res = await request.get(`/eam/workorder/getSpareParts`, { params });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 1 - 0
src/api/maintenance/repair.js

@@ -11,6 +11,7 @@ export async function getWorkOrderList(data) {
   return Promise.reject(new Error(res.data.message));
 }
 
+// 通过工单查询详情
 export async function getWorkOrderDetail(code) {
   const res = await request.get('/eam/workorder/getWorkOrderDetail/' + code);
   if (res.data.code == 0) {

+ 9 - 6
src/components/AssetTree/index.vue

@@ -83,25 +83,28 @@
       getInstance() {
         return this.$refs.tree;
       },
-      // 获取树结构数据
-      async getTreeData(id) {
+      // 获取树结构数据(boolen 设备台账特殊处理)
+      async getTreeData(id, boolen) {
         try {
           console.log('id----------', id);
           this.treeLoading = true;
-
           const res = await getTreeByPid(id ? id : this.id);
           console.log('res----------------', res);
+          console.log(this.eqDevice);
           this.treeLoading = false;
           if (res?.code === '0') {
-            if (this.eqDevice == 'sb') {
+            if (this.eqDevice == 'sb' || !!boolen) {
               const arr = res.data.filter(
-                (item) => item.id == '4' || item.id == '1747157638286274562'
+                (item) =>
+                  item.id == '4' ||
+                  item.id == '14' ||
+                  item.id == '1747157638286274562'
               );
               this.treeList = arr;
             } else {
               this.treeList = res.data;
             }
-
+            console.log('--------------------');
             this.$emit(
               'setRootId',
               this.eqDevice == 'sb' ? '4' : res.data[0].id

+ 2 - 2
src/views/ledgerAssets/components/DialogGoods.vue

@@ -223,11 +223,11 @@
           });
         });
       },
-      async open(id) {
+      async open(id, boolen) {
         this.visibleSync = true;
         const { data } = await getTreeByPid(id);
         this.productList = data;
-        this.$refs.AssetTree.getTreeData(id);
+        this.$refs.AssetTree.getTreeData(id, boolen);
         this.productId = '';
       },
       close() {

+ 3 - 0
src/views/ledgerAssets/equipment/components/equipment-list.vue

@@ -14,6 +14,7 @@
       full-height="calc(100vh - 115px)"
       tool-class="ele-toolbar-form"
       cache-key="systemOrgUserTable"
+      :initLoad="false"
       @select="selectChange"
       @select-all="changeSelectAll"
     >
@@ -319,6 +320,7 @@
       },
       // 刷新回调
       sucesstion(is) {
+        console.log(is);
         if (is) {
           this.reload();
         }
@@ -364,6 +366,7 @@
 
       /* 表格数据源 */
       datasource({ page, limit, where, order }) {
+        console.log('------reload-------');
         // this.getNetWork(page, limit, where, order);
         return getAssetList({
           ...where,

+ 1 - 1
src/views/ledgerAssets/equipment/edit.vue

@@ -273,7 +273,7 @@
     },
     methods: {
       handlwpbm() {
-        this.$refs.DialogGoods.open('4');
+        this.$refs.DialogGoods.open('0', true);
       },
       async cbDialogGoods(data) {
         let res = await getDetails(data.id);

+ 2 - 1
src/views/ledgerAssets/equipment/index.vue

@@ -46,7 +46,7 @@
         loading: false,
         // 表格选中数据
         selection: [],
-        current: null,
+        current: {},
         rootId: null
       };
     },
@@ -55,6 +55,7 @@
       handleNodeClick(info) {
         console.log(info);
         this.current = info;
+        this.rootId = this.current.parentId;
         this.$nextTick(() => {
           this.$refs.listRef.sucesstion(false);
         });

+ 12 - 7
src/views/maintenance/components/MaterialAdd.vue

@@ -164,21 +164,26 @@
         this.categoryId = res.list[0]?.categoryId;
         return res;
       },
-      open(ruleIdList, ruleIdListIndex) {
+      open(ruleIdList, ruleIdListIndex, isAlone, data) {
         console.log(ruleIdList);
         console.log(ruleIdListIndex);
-        let list = ruleIdList
-          .map((item) => {
-            return item.equipmentList;
-          })
-          .flat();
+        let list = [];
+        if (isAlone) {
+          list = data;
+        } else {
+          list = ruleIdList
+            .map((item) => {
+              return item.equipmentList;
+            })
+            .flat();
+          this.ruleIdListIndex = ruleIdListIndex;
+        }
         console.log(list);
         if (list.length > 0) {
           this.processData = list.map((item) => item.id);
         } else {
           this.processData = [];
         }
-        this.ruleIdListIndex = ruleIdListIndex;
         this.visible = true;
         this.getTreeData();
       },

+ 969 - 0
src/views/maintenance/components/planRepaireDialog.vue

@@ -0,0 +1,969 @@
+<template>
+  <ele-modal
+    width="80%"
+    :visible="visible"
+    v-if="visible"
+    :append-to-body="true"
+    custom-class="ele-dialog-form"
+    :title="dialogTitle"
+    @update:visible="updateVisible"
+  >
+    <header-title title="基本信息"></header-title>
+    <el-form
+      ref="addFormRef"
+      :model="addForm"
+      :rules="addFormRules"
+      label-width="120px"
+    >
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="计划配置单号" prop="code">
+            <el-input
+              v-model="addForm.code"
+              size="small"
+              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"
+              size="small"
+              placeholder="请输入"
+            ></el-input>
+          </el-form-item>
+        </el-col>
+
+        <el-col :span="8">
+          <el-form-item label="自动派单" prop="autoOrder">
+            <el-select
+              v-model="addForm.autoOrder"
+              size="small"
+              style="width: 100%"
+              @change="autoOrderChange"
+            >
+              <el-option :value="1" label="是"></el-option>
+              <el-option :value="0" label="否"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+
+        <el-col :span="8">
+          <el-form-item label="计划开始时间" prop="startTime">
+            <el-date-picker
+              style="width: 100%"
+              v-model="addForm.planStartTime"
+              type="date"
+              value-format="yyyy-MM-dd"
+              placeholder="选择计划开始时间"
+            >
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+
+        <el-col :span="8">
+          <el-form-item label="计划结束时间" prop="endTime">
+            <el-date-picker
+              style="width: 100%"
+              v-model="addForm.planEndTime"
+              @change="endTimeRules"
+              value-format="yyyy-MM-dd"
+              type="date"
+              placeholder="选择计划结束时间"
+            >
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="审核部门" prop="approvalUserId">
+            <deptSelect
+              v-model="addForm.approvalDepId"
+              @changeGroup="searchDeptNodeClick"
+              :disabled="isBindPlan"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="审核人" prop="approvalUserId">
+            <el-select
+              v-model="addForm.approvalUserId"
+              size="small"
+              clearable
+              style="width: 100%"
+              filterable
+            >
+              <el-option
+                v-for="item in executorList"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <!-- <el-col :span="8">
+          <el-form-item label="计划完成时长" prop="duration">
+            <div style="display: flex">
+              <el-input
+                type="number"
+                :disabled="dialogTitle === '派单'"
+                v-model="addForm.duration"
+                size="small"
+                placeholder="请输入"
+                @input="formDataDurationTime"
+              >
+                <template #suffix>分钟</template>
+              </el-input>
+            </div>
+          </el-form-item>
+        </el-col>
+
+        <el-col
+          :span="8"
+          v-if="addForm.autoOrder && !dialogTitle.includes('量具送检')"
+        >
+          <el-form-item label="部门" prop="groupId">
+            <deptSelect
+              v-model="addForm.groupId"
+              @changeGroup="searchDeptNodeClick"
+              :disabled="isBindPlan"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col
+          :span="8"
+          v-if="addForm.autoOrder && !dialogTitle.includes('量具送检')"
+        >
+          <el-form-item label="负责人" prop="executeId">
+            <el-select
+              v-model="addForm.executeId"
+              size="small"
+              style="width: 100%"
+              :disabled="isBindPlan"
+              multiple
+              filterable
+            >
+              <el-option
+                v-for="item in executorList"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8" v-if="!dialogTitle.includes('量具送检')">
+          <el-form-item label="审核人" prop="approvalUserId">
+            <el-select
+              :disabled="dialogTitle === '派单'"
+              v-model="addForm.approvalUserId"
+              size="small"
+              clearable
+              style="width: 100%"
+              filterable
+            >
+              <el-option
+                v-for="item in uerList"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="紧急程度" prop="urgent">
+            <DictSelection
+              dictName="紧急程度"
+              clearable
+              v-model="addForm.urgent"
+              :disabled="dialogTitle === '派单'"
+            >
+            </DictSelection>
+          </el-form-item>
+        </el-col> -->
+        <!-- <el-col :span="8">
+          <el-form-item label="状态" prop="status">
+            <el-switch
+              v-model="addForm.status"
+              active-text="开"
+              inactive-text="关"
+              :active-value="1"
+              :inactive-value="0"
+            />
+          </el-form-item>
+        </el-col> -->
+        <el-col :span="16">
+          <el-form-item label="备注" prop="remark">
+            <el-input
+              type="textarea"
+              resize="none"
+              v-model="addForm.remark"
+              :rows="2"
+              placeholder="请详细说明"
+              size="small"
+              :disabled="dialogTitle === '派单'"
+            ></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+
+      <div class="el-tab_box">
+        <div class="equipmentList_box">
+          <header-title title="设备列表">
+            <div>
+              <el-button
+                size="small"
+                icon="el-icon-plus"
+                class="ele-btn-icon"
+                type="primary"
+                @click="
+                  handleAdd(ruleIdList, ruleIdListIndex, true, equipmentList)
+                "
+                >新增</el-button
+              >
+            </div>
+          </header-title>
+          <el-table :data="equipmentList" border>
+            <el-table-column label="序号" type="index" width="50">
+            </el-table-column>
+            <el-table-column label="设备名称" align="center" prop="name">
+              <template slot-scope="{ row, $index }">
+                <template>
+                  {{ row.name }}
+                </template>
+              </template>
+            </el-table-column>
+            <el-table-column label="编号" align="center" prop="codeNumber">
+              <template slot-scope="{ row, $index }">
+                <template>
+                  {{ row.codeNumber }}
+                </template>
+              </template>
+            </el-table-column>
+            <el-table-column label="固资编码" align="center" prop="fixCode">
+              <template slot-scope="{ row, $index }">
+                <template>
+                  {{ row.fixCode }}
+                </template>
+              </template>
+            </el-table-column>
+            <el-table-column label="操作" width="100">
+              <template slot-scope="scope">
+                <el-button type="text" @click="deleteEquipment(scope.$index)"
+                  >删除</el-button
+                >
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+        <!-- <div class="ruleMatters_box">
+          <header-title title="备品备件">
+            <div v-if="dialogTitle !== '派单'">
+              <el-button
+                size="small"
+                icon="el-icon-plus"
+                class="ele-btn-icon"
+                type="primary"
+                @click="addPostscript"
+                >新增</el-button
+              >
+            </div>
+          </header-title>
+          <el-table :data="equipmentList" border>
+            <el-table-column label="序号" width="50">
+              <template slot-scope="scope">
+                <span>{{ scope.$index + 1 }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="事项" prop="name" width="100">
+              <template slot-scope="scope">
+                <div v-if="scope.row.isNew">
+                  <el-input
+                    v-model="scope.row.name"
+                    placeholder="请输入内容"
+                  ></el-input>
+                </div>
+                <div v-else>
+                  <span>{{ scope.row.name }}</span>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column label="内容" prop="content" width="200">
+              <template slot-scope="scope">
+                <div v-if="scope.row.isNew">
+                  <el-input
+                    v-model="scope.row.content"
+                    placeholder="请输入内容"
+                  ></el-input>
+                </div>
+                <div v-else>
+                  <span>{{ scope.row.content }}</span>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column label="操作指导" prop="operationGuide">
+              <template slot-scope="scope">
+                <div
+                  class="operationGuide_box"
+                  @click="
+                    openOperationGuideDialogDialog(
+                      scope.row.operationGuide,
+                      scope.$index
+                    )
+                  "
+                >
+                  <div class="left_content">
+                    <template v-if="scope.row.operationGuide">
+                      <div
+                        v-for="(item, index) in scope.row.operationGuide
+                          .toolList"
+                        :key="item.id"
+                        >{{ index + 1 }}.{{ item.name }}</div
+                      >
+                    </template>
+                  </div>
+                  <div class="right_content">
+                    <template v-if="scope.row.operationGuide">
+                      <div
+                        v-for="(item, index) in scope.row.operationGuide
+                          .procedureList"
+                        :key="item.id"
+                        >{{ index + 1 }}.{{ item.content }}</div
+                      >
+                    </template>
+                  </div>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column label="标准" prop="norm" width="100">
+              <template slot-scope="scope">
+                <div v-if="scope.row.isNew">
+                  <el-input
+                    v-model="scope.row.norm"
+                    placeholder="请输入内容"
+                  ></el-input>
+                </div>
+                <div v-else>
+                  <span>{{ scope.row.norm }}</span>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column
+              v-if="dialogTitle !== '派单'"
+              label="操作"
+              width="100"
+            >
+              <template slot-scope="scope">
+                <el-button type="text" @click="deleteItem(scope.$index)"
+                  >删除</el-button
+                >
+              </template>
+            </el-table-column>
+          </el-table>
+        </div> -->
+      </div>
+    </el-form>
+    <template v-slot:footer>
+      <el-button @click="visible = false">取消</el-button>
+      <el-button type="primary" @click="save"> 保存</el-button>
+    </template>
+    <!-- 新增设备 -->
+    <MaterialAdd ref="productRefs" @chooseEquipment="chooseEquipment">
+    </MaterialAdd>
+  </ele-modal>
+</template>
+
+<script>
+  import { getDetail, getCode } from '@/api/ruleManagement/matter';
+  import {
+    getRule,
+    getCategory,
+    getAssetList,
+    getInfoById
+  } from '@/api/ruleManagement/plan';
+  import { saveOrUpdate } from '@/api/maintenance/patrol_maintenance';
+  import { getUserPage } from '@/api/system/organization';
+  import { getTreeByType } from '@/api/classifyManage';
+  import MaterialAdd from './MaterialAdd.vue';
+  import OperationGuideDialog from './operationGuideDialog.vue';
+  import deptSelect from '@/components/CommomSelect/dept-select.vue';
+  import { pageList } from '@/api/technology/version/version.js';
+  import { getById } from '@/api/maintenance/patrol_maintenance';
+  import { getFile } from '@/api/system/file';
+  import { deepClone } from 'ele-admin/lib/utils/core';
+  import { data } from 'ele-admin/lib/ele-pro-table';
+
+  export default {
+    components: {
+      MaterialAdd,
+      deptSelect,
+      OperationGuideDialog
+    },
+    props: {
+      dialogTitle: {
+        type: String,
+        default: () => {
+          return '新增巡检点计划配置';
+        }
+      },
+      visible: {
+        type: Boolean,
+        default: false
+      }
+    },
+    data() {
+      const defaultForm = {
+        id: null,
+        code: '',
+        name: '',
+        modelType: '',
+        brandNum: '',
+        specification: '',
+        measuringUnit: '',
+
+        bomList: []
+      };
+      return {
+        ruleIndex: 0, // 规则index
+        ruleId: '',
+        formLabel: '',
+        isBindPlan: false,
+        equipmentList: [],
+        ruleObj: {
+          ruleId: '',
+          name: '',
+          code: '',
+          equipmentList: []
+        },
+        ruleIdList: [],
+        addForm: {
+          id: '',
+          code: '', // 计划配置单号
+          name: '', // 计划配置名称
+          autoOrder: 1, // 自动派单
+          ruleId: '', // 规则id
+          ruleName: '', // 规则名称
+          duration: null, // 计划完成时长
+          categoryId: '', // 设备类别id
+          approvalUserId: '', // 审核人id
+          groupId: '', // 巡点检部门code
+          executeId: [], // 巡点检人员id
+          executorPhone: '',
+          status: 1, // 状态
+          remark: '', // 备注
+          urgent: '1'
+        },
+        ruleNameList: [], // 规则列表
+        uerList: [], // 审核人列表
+        executorList: [], // 业务人员列表
+        defaultForm,
+        // 表单数据
+        form: {
+          ...defaultForm
+        },
+
+        versionList: [],
+
+        // 表单验证规则
+        addFormRules: {
+          name: [
+            { required: true, message: '请输入计划配置名称', trigger: 'blur' }
+          ],
+          autoOrder: [
+            { required: true, message: '请选择是否自动派单', trigger: 'change' }
+          ],
+          ruleId: [
+            { required: true, message: '请选择规则名称', trigger: 'change' }
+          ],
+          duration: [
+            { required: true, message: '请输入计划完成时长', trigger: 'blur' }
+          ],
+          categoryLevelId: [
+            { required: true, message: '请选择设备分类', trigger: 'change' }
+          ],
+          categoryId: [
+            { required: true, message: '请选择设备类别', trigger: 'change' }
+          ],
+          groupId: [
+            { required: true, message: '请选择巡点检部门', trigger: 'change' }
+          ],
+          executeId: [
+            { required: true, message: '请选择巡点检人员', trigger: 'change' }
+          ],
+          urgent: [
+            { required: true, message: '请选择紧急程度', trigger: 'change' }
+          ]
+        },
+
+        columns: [
+          {
+            type: 'index',
+            width: 55,
+            align: 'center'
+          },
+          {
+            label: '子项编号',
+            prop: 'subCode',
+            action: 'subCode'
+          },
+          {
+            label: '物料名称',
+            prop: 'categoryName',
+            action: 'categoryName'
+          },
+
+          {
+            label: '是否回收料',
+            prop: 'isReworkBom',
+            action: 'isReworkBom',
+            slot: 'isReworkBom',
+            width: 95
+          },
+
+          {
+            label: '物料编码',
+            prop: 'categoryCode'
+          },
+          {
+            label: '牌号',
+            prop: 'brandNum'
+          },
+          {
+            label: '型号',
+            prop: 'modelType'
+          },
+          {
+            label: '数量',
+            prop: 'count'
+          },
+          {
+            label: '计量单位',
+            prop: 'unit'
+          },
+
+          {
+            label: '附件',
+            slot: 'bomArtFiles',
+            action: 'bomArtFiles',
+            minWidth: 100
+          },
+
+          {
+            label: '单位',
+            prop: 'weightUnit'
+          },
+
+          {
+            label: '备注',
+            prop: 'remark'
+          }
+        ],
+
+        statusList: [
+          { label: '草稿', value: -1 },
+          { label: '失效', value: 0 },
+          { label: '生效', value: 1 }
+        ],
+
+        // 提交状态
+        loading: false,
+
+        categoryId: null,
+
+        current: null,
+
+        materialShow: false,
+
+        tabsList: [],
+        tableData: [],
+
+        taskId: null,
+
+        addDialog: false,
+        tabsValue: null
+      };
+    },
+    computed: {
+      // 是否开启响应式布局
+      styleResponsive() {
+        return this.$store.state.theme.styleResponsive;
+      }
+    },
+    watch: {
+      visible(val) {
+        if (val) {
+          // 获取审核人列表数据
+          this.getUserList();
+        }
+      }
+    },
+    methods: {
+      // 限制结束时间
+      endTimeRules() {
+        if (this.addForm.planStartTime) {
+          console.log(this.addForm.planStartTime);
+          console.log(new Date(this.addForm.planStartTime).getTime());
+          let differenceTime =
+            new Date(this.addForm.planEndTime).getTime() -
+            new Date(this.addForm.planStartTime).getTime();
+          if (differenceTime <= 0) {
+            this.$message.error('请选择正确的计划开始时间');
+            this.addForm.planEndTime = '';
+          }
+        } else {
+          this.$message.error('请选择正确的计划开始时间');
+          this.addForm.planEndTime = '';
+        }
+      },
+      // 初始化
+      async init(row, tips) {
+        console.log(row);
+        console.log(tips);
+        if (row) {
+          this.getInfo(row.id, tips);
+        } else {
+          //  获取计划配置单号
+          this.getOrderCode(tips);
+          this.addForm = {
+            code: '', // 计划配置单号
+            name: '', // 计划配置名称
+            autoOrder: 1, // 自动派单
+            ruleId: '', // 规则id
+            ruleName: '', // 规则名称
+            duration: null, // 计划完成时长
+            categoryId: '', // 设备类别id
+            approvalUserId: '', // 审核人id
+            groupId: '', // 巡点检部门code
+            executeId: [], // 巡点检人员id
+            executorPhone: '',
+            status: 1, // 状态
+            remark: '', // 备注
+            urgent: '1'
+          };
+          this.ruleIdList = [];
+          this.isBindPlan = false;
+          this.planRuleEquiList = [];
+          //   this.matterRulesList = [];
+        }
+        this.formLabel = '计划性维修';
+        const typeOptions = {
+          巡点检: 1,
+          保养: 2,
+          维修: 3,
+          计划性维修: 4,
+          量具送检: 5
+        };
+        this.addForm.type = typeOptions[this.formLabel];
+        // const planRuleTypeObj = {
+        //   巡点检: 'PATROL',
+        //   保养: 'MAINTAIN',
+        //   量具送检: '',
+        //   盘点: 'INVENTORY'
+        // };
+        // this.addForm.planType = planRuleTypeObj[this.formLabel];
+      },
+      autoOrderChange(val) {
+        if (val == 0) {
+          this.addForm.executeId = '';
+          this.addForm.groupId = '';
+        }
+      },
+      ruleChange(item) {
+        this.ruleObj.name = item.name;
+        this.ruleObj.code = item.code;
+      },
+      save() {
+        console.log(this.addForm);
+        this.$refs.addFormRef.validate(async (valid) => {
+          console.log(valid);
+          if (valid) {
+            const planDeviceList = this.equipmentList.map((item) => {
+              return {
+                deviceId: item.id,
+                codeNumber: item.codeNumber,
+                equiLocation: item.position[0].pathName,
+                equiLocationCode: item.position[0].pathIds,
+                repairUserId: item.repairUserId,
+                workItems: []
+              };
+            });
+            let boolen = planDeviceList.length > 0;
+            if (!boolen) {
+              this.$message.error('请添加设备!');
+              return false;
+            }
+            let sendMsg = [
+              {
+                ...this.addForm,
+                planDeviceList: planDeviceList,
+                executorId:
+                  planDeviceList.length > 0
+                    ? planDeviceList.map((item) => item.repairUserId).join(',')
+                    : ''
+              }
+            ];
+            let type = this.dialogTitle.includes('新增') ? '新增' : '编辑';
+            try {
+              let res = await saveOrUpdate(sendMsg);
+              if (res) {
+                this.$message.success(type + '成功!');
+                this.visible = false;
+                this.$emit('done');
+              }
+            } catch (error) {
+              this.$message.error(type + '失败!');
+            }
+          }
+        });
+      },
+      deleteEquipment(index) {
+        this.equipmentList.splice(index, 1);
+      },
+      async getInfo(id, tips) {
+        console.log(id);
+        try {
+          const res = await getById(id);
+          console.log('res----------', res);
+          this.addForm = res.data;
+          this.addForm.id = res.data.planId;
+          if (this.dialogTitle === '派单') {
+            this.addForm.autoOrder = 1;
+          }
+          this.isBindPlan = res.isBindPlan;
+          // this.categoryEquipment(res.categoryLevelId);
+          this.ruleIdList = [
+            {
+              id: res.data.id,
+              ruleId: res.data.ruleId,
+              name: res.data.name,
+              code: res.data.code,
+              categoryId: res.data.categoryId,
+              equipmentList: res.data.planDeviceList.map((item) => {
+                return {
+                  name: item.substance.name,
+                  position: item.substance.position,
+                  id: item.substance.id,
+                  fixCode: item.substance.fixCode,
+                  codeNumber: item.substance.codeNumber
+                  // category: {
+                  //   categoryLevelId: item.categoryId,
+                  //   categoryLevelName: item.categoryName
+                  // }
+                };
+              }),
+              ruleItems: res.data.planDeviceList[0].workItems
+            }
+          ];
+          console.log(this.ruleIdList);
+          this.tabsValue = this.ruleIdList[0].ruleId;
+          // const params = { groupId: res.data.groupId };
+          // this.getUserList(params);
+          // this._getMatterRulesDetails(res.ruleId);
+          this.$set(this.addForm, 'code', res.data.code);
+          this.$set(this.addForm, 'urgent', JSON.stringify(res.data.urgent));
+          this.$set(this.addForm, 'executeId', res.data.executeId.split(','));
+          this.$set(this.addForm, 'imageUrl', {});
+          console.log(this.rootData);
+        } catch (error) {
+          console.log(error);
+        }
+      },
+      // 获取设备分类数据
+      async categoryEquipment(id) {
+        const params = { categoryLevelId: id, pageNum: 1, size: -1 };
+        console.log('params==', params);
+        const data = await getCategory(params);
+        console.log(data);
+        this.equipmentList = data.list;
+      },
+      // 选择设备
+      chooseEquipment(data) {
+        console.log(data);
+        this.equipmentList = this.equipmentList.concat(data);
+      },
+      // 获取计划配置单号
+      async getOrderCode(tips) {
+        if (tips.includes('计划性维修')) {
+          const code = await getCode('repair_plan_code');
+          this.$set(this.addForm, 'code', code);
+        }
+      },
+      // 选择审核部门
+      searchDeptNodeClick(info, data) {
+        if (info) {
+          // 根据部门获取人员
+          this.addForm.approvalUserName = data.name;
+          const params = { groupId: info };
+          this.getUserList(params);
+        } else {
+          this.addForm.approvalUserId = null;
+          this.executorList = [];
+        }
+      },
+      //选择部门(搜索)
+      // searchDeptNodeClick(info, data) {
+      //   if (info) {
+      //     // 根据部门获取人员
+      //     this.addForm.groupName = data.name;
+      //     const params = { groupId: info };
+      //     this.getUserList(params);
+      //   } else {
+      //     this.addForm.groupId = null;
+      //   }
+      // },
+      // 过滤计划完成时长
+      formDataDurationTime(value) {
+        if (value > 0) {
+          this.addForm.duration = value.replace(/^[0]+/, '');
+        } else {
+          this.addForm.duration = 0;
+        }
+      },
+      // 获取审核人列表、巡点检人员
+      async getUserList(params) {
+        try {
+          let data = { pageNum: 1, size: -1 };
+          // 如果传了参数就是获取巡点检人员数据
+          if (params) {
+            data = Object.assign(data, params);
+          }
+          const res = await getUserPage(data);
+          console.log('res------------', res);
+          if (params) {
+            this.executorList = res.list;
+          } else {
+            this.uerList = res.list;
+          }
+        } catch (error) {}
+      },
+      downloadFile(file) {
+        getFile({ objectName: file.storePath }, file.name);
+      },
+      /* 表格数据源 */
+      datasource({ page, limit, where }) {
+        return [];
+      },
+
+      async getVersionList() {
+        const res = await pageList({
+          pageNum: 1,
+          size: 100
+        });
+
+        this.versionList = res.list;
+      },
+
+      handleAdd(ruleIdList, ruleIdListIndex, isAlone, data) {
+        this.$refs.productRefs.open(ruleIdList, ruleIdListIndex, isAlone, data);
+      },
+
+      /* 更新visible */
+      updateVisible(value) {
+        this.$emit('update:visible', value);
+      },
+
+      handleAddTab() {
+        this.tableData = this.tabsList;
+        this.addDialog = true;
+      },
+
+      handleTab(e) {
+        this.ruleIndex = e.index;
+        // this.ruleIdList[e.index].ruleItems = this._getMatterRulesDetails(this.ruleId)
+      },
+      /*关闭选择参数*/
+      closeAdd() {
+        this.addDialog = false;
+      },
+      // 规则名称下拉触发
+      handleRuleNameChange(val) {
+        this.ruleId = val;
+        console.log('val----', val);
+        // this._getMatterRulesDetails(val);
+      },
+      // 封装 - 获取规则下面的详情数据及事项
+      async _getMatterRulesDetails(val) {
+        const res = await getDetail(val);
+        return res.ruleItems;
+        // console.log('res------', res);
+        // this.matterRulesList = res.ruleItems;
+      }
+    }
+  };
+</script>
+
+<style lang="scss" scoped>
+  ::v-deep .el-row {
+    display: flex;
+    flex-wrap: wrap;
+  }
+  ::v-deep .el-tab_box {
+    display: flex;
+    margin-top: 10px;
+    height: 300px;
+    width: 100%;
+    .equipmentList_box {
+      flex: 1;
+      height: 100%;
+      margin-right: 10px;
+      display: flex;
+      flex-direction: column;
+      .divider {
+        flex: 0 0 50px;
+        .title {
+          height: 35px;
+        }
+      }
+      .el-table {
+        overflow: auto;
+      }
+    }
+    .ruleMatters_box {
+      flex: 3;
+      height: 100%;
+      display: flex;
+      flex-direction: column;
+      overflow: hidden;
+      .divider {
+        flex: 0 0 50px;
+        .title {
+          height: 35px;
+        }
+      }
+      .el-table {
+        overflow: auto;
+        .operationGuide_box {
+          width: 100%;
+          height: 50px;
+          display: flex;
+          overflow: hidden;
+          cursor: pointer;
+          .left_content {
+            flex: 0 0 200px;
+            padding: 10px;
+            box-sizing: border-box;
+            border: 1px solid #c0c4cc;
+            border-radius: 10px;
+            margin-right: 10px;
+            overflow-y: auto;
+          }
+          .right_content {
+            flex: 1;
+            padding: 10px;
+            box-sizing: border-box;
+            border: 1px solid #c0c4cc;
+            border-radius: 10px;
+            overflow-y: auto;
+          }
+        }
+      }
+      .el-table::before {
+        display: none;
+      }
+    }
+  }
+</style>

+ 10 - 0
src/views/maintenance/components/signingUpWork.vue

@@ -44,6 +44,16 @@
                     item.substance.positionNames
                   }}</span>
                 </div>
+                <div class="item_info">
+                  <span class="item_label">固资编码</span>
+                  <span class="item_value">{{ item.substance.fixCode }}</span>
+                </div>
+                <div class="item_info">
+                  <span class="item_label">编号</span>
+                  <span class="item_value">{{
+                    item.substance.extInfo.codeNumber
+                  }}</span>
+                </div>
               </div>
               <p>操作事项</p>
               <div class="ruleMatters_box">

+ 15 - 2
src/views/maintenance/delivery/plan/details.vue

@@ -157,7 +157,7 @@
                 prop="handTime"
               ></el-table-column>
               <el-table-column
-                label="负责人确认结果"
+                label="使用人上交负责人确认结果"
                 width="260"
                 prop="teamLeaderResult"
               >
@@ -173,6 +173,18 @@
                 label="负责人确认时间"
                 prop="teamReceiptTime"
               ></el-table-column>
+              <el-table-column
+                label="量具管理员确认时间"
+                prop="leaderVerifyTime"
+              ></el-table-column>
+              <el-table-column
+                label="负责人确认收到时间"
+                prop="teamVerifyTime"
+              ></el-table-column>
+              <el-table-column
+                label="使用人收取量具时间"
+                prop="harvestTime"
+              ></el-table-column>
               <el-table-column label="操作" width="90">
                 <template slot-scope="scope">
                   <el-button
@@ -600,7 +612,8 @@
         },
         qualityStatusOptions: {
           0: '正常',
-          1: '异常'
+          1: '异常',
+          2: '未收'
         },
         harvestOptions: {
           1: '已收',

+ 62 - 3
src/views/maintenance/equipment/plan/details.vue

@@ -102,7 +102,36 @@
             </el-col>
           </el-row>
         </div>
-
+        <!-- 备品备件 -->
+        <div v-if="sparePartsList.length > 0" class="maintain_spareParts_info">
+          <HeaderTitle title="备品备件" size="16px"></HeaderTitle>
+          <div
+            class="maintain_spareParts_info_content"
+            v-for="(item, index) in sparePartsList"
+          >
+            <div class="title">
+              <span>工单号:{{ item.workOrderId }}</span>
+            </div>
+            <el-table :data="item.infoList" border>
+              <el-table-column label="序号" width="50">
+                <template slot-scope="scope">
+                  <span>{{ scope.$index + 1 }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column
+                label="备件物品编码"
+                prop="code"
+              ></el-table-column>
+              <el-table-column label="备件名称" prop="name"></el-table-column>
+              <el-table-column
+                label="所属分类"
+                prop="typeName"
+              ></el-table-column>
+              <el-table-column label="型号" prop="model"></el-table-column>
+              <el-table-column label="使用数量" prop="num"></el-table-column>
+            </el-table>
+          </div>
+        </div>
         <!-- 巡点检、保养设备 -->
         <div class="maintain_equipment_info">
           <HeaderTitle title="保养设备" size="16px"></HeaderTitle>
@@ -356,7 +385,7 @@
 <script>
   // import { getDetail, sendAudit } from '@/api/stockManagement/stocking'
   // import { useDictLabel, patrolMatterStatus } from '@/utils/dict/index'
-  import { getById } from '@/api/maintenance/patrol_maintenance';
+  import { getById, getSpareParts } from '@/api/maintenance/patrol_maintenance';
   import dictMixins from '@/mixins/dictMixins';
   export default {
     mixins: [dictMixins],
@@ -381,12 +410,14 @@
         ruleItem: [],
         cause: '',
         showtext: false,
-        infoData: {}
+        infoData: {},
+        sparePartsList: []
       };
     },
     async created() {
       this.requestDict('巡点检周期');
       this.getInfo();
+      this.getSparePartsList();
     },
     methods: {
       // getStatus: useDictLabel(patrolMatterStatus),
@@ -395,6 +426,24 @@
       tab(index) {
         this.num = index;
       },
+      // 通过工单查询备品备件
+      getSparePartsList() {
+        getSpareParts(this.$route.query.id).then((data) => {
+          console.log(data);
+          this.sparePartsList = data.map((item) => {
+            item.infoList = item.content.infoList.map((innerItem) => {
+              return {
+                sparePartsId: innerItem.sparePartsId,
+                ...JSON.parse(innerItem.sparePartsList)
+              };
+            });
+            return {
+              ...item
+            };
+          });
+          console.log(this.sparePartsList);
+        });
+      },
       // 表格数据
       async getInfo() {
         this.pageLoading = true;
@@ -596,6 +645,16 @@
     background: #cc3300;
   }
 
+  .maintain_spareParts_info {
+    margin-bottom: 20px;
+    .maintain_spareParts_info_content {
+      .title {
+        padding: 20px 0;
+        font-size: 16px;
+      }
+    }
+  }
+
   .maintain_equipment_info {
     .maintain_equipment_info_title {
       border-bottom: 1px solid #1890ff;

+ 62 - 3
src/views/maintenance/patrol/plan/details.vue

@@ -102,7 +102,36 @@
             </el-col>
           </el-row>
         </div>
-
+        <!-- 备品备件 -->
+        <div v-if="sparePartsList.length > 0" class="maintain_spareParts_info">
+          <HeaderTitle title="备品备件" size="16px"></HeaderTitle>
+          <div
+            class="maintain_spareParts_info_content"
+            v-for="(item, index) in sparePartsList"
+          >
+            <div class="title">
+              <span>工单号:{{ item.workOrderId }}</span>
+            </div>
+            <el-table :data="item.infoList" border>
+              <el-table-column label="序号" width="50">
+                <template slot-scope="scope">
+                  <span>{{ scope.$index + 1 }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column
+                label="备件物品编码"
+                prop="code"
+              ></el-table-column>
+              <el-table-column label="备件名称" prop="name"></el-table-column>
+              <el-table-column
+                label="所属分类"
+                prop="typeName"
+              ></el-table-column>
+              <el-table-column label="型号" prop="model"></el-table-column>
+              <el-table-column label="使用数量" prop="num"></el-table-column>
+            </el-table>
+          </div>
+        </div>
         <!-- 巡点检、保养设备 -->
         <div class="maintain_equipment_info">
           <HeaderTitle title="巡点检设备" size="16px"></HeaderTitle>
@@ -356,7 +385,7 @@
 <script>
   // import { getDetail, sendAudit } from '@/api/stockManagement/stocking'
   // import { useDictLabel, patrolMatterStatus } from '@/utils/dict/index'
-  import { getById } from '@/api/maintenance/patrol_maintenance';
+  import { getById, getSpareParts } from '@/api/maintenance/patrol_maintenance';
   import dictMixins from '@/mixins/dictMixins';
   export default {
     mixins: [dictMixins],
@@ -381,12 +410,14 @@
         ruleItem: [],
         cause: '',
         showtext: false,
-        infoData: {}
+        infoData: {},
+        sparePartsList: []
       };
     },
     async created() {
       this.requestDict('巡点检周期');
       this.getInfo();
+      this.getSparePartsList();
     },
     methods: {
       // getStatus: useDictLabel(patrolMatterStatus),
@@ -406,6 +437,24 @@
         }
         this.pageLoading = false;
       },
+      // 通过工单查询备品备件
+      getSparePartsList() {
+        getSpareParts(this.$route.query.id).then((data) => {
+          console.log(data);
+          this.sparePartsList = data.map((item) => {
+            item.infoList = item.content.infoList.map((innerItem) => {
+              return {
+                sparePartsId: innerItem.sparePartsId,
+                ...JSON.parse(innerItem.sparePartsList)
+              };
+            });
+            return {
+              ...item
+            };
+          });
+          console.log(this.sparePartsList);
+        });
+      },
       //通过按钮事件
       pass() {
         let params = {
@@ -701,6 +750,16 @@
       }
     }
   }
+
+  .maintain_spareParts_info {
+    margin-bottom: 20px;
+    .maintain_spareParts_info_content {
+      .title {
+        padding: 20px 0;
+        font-size: 16px;
+      }
+    }
+  }
   .examine_info {
     margin-bottom: 30px;
     .examine_info_title {

+ 3 - 3
src/views/maintenance/repair/components/RepairDetailsDialog.vue

@@ -99,7 +99,7 @@
       <el-tab-pane label="报修信息" name="repairApplication">
         <el-row class="repair_row">
           <el-col :span="12" class="repair_column">
-            <span>报修记录编号:</span>
+            <span>编号:</span>
             <span>{{ infoData ? infoData.code : '' }}</span>
           </el-col>
           <el-col :span="12" class="repair_column">
@@ -126,7 +126,7 @@
           </el-col>
           <el-col :span="12" class="repair_column">
             <span>报修人:</span>
-            <span>{{ infoData ? infoData.repairUserName : '' }}</span>
+            <span>{{ infoData ? infoData.requestUserName : '' }}</span>
           </el-col>
         </el-row>
         <el-row class="repair_row">
@@ -165,7 +165,7 @@
       <el-tab-pane label="报修信息" name="repairApplication">
         <el-row class="repair_row">
           <el-col :span="12" class="repair_column">
-            <span>报修记录编号:</span>
+            <span>编号:</span>
             <span>{{ infoData ? infoData.code : '' }}</span>
           </el-col>
           <el-col :span="12" class="repair_column">

+ 26 - 5
src/views/maintenance/repair/components/repairReportingWork.vue

@@ -47,6 +47,16 @@
                     item.substance.positionNames
                   }}</span>
                 </div>
+                <div class="item_info">
+                  <span class="item_label">固资编码</span>
+                  <span class="item_value">{{ item.substance.fixCode }}</span>
+                </div>
+                <div class="item_info">
+                  <span class="item_label">编号</span>
+                  <span class="item_value">{{
+                    item.substance.extInfo.codeNumber
+                  }}</span>
+                </div>
               </div>
               <p>操作事项</p>
               <div class="ruleMatters_box">
@@ -157,7 +167,10 @@
 
 <script>
   import { report } from '@/api/equipment/work.js';
-  import { getById } from '@/api/maintenance/patrol_maintenance';
+  import {
+    getById,
+    getRepairInfoById
+  } from '@/api/maintenance/patrol_maintenance';
   export default {
     data() {
       return {
@@ -180,8 +193,8 @@
       };
     },
     methods: {
-      open(row) {
-        this.getInfo(row);
+      open(row, isRepaire) {
+        this.getInfo(row, isRepaire);
         this.visible = true;
       },
       cancel() {
@@ -215,8 +228,16 @@
         }
       },
       // 表格数据
-      async getInfo(row) {
-        let res = await getById(row.planId);
+      async getInfo(row, isRepaire) {
+        let res = null;
+        if (isRepaire) {
+          res = await getRepairInfoById({
+            id: row.planId,
+            workOrderId: row.id
+          });
+        } else {
+          res = await getById(row.planId);
+        }
         console.log(row);
         this.infoData = res.data;
         this.infoData.workOrderId = row.id;

+ 102 - 29
src/views/maintenance/repair/planRepair/components/maintenance-search.vue

@@ -9,37 +9,63 @@
     <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-input clearable v-model="where.planCode" placeholder="请输入" />
         </el-form-item>
-        <el-form-item label="创建时间:">
+        <el-form-item label="计划性质:">
+          <el-select
+            clearable
+            filterable
+            v-model="where.cycleType"
+            class="w100"
+          >
+            <el-option label="自动" :value="1"></el-option>
+            <el-option label="手动" :value="2"></el-option>
+          </el-select>
+        </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.planName" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="设备分类:">
+          <equipmentSelect v-model="where.categoryLevelId" />
+        </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.ruleName" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="生成时间:">
           <el-date-picker
             v-model="where.time"
             type="daterange"
+            align="right"
+            unlink-panels
             range-separator="至"
             start-placeholder="开始日期"
             end-placeholder="结束日期"
+            :picker-options="pickerOptions"
             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="计划名称:">
-          <el-input clearable v-model="where.name" placeholder="请输入" />
-        </el-form-item>
-      </el-col>
-      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-form-item label="报修人:">
-          <personSelect
-			 ref="executorRef"
-			 v-model="where.executorId"
-          />
-        </el-form-item>
-      </el-col>
       <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
         <el-form-item label="状态:">
-          <DictSelection dictName="维修计划状态" v-model="where.status" />
+          <el-select
+            clearable
+            filterable
+            v-model="where.planStatus"
+            class="w100"
+          >
+            <el-option label="待派单" :value="0"></el-option>
+            <el-option label="已派单" :value="1"></el-option>
+            <el-option label="执行中" :value="2"></el-option>
+            <el-option label="已完成" :value="3"></el-option>
+            <el-option label="已撤回" :value="4"></el-option>
+            <el-option label="已驳回" :value="4"></el-option>
+          </el-select>
         </el-form-item>
         <div class="ele-form-actions">
           <el-button
@@ -65,38 +91,80 @@
 </template>
 
 <script>
-  import personSelect from '@/components/CommomSelect/person-select.vue';
+  import equipmentSelect from '@/components/CommomSelect/equipment-select.vue';
   export default {
-    components: { personSelect },
-    data () {
+    components: { equipmentSelect },
+    data() {
       // 默认表单数据
       const defaultWhere = {
-        name: '',
-        code: '',
+        planName: '',
+        planCode: '',
         fixCode: '',
-        ownershipGroupId: ''
+        time: [],
+        ruleName: '',
+        categoryLevelId: ''
       };
       return {
         // 表单数据
         where: { ...defaultWhere },
-        treeData: []
+        treeData: [],
+        pickerOptions: {
+          shortcuts: [
+            {
+              text: '最近一周',
+              onClick(picker) {
+                const end = new Date();
+                const start = new Date();
+                start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+                picker.$emit('pick', [start, end]);
+              }
+            },
+            {
+              text: '最近一个月',
+              onClick(picker) {
+                const end = new Date();
+                const start = new Date();
+                start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+                picker.$emit('pick', [start, end]);
+              }
+            },
+            {
+              text: '最近三个月',
+              onClick(picker) {
+                const end = new Date();
+                const start = new Date();
+                start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+                picker.$emit('pick', [start, end]);
+              }
+            }
+          ]
+        }
       };
     },
     computed: {
       // 是否开启响应式布局
-      styleResponsive () {
+      styleResponsive() {
         return this.$store.state.theme.styleResponsive;
       }
     },
-    created () {},
+    created() {},
     methods: {
       /* 搜索 */
-      search () {
-        console.log(this.where);
-        this.$emit('search', this.where);
+      search() {
+        const parmas = this.where;
+        if (parmas.time != null && parmas.time?.length) {
+          parmas.startTime = parmas.time[0];
+          parmas.endTime = parmas.time[1];
+        }
+        if (parmas.time == null) {
+          parmas.startTime = '';
+          parmas.endTime = '';
+        }
+        delete parmas.time;
+        this.$emit('search', parmas);
       },
       /*  重置 */
-      reset () {
+      reset() {
         this.where = { ...this.defaultWhere };
         this.search();
       }
@@ -109,4 +177,9 @@
     align-items: center;
     justify-content: flex-end;
   }
+  ::v-deep {
+    .el-range-editor--medium.el-input__inner {
+      width: 100%;
+    }
+  }
 </style>

+ 51 - 22
src/views/maintenance/repair/planRepair/index.vue

@@ -16,7 +16,7 @@
             type="primary"
             icon="el-icon-plus"
             class="ele-btn-icon"
-            @click="jumpAdd()"
+            @click="openAdd('新增计划性维修配置')"
           >
             新增维修计划
           </el-button>
@@ -42,14 +42,14 @@
 	     </template> -->
         <!-- 操作列 -->
         <template v-slot:action="{ row }">
-          <el-link
+          <!-- <el-link
             type="primary"
             :underline="false"
             icon="el-icon-edit"
-            @click="toEdit(row)"
+            @click="openAdd('编辑计划性维修配置')"
           >
             编辑
-          </el-link>
+          </el-link> -->
           <el-popconfirm
             class="ele-action"
             title="确认撤销这条报修记录吗?"
@@ -67,19 +67,30 @@
 
     <!-- 详情 -->
     <DetailDialog ref="detailDialogRef" />
+    <!-- 新建或编辑弹窗 -->
+    <planRepaireDialog
+      ref="planRepaireDialog"
+      :visible.sync="addPlanRepaireDialog"
+      :dialogTitle="dialogTitle"
+      :isBindPlan="isBindPlan"
+      @done="reload"
+    />
   </div>
 </template>
 
 <script>
+  import planRepaireDialog from '../../components/planRepaireDialog.vue';
   import MaintenanceSearch from './components/maintenance-search.vue';
   import DetailDialog from './components/detailDialog.vue';
-  import { getPlanList, removePlan } from '@/api/maintenance/repair_report';
+  import { removePlan } from '@/api/maintenance/repair_report';
+  import { getPage } from '@/api/maintenance/patrol_maintenance';
   import dictMixins from '@/mixins/dictMixins';
   export default {
     mixins: [dictMixins],
     components: {
       MaintenanceSearch,
-      DetailDialog
+      DetailDialog,
+      planRepaireDialog
     },
     data() {
       return {
@@ -95,15 +106,15 @@
             fixed: 'left'
           },
           {
-            prop: 'code',
-            label: '维修计划单号',
+            prop: 'planCode',
+            label: '计划维修单号',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 110
           },
           {
-            prop: 'name',
-            label: '维修计划名称',
+            prop: 'planName',
+            label: '计划维修名称',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 110
@@ -121,19 +132,26 @@
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 110,
-            formatter: (_row, _column, cellValue) => {
-              return this.getDictValue('维修计划状态', _row.planStatus);
+            formatter: (item) => {
+              return {
+                0: '待派单',
+                1: '已派单',
+                2: '执行中',
+                3: '已完成',
+                4: '已撤回',
+                5: '已驳回'
+              }[item.planStatus];
             }
           },
+          // {
+          //   prop: 'number',
+          //   label: '维修人员',
+          //   align: 'center',
+          //   showOverflowTooltip: true,
+          //   minWidth: 110
+          // },
           {
-            prop: 'number',
-            label: '维修人员',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 110
-          },
-          {
-            prop: 'executor',
+            prop: 'createUserName',
             label: '创建人',
             align: 'center',
             showOverflowTooltip: true,
@@ -165,7 +183,10 @@
         repairInfoLogs: [],
         addDialogTitle: '新增报修记录',
         detailsDialogTitle: '报修记录详情',
-        deviceInfo: {} //设备信息
+        deviceInfo: {}, //设备信息
+        dialogTitle: '',
+        addPlanRepaireDialog: false,
+        isBindPlan: false
       };
     },
     computed: {},
@@ -173,9 +194,17 @@
       this.requestDict('维修计划状态');
     },
     methods: {
+      openAdd(dialogTitle, row) {
+        this.isBindPlan = false;
+        this.addPlanRepaireDialog = true;
+        this.dialogTitle = dialogTitle;
+        this.$nextTick(() => {
+          this.$refs.planRepaireDialog.init(row, '计划性维修');
+        });
+      },
       /* 表格数据源 */
       datasource({ page, limit, where, order }) {
-        return getPlanList({ pageNum: page, size: limit, ...where });
+        return getPage({ pageNum: page, size: limit, ...where, planType: 4 });
       },
       async changeEnable(row) {
         const res = await putRoles(row);

+ 11 - 8
src/views/maintenance/repair/workOrder/index.vue

@@ -138,6 +138,7 @@
           },
           {
             prop: 'planCode',
+            // label: '关联单号',
             label: '计划单号',
             align: 'center',
             showOverflowTooltip: true,
@@ -151,22 +152,22 @@
             minWidth: 110
           },
           {
-            prop: 'ruleName',
-            label: '规则名称',
+            prop: 'substanceDetailVO.name',
+            label: '设备名称',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 110
           },
           {
-            prop: 'equiCode',
-            label: '设备编号',
+            prop: 'substanceDetailVO.fixCode',
+            label: '固资编码',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 110
           },
           {
-            prop: 'equiName',
-            label: '设备名称',
+            prop: 'substanceDetailVO.codeNumber',
+            label: '设备编号',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 110
@@ -259,7 +260,9 @@
     },
     methods: {
       async handleNewSave() {
-        let userInfo = JSON.parse(localStorage.getItem('info'));
+        let { user } = JSON.parse(sessionStorage.getItem('vuex-eam'));
+        console.log(user);
+        let userInfo = user.info;
         let obj = {
           fromUser: userInfo.userId,
           bizType: '4', // 领用出库
@@ -497,7 +500,7 @@
       },
       // 报工
       toReport(row) {
-        this.$refs.repairReportingWorkRef.open(row);
+        this.$refs.repairReportingWorkRef.open(row, true);
       }
     }
   };