Kaynağa Gözat

批记录列表详情完善

lucw 8 ay önce
ebeveyn
işleme
28252518ba

+ 10 - 8
src/api/pick/pickApply.js

@@ -1,11 +1,10 @@
 import request from '@/utils/request';
 
-
 /**
  * 列表
  */
 export async function getPage(params) {
-  const res = await request.get('/mes/pickorder/page',  { params });
+  const res = await request.get('/mes/pickorder/page', { params });
   if (res.data.code == 0) {
     return res.data.data;
   }
@@ -13,23 +12,26 @@ export async function getPage(params) {
 }
 
 export async function getAllPage(params) {
-  const res = await request.get('/mes/pickorder/allPage',  { params });
+  const res = await request.get('/mes/pickorder/allPage', { params });
   if (res.data.code == 0) {
     return res.data.data;
   }
   return Promise.reject(new Error(res.data.message));
 }
 
-
 // 退料(过滤不要的数据的领料接口)
 export async function returnPage(params) {
-  const res = await request.get('/mes/pickorder/returnPage',  { params });
+  const res = await request.get('/mes/pickorder/returnPage', { params });
   if (res.data.code == 0) {
     return res.data.data;
   }
   return Promise.reject(new Error(res.data.message));
 }
 
-
-
-returnPage
+export async function getDetails(id) {
+  const res = await request.get('/mes/pickorder/getById/' + id);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 141 - 0
src/components/bpmTask/bpmSubmit.vue

@@ -0,0 +1,141 @@
+<template>
+  <el-col :span="12">
+    <el-card v-loading="!taskDefinitionKey" class="box-card">
+      <div slot="header" class="clearfix">
+        <span class="el-icon-picture-outline">审批任务</span>
+      </div>
+      <el-form label-width="100px" ref="formRef" :model="form">
+        <el-form-item
+          label="审批建议"
+          style="margin-bottom: 20px"
+          :rules="{
+            required: true,
+            message: '请选择',
+            trigger: 'change'
+          }"
+        >
+          <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">
+        <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>
+      </div>
+    </el-card>
+  </el-col>
+</template>
+<script>
+  import { approveTaskWithVariables } from '@/api/bpm/task';
+  import storageApi from '@/api/warehouseManagement';
+  export default {
+    data() {
+      return {
+        form: {}
+      };
+    },
+    props: {
+      businessId: {
+        default: ''
+      },
+      taskId: {
+        default: ''
+      },
+      id: {
+        default: ''
+      },
+      taskDefinitionKey: {
+        default: ''
+      }
+    },
+    methods: {
+      handleAudit(status) {
+        if (!this.form.reason && status == 1) {
+          this.$message.warning(`请填写审批意见!`);
+          return;
+        }
+
+        this._approveTaskWithVariables(status);
+      },
+      async _approveTaskWithVariables(status) {
+        console.log(status);
+        if (status == 1) {
+          if (this.taskDefinitionKey === 'storage') {
+            const res = await storageApi.allot({ applyId: this.businessId });
+            if (res.data.code != '-1') {
+              const params = {
+                id: this.taskId,
+                reason: this.form.reason,
+                variables: { pass: true }
+              };
+              const data = await approveTaskWithVariables(params);
+              if (data.data.code != '-1') {
+                this.$emit('handleAudit', {
+                  status,
+                  title: '通过'
+                });
+              }
+            }
+          } else {
+            const params = {
+              id: this.taskId,
+              reason: this.form.reason,
+              variables: { pass: true }
+            };
+            const data = await approveTaskWithVariables(params);
+            if (data.data.code != '-1') {
+              this.$emit('handleAudit', {
+                status,
+                title: '通过'
+              });
+            }
+          }
+        } else {
+          if (this.taskDefinitionKey === 'outbound') {
+            const data = await storageApi.notAllotPass({
+              id: this.businessId,
+              reason: this.form.reason,
+              taskId: this.taskId
+            });
+            if (data.data.code != '-1') {
+              this.$emit('handleAudit', {
+                status,
+                title: '驳回'
+              });
+            }
+          } else {
+            const params = {
+              id: this.taskId,
+              reason: this.form.reason,
+              variables: { pass: false }
+            };
+            const data = await approveTaskWithVariables(params);
+            if (data.data.code != '-1') {
+              this.$emit('handleAudit', {
+                status,
+                title: '驳回'
+              });
+            }
+          }
+        }
+      }
+    }
+  };
+</script>

+ 286 - 0
src/components/bpmTask/bpmTask.vue

@@ -0,0 +1,286 @@
+<template>
+  <el-row v-loading="tasksLoad">
+    <bpmSubmit
+      v-if="currenItem"
+      @handleAudit="handleAudit"
+      :id="id"
+      :taskId="currenItem.id"
+      :businessId="businessId"
+      :taskDefinitionKey="currenItem.taskDefinitionKey"
+    ></bpmSubmit>
+    <el-col :span="currenItem ? 12 : 24">
+      <!-- 审批记录 -->
+      <el-card class="box-card">
+        <div slot="header" class="clearfix">
+          <span class="el-icon-picture-outline">审批记录</span>
+        </div>
+        <div class="block details-bpm-list">
+          <el-timeline>
+            <el-timeline-item
+              v-for="(item, index) in tasks"
+              :key="index"
+              :icon="getTimelineItemIcon(item)"
+              :type="getTimelineItemType(item)"
+            >
+              <p style="font-weight: 700">任务:{{ item.name }}</p>
+              <el-card :body-style="{ padding: '10px' }">
+                <label
+                  v-if="item.assigneeUser"
+                  style="font-weight: normal; margin-right: 30px"
+                >
+                  审批人:{{ item.assigneeUser.nickname }}
+                  <el-tag type="info" size="mini">{{
+                    item.assigneeUser.deptName
+                  }}</el-tag>
+                </label>
+                <label style="font-weight: normal" v-if="item.createTime"
+                  >创建时间:</label
+                >
+                <label style="color: #8a909c; font-weight: normal">{{
+                  item.createTime
+                }}</label>
+                <label
+                  v-if="item.endTime"
+                  style="margin-left: 30px; font-weight: normal"
+                  >审批时间:</label
+                >
+                <label
+                  v-if="item.endTime"
+                  style="color: #8a909c; font-weight: normal"
+                >
+                  {{ item.endTime }}</label
+                >
+                <label
+                  v-if="item.durationInMillis"
+                  style="margin-left: 30px; font-weight: normal"
+                  >耗时:</label
+                >
+                <label
+                  v-if="item.durationInMillis"
+                  style="color: #8a909c; font-weight: normal"
+                >
+                  {{ getDateStar(item.durationInMillis) }}
+                </label>
+                <p v-if="item.reason">
+                  <el-tag :type="getTimelineItemType(item)">{{
+                    item.reason
+                  }}</el-tag>
+                </p>
+              </el-card>
+            </el-timeline-item>
+          </el-timeline>
+        </div>
+      </el-card>
+    </el-col>
+  </el-row>
+</template>
+
+<script>
+  import {
+    getProcessDefinitionBpmnXML,
+    getProcessInstance,
+    getActivityList,
+    getTaskListByProcessInstanceId
+  } from '@/api/produce/bom.js';
+  import store from '@/store';
+  // import { getProcessInstance } from '@/api/bpm/processInstance';
+  import { getDate } from '@/utils/dateUtils';
+  import dictMixins from '@/mixins/dictMixins';
+  // import { getTaskListByProcessInstanceId } from '@/api/bpm/task';
+  // import { getActivityList } from '@/api/bpm/activity';
+  // import Vue from 'vue';
+  import bpmSubmit from './bpmSubmit.vue';
+
+  // 流程实例的详情页,可用于审批
+  export default {
+    mixins: [dictMixins],
+    components: { bpmSubmit },
+    emits: ['handleAudit'],
+    props: {
+      // 流程id
+      id: {
+        default: ''
+      },
+      // 业务id
+      businessId: {
+        default: ''
+      }
+    },
+    data() {
+      return {
+        // 遮罩层
+        processInstanceLoading: true,
+        dialogVisible: false,
+
+        processInstance: {},
+
+        // BPMN 数据
+        bpmnXML: null,
+        bpmnControlForm: {
+          prefix: 'flowable'
+        },
+        activityList: [],
+
+        // 审批记录
+        tasksLoad: true,
+        tasks: [],
+        currenItem: null
+      };
+    },
+    created() {
+      // this.id = this.$route.query.id;
+      // if (!this.id) {
+      //   this.$message.error('未传递 id 参数,无法查看流程信息');
+      //   return;
+      // }
+      this.getDetail();
+    },
+    methods: {
+      /** 获得流程实例 */
+      getDetail() {
+        // 获得流程实例相关
+        this.processInstanceLoading = true;
+        getProcessInstance(this.id).then((response) => {
+          if (!response) {
+            this.$message.error('查询不到流程信息!');
+            return;
+          }
+          // 设置流程信息
+          this.processInstance = response;
+
+          // //将业务表单,注册为动态组件
+          // const path = this.processInstance.processDefinition.formCustomViewPath;
+          // Vue.component("async-biz-form-component", function (resolve) {
+          //   require([`@/views${path}`], resolve);
+          // });
+          // 加载流程图
+          getProcessDefinitionBpmnXML(
+            this.processInstance.processDefinition.id
+          ).then((response) => {
+            this.bpmnXML = response;
+          });
+          // 加载活动列表
+          getActivityList({
+            processInstanceId: this.processInstance.id
+          }).then((response) => {
+            console.log(response, 'response');
+            this.activityList = response;
+          });
+
+          // 取消加载中
+          this.processInstanceLoading = false;
+        });
+
+        // 获得流程任务列表(审批记录)
+        this.tasksLoad = true;
+        getTaskListByProcessInstanceId(this.id).then((response) => {
+          // 审批记录
+          this.tasks = [];
+          // 移除已取消的审批
+          response.forEach((task) => {
+            if (task.result !== 4) {
+              this.tasks.push(task);
+            }
+          });
+          // 排序,将未完成的排在前面,已完成的排在后面;
+          this.tasks.sort((a, b) => {
+            // 有已完成的情况,按照完成时间倒序
+            if (a.endTime && b.endTime) {
+              return b.endTime - a.endTime;
+            } else if (a.endTime) {
+              return 1;
+            } else if (b.endTime) {
+              return -1;
+              // 都是未完成,按照创建时间倒序
+            } else {
+              return b.createTime - a.createTime;
+            }
+          });
+
+          // 需要审核的记录
+          const userId = store.getters.userId;
+          this.tasks.forEach((task) => {
+            if (task.result !== 1 && task.result !== 6) {
+              // 只有待处理才需要
+              return;
+            }
+            if (!task.assigneeUser || task.assigneeUser.id !== userId) {
+              // 自己不是处理人
+              return;
+            }
+          });
+
+          const currenItem = this.tasks.find((i) => i.result == 1);
+          if (currenItem) {
+            // 当前处理中的节点
+            this.currenItem = currenItem;
+          }
+
+          // 取消加载中
+          this.tasksLoad = false;
+        });
+      },
+      getDateStar(ms) {
+        return getDate(ms);
+      },
+      getTimelineItemIcon(item) {
+        if (item.result === 1) {
+          return 'el-icon-time';
+        }
+        if (item.result === 2) {
+          return 'el-icon-check';
+        }
+        if (item.result === 3) {
+          return 'el-icon-close';
+        }
+        if (item.result === 4) {
+          return 'el-icon-remove-outline';
+        }
+        if (item.result === 5) {
+          return 'el-icon-back';
+        }
+        return '';
+      },
+      getTimelineItemType(item) {
+        if (item.result === 1) {
+          return 'primary';
+        }
+        if (item.result === 2) {
+          return 'success';
+        }
+        if (item.result === 3) {
+          return 'danger';
+        }
+        if (item.result === 4) {
+          return 'info';
+        }
+        if (item.result === 5) {
+          return 'warning';
+        }
+        if (item.result === 6) {
+          return 'default';
+        }
+        return '';
+      },
+      handleAudit(e) {
+        this.$emit('handleAudit', e);
+      }
+    }
+  };
+</script>
+
+<style lang="scss">
+  .my-process-designer {
+    height: calc(100vh - 200px);
+  }
+
+  .box-card {
+    width: 100%;
+    margin-bottom: 20px;
+  }
+
+  .details-bpm-list {
+    max-height: 120px;
+    overflow-y: auto;
+  }
+</style>

+ 21 - 0
src/views/batchRecord/components/tables/batchRecordTable.vue

@@ -9,7 +9,14 @@
       :cache-key="cacheKeyUrl"
       autoAmendPage
     >
+      <template v-slot:action="{ row }">
+        <el-link type="primary" :underline="false" @click="goToDetail(row)">
+          详情
+        </el-link>
+      </template>
     </ele-pro-table>
+
+    <detialsModal ref="detialsModalRef"></detialsModal>
   </div>
 </template>
 
@@ -17,9 +24,11 @@
   import dictMixins from '@/mixins/dictMixins';
   import tableColumnsMixin from '@/mixins/tableColumnsMixin';
   import { producetaskrulerecordPage } from '@/api/producetaskrulerecord/index';
+  import detialsModal from '../detialsModal.vue';
 
   export default {
     mixins: [dictMixins, tableColumnsMixin],
+    components: { detialsModal },
     props: {
       tableQuery: {
         type: Object,
@@ -112,6 +121,15 @@
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 150
+          },
+          {
+            label: '操作',
+            columnKey: 'action',
+            slot: 'action',
+            showOverflowTooltip: true,
+            minWidth: 110,
+            align: 'center',
+            fixed: 'right'
           }
         ],
         cacheKeyUrl: 'mes-259231507-batchRecord-table'
@@ -185,6 +203,9 @@
       },
       search(where) {
         this.reload(where);
+      },
+      goToDetail(row) {
+        this.$refs.detialsModalRef.open(row, 'detail');
       }
     }
   };

