乐菲 4 недель назад
Родитель
Сommit
e4392d70f3

+ 35 - 30
src/components/BpmnProcessDesigner/package/designer/ProcessViewer.vue

@@ -326,38 +326,42 @@ export default {
       this.element = element;
       !this.elementOverlayIds && (this.elementOverlayIds = {});
       !this.overlays && (this.overlays = this.bpmnModeler.get("overlays"));
-      // 展示信息
+
+      // 1. 先判空,防止业务对象不存在
       const activity = this.activityList.find((m) => m.key === element.id);
-      if (!activity) {
-        return;
-      }
+      if (!activity) return;
+
       if (
         !this.elementOverlayIds[element.id] &&
         element.type !== "bpmn:Process"
       ) {
-        let html = `<div class="element-overlays">
-            <p>Elemet id: ${element.id}</p>
-            <p>Elemet type: ${element.type}</p>
-          </div>`; // 默认值
+        let html = `
+          <div class="element-overlays">
+            <p>Element id: ${element.id}</p>
+            <p>Element type: ${element.type}</p>
+          </div>`;
+
+        // 2. 所有读 nickname 的地方都加 ?.  或者提前判空
         if (element.type === "bpmn:StartEvent" && this.processInstance) {
-          html = `<p>发起人:${this.processInstance.startUser.nickname}</p>
-                  <p>部门:${this.processInstance.startUser.deptName}</p>
-                  <p>创建时间:${this.parseTime(
-                    this.processInstance.createTime
-                  )}`;
+          const user = this.processInstance.startUser;
+          html = `
+            <p>发起人:${user?.nickname || "--"}</p>
+            <p>部门:${user?.deptName || "--"}</p>
+            <p>创建时间:${this.parseTime(
+              this.processInstance.createTime
+            )}</p>`;
         } else if (element.type === "bpmn:UserTask") {
-          // debugger
-          const task = this.taskList.find((m) => m.id === activity.taskId); // 找到活动对应的 taskId
-          if (!task) {
-            return;
-          }
-          html = `<p>审批人:${task.assigneeUser.nickname}</p>
-                  <p>部门:${task.assigneeUser.deptName}</p>
-                  <p>结果:${this.getDictDataLabel(
-                    this.DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT,
-                    task.status
-                  )}</p>
-                  <p>创建时间:${this.parseTime(task.createTime)}</p>`;
+          const task = this.taskList.find((m) => m.id === activity.taskId);
+          if (!task) return; // 3. 任务没找到直接 return,避免后续读 assigneeUser 报错
+          const assignee = task.assigneeUser;
+          html = `
+            <p>审批人:${assignee?.nickname || "--"}</p>
+            <p>部门:${assignee?.deptName || "--"}</p>
+            <p>结果:${this.getDictDataLabel(
+              this.DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT,
+              task.status
+            )}</p>
+            <p>创建时间:${this.parseTime(task.createTime)}</p>`;
           if (task.endTime) {
             html += `<p>结束时间:${this.parseTime(task.endTime)}</p>`;
           }
@@ -374,18 +378,19 @@ export default {
           if (activity.endTime > 0) {
             html += `<p>结束时间:${this.parseTime(activity.endTime)}</p>`;
           }
-          console.log(html);
         } else if (element.type === "bpmn:EndEvent" && this.processInstance) {
-          html = `<p>结果:${this.getDictDataLabel(
-            this.DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT,
-            this.processInstance.result
-          )}</p>`;
+          html = `
+            <p>结果:${this.getDictDataLabel(
+              this.DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT,
+              this.processInstance.result
+            )}</p>`;
           if (this.processInstance.endTime) {
             html += `<p>结束时间:${this.parseTime(
               this.processInstance.endTime
             )}</p>`;
           }
         }
+
         this.elementOverlayIds[element.id] = this.overlays.add(element, {
           position: { left: 0, bottom: 0 },
           html: `<div class="element-overlays">${html}</div>`,

+ 229 - 149
src/views/bpm/processInstance/detail.vue

@@ -17,58 +17,80 @@
           :rules="auditRule"
           label-width="100px"
         >
-          <el-form-item v-if="processInstance && processInstance.name" label="流程名">
+          <el-form-item
+            v-if="processInstance && processInstance.name"
+            label="流程名"
+          >
             {{ processInstance.name }}
           </el-form-item>
-          <el-form-item v-if="processInstance && processInstance.startUser" label="流程发起人">
+          <el-form-item
+            v-if="processInstance && processInstance.startUser"
+            label="流程发起人"
+          >
             {{ processInstance.startUser.nickname }}
-            <el-tag type="info" size="mini">{{ processInstance.startUser.deptName }}</el-tag>
+            <el-tag type="info" size="mini">{{
+              processInstance.startUser.deptName
+            }}</el-tag>
           </el-form-item>
           <el-form-item label="审批建议" prop="reason">
-            <el-input v-model="auditForms[index].reason" type="textarea" placeholder="请输入审批建议" />
+            <el-input
+              v-model="auditForms[index].reason"
+              type="textarea"
+              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">
           <el-button
             icon="el-icon-edit-outline"
             type="success"
             size="mini"
             @click="handleAudit(item, true)"
-          >通过</el-button>
+            >通过</el-button
+          >
           <el-button
             icon="el-icon-circle-close"
             type="danger"
             size="mini"
             @click="handleAudit(item, false)"
-          >不通过</el-button>
+            >不通过</el-button
+          >
           <el-button
             icon="el-icon-edit-outline"
             type="primary"
             size="mini"
             @click="handleUpdateAssignee(item)"
-          >转办</el-button>
+            >转办</el-button
+          >
           <el-button
             icon="el-icon-edit-outline"
             type="primary"
             size="mini"
             @click="handleDelegate(item)"
-          >委派</el-button>
+            >委派</el-button
+          >
           <el-button
             icon="el-icon-refresh-left"
             type="warning"
             size="mini"
             @click="handleBack(item)"
-          >退回</el-button>
+            >退回</el-button
+          >
         </div>
       </el-col>
     </el-card>
     <!-- 申请信息 -->
     <el-card v-loading="processInstanceLoading" class="box-card">
       <div slot="header" class="clearfix">
-        <span class="el-icon-document">申请信息【{{ processInstance.name }}】</span>
+        <span class="el-icon-document"
+          >申请信息【{{ processInstance.name }}】</span
+        >
       </div>
       <el-col
-        v-if="processInstance.processDefinition && processInstance.processDefinition.formType === 10"
+        v-if="
+          processInstance.processDefinition &&
+          processInstance.processDefinition.formType === 10
+        "
         :span="16"
         :offset="6"
       >
@@ -76,10 +98,18 @@
           <parser :key="new Date().getTime()" :form-conf="detailForm" />
         </div>
       </el-col>
-      <div v-if="processInstance.processDefinition && processInstance.processDefinition.formType === 20">
+      <div
+        v-if="
+          processInstance.processDefinition &&
+          processInstance.processDefinition.formType === 20
+        "
+      >
         <router-link
-          :to="processInstance.processDefinition.formCustomViewPath + '?id='
-            + processInstance.businessKey"
+          :to="
+            processInstance.processDefinition.formCustomViewPath +
+            '?id=' +
+            processInstance.businessKey
+          "
         >
           <el-button type="primary">点击查看</el-button>
         </router-link>
@@ -102,18 +132,47 @@
             >
               <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;">
+                <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>
+                  <el-tag type="info" size="mini">{{
+                    item.assigneeUser.deptName
+                  }}</el-tag>
+                </label>
+                <label v-if="item.createTime" style="font-weight: normal"
+                  >创建时间:</label
+                >
+                <label style="color: #8a909c; font-weight: normal">{{
+                  parseTime(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"
+                >
+                  {{ parseTime(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>
-                <label v-if="item.createTime" style="font-weight: normal">创建时间:</label>
-                <label style="color:#8a909c; font-weight: normal">{{ parseTime(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"> {{ parseTime(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>
+                  <el-tag :type="getTimelineItemType(item)">{{
+                    item.reason
+                  }}</el-tag>
                 </p>
               </el-card>
             </el-timeline-item>
@@ -151,7 +210,11 @@
         label-width="110px"
       >
         <el-form-item label="新审批人" prop="assigneeUserId">
-          <el-select v-model="updateAssignee.form.assigneeUserId" clearable style="width: 100%">
+          <el-select
+            v-model="updateAssignee.form.assigneeUserId"
+            clearable
+            style="width: 100%"
+          >
             <el-option
               v-for="item in userOptions"
               :key="parseInt(item.id)"
@@ -162,7 +225,9 @@
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitUpdateAssigneeForm">确 定</el-button>
+        <el-button type="primary" @click="submitUpdateAssigneeForm"
+          >确 定</el-button
+        >
         <el-button @click="cancelUpdateAssigneeForm">取 消</el-button>
       </div>
     </el-dialog>
@@ -170,22 +235,27 @@
 </template>
 
 <script>
-import { getProcessDefinitionBpmnXML } from '@/api/bpm/definition'
-import { DICT_TYPE, getDictDatas } from '@/utils/dict'
-import store from '@/store'
-import { decodeFields } from '@/utils/formGenerator'
-import Parser from '@/components/Parser/index.vue'
-import { getProcessInstance } from '@/api/bpm/processInstance'
-import { approveTask, getTaskListByProcessInstanceId, rejectTask, updateTaskAssignee } from '@/api/bpm/task'
-import { getDate } from '@/utils/dateUtils'
-import { listSimpleUsers } from '@/api/system/user'
-import { getActivityList } from '@/api/bpm/activity'
+import { getProcessDefinitionBpmnXML } from "@/api/bpm/definition";
+import { DICT_TYPE, getDictDatas } from "@/utils/dict";
+import store from "@/store";
+import { decodeFields } from "@/utils/formGenerator";
+import Parser from "@/components/Parser/index.vue";
+import { getProcessInstance } from "@/api/bpm/processInstance";
+import {
+  approveTask,
+  getTaskListByProcessInstanceId,
+  rejectTask,
+  updateTaskAssignee,
+} from "@/api/bpm/task";
+import { getDate } from "@/utils/dateUtils";
+import { listSimpleUsers } from "@/api/system/user";
+import { getActivityList } from "@/api/bpm/activity";
 
 // 流程实例的详情页,可用于审批
 export default {
-  name: 'ProcessInstanceDetail',
+  name: "ProcessInstanceDetail",
   components: {
-    Parser
+    Parser,
   },
   data() {
     return {
@@ -197,13 +267,13 @@ export default {
 
       // 流程表单详情
       detailForm: {
-        fields: []
+        fields: [],
       },
 
       // BPMN 数据
       bpmnXML: null,
       bpmnControlForm: {
-        prefix: 'flowable'
+        prefix: "flowable",
       },
       activityList: [],
 
@@ -215,7 +285,9 @@ export default {
       runningTasks: [],
       auditForms: [],
       auditRule: {
-        reason: [{ required: true, message: '审批建议不能为空', trigger: 'blur' }]
+        reason: [
+          { required: true, message: "审批建议不能为空", trigger: "blur" },
+        ],
       },
 
       // 转派审批人
@@ -223,43 +295,45 @@ export default {
       updateAssignee: {
         open: false,
         form: {
-          assigneeUserId: undefined
+          assigneeUserId: undefined,
         },
         rules: {
-          assigneeUserId: [{ required: true, message: '新审批人不能为空', trigger: 'change' }]
-        }
+          assigneeUserId: [
+            { required: true, message: "新审批人不能为空", trigger: "change" },
+          ],
+        },
       },
 
       // 数据字典
-      categoryDictDatas: getDictDatas(DICT_TYPE.BPM_MODEL_CATEGORY)
-    }
+      categoryDictDatas: getDictDatas(DICT_TYPE.BPM_MODEL_CATEGORY),
+    };
   },
   created() {
-    this.id = this.$route.query.id
+    this.id = this.$route.query.id;
     if (!this.id) {
-      this.$message.error('未传递 id 参数,无法查看流程信息')
-      return
+      this.$message.error("未传递 id 参数,无法查看流程信息");
+      return;
     }
-    this.getDetail()
+    this.getDetail();
 
     // 获得用户列表
-    this.userOptions = []
-    listSimpleUsers().then(response => {
-      this.userOptions.push(...response.data)
-    })
+    this.userOptions = [];
+    listSimpleUsers().then((response) => {
+      this.userOptions.push(...response.data);
+    });
   },
   methods: {
     /** 获得流程实例 */
     getDetail() {
       // 获得流程实例相关
-      this.processInstanceLoading = true
-      getProcessInstance(this.id).then(response => {
+      this.processInstanceLoading = true;
+      getProcessInstance(this.id).then((response) => {
         if (!response.data) {
-          this.$message.error('查询不到流程信息!')
-          return
+          this.$message.error("查询不到流程信息!");
+          return;
         }
         // 设置流程信息
-        this.processInstance = response.data
+        this.processInstance = response.data;
 
         // 设置表单信息
         if (this.processInstance.processDefinition.formType === 10) {
@@ -267,194 +341,200 @@ export default {
             ...JSON.parse(this.processInstance.processDefinition.formConf),
             disabled: true, // 表单禁用
             formBtns: false, // 按钮隐藏
-            fields: decodeFields(this.processInstance.processDefinition.formFields)
-          }
+            fields: decodeFields(
+              this.processInstance.processDefinition.formFields
+            ),
+          };
           // 设置表单的值
-          this.detailForm.fields.forEach(item => {
-            const val = this.processInstance.formVariables[item.__vModel__]
+          this.detailForm.fields.forEach((item) => {
+            const val = this.processInstance.formVariables[item.__vModel__];
             if (val) {
-              item.__config__.defaultValue = val
+              item.__config__.defaultValue = val;
             }
-          })
+          });
         }
 
         // 加载流程图
-        getProcessDefinitionBpmnXML(this.processInstance.processDefinition.id).then(response => {
-          this.bpmnXML = response.data
-        })
+        getProcessDefinitionBpmnXML(
+          this.processInstance.processDefinition.id
+        ).then((response) => {
+          this.bpmnXML = response.data.bpmnXml;
+        });
         // 加载活动列表
         getActivityList({
-          processInstanceId: this.processInstance.id
-        }).then(response => {
-          this.activityList = response.data
-        })
+          processInstanceId: this.processInstance.id,
+        }).then((response) => {
+          this.activityList = response.data;
+        });
 
         // 取消加载中
-        this.processInstanceLoading = false
-      })
+        this.processInstanceLoading = false;
+      });
 
       // 获得流程任务列表(审批记录)
-      this.tasksLoad = true
-      this.runningTasks = []
-      this.auditForms = []
-      getTaskListByProcessInstanceId(this.id).then(response => {
+      this.tasksLoad = true;
+      this.runningTasks = [];
+      this.auditForms = [];
+      getTaskListByProcessInstanceId(this.id).then((response) => {
         // 审批记录
-        this.tasks = []
+        this.tasks = [];
         // 移除已取消的审批
-        response.data.forEach(task => {
+        response.data.forEach((task) => {
           if (task.result !== 4) {
-            this.tasks.push(task)
+            this.tasks.push(task);
           }
-        })
+        });
         // 排序,将未完成的排在前面,已完成的排在后面;
         this.tasks.sort((a, b) => {
           // 有已完成的情况,按照完成时间倒序
           if (a.endTime && b.endTime) {
-            return b.endTime - a.endTime
+            return b.endTime - a.endTime;
           } else if (a.endTime) {
-            return 1
+            return 1;
           } else if (b.endTime) {
-            return -1
+            return -1;
             // 都是未完成,按照创建时间倒序
           } else {
-            return b.createTime - a.createTime
+            return b.createTime - a.createTime;
           }
-        })
+        });
 
         // 需要审核的记录
-        const userId = store.getters.userId
-        this.tasks.forEach(task => {
-          if (task.result !== 1) { // 只有待处理才需要
-            return
+        const userId = store.getters.userId;
+        this.tasks.forEach((task) => {
+          if (task.result !== 1) {
+            // 只有待处理才需要
+            return;
           }
-          if (!task.assigneeUser || task.assigneeUser.id !== userId) { // 自己不是处理人
-            return
+          if (!task.assigneeUser || task.assigneeUser.id !== userId) {
+            // 自己不是处理人
+            return;
           }
-          this.runningTasks.push({ ...task })
+          this.runningTasks.push({ ...task });
           this.auditForms.push({
-            reason: ''
-          })
-        })
+            reason: "",
+          });
+        });
 
         // 取消加载中
-        this.tasksLoad = false
-      })
+        this.tasksLoad = false;
+      });
     },
     /** 处理选择流程的按钮操作 **/
     handleSelect(row) {
       // 设置选择的流程
-      this.selectProcessInstance = row
+      this.selectProcessInstance = row;
 
       // 流程表单
       if (row.formId) {
         // 设置对应的表单
         this.detailForm = {
           ...JSON.parse(row.formConf),
-          fields: decodeFields(row.formFields)
-        }
+          fields: decodeFields(row.formFields),
+        };
       } else if (row.formCustomCreatePath) {
-        this.$router.push({ path: row.formCustomCreatePath })
+        this.$router.push({ path: row.formCustomCreatePath });
         // 这里暂时无需加载流程图,因为跳出到另外个 Tab;
       }
     },
     getDateStar(ms) {
-      return getDate(ms)
+      return getDate(ms);
     },
     getTimelineItemIcon(item) {
       if (item.result === 1) {
-        return 'el-icon-time'
+        return "el-icon-time";
       }
       if (item.result === 2) {
-        return 'el-icon-check'
+        return "el-icon-check";
       }
       if (item.result === 3) {
-        return 'el-icon-close'
+        return "el-icon-close";
       }
       if (item.result === 4) {
-        return 'el-icon-remove-outline'
+        return "el-icon-remove-outline";
       }
-      return ''
+      return "";
     },
     getTimelineItemType(item) {
       if (item.result === 1) {
-        return 'primary'
+        return "primary";
       }
       if (item.result === 2) {
-        return 'success'
+        return "success";
       }
       if (item.result === 3) {
-        return 'danger'
+        return "danger";
       }
       if (item.result === 4) {
-        return 'info'
+        return "info";
       }
-      return ''
+      return "";
     },
     /** 处理审批通过和不通过的操作 */
     handleAudit(task, pass) {
-      const index = this.runningTasks.indexOf(task)
-      this.$refs['form' + index][0].validate(valid => {
+      const index = this.runningTasks.indexOf(task);
+      this.$refs["form" + index][0].validate((valid) => {
         if (!valid) {
-          return
+          return;
         }
         const data = {
           id: task.id,
-          reason: this.auditForms[index].reason
-        }
+          reason: this.auditForms[index].reason,
+        };
         if (pass) {
-          approveTask(data).then(response => {
-            this.$modal.msgSuccess('审批通过成功!')
-            this.getDetail() // 获得最新详情
-          })
+          approveTask(data).then((response) => {
+            this.$modal.msgSuccess("审批通过成功!");
+            this.getDetail(); // 获得最新详情
+          });
         } else {
-          rejectTask(data).then(response => {
-            this.$modal.msgSuccess('审批不通过成功!')
-            this.getDetail() // 获得最新详情
-          })
+          rejectTask(data).then((response) => {
+            this.$modal.msgSuccess("审批不通过成功!");
+            this.getDetail(); // 获得最新详情
+          });
         }
-      })
+      });
     },
     /** 处理转派审批人 */
     handleUpdateAssignee(task) {
       // 设置表单
-      this.resetUpdateAssigneeForm()
-      this.updateAssignee.form.id = task.id
+      this.resetUpdateAssigneeForm();
+      this.updateAssignee.form.id = task.id;
       // 设置为打开
-      this.updateAssignee.open = true
+      this.updateAssignee.open = true;
     },
     /** 提交转派审批人 */
     submitUpdateAssigneeForm() {
-      this.$refs['updateAssigneeForm'].validate(valid => {
+      this.$refs["updateAssigneeForm"].validate((valid) => {
         if (!valid) {
-          return
+          return;
         }
-        updateTaskAssignee(this.updateAssignee.form).then(response => {
-          this.$modal.msgSuccess('转派任务成功!')
-          this.updateAssignee.open = false
-          this.getDetail() // 获得最新详情
-        })
-      })
+        updateTaskAssignee(this.updateAssignee.form).then((response) => {
+          this.$modal.msgSuccess("转派任务成功!");
+          this.updateAssignee.open = false;
+          this.getDetail(); // 获得最新详情
+        });
+      });
     },
     /** 取消转派审批人 */
     cancelUpdateAssigneeForm() {
-      this.updateAssignee.open = false
-      this.resetUpdateAssigneeForm()
+      this.updateAssignee.open = false;
+      this.resetUpdateAssigneeForm();
     },
     /** 重置转派审批人 */
     resetUpdateAssigneeForm() {
       this.updateAssignee.form = {
         id: undefined,
-        assigneeUserId: undefined
-      }
-      this.resetForm('updateAssigneeForm')
+        assigneeUserId: undefined,
+      };
+      this.resetForm("updateAssigneeForm");
     },
     /** 处理审批退回的操作 */
     handleDelegate(task) {
-      this.$modal.msgError('暂不支持【委派】功能,可以使用【转派】替代!')
+      this.$modal.msgError("暂不支持【委派】功能,可以使用【转派】替代!");
     },
     /** 处理审批退回的操作 */
     handleBack(task) {
-      this.$modal.msgError('暂不支持【退回】功能!')
+      this.$modal.msgError("暂不支持【退回】功能!");
       // 可参考 http://blog.wya1.com/article/636697030/details/7296
       // const data = {
       //   id: task.id,
@@ -464,9 +544,9 @@ export default {
       //   this.$modal.msgSuccess("回退成功!");
       //   this.getDetail(); // 获得最新详情
       // });
-    }
-  }
-}
+    },
+  },
+};
 </script>
 
 <style lang="scss">

+ 71 - 59
src/views/bpm/processInstance/index.vue

@@ -69,7 +69,9 @@
               style="width: 100%"
             >
               <el-option
-                v-for="dict in getDictDatas(DICT_TYPE.BPM_PROCESS_INSTANCE_STATUS)"
+                v-for="dict in getDictDatas(
+                  DICT_TYPE.BPM_PROCESS_INSTANCE_STATUS
+                )"
                 :key="dict.value"
                 :label="dict.label"
                 :value="dict.value"
@@ -86,7 +88,9 @@
               style="width: 100%"
             >
               <el-option
-                v-for="dict in getDictDatas(DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT)"
+                v-for="dict in getDictDatas(
+                  DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT
+                )"
                 :key="dict.value"
                 :label="dict.label"
                 :value="dict.value"
@@ -96,42 +100,44 @@
         </el-col>
         <el-col :span="12" class="text-right">
           <el-form-item label-width="0">
-            <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
-            <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+            <el-button type="primary" icon="el-icon-search" @click="handleQuery"
+              >搜索</el-button
+            >
+            <el-button icon="el-icon-refresh" @click="resetQuery"
+              >重置</el-button
+            >
           </el-form-item>
         </el-col>
       </el-row>
-
     </el-form>
 
     <!-- 操作工具栏 -->
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
         <el-button
-          v-hasPermi="['bpm:process-instance:query']"
           v-if="false"
+          v-hasPermi="['bpm:process-instance:query']"
           type="primary"
           plain
           icon="el-icon-plus"
           size="mini"
           @click="handleAdd"
-        >发起流程</el-button>
+          >发起流程</el-button
+        >
       </el-col>
       <right-toolbar :show-search.sync="showSearch" @queryTable="getList" />
     </el-row>
 
     <!-- 列表 -->
     <el-table v-loading="loading" :data="list" border>
-      <el-table-column
-        label="编号"
-        align="center"
-        prop="id"
-        width="320"
-      />
+      <el-table-column label="编号" align="center" prop="id" width="320" />
       <el-table-column label="流程名" align="center" prop="name" />
       <el-table-column label="流程分类" align="center" prop="category">
         <template slot-scope="scope">
-          <dict-tag :type="DICT_TYPE.BPM_MODEL_CATEGORY" :value="scope.row.category" />
+          <dict-tag
+            :type="DICT_TYPE.BPM_MODEL_CATEGORY"
+            :value="scope.row.category"
+          />
         </template>
       </el-table-column>
       <el-table-column label="当前审批任务" align="center" prop="tasks">
@@ -148,12 +154,18 @@
       </el-table-column>
       <el-table-column label="状态" align="center" prop="status">
         <template slot-scope="scope">
-          <dict-tag :type="DICT_TYPE.BPM_PROCESS_INSTANCE_STATUS" :value="scope.row.status" />
+          <dict-tag
+            :type="DICT_TYPE.BPM_PROCESS_INSTANCE_STATUS"
+            :value="scope.row.status"
+          />
         </template>
       </el-table-column>
       <el-table-column label="结果" align="center" prop="result">
         <template slot-scope="scope">
-          <dict-tag :type="DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT" :value="scope.row.result" />
+          <dict-tag
+            :type="DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT"
+            :value="scope.row.result"
+          />
         </template>
       </el-table-column>
       <el-table-column
@@ -176,19 +188,15 @@
           <span>{{ parseTime(scope.row.endTime) }}</span>
         </template>
       </el-table-column>
-      <el-table-column
-        label="操作"
-        align="center"
-        width="120"
-        fixed="right"
-      >
+      <el-table-column label="操作" align="center" width="120" fixed="right">
         <template slot-scope="scope">
           <el-button
             size="mini"
             type="text"
             icon="el-icon-edit"
             @click="handleDetail(scope.row)"
-          >详情</el-button>
+            >详情</el-button
+          >
           <el-button
             v-if="true"
             type="text"
@@ -196,7 +204,8 @@
             icon="el-icon-delete"
             class="text-danger"
             @click="handleCancel(scope.row)"
-          >取消</el-button>
+            >取消</el-button
+          >
         </template>
       </el-table-column>
     </el-table>
@@ -208,17 +217,18 @@
       :limit.sync="queryParams.pageSize"
       @pagination="getList"
     />
-
   </div>
 </template>
 
 <script>
-import { getMyProcessInstancePage, cancelProcessInstance } from '@/api/bpm/processInstance'
+import {
+  getMyProcessInstancePage,
+  cancelProcessInstance,
+} from "@/api/bpm/processInstance";
 
 export default {
-  name: 'ProcessInstance',
-  components: {
-  },
+  name: "ProcessInstance",
+  components: {},
   data() {
     return {
       // 遮罩层
@@ -238,58 +248,60 @@ export default {
         category: null,
         status: null,
         result: null,
-        createTime: []
-      }
-    }
+        createTime: [],
+      },
+    };
   },
   created() {
-    this.getList()
+    this.getList();
   },
   methods: {
     /** 查询列表 */
     getList() {
-      this.loading = true
+      this.loading = true;
       // 执行查询
-      getMyProcessInstancePage(this.queryParams).then(response => {
-        this.list = response.data.list
-        this.total = response.data.total
-        this.loading = false
-      })
+      getMyProcessInstancePage(this.queryParams).then((response) => {
+        this.list = response.data.list;
+        this.total = response.data.total;
+        this.loading = false;
+      });
     },
     /** 搜索按钮操作 */
     handleQuery() {
-      this.queryParams.pageNo = 1
-      this.getList()
+      this.queryParams.pageNo = 1;
+      this.getList();
     },
     /** 重置按钮操作 */
     resetQuery() {
-      this.resetForm('queryForm')
-      this.handleQuery()
+      this.resetForm("queryForm");
+      this.handleQuery();
     },
     /** 新增按钮操作 **/
     handleAdd() {
-      this.$router.push({ path: '/bpm/process-instance/create' })
+      this.$router.push({ path: "/bpm/process-instance/create" });
     },
     /** 取消按钮操作 */
     handleCancel(row) {
-      const id = row.id
-      this.$prompt('请输入取消原因?', '取消流程', {
-        type: 'warning',
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
+      const id = row.id;
+      this.$prompt("请输入取消原因?", "取消流程", {
+        type: "warning",
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
         inputPattern: /^[\s\S]*.*[^\s][\s\S]*$/, // 判断非空,且非空格
-        inputErrorMessage: '取消原因不能为空'
-      }).then(({ value }) => {
-        return cancelProcessInstance(id, value)
-      }).then(() => {
-        this.getList()
-        this.$modal.msgSuccess('取消成功')
+        inputErrorMessage: "取消原因不能为空",
       })
+        .then(({ value }) => {
+          return cancelProcessInstance(id, value);
+        })
+        .then(() => {
+          this.getList();
+          this.$modal.msgSuccess("取消成功");
+        });
     },
     /** 处理详情按钮 */
     handleDetail(row) {
-      this.$router.push({ path: '/bpm/process-instance/detail', query: { id: row.id }})
-    }
-  }
-}
+      this.$router.push({ path: "/bpm/task/my/detail", query: { id: row.id } });
+    },
+  },
+};
 </script>

