Quellcode durchsuchen

Merge remote-tracking branch 'origin/master'

Z vor 2 Jahren
Ursprung
Commit
559ea00f9d

+ 42 - 0
src/api/tickets/index.js

@@ -31,3 +31,45 @@ export async function getWordOrderDetail(workOrderId) {
   }
   return Promise.reject(new Error(res.data.message));
 }
+
+// 工单转派
+export async function workOrderRotate(data) {
+  const res = await request.get('/eam/workordermaintenance/rotate', {
+    params: data
+  });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 报工
+export async function report(data) {
+  const res = await request.post('/eam/workordermaintenance/report', 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/planmaintenance/getById/${id}`);
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询人员列表
+ * @param params 查询条件
+ */
+export async function getUserPage(params) {
+  let par = new URLSearchParams(params);
+  const res = await request.get(`/main/user/getUserPage?` + par, {});
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 65 - 10
src/views/bpm/handleTask/components/outsourcedWarehousing/submit.vue

@@ -21,11 +21,21 @@
         <el-input type="textarea" v-model="form.reason" placeholder="请输入审批建议" />
       </el-form-item>
     </el-form>
-    <div style="margin-left: 10%; margin-bottom: 20px; font-size: 14px">
+    <div style="margin-left: 10%; margin-bottom: 20px; font-size: 14px" v-if="clientEnvironmentId == 3">
       <el-button icon="el-icon-edit-outline" type="success" size="mini" @click="handleAudit(1)">通过
       </el-button>
 
-      <el-button icon="el-icon-circle-close" type="danger" size="mini" @click="handleAudit(0)">驳回
+      <el-button icon="el-icon-circle-close" v-if="taskDefinitionKey != 'purchaseLeader'" type="danger" size="mini" @click="handleAudit(0)">驳回
+      </el-button>
+
+    </div>
+
+    <!-- 索尔 -->
+    <div style="margin-left: 10%; margin-bottom: 20px; font-size: 14px" v-if="clientEnvironmentId == 2">
+      <el-button icon="el-icon-edit-outline" type="success" size="mini" @click="handleAudit2(1)">通过
+      </el-button>
+
+      <el-button icon="el-icon-circle-close" type="danger" size="mini" @click="handleAudit2(0)">驳回
       </el-button>
 
     </div>
@@ -72,6 +82,12 @@ export default {
 
     };
   },
+
+  computed: {
+    clientEnvironmentId() {
+      return this.$store.state.user.info.clientEnvironmentId;
+    },
+  },
   created() {
     if (this.taskDefinitionKey == 'purchaseLeader')
       this.userOptionsFn()
@@ -87,14 +103,20 @@ export default {
 
     async handleAudit(status) {
 
-      if (this.taskDefinitionKey == 'purchaseLeader') {
+      if (this.taskDefinitionKey == 'purchaseLeader') { // 采购主管审核
         this._approveTaskPurchaseLeader(status)
-      } else {
+      } else if (this.taskDefinitionKey == 'deptLeader') {
         this._approveTaskWithVariables(status);
       }
 
 
     },
+
+
+    handleAudit2(status) {
+      this._approveTaskThorVariables(status)
+    },
+
     async _approveTaskWithVariables(status) {
       let variables = {
         pass: !!status
@@ -130,9 +152,9 @@ export default {
 
         }).then((res) => {
           this.$emit('handleAudit', {
-              status,
-              title: ''
-            });
+            status,
+            title: ''
+          });
         });
       } else if (status == 0) {
         outsourceNotPass({
@@ -141,9 +163,9 @@ export default {
           pass: false
         }).then((res) => {
           this.$emit('handleAudit', {
-              status,
-              title: '驳回'
-            });
+            status,
+            title: '驳回'
+          });
         });
       }
 
@@ -151,6 +173,39 @@ export default {
 
 
 
+    async _approveTaskThorVariables(status) {
+
+
+      if (status == 1) {
+
+        outsourceAssign({
+          businessId: this.businessId,
+          id: this.taskId,
+          reason: this.form.reason,
+          pass: true
+
+        }).then((res) => {
+          this.$emit('handleAudit', {
+            status,
+            title: ''
+          });
+        });
+      } else if (status == 0) {
+        outsourceNotPass({
+          id: this.taskId,
+          reason: this.form.reason,
+          pass: false
+        }).then((res) => {
+          this.$emit('handleAudit', {
+            status,
+            title: '驳回'
+          });
+        });
+      }
+
+    },
+
+
 
   }
 };

+ 230 - 0
src/views/bpm/tickets/components/redeployOther.vue

@@ -0,0 +1,230 @@
+<template>
+  <el-dialog :visible.sync="visible" title="转派工单" width="60%">
+    <div class="sparepart-apply">
+      <div class="select-box">
+        <el-form label-width="80px">
+          <el-row :gutter="40">
+            <el-col :span="10">
+              <el-form-item label="工单单号">
+                <el-input v-model="row.code" disabled></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="10">
+              <el-form-item label="部门">
+                <deptSelect v-model="groupId" @changeGroup="deptClick" />
+                <!-- <selectTree
+                        ref="treeDept"
+                        class="form-input"
+                        :options="treeList"
+                        size="small"
+                        :props="{
+                          value: 'code',
+                          label: 'name',
+                          children: 'children',
+                        }"
+                        @getValue="deptClick"
+                      /> -->
+              </el-form-item>
+            </el-col>
+            <el-col :span="10">
+              <el-form-item label="" label-width="10px">
+                <el-input v-model="name" placeholder="搜索姓名"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="" label-width="10px">
+                <el-button @click="search" type="primary" icon="el-icon-search"
+                  >搜索</el-button
+                >
+                <el-button @click="reset" icon="el-icon-refresh-left"
+                  >重置</el-button
+                >
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
+
+      <div class="data-tab">
+        <ele-pro-table
+          ref="tableRef"
+          :columns="columns"
+          highlight-current-row
+          :datasource="datasource"
+          @current-change="handleChange"
+          cache-key="redeployOther"
+        ></ele-pro-table>
+      </div>
+      <div slot="footer" class="footer">
+        <el-button @click="cancel">返回</el-button>
+        <el-button type="primary" @click="submit">提交</el-button>
+      </div>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  import deptSelect from '@/components/CommomSelect/dept-select.vue';
+  import { workOrderRotate } from '@/api/tickets';
+  import { getUserPage } from '@/api/tickets';
+  export default {
+    components: { deptSelect },
+    props: {
+      // sourceType: {
+      //   type: Number, //1,保养工单;2,维修工单
+      //   required: true
+      // }
+    },
+    data() {
+      return {
+        visible: false,
+        treeList: [],
+        pages: {
+          pageNum: 1,
+          size: 15
+        },
+        total: 0,
+        selectedRow: {},
+        groupId: '',
+        executorDeptName: '',
+        name: '',
+        row: {},
+        columns: [
+          {
+            columnKey: 'index',
+            label: '序号',
+            type: 'index',
+            width: 55,
+            align: 'center',
+            showOverflowTooltip: true,
+            fixed: 'left'
+          },
+          {
+            prop: 'jobNumber',
+            label: '工号',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'name',
+            label: '姓名',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'phone',
+            label: '电话',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'groupName',
+            label: '部门',
+            align: 'center',
+            showOverflowTooltip: true
+          }
+        ]
+      };
+    },
+    async created() {},
+    methods: {
+      open(row) {
+        this.row = row;
+        this.name = '';
+        this.groupId = '';
+        this.executorDeptName = '';
+        this.selectedRow = {};
+        this.visible = true;
+      },
+
+      //重置
+      reset() {
+        this.name = '';
+        this.search();
+      },
+      // 搜索
+      search() {
+        this.$refs.tableRef.reload();
+      },
+
+      deptClick(data) {
+        if (data) {
+          this.$refs.tableRef.reload();
+        }
+      },
+
+      // 获取审核人列表、巡点检人员
+      async datasource({ page, limit, where, order }) {
+        this.selectedRow = {};
+        // 如果传了参数就是获取巡点检人员数据
+        return getUserPage({
+          pageNum: page,
+          size: limit,
+          ...where,
+          groupId: this.groupId,
+          name: this.name
+        });
+      },
+
+      // 表格选中行
+      handleChange(row) {
+        console.log(row);
+        if (row) {
+          this.selectedRow = row;
+        }
+      },
+
+      async submit() {
+        if (this.selectedRow.id) {
+          let params = {
+            acceptUserId: this.selectedRow.id,
+            workOrderId: this.row.id
+          };
+          await workOrderRotate(params);
+          this.$message.success(`该工单成功转派给${this.selectedRow.name}`);
+          this.visible = false;
+          this.$emit('refresh');
+        } else {
+          return this.$message.warning('请选择转派人员');
+        }
+      },
+      cancel() {
+        this.visible = false;
+      }
+    }
+  };
+</script>
+
+<style lang="scss" scoped>
+  .sparepart-apply {
+    min-height: 40vh;
+    .select-box {
+      margin-bottom: 10px;
+    }
+
+    .material-item + .material-item {
+      margin-top: 10px;
+    }
+  }
+
+  .flex-between {
+    display: flex;
+    justify-content: space-between;
+    padding-right: 20%;
+  }
+
+  .list-box {
+    max-height: 60vh;
+    overflow-y: auto;
+    overflow-x: hidden;
+  }
+
+  .footer {
+    padding: 10px;
+    text-align: right;
+    background: #fff;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+</style>

+ 546 - 0
src/views/bpm/tickets/components/signingUpWork.vue

@@ -0,0 +1,546 @@
+<template>
+  <!-- 报工 -->
+  <el-dialog :visible.sync="visible" title="报工" width="80%">
+    <el-form>
+      <el-form-item label="实际起始时间">
+        <el-date-picker
+          v-model="time"
+          type="datetimerange"
+          value-format="yyyy-MM-dd HH:mm:ss"
+          range-separator="至"
+          start-placeholder="实际开始日期"
+          end-placeholder="实际结束日期"
+        >
+        </el-date-picker>
+      </el-form-item>
+    </el-form>
+    <div class="page">
+      <div class="content-detail">
+        <!-- 巡点检、保养设备 -->
+        <div class="maintain_equipment_info">
+          <HeaderTitle title="巡点检设备" size="16px"></HeaderTitle>
+          <div class="maintain_equipment_info_content">
+            <div
+              class="equipment_item"
+              v-for="item in infoData.planDeviceList"
+              :key="item.id"
+            >
+              <div class="equipment_info" v-if="item.substance">
+                <div class="item_info">
+                  <span class="item_label">设备编码</span>
+                  <span class="item_value">{{ item.substance.code }}</span>
+                </div>
+                <div class="item_info">
+                  <span class="item_label">设备名称</span>
+                  <span class="item_value">{{ item.substance.name }}</span>
+                </div>
+                <div class="item_info">
+                  <span class="item_label">设备型号</span>
+                  <span class="item_value">{{ item.substance.model }}</span>
+                </div>
+                <div class="item_info">
+                  <span class="item_label">设备位置</span>
+                  <span class="item_value">{{
+                    item.substance.positionNames
+                  }}</span>
+                </div>
+              </div>
+              <p>操作事项</p>
+              <div class="ruleMatters_box">
+                <el-table :data="item.workItems" 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>
+                        <span>{{ scope.row.name }}</span>
+                      </div>
+                    </template>
+                  </el-table-column>
+                  <el-table-column label="内容" prop="content" width="300">
+                    <template slot-scope="scope">
+                      <div>
+                        <span>{{ scope.row.content }}</span>
+                      </div>
+                    </template>
+                  </el-table-column>
+                  <el-table-column label="操作指导" prop="operationGuide">
+                    <template slot-scope="scope">
+                      <div class="operationGuide_box">
+                        <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="line"></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>
+                        <span>{{ scope.row.norm }}</span>
+                      </div>
+                    </template>
+                  </el-table-column>
+                  <el-table-column label="" prop="status" width="150">
+                    <template slot-scope="scope">
+                      <template>
+                        <el-select
+                          v-model="scope.row.status"
+                          placeholder="请选择"
+                        >
+                          <el-option
+                            v-for="item in options"
+                            :label="item.label"
+                            :value="item.value"
+                            :key="item.value"
+                          >
+                          </el-option>
+                        </el-select>
+                      </template>
+                    </template>
+                  </el-table-column>
+                  <el-table-column label="结果" prop="result" width="250">
+                    <template slot-scope="scope">
+                      <el-input
+                        v-model="scope.row.result"
+                        placeholder="请输入内容"
+                      ></el-input>
+                    </template>
+                  </el-table-column>
+                </el-table>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div slot="footer" class="footer">
+      <el-button @click="cancel">返回</el-button>
+      <el-button type="primary" @click="submit">提交</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  import { report } from '@/api/tickets';
+  import { getById } from '@/api/tickets';
+  export default {
+    data() {
+      return {
+        time: [],
+        options: [
+          {
+            label: '正常',
+            value: 0
+          },
+          {
+            label: '缺陷',
+            value: -1
+          }
+        ],
+        visible: false,
+        infoData: {}
+      };
+    },
+    methods: {
+      open(row) {
+        console.log(row);
+        this.getInfo(row);
+        this.visible = true;
+      },
+      cancel() {
+        this.visible = false;
+      },
+      async submit() {
+        console.log(this.time);
+        if (this.time.length > 0) {
+          this.infoData.acceptTime = this.time[0];
+          this.infoData.finishTime = this.time[1];
+          this.infoData.deviceList = this.infoData.planDeviceList;
+          console.log(this.infoData);
+          let deviceList = this.infoData.deviceList
+            .map((item) => {
+              return item.workItems;
+            })
+            .flat();
+          let boolen = deviceList.every((item) => item.status > -1);
+          this.infoData.isAbnormal = boolen ? 1 : 0;
+          report(this.infoData).then((res) => {
+            if (res.code == 0) {
+              this.$message.success('报工成功');
+              this.visible = false;
+              this.$emit('refresh');
+            }
+          });
+        } else {
+          this.$message.error('请选择实际起始时间');
+        }
+      },
+      // 表格数据
+      async getInfo(row) {
+        let res = await getById(row.planId);
+        console.log(row);
+        this.infoData = res.data;
+        this.infoData.workOrderId = row.id;
+      }
+    }
+  };
+</script>
+<style lang="scss" scoped>
+  .page {
+    padding: 10px;
+  }
+  .page-title {
+    background: #fff;
+    font-size: 18px;
+    padding: 6px 20px;
+    font-weight: 500;
+    .page-title-div {
+      margin: 5px 0;
+      height: 30px;
+      line-height: 30px;
+      border-bottom: 1px solid #eaeefb;
+      .title-div-no {
+        margin-left: 10px;
+        font-weight: 400;
+        color: #909090;
+        font-size: 14px;
+      }
+    }
+  }
+  .page-data {
+    padding-top: 10px;
+  }
+  .content-detail {
+    background: #fff;
+    padding: 20px;
+  }
+  .flows {
+    .flow-left {
+      width: 156px;
+      height: 70px;
+      border: 1px dashed #ccc;
+      padding: 10px;
+    }
+    .row {
+      margin-top: 13px;
+    }
+  }
+  .basic-details-title {
+    margin-bottom: 12px;
+    margin-top: 20px;
+    border-bottom: 1px solid #157a2c;
+    padding-bottom: 8px;
+    display: flex;
+    justify-content: space-between;
+  }
+  .basic-details-title .border-span {
+    height: 18px;
+    font-size: 16px;
+    border-left: 4px solid #157a2c;
+    padding-left: 8px;
+
+    font-weight: 500;
+  }
+  .heade-right {
+    // float: right;
+    .heade-right-content {
+      margin-right: 12px;
+      font-size: 14px;
+      display: inline-block;
+      .content-key {
+        color: #3e3e3e;
+        margin-right: 12px;
+        font-weight: 500;
+      }
+      .content-value {
+        color: #000;
+      }
+    }
+  }
+  .list-title {
+    font-size: 14px;
+    color: #3e3e3e;
+    margin: 10px 0px;
+  }
+  .goods {
+    background: #a30014;
+    border: 1px solid #a30014;
+  }
+  .details-title {
+    display: inline-block;
+    color: #6e6e6e;
+    font-size: 14px;
+    font-weight: bold;
+    margin-right: 13px;
+    width: 70px;
+    text-align: right;
+  }
+  .details-con {
+    color: #3e3e3e;
+    font-size: 14px;
+  }
+  .detailed-tab {
+    margin-left: 10px;
+    margin-top: 10px;
+  }
+  .maintain_equipment_info_content {
+    padding: 0 30px;
+    .equipment_item {
+      border: 1px solid #ccc;
+      font-size: 14px;
+      padding: 15px;
+      margin-bottom: 30px;
+      .equipment_info {
+        display: flex;
+        flex-wrap: wrap;
+        border: 1px solid #ddd;
+        .item_info {
+          width: 33.33%;
+          height: 24px;
+          line-height: 24px;
+          display: flex;
+          .item_label {
+            width: 90px;
+            text-align: center;
+            background-color: #f2f2f2;
+            font-weight: 700;
+          }
+          .item_value {
+            border-bottom: 1px solid #f2f2f2;
+            flex: 1;
+            padding-left: 5px;
+          }
+          &:last-child {
+            width: 100%;
+            .item_value {
+              border: 0;
+            }
+          }
+        }
+      }
+      > p {
+        margin-top: 20px;
+        color: #797979;
+      }
+      .matter_info {
+        ::v-deep .el-table {
+          th.el-table__cell {
+            background-color: #f2f2f2;
+            padding: 0;
+          }
+          td.el-table__cell {
+            padding: 0;
+          }
+        }
+      }
+      .ruleMatters_box {
+        flex: 3;
+        height: 100%;
+        display: flex;
+        flex-direction: column;
+        .divider {
+          flex: 0 0 50px;
+          .title {
+            height: 35px;
+          }
+        }
+        .el-table {
+          overflow: auto;
+          .operationGuide_box {
+            width: 100%;
+            display: flex;
+            position: relative;
+            .left_content {
+              width: 30%;
+              padding: 10px;
+              margin-right: 10px;
+              overflow-y: auto;
+            }
+            .line {
+              position: absolute;
+              top: -10px;
+              left: 30%;
+              bottom: -10px;
+              height: 110%;
+              width: 1px;
+              background-color: #ededed;
+            }
+            .right_content {
+              flex: 1;
+              padding: 10px;
+              overflow-y: auto;
+            }
+          }
+        }
+      }
+    }
+  }
+  ::v-deep .el-form-item--medium .el-form-item__label {
+    color: #6e6e6e;
+    font-size: 14px;
+    font-weight: bold;
+  }
+  .warehouse {
+    display: block;
+    border-bottom: 1px solid #eaeefb;
+    padding: 10px 0;
+  }
+  .box-card {
+    .store-box {
+      width: 80%;
+      .store-box-span {
+        display: inline-block;
+        font-size: 14px;
+        height: 50px;
+        width: 50px;
+        text-align: center;
+        line-height: 50px;
+        color: #fff;
+        margin: 2px;
+      }
+    }
+  }
+  .vacant {
+    background: #3196fb;
+  }
+  .inUse {
+    background: #157a2c;
+  }
+  .invalid {
+    background: #cccccc;
+  }
+  .full {
+    background: #cc3300;
+  }
+
+  .map {
+    display: inline-block;
+    position: absolute;
+    right: 4%;
+    top: 15%;
+    width: 380px;
+    height: 200px;
+    background-color: #b12492;
+  }
+  .mapTitle {
+    display: inline-block;
+    position: absolute;
+    transform: translate(-50%, -50%);
+    right: 11%;
+    top: 39%;
+  }
+  .equipment {
+    position: relative;
+    width: 100%;
+    min-height: 200px;
+    .equipment-icon {
+      text-align: center;
+      line-height: 30px;
+      width: 30px;
+      height: 30px;
+      border-radius: 15px;
+      border: 2px solid #000;
+    }
+    .equipment-step {
+      position: absolute;
+      left: 15px;
+      border-left: 2px solid #000;
+      width: 2px;
+      height: 85%;
+    }
+
+    .equipment-arrows {
+      position: absolute;
+      bottom: -8px;
+      left: 8px;
+      border: 8px solid rgb(255, 255, 255);
+      border-top-color: #000;
+      width: 0;
+      height: 0;
+    }
+    .equipment-title {
+      position: absolute;
+      top: 3%;
+      left: 3%;
+    }
+    .equipment-details {
+      position: absolute;
+      top: 3%;
+      left: 25%;
+      span {
+        margin-right: 70px;
+      }
+    }
+    .equipment-content {
+      display: flex;
+      .equipment-content-span1 {
+        width: 150px;
+        margin: 20px 70px 5px 47px;
+      }
+      .equipment-content-span2 {
+        width: 350px;
+        margin: 20px 70px 5px 120px;
+      }
+    }
+  }
+  .btnbox {
+    display: flex;
+    justify-content: center;
+  }
+  ::v-deep .el-button {
+    padding: 10px 20px;
+    margin-right: 10px;
+  }
+  .textbox {
+    margin-top: 10px;
+  }
+  .execute_info {
+    margin: 30px 0;
+    .execute_info_title {
+      border-bottom: 1px solid #157a2c;
+      padding-bottom: 3px;
+      margin-bottom: 20px;
+      display: flex;
+      justify-content: space-between;
+      > span:first-child {
+        line-height: 16px;
+        border-left: 6px solid #157a2c;
+        padding-left: 6px;
+      }
+    }
+    .execute_row {
+      padding: 0 30px;
+      .column {
+        display: flex;
+        font-size: 14px;
+        margin-bottom: 20px;
+        .label {
+          // width: 110px;
+          text-align: center;
+          font-weight: 700;
+        }
+      }
+    }
+  }
+</style>

+ 45 - 1
src/views/bpm/tickets/delivery/index.vue

@@ -100,6 +100,11 @@
         <el-table-column prop="acceptTime" label="开始时间" />
         <el-table-column prop="finishTime" label="结束时间" />
         <el-table-column prop="planFinishTime" label="计划完成时间" />
+        <el-table-column prop="orderStatus" label="执行结果">
+          <template slot-scope="{ row }">
+            {{ { 0: '缺陷', 1: '正常' }[row.isAbnormal] }}
+          </template>
+        </el-table-column>
         <el-table-column prop="orderStatus" label="状态">
           <template slot-scope="{ row }">
             {{
@@ -112,6 +117,28 @@
             {{ time_interval(row.acceptTime, row.finishTime) }}
           </template>
         </el-table-column>
+        <el-table-column label="操作" width="150">
+          <template slot-scope="{ row }">
+            <el-link
+              v-if="row.orderStatus !== 3 && row.orderStatus !== 4"
+              type="primary"
+              :underline="false"
+              icon="el-icon-edit"
+              @click="toSigningUpWork(row)"
+            >
+              报工
+            </el-link>
+            <el-link
+              v-if="row.orderStatus !== 3 && row.orderStatus !== 4"
+              type="primary"
+              :underline="false"
+              icon="el-icon-edit"
+              @click="toRedeploy(row)"
+            >
+              转派
+            </el-link>
+          </template>
+        </el-table-column>
       </el-table>
     </div>
     <div class="table-footer">
@@ -127,15 +154,21 @@
       >
       </el-pagination>
     </div>
+    <!-- 转派弹窗 -->
+    <redeployOther ref="redeployOtherRef" @refresh="getData" />
+    <!-- 报工弹框 -->
+    <signingUpWork ref="signingUpWorkRef" @refresh="getData" />
   </div>
 </template>
 
 <script>
+  import redeployOther from '../components/redeployOther.vue';
+  import signingUpWork from '../components/signingUpWork.vue';
   import { ticketStatus } from '@/utils/dict/tickets';
   import { getWorkOrderPage, getRule } from '@/api/tickets';
   import pagenation from '@/components/Pagination';
   export default {
-    components: { pagenation },
+    components: { pagenation, signingUpWork, redeployOther },
     data() {
       return {
         ruleNameList: [],
@@ -162,6 +195,17 @@
       this.getData();
     },
     methods: {
+      // 转派
+      toRedeploy(row) {
+        this.$refs.redeployOtherRef.open(row);
+      },
+      // 报工
+      toSigningUpWork(row) {
+        this.$refs.signingUpWorkRef.open(row);
+      },
+      reload(where) {
+        this.$refs.table.reload({ page: 1, ...where });
+      },
       openDetail({ id }) {
         this.$router.push({
           path: '/tickets/delivery/detail',

+ 2 - 2
src/views/bpm/tickets/index.vue

@@ -65,8 +65,8 @@
 
 <style lang="scss" scoped>
   .tickets_index {
-    widows: 100%;
-    height: 100%;
+    width: 100%;
+    height: calc(100vh - 96px);
     ::v-deep .el-card {
       height: 100%;
       width: 100%;

+ 45 - 1
src/views/bpm/tickets/maintenance/index.vue

@@ -100,6 +100,11 @@
         <el-table-column prop="acceptTime" label="开始时间" />
         <el-table-column prop="finishTime" label="结束时间" />
         <el-table-column prop="planFinishTime" label="计划完成时间" />
+        <el-table-column prop="orderStatus" label="执行结果">
+          <template slot-scope="{ row }">
+            {{ { 0: '缺陷', 1: '正常' }[row.isAbnormal] }}
+          </template>
+        </el-table-column>
         <el-table-column prop="orderStatus" label="状态">
           <template slot-scope="{ row }">
             {{
@@ -112,6 +117,28 @@
             {{ time_interval(row.acceptTime, row.finishTime) }}
           </template>
         </el-table-column>
+        <el-table-column label="操作" width="150">
+          <template slot-scope="{ row }">
+            <el-link
+              v-if="row.orderStatus !== 3 && row.orderStatus !== 4"
+              type="primary"
+              :underline="false"
+              icon="el-icon-edit"
+              @click="toSigningUpWork(row)"
+            >
+              报工
+            </el-link>
+            <el-link
+              v-if="row.orderStatus !== 3 && row.orderStatus !== 4"
+              type="primary"
+              :underline="false"
+              icon="el-icon-edit"
+              @click="toRedeploy(row)"
+            >
+              转派
+            </el-link>
+          </template>
+        </el-table-column>
       </el-table>
     </div>
     <div class="table-footer">
@@ -127,15 +154,21 @@
       >
       </el-pagination>
     </div>
+    <!-- 转派弹窗 -->
+    <redeployOther ref="redeployOtherRef" @refresh="getData" />
+    <!-- 报工弹框 -->
+    <signingUpWork ref="signingUpWorkRef" @refresh="getData" />
   </div>
 </template>
 
 <script>
+  import redeployOther from '../components/redeployOther.vue';
+  import signingUpWork from '../components/signingUpWork.vue';
   import { ticketStatus } from '@/utils/dict/tickets';
   import { getWorkOrderPage, getRule } from '@/api/tickets';
   import pagenation from '@/components/Pagination';
   export default {
-    components: { pagenation },
+    components: { pagenation, redeployOther, signingUpWork },
     data() {
       return {
         ruleNameList: [],
@@ -162,6 +195,17 @@
       this.getData();
     },
     methods: {
+      // 转派
+      toRedeploy(row) {
+        this.$refs.redeployOtherRef.open(row);
+      },
+      // 报工
+      toSigningUpWork(row) {
+        this.$refs.signingUpWorkRef.open(row);
+      },
+      reload(where) {
+        this.$refs.table.reload({ page: 1, ...where });
+      },
       openDetail({ id }) {
         this.$router.push({
           path: '/tickets/maintenance/detail',

+ 45 - 1
src/views/bpm/tickets/patrolInspection/index.vue

@@ -100,6 +100,11 @@
         <el-table-column prop="acceptTime" label="开始时间" />
         <el-table-column prop="finishTime" label="结束时间" />
         <el-table-column prop="planFinishTime" label="计划完成时间" />
+        <el-table-column prop="orderStatus" label="执行结果">
+          <template slot-scope="{ row }">
+            {{ { 0: '缺陷', 1: '正常' }[row.isAbnormal] }}
+          </template>
+        </el-table-column>
         <el-table-column prop="orderStatus" label="状态">
           <template slot-scope="{ row }">
             {{
@@ -112,6 +117,28 @@
             {{ time_interval(row.acceptTime, row.finishTime) }}
           </template>
         </el-table-column>
+        <el-table-column label="操作" width="150">
+          <template slot-scope="{ row }">
+            <el-link
+              v-if="row.orderStatus !== 3 && row.orderStatus !== 4"
+              type="primary"
+              :underline="false"
+              icon="el-icon-edit"
+              @click="toSigningUpWork(row)"
+            >
+              报工
+            </el-link>
+            <el-link
+              v-if="row.orderStatus !== 3 && row.orderStatus !== 4"
+              type="primary"
+              :underline="false"
+              icon="el-icon-edit"
+              @click="toRedeploy(row)"
+            >
+              转派
+            </el-link>
+          </template>
+        </el-table-column>
       </el-table>
     </div>
     <div class="table-footer">
@@ -127,15 +154,21 @@
       >
       </el-pagination>
     </div>
+    <!-- 转派弹窗 -->
+    <redeployOther ref="redeployOtherRef" @refresh="getData" />
+    <!-- 报工弹框 -->
+    <signingUpWork ref="signingUpWorkRef" @refresh="getData" />
   </div>
 </template>
 
 <script>
+  import redeployOther from '../components/redeployOther.vue';
+  import signingUpWork from '../components/signingUpWork.vue';
   import { ticketStatus } from '@/utils/dict/tickets';
   import { getWorkOrderPage, getRule } from '@/api/tickets';
   import pagenation from '@/components/Pagination';
   export default {
-    components: { pagenation },
+    components: { pagenation, redeployOther, signingUpWork },
     data() {
       return {
         ruleNameList: [],
@@ -162,6 +195,17 @@
       this.getData();
     },
     methods: {
+      // 转派
+      toRedeploy(row) {
+        this.$refs.redeployOtherRef.open(row);
+      },
+      // 报工
+      toSigningUpWork(row) {
+        this.$refs.signingUpWorkRef.open(row);
+      },
+      reload(where) {
+        this.$refs.table.reload({ page: 1, ...where });
+      },
       openDetail({ id }) {
         this.$router.push({
           path: '/tickets/patrolInspection/detail',