+ 17 - 0
src/views/batchRecord/components/tables/craftFilesTable.vue

@@ -9,6 +9,11 @@
       :cache-key="cacheKeyUrl"
       autoAmendPage
     >
+      <template v-slot:action="{ row }">
+        <el-link type="primary" :underline="false" @click="goToDetail(row)">
+          详情
+        </el-link>
+      </template>
     </ele-pro-table>
   </div>
 </template>
@@ -81,6 +86,15 @@
             showOverflowTooltip: true,
             align: 'center',
             minWidth: 110
+          },
+          {
+            label: '操作',
+            columnKey: 'action',
+            slot: 'action',
+            showOverflowTooltip: true,
+            minWidth: 110,
+            align: 'center',
+            fixed: 'right'
           }
         ],
         cacheKeyUrl: 'mes-259231537-craft-files-table'
@@ -120,6 +134,9 @@
       },
       search(where) {
         this.reload(where);
+      },
+      goToDetail(row) {
+        console.log('row', row);
       }
     }
   };

+ 18 - 0
src/views/batchRecord/components/tables/deviceBatchRecordTable.vue

@@ -9,6 +9,11 @@
       :cache-key="cacheKeyUrl"
       autoAmendPage
     >
+      <template v-slot:action="{ row }">
+        <el-link type="primary" :underline="false" @click="goToDetail(row)">
+          详情
+        </el-link>
+      </template>
     </ele-pro-table>
   </div>
 </template>