+ 194 - 193
src/views/rtkwms/inrequest/InRequestForm.vue

@@ -66,199 +66,200 @@
         </div>
       </div>
     </div>
+    <el-tabs v-model="activeName" @tab-click="handleClick">
+      <el-tab-pane label="明细信息" name="detail">
+        <el-form
+          ref="formRef"
+          v-loading="formLoading"
+          :model="formData"
+          :rules="formRules"
+          label-width="150px"
+          class="form-container"
+        >
+          <el-row :gutter="20">
+            <el-col :span="12"
+              ><el-form-item label="业务类型" prop="businessType">
+                <el-select
+                  v-model="formData.businessType"
+                  placeholder="请选择业务类型"
+                  :disabled="!isEditable"
+                  @change="changeBusinessType"
+                >
+                  <el-option
+                    v-for="dict in getDictDatas('in_business_type')"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="申请单号" prop="remark">
+                <el-input
+                  v-model="formData.requestNo"
+                  :disabled="true"
+                  placeholder="保存后自动生成"
+                /> </el-form-item
+            ></el-col>
+            <el-col :span="12">
+              <el-form-item label="部门" prop="deptCode">
+                <DepartMentSelect
+                  ref="departMentSelect"
+                  v-model="formData.deptCode"
+                  :disabled="isFormDisabled || !formData.businessType"
+                  placeholder="请选择部门"
+                  clearable
+                  @change="selectDepart"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12"
+              ><el-form-item label="业务分类名称" prop="businessDescribe">
+                <el-select
+                  v-model="formData.businessDescribe"
+                  :disabled="isFormDisabled || !formData.businessType"
+                  placeholder="请选择业务类型"
+                  @change="changeBusinessDescribe"
+                >
+                  <el-option
+                    v-for="dict in businessDescribeList"
+                    :key="dict.label"
+                    :label="dict.label"
+                    :value="dict.label"
+                  />
+                </el-select> </el-form-item
+            ></el-col>
 