@@ -109,6 +114,15 @@
                 row.isAbnormal
               ];
             }
+          },
+          {
+            label: '操作',
+            columnKey: 'action',
+            slot: 'action',
+            showOverflowTooltip: true,
+            minWidth: 110,
+            align: 'center',
+            fixed: 'right'
           }
         ],
         cacheKeyUrl: 'mes-259231549-device-batchRecord-table'
@@ -186,6 +200,10 @@
       },
       search(where) {
         this.reload(where);
+      },
+      goToDetail(row) {
+        const path = `/page-eam/maintenance/patrol/plan/details?id=${row.id}`;
+        window.history.pushState(null, '', path);
       }
     }
   };

+ 53 - 1
src/views/batchRecord/components/tables/materialReturnTable.vue

@@ -9,7 +9,19 @@
       :cache-key="cacheKeyUrl"
       autoAmendPage
     >
+      <template v-slot:action="{ row }">
+        <el-link type="primary" :underline="false" @click="goToDetail(row)">
+          详情
+        </el-link>
+      </template>
     </ele-pro-table>
+
+    <returnPop
+      v-if="returnShow"
+      :returnDetailsId="returnDetailsId"
+      @close="close"
+      :sceneList="sceneList"
+    ></returnPop>
   </div>
 </template>
 
@@ -17,9 +29,12 @@
   import dictMixins from '@/mixins/dictMixins';
   import tableColumnsMixin from '@/mixins/tableColumnsMixin';
   import { batchRecordPage } from '@/api/returnmaterials/index';
+  import returnPop from '@/views/materialReturn/components/returnPop.vue';
+  import { getByCode } from '@/api/system/dictionary-data';
 
   export default {
     mixins: [dictMixins, tableColumnsMixin],
+    components: { returnPop },
     props: {
       tableQuery: {
         type: Object,
@@ -79,9 +94,20 @@
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 150
+          },
+          {
+            label: '操作',
+            columnKey: 'action',
+            slot: 'action',
+            showOverflowTooltip: true,
+            minWidth: 110,
+            align: 'center',
+            fixed: 'right'
           }
         ],
-        cacheKeyUrl: 'mes-259231042-material-return-table'
+        cacheKeyUrl: 'mes-259231042-material-return-table',
+        returnShow: false,
+        returnDetailsId: null
       };
     },
     computed: {
@@ -108,6 +134,9 @@
         ];
       }
     },
+    created() {
+      this.getByCodeFn();
+    },
     methods: {
       // 刷新表格
       reload(where = {}) {
@@ -130,6 +159,29 @@
       },
       search(where) {
         this.reload(where);
+      },
+      getByCodeFn() {
+        getByCode('returnScenario').then((res) => {
+          let _arr = [];
+          res.data.map((item) => {
+            const key = Object.keys(item)[0];
+            const value = item[key];
+            _arr.push({ label: value, value: key });
+          });
+
+          this.sceneList = _arr;
+        });
+      },
+      goToDetail(row) {
+        this.returnDetailsId = row.id;
+        this.returnShow = true;
+      },
+      close(val) {
+        if (val) {
+          this.reload();
+        }
+        this.returnDetailsId = null;
+        this.returnShow = false;
       }
     }
   };