-    <el-form
-      ref="formRef"
-      v-loading="formLoading"
-      :model="formData"
-      :rules="formRules"
-      label-width="150px"
-      class="form-container"
-    >
-      <el-row :gutter="20">
-        <el-col :span="12"
-          ><el-form-item label="业务类型" prop="businessType">
-            <el-select
-              v-model="formData.businessType"
-              placeholder="请选择业务类型"
-              :disabled="!isEditable"
-              @change="changeBusinessType"
-            >
-              <el-option
-                v-for="dict in getDictDatas('in_business_type')"
-                :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="申请单号" prop="remark">
-            <el-input
-              v-model="formData.requestNo"
-              :disabled="true"
-              placeholder="保存后自动生成"
-            /> </el-form-item
-        ></el-col>
-        <el-col :span="12">
-          <el-form-item label="部门" prop="deptCode">
-            <DepartMentSelect
-              ref="departMentSelect"
-              v-model="formData.deptCode"
-              :disabled="isFormDisabled || !formData.businessType"
-              placeholder="请选择部门"
-              clearable
-              @change="selectDepart"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12"
-          ><el-form-item label="业务分类名称" prop="businessDescribe">
-            <el-select
-              v-model="formData.businessDescribe"
-              :disabled="isFormDisabled || !formData.businessType"
-              placeholder="请选择业务类型"
-              @change="changeBusinessDescribe"
-            >
-              <el-option
-                v-for="dict in businessDescribeList"
-                :key="dict.label"
-                :label="dict.label"
-                :value="dict.label"
-              />
-            </el-select> </el-form-item
-        ></el-col>
-
-        <el-col :span="12"
-          ><el-form-item label="优先级" prop="priority">
-            <el-select
-              v-model="formData.priority"
-              :disabled="isFormDisabled || !formData.businessType"
-              placeholder="请选择优先级"
-            >
-              <el-option
-                v-for="dict in getDictDatas('priority')"
-                :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="供应商编码" prop="supplierCode">
-            <el-input
-              v-model="formData.supplierCode"
-              :disabled="isFormDisabled || !formData.businessType"
-              placeholder="请输入供应商编码"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="客户编码" prop="customerCode">
-            <el-input
-              v-model="formData.customerCode"
-              :disabled="isFormDisabled || !formData.businessType"
-              placeholder="请输入客户编码"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="源单编号" prop="sourceOrderNo">
-            <el-select
-              v-model="formData.sourceOrderNo"
-              filterable
-              remote
-              :disabled="isFormDisabled || !formData.businessType"
-              reserve-keyword
-              placeholder="请输入源单编号"
-              :remote-method="remoteMethod"
-              :loading="loading"
-              @change="changeSourceOrderNo"
-            >
-              <el-option
-                v-for="item in sourceOrderNoList"
-                :key="item.sourceOrderNo"
-                :label="item.sourceOrderNo"
-                :value="item.sourceOrderNo"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="预计出入库时间" prop="expectedTime">
-            <el-date-picker
-              v-model="formData.expectedTime"
-              :disabled="isFormDisabled || !formData.businessType"
-              clearable
-              type="date"
-              value-format="timestamp"
-              placeholder="选择预计出入库时间"
-            /> </el-form-item
-        ></el-col>
-        <el-col :span="12">
-          <el-form-item label="实际出入库时间" prop="actualTime">
-            <el-date-picker
-              v-model="formData.actualTime"
-              clearable
-              :disabled="true"
-              type="date"
-              value-format="timestamp"
-              placeholder="选择实际出入库时间"
-            /> </el-form-item
-        ></el-col>
+            <el-col :span="12"
+              ><el-form-item label="优先级" prop="priority">
+                <el-select
+                  v-model="formData.priority"
+                  :disabled="isFormDisabled || !formData.businessType"
+                  placeholder="请选择优先级"
+                >
+                  <el-option
+                    v-for="dict in getDictDatas('priority')"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="供应商编码" prop="supplierCode">
+                <el-input
+                  v-model="formData.supplierCode"
+                  :disabled="isFormDisabled || !formData.businessType"
+                  placeholder="请输入供应商编码"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="客户编码" prop="customerCode">
+                <el-input
+                  v-model="formData.customerCode"
+                  :disabled="isFormDisabled || !formData.businessType"
+                  placeholder="请输入客户编码"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="源单编号" prop="sourceOrderNo">
+                <el-select
+                  v-model="formData.sourceOrderNo"
+                  filterable
+                  remote
+                  :disabled="isFormDisabled || !formData.businessType"
+                  reserve-keyword
+                  placeholder="请输入源单编号"
+                  :remote-method="remoteMethod"
+                  :loading="loading"
+                  @change="changeSourceOrderNo"
+                >
+                  <el-option
+                    v-for="item in sourceOrderNoList"
+                    :key="item.sourceOrderNo"
+                    :label="item.sourceOrderNo"
+                    :value="item.sourceOrderNo"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="预计出入库时间" prop="expectedTime">
+                <el-date-picker
+                  v-model="formData.expectedTime"
+                  :disabled="isFormDisabled || !formData.businessType"
+                  clearable
+                  type="date"
+                  value-format="timestamp"
+                  placeholder="选择预计出入库时间"
+                /> </el-form-item
+            ></el-col>
+            <el-col :span="12">
+              <el-form-item label="实际出入库时间" prop="actualTime">
+                <el-date-picker
+                  v-model="formData.actualTime"
+                  clearable
+                  :disabled="true"
+                  type="date"
+                  value-format="timestamp"
+                  placeholder="选择实际出入库时间"
+                /> </el-form-item
+            ></el-col>
 