+ 39 - 1
src/views/batchRecord/components/tables/materialTable.vue

@@ -9,7 +9,18 @@
       :cache-key="cacheKeyUrl"
       autoAmendPage
     >
+      <template v-slot:action="{ row }">
+        <el-link type="primary" :underline="false" @click="goToDetail(row)">
+          详情
+        </el-link>
+      </template>
     </ele-pro-table>
+
+    <detailed
+      @detailedClose="detailedClose"
+      v-if="detailedShow && detailedObj"
+      :detailedObj="detailedObj"
+    ></detailed>
   </div>
 </template>
 
@@ -17,9 +28,12 @@
   import dictMixins from '@/mixins/dictMixins';
   import tableColumnsMixin from '@/mixins/tableColumnsMixin';
   import { batchRecordPage } from '@/api/pickorder/index';
+  import detailed from '@/views/produce/components/picking/detailed.vue';
+  import { getDetails } from '@/api/pick/pickApply';
 
   export default {
     mixins: [dictMixins, tableColumnsMixin],
+    components: { detailed },
     props: {
       tableQuery: {
         type: Object,
@@ -93,9 +107,20 @@
                   return '';
               }
             }
+          },
+          {
+            label: '操作',
+            columnKey: 'action',
+            slot: 'action',
+            showOverflowTooltip: true,
+            minWidth: 110,
+            align: 'center',
+            fixed: 'right'
           }
         ],
-        cacheKeyUrl: 'mes-259231040-material-table'
+        cacheKeyUrl: 'mes-259231040-material-table',
+        detailedShow: false,
+        detailedObj: null
       };
     },
     computed: {
@@ -144,6 +169,19 @@
       },
       search(where) {
         this.reload(where);
+      },
+      async goToDetail(row) {
+
+        const res = await getDetails(row.id);
+
+        this.detailedObj = JSON.stringify(res);
+
+        this.$nextTick(() => {
+          this.detailedShow = true;
+        });
+      },
+      detailedClose() {
+        this.detailedShow = false;
       }
     }
   };

+ 18 - 0
src/views/batchRecord/components/tables/qualityWorkOrderTable.vue

@@ -9,6 +9,11 @@
       :cache-key="cacheKeyUrl"
       autoAmendPage
     >
+      <template v-slot:action="{ row }">
+        <el-link type="primary" :underline="false" @click="goToDetail(row)">
+          详情
+        </el-link>
+      </template>
     </ele-pro-table>
   </div>
 </template>
@@ -108,6 +113,15 @@
                   return '已关闭';
               }
             }
+          },
+          {
+            label: '操作',
+            columnKey: 'action',
+            slot: 'action',
+            showOverflowTooltip: true,
+            minWidth: 110,
+            align: 'center',
+            fixed: 'right'
           }
         ],
         cacheKeyUrl: 'mes-9221130-quality-work-order-table'
@@ -164,6 +178,10 @@
       },
       search(where) {
         this.reload(where);
+      },
+      goToDetail(row) {
+        const path = `/page-qms/inspectionWork/details?id=${row.id}&path=&name=工单`;
+        window.history.pushState(null, '', path);
       }
     }
   };

+ 18 - 0
src/views/batchRecord/components/tables/wmsOutInt.vue

@@ -9,6 +9,11 @@
       :cache-key="cacheKeyUrl"
       autoAmendPage
     >
+      <template v-slot:action="{ row }">
+        <el-link type="primary" :underline="false" @click="goToDetail(row)">
+          详情
+        </el-link>
+      </template>
     </ele-pro-table>
   </div>
 </template>
@@ -109,6 +114,15 @@
                 }
               }
             }
+          },
+          {
+            label: '操作',
+            columnKey: 'action',
+            slot: 'action',
+            showOverflowTooltip: true,
+            minWidth: 110,
+            align: 'center',
+            fixed: 'right'
           }
         ],
         cacheKeyUrl: 'mes-259231507-mwmsoutint-table'
@@ -167,6 +181,10 @@
         }
         // 覆盖时间
         this.reload({ ...where, time: null });
+      },
+      goToDetail(row) {
+        const path = `/page-wms/warehouseManagement/stockManagement/details?id=${row.id}&verifyStatus=${row.verifyStatus}`;
+        window.history.pushState(null, '', path);
       }
     }
   };

+ 21 - 0
src/views/batchRecord/components/tables/workOrderTable.vue

@@ -9,7 +9,14 @@
       :cache-key="cacheKeyUrl"
       autoAmendPage
     >
+      <template v-slot:action="{ row }">
+        <el-link type="primary" :underline="false" @click="goToDetail(row)">
+          详情
+        </el-link>
+      </template>
     </ele-pro-table>
+
+    <detailsPop ref="detailsRef"> </detailsPop>
   </div>
 </template>
 
@@ -17,9 +24,11 @@
   import dictMixins from '@/mixins/dictMixins';
   import tableColumnsMixin from '@/mixins/tableColumnsMixin';
   import { batchRecordPage } from '@/api/workOrderList';
+  import detailsPop from '@/views/produceOrder/components/details/index.vue';
 
   export default {
     mixins: [dictMixins, tableColumnsMixin],
+    components: { detailsPop },
     props: {
       tableQuery: {
         type: Object,
@@ -119,6 +128,15 @@
                   return '';
               }
             }
+          },
+          {
+            label: '操作',
+            columnKey: 'action',
+            slot: 'action',
+            showOverflowTooltip: true,
+            minWidth: 110,
+            align: 'center',
+            fixed: 'right'
           }
         ],
         cacheKeyUrl: 'mes-922194-work-order-table'
@@ -174,6 +192,9 @@
       },
       search(where) {
         this.reload(where);
+      },
+      goToDetail(row) {
+        this.$refs.detailsRef.open(row);
       }
     }
   };

+ 32 - 1
src/views/batchRecord/components/tables/workReportTable.vue

@@ -9,7 +9,19 @@
       :cache-key="cacheKeyUrl"
       autoAmendPage
     >
+      <template v-slot:action="{ row }">
+        <el-link type="primary" :underline="false" @click="goToDetail(row)">
+          详情
+        </el-link>
+      </template>
     </ele-pro-table>
+
+    <!-- //工单列表 -->
+    <routings
+      v-if="routingShow"
+      :routeObj="routeObj"
+      @closeRoute="routingShow = false"
+    ></routings>
   </div>
 </template>
 
@@ -17,9 +29,12 @@
   import dictMixins from '@/mixins/dictMixins';
   import tableColumnsMixin from '@/mixins/tableColumnsMixin';
   import { batchRecordPage } from '@/api/workReport/index';
+  import { getById } from '@/api/produceOrder';
+  import routings from '@/views/produce/components/routings.vue';
 
   export default {
     mixins: [dictMixins, tableColumnsMixin],
+    components: { routings },
     props: {
       tableQuery: {
         type: Object,
@@ -96,9 +111,20 @@
                   return '';
               }
             }
+          },
+          {
+            label: '操作',
+            columnKey: 'action',
+            slot: 'action',
+            showOverflowTooltip: true,
+            minWidth: 110,
+            align: 'center',
+            fixed: 'right'
           }
         ],
-        cacheKeyUrl: 'mes-259231101-workreport-table'
+        cacheKeyUrl: 'mes-259231101-workreport-table',
+        routingShow: false,
+        routeObj: {}
       };
     },
     computed: {
@@ -141,6 +167,11 @@
       },
       search(where) {
         this.reload(where);
+      },
+      async goToDetail(row) {
+        const data = await getById(row.workOrderId);
+        this.routeObj = row;
+        this.routingShow = true;
       }
     }
   };