-        <el-col :span="12">
-          <el-form-item label="备注" prop="remark">
-            <el-input
-              v-model="formData.remark"
-              :disabled="isFormDisabled || !formData.businessType"
-              placeholder="请输入备注"
-            /> </el-form-item
-        ></el-col>
-        <el-col :span="12">
-          <el-form-item label="存储地点" prop="warehouseId">
-            <el-select
-              v-model="formData.warehouseId"
-              filterable
-              remote
-              :disabled="isFormDisabled || !formData.businessType"
-              reserve-keyword
-              placeholder="请输入存储地点"
-              :remote-method="remoteWarehouse"
-              :loading="loading"
-            >
-              <el-option
-                v-for="item in warehouseList"
-                :key="item.erpId"
-                :label="item.name"
-                :value="item.erpId"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="状态" prop="status" aria-disabled="true">
-            <el-select
-              v-model="formData.status"
-              disabled
-              placeholder="请选择状态"
-            >
-              <el-option
-                v-for="dict in getDictDatas('in_out_status')"
-                :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-      </el-row>
-    </el-form>
+            <el-col :span="12">
+              <el-form-item label="备注" prop="remark">
+                <el-input
+                  v-model="formData.remark"
+                  :disabled="isFormDisabled || !formData.businessType"
+                  placeholder="请输入备注"
+                /> </el-form-item
+            ></el-col>
+            <el-col :span="12">
+              <el-form-item label="存储地点" prop="warehouseId">
+                <el-select
+                  v-model="formData.warehouseId"
+                  filterable
+                  remote
+                  :disabled="isFormDisabled || !formData.businessType"
+                  reserve-keyword
+                  placeholder="请输入存储地点"
+                  :remote-method="remoteWarehouse"
+                  :loading="loading"
+                >
+                  <el-option
+                    v-for="item in warehouseList"
+                    :key="item.erpId"
+                    :label="item.name"
+                    :value="item.erpId"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="状态" prop="status" aria-disabled="true">
+                <el-select
+                  v-model="formData.status"
+                  disabled
+                  placeholder="请选择状态"
+                >
+                  <el-option
+                    v-for="dict in getDictDatas('in_out_status')"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
 