+ 4 - 2
src/views/checklistManagement/checklist.vue

@@ -16,7 +16,9 @@
           >
         </template>
         <template v-slot:action="{ row }">
-          <el-link type="text">编辑</el-link>
+          <el-link type="text" @click="checkAddConfirm('edit', row)"
+            >编辑</el-link
+          >
           <el-link type="text">提交</el-link>
           <el-link type="text">处理</el-link>
           <el-link type="text">详情</el-link>
@@ -24,7 +26,7 @@
             title="您确定要删除这条数据吗?"
             @confirm="deleteRow(row)"
           >
-            <el-link style="margin-left: 10px" slot="reference" type="text"
+            <el-link style="margin-left: 10px" slot="reference" type="danger"
               >删除</el-link
             >
           </el-popconfirm>

+ 32 - 6
src/views/checklistManagement/components/checkDetails.vue

@@ -109,6 +109,7 @@
               type="datetime"
               placeholder="选择日期时间"
               style="width: 100%"
+              value-format="yyyy-MM-dd HH:mm:ss"
             ></el-date-picker>
           </td>
         </tr>
@@ -165,6 +166,7 @@
               type="datetime"
               placeholder="选择日期时间"
               style="width: 100%"
+              value-format="yyyy-MM-dd HH:mm:ss"
             ></el-date-picker>
           </td>
         </tr>
@@ -194,14 +196,19 @@
   import dictMixins from '@/mixins/dictMixins';
   import selectWorkOrder from '@/components/selectWorkOrder/selectWorkOrder.vue';
   import { checklisttemplateGetById } from '@/api/checklisttemplate/index';
-  import { checklistrecordSave } from '@/api/checklistrecord/index';
+  import {
+    checklistrecordSave,
+    checklistrecordGetById,
+    checklistrecordUpdate
+  } from '@/api/checklistrecord/index';
 
   export default {
     mixins: [dictMixins],
     components: { selectWorkOrder },
     data() {
       const formBaseData = {
-        approvalStatus: 0,
+        id: null,
+        approvalStatus: null,
         checklistType: 0,
         code: '',
         createUserName: '',
@@ -212,13 +219,13 @@
         qualityCheckTime: '',
         qualityCheckUserId: 0,
         qualityCheckUserName: '',
-        qualityConclution: 0,
+        qualityConclution: null,
         templateId: 0,
         templateName: '',
         workCheckTime: '',
         workCheckUserId: 0,
         workCheckUserName: '',
-        workConclution: 0
+        workConclution: null
       };
 
       return {
@@ -327,7 +334,7 @@
             align: 'center'
           },
           {
-            prop: 'targetDefinitionName',
+            prop: 'mainIndicatorName',
             label: '指标名称',
             align: 'center',
             minWidth: 110,
@@ -356,6 +363,7 @@
       // 外部调用,打开弹窗
       open(type, data) {
         console.log('data , type', data, type);
+        this.type = type;
         if (type == 'add') {
           this.title = '放行申请单';
           // 生产放心单名称 = 模版名称+年月日+3位数
@@ -372,6 +380,7 @@
           this.getTemplateDetails(data.templateId);
         } else if (type == 'edit') {
           this.title = '放行申请单';
+          this.getCheckDetails(data.id);
         } else if (type == 'detail') {
           this.title = '放行单详情';
         } else {
@@ -399,7 +408,11 @@
             this.butLoading = true;
             try {
               if (type == 'save') {
-                await checklistrecordSave(this.form);
+                if (this.type == 'edit') {
+                  await checklistrecordUpdate(this.form);
+                } else {
+                  await checklistrecordSave(this.form);
+                }
               } else {
               }
               this.$message.success('操作成功');
@@ -481,6 +494,7 @@
           (item) => item.workOrderId !== row.workOrderId
         );
       },
+      // 获取模板详情
       async getTemplateDetails(id) {
         this.loading = true;
         try {
@@ -489,6 +503,18 @@
           // 详情
           this.form.details = data.details;
 
+          this.loading = false;
+        } catch (error) {
+          this.loading = false;
+        }
+      },
+      // 获取放行单详情
+      async getCheckDetails(id) {
+        this.loading = true;
+        try {
+          const data = await checklistrecordGetById(id);
+          this.$util.assignObject(this.form, data);
+          console.log('this.form', this.form);
           this.loading = false;
         } catch (error) {
           this.loading = false;

+ 18 - 18
src/views/checklistManagement/components/templateAdd.vue

@@ -118,12 +118,12 @@
         <template v-slot:indicatorName="{ row }">
           <el-select
             v-if="row.businessType !== -1"
-            v-model="row.targetDefinitionId"
+            v-model="row.mainIndicatorId"
             placeholder="请选择"
             :key="
-              row.indicator + row.targetDefinitionId + indicatorNameCacheKey
+              row.indicator + row.mainIndicatorId + indicatorNameCacheKey
             "
-            @change="targetDefinitionIdChange(row)"
+            @change="mainIndicatorIdChange(row)"
           >
             <el-option
               v-for="i in getIndicatorCacheList(
@@ -138,7 +138,7 @@
           </el-select>
           <el-input
             v-else
-            v-model="row.targetDefinitionName"
+            v-model="row.mainIndicatorName"
             placeholder="请输入"
           ></el-input>
         </template>
@@ -205,12 +205,12 @@
         <template v-slot:indicatorName="{ row }">
           <el-select
             v-if="row.businessType !== -1"
-            v-model="row.targetDefinitionId"
+            v-model="row.mainIndicatorId"
             placeholder="请选择"
             :key="
-              row.indicator + row.targetDefinitionId + indicatorNameCacheKey
+              row.indicator + row.mainIndicatorId + indicatorNameCacheKey
             "
-            @change="targetDefinitionIdChange(row)"
+            @change="mainIndicatorIdChange(row)"
           >
             <el-option
               v-for="i in getIndicatorCacheList(
@@ -225,7 +225,7 @@
           </el-select>
           <el-input
             v-else
-            v-model="row.targetDefinitionName"
+            v-model="row.mainIndicatorName"
             placeholder="请输入"
           ></el-input>
         </template>
@@ -448,7 +448,7 @@
 
               if (
                 item.businessType !== -1 &&
-                (item.indicator == null || item.targetDefinitionId == null)
+                (item.indicator == null || item.mainIndicatorId == null)
               ) {
                 return this.$message.warning(
                   '请填写完整放行规则,业务类型、考核指标、指标名称不能为空!'
@@ -457,7 +457,7 @@
 
               if (
                 item.businessType == -1 &&
-                (item.indicatorName == '' || item.targetDefinitionName == '')
+                (item.indicatorName == '' || item.mainIndicatorName == '')
               ) {
                 return this.$message.warning(
                   '请填写完整放行规则,业务类型、考核指标、指标名称不能为空!'
@@ -526,8 +526,8 @@
           indicatorName: '',
           isAutoCheck: 1,
           sortNum: 0,
-          targetDefinitionId: null,
-          targetDefinitionName: '',
+          mainIndicatorId: null,
+          mainIndicatorName: '',
           templateId: null,
           // 临时id
           id: `tem-${new Date().getTime()}`
@@ -542,7 +542,7 @@
       },
       // 修改
       businessTypeChagne(row) {
-        row.targetDefinitionId = null;
+        row.mainIndicatorId = null;
         // 重置指标名称
         this.getIndicatorNameList(row.businessType, row.indicator);
       },
@@ -568,8 +568,8 @@
       businessTypeChange(row) {
         row.indicator = null;
         row.indicatorName = '';
-        row.targetDefinitionId = null;
-        row.targetDefinitionName = '';
+        row.mainIndicatorId = null;
+        row.mainIndicatorName = '';
       },
       // 删除行
       deleteRow(row) {
@@ -578,13 +578,13 @@
         );
       },
       // 选择指标名称
-      targetDefinitionIdChange(row) {
+      mainIndicatorIdChange(row) {
         const list = this.getIndicatorCacheList(
           row.businessType,
           row.indicator
         );
-        const item = list.find((i) => i.id == row.targetDefinitionId);
-        row.targetDefinitionName = item ? item.name : '';
+        const item = list.find((i) => i.id == row.mainIndicatorId);
+        row.mainIndicatorName = item ? item.name : '';
       }
     }
   };

+ 1 - 1
src/views/produceOrder/components/details/index.vue

@@ -131,7 +131,7 @@
 
           this.desIndex = index;
           console.log(this.routeList, '888888');
-          this.newId = this.routeList[this.desIndex].taskId || '';
+          this.newId = this.routeList[this.desIndex]?.taskId || '';
 
           if (this.workOrderInfo.taskId != -2) {
             this.curTaskObj = JSON.parse(JSON.stringify(this.routeObj));