-    <el-tabs v-model="activeName" @tab-click="handleClick">
-      <el-tab-pane label="明细信息" name="detail">
+        <!-- <el-tabs v-model="activeName" @tab-click="handleClick">
+      <el-tab-pane label="明细信息" name="detail"> -->
         <el-table :data="formData.list" border size="mini">
           <el-table-column
             label="源单编号"
@@ -835,7 +836,7 @@ export default {
       // 状态变化
       this.$set(this.formData, "status", "1");
 
-      //重新获取数据
+      // 重新获取数据
       const res = await InRequestApi.getRequest(this.formData.id);
       this.formData.bpmInstanceId = res.data.bpmInstanceId;
     },
@@ -853,8 +854,8 @@ export default {
       // 检查是否存在工作流实例ID
       if (this.formData.bpmInstanceId) {
         // 如果存在工作流实例,跳转到审批任务tab页
-        this.activeName = 'approvalTask';
-        this.$modal.msgWarning('请在审批任务页面完成审核!');
+        this.activeName = "approvalTask";
+        this.$modal.msgWarning("请在审批任务页面完成审核!");
         return;
       }
 

+ 2 - 2
src/views/system/menu/index.vue

@@ -93,8 +93,8 @@
       <el-table-column prop="path" label="路由地址" width="150" />
       <el-table-column prop="icon" label="图标" align="center" width="100">
         <template slot-scope="scope">
-          <!-- <svg-icon :icon-class="scope.row.icon || ''" /> -->
-          <svg-icon :icon-class="scope.row.icon" />
+          <svg-icon :icon-class="scope.row.icon || ''" />
+          <!-- <svg-icon :icon-class="scope.row.icon" /> -->
         </template>
       </el-table-column>
       <el-table-column prop="sort" align="center" label="排序" width="60" />

+ 207 - 207
src/views/wms/output/inrequest/components/InRequestForm.vue

@@ -59,212 +59,212 @@
       >
       <el-button plain size="mini" @click="handleCancel">返 回</el-button>
     </div>
-    <!-- <el-tabs v-model="activeName" @tab-click="handleClick">
-      <el-tab-pane label="明细信息" name="detail"> -->
-    <el-form
-      ref="formRef"
-      v-loading="formLoading"
-      :model="formData"
-      :rules="formRules"
-      label-width="150px"
-    >
-      <el-row :gutter="20">
-        <el-col :span="12"
-          ><el-form-item label="业务类型" prop="businessType">
-            <el-select
-              v-model="formData.businessType"
-              placeholder="请选择业务类型"
-              :disabled="!isEditable"
-              @change="changeBusinessType"
-            >
-              <el-option
-                v-for="dict in getDictDatas('inout_business_type')"
-                :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
-              />
-            </el-select> </el-form-item
-        ></el-col>
-        <el-col :span="12">
-          <el-form-item label="申请单号" prop="remark">
-            <el-input
-              v-model="formData.requestNo"
-              :disabled="true"
-              placeholder="保存后自动生成"
-            /> </el-form-item
-        ></el-col>
-        <el-col :span="12">
-          <el-form-item label="部门" prop="deptCode">
-            <DepartMentSelect
-              ref="departMentSelect"
-              v-model="formData.deptCode"
-              :disabled="isFormDisabled || !formData.businessType"
-              placeholder="请选择部门"
-              clearable
-              @change="selectDepart"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12"
-          ><el-form-item label="业务分类名称" prop="businessDescribe">
-            <el-select
-              v-model="formData.businessDescribe"
-              :disabled="
-                isFormDisabled || (formData.businessType ? false : true)
-              "
-              placeholder="请选择业务类型"
-              @change="changeBusinessDescribe"
-            >
-              <el-option
-                v-for="dict in businessDescribeList"
-                :key="dict.label"
-                :label="dict.label"
-                :value="dict.label"
-              />
-            </el-select> </el-form-item
-        ></el-col>
-
-        <el-col :span="12"
-          ><el-form-item label="优先级" prop="priority">
-            <el-select
-              v-model="formData.priority"
-              :disabled="
-                isFormDisabled || (formData.businessType ? false : true)
-              "
-              placeholder="请选择优先级"
-            >
-              <el-option
-                v-for="dict in getDictDatas('priority')"
-                :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="供应商编码" prop="supplierCode">
-            <el-input
-              v-model="formData.supplierCode"
-              :disabled="
-                isFormDisabled || (formData.businessType ? false : true)
-              "
-              placeholder="请输入供应商编码"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="客户编码" prop="customerCode">
-            <el-input
-              v-model="formData.customerCode"
-              :disabled="
-                isFormDisabled || (formData.businessType ? false : true)
-              "
-              placeholder="请输入客户编码"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="源单编号" prop="sourceOrderNo">
-            <el-select
-              v-model="formData.sourceOrderNo"
-              filterable
-              remote
-              :disabled="
-                isFormDisabled || (formData.businessType ? false : true)
-              "
-              reserve-keyword
-              placeholder="请输入源单编号"
-              :remote-method="remoteMethod"
-              :loading="loadingSourceOrder"
-              @change="changeSourceOrderNo"
-            >
-              <el-option
-                v-for="item in sourceOrderNoList"
-                :key="item.sourceOrderNo"
-                :label="item.sourceOrderNo"
-                :value="item.sourceOrderNo"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="预计出入库时间" prop="expectedTime">
-            <el-date-picker
-              v-model="formData.expectedTime"
-              :disabled="
-                isFormDisabled || (formData.businessType ? false : true)
-              "
-              clearable
-              type="date"
-              value-format="timestamp"
-              placeholder="选择预计出入库时间"
-            /> </el-form-item
-        ></el-col>
-        <el-col :span="12">
-          <el-form-item label="实际出入库时间" prop="actualTime">
-            <el-date-picker
-              v-model="formData.actualTime"
-              clearable
-              :disabled="true"
-              type="date"
-              value-format="timestamp"
-              placeholder="选择实际出入库时间"
-            /> </el-form-item
-        ></el-col>
-        <el-col :span="12">
-          <el-form-item label="备注" prop="remark">
-            <el-input
-              v-model="formData.remark"
-              :disabled="
-                isFormDisabled || (formData.businessType ? false : true)
-              "
-              placeholder="请输入备注"
-            /> </el-form-item
-        ></el-col>
-        <el-col :span="12">
-          <el-form-item label="存储地点" prop="warehouseId">
-            <el-select
-              v-model="formData.warehouseId"
-              filterable
-              remote
-              :disabled="
-                isFormDisabled || (formData.businessType ? false : true)
-              "
-              reserve-keyword
-              placeholder="请输入存储地点"
-              :remote-method="remoteWarehouse"
-              :loading="loadingWarehouse"
-            >
-              <el-option
-                v-for="item in warehouseList"
-                :key="item.erpId"
-                :label="item.name"
-                :value="item.erpId"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="状态" prop="status" aria-disabled="true">
-            <el-select
-              v-model="formData.status"
-              disabled
-              placeholder="请选择状态"
-            >
-              <el-option
-                v-for="dict in getDictDatas('in_out_status')"
-                :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-      </el-row>
-    </el-form>
     <el-tabs v-model="activeName" @tab-click="handleClick">
       <el-tab-pane label="明细信息" name="detail">
+        <el-form
+          ref="formRef"
+          v-loading="formLoading"
+          :model="formData"
+          :rules="formRules"
+          label-width="150px"
+        >
+          <el-row :gutter="20">
+            <el-col :span="12"
+              ><el-form-item label="业务类型" prop="businessType">
+                <el-select
+                  v-model="formData.businessType"
+                  placeholder="请选择业务类型"
+                  :disabled="!isEditable"
+                  @change="changeBusinessType"
+                >
+                  <el-option
+                    v-for="dict in getDictDatas('inout_business_type')"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  />
+                </el-select> </el-form-item
+            ></el-col>
+            <el-col :span="12">
+              <el-form-item label="申请单号" prop="remark">
+                <el-input
+                  v-model="formData.requestNo"
+                  :disabled="true"
+                  placeholder="保存后自动生成"
+                /> </el-form-item
+            ></el-col>
+            <el-col :span="12">
+              <el-form-item label="部门" prop="deptCode">
+                <DepartMentSelect
+                  ref="departMentSelect"
+                  v-model="formData.deptCode"
+                  :disabled="isFormDisabled || !formData.businessType"
+                  placeholder="请选择部门"
+                  clearable
+                  @change="selectDepart"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12"
+              ><el-form-item label="业务分类名称" prop="businessDescribe">
+                <el-select
+                  v-model="formData.businessDescribe"
+                  :disabled="
+                    isFormDisabled || (formData.businessType ? false : true)
+                  "
+                  placeholder="请选择业务类型"
+                  @change="changeBusinessDescribe"
+                >
+                  <el-option
+                    v-for="dict in businessDescribeList"
+                    :key="dict.label"
+                    :label="dict.label"
+                    :value="dict.label"
+                  />
+                </el-select> </el-form-item
+            ></el-col>
+
+            <el-col :span="12"
+              ><el-form-item label="优先级" prop="priority">
+                <el-select
+                  v-model="formData.priority"
+                  :disabled="
+                    isFormDisabled || (formData.businessType ? false : true)
+                  "
+                  placeholder="请选择优先级"
+                >
+                  <el-option
+                    v-for="dict in getDictDatas('priority')"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="供应商编码" prop="supplierCode">
+                <el-input
+                  v-model="formData.supplierCode"
+                  :disabled="
+                    isFormDisabled || (formData.businessType ? false : true)
+                  "
+                  placeholder="请输入供应商编码"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="客户编码" prop="customerCode">
+                <el-input
+                  v-model="formData.customerCode"
+                  :disabled="
+                    isFormDisabled || (formData.businessType ? false : true)
+                  "
+                  placeholder="请输入客户编码"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="源单编号" prop="sourceOrderNo">
+                <el-select
+                  v-model="formData.sourceOrderNo"
+                  filterable
+                  remote
+                  :disabled="
+                    isFormDisabled || (formData.businessType ? false : true)
+                  "
+                  reserve-keyword
+                  placeholder="请输入源单编号"
+                  :remote-method="remoteMethod"
+                  :loading="loadingSourceOrder"
+                  @change="changeSourceOrderNo"
+                >
+                  <el-option
+                    v-for="item in sourceOrderNoList"
+                    :key="item.sourceOrderNo"
+                    :label="item.sourceOrderNo"
+                    :value="item.sourceOrderNo"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="预计出入库时间" prop="expectedTime">
+                <el-date-picker
+                  v-model="formData.expectedTime"
+                  :disabled="
+                    isFormDisabled || (formData.businessType ? false : true)
+                  "
+                  clearable
+                  type="date"
+                  value-format="timestamp"
+                  placeholder="选择预计出入库时间"
+                /> </el-form-item
+            ></el-col>
+            <el-col :span="12">
+              <el-form-item label="实际出入库时间" prop="actualTime">
+                <el-date-picker
+                  v-model="formData.actualTime"
+                  clearable
+                  :disabled="true"
+                  type="date"
+                  value-format="timestamp"
+                  placeholder="选择实际出入库时间"
+                /> </el-form-item
+            ></el-col>
+            <el-col :span="12">
+              <el-form-item label="备注" prop="remark">
+                <el-input
+                  v-model="formData.remark"
+                  :disabled="
+                    isFormDisabled || (formData.businessType ? false : true)
+                  "
+                  placeholder="请输入备注"
+                /> </el-form-item
+            ></el-col>
+            <el-col :span="12">
+              <el-form-item label="存储地点" prop="warehouseId">
+                <el-select
+                  v-model="formData.warehouseId"
+                  filterable
+                  remote
+                  :disabled="
+                    isFormDisabled || (formData.businessType ? false : true)
+                  "
+                  reserve-keyword
+                  placeholder="请输入存储地点"
+                  :remote-method="remoteWarehouse"
+                  :loading="loadingWarehouse"
+                >
+                  <el-option
+                    v-for="item in warehouseList"
+                    :key="item.erpId"
+                    :label="item.name"
+                    :value="item.erpId"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="状态" prop="status" aria-disabled="true">
+                <el-select
+                  v-model="formData.status"
+                  disabled
+                  placeholder="请选择状态"
+                >
+                  <el-option
+                    v-for="dict in getDictDatas('in_out_status')"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <!-- <el-tabs v-model="activeName" @tab-click="handleClick">
+      <el-tab-pane label="明细信息" name="detail"> -->
         <el-table :data="formData.list" border size="mini">
           <el-table-column
             label="源单编号"
@@ -826,7 +826,7 @@ export default {
       // 状态变化
       this.$set(this.formData, "status", "1");
 
-      //重新获取数据
+      // 重新获取数据
       const res = await InRequestApi.getInRequest(this.formData.id);
       this.formData.bpmInstanceId = res.data.bpmInstanceId;
     },
@@ -846,8 +846,8 @@ export default {
       // 检查是否存在工作流实例ID
       if (this.formData.bpmInstanceId) {
         // 如果存在工作流实例,跳转到审批任务tab页
-        this.activeName = 'approvalTask';
-        this.$modal.msgWarning('请在审批任务页面完成审核!');
+        this.activeName = "approvalTask";
+        this.$modal.msgWarning("请在审批任务页面完成审核!");
         return;
       }